Merge "Set wgScript in LinkerTest"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Tue, 24 Jun 2014 11:53:29 +0000 (11:53 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Tue, 24 Jun 2014 11:53:29 +0000 (11:53 +0000)
63 files changed:
RELEASE-NOTES-1.24
docs/hooks.txt
includes/AutoLoader.php
includes/EditPage.php
includes/GlobalFunctions.php
includes/OutputPage.php
includes/PrefixSearch.php
includes/api/ApiParse.php
includes/api/ApiQuerySiteinfo.php
includes/cache/MessageCache.php
includes/config/GlobalVarConfig.php
includes/context/DerivativeContext.php
includes/context/RequestContext.php
includes/deferred/SearchUpdate.php
includes/installer/LocalSettingsGenerator.php
includes/installer/i18n/et.json
includes/installer/i18n/tr.json
includes/page/Article.php
includes/parser/Parser.php
includes/parser/ParserDiffTest.php [new file with mode: 0644]
includes/parser/Parser_DiffTest.php [deleted file]
includes/search/SearchDatabase.php
includes/search/SearchEngine.php
includes/specialpage/SpecialPage.php
includes/specialpage/SpecialPageFactory.php
includes/specials/SpecialMIMEsearch.php
includes/specials/SpecialSearch.php
languages/i18n/ar.json
languages/i18n/be-tarask.json
languages/i18n/be.json
languages/i18n/bho.json
languages/i18n/eo.json
languages/i18n/es.json
languages/i18n/et.json
languages/i18n/fr.json
languages/i18n/he.json
languages/i18n/hr.json
languages/i18n/id.json
languages/i18n/it.json
languages/i18n/ja.json
languages/i18n/krc.json
languages/i18n/la.json
languages/i18n/pt.json
languages/i18n/roa-tara.json
languages/i18n/sco.json
languages/i18n/sl.json
languages/i18n/sr-ec.json
languages/i18n/sr-el.json
languages/i18n/sv.json
languages/i18n/tr.json
languages/i18n/vi.json
languages/i18n/zh-hans.json
maintenance/archives/patch-uploadstash.sql
maintenance/findHooks.php
maintenance/importImages.php
maintenance/mssql/tables.sql
maintenance/tables.sql
resources/src/mediawiki.skinning/content.parsoid.less
tests/parser/parserTest.inc
tests/parser/parserTests.txt
tests/phpunit/includes/parser/NewParserTest.php
tests/phpunit/includes/specials/SpecialMIMESearchTest.php [new file with mode: 0644]
tests/testHelpers.inc

index 4f0ae21..8e290b1 100644 (file)
@@ -170,9 +170,11 @@ changes to languages because of Bugzilla reports.
 * ResourceLoaderFileModule#getAllStyleFiles now returns all style files and all
   skin style files used by the module.
 * Removed getLang() from IContextSource and subclasses. (deprecated since 1.19)
+* Removed setLang() from subclasses of IContextSource. (deprecated since 1.19)
 * Removed WebRequest::escapeAppendQuery(). (deprecated since 1.20)
 * Removed info(), purge(), revert() and rollback() from the Article class; they
   have since become subclasses of the Action class. (deprecated since 1.19)
+* SearchEngineReplacePrefixesComplete hook was removed.
 
 ==== Renamed classes ====
 * CLDRPluralRuleConverter_Expression to CLDRPluralRuleConverterExpression
@@ -181,6 +183,7 @@ changes to languages because of Bugzilla reports.
 * CLDRPluralRuleEvaluator_Range to CLDRPluralRuleEvaluatorRange
 * CSSJanus_Tokenizer to CSSJanusTokenizer
 * MediaWiki_I18N to MediaWikiI18N
+* Parser_DiffTest to ParserDiffTest
 * RevDel_ArchiveItem to RevDelArchiveItem
 * RevDel_ArchiveList to RevDelArchiveList
 * RevDel_ArchivedFileItem to RevDelArchivedFileItem
index 80ac174..8d7e654 100644 (file)
@@ -2095,7 +2095,7 @@ $article: the page the form is shown for
 $out: OutputPage object
 
 'RawPageViewBeforeOutput': Right before the text is blown out in action=raw.
-&$obj: RawPage object
+&$obj: RawAction object
 &$text: The text that's going to be the output
 
 'RecentChange_save': Called at the end of RecentChange::save().
@@ -2182,12 +2182,6 @@ searches.
 $term : Search term string
 &$title : Current Title object that is being returned (null if none found).
 
-'SearchEngineReplacePrefixesComplete': Run after SearchEngine::replacePrefixes().
-$searchEngine : The SearchEngine object. Users of this hooks will be interested
-in the $searchEngine->namespaces array.
-$query : Original query.
-&$parsed : Resultant query with the prefixes stripped.
-
 'SearchResultInitFromTitle': Set the revision used when displaying a page in
 search results.
 $title : Current Title object being displayed in search results.
index 94264ae..3ac4722 100644 (file)
@@ -830,7 +830,7 @@ $wgAutoloadLocalClasses = array(
        'ParserCache' => 'includes/parser/ParserCache.php',
        'ParserOptions' => 'includes/parser/ParserOptions.php',
        'ParserOutput' => 'includes/parser/ParserOutput.php',
-       'Parser_DiffTest' => 'includes/parser/Parser_DiffTest.php',
+       'ParserDiffTest' => 'includes/parser/ParserDiffTest.php',
        'Preprocessor' => 'includes/parser/Preprocessor.php',
        'Preprocessor_DOM' => 'includes/parser/Preprocessor_DOM.php',
        'Preprocessor_Hash' => 'includes/parser/Preprocessor_Hash.php',
index 98e0ec4..480671a 100644 (file)
@@ -3555,7 +3555,7 @@ HTML
 
                        $previewHTML = $parserOutput->getText();
                        $this->mParserOutput = $parserOutput;
-                       $wgOut->addParserOutputNoText( $parserOutput );
+                       $wgOut->addParserOutputMetadata( $parserOutput );
 
                        if ( count( $parserOutput->getWarnings() ) ) {
                                $note .= "\n\n" . implode( "\n\n", $parserOutput->getWarnings() );
index 49d07b6..ce5f8a3 100644 (file)
@@ -3068,7 +3068,7 @@ function wfShellExec( $cmd, &$retval = null, $environ = array(),
  * @param array $environ optional environment variables which should be
  *   added to the executed command environment.
  * @param array $limits Optional array with limits(filesize, memory, time, walltime)
- *   this overwrites the global wgShellMax* limits.
+ *   this overwrites the global wgMaxShell* limits.
  * @return string Collected stdout and stderr as a string
  */
 function wfShellExecWithStderr( $cmd, &$retval = null, $environ = array(), $limits = array() ) {
index 612dc32..a2b8920 100644 (file)
@@ -1627,7 +1627,6 @@ class OutputPage extends ContextSource {
         * @param ParserOutput $parserOutput
         */
        public function addParserOutputNoText( &$parserOutput ) {
-               wfDeprecated( __METHOD__, '1.24' );
                $this->addParserOutputMetadata( $parserOutput );
        }
 
index 31bc600..13696ad 100644 (file)
@@ -51,33 +51,32 @@ abstract class PrefixSearch {
         */
        public function search( $search, $limit, $namespaces = array() ) {
                $search = trim( $search );
-               if ( $search === '' ) {
-                       return array();
+               if ( $search == '' ) {
+                       return array(); // Return empty result
                }
-
                $namespaces = $this->validateNamespaces( $namespaces );
 
-               // Is this a namespace prefix? Start listing all pages in it.
-               $title = Title::newFromText( $search . 'Dummy' );
-               if ( $title
-                       && $title->getText() === 'Dummy'
-                       && !$title->inNamespace( NS_MAIN )
-                       && !$title->isExternal()
-               ) {
-                       $this->searchBackend( array( $title->getNamespace() ), '', $limit );
+               // Find a Title which is not an interwiki and is in NS_MAIN
+               $title = Title::newFromText( $search );
+               if ( $title && !$title->isExternal() ) {
+                       $ns = array( $title->getNamespace() );
+                       if ( $ns[0] == NS_MAIN ) {
+                               $ns = $namespaces; // no explicit prefix, use default namespaces
+                       }
+                       return $this->searchBackend(
+                               $ns, $title->getText(), $limit );
                }
 
-               // Explicit namespace prefix? Limit search to that namespace.
-               $title = Title::newFromText( $search );
-               if ( $title
-                       && !$title->isExternal()
-                       && !$title->inNamespace( NS_MAIN )
-               {
-                       // This will convert first letter to uppercase if appropriate for the namespace
-                       $this->searchBackend( array( $title->getNamespace() ), $title->getText(), $limit );
+               // Is this a namespace prefix?
+               $title = Title::newFromText( $search . 'Dummy' );
+               if ( $title && $title->getText() == 'Dummy'
+                       && $title->getNamespace() != NS_MAIN
+                       && !$title->isExternal() )
+               {
+                       $namespaces = array( $title->getNamespace() );
+                       $search = '';
                }
 
-               // Search in all requested namespaces
                return $this->searchBackend( $namespaces, $search, $limit );
        }
 
@@ -236,33 +235,28 @@ abstract class PrefixSearch {
         * @return array Array of Title objects
         */
        protected function defaultSearchBackend( $namespaces, $search, $limit ) {
-               $dbr = wfGetDB( DB_SLAVE );
-
-               // Construct suitable prefix for each namespace, they might differ
-               $prefixes = array();
-               foreach ( $namespaces as $ns ) {
-                       $title = Title::makeTitleSafe( $ns, $search );
-                       $prefix = $title ? $title->getDBkey() : '';
-                       $prefixes[$prefix][] = $ns;
-               }
-
-               $conds = array();
-               foreach ( $prefixes as $prefix => $nss ) {
-                       $conds[] = $dbr->makeList( array(
-                               'page_namespace' => $nss,
-                               'page_title' . $dbr->buildLike( $prefix, $dbr->anyString() ),
-                       ), LIST_AND );
+               $ns = array_shift( $namespaces ); // support only one namespace
+               if ( in_array( NS_MAIN, $namespaces ) ) {
+                       $ns = NS_MAIN; // if searching on many always default to main
                }
 
+               $t = Title::newFromText( $search, $ns );
+               $prefix = $t ? $t->getDBkey() : '';
+               $dbr = wfGetDB( DB_SLAVE );
                $res = $dbr->select( 'page',
                        array( 'page_id', 'page_namespace', 'page_title' ),
-                       $dbr->makeList( $conds, LIST_OR ),
+                       array(
+                               'page_namespace' => $ns,
+                               'page_title ' . $dbr->buildLike( $prefix, $dbr->anyString() )
+                       ),
                        __METHOD__,
                        array( 'LIMIT' => $limit, 'ORDER BY' => 'page_title' )
                );
-
-               // Shorter than a loop, and doesn't break class api
-               return iterator_to_array( TitleArray::newFromResult( $res ) );
+               $srchres = array();
+               foreach ( $res as $row ) {
+                       $srchres[] = Title::newFromRow( $row );
+               }
+               return $srchres;
        }
 
        /**
index a276117..9dc4d03 100644 (file)
@@ -325,7 +325,7 @@ class ApiParse extends ApiBase {
                if ( isset( $prop['headitems'] ) || isset( $prop['headhtml'] ) ) {
                        $context = $this->getContext();
                        $context->setTitle( $titleObj );
-                       $context->getOutput()->addParserOutputNoText( $p_result );
+                       $context->getOutput()->addParserOutputMetadata( $p_result );
 
                        if ( isset( $prop['headitems'] ) ) {
                                $headItems = $this->formatHeadItems( $p_result->getHeadItems() );
@@ -436,6 +436,7 @@ class ApiParse extends ApiBase {
                $popts->enableLimitReport( !$params['disablepp'] );
                $popts->setIsPreview( $params['preview'] || $params['sectionpreview'] );
                $popts->setIsSectionPreview( $params['sectionpreview'] );
+               $popts->setEditSection( !$params['disableeditsection'] );
 
                wfProfileOut( __METHOD__ );
 
@@ -748,6 +749,7 @@ class ApiParse extends ApiBase {
                        'uselang' => null,
                        'section' => null,
                        'disablepp' => false,
+                       'disableeditsection' => false,
                        'generatexml' => false,
                        'preview' => false,
                        'sectionpreview' => false,
@@ -816,6 +818,7 @@ class ApiParse extends ApiBase {
                        'uselang' => 'Which language to parse the request in',
                        'section' => 'Only retrieve the content of this section number',
                        'disablepp' => 'Disable the PP Report from the parser output',
+                       'disableeditsection' => 'Disable edit section links from the parser output',
                        'generatexml' => "Generate XML parse tree (requires contentmodel=$wikitext)",
                        'preview' => 'Parse in preview mode',
                        'sectionpreview' => 'Parse in section preview mode (enables preview mode too)',
index a420b37..aacf091 100644 (file)
@@ -385,6 +385,7 @@ class ApiQuerySiteinfo extends ApiQueryBase {
 
                $getPrefixes = Interwiki::getAllPrefixes( $local );
                $extraLangPrefixes = $this->getConfig()->get( 'ExtraInterlanguageLinkPrefixes' );
+               $localInterwikis = $this->getConfig()->get( 'LocalInterwikis' );
                $data = array();
 
                foreach ( $getPrefixes as $row ) {
@@ -401,6 +402,9 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                        if ( isset( $langNames[$prefix] ) ) {
                                $val['language'] = $langNames[$prefix];
                        }
+                       if ( in_array( $prefix, $localInterwikis ) ) {
+                               $val['localinterwiki'] = '';
+                       }
                        if ( in_array( $prefix, $extraLangPrefixes ) ) {
                                $val['extralanglink'] = '';
 
index a3cf87e..e5afd21 100644 (file)
@@ -1025,7 +1025,7 @@ class MessageCache {
                        $wgParser->firstCallInit();
                        # Clone it and store it
                        $class = $wgParserConf['class'];
-                       if ( $class == 'Parser_DiffTest' ) {
+                       if ( $class == 'ParserDiffTest' ) {
                                # Uncloneable
                                $this->mParser = new $class( $wgParserConf );
                        } else {
index 61a76b7..0d7f3f0 100644 (file)
@@ -69,7 +69,7 @@ class GlobalVarConfig implements Config {
         */
        protected function getWithPrefix( $prefix, $name ) {
                $var = $prefix . $name;
-               if ( !isset( $GLOBALS[ $var ] ) ) {
+               if ( !array_key_exists( $var, $GLOBALS ) ) {
                        throw new ConfigException( __METHOD__ . ": undefined variable: '$var'" );
                }
                return $GLOBALS[ $var ];
index edf9e1d..f550e9e 100644 (file)
@@ -237,17 +237,6 @@ class DerivativeContext extends ContextSource {
                }
        }
 
-       /**
-        * Set the Language object
-        *
-        * @deprecated since 1.19 Use setLanguage instead
-        * @param Language|string $l Language instance or language code
-        */
-       public function setLang( $l ) {
-               wfDeprecated( __METHOD__, '1.19' );
-               $this->setLanguage( $l );
-       }
-
        /**
         * Set the Language object
         *
index 1754a9d..cb137fe 100644 (file)
@@ -268,17 +268,6 @@ class RequestContext implements IContextSource {
                return $code;
        }
 
-       /**
-        * Set the Language object
-        *
-        * @deprecated since 1.19 Use setLanguage instead
-        * @param Language|string $l Language instance or language code
-        */
-       public function setLang( $l ) {
-               wfDeprecated( __METHOD__, '1.19' );
-               $this->setLanguage( $l );
-       }
-
        /**
         * Set the Language object
         *
index 9ae9034..20f348a 100644 (file)
@@ -81,10 +81,10 @@ class SearchUpdate implements DeferrableUpdate {
                wfProfileIn( __METHOD__ );
 
                $page = WikiPage::newFromId( $this->id, WikiPage::READ_LATEST );
-               $indexTitle = $this->indexTitle();
 
                foreach ( SearchEngine::getSearchTypes() as $type ) {
                        $search = SearchEngine::create( $type );
+                       $indexTitle = $this->indexTitle( $search );
                        if ( !$search->supports( 'search-update' ) ) {
                                continue;
                        }
@@ -181,13 +181,13 @@ class SearchUpdate implements DeferrableUpdate {
         *
         * @return string A stripped-down title string ready for the search index
         */
-       private function indexTitle() {
+       private function indexTitle( SearchEngine $search ) {
                global $wgContLang;
 
                $ns = $this->title->getNamespace();
                $title = $this->title->getText();
 
-               $lc = SearchEngine::legalSearchChars() . '&#;';
+               $lc = $search->legalSearchChars() . '&#;';
                $t = $wgContLang->normalizeForSearch( $title );
                $t = preg_replace( "/[^{$lc}]+/", ' ', $t );
                $t = $wgContLang->lc( $t );
index 5e89ca4..3c8a5b1 100644 (file)
@@ -221,9 +221,12 @@ class LocalSettingsGenerator {
                                                wfBoolToStr( $perm ) . ";\n";
                                }
                        }
-                       if ( $this->groupPermissions['*']['edit'] === false
-                               && $this->groupPermissions['*']['createaccount'] === false
-                               && $this->groupPermissions['*']['read'] !== false
+                       if ( ( isset( $this->groupPermissions['*']['edit'] ) &&
+                                       $this->groupPermissions['*']['edit'] === false )
+                               && ( isset( $this->groupPermissions['*']['createaccount'] ) &&
+                                       $this->groupPermissions['*']['createaccount'] === false )
+                               && ( isset( $this->groupPermissions['*']['read'] ) &&
+                                       $this->groupPermissions['*']['read'] !== false )
                        ) {
                                $noFollow = "\n# Set \$wgNoFollowLinks to true if you open up your wiki to editing by\n"
                                        . "# the general public and wish to apply nofollow to external links as a\n"
index 1c46557..13b61ed 100644 (file)
@@ -32,7 +32,7 @@
        "config-db-port": "Andmebaasi port:",
        "config-invalid-db-type": "Vigane andmebaasi tüüp",
        "config-site-name": "Viki nimi:",
-       "config-site-name-blank": "Sisestage lehekülje nimi.",
+       "config-site-name-blank": "Sisesta võrgukoha nimi.",
        "config-project-namespace": "Projekti nimeruum:",
        "config-ns-generic": "Projekt",
        "config-admin-box": "Administraatorikonto",
index 2ff58ab..6ec8860 100644 (file)
@@ -72,6 +72,7 @@
        "config-db-install-account": "Yükleme için kullanıcı hesabı",
        "config-db-username": "Veritabanı kullanıcı adı:",
        "config-db-password": "Veritabanı parolası:",
+       "config-db-username-empty": "\"{{int:config-db-username}}\" için bir değer girmelisiniz.",
        "config-db-install-username": "Yükleme sırasında veritabanına bağlanmak için kullanılan kullanıcı adını girin.\nBu MediaWiki hesabının kullanıcı adı değildir; Bu veritabanın kullanıcı adıdır.",
        "config-db-wiki-account": "Kullanıcı hesabı için normal işlem",
        "config-db-prefix": "Veritabanı Tablo öneki:",
        "config-enable-email": "Giden e-posta etkinleştirme",
        "config-email-user": "Kullanıcıdan kullanıcıya e-posta gönderimini etkinleştir",
        "config-email-user-help": "Eğer tercihlerinde etkinleştirmişlerse, kullanıcıların birbirlerine e-posta göndermesine izin ver.",
+       "config-email-usertalk": "Kullanıcı mesaj sayfası bildirimlerini etkinleştir",
        "config-email-watchlist": "Watchlist bildirimini etkinleştirmek",
        "config-email-auth": "E-posta kimlik doğrulamasını etkinleştir",
        "config-email-sender": "E-posta adresini ayarlayın",
index c68c675..3244d87 100644 (file)
@@ -1330,7 +1330,7 @@ class Article implements Page {
                $outputPage = $this->getContext()->getOutput();
                $outputPage->addSubtitle( "<div id=\"mw-{$infomsg}\">" . wfMessage( $infomsg,
                        $td )->rawParams( $userlinks )->params( $revision->getID(), $tddate,
-                       $tdtime, $revision->getUser() )->rawParams( Linker::revComment( $revision, true, true ) )->parse() . "</div>" );
+                       $tdtime, $revision->getUserText() )->rawParams( Linker::revComment( $revision, true, true ) )->parse() . "</div>" );
 
                $lnk = $current
                        ? wfMessage( 'currentrevisionlink' )->escaped()
index 236b999..61fd9cc 100644 (file)
@@ -5339,7 +5339,7 @@ class Parser {
                                                        } else {
                                                                $localLinkTitle = Title::newFromText( $linkValue );
                                                                if ( $localLinkTitle !== null ) {
-                                                                       $link = $localLinkTitle->getLocalURL();
+                                                                       $link = $localLinkTitle->getLinkURL();
                                                                }
                                                        }
                                                        break;
diff --git a/includes/parser/ParserDiffTest.php b/includes/parser/ParserDiffTest.php
new file mode 100644 (file)
index 0000000..2db0597
--- /dev/null
@@ -0,0 +1,143 @@
+<?php
+/**
+ * Fake parser that output the difference of two different parsers
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Parser
+ */
+
+/**
+ * @ingroup Parser
+ */
+class ParserDiffTest
+{
+       var $parsers, $conf;
+       var $shortOutput = false;
+
+       var $dtUniqPrefix;
+
+       function __construct( $conf ) {
+               if ( !isset( $conf['parsers'] ) ) {
+                       throw new MWException( __METHOD__ . ': no parsers specified' );
+               }
+               $this->conf = $conf;
+       }
+
+       function init() {
+               if ( !is_null( $this->parsers ) ) {
+                       return;
+               }
+
+               global $wgHooks;
+               static $doneHook = false;
+               if ( !$doneHook ) {
+                       $doneHook = true;
+                       $wgHooks['ParserClearState'][] = array( $this, 'onClearState' );
+               }
+               if ( isset( $this->conf['shortOutput'] ) ) {
+                       $this->shortOutput = $this->conf['shortOutput'];
+               }
+
+               foreach ( $this->conf['parsers'] as $i => $parserConf ) {
+                       if ( !is_array( $parserConf ) ) {
+                               $class = $parserConf;
+                               $parserConf = array( 'class' => $parserConf );
+                       } else {
+                               $class = $parserConf['class'];
+                       }
+                       $this->parsers[$i] = new $class( $parserConf );
+               }
+       }
+
+       function __call( $name, $args ) {
+               $this->init();
+               $results = array();
+               $mismatch = false;
+               $lastResult = null;
+               $first = true;
+               foreach ( $this->parsers as $i => $parser ) {
+                       $currentResult = call_user_func_array( array( &$this->parsers[$i], $name ), $args );
+                       if ( $first ) {
+                               $first = false;
+                       } else {
+                               if ( is_object( $lastResult ) ) {
+                                       if ( $lastResult != $currentResult ) {
+                                               $mismatch = true;
+                                       }
+                               } else {
+                                       if ( $lastResult !== $currentResult ) {
+                                               $mismatch = true;
+                                       }
+                               }
+                       }
+                       $results[$i] = $currentResult;
+                       $lastResult = $currentResult;
+               }
+               if ( $mismatch ) {
+                       if ( count( $results ) == 2 ) {
+                               $resultsList = array();
+                               foreach ( $this->parsers as $i => $parser ) {
+                                       $resultsList[] = var_export( $results[$i], true );
+                               }
+                               $diff = wfDiff( $resultsList[0], $resultsList[1] );
+                       } else {
+                               $diff = '[too many parsers]';
+                       }
+                       $msg = "ParserDiffTest: results mismatch on call to $name\n";
+                       if ( !$this->shortOutput ) {
+                               $msg .= 'Arguments: ' . $this->formatArray( $args ) . "\n";
+                       }
+                       $msg .= 'Results: ' . $this->formatArray( $results ) . "\n" .
+                               "Diff: $diff\n";
+                       throw new MWException( $msg );
+               }
+               return $lastResult;
+       }
+
+       function formatArray( $array ) {
+               if ( $this->shortOutput ) {
+                       foreach ( $array as $key => $value ) {
+                               if ( $value instanceof ParserOutput ) {
+                                       $array[$key] = "ParserOutput: {$value->getText()}";
+                               }
+                       }
+               }
+               return var_export( $array, true );
+       }
+
+       function setFunctionHook( $id, $callback, $flags = 0 ) {
+               $this->init();
+               foreach ( $this->parsers as $parser ) {
+                       $parser->setFunctionHook( $id, $callback, $flags );
+               }
+       }
+
+       /**
+        * @param Parser $parser
+        * @return bool
+        */
+       function onClearState( &$parser ) {
+               // hack marker prefixes to get identical output
+               if ( !isset( $this->dtUniqPrefix ) ) {
+                       $this->dtUniqPrefix = $parser->uniqPrefix();
+               } else {
+                       $parser->mUniqPrefix = $this->dtUniqPrefix;
+               }
+               return true;
+       }
+}
diff --git a/includes/parser/Parser_DiffTest.php b/includes/parser/Parser_DiffTest.php
deleted file mode 100644 (file)
index 920b6f6..0000000
+++ /dev/null
@@ -1,143 +0,0 @@
-<?php
-/**
- * Fake parser that output the difference of two different parsers
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup Parser
- */
-
-/**
- * @ingroup Parser
- */
-class Parser_DiffTest
-{
-       var $parsers, $conf;
-       var $shortOutput = false;
-
-       var $dtUniqPrefix;
-
-       function __construct( $conf ) {
-               if ( !isset( $conf['parsers'] ) ) {
-                       throw new MWException( __METHOD__ . ': no parsers specified' );
-               }
-               $this->conf = $conf;
-       }
-
-       function init() {
-               if ( !is_null( $this->parsers ) ) {
-                       return;
-               }
-
-               global $wgHooks;
-               static $doneHook = false;
-               if ( !$doneHook ) {
-                       $doneHook = true;
-                       $wgHooks['ParserClearState'][] = array( $this, 'onClearState' );
-               }
-               if ( isset( $this->conf['shortOutput'] ) ) {
-                       $this->shortOutput = $this->conf['shortOutput'];
-               }
-
-               foreach ( $this->conf['parsers'] as $i => $parserConf ) {
-                       if ( !is_array( $parserConf ) ) {
-                               $class = $parserConf;
-                               $parserConf = array( 'class' => $parserConf );
-                       } else {
-                               $class = $parserConf['class'];
-                       }
-                       $this->parsers[$i] = new $class( $parserConf );
-               }
-       }
-
-       function __call( $name, $args ) {
-               $this->init();
-               $results = array();
-               $mismatch = false;
-               $lastResult = null;
-               $first = true;
-               foreach ( $this->parsers as $i => $parser ) {
-                       $currentResult = call_user_func_array( array( &$this->parsers[$i], $name ), $args );
-                       if ( $first ) {
-                               $first = false;
-                       } else {
-                               if ( is_object( $lastResult ) ) {
-                                       if ( $lastResult != $currentResult ) {
-                                               $mismatch = true;
-                                       }
-                               } else {
-                                       if ( $lastResult !== $currentResult ) {
-                                               $mismatch = true;
-                                       }
-                               }
-                       }
-                       $results[$i] = $currentResult;
-                       $lastResult = $currentResult;
-               }
-               if ( $mismatch ) {
-                       if ( count( $results ) == 2 ) {
-                               $resultsList = array();
-                               foreach ( $this->parsers as $i => $parser ) {
-                                       $resultsList[] = var_export( $results[$i], true );
-                               }
-                               $diff = wfDiff( $resultsList[0], $resultsList[1] );
-                       } else {
-                               $diff = '[too many parsers]';
-                       }
-                       $msg = "Parser_DiffTest: results mismatch on call to $name\n";
-                       if ( !$this->shortOutput ) {
-                               $msg .= 'Arguments: ' . $this->formatArray( $args ) . "\n";
-                       }
-                       $msg .= 'Results: ' . $this->formatArray( $results ) . "\n" .
-                               "Diff: $diff\n";
-                       throw new MWException( $msg );
-               }
-               return $lastResult;
-       }
-
-       function formatArray( $array ) {
-               if ( $this->shortOutput ) {
-                       foreach ( $array as $key => $value ) {
-                               if ( $value instanceof ParserOutput ) {
-                                       $array[$key] = "ParserOutput: {$value->getText()}";
-                               }
-                       }
-               }
-               return var_export( $array, true );
-       }
-
-       function setFunctionHook( $id, $callback, $flags = 0 ) {
-               $this->init();
-               foreach ( $this->parsers as $parser ) {
-                       $parser->setFunctionHook( $id, $callback, $flags );
-               }
-       }
-
-       /**
-        * @param Parser $parser
-        * @return bool
-        */
-       function onClearState( &$parser ) {
-               // hack marker prefixes to get identical output
-               if ( !isset( $this->dtUniqPrefix ) ) {
-                       $this->dtUniqPrefix = $parser->uniqPrefix();
-               } else {
-                       $parser->mUniqPrefix = $this->dtUniqPrefix;
-               }
-               return true;
-       }
-}
index e3aafe8..82d0907 100644 (file)
@@ -43,4 +43,15 @@ class SearchDatabase extends SearchEngine {
                        $this->db = wfGetDB( DB_SLAVE );
                }
        }
+
+       /**
+        * Return a 'cleaned up' search string
+        *
+        * @param string $text
+        * @return string
+        */
+       protected function filter( $text ) {
+               $lc = $this->legalSearchChars();
+               return trim( preg_replace( "/[^{$lc}]/", " ", $text ) );
+       }
 }
index 3a3baef..56bb0ac 100644 (file)
@@ -318,7 +318,6 @@ class SearchEngine {
 
                $parsed = $query;
                if ( strpos( $query, ':' ) === false ) { // nothing to do
-                       wfRunHooks( 'SearchEngineReplacePrefixesComplete', array( $this, $query, &$parsed ) );
                        return $parsed;
                }
 
@@ -338,8 +337,6 @@ class SearchEngine {
                        $parsed = $query; // prefix was the whole query
                }
 
-               wfRunHooks( 'SearchEngineReplacePrefixesComplete', array( $this, $query, &$parsed ) );
-
                return $parsed;
        }
 
@@ -419,17 +416,6 @@ class SearchEngine {
                return $formatted;
        }
 
-       /**
-        * Return a 'cleaned up' search string
-        *
-        * @param string $text
-        * @return string
-        */
-       function filter( $text ) {
-               $lc = $this->legalSearchChars();
-               return trim( preg_replace( "/[^{$lc}]/", " ", $text ) );
-       }
-
        /**
         * Load up the appropriate search engine class for the currently
         * active database backend, and return a configured instance.
index ec8635c..c062e27 100644 (file)
@@ -131,19 +131,6 @@ class SpecialPage {
                return $this->mRestriction;
        }
 
-       /**
-        * Get the file which will be included by SpecialPage::execute() if your extension is
-        * still stuck in the past and hasn't overridden the execute() method.  No modern code
-        * should want or need to know this.
-        * @return string
-        * @deprecated since 1.18
-        */
-       function getFile() {
-               wfDeprecated( __METHOD__, '1.18' );
-
-               return $this->mFile;
-       }
-
        // @todo FIXME: Decide which syntax to use for this, and stick to it
        /**
         * Whether this special page is listed in Special:SpecialPages
index 58ca959..0ee7f09 100644 (file)
@@ -347,10 +347,10 @@ class SpecialPageFactory {
 
                                return new $className;
                        } elseif ( is_array( $rec ) ) {
+                               $className = array_shift( $rec );
                                // @deprecated, officially since 1.18, unofficially since forever
-                               wfDeprecated( "Array syntax for \$wgSpecialPages is deprecated, " .
+                               wfDeprecated( "Array syntax for \$wgSpecialPages is deprecated ($className), " .
                                        "define a subclass of SpecialPage instead.", '1.18' );
-                               $className = array_shift( $rec );
                                self::getList()->$realName = MWFunction::newObj( $className, $rec );
                        }
 
index cb9dac9..4d9e7da 100644 (file)
@@ -85,8 +85,8 @@ class MIMEsearchPage extends QueryPage {
                                        MEDIATYPE_TEXT,
                                        MEDIATYPE_EXECUTABLE,
                                        MEDIATYPE_ARCHIVE,
-                               ) + $minorType,
-                       ),
+                               ),
+                       ) + $minorType,
                );
 
                return $qi;
index 15b93ae..542fc86 100644 (file)
@@ -440,7 +440,7 @@ class SpecialSearch extends SpecialPage {
 
                if ( $title->isKnown() ) {
                        $messageName = 'searchmenu-exists';
-               } elseif ( $title->userCan( 'create', $this->getUser() ) ) {
+               } elseif ( $title->quickUserCan( 'create', $this->getUser() ) ) {
                        $messageName = 'searchmenu-new';
                } else {
                        $messageName = 'searchmenu-new-nocreate';
index ce3a05d..0598325 100644 (file)
        "movepagetalktext": "صفحة النقاش المرفقة سيتم نقلها كذلك، '''إلا في حالة''':\n* توجد صفحة نقاش غير فارغة تحت العنوان الجديد، أو\n* قمت بإزالة اختيار الصندوق بالأسفل.\n\nوفي هذه الحالات، يجب عليك نقل أو دمج محتويات الصفحة يدويا، إذا رغب في ذلك.",
        "movearticle": "انقل الصفحة:",
        "moveuserpage-warning": "'''تحذير: أنت على وشك نقل صفحة مستخدم. من فضلك لاحظ أن الصفحة وحدها سوف تنقل وأن المستخدم لن يعاد تسميته.'''",
-       "movecategorypage-warning": "<strong>تحذير:</strong> أنت على وشك نقل صفحة تصنيف. نرجو التنبه إلى أن ذلك سينقل الصفحة فقط و<em>لن</em>  يعاد تصنيف أي صفحة في التصنيف السابق إلى التصنيف الجديد.",
+       "movecategorypage-warning": "أنت على وشك نقل صفحة التصنيف إلى عنوان جديد؛ لن تنقل الصفحات المندرجة تحت التصنيف إلى العنوان الجديد.",
        "movenologintext": "يجب أن تكون مستخدماً مسجلاً وأن  [[Special:UserLogin|تسجل دخولك]] لكي تنقل صفحة.",
        "movenotallowed": "أنت لا تمتلك الصلاحية لنقل الصفحات.",
        "movenotallowedfile": "أنت لا تمتلك الصلاحية لنقل الملفات.",
index e3242d2..76040e8 100644 (file)
        "mergehistory-empty": "Няма гісторыі рэдагаваньняў, якую магчыма аб'яднаць.",
        "mergehistory-success": "$3 {{PLURAL:$3|вэрсія|вэрсіі|вэрсіяў}} з [[:$1]] пасьпяхова аб’яднаныя ў [[:$2]].",
        "mergehistory-fail": "Не атрымалася аб'яднаць гісторыі старонак. Калі ласка, праверце парамэтры старонкі і часу.",
+       "mergehistory-fail-toobig": "Немагчыма аб’яднаць гісторыю, бо будзе перавышаны ліміт у $1 {{PLURAL:$1|1=вэрсію|вэрсіі|вэрсіяў}}, якія будуць перанесеныя.",
        "mergehistory-no-source": "Не існуе крынічнай старонкі $1.",
        "mergehistory-no-destination": "Не існуе мэтавай старонкі $1.",
        "mergehistory-invalid-source": "Крынічная старонка мусіць мець карэктную назву.",
index 12277e7..9959ded 100644 (file)
        "histlegend": "Выбар розніцы: адзначце радыё-боксы версій, якія трэба параўнаць і націсніце enter або кнопку, што ўнізе.<br /> Тлумачэнне: (з актуальн.) = розніца з актуальнай версіяй, (з папярэд.) = розніца з папярэдняй версіяй, д = дробная праўка.",
        "history-fieldset-title": "Прагляд гісторыі",
        "history-show-deleted": "Толькі выдаленыя",
-       "histfirst": "найстарэйшая",
-       "histlast": "найноўшая",
+       "histfirst": "найстарэйшыя",
+       "histlast": "найноўшыя",
        "historysize": "({{PLURAL:$1|1 байт|$1 байты|$1 байтаў}})",
        "historyempty": "(пуста)",
        "history-feed-title": "Гісторыя версій",
        "autosumm-replace": "Замена старонкі на '$1'",
        "autoredircomment": "Перасылае да [[$1]]",
        "autosumm-new": "Новая старонка: '$1'",
-       "lag-warn-normal": "Змены, зробленыя менш за $1 {{PLURAL:$1|сек.|сек.}} назад, могуць не трапіць у гэты спіс.",
-       "lag-warn-high": "Ð\97 Ð¿Ñ\80Ñ\8bÑ\87Ñ\8bнÑ\8b Ð¼Ð¾Ñ\86нÑ\8bÑ\85 Ð·Ð°Ñ\82Ñ\80Ñ\8bмак Ð½Ð° Ñ\81еÑ\80веÑ\80Ñ\8b Ð±Ð°Ð· Ð´Ð°Ð½Ñ\8bÑ\85, Ð·Ð¼ÐµÐ½Ñ\8b, Ð·Ñ\80обленÑ\8bÑ\8f Ð¿Ð°Ð·Ð½ÐµÐ¹ Ñ\87Ñ\8bм $1 {{PLURAL:$1|Ñ\81ек.|Ñ\81ек.}} назад, могуць не трапіць у гэты спіс.",
+       "lag-warn-normal": "Змены, зробленыя менш за $1 {{PLURAL:$1|сек.|сек.}} таму назад, могуць не трапіць у гэты спіс.",
+       "lag-warn-high": "Ð\97 Ð¿Ñ\80Ñ\8bÑ\87Ñ\8bнÑ\8b Ð¼Ð¾Ñ\86нÑ\8bÑ\85 Ð·Ð°Ñ\82Ñ\80Ñ\8bмак Ð½Ð° Ñ\81еÑ\80веÑ\80Ñ\8b Ð±Ð°Ð· Ð·Ð²ÐµÑ\81Ñ\82ак, Ð·Ð¼ÐµÐ½Ñ\8b, Ð·Ñ\80обленÑ\8bÑ\8f Ð¼ÐµÐ½Ñ\88 Ð·Ð° $1 {{PLURAL:$1|Ñ\81ек.|Ñ\81ек.}} Ñ\82амÑ\83 назад, могуць не трапіць у гэты спіс.",
        "watchlistedit-normal-title": "Спіс назірання",
        "watchlistedit-normal-legend": "Выдаленне складнікаў са спіса назірання",
        "watchlistedit-normal-explain": "Назвы старонак з ліку назіраных паказаныя ніжэй. Каб нешта сцерці, адзначце клетку побач з адпаведным радком, пасля чаго націсніце \"Выняць складнікі\". Таксама можна правіць гэты спіс непасрэдна, [[Special:EditWatchlist/raw|без афармлення]].",
        "watchlistedit-raw-done": "Спіс назірання абноўлены.",
        "watchlistedit-raw-added": "Дапісаны{{PLURAL:$1| 1 складнік|я $1 складнікаў}}:",
        "watchlistedit-raw-removed": "Выняты{{PLURAL:$1| 1 складнік|я $1 складнікаў}}:",
+       "watchlistedit-clear-title": "Чыстка спісу назірання",
        "watchlistedit-clear-legend": "Ачысціць спіс назірання",
+       "watchlistedit-clear-explain": "Усе складнікі будуць выняты з вашага спісу назірання",
+       "watchlistedit-clear-titles": "Складнікі:",
+       "watchlistedit-clear-submit": "Ачысціць спіс назірання (адкат будзе немагчымы!)",
        "watchlistedit-clear-done": "Ваш спіс назірання ачышчаны.",
+       "watchlistedit-clear-removed": "{{PLURAL:$1|1 складнік выняты|$1 складнікі выняты|$1 складнікаў вынята}}:",
+       "watchlistedit-too-many": "Занадта шмат старонак, каб паказаць тут.",
        "watchlisttools-clear": "Ачысціць спіс назірання",
        "watchlisttools-view": "Паказаць змяненні",
        "watchlisttools-edit": "Паказаць спіс назірання",
        "version-hook-name": "Назва хука",
        "version-hook-subscribedby": "Сюды падпісаныя",
        "version-version": "(Версія $1)",
+       "version-no-ext-name": "[без назвы]",
        "version-license": "Ліцэнзія MediaWiki",
        "version-ext-license": "Ліцэнзія",
        "version-ext-colheader-name": "Прыстаўка",
        "version-software-version": "Версія",
        "version-entrypoints-header-entrypoint": "Кропка ўваходу",
        "version-entrypoints-header-url": "URL",
+       "redirect-legend": "Перасылка да файла ці старонкі",
+       "redirect-submit": "Перайсці",
+       "redirect-lookup": "Шукаць:",
+       "redirect-value": "Значэнне:",
+       "redirect-user": "ID удзельніка:",
+       "redirect-page": "Ідэнтыфікатар старонкі",
+       "redirect-revision": "Версія старонкі",
+       "redirect-file": "Назва файла",
+       "redirect-not-exists": "Значэнне не знойдзена",
        "fileduplicatesearch": "Пошук дублікатных файлаў",
        "fileduplicatesearch-summary": "Пошук дублікатных файлах на падставе іх хэшаў.",
        "fileduplicatesearch-legend": "Знайсці дублікаты",
        "dberr-problems": "Прабачце, на пляцоўцы здарыліся тэхнічныя цяжкасці.",
        "dberr-again": "Паспрабуйце перачытаць праз некалькі хвілін.",
        "dberr-info": "(Немагчыма звязацца з серверам баз даных: $1)",
+       "dberr-info-hidden": "(Немагчыма звязацца з серверам базы звестак)",
        "dberr-usegoogle": "Тымчасам можна паспрабаваць пошук праз Гугл.",
        "dberr-outofdate": "Заўважце, што тамтэйшыя індэксы тутэйшага зместу могуць быць састарэлымі.",
        "dberr-cachederror": "Гэта копія старонкі, узятая з кэшу, і, магчыма, састарэлая.",
        "htmlform-submit": "Падаць",
        "htmlform-reset": "Адкаціць змяненні",
        "htmlform-selectorother-other": "Рознае",
+       "htmlform-no": "Не",
        "htmlform-cloner-create": "Дадаць яшчэ",
        "sqlite-has-fts": "$1 з падтрымкай поўна-тэкставага пошуку",
        "sqlite-no-fts": "$1 без падтрымкі поўна-тэкставага пошуку",
index 9ac5f31..f7dea84 100644 (file)
@@ -17,7 +17,6 @@
        "tog-showtoolbar": "सम्पादन औजार् बक्सा के दिखाइल् जाए",
        "tog-editondblclick": "दुई क्लिक पर पृष्ठ संपादित करीं (जावास्क्रिप्ट आवश्यक बा)",
        "tog-editsectiononrightclick": "अनुभाग शीर्षक पर दायाँ क्लिक कर अनुभाग सम्पादित करीं (जावास्क्रिप्ट आवश्यक बा)",
-       "tog-rememberpassword": "इ ब्राउजर पर हमार प्रवेश जारी रहे (अधिकतम $1 {{PLURAL:$1|दिन|दिन}})",
        "tog-watchcreations": "हमरा द्वारा निर्मित पृष्ठ आ हमरा द्वारा लादल फ़ाइलन के हमार ध्यानसूची में जोड़ी",
        "tog-watchdefault": "हमरा द्वारा निर्मित पृष्ठ आ हमरा द्वारा लादल फ़ाइलन के हमार ध्यानसूची में जोड़ी",
        "tog-watchmoves": "हमरा द्वारा स्थानांतरित पृष्ठ आ लादल फाईल के हमरा ध्यानसूची में जोड़ी",
        "qbmyoptions": "हमार पन्ना",
        "faq": "साधारण सवाल",
        "faqpage": "Project:साधारण सवाल",
-       "vector-action-addsection": "विषय जोड़ीं",
-       "vector-action-delete": "मिटाईं",
-       "vector-action-move": "स्थांतरण",
-       "vector-action-protect": "संरक्षित करीं",
-       "vector-action-undelete": "मत मिटाईं",
-       "vector-action-unprotect": "सुरक्षा बदलीं",
-       "vector-view-create": "बनाईं",
-       "vector-view-edit": "सम्पादन",
-       "vector-view-history": "इतिहास देखीं",
-       "vector-view-view": "पढ़ीं",
-       "vector-view-viewsource": "स्त्रोत देखीं",
        "actions": "क्रिया",
        "namespaces": "नामस्थान",
        "variants": "संस्करण",
        "readonly_lag": "उपमुख्य डाटाबेस सर्वर मुख्य डाटाबेस के बराबर परावर्तित होत समय मुख्य डाटाबेस सर्वर अपने आप लॉक हो गइल।",
        "internalerror": "आन्तरिक त्रुटि",
        "internalerror_info": "आन्तरिक त्रुटि: $1",
-       "fileappenderrorread": "संलग्न करे के दौरान \"$1\" पढ़ल नईखे जा सकत।",
-       "fileappenderror": "\"$1\" के आगे \"$2\" ना जुड़ पावल",
        "filecopyerror": "\"$1\" फ़ाइल के \"$2\" पर प्रतिलिपि ना बन पाईल।",
        "filerenameerror": "\"$1\" फ़ाइल के नाम बदल के \"$2\" नइखे रखल जा सकत।",
        "filedeleteerror": "\"$1\" फ़ाइल के ना हटावल जा सकल।",
        "directorycreateerror": "\"$1\" डाइरेक्टरी ना बनावल जा सकल।",
        "filenotfound": "\"$1\" फ़ाइल ना मिलल।",
-       "fileexistserror": "फ़ाइल \"$1\" पर नइखी लिख सकत: फ़ाइल अस्तित्व में बा।",
        "unexpected": "अनपेक्षित मूल्य: \"$1\"=\"$2\".",
        "formerror": "त्रुटि: फ़ॉर्म सबमिट ना करल जा सकल।",
        "badarticleerror": "इ पन्ना पर इ कार्य नइखे करल जा सकत।",
        "gotaccountlink": "खाता में प्रवेश",
        "userlogin-resetlink": "का रउआ आपन प्रवेश जानकारी भूला गइल बानी?",
        "userlogin-resetpassword-link": "आपन गुप्तशब्द के फिर से बहाल करीं",
-       "createacct-join": "अपना बारे में जानकारी नीचे लिखीं",
-       "createacct-another-join": "नयका खाता के जानकारी नीचे लिखीं",
        "createacct-emailrequired": "ई-मेल पता",
        "createacct-emailoptional": "ई-मेल पता (वैकल्पिक)",
        "createacct-email-ph": "आपन ई-मेल पता लिखीं",
        "savearticle": "पन्ना सुरक्षित करीं",
        "preview": "पूर्वावलोकन",
        "showpreview": "पूर्वावलोकन देखाईं",
-       "showlivepreview": "सीधा पूर्वावलोकन",
        "showdiff": "परिवर्तन देखाईं",
        "anoneditwarning": "'''चेतावनी:''' रउआ आपन खाता में प्रवेश नईखीं कईले। ई पन्ना के सम्पादन इतिहास पर राउर आई पी पता दर्ज कईल जाई।",
        "anonpreviewwarning": "''रउआ खाता में प्रवेश नईखीं भईल। सुरक्षित करेब त ई पन्ना के सम्पादन इतिहास पर राउर आई पी पता दर्ज हो जाई।\"",
        "permissionserrors": "अनुमति त्रुटी",
        "log-fulllog": "पूरा लॉग देखीं",
        "edit-conflict": "संपादन अंतर्विरोध",
-       "postedit-confirmation": "राउर सम्पादन सुरक्षित कर दिहल गईल।",
+       "postedit-confirmation-saved": "राउर सम्पादन सुरक्षित कर दिहल गईल।",
        "invalid-content-data": "अवैध डाटा सामग्री",
        "content-model-wikitext": "विकीपाठ्य",
        "content-model-text": "सामान्य पाठ",
        "searchmenu-exists": "'''इ विकि पर ''[[:$1]]'' नाम से एगो पन्ना उपलब्ध बा'''",
        "searchmenu-new": "'''इ विकि पर ''[[:$1]]'' नाम से पन्ना बनाईं'''",
        "searchprofile-articles": "सामग्री पन्ना",
-       "searchprofile-project": "मदद आ परियोजना पन्ना",
        "searchprofile-images": "मल्टिमीडिया",
        "searchprofile-everything": "सब कुछ",
        "searchprofile-advanced": "अग्रिम",
        "searchprofile-articles-tooltip": "$1 में खोजीं",
-       "searchprofile-project-tooltip": "$1 में खोजीं",
        "searchprofile-images-tooltip": "फाईल खातिर खोज",
        "searchprofile-everything-tooltip": "सभन सामग्री में खोजीं (वार्ता पन्ना सहित)",
        "searchprofile-advanced-tooltip": "विशेष नामस्थान में खोजीं",
        "search-interwiki-default": "$1 के परिणाम:",
        "search-interwiki-more": "(अउर)",
        "search-relatedarticle": "संबंधित",
-       "searcheverything-enable": "सभन सन्दर्भ में खोजीं",
        "searchrelated": "संबंधित",
        "searchall": "सब",
        "showingresults": "नीचे देखावल जा रहल बा {{PLURAL:$1|'''1''' परिणाम|'''$1''' परिणाम}} #'''$2''' से शुरु होवे वाला।",
        "search-nonefound": "राउर खोज मे से मेल खात कउनो परिणाम नईखे बा",
        "powersearch-legend": "उन्नत खोज",
        "powersearch-ns": "सन्दर्भ में खोजीं",
-       "powersearch-redir": "पुन:निर्देश सूची",
        "powersearch-togglelabel": "जाँच:",
        "powersearch-toggleall": "सब",
        "powersearch-togglenone": "कउनो ना",
        "move": "स्थान्तरण",
        "movethispage": "ई पन्ना के स्थांतरण करीं",
        "booksources": "किताबी स्त्रोत",
-       "alphaindexline": "$1 से $2",
        "allarticles": "सभी पन्ना",
        "allpagessubmit": "जाईं",
        "allpagesprefix": "उपसर्ग के साथे पन्ना प्रदर्शन:",
        "namespacesall": "सब",
        "monthsall": "सब",
        "confirmemail": "इ-मेल पता कन्फर्म करीं",
+       "version-no-ext-name": "[अज्ञात नाम]",
        "specialpages": "ख़ाश पन्ना",
        "revdelete-restricted": "प्रबंधक पर प्रतिबंध लागू",
        "revdelete-unrestricted": "प्रबंधक पर से प्रतिबंध समाप्त"
index 0efd32d..5989982 100644 (file)
        "category_header": "Artikoloj en kategorio \"$1\"",
        "subcategories": "Subkategorioj",
        "category-media-header": "Dosieroj en kategorio \"$1\"",
-       "category-empty": "''Ĉi tiu kategorio momente ne enhavas artikolojn aŭ mediojn.''",
+       "category-empty": "<em>Tiu ĉi kategorio nuntempe enhavas neniun artikolon aŭ plurmedian dosieron.</em>",
        "hidden-categories": "{{PLURAL:$1|Kaŝita kategorio|Kaŝitaj kategorioj}}",
        "hidden-category-category": "Kaŝitaj kategorioj",
        "category-subcat-count": "{{PLURAL:$2|Ĉi tiu kategorio havas nur la jenan subkategorion.|Ĉi tiu kategorio havas la {{PLURAL:$1|jenan subkategorion|$1 jenajn subkategoriojn}}, el $2 entute.}}",
        "undo-nochange": "Ŝajne la redakto jam estis malfarita.",
        "undo-summary": "Nuligis version $1 de [[Special:Contributions/$2|$2]] ([[User talk:$2|Diskuto]] | [[Special:Contributions/$2|{{MediaWiki:Contribslink}}]])",
        "undo-summary-username-hidden": "Malfari ŝanĝon $1 de kaŝita uzulo",
-       "cantcreateaccounttitle": "Ne povas krei konton",
+       "cantcreateaccounttitle": "Ne eblas krei konton",
        "cantcreateaccount-text": "Konto-kreado de ĉi tiu IP-adreso ('''$1''') estis forbarita de [[User:$3|$3]].\n\nLa kialo donata de $3 estas ''$2''.",
        "cantcreateaccount-range-text": "La kreado de kontoj de IP-adresoj en la intervalo '''$1''', kiu inkludas vian IP-adreson ('''$4'''), estis blokita de [[User:$3|$3]].\n\nLa donita kialo de $3 estas ''$2''",
        "viewpagelogs": "Rigardi la protokolojn por tiu ĉi paĝo",
        "datedefault": "Nenia prefero",
        "prefs-labs": "Ecoj el Laboratorio",
        "prefs-user-pages": "Uzantopaĝoj",
-       "prefs-personal": "Uzanta profilo",
+       "prefs-personal": "Profilo de uzanto",
        "prefs-rc": "Lastaj ŝanĝoj",
        "prefs-watchlist": "Atentaro",
        "prefs-watchlist-days": "Kiom da tagoj montriĝu en la atentaro:",
        "timezoneregion-europe": "Eŭropo",
        "timezoneregion-indian": "Hinda Oceano",
        "timezoneregion-pacific": "Pacifiko",
-       "allowemail": "Rajtigi retmesaĝojn de aliaj uzantoj",
+       "allowemail": "Ebligi akceptadon de retmesaĝoj de aliaj uzantoj",
        "prefs-searchoptions": "Serĉi",
        "prefs-namespaces": "Nomspacoj",
        "default": "defaŭlte",
        "limitreport-templateargumentsize": "Grandeco de argumentoj de ŝablonoj",
        "limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|bitoko|bitokoj}}",
        "limitreport-expensivefunctioncount": "Nombro de kostaj sintaks-analizilaj funkcioj",
-       "expandtemplates": "Ampleksigi ŝablonojn",
+       "expandtemplates": "Ŝablonetendilo",
        "expand_templates_intro": "Ĉi tiu speciala paĝo traktas tekston kaj ampleksigas ĉiujn ŝablonojn en ĝi rekursie.\nĜi ankaŭ ampleksigas sintaksajn funkciojn kiel\n<code><nowiki>{{</nowiki>#language:…}}</code> kaj variablojn kiel\n<code><nowiki>{{</nowiki>CURRENTDAY}}</code>. Fakte preskaŭ iujn ajn en duoblaj krampoj.",
        "expand_templates_title": "Kunteksta titolo, por {{FULLPAGENAME}}, ktp.:",
        "expand_templates_input": "Enigita teksto:",
index ee03fc8..bdeb540 100644 (file)
        "jumptonavigation": "navegación",
        "jumptosearch": "buscar",
        "view-pool-error": "Lo sentimos, los servidores están sobrecargados en este momento.\nHay demasiados usuarios que están tratando de ver esta página.\nEspera un momento antes de tratar de acceder nuevamente a esta página.\n\n$1",
-       "generic-pool-error": "Lo sentimos, los servidores están sobrecargados por el momento.\nHay demasiados usuarios tratando de ver esta página.\nIntentes acceder nuevamente a esta página dentro de un rato.",
+       "generic-pool-error": "Lo sentimos, los servidores están sobrecargados en este momento.\nHay demasiados usuarios que están tratando de ver este recurso.\nEspera un momento antes de tratar de acceder nuevamente a este recurso.",
        "pool-timeout": "Tiempo limite agotado para el bloqueo",
        "pool-queuefull": "La cola de trabajo está llena",
        "pool-errorunknown": "Error desconocido",
        "editlink": "modificar",
        "viewsourcelink": "ver código",
        "editsectionhint": "Editar sección: $1",
-       "toc": "Contenido",
+       "toc": "Contenidos",
        "showtoc": "mostrar",
        "hidetoc": "ocultar",
        "collapsible-collapse": "Contraer",
        "nstab-help": "Ayuda",
        "nstab-category": "Categoría",
        "nosuchaction": "No existe esa acción",
-       "nosuchactiontext": "La acción especificada en la dirección no es válida.\nEs posible que hayas escrito mal la URL o que hayas seguido un enlace incorrecto. Esto también podría indicar un error en el software utilizado en {{SITENAME}}.",
+       "nosuchactiontext": "La acción especificada en la URL no es válida.\nEs posible que hayas escrito mal la URL o que hayas seguido un enlace incorrecto.\nEsto también podría indicar un error en el software utilizado en {{SITENAME}}.",
        "nosuchspecialpage": "No existe esa página especial",
        "nospecialpagetext": "<strong>Ha solicitado una página especial inexistente.</strong>\n\nPuedes ver una lista de las páginas especiales en [[Special:SpecialPages|{{int:specialpages}}]].",
        "error": "Error",
        "databaseerror": "Error de la base de datos",
-       "databaseerror-text": "Ocurrió un error de consulta de la base de datos.\nEsto puede indicar un fallo en el software.",
-       "databaseerror-textcl": "Se ha producido un error en la base de datos.",
+       "databaseerror-text": "Ocurrió un error de consulta a la base de datos.\nEsto puede indicar un fallo en el software.",
+       "databaseerror-textcl": "Se ha producido un error de consulta a la base de datos.",
        "databaseerror-query": "Consulta: $1",
        "databaseerror-function": "Función: $1",
        "databaseerror-error": "Error: $1",
-       "laggedslavemode": "'''Aviso:''' puede que falten las actualizaciones más recientes en esta página.",
+       "laggedslavemode": "<strong>Avertencia:</strong> puede que falten las actualizaciones más recientes en esta página.",
        "readonly": "Base de datos bloqueada",
        "enterlockreason": "Explica el motivo del bloqueo, incluyendo una estimación de cuándo se producirá el desbloqueo",
        "readonlytext": "La base de datos no permite nuevas entradas u otras modificaciones de forma temporal, probablemente por mantenimiento rutinario, tras lo cual volverá a la normalidad.\n\nLa explicación dada por el administrador que la bloqueó fue: $1",
        "missing-article": "La base de datos no encuentra el texto de una página que debería hallarse, llamada «$1» $2.\n\nLa causa de esto suele deberse a un ''diff'' anacrónico o un enlace al historial de una página que ha sido borrada.\n\nSi no fuera el caso, puedes haber encontrado un fallo en el software.\n\nPor favor, avisa a un [[Special:ListUsers/sysop|administrador]], tomando nota de la URL.",
        "missingarticle-rev": "(n.º de revisión: $1)",
        "missingarticle-diff": "(Dif.: $1, $2)",
-       "readonly_lag": "La base de datos se ha bloqueado temporalmente mientras los servidores se sincronizan.",
+       "readonly_lag": "La base de datos se ha bloqueado automáticamente mientras los servidores de base de datos esclavos se sincronizan con el maestro.",
        "internalerror": "Error interno",
        "internalerror_info": "Error interno: $1",
        "filecopyerror": "No se pudo copiar el archivo «$1» a «$2».",
        "badtitle": "Título incorrecto",
        "badtitletext": "El título de la página solicitada está vacío, no es válido, o es un enlace interidioma o interwiki incorrecto.\nPuede que contenga uno o más caracteres que no se pueden usar en los títulos.",
        "perfcached": "Los siguientes datos provienen de la caché y pueden no estar actualizados. La caché puede contener {{PLURAL:$1|un resultado|$1 resultados}} como máximo.",
-       "perfcachedts": "Los siguientes datos provienen de la caché y su última fecha y hora de actualización es: $1. La caché puede contener {{PLURAL:$4|un resultado|$4 resultados}} como máximo.",
+       "perfcachedts": "Los siguientes datos provienen de la caché y su última actualización fue: $1. La caché puede contener {{PLURAL:$4|un resultado|$4 resultados}} como máximo.",
        "querypage-no-updates": "Actualmente las actualizaciones de esta página están desactivadas. Estos datos no serán actualizados a corto plazo.",
        "viewsource": "Ver código",
        "viewsource-title": "Ver el código de «$1»",
        "actionthrottledtext": "Como medida contra el ''spam'', la acción que estás realizando está limitada a un número determinado de veces en un periodo corto de tiempo, y has excedido ese límite. Por favor inténtalo de nuevo en unos minutos.",
        "protectedpagetext": "Esta página ha sido protegida para evitar su edición u otras acciones.",
        "viewsourcetext": "Puedes ver y copiar el código fuente de esta página:",
-       "viewyourtext": "Puedes ver y copiar el código de '''tus ediciones''' a esta página:",
+       "viewyourtext": "Puedes ver y copiar el código de <strong>tus ediciones</strong> a esta página:",
        "protectedinterface": "Esta página proporciona el texto de la interfaz del software en este wiki, y está protegida para prevenir el abuso.\nPara agregar o cambiar las traducciones para todos los wikis, por favor, usa [//translatewiki.net/ translatewiki.net], el proyecto de localización de MediaWiki.",
-       "editinginterface": "<strong>Aviso:</strong> Estás editando una página usada para proporcionar el texto de la interfaz para el software. \nLos cambios en esta página afectarán la apariencia de la interfaz para los demás usuarios de este wiki. \nPara añadir o cambiar las traducciones utiliza [//translatewiki.net/ translatewiki.net], el proyecto de localización de MediaWiki.",
+       "editinginterface": "<strong>Advertencia:</strong> Estás editando una página usada para proporcionar el texto de la interfaz para el software. \nLos cambios en esta página afectarán la apariencia de la interfaz para los demás usuarios de este wiki. \nPara añadir o cambiar las traducciones de todos los wikis utiliza [//translatewiki.net/ translatewiki.net], el proyecto de localización de MediaWiki.",
        "cascadeprotected": "Esta página ha sido protegida para su edición, porque está incluida en {{PLURAL:$1|la siguiente página|las siguientes páginas}}, que están protegidas con la opción de «cascada»:\n$2",
-       "namespaceprotected": "No tienes permiso para editar las páginas del espacio de nombres '''$1'''.",
+       "namespaceprotected": "No tienes permiso para editar las páginas del espacio de nombres <strong>$1</strong>.",
        "customcssprotected": "No tienes permiso para editar esta página CSS, porque contiene configuraciones personales de otro usuario.",
        "customjsprotected": "No tienes permiso para editar esta página JavaScript, porque contiene configuraciones personales de otro usuario.",
        "mycustomcssprotected": "No tienes permiso para editar esta página CSS.",
        "myprivateinfoprotected": "No tienes permiso para editar tu información privada.",
        "mypreferencesprotected": "No tienes permiso para editar tus preferencias.",
        "ns-specialprotected": "No se pueden editar las páginas especiales.",
-       "titleprotected": "Esta página ha sido protegida contra creación por [[User:$1|$1]].\nEl motivo dado fue: \"''$2''\".",
+       "titleprotected": "Esta página ha sido protegida contra creación por [[User:$1|$1]].\nEl motivo dado fue \"<em>$2</em>\".",
        "filereadonlyerror": "No se puede modificar el archivo \"$1\" porque el repositorio de archivos \"$2\" está en modo de sólo lectura.\nEl administrador que lo ha bloqueado ofrece esta explicación: \"$3\".",
        "invalidtitle-knownnamespace": "El título con el espacio de nombres «$2» y el texto «$3» no es válido",
        "invalidtitle-unknownnamespace": "El título con el espacio de nombres desconocido (n.º $1) y el texto «$2» no es válido",
        "virus-scanfailed": "falló el análisis (código $1)",
        "virus-unknownscanner": "antivirus desconocido:",
        "logouttext": "<strong>Ha finalizado tu sesión.</strong>\n\nPuede que algunas páginas continúen mostrándose como si la sesión estuviera iniciada hasta que vacíes la memoria caché del navegador.",
-       "welcomeuser": "¡Te damos la bienvenida, $1!",
-       "welcomecreation-msg": "Se ha creado tu cuenta.\nNo olvides personalizar tus [[Special:Preferences|preferencias de {{SITENAME}}]].",
-       "yourname": "Nombre de usuario:",
+       "welcomeuser": "¡Bienvenido, $1!",
+       "welcomecreation-msg": "Se ha creado tu cuenta.\nPuedes cambiar tus [[Special:Preferences|preferencias]] de {{SITENAME}} si lo deseas.",
+       "yourname": "Usuario:",
        "userlogin-yourname": "Usuario",
        "userlogin-yourname-ph": "Escribe tu nombre de usuario",
        "createacct-another-username-ph": "Escribe el nombre de usuario",
        "userlogin-remembermypassword": "Mantener mi sesión iniciada",
        "userlogin-signwithsecure": "Usar conexión segura",
        "yourdomainname": "Tu dominio:",
-       "password-change-forbidden": "No puedes cambiar las contraseñas de este wiki.",
-       "externaldberror": "Hubo un error de autenticación externa de la base de datos o bien no tienes autorización para actualizar tu cuenta externa.",
+       "password-change-forbidden": "No puedes cambiar las contraseñas en este wiki.",
+       "externaldberror": "Hubo un error de autenticación de la base de datos o bien no tienes autorización para actualizar tu cuenta externa.",
        "login": "Iniciar sesión",
        "nav-login-createaccount": "Acceder/crear cuenta",
        "loginprompt": "Hay que activar las ''cookies'' en el navegador para iniciar sesión en {{SITENAME}}.",
        "gotaccountlink": "Acceder",
        "userlogin-resetlink": "¿Olvidaste tus datos de acceso?",
        "userlogin-resetpassword-link": "¿Has olvidado tu contraseña?",
-       "userlogin-helplink2": "Ayuda con el registro",
+       "userlogin-helplink2": "Ayuda con el acceso",
        "userlogin-loggedin": "Ya estás conectado como {{GENDER:$1|$1}}.\nUsa el formulario de abajo para iniciar sesión como otro usuario.",
        "userlogin-createanother": "Crear otra cuenta",
        "createacct-emailrequired": "Dirección de correo electrónico",
        "password-name-match": "Tu contraseña debe ser diferente de tu nombre de usuario.",
        "password-login-forbidden": "El uso de este nombre de usuario y contraseña han sido prohibidos.",
        "mailmypassword": "Restablecer la contraseña",
-       "passwordremindertitle": "Recordatorio de contraseña de {{SITENAME}}",
+       "passwordremindertitle": "Nueva contraseña temporal para {{SITENAME}}",
        "passwordremindertext": "Alguien (probablemente tú, desde la dirección IP $1) solicitó que te enviáramos una nueva contraseña para tu cuenta en {{SITENAME}} ($4).\nSe ha creado la siguiente contraseña temporal para el usuario «$2»: «$3»\nAhora deberías iniciar sesión y cambiar tu contraseña. Tu contraseña temporal expirará en {{PLURAL:$5|un día|$5 días}}.\n\nSi fue otro quien solicitó este mensaje o has recordado tu contraseña y ya no deseas cambiarla, puedes ignorar este mensaje y seguir usando tu contraseña original.",
        "noemail": "No hay una dirección de correo electrónico registrada para «$1».",
        "noemailcreate": "Necesitas proveer una dirección de correo electrónico válida",
        "noemailprefs": "Especifica una dirección electrónica para habilitar estas características.",
        "emailconfirmlink": "Confirmar dirección de correo electrónico",
        "invalidemailaddress": "La dirección electrónica no puede ser aceptada, pues parece que tiene un formato no válido.\nPor favor, escribe una dirección en el formato adecuado o deja el campo en blanco.",
-       "cannotchangeemail": "Las direcciones de la correo electrónico de las cuentas de usuario no puedes cambiarse en esta wiki.",
-       "emaildisabled": "Este sitio no puede enviar mensajes de correo electrónico.",
+       "cannotchangeemail": "Las direcciones de la correo electrónico de las cuentas de usuario no pueden cambiarse en esta wiki.",
+       "emaildisabled": "Este sitio no puede enviar correos electrónicos.",
        "accountcreated": "Se ha creado la cuenta",
        "accountcreatedtext": "La cuenta de usuario de [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|talk]]) ha sido creada.",
        "createaccount-title": "Creación de cuenta para {{SITENAME}}",
-       "createaccount-text": "Alguien creó en {{SITENAME}} ($4) una cuenta asociada a este correo electrónico con el nombre «$2».\nLa contraseña asignada automáticamente es «$3». Por favor entra ahora y cambia tu contraseña.\n\nPuedes ignorar este mensaje si esta cuenta fue creada por error.",
-       "login-throttled": "Has intentado demasiadas veces iniciar sesión. Por favor espera $1 antes de intentarlo nuevamente.",
+       "createaccount-text": "Alguien creó en {{SITENAME}} ($4) una cuenta asociada a este correo electrónico con el nombre «$2» y contraseña «$3». Por favor entra ahora y cambia tu contraseña.\n\nPuedes ignorar este mensaje si esta cuenta fue creada por error.",
+       "login-throttled": "Has intentado demasiadas veces iniciar sesión recientemente. Por favor espera $1 antes de intentarlo nuevamente.",
        "login-abort-generic": "Tu inicio de sesión no fue exitoso - Cancelado",
        "loginlanguagelabel": "Idioma: $1",
        "suspicious-userlogout": "Tu solicitud de desconexión ha sido denegada, pues parece haber sido enviada desde un navegador defectuoso o un proxy caché.",
        "retypenew": "Confirmar la contraseña nueva:",
        "resetpass_submit": "Establecer contraseña e iniciar sesión",
        "changepassword-success": "La contraseña se modificó correctamente.",
-       "changepassword-throttled": "Has intentado acceder demasiadas veces.\nEspera $1 antes de intentarlo de nuevo.",
+       "changepassword-throttled": "Has intentado acceder demasiadas veces recientemente.\nEspera $1 antes de intentarlo de nuevo.",
        "resetpass_forbidden": "No se pueden cambiar las contraseñas",
        "resetpass-no-info": "Debes iniciar sesión para acceder directamente a esta página.",
        "resetpass-submit-loggedin": "Cambiar contraseña",
        "resetpass-submit-cancel": "Cancelar",
-       "resetpass-wrong-oldpass": "La contraseña antigua no es correcta.\nPuede que ya hayas cambiado la contraseña o que hayas pedido una temporal.",
+       "resetpass-wrong-oldpass": "La contraseña actual, o temporal, no es correcta.\nPuede que ya hayas cambiado exitosamente tu contraseña o que hayas pedido una nueva contraseña temporal.",
        "resetpass-recycled": "Restablece tu contraseña a algo distinto de tu contraseña actual.",
-       "resetpass-temp-emailed": "Has iniciado sesión con un código temporal por correo electrónico.\nPara terminar la sesión, debes establecer una nueva contraseña aquí:",
+       "resetpass-temp-emailed": "Has iniciado sesión con un código temporal por correo electrónico.\nPara terminar el acceso, debes establecer una nueva contraseña aquí:",
        "resetpass-temp-password": "Contraseña temporal:",
        "resetpass-abort-generic": "Una extensión ha cancelado el cambio de la contraseña.",
        "resetpass-expired": "Tu contraseña ha caducado. Por favor, establece una nueva contraseña para iniciar sesión.",
-       "resetpass-expired-soft": "Su contraseña ha caducado y necesita reajustarse. Elija una nueva contraseña ahora, o haga clic en \"{{int:resetpass-enviar-cancelar}}\" para restaurarla más adelante.",
+       "resetpass-expired-soft": "Tu contraseña ha caducado y necesita restablecerse. Elije una nueva contraseña ahora, o haga clic en \"{{int:resetpass-submit-cancel}}\" para restaurarla más adelante.",
        "resetpass-validity-soft": "Tu contraseña no es válida: $1\n\nCámbiala ahora por una nueva, o haz clic en \"{{int:resetpass-submit-cancel}}\" para cambiarla más tarde.",
-       "passwordreset": "Restablecimiento de contraseña",
-       "passwordreset-text-one": "Completa este formulario para restablecer tu contraseña.",
-       "passwordreset-text-many": "{{PLURAL:$1|Rellena uno de los campos para restablecer la contraseña.}}",
+       "passwordreset": "Restablecer contraseña",
+       "passwordreset-text-one": "Completa este formulario para recibir una contraseña temporal por correo electrónico.",
+       "passwordreset-text-many": "{{PLURAL:$1|Rellena uno de los campos para  recibir una contraseña temporal por correo electrónico.}}",
        "passwordreset-legend": "Restablecer contraseña",
        "passwordreset-disabled": "Se ha desactivado el restablecimiento de contraseñas en este wiki.",
        "passwordreset-emaildisabled": "Las funciones de correo electrónico han sido desactivadas en esta wiki.",
        "passwordreset-email": "Dirección de correo electrónico:",
        "passwordreset-emailtitle": "Detalles de la cuenta en {{SITENAME}}",
        "passwordreset-emailtext-ip": "Alguien (probablemente tú, desde la dirección IP $1) ha solicitado la renovación de tu clave para {{SITENAME}} ($4). {{PLURAL:$3|La siguiente cuenta está asociada|Las siguientes cuentas están asociadas}}\ncon esta dirección de correo electrónico:\n\n$2\n\n{{PLURAL:$3|Esta contraseña temporal|Estas contraseñas temporales}} caducarán en {{PLURAL:$5|un día|$5 días}}.\nDeberías iniciar sesión y establecer una contraseña nueva ahora. Si otra persona ha realizado este solicitud\no si recuerdas tu contraseña original y no deseas cambiarla, puedes\nignorar este mensaje y continuar usando tu contraseña anterior.",
-       "passwordreset-emailtext-user": "El usuario $1 en {{SITENAME}} pidió un recordatorio de tus datos de cuenta para {{SITENAME}}\n($4). {{PLURAL:$3|La siguiente cuenta está asociada|Las siguientes cuentas están asociadas}} con esta dirección de correo electrónico:\n\n$2\n\n{{PLURAL:$3|Esta contraseña temporal|Estas contraseñas temporales}} expirarán en {{PLURAL:$5|un día|$5 días}}.\nDeberías iniciar sesión y establecer una contraseña nueva ahora. Si alguien más hizo este pedido,\no recuerdas tu contraseña original, y no deseas cambiarla, puedes\nignorar este mensaje y continuar usando tu contraseña anterior.",
+       "passwordreset-emailtext-user": "El usuario $1 en {{SITENAME}} pidió un restablecer tu contraseña para {{SITENAME}}\n($4). {{PLURAL:$3|La siguiente cuenta está asociada|Las siguientes cuentas están asociadas}} con esta dirección de correo electrónico:\n\n$2\n\n{{PLURAL:$3|Esta contraseña temporal|Estas contraseñas temporales}} expirarán en {{PLURAL:$5|un día|$5 días}}.\nDeberías iniciar sesión y establecer una contraseña nueva ahora. Si alguien más hizo este pedido,\no recuerdas tu contraseña original, y no deseas cambiarla, puedes\nignorar este mensaje y continuar usando tu contraseña anterior.",
        "passwordreset-emailelement": "Nombre de usuario: $1\nContraseña temporal: $2",
        "passwordreset-emailsent": "Se ha enviado un correo electrónico para el restablecimiento de tu contraseña.",
        "passwordreset-emailsent-capture": "Se ha enviado un correo para el restablecimiento de la contraseña, el cual se muestra a continuación.",
-       "passwordreset-emailerror-capture": "Se generó un correo electrónico de restablecimiento de contraseña, que se muestra a continuación, pero el envío {{GENDER:$2|al usuario|a la usuaria}} falló. $1",
+       "passwordreset-emailerror-capture": "Se generó un correo electrónico de restablecimiento de contraseña, que se muestra a continuación, pero el envío {{GENDER:$2|al usuario|a la usuaria}} falló: $1",
        "changeemail": "Cambiar la dirección de correo electrónico",
        "changeemail-header": "Cambiar la dirección de correo de la cuenta",
        "changeemail-text": "Rellena este formulario para cambiar tu dirección de correo electrónico. Debes introducir la contraseña para confirmar este cambio.",
        "preview": "Previsualizar",
        "showpreview": "Mostrar previsualización",
        "showdiff": "Mostrar los cambios",
-       "anoneditwarning": "'''Aviso:''' No has iniciado sesión con una cuenta de usuario.\nTu dirección IP se almacenará en el historial de ediciones de la página.",
-       "anonpreviewwarning": "''No has iniciado sesión con una cuenta de usuario. Al guardar los cambios se almacenará tu dirección IP en el historial de edición de la página.''",
-       "missingsummary": "'''Atención:''' No has escrito un resumen de edición. Si haces clic nuevamente en «{{int:savearticle}}» tu edición se grabará sin él.",
+       "anoneditwarning": "<strong>Advertencia:</strong> No has iniciado sesión.\nTu dirección IP se almacenará en el historial de edición de esta página.",
+       "anonpreviewwarning": "<em>No has iniciado sesión. Al guardar los cambios se almacenará tu dirección IP en el historial de edición de esta página.</em>",
+       "missingsummary": "<strong>Recordatorio:</strong> No has escrito un resumen de edición.\nSi haces clic nuevamente en «{{int:savearticle}}» tu edición se grabará sin él.",
        "missingcommenttext": "Escribe un comentario a continuación.",
-       "missingcommentheader": "'''Recordatorio:''' No has escrito un título para este comentario. Si haces clic nuevamente en \"{{int:savearticle}}\" tu edición se grabará sin él.",
+       "missingcommentheader": "<strong>Recordatorio:</strong> No has escrito un asunto/encabezado para este comentario.\nSi haces clic nuevamente en \"{{int:savearticle}}\" tu edición se grabará sin él.",
        "summary-preview": "Previsualización del resumen:",
-       "subject-preview": "Previsualización del tema/título:",
+       "subject-preview": "Previsualización del asunto/encabezado:",
        "blockedtitle": "El usuario está bloqueado",
-       "blockedtext": "'''Tu nombre de usuario o dirección IP ha sido bloqueada.'''\n\nEl bloqueo fue hecho por $1.\nLa razón dada es ''$2''.\n\n* Inicio del bloqueo: $8\n* Caducidad del bloqueo: $6\n* Bloqueo destinado a: $7\n\nPuedes contactar con $1 u otro [[{{MediaWiki:Grouppage-sysop}}|administrador]] para discutir el bloqueo.\nNo puedes utilizar la función «enviar correo electrónico a este usuario»  a menos que tengas una dirección de correo electrónico válida registrada en tus [[Special:Preferences|preferencias de usuario]] y que el bloqueo no haya inhabilitado esta función.\n\nTu dirección IP actual es $3, y el identificador del bloqueo es #$5.\nPor favor incluye todos los datos aquí mostrados en cualquier consulta que hagas.",
-       "autoblockedtext": "Tu dirección IP ha sido bloqueada automáticamente porque fue utilizada por otro usuario que fue bloqueado por $1.\nLa razón dada es esta:\n\n:''$2''\n\n* Inicio del bloqueo: $8\n* Caducidad del bloqueo: $6\n* Bloqueo destinado a: $7\n\nPuedes contactar con $1 o con otro de los [[{{MediaWiki:Grouppage-sysop}}|administradores]] para discutir el bloqueo.\n\nTen en cuenta que no podrás utilizar la herramienta de «enviar correo electrónico a este usuario» a menos que tengas una dirección de correo electrónico válida registrada en tus [[Special:Preferences|preferencias de usuario]] y que el bloqueo no haya inhabilitado esta función.\n\nTu actual dirección IP es $3, y el identificador del bloqueo es #$5.\nPor favor, incluye todos los datos mostrados aquí en cualquier consulta que hagas.",
+       "blockedtext": "<strong>Tu nombre de usuario o dirección IP ha sido bloqueada.</strong>\n\nEl bloqueo fue hecho por $1.\nLa razón dada es <em>$2</em>.\n\n* Inicio del bloqueo: $8\n* Caducidad del bloqueo: $6\n* Bloqueo destinado a: $7\n\nPuedes contactar a $1 u otro [[{{MediaWiki:Grouppage-sysop}}|administrador]] para discutir el bloqueo.\nNo puedes utilizar la función «enviar correo electrónico a este usuario»  a menos que tengas una dirección de correo electrónico válida registrada en tus [[Special:Preferences|preferencias de usuario]] y que el bloqueo no haya inhabilitado esta función.\n\nTu dirección IP actual es $3, y el identificador del bloqueo es #$5.\nPor favor incluye todos los datos aquí mostrados en cualquier consulta que hagas.",
+       "autoblockedtext": "Tu dirección IP ha sido bloqueada automáticamente porque fue utilizada por otro usuario que fue bloqueado por $1.\nLa razón dada es esta:\n\n:<em>$2</em>\n\n* Inicio del bloqueo: $8\n* Caducidad del bloqueo: $6\n* Bloqueo destinado a: $7\n\nPuedes contactar con $1 o con otro de los [[{{MediaWiki:Grouppage-sysop}}|administradores]] para discutir el bloqueo.\n\nTen en cuenta que no podrás utilizar la herramienta de «enviar correo electrónico a este usuario» a menos que tengas una dirección de correo electrónico válida registrada en tus [[Special:Preferences|preferencias de usuario]] y que el bloqueo no haya inhabilitado esta función.\n\nTu actual dirección IP es $3, y el identificador del bloqueo es #$5.\nPor favor, incluye todos los datos mostrados aquí en cualquier consulta que hagas.",
        "blockednoreason": "no se ha especificado el motivo",
        "whitelistedittext": "Tienes que $1 para editar artículos.",
        "confirmedittext": "Debes confirmar tu dirección electrónica antes de editar páginas. Por favor, establece y valida una dirección electrónica a través de tus [[Special:Preferences|preferencias de usuario]].",
        "loginreqlink": "acceder",
        "loginreqpagetext": "Debes $1 para ver otras páginas.",
        "accmailtitle": "Se ha enviado la contraseña",
-       "accmailtext": "Se ha enviado a $2 una contraseña generada aleatoriamente para [[User talk:$1|$1]].\n\nLa contraseña para esta nueva cuenta puede cambiarse en [[Special:ChangePassword|la página destinada para ello]] después de haber iniciado sesión.",
+       "accmailtext": "Se ha enviado a $2 una contraseña generada aleatoriamente para [[User talk:$1|$1]]. Puede cambiarse en la página [[Special:ChangePassword|destinada para ello]] después de haber iniciado sesión.",
        "newarticle": "(Nuevo)",
        "newarticletext": "Has seguido un enlace a una página que aún no existe.\nPara crear esta página, escribe en el campo a continuación. Para más información, consulta la [$1 página de ayuda].\nSi llegaste aquí por error, vuelve a la página anterior.",
        "anontalkpagetext": "---- ''Esta es la página de discusión de un usuario anónimo que aún no ha creado una cuenta, o no la usa. Por lo tanto, tenemos que usar su dirección IP para identificarlo. Una dirección IP puede ser compartida por varios usuarios. Si eres un usuario anónimo y crees que se han dirigido a ti con comentarios improcedentes, por favor [[Special:UserLogin/signup|crea una cuenta]] o si ya la tienes [[Special:UserLogin|identifícate]] para evitar confusiones futuras con otros usuarios anónimos.''",
index a95013d..8a5745e 100644 (file)
        "noname": "Sa ei sisestanud kasutajanime lubataval kujul.",
        "loginsuccesstitle": "Sisselogimine õnnestus",
        "loginsuccess": "Oled sisse loginud. Sinu kasutajanimi on \"$1\".",
-       "nosuchuser": "Kasutajat \"$1\" ei ole olemas.\nKasutajanimed on tõstutundlikud.\nKontrollige kirjapilti või [[Special:UserLogin/signup|looge uus kasutajakonto]].",
-       "nosuchusershort": "Kasutajat nimega \"$1\" ei ole olemas. Kontrollige kirjapilti.",
+       "nosuchuser": "Kasutajat \"$1\" pole.\nKasutajanimed on tõstutundlikud.\nKontrolli kirjapilti või [[Special:UserLogin/signup|loo uus konto]].",
+       "nosuchusershort": "Kasutajat nimega \"$1\" pole.\nKontrolli kirjapilti.",
        "nouserspecified": "Kasutajanimi puudub.",
        "login-userblocked": "See kasutaja on blokeeritud. Sisselogimine pole lubatud.",
        "wrongpassword": "Vale parool. Proovi uuesti.",
        "templatesusedpreview": "Eelvaates {{PLURAL:$1|kasutatav mall|kasutatavad mallid}}:",
        "templatesusedsection": "Selles alaosas {{PLURAL:$1|kasutatav mall|kasutatavad mallid}}:",
        "template-protected": "(kaitstud)",
-       "template-semiprotected": "(osaliselt kaitstud)",
+       "template-semiprotected": "(poolkaitstud)",
        "hiddencategories": "See lehekülg kuulub {{PLURAL:$1|1 peidetud kategooriasse|$1 peidetud kategooriasse}}:",
        "nocreatetext": "Lehekülje loomise õigus on {{GRAMMAR:inessive|{{SITENAME}}}} piiratud.\nVõid pöörduda tagasi ja toimetada olemasolevat lehekülge või [[Special:UserLogin|sisse logida või uue konto luua]].",
        "nocreate-loggedin": "Sul ei ole luba luua uusi lehekülgi.",
        "mergehistory-empty": "Ühtegi redaktsiooni ei saa liita.",
        "mergehistory-success": "Lehekülje [[:$1]] {{PLURAL:$3|üks redaktsioon|$3 redaktsiooni}} liideti lehega [[:$2]].",
        "mergehistory-fail": "Muudatuste ajaloo liitmine ebaõnnestus. Palun kontrolli lehekülje ja aja parameetreid.",
+       "mergehistory-fail-toobig": "Ajalugusid ei õnnestu liita, sest teisaldada tuleks rohkem kui {{PLURAL:$1|üks redaktsioon|$1 redaktsiooni}}, mis on piirmäär.",
        "mergehistory-no-source": "Alliklehekülge $1 pole olemas.",
        "mergehistory-no-destination": "Sihtlehekülge $1 pole olemas.",
        "mergehistory-invalid-source": "Allikleheküljel peab olema lubatav pealkiri.",
        "right-sendemail": "Saata teistele kasutajatele e-kirju",
        "right-passwordreset": "Vaadata parooli lähtestamise e-kirju",
        "newuserlogpage": "Kasutaja loomise logi",
-       "newuserlogpagetext": "See logi sisaldab infot äsja loodud uute kasutajate kohta.",
+       "newuserlogpagetext": "Siin on logitud kasutajate registreerimine.",
        "rightslog": "Kasutajaõiguste logi",
        "rightslogtext": "See on logi kasutajate õiguste muutuste kohta.",
        "action-read": "seda lehekülge lugeda",
        "listduplicatedfiles-summary": "Siin on loetletud failid, mille viimane versioon on mõne teise faili viimase versiooni duplikaat. Arvesse võetakse ainult kohalikke faile.",
        "listduplicatedfiles-entry": "Failil [[:File:$1|$1]] on [[$3|{{PLURAL:$2|üks duplikaat|$2 duplikaati}}]].",
        "unusedtemplates": "Kasutamata mallid",
-       "unusedtemplatestext": "See lehekülg loetleb kõik leheküljed nimeruumis {{ns:template}}, mida teistel lehekülgedel ei kasutata. Enne kustutamist palun kontrollige, kas siia pole muid linke.",
+       "unusedtemplatestext": "See lehekülg loetleb kõik leheküljed nimeruumis {{ns:template}}, mida teistel lehekülgedel ei kasutata.\nEnne kustutamist kontrolli ka muid malli juurde viitavaid linke.",
        "unusedtemplateswlh": "teised lingid",
        "randompage": "Juhuslik artikkel",
        "randompage-nopages": "{{PLURAL:$2|Järgmises nimeruumis|Järgmistes nimeruumides}} ei ole ühtegi lehekülge: $1.",
        "version-hook-name": "Haagi nimi",
        "version-hook-subscribedby": "Tellijad",
        "version-version": "($1)",
+       "version-no-ext-name": "[nimi puudub]",
        "version-license": "MediaWiki litsents",
        "version-ext-license": "Litsents",
        "version-ext-colheader-name": "Lisa",
index bde7e6d..6a47d6f 100644 (file)
        "mergehistory-empty": "Aucune version ne peut être fusionnée.",
        "mergehistory-success": "$3 version{{PLURAL:$3||s}} de [[:$1]] fusionnée{{PLURAL:$3||s}} dans [[:$2]].",
        "mergehistory-fail": "Impossible de procéder à la fusion des historiques. Resélectionner la page ainsi que les paramètres de date.",
+       "mergehistory-fail-toobig": "Impossible d’effectuer la fusion de l’historique car un nombre de {{PLURAL:$1|révisions}} supérieur à la limite de $1 devrait être déplacé.",
        "mergehistory-no-source": "La page d'origine $1 n'existe pas.",
        "mergehistory-no-destination": "La page de destination $1 n'existe pas.",
        "mergehistory-invalid-source": "La page d'origine doit avoir un titre valide.",
        "version-hook-name": "Nom du greffon",
        "version-hook-subscribedby": "Abonnés :",
        "version-version": "(version $1)",
+       "version-no-ext-name": "[pas de nom]",
        "version-license": "Licence MediaWiki",
        "version-ext-license": "Licence",
        "version-ext-colheader-name": "Extension",
index 2153fff..f33218c 100644 (file)
        "version-hook-name": "שם ה־Hook",
        "version-hook-subscribedby": "הפונקציה הרושמת",
        "version-version": "($1)",
+       "version-no-ext-name": "[ללא שם]",
        "version-license": "רישיון עבור מדיה־ויקי",
        "version-ext-license": "רישיון",
        "version-ext-colheader-name": "הרחבה",
index ac2f140..64f8c2d 100644 (file)
        "delete_and_move": "Izbriši i premjesti",
        "delete_and_move_text": "==Nužno brisanje==\n\nOdredišni članak \"[[:$1]]\" već postoji. Želite li ga obrisati da biste napravili mjesto za premještaj?",
        "delete_and_move_confirm": "Da, izbriši stranicu",
-       "delete_and_move_reason": "Obrisano kako bi se napravilo mjesta za premještaj, stari naziv \"[[$1]]\"",
+       "delete_and_move_reason": "obrisano kako bi se napravilo mjesto za premještaj, stari naziv \"[[$1]]\"",
        "selfmove": "Izvorni i odredišni naslov su isti; ne mogu premjestiti stranicu na nju samu.",
        "immobile-source-namespace": "Ne mogu premjestiti stranice u imenski prostor \"$1\"",
        "immobile-target-namespace": "Ne mogu premjestiti stranice u imenski prostor \"$1\"",
        "api-error-mustbeloggedin": "Morate biti prijavljeni da bi mogli postavljati datoteke.",
        "api-error-mustbeposted": "Postoji pogreška u ovom softveru; ne rabi ispravnu HTTP metodu.",
        "api-error-noimageinfo": "Postavljanje je uspjelo, ali poslužitelj nije vratio nikakvu informaciju o datoteci.",
-       "api-error-nomodule": "Interna pogrješka: Nije postavljen modul za postavljanje.",
-       "api-error-ok-but-empty": "Interna pogrješka: Nema odgovora od poslužitelja.",
+       "api-error-nomodule": "Interna pogrješka: nije postavljen modul za postavljanje.",
+       "api-error-ok-but-empty": "Interna pogrješka: nema odgovora od poslužitelja.",
        "api-error-overwrite": "Postavljanje preko postojeće datoteke nije dopušteno.",
        "api-error-stashfailed": "Interna pogrješka: Poslužitelj nije uspio spremiti privremenu datoteku.",
-       "api-error-publishfailed": "Interna pogrješka: Poslužitelj nije uspio objaviti privremenu datoteku.",
+       "api-error-publishfailed": "Interna pogrješka: poslužitelj nije uspio objaviti privremenu datoteku.",
        "api-error-timeout": "Poslužitelj nije odgovorio unutar očekivanog vrjemena.",
        "api-error-unclassified": "Dogodila se nepoznata pogrješka.",
        "api-error-unknown-code": "Nepoznata pogrješka: \"$1\"",
-       "api-error-unknown-error": "Interna pogrješka: Dogodila se pogrješka pri pokušaju postavljanja vaše datoteke.",
+       "api-error-unknown-error": "Interna pogrješka: dogodila se pogrješka pri pokušaju postavljanja vaše datoteke.",
        "api-error-unknown-warning": "Nepoznato upozorenje: $1",
        "api-error-unknownerror": "Nepoznata pogrješka: \"$1\"",
        "api-error-uploaddisabled": "Postavljanje datoteka je onemogućeno na ovom wikiprojektu.",
index c053072..0082cb0 100644 (file)
        "eauthentsent": "Sebuah surel untuk konfirmasi telah dikirim ke alamat surel. Sebelum surel lainnya dikirim ke akun tersebut, Anda harus mengikuti instruksi di dalam surel tersebut, untuk melakukan konfirmasi bahwa alamat tersebut adalah benar kepunyaan Anda.",
        "throttled-mailpassword": "Suatu pengingat kata sandi telah dikirimkan dalam {{PLURAL:$1|$1 jam}} terakhir.\nUntuk menghindari penyalahgunaan, hanya satu kata sandi yang akan dikirimkan setiap {{PLURAL:$1|$1 jam}}.",
        "mailerror": "Kesalahan dalam mengirimkan surel: $1",
-       "acct_creation_throttle_hit": "Pengunjung wiki ini dengan alamat IP yang sama dengan Anda telah membuat {{PLURAL:$1|1 akun|$1 akun}} dalam satu hari terakhir, hingga jumlah maksimum yang diijinkan.\nKarenanya, pengunjung dengan alamat IP ini tidak dapat lagi membuat akun lain untuk sementara.",
+       "acct_creation_throttle_hit": "Pengunjung wiki ini dengan alamat IP yang sama dengan Anda telah membuat {{PLURAL:$1|1 akun|$1 akun}} dalam satu hari terakhir, hingga jumlah maksimum yang diizinkan.\nKarenanya, pengunjung dengan alamat IP ini tidak dapat lagi membuat akun lain untuk sementara.",
        "emailauthenticated": "Alamat surel Anda telah dikonfirmasi pada $3, $2.",
        "emailnotauthenticated": "Alamat surel Anda belum dikonfirmasi.\nSebelum dikonfirmasi Anda tidak akan menerima surel dari fitur berikut.",
        "noemailprefs": "Anda harus memasukkan alamat surel di preferensi Anda untuk dapat menggunakan fitur-fitur ini.",
        "filetype-mime-mismatch": "Ekstensi berkas \".$1\" tidak cocok dengan jenis MIME yang terdeteksi dari berkas ($2).",
        "filetype-badmime": "Berkas dengan tipe MIME \"$1\" tidak diperkenankan untuk dimuat.",
        "filetype-bad-ie-mime": "Tidak dapat memuat berkas ini karena Internet Explorer mendeteksinya sebagai \"$1\", yang tak diizinkan dan merupakan tipe berkas yang memiliki potensi bahaya.",
-       "filetype-unwanted-type": "'''\".$1\"''' termasuk jenis berkas yang tidak diijinkan.\n{{PLURAL:$3|Jenis berkas yang disarankan adalah|Jenis berkas yang disarankan adalah}} $2.",
+       "filetype-unwanted-type": "'''\".$1\"''' termasuk jenis berkas yang tidak diizinkan.\n{{PLURAL:$3|Jenis berkas yang disarankan adalah|Jenis berkas yang disarankan adalah}} $2.",
        "filetype-banned-type": "'''\".$1\"''' {{PLURAL:$4|adalah ekstensi berkas yang tidak diizinkan|adalah ekstensi berkas yang tidak diizinkan}}.\n{{PLURAL:$3|Jenis berkas yang diperolehkan adalah|Jenis berkas yang diperolehkan adalah}} $2.",
        "filetype-missing": "Berkas tak memiliki ekstensi (misalnya \".jpg\").",
        "empty-file": "Berkas yang Anda kirim kosong.",
index 6739353..ad0430d 100644 (file)
        "mergehistory-empty": "Nessuna versione da unire.",
        "mergehistory-success": "{{PLURAL:$3|Una versione di [[:$1]] è stata unita|$3 versioni di [[:$1]] sono state unite}} alla cronologia di [[:$2]].",
        "mergehistory-fail": "Impossibile unire le cronologie. Verificare la pagina e i parametri temporali.",
+       "mergehistory-fail-toobig": "Impossibile eseguire l'unione della cronologia con oltre $1 {{PLURAL:$1|revisione|revisioni}} da spostare.",
        "mergehistory-no-source": "La pagina di origine $1 non esiste.",
        "mergehistory-no-destination": "La pagina di destinazione $1 non esiste.",
        "mergehistory-invalid-source": "La pagina di origine deve avere un titolo corretto.",
        "windows-nonascii-filename": "Questo wiki non supporta nomi di file con caratteri speciali.",
        "fileexists": "Un file con questo nome esiste già.\nVerificare prima <strong>[[:$1]]</strong> se non si è sicuri di volerlo sovrascrivere.\n[[$1|thumb]]",
        "filepageexists": "La pagina di descrizione di questo file è già stata creata all'indirizzo <strong>[[:$1]]</strong>, anche se non esiste ancora un file con questo nome. La descrizione dell'oggetto inserita in fase di caricamento non apparirà sulla pagina di descrizione. Per far sì che l'oggetto compaia sulla pagina di descrizione, sarà necessario modificarla manualmente.\n[[$1|thumb]]",
-       "fileexists-extension": "Un file con nome simile a questo esiste già: [[$2|thumb]]\n* Nome del file caricato: <strong>[[:$1]]</strong>\n* Nome del file esistente: <strong>[[:$2]]</strong>\nScegliere un nome diverso.",
+       "fileexists-extension": "Un file con nome simile a questo esiste già: [[$2|thumb]]\n* Nome del file caricato: <strong>[[:$1]]</strong>\n* Nome del file esistente: <strong>[[:$2]]</strong>\nForse vuoi scegliere un nome più caratteristico?.",
        "fileexists-thumbnail-yes": "Il file caricato sembra essere una miniatura ''(thumbnail)''. [[$1|thumb]]\nVerificare, per confronto, il file <strong>[[:$1]]</strong>.\nSe si tratta della stessa immagine, nelle dimensioni originali, non è necessario caricarne altre miniature.",
        "file-thumbnail-no": "Il nome del file inizia con <strong>$1</strong>; sembra quindi essere una miniatura ''(thumbnail)''.\nSe si dispone dell'immagine nella risoluzione originale, si prega di caricarla. In caso contrario, si prega di cambiare il nome del file.",
        "fileexists-forbidden": "Un file con questo nome esiste già e non può essere sovrascritto. Tornare indietro e modificare il nome con il quale caricare il file. [[File:$1|thumb|center|$1]]",
        "filedelete-maintenance": "Cancellazione e recupero di file temporaneamente disattivati durante la manutenzione.",
        "filedelete-maintenance-title": "Impossibile eliminare il file",
        "mimesearch": "Ricerca in base al tipo MIME",
-       "mimesearch-summary": "Questa pagina consente di filtrare i file in base al tipo MIME. Inserire la stringa di ricerca nella forma tipo/sottotipo, ad es. <code>image/jpeg</code>.",
+       "mimesearch-summary": "Questa pagina consente di filtrare i file in base al tipo MIME.\nInserire la stringa di ricerca nella forma tipo/sottotipo o tipo/*, ad es. <code>image/jpeg</code>.",
        "mimetype": "Tipo MIME:",
        "download": "scarica",
        "unwatchedpages": "Pagine non osservate",
        "version-hook-name": "Nome dell'hook",
        "version-hook-subscribedby": "Sottoscrizioni",
        "version-version": "($1)",
+       "version-no-ext-name": "[senza nome]",
        "version-license": "Licenza MediaWiki",
        "version-ext-license": "Licenza",
        "version-ext-colheader-name": "Estensione",
index c2cbe22..3eb9fdc 100644 (file)
        "version-hook-name": "フック名",
        "version-hook-subscribedby": "使用個所",
        "version-version": "(バージョン $1)",
+       "version-no-ext-name": "[名前なし]",
        "version-license": "MediaWiki のライセンス",
        "version-ext-license": "ライセンス",
        "version-ext-colheader-name": "拡張機能",
index f63a41c..a3abd89 100644 (file)
        "titleprotectedwarning": "'''Эсгертиу: Бу бет джакъланыбды. Джангыз [[Special:ListGroupRights|энчи хакълары]] болгъанла текстни салыргъа боллукъдула.'''\nТюбюнде, билги ючюн журналдан ахыр джазыу берилгенди:",
        "templatesused": "Бу бетде хайырланылгъан {{PLURAL:$1|шаблон|шаблонла}}:",
        "templatesusedpreview": "Ал къаралыучу бетде хайырланнган {{PLURAL:$1|1=шаблон|шаблонла}}:",
-       "templatesusedsection": "Бу бетде хайырланнган {{PLURAL:$1|1=шаблон|шаблонла}}:",
+       "templatesusedsection": "Бу бёлюмде хайырланылгъан {{PLURAL:$1|шаблон|шаблонла}}:",
        "template-protected": "(джакъланнган)",
        "template-semiprotected": "(джарты джакъланыбды)",
        "hiddencategories": "Бу бет $1 {{PLURAL:$1|1 джашырылгъан категориягъа|$1 джашырылгъан категориягъа}} киреди:",
        "nocreate-loggedin": "Джангы бетле къураргъа эркинлигигиз джокъду.",
        "sectioneditnotsupported-title": "Бёлюмлени тюрлендирир мадар джокъду.",
        "sectioneditnotsupported-text": "Бу бетде бёлюмлени тюрлендирирге болмайды.",
-       "permissionserrors": "Эркинликлени халатлары",
-       "permissionserrorstext": "Ð\91Ñ\8bлайдагÑ\8aÑ\8b {{PLURAL:$1|1=Ñ\87Ñ\83Ñ\80Ñ\83м|Ñ\87Ñ\83Ñ\80Ñ\83мла}} Ñ\8eÑ\87Ñ\8eн, Ð±Ñ\83нÑ\83 Ñ\8dÑ\82еÑ\80ге Ñ\85акÑ\8aÑ\8bгÑ\8aÑ\8bз Ð´Ð¶Ð¾ÐºÑ\8aдÑ\83:",
+       "permissionserrors": "Эркинликлени халаты",
+       "permissionserrorstext": "Ð\91Ñ\83 Ð¾Ð¿ÐµÑ\80аÑ\86иÑ\8fнÑ\8b Ñ\8dÑ\82еÑ\80ге Ñ\8dÑ\80кинлигигиз Ð´Ð¶Ð¾ÐºÑ\8aдÑ\83, Ð±Ñ\8bлайдагÑ\8aÑ\8b {{PLURAL:$1|1=Ñ\87Ñ\83Ñ\80Ñ\83м|Ñ\87Ñ\83Ñ\80Ñ\83мла}} Ñ\8eÑ\87Ñ\8eн:",
        "permissionserrorstext-withaction": "«'''$2'''» этерге амалыгъыз джокъду. {{PLURAL:$1|1=Чуруму|Чурумлары}}:",
        "recreate-moveddeleted-warn": "'''Эс бёлюгюз! Сиз алгъын кетерилген бетни джангыдан къураргъа излейсиз'''\n\nБетни джангыдан къураргъа кереклигине сагъыш этигиз.\nБетни кетериу бла атын тюрлендирилиуню журналы тюбюнде кёргюзюлгенди.",
        "moveddeleted-notice": "Бу бет кетерилгенди.\nХапарлашдырыу ючюн тюбюрек кетериуле бла ат тюрлендириулени журналы берилгенди.",
index ac63ff9..fc34096 100644 (file)
        "right-edit": "Paginas recensere",
        "right-createpage": "Paginas creare (sine paginis disputationis)",
        "right-createtalk": "Paginas disputationis creare",
-       "right-createaccount": "Rationes usoris novas creare",
+       "right-createaccount": "Rationes usorum novas creare",
        "right-minoredit": "Recensiones minores designare",
        "right-move": "Paginas movere",
        "right-move-subpages": "Paginas una cum subpaginis movere",
index e18013e..21a6d15 100644 (file)
        "version-hook-name": "Nome do hook",
        "version-hook-subscribedby": "Subscrito por",
        "version-version": "(Versão $1)",
+       "version-no-ext-name": "[sem nome]",
        "version-license": "Licença do MediaWiki",
        "version-ext-license": "Licença",
        "version-ext-colheader-name": "Extensão",
index 6879fdc..49f05aa 100644 (file)
        "version-hook-name": "Nome de l'hook",
        "version-hook-subscribedby": "Sottoscritte da",
        "version-version": "(Versione $1)",
+       "version-no-ext-name": "[nisciune nome]",
        "version-svn-revision": "(r$2)",
        "version-license": "Licenze",
        "version-ext-license": "Licenze",
index 3ddaa1a..2ec5dfc 100644 (file)
@@ -16,7 +16,8 @@
                        "Ushanka",
                        "sco.wikipedia.org editors",
                        "לערי ריינהארט",
-                       "아라"
+                       "아라",
+                       "PiRSquared17"
                ]
        },
        "tog-underline": "Unnerline airtins:",
        "newarticle": "(New)",
        "newarticletext": "Ye'v follaed aen airtin til ae page that disna exeest yet. Tae cræft the page, stairt typin in the kist ablo (see the [$1 heelp page] fer mair info). Gif ye'r here bi mistak, jist clap yer brouser's <strong>back</strong> button.",
        "anontalkpagetext": "----\n<em>This is the discussion page fer aen anonymoos uiser that's naw cræftit aen accoont yet, or that disna uise it.</em>\nWe maun therefore uise the numerical IP address tae identifie him/her.\nSic aen IP address can be shaired bi several uisers.\nGif ye'r aen anonymos uiser n feel that onreelavant comments hae been directed at ye, please [[Special:UserLogin/signup|cræft aen accoont]] or [[Special:UserLogin|log in]] tae avoid futur confusion wi ither anonymoos uisers.",
-       "noarticletext": "Thaur's naw tex oan this page the nou. \nYe can [[Special:Search/{{PAGENAME}}|rake fer this page teitle]] in ither pages,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} rake the related logs],\n or [{{fullurl:{{FULLPAGENAME}}|action=edit}} eidit this page].</span>",
+       "noarticletext": "Thaur's naw tex oan this page the nou. \nYe can [[Special:Search/{{PAGENAME}}|rake fer this page teitle]] in ither pages,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} rake the related logs],\nor [{{fullurl:{{FULLPAGENAME}}|action=edit}} eidit this page].</span>",
        "noarticletext-nopermission": "Thaur's nae tex in this page the nou.\nYe can [[Special:Search/{{PAGENAME}}|rake fer this page title]] in ither pages, or <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} rake the relatit logs]</span>, but ye dinna hae permeession tae cræft this page.",
        "missing-revision": "The reveesion #$1 o the page named \"{{FULLPAGENAME}}\" disna exeest.\n\nThis is uissuallie caused bi follaein aen ootdated histerie airtin til ae page that haes been delytit.\nDetails can be foond in the [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} delytion log].",
        "userpage-userdoesnotexist": "Uiser accoont \"<nowiki>$1</nowiki>\" hasnae been registerit. Please check gin ye wint tae mak or eidit this page.",
        "mergehistory-empty": "Naw reveesions can be merged.",
        "mergehistory-success": "$3 {{PLURAL:$3|reveesion|reveesions}} o [[:$1]] successfully merged intil [[:$2]].",
        "mergehistory-fail": "Onable tae perform histerie merge, please recheck the page n time parameters.",
+       "mergehistory-fail-toobig": "Canna perform histerie merge cause mair than the leemit o $1 {{PLURAL:$1|reveesion|reveesions}} wid be muivit.",
        "mergehistory-no-source": "Soorce page $1 disna exeest.",
        "mergehistory-no-destination": "Destination page $1 disna exeest.",
        "mergehistory-invalid-source": "Soorce page maun be ae valid title.",
        "recentchanges-label-bot": "This eedit wis performed bi ae bot",
        "recentchanges-label-unpatrolled": "This eedit haes no bin patrolled yet",
        "recentchanges-label-plusminus": "The page size chynged bi this nummer o bytes",
-       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (see [[Special:NewPages|leet o new pages]] ava)",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (see [[Special:NewPages|leet o new pages]] n aw)",
        "rcnotefrom": "Ablo ar the chynges sin <strong>$2</strong> (up til <strong>$1</strong> shawn).",
        "rclistfrom": "Shaw new chynges stertin fae $3 $2",
        "rcshowhideminor": "$1 smaa eedits",
        "windows-nonascii-filename": "This wiki disna support filenames wi speecial chairacters.",
        "fileexists": "Ae file wi this name exeests aareadies, please check <strong>[[:$1]]</strong> gif ye'r no sair that ye want tae chynge it.\n[[$1|thumb]]",
        "filepageexists": "The descreeption page fer this file haes awreadie been cræftit at <strong>[[:$1]]</strong>, bit nae file wi this name exeests the nou.\nThe ootline that ye enter will na kith oan the descreeption page.\nTae mak yer ootline kith thaur, ye'll need tae manuallie eedit it.\n[[$1|thumb]]",
-       "fileexists-extension": "Ae file wi ae siclike name exeests: [[$2|thumb]]\n* Name o the uplaidin file: <strong>[[:$1]]</strong>\n* Name o the exeestin file: <strong>[[:$2]]</strong>\nPlease chuise ae different name.",
+       "fileexists-extension": "Ae file wi ae siclike name exeests: [[$2|thumb]]\n* Name o the uplaidin file: <strong>[[:$1]]</strong>\n* Name o the exeestin file: <strong>[[:$2]]</strong>\nWid ye lik tae chuise ae mair disteencteeve name?",
        "fileexists-thumbnail-yes": "The file seems tae be aen eemage o reduced size ''(thumbnail)''.\n[[$1|thumb]]\nPlease check the file <strong>[[:$1]]</strong>.\nGif the checked file is the same eemage o oreeginal size it's no necessairie tae uplaid aen extra thumbnail.",
        "file-thumbnail-no": "The filename begins wi <strong>$1</strong>.\nIt seems tae be aen eemage o reduced size ''(thumbnail)''.\nGif ye hae this emage in ful resolution uplaid this yin, itherwise please chynge the filename.",
        "fileexists-forbidden": "Ae file wi this name awreadie exists, n canna be owerwritten.\nGif ye still wish tae uplaid yer file, please gang back n uise ae new name.\n[[File:$1|thumb|center|$1]]",
        "filedelete-maintenance": "Delytion n restoration o files tempralie disabled during maintenance.",
        "filedelete-maintenance-title": "Canna delyte file",
        "mimesearch": "MIME rake",
-       "mimesearch-summary": "This page enables the filterin o files fer thair MIME type.\nInput: contenttype/subtype, e.g. <code>eemage/jpeg</code>.",
+       "mimesearch-summary": "This page enables the filterin o files fer thair MIME type.\nInput: contenttype/subtype or contenttype/*, e.g. <code>eemage/jpeg</code>.",
        "mimetype": "MIME type:",
        "download": "dounlaid",
        "unwatchedpages": "Onwatched pages",
        "version-parser-function-hooks": "Parser function huiks",
        "version-hook-name": "Huik name",
        "version-hook-subscribedby": "Subscribed bi",
+       "version-no-ext-name": "[no name]",
        "version-ext-colheader-description": "Descreeption",
        "version-ext-colheader-credits": "Writers",
        "version-license-title": "License fer $1",
index 536c49c..4a902d0 100644 (file)
        "mergehistory-empty": "Redakcij ni moč združiti.",
        "mergehistory-success": "$3 {{PLURAL:$3|redakcija|redakciji|redakcije|redakcij}} [[:$1]] je uspešno spojenih v [[:$2]].",
        "mergehistory-fail": "Ne morem izvesti združitev zgodovine, prosimo, ponovno preverite strani in parametre časa.",
+       "mergehistory-fail-toobig": "Ne morem izvesti združitve zgodovine, saj bi moral premakniti več kot $1 {{PLURAL:$1|redakcijo|redakciji|redakcije|redakcij}}, kar je omejitev.",
        "mergehistory-no-source": "Izvirna stran $1 ne obstaja.",
        "mergehistory-no-destination": "Ciljna stran $1 ne obstaja.",
        "mergehistory-invalid-source": "Izhodiščna stran mora imeti veljaven naslov.",
        "version-hook-name": "Ime razširitve",
        "version-hook-subscribedby": "Naročen s strani",
        "version-version": "(Različica $1)",
+       "version-no-ext-name": "[brez imena]",
        "version-license": "Dovoljenje MediaWiki",
        "version-ext-license": "Dovoljenje",
        "version-ext-colheader-name": "Razširitev",
index fcb3380..ccf418b 100644 (file)
        "restoreprefs": "Врати све на подразумевано (у свим одељцима)",
        "prefs-editing": "Уређивање",
        "rows": "Редова:",
-       "columns": "Ð\9aолоне:",
+       "columns": "Ð\9aолона",
        "searchresultshead": "Претрага",
        "stub-threshold": "Праг за обликовање <a href=\"#\" class=\"stub\">везе као клице</a> (у бајтовима):",
        "stub-threshold-disabled": "Онемогућено",
        "right-createpage": "прављење страница (изузев страница за разговор)",
        "right-createtalk": "прављење страница за разговор",
        "right-createaccount": "отварање нових корисничких налога",
-       "right-minoredit": "ознаÑ\87аваÑ\9aе Ð¸Ð·Ð¼ÐµÐ½Ð° ÐºÐ°Ð¾ Ð¼Ð°Ñ\9aе",
+       "right-minoredit": "ознаÑ\87аваÑ\9aе Ð¸Ð·Ð¼ÐµÐ½Ð° Ð¼Ð°Ñ\9aим",
        "right-move": "премештање страница",
        "right-move-subpages": "премештање страница с њиховим подстраницама",
        "right-move-rootuserpages": "премештање основних корисничких страница",
        "right-block": "блокирање даљих измена других корисника",
        "right-blockemail": "онемогућавање корисницима да шаљу е-поруке",
        "right-hideuser": "блокирање корисничког имена и његово сакривање од јавности",
-       "right-ipblock-exempt": "заобилажење блокирања IP адресе, аутоматска блокирања и блокирања опсега",
-       "right-proxyunbannable": "заобилажење самоблокирања посредника",
+       "right-ipblock-exempt": "заобилажење блокирања ИП адресе, аутоматска блокирања и блокирања опсега",
+       "right-proxyunbannable": "заобилажење аутоматских блокирања посредника",
        "right-unblockself": "одблокирај самог себе",
        "right-protect": "промени нивое заштите и уреди странице са преносивом заштитом",
        "right-editprotected": "уређивање страница под заштитом „{{int:protect-level-sysop}}“",
        "right-edituserjs": "уређивање туђих JavaScript датотека",
        "right-editmyusercss": "уређивање сопствених CSS датотека",
        "right-editmyuserjs": "уређивање сопствених JavaScript датотека",
-       "right-viewmywatchlist": "vidi sopstveni spisak nadgledanja",
+       "right-viewmywatchlist": "види сопствени списак надгледања",
        "right-viewmyprivateinfo": "видите своје личне податке (нпр. адресу е-поште, право име)",
        "right-editmyprivateinfo": "уређивање сопствених личних података (нпр. адресу е-поште, право име)",
-       "right-editmyoptions": "уредите своја подешавања",
+       "right-editmyoptions": "уређивање сопствених подешавања",
        "right-rollback": "брзо враћање измена последњег корисника који је мењао одређену страницу",
        "right-markbotedits": "означавање враћених измена као измене бота",
        "right-noratelimit": "отпорност на ограничења",
        "right-import": "увожење страница из других викија",
        "right-importupload": "увожење страница из отпремљене датотеке",
        "right-patrol": "означавање туђих измена патролираним",
-       "right-autopatrol": "аÑ\83Ñ\82омаÑ\82Ñ\81ко Ð¾Ð·Ð½Ð°Ñ\87аваÑ\9aе Ð¸Ð·Ð¼ÐµÐ½Ð° ÐºÐ°Ð¾ Ð¿Ñ\80егледаним",
+       "right-autopatrol": "аÑ\83Ñ\82омаÑ\82Ñ\81ко Ð¾Ð·Ð½Ð°Ñ\87аваÑ\9aе Ð¸Ð·Ð¼ÐµÐ½Ð° Ð¿Ð°Ñ\82Ñ\80олиÑ\80аним",
        "right-patrolmarks": "прегледање ознака за патролирање унутар скорашњих измена",
        "right-unwatchedpages": "прегледање списка ненадгледаних страница",
        "right-mergehistory": "спајање историја страница",
        "exif-iimsupplementalcategory": "Допунске категорије",
        "exif-datetimeexpires": "Не користи након",
        "exif-datetimereleased": "Објављено",
-       "exif-originaltransmissionref": "Изворни пренос кôда локације",
+       "exif-originaltransmissionref": "Изворни пренос кода локације",
        "exif-identifier": "Назнака",
        "exif-lens": "Коришћени објектив",
        "exif-serialnumber": "Серијски број камере",
        "compare-revision-not-exists": "Наведена измена не постоји.",
        "dberr-problems": "Дошло је до техничких проблема.",
        "dberr-again": "Сачекајте неколико минута и поново учитајте страницу.",
-       "dberr-info": "(не могу да се повежем са сервером базе: $1)",
+       "dberr-info": "(не могу да се повежем са сервером базе података: $1)",
+       "dberr-info-hidden": "(не могу да се повежем са сервером базе података)",
        "dberr-usegoogle": "У међувремену, покушајте да претражите помоћу Гугла.",
        "dberr-outofdate": "Имајте на уму да њихови примерци нашег садржаја могу бити застарели.",
        "dberr-cachederror": "Ово је привремено меморисан примерак стране који можда није ажуран.",
index 2e5a61a..d416e87 100644 (file)
        "restoreprefs": "Vrati sve na podrazumevano (u svim odeljcima)",
        "prefs-editing": "Uređivanje",
        "rows": "Redova:",
-       "columns": "Kolone:",
+       "columns": "Kolona",
        "searchresultshead": "Pretraga",
        "stub-threshold": "Prag za oblikovanje <a href=\"#\" class=\"stub\">veze kao klice</a> (u bajtovima):",
        "stub-threshold-disabled": "Onemogućeno",
        "right-createpage": "pravljenje stranica (izuzev stranica za razgovor)",
        "right-createtalk": "pravljenje stranica za razgovor",
        "right-createaccount": "otvaranje novih korisničkih naloga",
-       "right-minoredit": "označavanje izmena kao manje",
+       "right-minoredit": "označavanje izmena manjim",
        "right-move": "premeštanje stranica",
        "right-move-subpages": "premeštanje stranica s njihovim podstranicama",
        "right-move-rootuserpages": "premeštanje osnovnih korisničkih stranica",
        "right-blockemail": "onemogućavanje korisnicima da šalju e-poruke",
        "right-hideuser": "blokiranje korisničkog imena i njegovo sakrivanje od javnosti",
        "right-ipblock-exempt": "zaobilaženje blokiranja IP adrese, automatska blokiranja i blokiranja opsega",
-       "right-proxyunbannable": "zaobilaženje samoblokiranja posrednika",
+       "right-proxyunbannable": "zaobilaženje automatskih blokiranja posrednika",
        "right-unblockself": "odblokiraj samog sebe",
        "right-protect": "promeni nivoe zaštite i uredi stranice sa prenosivom zaštitom",
        "right-editprotected": "uređivanje stranice pod zaštitom „{{int:protect-level-sysop}}“",
        "right-viewmywatchlist": "vidi sopstveni spisak nadgledanja",
        "right-viewmyprivateinfo": "vidite svoje lične podatke (npr. adresu e-pošte, pravo ime)",
        "right-editmyprivateinfo": "uređivanje sopstvenih ličnih podataka (npr. adresu e-pošte, pravo ime)",
-       "right-editmyoptions": "uredite svoja podešavanja",
+       "right-editmyoptions": "uređivanje sopstvenih podešavanja",
        "right-rollback": "brzo vraćanje izmena poslednjeg korisnika koji je menjao određenu stranicu",
        "right-markbotedits": "označavanje vraćenih izmena kao izmene bota",
        "right-noratelimit": "otpornost na ograničenja",
        "right-import": "uvoženje stranica iz drugih vikija",
        "right-importupload": "uvoženje stranica iz otpremljene datoteke",
        "right-patrol": "označavanje tuđih izmena patroliranim",
-       "right-autopatrol": "automatsko označavanje izmena kao pregledanim",
+       "right-autopatrol": "automatsko označavanje izmena patroliranim",
        "right-patrolmarks": "pregledanje oznaka za patroliranje unutar skorašnjih izmena",
        "right-unwatchedpages": "pregledanje spiska nenadgledanih stranica",
        "right-mergehistory": "spajanje istorija stranica",
        "exif-iimsupplementalcategory": "Dopunske kategorije",
        "exif-datetimeexpires": "Ne koristi nakon",
        "exif-datetimereleased": "Objavljeno",
-       "exif-originaltransmissionref": "Izvorni prenos kôda lokacije",
+       "exif-originaltransmissionref": "Izvorni prenos koda lokacije",
        "exif-identifier": "Naznaka",
        "exif-lens": "Korišćeni objektiv",
        "exif-serialnumber": "Serijski broj kamere",
        "compare-revision-not-exists": "Navedena izmena ne postoji.",
        "dberr-problems": "Došlo je do tehničkih problema.",
        "dberr-again": "Sačekajte nekoliko minuta i ponovo učitajte stranicu.",
-       "dberr-info": "(ne mogu da se povežem sa serverom baze: $1)",
+       "dberr-info": "(ne mogu da se povežem sa serverom baze podataka: $1)",
+       "dberr-info-hidden": "(ne mogu da se povežem sa serverom baze podataka)",
        "dberr-usegoogle": "U međuvremenu, pokušajte da pretražite pomoću Gugla.",
        "dberr-outofdate": "Imajte na umu da njihovi primerci našeg sadržaja mogu biti zastareli.",
        "dberr-cachederror": "Ovo je privremeno memorisan primerak strane koji možda nije ažuran.",
index ad1799d..9f845f6 100644 (file)
        "mergehistory-empty": "Inga versioner av sidorna kan sammanfogas.",
        "mergehistory-success": "$3 {{PLURAL:$3|version|versioner}} av [[:$1]] har infogats i [[:$2]].",
        "mergehistory-fail": "Historikerna kunde inte sammanfogas, kontrollera de sidor och den sidversion som du valt.",
+       "mergehistory-fail-toobig": "Kunde inte utföra historiksammanslagningen då fler än maxgränsen på $1 {{PLURAL:$1|version|versioner}} skulle ha flyttats.",
        "mergehistory-no-source": "Källsidan $1 finns inte.",
        "mergehistory-no-destination": "Målsidan $1 finns inte.",
        "mergehistory-invalid-source": "Källsidan måste vara en giltig sidtitel.",
        "windows-nonascii-filename": "Denna wiki stödjer inte filnamn med specialtecken.",
        "fileexists": "Det finns redan en fil med detta namn. Titta på <strong>[[:$1]]</strong>, om {{GENDER:|du}} inte är säker på att {{GENDER:|du}} vill ändra den.\n[[$1|thumb]]",
        "filepageexists": "Beskrivningssidan för denna fil har redan skapats på <strong>[[:$1]]</strong>, men just nu finns ingen fil med detta namn.\nDen sammanfattning du skriver här kommer inte visas på beskrivningssidan.\nFör att din sammanfattning ska visas där, så måste du redigera beskrivningssidan manuellt.\n[[$1|thumb]]",
-       "fileexists-extension": "En fil med ett liknande namn finns redan: [[$2|thumb]]\n* Namn på den fil du försöker ladda upp: <strong>[[:$1]]</strong>\n* Namn på filen som redan finns: <strong>[[:$2]]</strong>\nVar vänlig välj ett annat namn.",
+       "fileexists-extension": "En fil med ett liknande namn finns redan: [[$2|thumb]]\n* Namn på den fil du försöker ladda upp: <strong>[[:$1]]</strong>\n* Namn på filen som redan finns: <strong>[[:$2]]</strong>\nVill du möjligen välja ett mer distinkt namn?",
        "fileexists-thumbnail-yes": "Filen verkar vara en bild med förminskad storlek ''(miniatyrbild)''. [[$1|thumb]]\nVar vänlig kontrollera filen <strong>[[:$1]]</strong>.\nOm det är samma fil i originalstorlek så är det inte nödvändigt att ladda upp en extra miniatyrbild.",
        "file-thumbnail-no": "Filnamnet börjar med <strong>$1</strong>.\nDet verkar vara en bild med förminskad storlek ''(miniatyrbild)''.\nOm du har denna bild i full storlek, ladda då hellre upp den, annars var vänlig och ändra filens namn.",
        "fileexists-forbidden": "En fil med detta namn existerar redan, och kan inte överskrivas.\nOm du fortfarande vill ladda upp din fil, var god gå tillbaka och välj ett nytt namn. [[File:$1|thumb|center|$1]]",
        "filedelete-maintenance": "Radering och återställning av filer har tillfälligt avaktiverats under underhåll.",
        "filedelete-maintenance-title": "Kan inte radera filen",
        "mimesearch": "MIME-sökning",
-       "mimesearch-summary": "På den här sidan kan du söka efter filer via dess MIME-typ. Input: contenttype/subtype, t.ex. <code>image/jpeg</code>.",
+       "mimesearch-summary": "Denna sidan gör det möjligt att filtrera filer via dess MIME-typ.\nIndata: contenttype/subtype, t.ex. <code>image/jpeg</code>.",
        "mimetype": "MIME-typ:",
        "download": "ladda ner",
        "unwatchedpages": "Obevakade sidor",
        "version-hook-name": "Namn på hook",
        "version-hook-subscribedby": "Används av",
        "version-version": "(Version $1)",
+       "version-no-ext-name": "[inget namn]",
        "version-license": "MediaWiki-licens",
        "version-ext-license": "Licens",
        "version-ext-colheader-name": "Tillägg",
index cc9cb5b..63b80e9 100644 (file)
        "deadendpagestext": "Aşağıdaki sayfalar, {{SITENAME}} sitesinde diğer sayfalara bağlantı vermiyor.",
        "protectedpages": "Koruma altındaki sayfalar",
        "protectedpages-indef": "Sadece süresiz korumalar",
-       "protectedpages-summary": "Bu sayfa şu anda koruma altında olan mevcut sayfaları listeler. Oluşturulması korunan başlıkların bir listesi için [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]] sayfasına bakın.",
+       "protectedpages-summary": "Bu sayfa şu anda koruma altında olan mevcut sayfaları listeler. Oluşturulması korunan başlıkların listesi için [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]] sayfasına bakın.",
        "protectedpages-cascade": "Sadece ardışık korumalar",
        "protectedpages-noredirect": "Yönlendirmeleri gizle",
        "protectedpagesempty": "Şu anda, bu parametrelerle korunan hiç bir sayfa yok.",
        "protectedpages-unknown-timestamp": "Bilinmiyor",
        "protectedpages-unknown-performer": "Bilinmeyen kullanıcı",
        "protectedtitles": "Korunan başlıklar",
-       "protectedtitles-summary": "Bu sayfa şu anda oluşturulması korunan başlıkları listeler. Koruma altında olan mevcut sayfaların bir listesi için [[{{#special:ProtectedPages}}|{{int:protectedpages}}]] sayfasına bakın.",
+       "protectedtitles-summary": "Bu sayfa şu anda oluşturulması korunan başlıkları listeler. Koruma altında olan mevcut sayfaların listesi için [[{{#special:ProtectedPages}}|{{int:protectedpages}}]] sayfasına bakın.",
        "protectedtitlesempty": "Şu anda, bu parametrelerle korunan hiç bir başlık yok.",
        "listusers": "Kullanıcı listesi",
        "listusers-editsonly": "Sadece değişiklik yapan kullanıcıları göster",
        "listgrouprights-removegroup-self": "Kendi hesabından {{PLURAL:$2|grup|grupları}} çıkarabilir: $1",
        "listgrouprights-addgroup-self-all": "Kendi hesabına tüm grupları ekleyebilir",
        "listgrouprights-removegroup-self-all": "Kendi hesabından tüm grupları çıkarabilir",
+       "trackingcategories-nodesc": "Açıklama yok.",
        "mailnologin": "Gönderi adresi yok.",
        "mailnologintext": "Diğer kullanıcılara e-posta gönderebilmeniz için [[Special:UserLogin|oturum aç]]malısınız ve [[Special:Preferences|tercihler]] sayfasında geçerli bir e-posta adresiniz olmalı.",
        "emailuser": "Bu kullanıcıya e-posta gönder",
index 7b4bfc0..6667c65 100644 (file)
        "mergehistory-empty": "Không thể trộn được sửa đổi nào.",
        "mergehistory-success": "$3 {{PLURAL:$3|sửa đổi|sửa đổi}} của [[:$1]] đã được trộn vào [[:$2]].",
        "mergehistory-fail": "Không thể thực hiện được việc trộn lịch sử sửa đổi, vui lòng chọn lại trang cũng như thông số ngày giờ.",
+       "mergehistory-fail-toobig": "Không thể trộn lịch sử vì phải di chuyển $1 phiên bản và vượt quá giới hạn cho phép.",
        "mergehistory-no-source": "Trang nguồn $1 không tồn tại.",
        "mergehistory-no-destination": "Trang đích $1 không tồn tại.",
        "mergehistory-invalid-source": "Trang nguồn phải có tiêu đề hợp lệ.",
        "action-patrol": "đánh dấu đã tuần tra vào sửa đổi của người khác",
        "action-autopatrol": "tự động đánh dấu đã tuần tra vào sửa đổi của bạn",
        "action-unwatchedpages": "xem danh sách các trang chưa được theo dõi",
-       "action-mergehistory": "hợp nhất lịch sử của trang này",
+       "action-mergehistory": "trộn lịch sử của trang này",
        "action-userrights": "sửa đổi mọi quyền người dùng",
        "action-userrights-interwiki": "sửa đổi quyền của người dùng tại wiki khác",
        "action-siteadmin": "khóa hoặc mở khóa cơ sở dữ liệu",
        "windows-nonascii-filename": "Wiki này không hỗ trợ ký tự đặc biệt trong tên tập tin.",
        "fileexists": "Một tập tin với tên này đã tồn tại, xin hãy kiểm tra lại <strong>[[:$1]]</strong> nếu bạn không chắc bạn có muốn thay đổi nó hay không.\n[[$1|thumb]]",
        "filepageexists": "Trang miêu tả của tập tin này đã được tạo tại <strong>[[:$1]]</strong>, nhưng hiện không có tập tin nào có tên như vậy.\nNhững gì bạn ghi trong ô \"Tóm tắt tập tin\" sẽ không hiện ra ở trang miêu tả.\nĐể khiến nó hiển thị, bạn cần phải sửa đổi trang đó bằng tay.\n[[$1|thumb]]",
-       "fileexists-extension": "Hiện có một tập tin trùng tên: [[$2|thumb]]\n* Tên tập tin đang tải lên: <strong>[[:$1]]</strong>\n* Tên tập tin có từ trước: <strong>[[:$2]]</strong>\nXin hãy chọn một tên tập tin khác.",
+       "fileexists-extension": "Hiện có một tập tin trùng tên: [[$2|thumb]]\n* Tên tập tin đang tải lên: <strong>[[:$1]]</strong>\n* Tên tập tin có từ trước: <strong>[[:$2]]</strong>\nGợi ý bạn chọn một tên rõ hơn.",
        "fileexists-thumbnail-yes": "Tập tin này có vẻ là hình có kích thước thu gọn ''(hình thu nhỏ)''. [[$1|thumb]]\nXin kiểm tra lại tập tin <strong>[[:$1]]</strong>.\nNếu tập tin được kiểm tra trùng với hình có kích cỡ gốc thì không cần thiết tải lên một hình thu nhỏ khác.",
        "file-thumbnail-no": "Tên tập tin bắt đầu bằng <strong>$1</strong>.\nCó vẻ đây là bản thu nhỏ của hình gốc ''(thumbnail)''.\nNếu bạn có hình ở độ phân giải tối đa, xin hãy tải bản đó lên, nếu không xin hãy đổi lại tên tập tin.",
        "fileexists-forbidden": "Đã có tập tin với tên gọi này, và nó không thể bị ghi đè.\nNếu bạn vẫn muốn tải tập tin của bạn lên, xin hãy quay lại và sử dụng một tên khác. [[File:$1|thumb|center|$1]]",
        "filedelete-maintenance": "Tác vụ xóa và phục hồi tập tin đã bị tắt tạm thời trong khi bảo trì.",
        "filedelete-maintenance-title": "Không thể xóa tập tin",
        "mimesearch": "Tìm kiếm theo định dạng",
-       "mimesearch-summary": "Trang này có khả năng lọc tập tin theo kiểu MIME. Đầu vào: kiểu-nội-dung/kiểu-phụ, v.d. <code>image/jpeg</code>.",
+       "mimesearch-summary": "Trang này có khả năng lọc tập tin theo kiểu MIME. Đầu vào: kiểu-nội-dung/kiểu-phụ hoặc kiểu-nội-dung/*, ví dụ <code>image/jpeg</code>.",
        "mimetype": "Kiểu MIME:",
        "download": "tải về",
        "unwatchedpages": "Trang chưa được theo dõi",
        "version-hook-name": "Tên hook",
        "version-hook-subscribedby": "Được theo dõi bởi",
        "version-version": "(Phiên bản $1)",
+       "version-no-ext-name": "[không tên]",
        "version-license": "Giấy phép MediaWiki",
        "version-ext-license": "Giấy phép",
        "version-ext-colheader-name": "Phần mở rộng",
index a2c4b65..62c3efe 100644 (file)
        "version-hook-name": "钩名",
        "version-hook-subscribedby": "署名",
        "version-version": "(版本 $1)",
+       "version-no-ext-name": "[无名称]",
        "version-license": "MediaWiki协议",
        "version-ext-license": "许可协议",
        "version-ext-colheader-name": "扩展程序",
index 14eaeab..c1d93ef 100644 (file)
@@ -26,10 +26,10 @@ CREATE TABLE /*_*/uploadstash (
 
        us_status varchar(50) not null,
 
-       -- file properties from File::getPropsFromPath.  these may prove unnecessary.
+       -- file properties from FSFile::getProps().  these may prove unnecessary.
        --
        us_size int unsigned NOT NULL,
-       -- this hash comes from File::sha1Base36(), and is 31 characters
+       -- this hash comes from FSFile::getSha1Base36(), and is 31 characters
        us_sha1 varchar(31) NOT NULL,
        us_mime varchar(255),
        -- Media type as defined by the MEDIATYPE_xxx constants, should duplicate definition in the image table
index fe48daf..9929cf9 100644 (file)
@@ -92,6 +92,7 @@ class FindHooks extends Maintenance {
                        $IP . '/includes/json/',
                        $IP . '/includes/logging/',
                        $IP . '/includes/media/',
+                       $IP . '/includes/page/',
                        $IP . '/includes/parser/',
                        $IP . '/includes/rcfeed/',
                        $IP . '/includes/resourceloader/',
index 3dd4a9e..ae70441 100644 (file)
@@ -177,7 +177,7 @@ if ( $count > 0 ) {
                        if ( isset( $options['skip-dupes'] ) ) {
                                $repo = $image->getRepo();
                                # XXX: we end up calculating this again when actually uploading. that sucks.
-                               $sha1 = File::sha1Base36( $file );
+                               $sha1 = FSFile::getSha1Base36FromPath( $file );
 
                                $dupes = $repo->findBySha1( $sha1 );
 
index fb8db08..bccf366 100644 (file)
@@ -736,12 +736,12 @@ CREATE TABLE /*_*/uploadstash (
   -- chunk counter starts at 0, current offset is stored in us_size
   us_chunk_inx int NULL,
 
-  -- Serialized file properties from File::getPropsFromPath
+  -- Serialized file properties from FSFile::getProps()
   us_props nvarchar(max),
 
   -- file size in bytes
   us_size int NOT NULL,
-  -- this hash comes from File::sha1Base36(), and is 31 characters
+  -- this hash comes from FSFile::getSha1Base36(), and is 31 characters
   us_sha1 nvarchar(31) NOT NULL,
   us_mime nvarchar(255),
   -- Media type as defined by the MEDIATYPE_xxx constants, should duplicate definition in the image table
index 67696f2..4f1fbbd 100644 (file)
@@ -1001,12 +1001,12 @@ CREATE TABLE /*_*/uploadstash (
   -- chunk counter starts at 0, current offset is stored in us_size
   us_chunk_inx int unsigned NULL,
 
-  -- Serialized file properties from File::getPropsFromPath
+  -- Serialized file properties from FSFile::getProps()
   us_props blob,
 
   -- file size in bytes
   us_size int unsigned NOT NULL,
-  -- this hash comes from File::sha1Base36(), and is 31 characters
+  -- this hash comes from FSFile::getSha1Base36(), and is 31 characters
   us_sha1 varchar(31) NOT NULL,
   us_mime varchar(255),
   -- Media type as defined by the MEDIATYPE_xxx constants, should duplicate definition in the image table
index 15f53f0..775b249 100644 (file)
@@ -66,6 +66,7 @@ figure[typeof*='mw:Image'] {
 
        &.mw-halign-center {
                margin: 0 auto .5em auto;
+               display: table;
                clear: none;
                float: none;
        }
@@ -113,6 +114,10 @@ figure[typeof~='mw:Image/Frame'] > *:first-child > img,
        margin: 4px;
 }
 
+/* Hide the caption for frameless and plain floated images */
+figure[typeof~="mw:Image/Frameless"] > figcaption,
+figure[typeof~="mw:Image"] > figcaption { display: none }
+
 /*
  * Finally, some basic styling for Parsoid render testing.
  * Only Parsoid directly sets .mw-body-content directly on the body, so this
index 7e7c42f..5d52160 100644 (file)
@@ -145,6 +145,7 @@ class ParserTest {
 
                $this->hooks = array();
                $this->functionHooks = array();
+               $this->transparentHooks = array();
                self::setUp();
        }
 
@@ -528,6 +529,10 @@ class ParserTest {
                        $parser->setFunctionHook( $tag, $callback, $flags );
                }
 
+               foreach ( $this->transparentHooks as $tag => $callback ) {
+                       $parser->setTransparentTagHook( $tag, $callback );
+               }
+
                wfRunHooks( 'ParserTestParser', array( &$parser ) );
 
                return $parser;
@@ -1523,6 +1528,29 @@ class ParserTest {
                return true;
        }
 
+       /**
+        * Steal a callback function from the primary parser, save it for
+        * application to our scary parser. If the hook is not installed,
+        * abort processing of this file.
+        *
+        * @param string $name
+        * @return bool True if function hook is present
+        */
+       public function requireTransparentHook( $name ) {
+               global $wgParser;
+
+               $wgParser->firstCallInit(); // make sure hooks are loaded.
+
+               if ( isset( $wgParser->mTransparentTagHooks[$name] ) ) {
+                       $this->transparentHooks[$name] = $wgParser->mTransparentTagHooks[$name];
+               } else {
+                       echo "   This test suite requires the '$name' transparent hook extension, skipping.\n";
+                       return false;
+               }
+
+               return true;
+       }
+
        /**
         * Run the "tidy" command on text if the $wgUseTidy
         * global is true
index c447a44..b3e9c51 100644 (file)
@@ -15134,6 +15134,37 @@ image:foobar.jpg|Blabla|alt=This is a foo-bar.|blabla.
 
 !! end
 
+!! test
+Gallery with link that has fragment
+!! wikitext
+<gallery>
+image:foobar.jpg|link=Main_Page
+image:foobar.jpg|link=Main_Page#section
+image:foobar.jpg|link=Main Page#section|caption
+</gallery>
+!! html
+<ul class="gallery mw-gallery-traditional">
+               <li class="gallerybox" style="width: 155px"><div style="width: 155px">
+                       <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/Main_Page"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" /></a></div></div>
+                       <div class="gallerytext">
+                       </div>
+               </div></li>
+               <li class="gallerybox" style="width: 155px"><div style="width: 155px">
+                       <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/Main_Page#section"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" /></a></div></div>
+                       <div class="gallerytext">
+                       </div>
+               </div></li>
+               <li class="gallerybox" style="width: 155px"><div style="width: 155px">
+                       <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/Main_Page#section"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" /></a></div></div>
+                       <div class="gallerytext">
+<p>caption
+</p>
+                       </div>
+               </div></li>
+</ul>
+
+!! end
+
 !! test
 Gallery with wikitext inside caption
 !! wikitext
index d322e47..5c42fae 100644 (file)
@@ -25,6 +25,7 @@ class NewParserTest extends MediaWikiTestCase {
        public $savedGlobals = array();
        public $hooks = array();
        public $functionHooks = array();
+       public $transparentHooks = array();
 
        //Fuzz test
        public $maxFuzzTestLength = 300;
@@ -945,6 +946,12 @@ class NewParserTest extends MediaWikiTestCase {
                return isset( $wgParser->mFunctionHooks[$name] );
        }
 
+       public function requireTransparentHook( $name ) {
+               global $wgParser;
+               $wgParser->firstCallInit(); // make sure hooks are loaded.
+               return isset( $wgParser->mTransparentTagHooks[$name] );
+       }
+
        //Various "cleanup" functions
 
        /**
diff --git a/tests/phpunit/includes/specials/SpecialMIMESearchTest.php b/tests/phpunit/includes/specials/SpecialMIMESearchTest.php
new file mode 100644 (file)
index 0000000..e7bb35c
--- /dev/null
@@ -0,0 +1,44 @@
+<?php
+class SpecialMIMESearchTest extends MediaWikiTestCase {
+
+       /** @var MIMESearchPage */
+       private $page;
+
+       function setUp() {
+               $this->page = new MIMESearchPage;
+               $context = new RequestContext();
+               $context->setTitle( Title::makeTitle( NS_SPECIAL, 'MIMESearch' ) );
+               $context->setRequest( new FauxRequest() );
+               $this->page->setContext( $context );
+
+               parent::setUp();
+       }
+
+       /**
+        * @dataProvider providerMimeFiltering
+        * @param $par String subpage for special page
+        * @param $major String Major mime type we expect to look for
+        * @param $minor String Minor mime type we expect to look for
+        */
+       function testMimeFiltering( $par, $major, $minor ) {
+               $this->page->run( $par );
+               $qi = $this->page->getQueryInfo();
+               $this->assertEquals( $qi['conds']['img_major_mime'], $major );
+               if ( $minor !== null ) {
+                       $this->assertEquals( $qi['conds']['img_minor_mime'], $minor );
+               } else {
+                       $this->assertArrayNotHasKey( 'img_minor_mime', $qi['conds'] );
+               }
+               $this->assertContains( 'image', $qi['tables'] );
+       }
+
+       function providerMimeFiltering() {
+               return array(
+                       array( 'image/gif', 'image', 'gif' ),
+                       array( 'image/png', 'image', 'png' ),
+                       array( 'application/pdf', 'application', 'pdf' ),
+                       array( 'image/*', 'image', null ),
+                       array( 'multipart/*', 'multipart', null ),
+               );
+       }
+}
index a034031..d2e7f6e 100644 (file)
@@ -465,6 +465,22 @@ class TestFileIterator implements Iterator {
                                        continue;
                                }
 
+                               if ( $this->section == 'endtransparenthooks' ) {
+                                       $this->checkSection( 'transparenthooks' );
+
+                                       foreach ( explode( "\n", $this->sectionData['transparenthooks'] ) as $line ) {
+                                               $line = trim( $line );
+
+                                               if ( $line ) {
+                                                       $delayedParserTest->requireTransparentHook( $line );
+                                               }
+                                       }
+
+                                       $this->clearSection();
+
+                                       continue;
+                               }
+
                                if ( $this->section == 'end' ) {
                                        $this->checkSection( 'test' );
                                        // "input" and "result" are old section names allowed
@@ -601,6 +617,7 @@ class DelayedParserTest {
        /** Initialized on construction */
        private $hooks;
        private $fnHooks;
+       private $transparentHooks;
 
        public function __construct() {
                $this->reset();
@@ -613,6 +630,7 @@ class DelayedParserTest {
        public function reset() {
                $this->hooks = array();
                $this->fnHooks = array();
+               $this->transparentHooks = array();
        }
 
        /**
@@ -641,6 +659,14 @@ class DelayedParserTest {
                        }
                }
 
+               # Trigger delayed transparent hooks. Any failure will make us abort
+               foreach ( $this->transparentHooks as $hook ) {
+                       $ret = $parserTest->requireTransparentHook( $hook );
+                       if ( !$ret ) {
+                               return false;
+                       }
+               }
+
                # Delayed execution was successful.
                return true;
        }
@@ -663,6 +689,15 @@ class DelayedParserTest {
                $this->fnHooks[] = $fnHook;
        }
 
+       /**
+        * Similar to ParserTest object but does not run anything
+        * Use unleash() to really execute the hook function
+        * @param string $fnHook
+        */
+       public function requireTransparentHook( $hook ) {
+               $this->transparentHooks[] = $hook;
+       }
+
 }
 
 /**