Merge "Remove float from config-settings-block"
authorDemon <chadh@wikimedia.org>
Wed, 24 Oct 2012 17:24:38 +0000 (17:24 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Wed, 24 Oct 2012 17:24:38 +0000 (17:24 +0000)
144 files changed:
bin/ulimit4.sh [changed mode: 0644->0755]
docs/hooks.txt
includes/AutoLoader.php
includes/CacheHelper.php
includes/DataUpdate.php
includes/EditPage.php
includes/IP.php
includes/Linker.php
includes/Message.php
includes/SkinTemplate.php
includes/SpecialPage.php
includes/Title.php
includes/WebRequest.php
includes/WebResponse.php
includes/WikiPage.php
includes/actions/InfoAction.php
includes/api/ApiBase.php
includes/api/ApiFormatNone.php
includes/api/ApiParse.php
includes/api/ApiQueryORM.php
includes/cache/CacheDependency.php
includes/cache/HTMLCacheUpdate.php
includes/content/AbstractContent.php
includes/content/Content.php
includes/content/ContentHandler.php
includes/content/TextContent.php
includes/content/TextContentHandler.php
includes/content/WikitextContent.php
includes/db/Database.php
includes/db/DatabaseIbm_db2.php
includes/db/DatabaseMssql.php
includes/db/IORMRow.php
includes/db/IORMTable.php
includes/db/ORMIterator.php
includes/db/ORMResult.php
includes/db/ORMRow.php
includes/db/ORMTable.php
includes/debug/Debug.php
includes/filebackend/README [new file with mode: 0644]
includes/filebackend/SwiftFileBackend.php
includes/installer/WebInstaller.php
includes/job/DoubleRedirectJob.php [deleted file]
includes/job/EmaillingJob.php [deleted file]
includes/job/EnotifNotifyJob.php [deleted file]
includes/job/RefreshLinksJob.php [deleted file]
includes/job/UploadFromUrlJob.php [deleted file]
includes/job/jobs/DoubleRedirectJob.php [new file with mode: 0644]
includes/job/jobs/EmaillingJob.php [new file with mode: 0644]
includes/job/jobs/EnotifNotifyJob.php [new file with mode: 0644]
includes/job/jobs/HTMLCacheUpdateJob.php [new file with mode: 0644]
includes/job/jobs/RefreshLinksJob.php [new file with mode: 0644]
includes/job/jobs/UploadFromUrlJob.php [new file with mode: 0644]
includes/libs/GenericArrayObject.php
includes/logging/LogEntry.php
includes/objectcache/MemcachedClient.php
includes/resourceloader/ResourceLoader.php
includes/resourceloader/ResourceLoaderFileModule.php
includes/search/SearchEngine.php
includes/search/SearchMssql.php
includes/site/MediaWikiSite.php
includes/site/Site.php
includes/site/SiteArray.php
includes/site/SiteList.php
includes/site/SiteObject.php
includes/site/Sites.php
includes/site/SitesTable.php
includes/specials/SpecialBooksources.php
includes/specials/SpecialCachedPage.php
includes/specials/SpecialContributions.php
includes/specials/SpecialListusers.php
includes/specials/SpecialNewpages.php
includes/specials/SpecialRecentchangeslinked.php
includes/upload/UploadStash.php
languages/messages/MessagesAr.php
languages/messages/MessagesArc.php
languages/messages/MessagesAst.php
languages/messages/MessagesBa.php
languages/messages/MessagesBcl.php
languages/messages/MessagesCa.php
languages/messages/MessagesCy.php
languages/messages/MessagesDiq.php
languages/messages/MessagesEn.php
languages/messages/MessagesEs.php
languages/messages/MessagesFr.php
languages/messages/MessagesFrp.php
languages/messages/MessagesGl.php
languages/messages/MessagesGu.php
languages/messages/MessagesHe.php
languages/messages/MessagesIlo.php
languages/messages/MessagesIs.php
languages/messages/MessagesJa.php
languages/messages/MessagesKab.php
languages/messages/MessagesKhw.php
languages/messages/MessagesLez.php
languages/messages/MessagesMs.php
languages/messages/MessagesNah.php
languages/messages/MessagesNb.php
languages/messages/MessagesNl.php
languages/messages/MessagesNn.php
languages/messages/MessagesPms.php
languages/messages/MessagesPs.php
languages/messages/MessagesQqq.php
languages/messages/MessagesRoa_tara.php
languages/messages/MessagesRu.php
languages/messages/MessagesTh.php
languages/messages/MessagesTr.php
languages/messages/MessagesUk.php
languages/messages/MessagesVi.php
languages/messages/MessagesWar.php
languages/messages/MessagesYi.php
languages/messages/MessagesZh_hans.php
languages/messages/MessagesZh_hant.php
maintenance/Doxyfile
maintenance/cleanupUploadStash.php
resources/mediawiki/mediawiki.searchSuggest.js
skins/CologneBlue.php
tests/parser/parserTests.txt
tests/phpunit/includes/ArticleTest.php
tests/phpunit/includes/BlockTest.php
tests/phpunit/includes/CdbTest.php
tests/phpunit/includes/ExtraParserTest.php
tests/phpunit/includes/FauxResponseTest.php
tests/phpunit/includes/FormOptionsInitializationTest.php
tests/phpunit/includes/FormOptionsTest.php
tests/phpunit/includes/LinksUpdateTest.php
tests/phpunit/includes/PathRouterTest.php
tests/phpunit/includes/RevisionStorageTest.php
tests/phpunit/includes/SiteConfigurationTest.php
tests/phpunit/includes/TextContentTest.php
tests/phpunit/includes/TitleMethodsTest.php
tests/phpunit/includes/WikiPageTest.php
tests/phpunit/includes/WikitextContentHandlerTest.php
tests/phpunit/includes/XmlSelectTest.php
tests/phpunit/includes/ZipDirectoryReaderTest.php
tests/phpunit/includes/db/DatabaseTest.php
tests/phpunit/includes/debug/MWDebugTest.php
tests/phpunit/includes/media/PNGMetadataExtractorTest.php
tests/phpunit/includes/media/SVGMetadataExtractorTest.php
tests/phpunit/includes/media/XMPTest.php
tests/phpunit/includes/parser/MagicVariableTest.php
tests/phpunit/includes/parser/ParserPreloadTest.php
tests/phpunit/includes/parser/PreprocessorTest.php
tests/phpunit/includes/parser/TagHooksTest.php
tests/phpunit/includes/specials/SpecialRecentchangesTest.php

old mode 100644 (file)
new mode 100755 (executable)
index 46ddcfe..998523f 100644 (file)
@@ -819,7 +819,7 @@ $tooltip: The default tooltip.  Escape before using.
 $lang: The language code to use for the link in the wfMessage function
 
 'EditFilter': Perform checks on an edit
-$editor: Edit form (see includes/EditPage.php)
+$editor: EditPage instance (object). The edit form (see includes/EditPage.php)
 $text: Contents of the edit box
 $section: Section being edited
 &$error: Error message to return
index 1cf6634..d98556e 100644 (file)
@@ -435,7 +435,6 @@ $wgAutoloadLocalClasses = array(
        'GenderCache' => 'includes/cache/GenderCache.php',
        'GlobalDependency' => 'includes/cache/CacheDependency.php',
        'HTMLCacheUpdate' => 'includes/cache/HTMLCacheUpdate.php',
-       'HTMLCacheUpdateJob' => 'includes/cache/HTMLCacheUpdate.php',
        'HTMLFileCache' => 'includes/cache/HTMLFileCache.php',
        'LinkBatch' => 'includes/cache/LinkBatch.php',
        'LinkCache' => 'includes/cache/LinkCache.php',
@@ -652,16 +651,19 @@ $wgAutoloadLocalClasses = array(
        'WebInstallerPage' => 'includes/installer/WebInstallerPage.php',
 
        # includes/job
-       'DoubleRedirectJob' => 'includes/job/DoubleRedirectJob.php',
-       'EmaillingJob' => 'includes/job/EmaillingJob.php',
-       'EnotifNotifyJob' => 'includes/job/EnotifNotifyJob.php',
        'Job' => 'includes/job/Job.php',
        'JobQueue' => 'includes/job/JobQueue.php',
        'JobQueueDB' => 'includes/job/JobQueueDB.php',
        'JobQueueGroup' => 'includes/job/JobQueueGroup.php',
-       'RefreshLinksJob' => 'includes/job/RefreshLinksJob.php',
-       'RefreshLinksJob2' => 'includes/job/RefreshLinksJob.php',
-       'UploadFromUrlJob' => 'includes/job/UploadFromUrlJob.php',
+
+       # includes/job/jobs
+       'DoubleRedirectJob' => 'includes/job/jobs/DoubleRedirectJob.php',
+       'EmaillingJob' => 'includes/job/jobs/EmaillingJob.php',
+       'EnotifNotifyJob' => 'includes/job/jobs/EnotifNotifyJob.php',
+       'HTMLCacheUpdateJob' => 'includes/job/jobs/HTMLCacheUpdateJob.php',
+       'RefreshLinksJob' => 'includes/job/jobs/RefreshLinksJob.php',
+       'RefreshLinksJob2' => 'includes/job/jobs/RefreshLinksJob.php',
+       'UploadFromUrlJob' => 'includes/job/jobs/UploadFromUrlJob.php',
 
        # includes/json
        'FormatJson' => 'includes/json/FormatJson.php',
index ac46fc4..f0ae5a3 100644 (file)
@@ -18,7 +18,7 @@
  * http://www.gnu.org/copyleft/gpl.html
  *
  * @file
- * @licence GNU GPL v2 or later
+ * @license GNU GPL v2 or later
  * @author Jeroen De Dauw < jeroendedauw@gmail.com >
  */
 
index 088bb7e..04029db 100644 (file)
@@ -74,7 +74,6 @@ abstract class DataUpdate implements DeferrableUpdate {
         * This allows for limited transactional logic across multiple backends for storing
         * secondary data.
         *
-        * @static
         * @param $updates array a list of DataUpdate instances
         * @throws Exception|null
         */
index 17335e4..e4759fa 100644 (file)
@@ -1476,7 +1476,7 @@ class EditPage {
                                        wfDebug( __METHOD__ . ": Suppressing edit conflict, successful merge.\n" );
                                } else {
                                        $this->section = '';
-                                       #$this->textbox1 = $text; #redundant, nothing to do here?
+                                       $this->textbox1 = ContentHandler::getContentText( $content );
                                        wfDebug( __METHOD__ . ": Keeping edit conflict, failed merge.\n" );
                                }
                        }
@@ -1603,7 +1603,7 @@ class EditPage {
 
                if ( $doEditStatus->isOK() ) {
                                $result['redirect'] = $content->isRedirect();
-                       $this->commitWatch();
+                       $this->updateWatchlist();
                        wfProfileOut( __METHOD__ );
                        return $status;
                } else {
@@ -1624,19 +1624,27 @@ class EditPage {
        }
 
        /**
-        * Commit the change of watch status
+        * Register the change of watch status
         */
-       protected function commitWatch() {
+       protected function updateWatchlist() {
                global $wgUser;
+
                if ( $wgUser->isLoggedIn() && $this->watchthis != $wgUser->isWatched( $this->mTitle ) ) {
+                       $fname = __METHOD__;
+                       $title = $this->mTitle;
+                       $watch = $this->watchthis;
+
+                       // Do this in its own transaction to reduce contention...
                        $dbw = wfGetDB( DB_MASTER );
-                       $dbw->begin( __METHOD__ );
-                       if ( $this->watchthis ) {
-                               WatchAction::doWatch( $this->mTitle, $wgUser );
-                       } else {
-                               WatchAction::doUnwatch( $this->mTitle, $wgUser );
-                       }
-                       $dbw->commit( __METHOD__ );
+                       $dbw->onTransactionIdle( function() use ( $dbw, $title, $watch, $wgUser, $fname ) {
+                               $dbw->begin( $fname );
+                               if ( $watch ) {
+                                       WatchAction::doWatch( $title, $wgUser );
+                               } else {
+                                       WatchAction::doUnwatch( $title, $wgUser );
+                               }
+                               $dbw->commit( $fname );
+                       } );
                }
        }
 
@@ -1770,7 +1778,7 @@ class EditPage {
                $wgOut->addModules( 'mediawiki.action.edit' );
 
                if ( $wgUser->getOption( 'uselivepreview', false ) ) {
-                       $wgOut->addModules( 'mediawiki.legacy.preview' );
+                       $wgOut->addModules( 'mediawiki.action.edit.preview' );
                }
                // Bug #19334: textarea jumps when editing articles in IE8
                $wgOut->addStyle( 'common/IE80Fixes.css', 'screen', 'IE 8' );
@@ -2931,11 +2939,7 @@ HTML
                                # Messages: usercsspreview, userjspreview, sitecsspreview, sitejspreview
                                if( $level && $format ) {
                                        $note = "<div id='mw-{$level}{$format}preview'>" . wfMessage( "{$level}{$format}preview" )->text()  . "</div>";
-                               } else {
-                                       $note = wfMessage( 'previewnote' )->text() ;
                                }
-                       } else {
-                               $note = wfMessage( 'previewnote' )->text() ;
                        }
 
                        $rt = $content->getRedirectChain();
index 10c707e..1b40f4b 100644 (file)
@@ -18,7 +18,7 @@
  * http://www.gnu.org/copyleft/gpl.html
  *
  * @file
- * @author Antoine Musso <hashar at free dot fr>, Aaron Schulz
+ * @author Antoine Musso "<hashar at free dot fr>", Aaron Schulz
  */
 
 // Some regex definition to "play" with IP address and IP address blocks
index 28c5985..b947f8f 100644 (file)
@@ -1899,7 +1899,11 @@ class Linker {
                                                array( 'action' => 'edit' )
                                        );
                                }
-                               $outText .= '<li>' . self::link( $titleObj ) . ' (' . $editLink . ') ' . $protected . '</li>';
+                               $outText .= '<li>' . self::link( $titleObj )
+                                       . wfMessage( 'word-separator' )->escaped()
+                                       . wfMessage( 'parentheses' )->rawParams( $editLink )->escaped()
+                                       . wfMessage( 'word-separator' )->escaped()
+                                       . $protected . '</li>';
                        }
                        $outText .= '</ul>';
                }
index 824f177..2feaed2 100644 (file)
@@ -618,7 +618,7 @@ class Message {
                } elseif ( !is_array( $param ) ) {
                        return array( 'before', $param );
                } else {
-                       throw new MWException( "Invalid message parameter" );
+                       throw new MWException( "Invalid message parameter: " . serialize( $param ) );
                }
        }
 
index b8b1654..5a32d47 100644 (file)
@@ -1750,7 +1750,7 @@ abstract class BaseTemplate extends QuickTemplate {
                        foreach ( array( 'id', 'class', 'active', 'tag' ) as $k ) {
                                unset( $link[$k] );
                        }
-                       if ( isset( $item['id'] ) ) {
+                       if ( isset( $item['id'] ) && !isset( $item['single-id'] ) ) {
                                // The id goes on the <li> not on the <a> for single links
                                // but makeSidebarLink still needs to know what id to use when
                                // generating tooltips and accesskeys.
index a72c1af..9442869 100644 (file)
@@ -522,7 +522,7 @@ class SpecialPage {
         */
        public function isRestricted() {
                // DWIM: If all anons can do something, then it is not restricted
-               return $this->mRestriction != '' && User::groupHasPermission( '*', $this->mRestriction );
+               return $this->mRestriction != '' && !User::groupHasPermission( '*', $this->mRestriction );
        }
 
        /**
index c3e37a0..a7bea9d 100644 (file)
@@ -1369,6 +1369,8 @@ class Title {
         *
         * @see self::getLocalURL
         * @see wfExpandUrl
+        * @param $query
+        * @param $query2 bool
         * @param $proto Protocol type to use in URL
         * @return String the URL
         */
@@ -1495,6 +1497,8 @@ class Title {
         *
         * See getLocalURL for the arguments.
         *
+        * @param $query
+        * @param $query2 bool
         * @param $proto Protocol to use; setting this will cause a full URL to be used
         * @see self::getLocalURL
         * @return String the URL
index 7005416..aeac694 100644 (file)
@@ -1047,11 +1047,17 @@ HTML;
         * @return String
         */
        protected function getRawIP() {
-               if ( isset( $_SERVER['REMOTE_ADDR'] ) ) {
-                       return IP::canonicalize( $_SERVER['REMOTE_ADDR'] );
-               } else {
+               if ( !isset( $_SERVER['REMOTE_ADDR'] ) ) {
                        return null;
                }
+
+               if ( is_array( $_SERVER['REMOTE_ADDR'] ) || strpos( $_SERVER['REMOTE_ADDR'], ',' ) !== false ) {
+                       throw new MWException( __METHOD__ . " : Could not determine the remote IP address due to multiple values." );
+               } else {
+                       $ipchain = $_SERVER['REMOTE_ADDR'];
+               }
+
+               return IP::canonicalize( $ipchain );
        }
 
        /**
index 9c613a9..e467738 100644 (file)
@@ -44,7 +44,7 @@ class WebResponse {
         * @param $value String: value to give cookie
         * @param $expire Int: number of seconds til cookie expires
         * @param $prefix String: Prefix to use, if not $wgCookiePrefix (use '' for no prefix)
-        * @param @domain String: Cookie domain to use, if not $wgCookieDomain
+        * @param $domain String: Cookie domain to use, if not $wgCookieDomain
         * @param $forceSecure Bool:
         *   true: force the cookie to be set with the secure attribute
         *   false: force the cookie to be set without the secure attribute
@@ -149,7 +149,7 @@ class FauxResponse extends WebResponse {
         * @param $expire Int: number of seconds til cookie expires (Default: 0)
         * @param $prefix TODO DOCUMENT (Default: null)
         * @param $domain TODO DOCUMENT (Default: null)
-        *
+        * @param $forceSecure TODO DOCUMENT (Default: null)
         */
        public function setcookie( $name, $value, $expire = 0, $prefix = null, $domain = null, $forceSecure = null ) {
                $this->cookies[$name] = $value;
index bdec273..c148a5f 100644 (file)
@@ -1447,7 +1447,7 @@ class WikiPage extends Page implements IDBAccessObject {
 
        /**
         * @param $section null|bool|int or a section number (0, 1, 2, T1, T2...)
-        * @param $content Content: new content of the section
+        * @param $sectionContent Content: new content of the section
         * @param $sectionTitle String: new section's subject, only if $section is 'new'
         * @param $edittime String: revision timestamp or null to use the current revision
         *
@@ -2450,6 +2450,7 @@ class WikiPage extends Page implements IDBAccessObject {
         * @param $reason string delete reason for deletion log
         * @param $suppress boolean suppress all revisions and log the deletion in
         *        the suppression log instead of the deletion log
+        * @param $id int article ID
         * @param $commit boolean defaults to true, triggers transaction end
         * @param &$error Array of errors to append to
         * @param $user User The deleting user
index 510f4ef..e986323 100644 (file)
@@ -582,7 +582,7 @@ class InfoAction extends FormlessAction {
        }
 
        /**
-        * Returns the name that goes in the <h1> page title.
+        * Returns the name that goes in the "<h1>" page title.
         *
         * @return string
         */
@@ -653,7 +653,7 @@ class InfoAction extends FormlessAction {
        }
 
        /**
-        * Returns the description that goes below the <h1> tag.
+        * Returns the description that goes below the "<h1>" tag.
         *
         * @return string
         */
index 1513e7d..1b176e7 100644 (file)
@@ -775,6 +775,9 @@ abstract class ApiBase extends ContextSource {
                        if ( !$titleObj ) {
                                $this->dieUsageMsg( array( 'invalidtitle', $params['title'] ) );
                        }
+                       if ( !$titleObj->canExist() ) {
+                               $this->dieUsage( "Namespace doesn't allow actual pages", 'pagecannotexist' );
+                       }
                        $pageObj = WikiPage::factory( $titleObj );
                        if ( $load !== false ) {
                                $pageObj->loadPageData( $load );
index 31c90e1..b3bde37 100644 (file)
@@ -4,7 +4,7 @@
  *
  * Created on Oct 22, 2006
  *
- * Copyright © 2006 Yuri Astrakhan <Firstname><Lastname>@gmail.com
+ * Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
  *
  * 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
index 1a55d5a..fae8e69 100644 (file)
@@ -165,6 +165,9 @@ class ApiParse extends ApiBase {
                        if ( !$titleObj ) {
                                $this->dieUsageMsg( array( 'invalidtitle', $title ) );
                        }
+                       if ( !$titleObj->canExist() ) {
+                               $this->dieUsage( "Namespace doesn't allow actual pages", 'pagecannotexist' );
+                       }
                        $wgTitle = $titleObj;
                        $pageObj = WikiPage::factory( $titleObj );
 
@@ -353,7 +356,7 @@ class ApiParse extends ApiBase {
        private function getParsedContent( WikiPage $page, $popts, $pageId = null, $getWikitext = false ) {
                $this->content = $page->getContent( Revision::RAW ); //XXX: really raw?
 
-               if ( $this->section !== false ) {
+               if ( $this->section !== false && $this->content !== null ) {
                        $this->content = $this->getSectionContent(
                                $this->content,
                                !is_null( $pageId ) ? 'page id ' . $pageId : $page->getTitle()->getText() );
@@ -652,6 +655,7 @@ class ApiParse extends ApiBase {
                        array( 'invalidtitle', 'title' ),
                        array( 'code' => 'parseerror', 'info' => 'Failed to parse the given text.' ),
                        array( 'code' => 'notwikitext', 'info' => 'The requested operation is only supported on wikitext content.' ),
+                       array( 'code' => 'pagecannotexist', 'info' => "Namespace doesn't allow actual pages" ),
                ) );
        }
 
index 3b18d8a..f0c2b1b 100644 (file)
@@ -23,7 +23,7 @@
  * @file
  * @ingroup API
  *
- * @licence GNU GPL v2+
+ * @license GNU GPL v2+
  * @author Jeroen De Dauw < jeroendedauw@gmail.com >
  */
 abstract class ApiQueryORM extends ApiQueryBase {
@@ -94,8 +94,8 @@ abstract class ApiQueryORM extends ApiQueryBase {
        }
 
        /**
-        * Get the request parameters, handle the * value for the props param
-        * and remove all params set to null (ie those that are not actually provided).
+        * Get the request parameters and remove all params set
+        * to null (ie those that are not actually provided).
         *
         * @since 1.21
         *
index a3c2b52..5cdc867 100644 (file)
@@ -74,7 +74,7 @@ class DependencyWrapper {
 
        /**
         * Get the user-defined value
-        * @return bool|\Mixed
+        * @return bool|Mixed
         */
        function getValue() {
                return $this->value;
index 0a3c002..51a28ca 100644 (file)
@@ -228,33 +228,3 @@ class HTMLCacheUpdate implements DeferrableUpdate {
                }
        }
 }
-
-
-/**
- * Job wrapper for HTMLCacheUpdate. Gets run whenever a related
- * job gets called from the queue.
- *
- * @ingroup JobQueue
- */
-class HTMLCacheUpdateJob extends Job {
-       var $table, $start, $end;
-
-       /**
-        * Construct a job
-        * @param $title Title: the title linked to
-        * @param $params Array: job parameters (table, start and end page_ids)
-        * @param $id Integer: job id
-        */
-       function __construct( $title, $params, $id = 0 ) {
-               parent::__construct( 'htmlCacheUpdate', $title, $params, $id );
-               $this->table = $params['table'];
-               $this->start = $params['start'];
-               $this->end = $params['end'];
-       }
-
-       public function run() {
-               $update = new HTMLCacheUpdate( $this->title, $this->table, $this->start, $this->end );
-               $update->doUpdate();
-               return true;
-       }
-}
index 495711a..0a8bb9e 100644 (file)
@@ -381,8 +381,8 @@ abstract class AbstractContent implements Content {
         *
         * @since 1.21
         *
-        * @param $page \WikiPage the deleted page
-        * @param $parserOutput null|\ParserOutput optional parser output object
+        * @param $page WikiPage the deleted page
+        * @param $parserOutput null|ParserOutput optional parser output object
         *    for efficient access to meta-information about the content object.
         *    Provide if you have one handy.
         *
index d830dc7..66d7209 100644 (file)
@@ -45,10 +45,10 @@ interface Content {
         * @return string The wikitext to include when another page includes this
         * content, or false if the content is not includable in a wikitext page.
         *
-        * @TODO: allow native handling, bypassing wikitext representation, like
+        * @todo allow native handling, bypassing wikitext representation, like
         *    for includable special pages.
-        * @TODO: allow transclusion into other content models than Wikitext!
-        * @TODO: used in WikiPage and MessageCache to get message text. Not so
+        * @todo allow transclusion into other content models than Wikitext!
+        * @todo used in WikiPage and MessageCache to get message text. Not so
         *    nice. What should we use instead?!
         */
        public function getWikitextForTransclusion();
@@ -74,7 +74,7 @@ interface Content {
         *    string, a nested array structure, an object, a binary blob...
         *    anything, really.
         *
-        * @NOTE: Caller must be aware of content model!
+        * @note Caller must be aware of content model!
         */
        public function getNativeData();
 
@@ -460,8 +460,8 @@ interface Content {
         *
         * @since 1.21
         *
-        * @param $page \WikiPage the deleted page
-        * @param $parserOutput null|\ParserOutput optional parser output object
+        * @param $page WikiPage the deleted page
+        * @param $parserOutput null|ParserOutput optional parser output object
         *    for efficient access to meta-information about the content object.
         *    Provide if you have one handy.
         *
index 33c803e..9c4c3af 100644 (file)
@@ -80,7 +80,6 @@ abstract class ContentHandler {
         *
         * @since 1.21
         *
-        * @static
         * @param $content Content|null
         * @return null|string the textual form of $content, if available
         * @throws MWException if $content is not an instance of TextContent and
@@ -123,8 +122,6 @@ abstract class ContentHandler {
         *
         * @since 1.21
         *
-        * @static
-        *
         * @param $text string the textual representation, will be
         *    unserialized to create the Content object
         * @param $title null|Title the title of the page this text belongs to.
@@ -184,7 +181,6 @@ abstract class ContentHandler {
         *
         * @since 1.21
         *
-        * @static
         * @param $title Title
         * @return null|string default model name for the page given by $title
         */
@@ -256,7 +252,6 @@ abstract class ContentHandler {
         *
         * @since 1.21
         *
-        * @static
         * @param $title Title
         * @return ContentHandler
         */
@@ -271,7 +266,6 @@ abstract class ContentHandler {
         *
         * @since 1.21
         *
-        * @static
         * @param $content Content
         * @return ContentHandler
         */
@@ -304,7 +298,6 @@ abstract class ContentHandler {
         *
         * @since 1.21
         *
-        * @static
         * @param $modelId String The ID of the content model for which to get a
         *    handler. Use CONTENT_MODEL_XXX constants.
         * @return ContentHandler The ContentHandler singleton for handling the
@@ -352,7 +345,6 @@ abstract class ContentHandler {
         * Model names are localized using system messages. Message keys
         * have the form content-model-$name, where $name is getContentModelName( $id ).
         *
-        * @static
         * @param $name String The content model ID, as given by a CONTENT_MODEL_XXX
         *    constant or returned by Revision::getContentModel().
         *
@@ -415,7 +407,6 @@ abstract class ContentHandler {
         *
         * @since 1.21
         *
-        * @abstract
         * @param $content Content The Content object to serialize
         * @param $format null|String The desired serialization format
         * @return string Serialized form of the content
@@ -427,7 +418,6 @@ abstract class ContentHandler {
         *
         * @since 1.21
         *
-        * @abstract
         * @param $blob string serialized form of the content
         * @param $format null|String the format used for serialization
         * @return Content the Content object created by deserializing $blob
index 8e832ec..048ac39 100644 (file)
@@ -32,6 +32,10 @@ class TextContent extends AbstractContent {
        public function __construct( $text, $model_id = CONTENT_MODEL_TEXT ) {
                parent::__construct( $model_id );
 
+               if ( $text === null || $text === false ) {
+                       $text = '';
+               }
+
                if ( !is_string( $text ) ) {
                        throw new MWException( "TextContent expects a string in the constructor." );
                }
@@ -91,7 +95,7 @@ class TextContent extends AbstractContent {
        /**
         * Returns the text represented by this Content object, as a string.
         *
-        * @param   the raw text
+        * @return string: the raw text
         */
        public function getNativeData( ) {
                $text = $this->mText;
@@ -101,7 +105,7 @@ class TextContent extends AbstractContent {
        /**
         * Returns the text represented by this Content object, as a string.
         *
-        * @param   the raw text
+        * @return string: the raw text
         */
        public function getTextForSearchIndex( ) {
                return $this->getNativeData();
@@ -110,7 +114,7 @@ class TextContent extends AbstractContent {
        /**
         * Returns the text represented by this Content object, as a string.
         *
-        * @param   the raw text
+        * @return string: the raw text
         */
        public function getWikitextForTransclusion( ) {
                return $this->getNativeData();
@@ -133,15 +137,16 @@ class TextContent extends AbstractContent {
        }
 
        /**
-        * Diff this content object with another content object..
+        * Diff this content object with another content object.
         *
         * @since 1.21diff
         *
-        * @param $that Content the other content object to compare this content object to
-        * @param $lang Language the language object to use for text segmentation.
+        * @param $that Content: The other content object to compare this content
+        * object to.
+        * @param $lang Language: The language object to use for text segmentation.
         *    If not given, $wgContentLang is used.
         *
-        * @return DiffResult a diff representing the changes that would have to be
+        * @return DiffResult: A diff representing the changes that would have to be
         *    made to this content object to make it equal to $that.
         */
        public function diff( Content $that, Language $lang = null ) {
index 9dff67e..9c2ae35 100644 (file)
@@ -30,9 +30,9 @@ class TextContentHandler extends ContentHandler {
         *
         * This text-based implementation uses wfMerge().
         *
-        * @param $oldContent \Content|string  String
-        * @param $myContent \Content|string   String
-        * @param $yourContent \Content|string String
+        * @param $oldContent Content|string  String
+        * @param $myContent Content|string   String
+        * @param $yourContent Content|string String
         *
         * @return Content|Bool
         */
@@ -87,4 +87,4 @@ class TextContentHandler extends ContentHandler {
        public function makeEmptyContent() {
                return new TextContent( '' );
        }
-}
\ No newline at end of file
+}
index 8f1381f..c11018b 100644 (file)
@@ -212,8 +212,8 @@ class WikitextContent extends TextContent {
         *
         * @param $hasLinks Bool  if it is known whether this content contains
         *    links, provide this information here, to avoid redundant parsing to
-        *    find out.
-        * @param $title null|\Title
+        *    find out (default: null).
+        * @param $title Title: (default: null)
         *
         * @internal param \IContextSource $context context for parsing if necessary
         *
@@ -268,11 +268,10 @@ class WikitextContent extends TextContent {
         *
         * @since    1.21
         *
-        * @param $content Content the content to render
-        * @param $title \Title
-        * @param $revId null
-        * @param $options null|ParserOptions
-        * @param $generateHtml bool
+        * @param $title Title
+        * @param $revId int Revision to pass to the parser (default: null)
+        * @param $options ParserOptions (default: null)
+        * @param $generateHtml bool (default: false)
         *
         * @internal param \IContextSource|null $context
         * @return ParserOutput representing the HTML form of the text
index 48aac9d..c9d2fda 100644 (file)
@@ -1800,7 +1800,7 @@ abstract class DatabaseBase implements DatabaseType {
                                $list .= "$value";
                        } elseif ( ( $mode == LIST_AND || $mode == LIST_OR ) && is_array( $value ) ) {
                                if ( count( $value ) == 0 ) {
-                                       throw new MWException( __METHOD__ . ': empty input' );
+                                       throw new MWException( __METHOD__ . ": empty input for field $field" );
                                } elseif ( count( $value ) == 1 ) {
                                        // Special-case single values, as IN isn't terribly efficient
                                        // Don't necessarily assume the single key is 0; we don't
index 62c90d1..880d702 100644 (file)
@@ -1183,7 +1183,7 @@ class DatabaseIbm_db2 extends DatabaseBase {
         * @param array|string $conds
         * @param string $fname
         * @throws DBUnexpectedError
-        * @return bool|\ResultWrapper
+        * @return bool|ResultWrapper
         */
        public function delete( $table, $conds, $fname = 'DatabaseIbm_db2::delete' ) {
                if ( !$conds ) {
index ff67f47..317ff09 100644 (file)
@@ -528,7 +528,7 @@ class DatabaseMssql extends DatabaseBase {
         * @param array $insertOptions
         * @param array $selectOptions
         * @throws DBQueryError
-        * @return null|\ResultWrapper
+        * @return null|ResultWrapper
         */
        function insertSelect( $destTable, $srcTable, $varMap, $conds, $fname = 'DatabaseMssql::insertSelect',
                $insertOptions = array(), $selectOptions = array() ) {
index e99ba6c..1ea4b12 100644 (file)
@@ -27,7 +27,7 @@
  * @file
  * @ingroup ORM
  *
- * @licence GNU GPL v2 or later
+ * @license GNU GPL v2 or later
  * @author Jeroen De Dauw < jeroendedauw@gmail.com >
  */
 
index 9693789..be4036e 100644 (file)
@@ -23,7 +23,7 @@
  * @file
  * @ingroup ORM
  *
- * @licence GNU GPL v2 or later
+ * @license GNU GPL v2 or later
  * @author Jeroen De Dauw < jeroendedauw@gmail.com >
  */
 
index 090b893..7542797 100644 (file)
@@ -23,7 +23,7 @@
  * @file
  * @ingroup ORM
  *
- * @licence GNU GPL v2 or later
+ * @license GNU GPL v2 or later
  * @author Jeroen De Dauw < jeroendedauw@gmail.com >
  */
 interface ORMIterator extends Iterator {
index 2a5837a..160033c 100644 (file)
@@ -25,7 +25,7 @@
  * @file ORMResult.php
  * @ingroup ORM
  *
- * @licence GNU GPL v2 or later
+ * @license GNU GPL v2 or later
  * @author Jeroen De Dauw < jeroendedauw@gmail.com >
  */
 
index 303f3a2..fa25868 100644 (file)
@@ -27,7 +27,7 @@
  * @file ORMRow.php
  * @ingroup ORM
  *
- * @licence GNU GPL v2 or later
+ * @license GNU GPL v2 or later
  * @author Jeroen De Dauw < jeroendedauw@gmail.com >
  */
 
@@ -138,8 +138,9 @@ abstract class ORMRow implements IORMRow {
         *
         * @since 1.20
         *
-        * @param string $name
-        * @param mixed $default
+        * @param $name string: Field name
+        * @param $default mixed: Default value to return when none is found
+        * (default: null)
         *
         * @throws MWException
         * @return mixed
@@ -159,7 +160,7 @@ abstract class ORMRow implements IORMRow {
         *
         * @since 1.20
         *
-        * @param string$name
+        * @param $name string
         *
         * @return mixed
         */
index e3a3434..0756ce8 100644 (file)
@@ -23,7 +23,7 @@
  * @file ORMTable.php
  * @ingroup ORM
  *
- * @licence GNU GPL v2 or later
+ * @license GNU GPL v2 or later
  * @author Jeroen De Dauw < jeroendedauw@gmail.com >
  */
 
index d02bcf5..8c60eca 100644 (file)
@@ -135,6 +135,7 @@ class MWDebug {
         * @since 1.19
         * @param $msg string
         * @param $callerOffset int
+        * @param $level int A PHP error level. See sendWarning()
         * @return mixed
         */
        public static function warning( $msg, $callerOffset = 1, $level = E_USER_NOTICE ) {
diff --git a/includes/filebackend/README b/includes/filebackend/README
new file mode 100644 (file)
index 0000000..b6ced00
--- /dev/null
@@ -0,0 +1,198 @@
+/*!
+\ingroup FileBackend
+\page file_backend_design File backend design
+
+Some notes on the FileBackend architecture.
+
+\section intro Introduction
+
+To abstract away the differences among different types of storage media,
+MediaWiki is providing an interface known as FileBackend. Any MediaWiki
+interaction with stored files should thus use a FileBackend object.
+
+Different types of backing storage media are supported (ranging from local
+filesystem to distributed object stores). The types include:
+
+* FSFileBackend (used for mounted filesystems)
+* SwiftFileBackend (used for Swift or Ceph Rados+RGW object stores)
+* FileBackendMultiWrite (useful for transitioning from one backend to another)
+
+Configuration documentation for each type of backend is to be found in their
+__construct() inline documentation.
+
+
+\section setup Setup
+
+File backends are registered in LocalSettings.php via the global variable
+$wgFileBackends. To access one of those defined backend, one would use
+FileBackendStore::get( <name> ) which will bring back a FileBackend object
+handle. Such handles are reused for any subsequent get() call (singleton
+paradigm). The FileBackends objects are caching request calls such as file stats,
+SHA1 requests or TCP connection handles.
+
+\par Note:
+Some backends may require additional PHP extensions to be enabled or can rely on a
+MediaWiki extension. This is often the case when a FileBackend subclass makes use of an
+upstream client API for communicating with the backing store.
+
+
+\section fileoperations File operations
+
+The MediaWiki FileBackend API supports various operations on either files or
+directories. See FileBackend.php for full documentation for each function.
+
+
+\subsection reading Reading
+
+The following operations are supported for reading from a backend:
+
+On files:
+* state a file for basic information (timestamp, size)
+* read a file into a string or  several files into a map of path names to strings
+* download a file or set of files to a temporary file (on a mounted file system)
+* get the SHA1 hash of a file
+* get various properties of a file (stat information, content time, mime information, ...)
+
+On directories:
+* get a list of files directly under a directory
+* get a recursive list of files under a directory
+* get a list of directories directly under a directory
+* get a recursive list of directories under a directory
+
+\par Note:
+Backend handles should return directory listings as iterators, all though in some cases
+they may just be simple arrays (which can still be iterated over). Iterators allow for callers to
+traverse a large number of file listings without consuming excessive RAM in the process. Either the
+memory consumed is flatly bounded (if the iterator does paging) or it is proportional to the depth
+of the portion of the directory tree being traversed (if the iterator works via recursion).
+
+
+\subsection writing Writing
+
+The following operations are supported for writing or changing in the backend:
+
+On files:
+* store (copying a mounted filesystem file into storage)
+* create (creating a file within storage from a string)
+* copy (within storage)
+* move (within storage)
+* delete (within storage)
+* lock/unlock (lock or unlock a file in storage)
+
+The following operations are supported for writing directories in the backend:
+* prepare (create parent container and directories for a path)
+* secure (try to lock-down access to a container)
+* publish (try to reverse the effects of secure)
+* clean (remove empty containers or directories)
+
+
+\subsection invokingoperation Invoking an operation
+
+Generally, callers should use doOperations() or doQuickOperations() when doing
+batches of changes, rather than making a suite of single operation calls. This
+makes the system tolerate high latency much better by pipelining operations
+when possible.
+
+doOperations() should be used for working on important original data, i.e. when
+consistency is important. The former will only pipeline operations that do not
+depend on each other. It is best if the operations that do not depend on each
+other occur in consecutive groups. This function can also log file changes to
+a journal (see FileJournal), which can be used to sync two backend instances.
+One might use this function for user uploads of file for example.
+
+doQuickOperations() is more geared toward ephemeral items that can be easily
+regenerated from original data. It will always pipeline without checking for
+dependencies within the operation batch. One might use this function for
+creating and purging generated thumbnails of original files for example.
+
+
+\section consistency Consistency
+
+Not all backing stores are sequentially consistent by default. Various FileBackend functions
+offer a "latest" option that can be passed in to assure (or try to assure) that the latest
+version of the file is read. Some backing stores are consistent by default, but callers should
+always assume that without this option, stale data may be read. This is actually true for stores
+that have eventual consistency.
+
+Note that file listing functions have no "latest" flag, and thus some systems may return stale
+data. Thus callers should avoid assuming that listings contain changes made my the current client
+or any other client from a very short time ago. For example, creating a file under a directory
+and then immediately doing a file listing operation on that directory may result in a listing
+that does not include that file.
+
+
+\section locking Locking
+
+Locking is effective if and only if a proper lock manager is registered and is
+actually being used by the backend. Lock managers can be registered in LocalSettings.php
+using the $wgLockManagers global configuration variable.
+
+For object stores, locking is not generally useful for avoiding partially
+written or read objects, since most stores use Multi Version Concurrency
+Control (MVCC) to avoid this. However, locking can be important when:
+* One or more operations must be done without objects changing in the meantime.
+* It can also be useful when a file read is used to determine a file write or DB change.
+  For example, doOperations() first checks that there will be no "file already exists"
+  or "file does not exist" type errors before attempted a given operation batch. This works
+  by stating the files first, and is only safe if the files are locked in the meantime.
+
+When locking, callers also should use the latest available file data for reads.
+Also, one should always lock the file *before* reading it, not after. If stale data is used
+to determine a write, there will be some data corruption, even when reads of the original file
+finally start returning the updated data without using the "latest" option (eventual consistency).
+
+Since acquiring locks can fail, and lock managers can be non-blocking, callers should:
+* Acquire all required locks up font
+* Be prepared for the case where locks fail to be acquired
+* Possible retry acquiring certain locks
+
+MVCC is also a useful pattern to use on top of the backend interface, because operations
+are not atomic, even with doOperations(), so doing complex batch file changes or changing files
+and updating a database row can result in partially written "transactions". One should avoid
+changing files once they have been stored, except perhaps with ephemeral data that are tolerant
+of some inconsistency.
+
+Callers can use their own locking (e.g. SELECT FOR UPDATE) if it is more convenient, but note
+that all callers that change any of the files should then go through functions that acquire these
+locks. For example, if a caller just directly uses the file backend store() function, it will
+ignore any custom "FOR UPDATE" locks, which can cause problems.
+
+\section objectstore Object stores
+
+Support for object stores (like Amazon S3/Swift) drive much of the API and design
+decisions of FileBackend, but using any POSIX compliant file systems works fine.
+The system essentially stores "files" in "containers". For a mounted file
+system as a backing store, these will just be "files" under "directories". For
+an object store as a backing store, the "files" will be "objects" stored in
+"containers".
+
+
+\section file_obj_diffs File and Object store differences
+
+An advantage of objects stores is the reduced Round-Trip Times. This is
+achieved by avoiding the need to create each parent directory before placing a
+file somewhere. It gets worse the deeper the directory hierarchy is. Both with
+object stores and file systems  using "/" in filenames will allow for the
+intuitive use of directory functions. For example, creating a file in Swift
+called "container/a/b/file1" will mean that:
+- a "directory listing" of "container/a" will contain "b",
+- and a "file listing" of "b" will contain "file1"
+
+This means that switching from an object store to a file system and vise versa
+using the FileBackend interface will generally be harmless. You must aware of
+some reserves though:
+
+* In a filesystem, you cannot have a file and a directory within the same path
+  whereas it is possible in an object stores.
+* Some file systems have file name length restrictions or overall path length
+  restrictions that others do not. The same goes with object stores wich might
+  have maximum object length or a limitation regarding the number of files
+  under a container or volume.
+* Latency vary among systems, certain access patterns may not be tolerable for
+  certain backends but may hold up for others. Some backend subclasses use
+  MediaWiki's object caching for serving stat requests, which can greatly
+  reduce latency. Making sure that the backend has pipelining (see the
+  "parallelize" and "concurrency" settings) enabled can also combat latency in
+  batch operation scenarios.
+
+*/
index 25c14f5..fed496a 100644 (file)
@@ -786,6 +786,7 @@ class SwiftFileBackend extends FileBackendStore {
                        return true; // nothing to do
                }
                wfProfileIn( __METHOD__ );
+               trigger_error( "$path was not stored with SHA-1 metadata.", E_USER_WARNING );
                $status = Status::newGood();
                $scopeLockS = $this->getScopedFileLocks( array( $path ), LockManager::LOCK_UW, $status );
                if ( $status->isOK() ) {
@@ -1216,10 +1217,10 @@ class SwiftFileBackend extends FileBackendStore {
         * $readGrps is a list of the possible criteria for a request to have
         * access to read a container. Each item is one of the following formats:
         *   - account:user       : Grants access if the request is by the given user
-        *   - .r:<regex>         : Grants access if the request is from a referrer host that
+        *   - ".r:<regex>"       : Grants access if the request is from a referrer host that
         *                          matches the expression and the request is not for a listing.
         *                          Setting this to '*' effectively makes a container public.
-        *   - .rlistings:<regex> : Grants access if the request is from a referrer host that
+        *   -".rlistings:<regex>": Grants access if the request is from a referrer host that
         *                          matches the expression and the request for a listing.
         *
         * $writeGrps is a list of the possible criteria for a request to have
index 2f46ff0..4892770 100644 (file)
@@ -56,10 +56,11 @@ class WebInstaller extends Installer {
 
        /**
         * The main sequence of page names. These will be displayed in turn.
-        * To add one:
-        *    * Add it here
-        *    * Add a config-page-<name> message
-        *    * Add a WebInstaller_<name> class
+        *
+        * To add a new installer page:
+        *    * Add it to this WebInstaller::$pageSequence property
+        *    * Add a "config-page-<name>" message
+        *    * Add a "WebInstaller_<name>" class
         * @var array
         */
        public $pageSequence = array(
diff --git a/includes/job/DoubleRedirectJob.php b/includes/job/DoubleRedirectJob.php
deleted file mode 100644 (file)
index b1b96b6..0000000
+++ /dev/null
@@ -1,210 +0,0 @@
-<?php
-/**
- * Job to fix double redirects after moving a page.
- *
- * 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 JobQueue
- */
-
-/**
- * Job to fix double redirects after moving a page
- *
- * @ingroup JobQueue
- */
-class DoubleRedirectJob extends Job {
-       var $reason, $redirTitle;
-
-       /**
-        * @var User
-        */
-       static $user;
-
-       /**
-        * Insert jobs into the job queue to fix redirects to the given title
-        * @param $reason String: the reason for the fix, see message "double-redirect-fixed-<reason>"
-        * @param $redirTitle Title: the title which has changed, redirects pointing to this title are fixed
-        * @param $destTitle bool Not used
-        */
-       public static function fixRedirects( $reason, $redirTitle, $destTitle = false ) {
-               # Need to use the master to get the redirect table updated in the same transaction
-               $dbw = wfGetDB( DB_MASTER );
-               $res = $dbw->select(
-                       array( 'redirect', 'page' ),
-                       array( 'page_namespace', 'page_title' ),
-                       array(
-                               'page_id = rd_from',
-                               'rd_namespace' => $redirTitle->getNamespace(),
-                               'rd_title' => $redirTitle->getDBkey()
-                       ), __METHOD__ );
-               if ( !$res->numRows() ) {
-                       return;
-               }
-               $jobs = array();
-               foreach ( $res as $row ) {
-                       $title = Title::makeTitle( $row->page_namespace, $row->page_title );
-                       if ( !$title ) {
-                               continue;
-                       }
-
-                       $jobs[] = new self( $title, array(
-                               'reason' => $reason,
-                               'redirTitle' => $redirTitle->getPrefixedDBkey() ) );
-                       # Avoid excessive memory usage
-                       if ( count( $jobs ) > 10000 ) {
-                               Job::batchInsert( $jobs );
-                               $jobs = array();
-                       }
-               }
-               Job::batchInsert( $jobs );
-       }
-
-       function __construct( $title, $params = false, $id = 0 ) {
-               parent::__construct( 'fixDoubleRedirect', $title, $params, $id );
-               $this->reason = $params['reason'];
-               $this->redirTitle = Title::newFromText( $params['redirTitle'] );
-       }
-
-       /**
-        * @return bool
-        */
-       function run() {
-               if ( !$this->redirTitle ) {
-                       $this->setLastError( 'Invalid title' );
-                       return false;
-               }
-
-               $targetRev = Revision::newFromTitle( $this->title, false, Revision::READ_LATEST );
-               if ( !$targetRev ) {
-                       wfDebug( __METHOD__.": target redirect already deleted, ignoring\n" );
-                       return true;
-               }
-               $content = $targetRev->getContent();
-               $currentDest = $content->getRedirectTarget();
-               if ( !$currentDest || !$currentDest->equals( $this->redirTitle ) ) {
-                       wfDebug( __METHOD__.": Redirect has changed since the job was queued\n" );
-                       return true;
-               }
-
-               # Check for a suppression tag (used e.g. in periodically archived discussions)
-               $mw = MagicWord::get( 'staticredirect' );
-               if ( $content->matchMagicWord( $mw ) ) {
-                       wfDebug( __METHOD__.": skipping: suppressed with __STATICREDIRECT__\n" );
-                       return true;
-               }
-
-               # Find the current final destination
-               $newTitle = self::getFinalDestination( $this->redirTitle );
-               if ( !$newTitle ) {
-                       wfDebug( __METHOD__.": skipping: single redirect, circular redirect or invalid redirect destination\n" );
-                       return true;
-               }
-               if ( $newTitle->equals( $this->redirTitle ) ) {
-                       # The redirect is already right, no need to change it
-                       # This can happen if the page was moved back (say after vandalism)
-                       wfDebug( __METHOD__.": skipping, already good\n" );
-               }
-
-               # Preserve fragment (bug 14904)
-               $newTitle = Title::makeTitle( $newTitle->getNamespace(), $newTitle->getDBkey(),
-                       $currentDest->getFragment(), $newTitle->getInterwiki() );
-
-               # Fix the text
-               $newContent = $content->updateRedirect( $newTitle );
-
-               if ( $newContent->equals( $content ) ) {
-                       $this->setLastError( 'Content unchanged???' );
-                       return false;
-               }
-
-               # Save it
-               global $wgUser;
-               $oldUser = $wgUser;
-               $wgUser = $this->getUser();
-               $article = WikiPage::factory( $this->title );
-               $reason = wfMessage( 'double-redirect-fixed-' . $this->reason,
-                       $this->redirTitle->getPrefixedText(), $newTitle->getPrefixedText()
-               )->inContentLanguage()->text();
-               $article->doEditContent( $newContent, $reason, EDIT_UPDATE | EDIT_SUPPRESS_RC, false, $this->getUser() );
-               $wgUser = $oldUser;
-
-               return true;
-       }
-
-       /**
-        * Get the final destination of a redirect
-        *
-        * @param $title Title
-        *
-        * @return bool if the specified title is not a redirect, or if it is a circular redirect
-        */
-       public static function getFinalDestination( $title ) {
-               $dbw = wfGetDB( DB_MASTER );
-
-               $seenTitles = array(); # Circular redirect check
-               $dest = false;
-
-               while ( true ) {
-                       $titleText = $title->getPrefixedDBkey();
-                       if ( isset( $seenTitles[$titleText] ) ) {
-                               wfDebug( __METHOD__, "Circular redirect detected, aborting\n" );
-                               return false;
-                       }
-                       $seenTitles[$titleText] = true;
-
-                       if ( $title->getInterwiki() ) {
-                               // If the target is interwiki, we have to break early (bug 40352).
-                               // Otherwise it will look up a row in the local page table
-                               // with the namespace/page of the interwiki target which can cause
-                               // unexpected results (e.g. X -> foo:Bar -> Bar -> .. )
-                               break;
-                       }
-
-                       $row = $dbw->selectRow(
-                               array( 'redirect', 'page' ),
-                               array( 'rd_namespace', 'rd_title', 'rd_interwiki' ),
-                               array(
-                                       'rd_from=page_id',
-                                       'page_namespace' => $title->getNamespace(),
-                                       'page_title' => $title->getDBkey()
-                               ), __METHOD__ );
-                       if ( !$row ) {
-                               # No redirect from here, chain terminates
-                               break;
-                       } else {
-                               $dest = $title = Title::makeTitle( $row->rd_namespace, $row->rd_title, '', $row->rd_interwiki );
-                       }
-               }
-               return $dest;
-       }
-
-       /**
-        * Get a user object for doing edits, from a request-lifetime cache
-        * @return User
-        */
-       function getUser() {
-               if ( !self::$user ) {
-                       self::$user = User::newFromName( wfMessage( 'double-redirect-fixer' )->inContentLanguage()->text(), false );
-                       # FIXME: newFromName could return false on a badly configured wiki.
-                       if ( !self::$user->isLoggedIn() ) {
-                               self::$user->addToDatabase();
-                       }
-               }
-               return self::$user;
-       }
-}
-
diff --git a/includes/job/EmaillingJob.php b/includes/job/EmaillingJob.php
deleted file mode 100644 (file)
index d359988..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-<?php
-/**
- * Old job for notification emails.
- *
- * 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 JobQueue
- */
-
-/**
- * Old job used for sending single notification emails;
- * kept for backwards-compatibility
- *
- * @ingroup JobQueue
- */
-class EmaillingJob extends Job {
-       function __construct( $title, $params, $id = 0 ) {
-               parent::__construct( 'sendMail', Title::newMainPage(), $params, $id );
-       }
-
-       function run() {
-               UserMailer::send(
-                       $this->params['to'],
-                       $this->params['from'],
-                       $this->params['subj'],
-                       $this->params['body'],
-                       $this->params['replyto']
-               );
-               return true;
-       }
-
-}
diff --git a/includes/job/EnotifNotifyJob.php b/includes/job/EnotifNotifyJob.php
deleted file mode 100644 (file)
index b4c925e..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-<?php
-/**
- * Job for notification emails.
- *
- * 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 JobQueue
- */
-
-/**
- * Job for email notification mails
- *
- * @ingroup JobQueue
- */
-class EnotifNotifyJob extends Job {
-
-       function __construct( $title, $params, $id = 0 ) {
-               parent::__construct( 'enotifNotify', $title, $params, $id );
-       }
-
-       function run() {
-               $enotif = new EmailNotification();
-               // Get the user from ID (rename safe). Anons are 0, so defer to name.
-               if( isset( $this->params['editorID'] ) && $this->params['editorID'] ) {
-                       $editor = User::newFromId( $this->params['editorID'] );
-               // B/C, only the name might be given.
-               } else {
-                       # FIXME: newFromName could return false on a badly configured wiki.
-                       $editor = User::newFromName( $this->params['editor'], false );
-               }
-               $enotif->actuallyNotifyOnPageChange(
-                       $editor,
-                       $this->title,
-                       $this->params['timestamp'],
-                       $this->params['summary'],
-                       $this->params['minorEdit'],
-                       $this->params['oldid'],
-                       $this->params['watchers']
-               );
-               return true;
-       }
-
-}
diff --git a/includes/job/RefreshLinksJob.php b/includes/job/RefreshLinksJob.php
deleted file mode 100644 (file)
index a29f29f..0000000
+++ /dev/null
@@ -1,202 +0,0 @@
-<?php
-/**
- * Job to update links for a given title.
- *
- * 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 JobQueue
- */
-
-/**
- * Background job to update links for a given title.
- *
- * @ingroup JobQueue
- */
-class RefreshLinksJob extends Job {
-       function __construct( $title, $params = '', $id = 0 ) {
-               parent::__construct( 'refreshLinks', $title, $params, $id );
-               $this->removeDuplicates = true; // job is expensive
-       }
-
-       /**
-        * Run a refreshLinks job
-        * @return boolean success
-        */
-       function run() {
-               wfProfileIn( __METHOD__ );
-
-               $linkCache = LinkCache::singleton();
-               $linkCache->clear();
-
-               if ( is_null( $this->title ) ) {
-                       $this->error = "refreshLinks: Invalid title";
-                       wfProfileOut( __METHOD__ );
-                       return false;
-               }
-
-               # Wait for the DB of the current/next slave DB handle to catch up to the master.
-               # This way, we get the correct page_latest for templates or files that just changed
-               # milliseconds ago, having triggered this job to begin with.
-               if ( isset( $this->params['masterPos'] ) ) {
-                       wfGetLB()->waitFor( $this->params['masterPos'] );
-               }
-
-               $revision = Revision::newFromTitle( $this->title, false, Revision::READ_NORMAL );
-               if ( !$revision ) {
-                       $this->error = 'refreshLinks: Article not found "' .
-                               $this->title->getPrefixedDBkey() . '"';
-                       wfProfileOut( __METHOD__ );
-                       return false; // XXX: what if it was just deleted?
-               }
-
-               self::runForTitleInternal( $this->title, $revision, __METHOD__ );
-
-               wfProfileOut( __METHOD__ );
-               return true;
-       }
-
-       public static function runForTitleInternal( Title $title, Revision $revision, $fname ) {
-               global $wgContLang;
-
-               wfProfileIn( $fname . '-parse' );
-               $options = ParserOptions::newFromUserAndLang( new User, $wgContLang );
-               $content = $revision->getContent();
-               $parserOutput = $content->getParserOutput( $title, $revision->getId(), $options, false );
-               wfProfileOut( $fname . '-parse' );
-
-               wfProfileIn( $fname . '-update' );
-               $updates = $content->getSecondaryDataUpdates( $title, null, false, $parserOutput  );
-               DataUpdate::runUpdates( $updates );
-               wfProfileOut( $fname . '-update' );
-       }
-}
-
-/**
- * Background job to update links for a given title.
- * Newer version for high use templates.
- *
- * @ingroup JobQueue
- */
-class RefreshLinksJob2 extends Job {
-       const MAX_TITLES_RUN = 10;
-
-       function __construct( $title, $params, $id = 0 ) {
-               parent::__construct( 'refreshLinks2', $title, $params, $id );
-       }
-
-       /**
-        * Run a refreshLinks2 job
-        * @return boolean success
-        */
-       function run() {
-               wfProfileIn( __METHOD__ );
-
-               $linkCache = LinkCache::singleton();
-               $linkCache->clear();
-
-               if ( is_null( $this->title ) ) {
-                       $this->error = "refreshLinks2: Invalid title";
-                       wfProfileOut( __METHOD__ );
-                       return false;
-               } elseif ( !isset( $this->params['start'] ) || !isset( $this->params['end'] ) ) {
-                       $this->error = "refreshLinks2: Invalid params";
-                       wfProfileOut( __METHOD__ );
-                       return false;
-               }
-
-               // Back compat for pre-r94435 jobs
-               $table = isset( $this->params['table'] ) ? $this->params['table'] : 'templatelinks';
-
-               // Avoid slave lag when fetching templates
-               if ( isset( $this->params['masterPos'] ) ) {
-                       $masterPos = $this->params['masterPos'];
-               } elseif ( wfGetLB()->getServerCount() > 1  ) {
-                       $masterPos = wfGetLB()->getMasterPos();
-               } else {
-                       $masterPos = false;
-               }
-
-               $titles = $this->title->getBacklinkCache()->getLinks(
-                       $table, $this->params['start'], $this->params['end'] );
-
-               if ( $titles->count() > self::MAX_TITLES_RUN ) {
-                       # We don't want to parse too many pages per job as it can starve other jobs.
-                       # If there are too many pages to parse, break this up into smaller jobs. By passing
-                       # in the master position here we can cut down on the time spent waiting for slaves to
-                       # catch up by the runners handling these jobs since time will have passed between now
-                       # and when they pop these jobs off the queue.
-                       $start = 0; // batch start
-                       $end   = 0; // batch end
-                       $bsize = 0; // batch size
-                       $first = true; // first of batch
-                       $jobs  = array();
-                       foreach ( $titles as $title ) {
-                               $start = $first ? $title->getArticleId() : $start;
-                               $end   = $title->getArticleId();
-                               $first = false;
-                               if ( ++$bsize >= self::MAX_TITLES_RUN ) {
-                                       $jobs[] = new RefreshLinksJob2( $this->title, array(
-                                               'table'     => $table,
-                                               'start'     => $start,
-                                               'end'       => $end,
-                                               'masterPos' => $masterPos
-                                       ) );
-                                       $first = true;
-                                       $start = $end = $bsize = 0;
-                               }
-                       }
-                       if ( $bsize > 0 ) { // group remaining pages into a job
-                               $jobs[] = new RefreshLinksJob2( $this->title, array(
-                                       'table'     => $table,
-                                       'start'     => $start,
-                                       'end'       => $end,
-                                       'masterPos' => $masterPos
-                               ) );
-                       }
-                       Job::batchInsert( $jobs );
-               } elseif ( php_sapi_name() != 'cli' ) {
-                       # Not suitable for page load triggered job running!
-                       # Gracefully switch to refreshLinks jobs if this happens.
-                       $jobs = array();
-                       foreach ( $titles as $title ) {
-                               $jobs[] = new RefreshLinksJob( $title, array( 'masterPos' => $masterPos ) );
-                       }
-                       Job::batchInsert( $jobs );
-               } else {
-                       # Wait for the DB of the current/next slave DB handle to catch up to the master.
-                       # This way, we get the correct page_latest for templates or files that just changed
-                       # milliseconds ago, having triggered this job to begin with.
-                       if ( $masterPos ) {
-                               wfGetLB()->waitFor( $masterPos );
-                       }
-                       # Re-parse each page that transcludes this page and update their tracking links...
-                       foreach ( $titles as $title ) {
-                               $revision = Revision::newFromTitle( $title, false, Revision::READ_NORMAL );
-                               if ( !$revision ) {
-                                       $this->error = 'refreshLinks: Article not found "' .
-                                               $title->getPrefixedDBkey() . '"';
-                                       continue; // skip this page
-                               }
-                               RefreshLinksJob::runForTitleInternal( $title, $revision, __METHOD__ );
-                               wfWaitForSlaves();
-                       }
-               }
-
-               wfProfileOut( __METHOD__ );
-               return true;
-       }
-}
diff --git a/includes/job/UploadFromUrlJob.php b/includes/job/UploadFromUrlJob.php
deleted file mode 100644 (file)
index e06f68e..0000000
+++ /dev/null
@@ -1,179 +0,0 @@
-<?php
-/**
- * Job for asynchronous upload-by-url.
- *
- * 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 JobQueue
- */
-
-/**
- * Job for asynchronous upload-by-url.
- *
- * This job is in fact an interface to UploadFromUrl, which is designed such
- * that it does not require any globals. If it does, fix it elsewhere, do not
- * add globals in here.
- *
- * @ingroup JobQueue
- */
-class UploadFromUrlJob extends Job {
-       const SESSION_KEYNAME = 'wsUploadFromUrlJobData';
-
-       /**
-        * @var UploadFromUrl
-        */
-       public $upload;
-
-       /**
-        * @var User
-        */
-       protected $user;
-
-       public function __construct( $title, $params, $id = 0 ) {
-               parent::__construct( 'uploadFromUrl', $title, $params, $id );
-       }
-
-       public function run() {
-               # Initialize this object and the upload object
-               $this->upload = new UploadFromUrl();
-               $this->upload->initialize(
-                       $this->title->getText(),
-                       $this->params['url'],
-                       false
-               );
-               $this->user = User::newFromName( $this->params['userName'] );
-
-               # Fetch the file
-               $status = $this->upload->fetchFile();
-               if ( !$status->isOk() ) {
-                       $this->leaveMessage( $status );
-                       return true;
-               }
-
-               # Verify upload
-               $result = $this->upload->verifyUpload();
-               if ( $result['status'] != UploadBase::OK ) {
-                       $status = $this->upload->convertVerifyErrorToStatus( $result );
-                       $this->leaveMessage( $status );
-                       return true;
-               }
-
-               # Check warnings
-               if ( !$this->params['ignoreWarnings'] ) {
-                       $warnings = $this->upload->checkWarnings();
-                       if ( $warnings ) {
-
-                               # Stash the upload
-                               $key = $this->upload->stashFile();
-
-                               if ( $this->params['leaveMessage'] ) {
-                                       $this->user->leaveUserMessage(
-                                               wfMessage( 'upload-warning-subj' )->text(),
-                                               wfMessage( 'upload-warning-msg',
-                                                       $key,
-                                                       $this->params['url'] )->text()
-                                       );
-                               } else {
-                                       wfSetupSession( $this->params['sessionId'] );
-                                       $this->storeResultInSession( 'Warning',
-                                               'warnings', $warnings );
-                                       session_write_close();
-                               }
-
-                               return true;
-                       }
-               }
-
-               # Perform the upload
-               $status = $this->upload->performUpload(
-                       $this->params['comment'],
-                       $this->params['pageText'],
-                       $this->params['watch'],
-                       $this->user
-               );
-               $this->leaveMessage( $status );
-               return true;
-
-       }
-
-       /**
-        * Leave a message on the user talk page or in the session according to
-        * $params['leaveMessage'].
-        *
-        * @param $status Status
-        */
-       protected function leaveMessage( $status ) {
-               if ( $this->params['leaveMessage'] ) {
-                       if ( $status->isGood() ) {
-                               $this->user->leaveUserMessage( wfMessage( 'upload-success-subj' )->text(),
-                                       wfMessage( 'upload-success-msg',
-                                               $this->upload->getTitle()->getText(),
-                                               $this->params['url']
-                                       )->text() );
-                       } else {
-                               $this->user->leaveUserMessage( wfMessage( 'upload-failure-subj' )->text(),
-                                       wfMessage( 'upload-failure-msg',
-                                               $status->getWikiText(),
-                                               $this->params['url']
-                                       )->text() );
-                       }
-               } else {
-                       wfSetupSession( $this->params['sessionId'] );
-                       if ( $status->isOk() ) {
-                               $this->storeResultInSession( 'Success',
-                                       'filename', $this->upload->getLocalFile()->getName() );
-                       } else {
-                               $this->storeResultInSession( 'Failure',
-                                       'errors', $status->getErrorsArray() );
-                       }
-                       session_write_close();
-               }
-       }
-
-       /**
-        * Store a result in the session data. Note that the caller is responsible
-        * for appropriate session_start and session_write_close calls.
-        *
-        * @param $result String: the result (Success|Warning|Failure)
-        * @param $dataKey String: the key of the extra data
-        * @param $dataValue Mixed: the extra data itself
-        */
-       protected function storeResultInSession( $result, $dataKey, $dataValue ) {
-               $session =& self::getSessionData( $this->params['sessionKey'] );
-               $session['result'] = $result;
-               $session[$dataKey] = $dataValue;
-       }
-
-       /**
-        * Initialize the session data. Sets the intial result to queued.
-        */
-       public function initializeSessionData() {
-               $session =& self::getSessionData( $this->params['sessionKey'] );
-               $$session['result'] = 'Queued';
-       }
-
-       /**
-        * @param $key
-        * @return mixed
-        */
-       public static function &getSessionData( $key ) {
-               if ( !isset( $_SESSION[self::SESSION_KEYNAME][$key] ) ) {
-                       $_SESSION[self::SESSION_KEYNAME][$key] = array();
-               }
-               return $_SESSION[self::SESSION_KEYNAME][$key];
-       }
-}
diff --git a/includes/job/jobs/DoubleRedirectJob.php b/includes/job/jobs/DoubleRedirectJob.php
new file mode 100644 (file)
index 0000000..b1b96b6
--- /dev/null
@@ -0,0 +1,210 @@
+<?php
+/**
+ * Job to fix double redirects after moving a page.
+ *
+ * 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 JobQueue
+ */
+
+/**
+ * Job to fix double redirects after moving a page
+ *
+ * @ingroup JobQueue
+ */
+class DoubleRedirectJob extends Job {
+       var $reason, $redirTitle;
+
+       /**
+        * @var User
+        */
+       static $user;
+
+       /**
+        * Insert jobs into the job queue to fix redirects to the given title
+        * @param $reason String: the reason for the fix, see message "double-redirect-fixed-<reason>"
+        * @param $redirTitle Title: the title which has changed, redirects pointing to this title are fixed
+        * @param $destTitle bool Not used
+        */
+       public static function fixRedirects( $reason, $redirTitle, $destTitle = false ) {
+               # Need to use the master to get the redirect table updated in the same transaction
+               $dbw = wfGetDB( DB_MASTER );
+               $res = $dbw->select(
+                       array( 'redirect', 'page' ),
+                       array( 'page_namespace', 'page_title' ),
+                       array(
+                               'page_id = rd_from',
+                               'rd_namespace' => $redirTitle->getNamespace(),
+                               'rd_title' => $redirTitle->getDBkey()
+                       ), __METHOD__ );
+               if ( !$res->numRows() ) {
+                       return;
+               }
+               $jobs = array();
+               foreach ( $res as $row ) {
+                       $title = Title::makeTitle( $row->page_namespace, $row->page_title );
+                       if ( !$title ) {
+                               continue;
+                       }
+
+                       $jobs[] = new self( $title, array(
+                               'reason' => $reason,
+                               'redirTitle' => $redirTitle->getPrefixedDBkey() ) );
+                       # Avoid excessive memory usage
+                       if ( count( $jobs ) > 10000 ) {
+                               Job::batchInsert( $jobs );
+                               $jobs = array();
+                       }
+               }
+               Job::batchInsert( $jobs );
+       }
+
+       function __construct( $title, $params = false, $id = 0 ) {
+               parent::__construct( 'fixDoubleRedirect', $title, $params, $id );
+               $this->reason = $params['reason'];
+               $this->redirTitle = Title::newFromText( $params['redirTitle'] );
+       }
+
+       /**
+        * @return bool
+        */
+       function run() {
+               if ( !$this->redirTitle ) {
+                       $this->setLastError( 'Invalid title' );
+                       return false;
+               }
+
+               $targetRev = Revision::newFromTitle( $this->title, false, Revision::READ_LATEST );
+               if ( !$targetRev ) {
+                       wfDebug( __METHOD__.": target redirect already deleted, ignoring\n" );
+                       return true;
+               }
+               $content = $targetRev->getContent();
+               $currentDest = $content->getRedirectTarget();
+               if ( !$currentDest || !$currentDest->equals( $this->redirTitle ) ) {
+                       wfDebug( __METHOD__.": Redirect has changed since the job was queued\n" );
+                       return true;
+               }
+
+               # Check for a suppression tag (used e.g. in periodically archived discussions)
+               $mw = MagicWord::get( 'staticredirect' );
+               if ( $content->matchMagicWord( $mw ) ) {
+                       wfDebug( __METHOD__.": skipping: suppressed with __STATICREDIRECT__\n" );
+                       return true;
+               }
+
+               # Find the current final destination
+               $newTitle = self::getFinalDestination( $this->redirTitle );
+               if ( !$newTitle ) {
+                       wfDebug( __METHOD__.": skipping: single redirect, circular redirect or invalid redirect destination\n" );
+                       return true;
+               }
+               if ( $newTitle->equals( $this->redirTitle ) ) {
+                       # The redirect is already right, no need to change it
+                       # This can happen if the page was moved back (say after vandalism)
+                       wfDebug( __METHOD__.": skipping, already good\n" );
+               }
+
+               # Preserve fragment (bug 14904)
+               $newTitle = Title::makeTitle( $newTitle->getNamespace(), $newTitle->getDBkey(),
+                       $currentDest->getFragment(), $newTitle->getInterwiki() );
+
+               # Fix the text
+               $newContent = $content->updateRedirect( $newTitle );
+
+               if ( $newContent->equals( $content ) ) {
+                       $this->setLastError( 'Content unchanged???' );
+                       return false;
+               }
+
+               # Save it
+               global $wgUser;
+               $oldUser = $wgUser;
+               $wgUser = $this->getUser();
+               $article = WikiPage::factory( $this->title );
+               $reason = wfMessage( 'double-redirect-fixed-' . $this->reason,
+                       $this->redirTitle->getPrefixedText(), $newTitle->getPrefixedText()
+               )->inContentLanguage()->text();
+               $article->doEditContent( $newContent, $reason, EDIT_UPDATE | EDIT_SUPPRESS_RC, false, $this->getUser() );
+               $wgUser = $oldUser;
+
+               return true;
+       }
+
+       /**
+        * Get the final destination of a redirect
+        *
+        * @param $title Title
+        *
+        * @return bool if the specified title is not a redirect, or if it is a circular redirect
+        */
+       public static function getFinalDestination( $title ) {
+               $dbw = wfGetDB( DB_MASTER );
+
+               $seenTitles = array(); # Circular redirect check
+               $dest = false;
+
+               while ( true ) {
+                       $titleText = $title->getPrefixedDBkey();
+                       if ( isset( $seenTitles[$titleText] ) ) {
+                               wfDebug( __METHOD__, "Circular redirect detected, aborting\n" );
+                               return false;
+                       }
+                       $seenTitles[$titleText] = true;
+
+                       if ( $title->getInterwiki() ) {
+                               // If the target is interwiki, we have to break early (bug 40352).
+                               // Otherwise it will look up a row in the local page table
+                               // with the namespace/page of the interwiki target which can cause
+                               // unexpected results (e.g. X -> foo:Bar -> Bar -> .. )
+                               break;
+                       }
+
+                       $row = $dbw->selectRow(
+                               array( 'redirect', 'page' ),
+                               array( 'rd_namespace', 'rd_title', 'rd_interwiki' ),
+                               array(
+                                       'rd_from=page_id',
+                                       'page_namespace' => $title->getNamespace(),
+                                       'page_title' => $title->getDBkey()
+                               ), __METHOD__ );
+                       if ( !$row ) {
+                               # No redirect from here, chain terminates
+                               break;
+                       } else {
+                               $dest = $title = Title::makeTitle( $row->rd_namespace, $row->rd_title, '', $row->rd_interwiki );
+                       }
+               }
+               return $dest;
+       }
+
+       /**
+        * Get a user object for doing edits, from a request-lifetime cache
+        * @return User
+        */
+       function getUser() {
+               if ( !self::$user ) {
+                       self::$user = User::newFromName( wfMessage( 'double-redirect-fixer' )->inContentLanguage()->text(), false );
+                       # FIXME: newFromName could return false on a badly configured wiki.
+                       if ( !self::$user->isLoggedIn() ) {
+                               self::$user->addToDatabase();
+                       }
+               }
+               return self::$user;
+       }
+}
+
diff --git a/includes/job/jobs/EmaillingJob.php b/includes/job/jobs/EmaillingJob.php
new file mode 100644 (file)
index 0000000..d359988
--- /dev/null
@@ -0,0 +1,46 @@
+<?php
+/**
+ * Old job for notification emails.
+ *
+ * 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 JobQueue
+ */
+
+/**
+ * Old job used for sending single notification emails;
+ * kept for backwards-compatibility
+ *
+ * @ingroup JobQueue
+ */
+class EmaillingJob extends Job {
+       function __construct( $title, $params, $id = 0 ) {
+               parent::__construct( 'sendMail', Title::newMainPage(), $params, $id );
+       }
+
+       function run() {
+               UserMailer::send(
+                       $this->params['to'],
+                       $this->params['from'],
+                       $this->params['subj'],
+                       $this->params['body'],
+                       $this->params['replyto']
+               );
+               return true;
+       }
+
+}
diff --git a/includes/job/jobs/EnotifNotifyJob.php b/includes/job/jobs/EnotifNotifyJob.php
new file mode 100644 (file)
index 0000000..b4c925e
--- /dev/null
@@ -0,0 +1,57 @@
+<?php
+/**
+ * Job for notification emails.
+ *
+ * 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 JobQueue
+ */
+
+/**
+ * Job for email notification mails
+ *
+ * @ingroup JobQueue
+ */
+class EnotifNotifyJob extends Job {
+
+       function __construct( $title, $params, $id = 0 ) {
+               parent::__construct( 'enotifNotify', $title, $params, $id );
+       }
+
+       function run() {
+               $enotif = new EmailNotification();
+               // Get the user from ID (rename safe). Anons are 0, so defer to name.
+               if( isset( $this->params['editorID'] ) && $this->params['editorID'] ) {
+                       $editor = User::newFromId( $this->params['editorID'] );
+               // B/C, only the name might be given.
+               } else {
+                       # FIXME: newFromName could return false on a badly configured wiki.
+                       $editor = User::newFromName( $this->params['editor'], false );
+               }
+               $enotif->actuallyNotifyOnPageChange(
+                       $editor,
+                       $this->title,
+                       $this->params['timestamp'],
+                       $this->params['summary'],
+                       $this->params['minorEdit'],
+                       $this->params['oldid'],
+                       $this->params['watchers']
+               );
+               return true;
+       }
+
+}
diff --git a/includes/job/jobs/HTMLCacheUpdateJob.php b/includes/job/jobs/HTMLCacheUpdateJob.php
new file mode 100644 (file)
index 0000000..4e6fd6c
--- /dev/null
@@ -0,0 +1,51 @@
+<?php
+/**
+ * HTML cache invalidation of all pages linking to a given title.
+ *
+ * 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 Cache
+ */
+
+/**
+ * Job wrapper for HTMLCacheUpdate. Gets run whenever a related
+ * job gets called from the queue.
+ *
+ * @ingroup JobQueue
+ */
+class HTMLCacheUpdateJob extends Job {
+       var $table, $start, $end;
+
+       /**
+        * Construct a job
+        * @param $title Title: the title linked to
+        * @param $params Array: job parameters (table, start and end page_ids)
+        * @param $id Integer: job id
+        */
+       function __construct( $title, $params, $id = 0 ) {
+               parent::__construct( 'htmlCacheUpdate', $title, $params, $id );
+               $this->table = $params['table'];
+               $this->start = $params['start'];
+               $this->end = $params['end'];
+       }
+
+       public function run() {
+               $update = new HTMLCacheUpdate( $this->title, $this->table, $this->start, $this->end );
+               $update->doUpdate();
+               return true;
+       }
+}
diff --git a/includes/job/jobs/RefreshLinksJob.php b/includes/job/jobs/RefreshLinksJob.php
new file mode 100644 (file)
index 0000000..a29f29f
--- /dev/null
@@ -0,0 +1,202 @@
+<?php
+/**
+ * Job to update links for a given title.
+ *
+ * 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 JobQueue
+ */
+
+/**
+ * Background job to update links for a given title.
+ *
+ * @ingroup JobQueue
+ */
+class RefreshLinksJob extends Job {
+       function __construct( $title, $params = '', $id = 0 ) {
+               parent::__construct( 'refreshLinks', $title, $params, $id );
+               $this->removeDuplicates = true; // job is expensive
+       }
+
+       /**
+        * Run a refreshLinks job
+        * @return boolean success
+        */
+       function run() {
+               wfProfileIn( __METHOD__ );
+
+               $linkCache = LinkCache::singleton();
+               $linkCache->clear();
+
+               if ( is_null( $this->title ) ) {
+                       $this->error = "refreshLinks: Invalid title";
+                       wfProfileOut( __METHOD__ );
+                       return false;
+               }
+
+               # Wait for the DB of the current/next slave DB handle to catch up to the master.
+               # This way, we get the correct page_latest for templates or files that just changed
+               # milliseconds ago, having triggered this job to begin with.
+               if ( isset( $this->params['masterPos'] ) ) {
+                       wfGetLB()->waitFor( $this->params['masterPos'] );
+               }
+
+               $revision = Revision::newFromTitle( $this->title, false, Revision::READ_NORMAL );
+               if ( !$revision ) {
+                       $this->error = 'refreshLinks: Article not found "' .
+                               $this->title->getPrefixedDBkey() . '"';
+                       wfProfileOut( __METHOD__ );
+                       return false; // XXX: what if it was just deleted?
+               }
+
+               self::runForTitleInternal( $this->title, $revision, __METHOD__ );
+
+               wfProfileOut( __METHOD__ );
+               return true;
+       }
+
+       public static function runForTitleInternal( Title $title, Revision $revision, $fname ) {
+               global $wgContLang;
+
+               wfProfileIn( $fname . '-parse' );
+               $options = ParserOptions::newFromUserAndLang( new User, $wgContLang );
+               $content = $revision->getContent();
+               $parserOutput = $content->getParserOutput( $title, $revision->getId(), $options, false );
+               wfProfileOut( $fname . '-parse' );
+
+               wfProfileIn( $fname . '-update' );
+               $updates = $content->getSecondaryDataUpdates( $title, null, false, $parserOutput  );
+               DataUpdate::runUpdates( $updates );
+               wfProfileOut( $fname . '-update' );
+       }
+}
+
+/**
+ * Background job to update links for a given title.
+ * Newer version for high use templates.
+ *
+ * @ingroup JobQueue
+ */
+class RefreshLinksJob2 extends Job {
+       const MAX_TITLES_RUN = 10;
+
+       function __construct( $title, $params, $id = 0 ) {
+               parent::__construct( 'refreshLinks2', $title, $params, $id );
+       }
+
+       /**
+        * Run a refreshLinks2 job
+        * @return boolean success
+        */
+       function run() {
+               wfProfileIn( __METHOD__ );
+
+               $linkCache = LinkCache::singleton();
+               $linkCache->clear();
+
+               if ( is_null( $this->title ) ) {
+                       $this->error = "refreshLinks2: Invalid title";
+                       wfProfileOut( __METHOD__ );
+                       return false;
+               } elseif ( !isset( $this->params['start'] ) || !isset( $this->params['end'] ) ) {
+                       $this->error = "refreshLinks2: Invalid params";
+                       wfProfileOut( __METHOD__ );
+                       return false;
+               }
+
+               // Back compat for pre-r94435 jobs
+               $table = isset( $this->params['table'] ) ? $this->params['table'] : 'templatelinks';
+
+               // Avoid slave lag when fetching templates
+               if ( isset( $this->params['masterPos'] ) ) {
+                       $masterPos = $this->params['masterPos'];
+               } elseif ( wfGetLB()->getServerCount() > 1  ) {
+                       $masterPos = wfGetLB()->getMasterPos();
+               } else {
+                       $masterPos = false;
+               }
+
+               $titles = $this->title->getBacklinkCache()->getLinks(
+                       $table, $this->params['start'], $this->params['end'] );
+
+               if ( $titles->count() > self::MAX_TITLES_RUN ) {
+                       # We don't want to parse too many pages per job as it can starve other jobs.
+                       # If there are too many pages to parse, break this up into smaller jobs. By passing
+                       # in the master position here we can cut down on the time spent waiting for slaves to
+                       # catch up by the runners handling these jobs since time will have passed between now
+                       # and when they pop these jobs off the queue.
+                       $start = 0; // batch start
+                       $end   = 0; // batch end
+                       $bsize = 0; // batch size
+                       $first = true; // first of batch
+                       $jobs  = array();
+                       foreach ( $titles as $title ) {
+                               $start = $first ? $title->getArticleId() : $start;
+                               $end   = $title->getArticleId();
+                               $first = false;
+                               if ( ++$bsize >= self::MAX_TITLES_RUN ) {
+                                       $jobs[] = new RefreshLinksJob2( $this->title, array(
+                                               'table'     => $table,
+                                               'start'     => $start,
+                                               'end'       => $end,
+                                               'masterPos' => $masterPos
+                                       ) );
+                                       $first = true;
+                                       $start = $end = $bsize = 0;
+                               }
+                       }
+                       if ( $bsize > 0 ) { // group remaining pages into a job
+                               $jobs[] = new RefreshLinksJob2( $this->title, array(
+                                       'table'     => $table,
+                                       'start'     => $start,
+                                       'end'       => $end,
+                                       'masterPos' => $masterPos
+                               ) );
+                       }
+                       Job::batchInsert( $jobs );
+               } elseif ( php_sapi_name() != 'cli' ) {
+                       # Not suitable for page load triggered job running!
+                       # Gracefully switch to refreshLinks jobs if this happens.
+                       $jobs = array();
+                       foreach ( $titles as $title ) {
+                               $jobs[] = new RefreshLinksJob( $title, array( 'masterPos' => $masterPos ) );
+                       }
+                       Job::batchInsert( $jobs );
+               } else {
+                       # Wait for the DB of the current/next slave DB handle to catch up to the master.
+                       # This way, we get the correct page_latest for templates or files that just changed
+                       # milliseconds ago, having triggered this job to begin with.
+                       if ( $masterPos ) {
+                               wfGetLB()->waitFor( $masterPos );
+                       }
+                       # Re-parse each page that transcludes this page and update their tracking links...
+                       foreach ( $titles as $title ) {
+                               $revision = Revision::newFromTitle( $title, false, Revision::READ_NORMAL );
+                               if ( !$revision ) {
+                                       $this->error = 'refreshLinks: Article not found "' .
+                                               $title->getPrefixedDBkey() . '"';
+                                       continue; // skip this page
+                               }
+                               RefreshLinksJob::runForTitleInternal( $title, $revision, __METHOD__ );
+                               wfWaitForSlaves();
+                       }
+               }
+
+               wfProfileOut( __METHOD__ );
+               return true;
+       }
+}
diff --git a/includes/job/jobs/UploadFromUrlJob.php b/includes/job/jobs/UploadFromUrlJob.php
new file mode 100644 (file)
index 0000000..e06f68e
--- /dev/null
@@ -0,0 +1,179 @@
+<?php
+/**
+ * Job for asynchronous upload-by-url.
+ *
+ * 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 JobQueue
+ */
+
+/**
+ * Job for asynchronous upload-by-url.
+ *
+ * This job is in fact an interface to UploadFromUrl, which is designed such
+ * that it does not require any globals. If it does, fix it elsewhere, do not
+ * add globals in here.
+ *
+ * @ingroup JobQueue
+ */
+class UploadFromUrlJob extends Job {
+       const SESSION_KEYNAME = 'wsUploadFromUrlJobData';
+
+       /**
+        * @var UploadFromUrl
+        */
+       public $upload;
+
+       /**
+        * @var User
+        */
+       protected $user;
+
+       public function __construct( $title, $params, $id = 0 ) {
+               parent::__construct( 'uploadFromUrl', $title, $params, $id );
+       }
+
+       public function run() {
+               # Initialize this object and the upload object
+               $this->upload = new UploadFromUrl();
+               $this->upload->initialize(
+                       $this->title->getText(),
+                       $this->params['url'],
+                       false
+               );
+               $this->user = User::newFromName( $this->params['userName'] );
+
+               # Fetch the file
+               $status = $this->upload->fetchFile();
+               if ( !$status->isOk() ) {
+                       $this->leaveMessage( $status );
+                       return true;
+               }
+
+               # Verify upload
+               $result = $this->upload->verifyUpload();
+               if ( $result['status'] != UploadBase::OK ) {
+                       $status = $this->upload->convertVerifyErrorToStatus( $result );
+                       $this->leaveMessage( $status );
+                       return true;
+               }
+
+               # Check warnings
+               if ( !$this->params['ignoreWarnings'] ) {
+                       $warnings = $this->upload->checkWarnings();
+                       if ( $warnings ) {
+
+                               # Stash the upload
+                               $key = $this->upload->stashFile();
+
+                               if ( $this->params['leaveMessage'] ) {
+                                       $this->user->leaveUserMessage(
+                                               wfMessage( 'upload-warning-subj' )->text(),
+                                               wfMessage( 'upload-warning-msg',
+                                                       $key,
+                                                       $this->params['url'] )->text()
+                                       );
+                               } else {
+                                       wfSetupSession( $this->params['sessionId'] );
+                                       $this->storeResultInSession( 'Warning',
+                                               'warnings', $warnings );
+                                       session_write_close();
+                               }
+
+                               return true;
+                       }
+               }
+
+               # Perform the upload
+               $status = $this->upload->performUpload(
+                       $this->params['comment'],
+                       $this->params['pageText'],
+                       $this->params['watch'],
+                       $this->user
+               );
+               $this->leaveMessage( $status );
+               return true;
+
+       }
+
+       /**
+        * Leave a message on the user talk page or in the session according to
+        * $params['leaveMessage'].
+        *
+        * @param $status Status
+        */
+       protected function leaveMessage( $status ) {
+               if ( $this->params['leaveMessage'] ) {
+                       if ( $status->isGood() ) {
+                               $this->user->leaveUserMessage( wfMessage( 'upload-success-subj' )->text(),
+                                       wfMessage( 'upload-success-msg',
+                                               $this->upload->getTitle()->getText(),
+                                               $this->params['url']
+                                       )->text() );
+                       } else {
+                               $this->user->leaveUserMessage( wfMessage( 'upload-failure-subj' )->text(),
+                                       wfMessage( 'upload-failure-msg',
+                                               $status->getWikiText(),
+                                               $this->params['url']
+                                       )->text() );
+                       }
+               } else {
+                       wfSetupSession( $this->params['sessionId'] );
+                       if ( $status->isOk() ) {
+                               $this->storeResultInSession( 'Success',
+                                       'filename', $this->upload->getLocalFile()->getName() );
+                       } else {
+                               $this->storeResultInSession( 'Failure',
+                                       'errors', $status->getErrorsArray() );
+                       }
+                       session_write_close();
+               }
+       }
+
+       /**
+        * Store a result in the session data. Note that the caller is responsible
+        * for appropriate session_start and session_write_close calls.
+        *
+        * @param $result String: the result (Success|Warning|Failure)
+        * @param $dataKey String: the key of the extra data
+        * @param $dataValue Mixed: the extra data itself
+        */
+       protected function storeResultInSession( $result, $dataKey, $dataValue ) {
+               $session =& self::getSessionData( $this->params['sessionKey'] );
+               $session['result'] = $result;
+               $session[$dataKey] = $dataValue;
+       }
+
+       /**
+        * Initialize the session data. Sets the intial result to queued.
+        */
+       public function initializeSessionData() {
+               $session =& self::getSessionData( $this->params['sessionKey'] );
+               $$session['result'] = 'Queued';
+       }
+
+       /**
+        * @param $key
+        * @return mixed
+        */
+       public static function &getSessionData( $key ) {
+               if ( !isset( $_SESSION[self::SESSION_KEYNAME][$key] ) ) {
+                       $_SESSION[self::SESSION_KEYNAME][$key] = array();
+               }
+               return $_SESSION[self::SESSION_KEYNAME][$key];
+       }
+}
index e72541c..9b3e796 100644 (file)
@@ -29,7 +29,7 @@
  *
  * @file
  *
- * @licence GNU GPL v2+
+ * @license GNU GPL v2+
  * @author Jeroen De Dauw < jeroendedauw@gmail.com >
  */
 abstract class GenericArrayObject extends ArrayObject {
index 2ca525e..1f94b43 100644 (file)
@@ -175,6 +175,7 @@ class DatabaseLogEntry extends LogEntryBase {
 
        /// Database result row.
        protected $row;
+       protected $performer;
 
        protected function __construct( $row ) {
                $this->row = $row;
@@ -232,17 +233,20 @@ class DatabaseLogEntry extends LogEntryBase {
        }
 
        public function getPerformer() {
-               $userId = (int) $this->row->log_user;
-               if ( $userId !== 0 ) { // logged-in users
-                       if ( isset( $this->row->user_name ) ) {
-                               return User::newFromRow( $this->row );
-                       } else {
-                               return User::newFromId( $userId );
+               if( !$this->performer ) {
+                       $userId = (int) $this->row->log_user;
+                       if ( $userId !== 0 ) { // logged-in users
+                               if ( isset( $this->row->user_name ) ) {
+                                       $this->performer = User::newFromRow( $this->row );
+                               } else {
+                                       $this->performer = User::newFromId( $userId );
+                               }
+                       } else { // IP users
+                               $userText = $this->row->log_user_text;
+                               $this->performer = User::newFromName( $userText, false );
                        }
-               } else { // IP users
-                       $userText = $this->row->log_user_text;
-                       return User::newFromName( $userText, false );
                }
+               return $this->performer;
        }
 
        public function getTarget() {
@@ -287,14 +291,17 @@ class RCDatabaseLogEntry extends DatabaseLogEntry {
        }
 
        public function getPerformer() {
-               $userId = (int) $this->row->rc_user;
-               if ( $userId !== 0 ) {
-                       return User::newFromId( $userId );
-               } else {
-                       $userText = $this->row->rc_user_text;
-                       // Might be an IP, don't validate the username
-                       return User::newFromName( $userText, false );
+               if( !$this->performer ) {
+                       $userId = (int) $this->row->rc_user;
+                       if ( $userId !== 0 ) {
+                               $this->performer = User::newFromId( $userId );
+                       } else {
+                               $userText = $this->row->rc_user_text;
+                               // Might be an IP, don't validate the username
+                               $this->performer = User::newFromName( $userText, false );
+                       }
                }
+               return $this->performer;
        }
 
        public function getTarget() {
index 9ac8ad8..72f6a9f 100644 (file)
@@ -1167,10 +1167,16 @@ class MWMemcached {
                if ( !is_resource( $f ) ) {
                        return;
                }
-               $n = stream_select( $r = array( $f ), $w = null, $e = null, 0, 0 );
+               $r = array( $f );
+               $w = null;
+               $e = null;
+               $n = stream_select( $r, $w, $e, 0, 0 );
                while ( $n == 1 && !feof( $f ) ) {
                        fread( $f, 1024 );
-                       $n = stream_select( $r = array( $f ), $w = null, $e = null, 0, 0 );
+                       $r = array( $f );
+                       $w = null;
+                       $e = null;
+                       $n = stream_select( $r, $w, $e, 0, 0 );
                }
        }
 
index 92e7fcf..6705863 100644 (file)
@@ -873,7 +873,7 @@ class ResourceLoader {
         * Combines an associative array mapping media type to CSS into a
         * single stylesheet with "@media" blocks.
         *
-        * @param $styles Array: Array keyed by media type containing (arrays of) CSS strings.
+        * @param $stylePairs Array: Array keyed by media type containing (arrays of) CSS strings.
         *
         * @return Array
         */
index db4c758..ffa3046 100644 (file)
@@ -532,7 +532,8 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
                if ( $context->getDebug() ) {
                        $files = array_merge( $files, $this->debugScripts );
                }
-               return $files;
+
+               return array_unique( $files );
        }
 
        /**
index e1bb32f..f8f5fa5 100644 (file)
@@ -163,7 +163,7 @@ class SearchEngine {
 
        /**
         * Really find the title match.
-        * @return null|\Title
+        * @return null|Title
         */
        private static function getNearMatchInternal( $searchterm ) {
                global $wgContLang, $wgEnableSearchContributorsByIP;
index 4edce35..23dd479 100644 (file)
@@ -192,7 +192,7 @@ class SearchMssql extends SearchEngine {
         * @param $id Integer
         * @param $title String
         * @param $text String
-        * @return bool|\ResultWrapper
+        * @return bool|ResultWrapper
         */
        function update( $id, $title, $text ) {
                // We store the column data as UTF-8 byte order marked binary stream
@@ -215,7 +215,7 @@ class SearchMssql extends SearchEngine {
         *
         * @param $id Integer
         * @param $title String
-        * @return bool|\ResultWrapper
+        * @return bool|ResultWrapper
         */
        function updateTitle( $id, $title ) {
                $table = $this->db->tableName( 'searchindex' );
index 71a17c8..716f144 100644 (file)
@@ -8,7 +8,7 @@
  * @file
  * @ingroup Site
  *
- * @licence GNU GPL v2+
+ * @license GNU GPL v2+
  * @author John Erling Blad < jeblad@gmail.com >
  * @author Daniel Kinzler
  * @author Jeroen De Dauw < jeroendedauw@gmail.com >
@@ -282,7 +282,7 @@ class MediaWikiSite extends SiteObject {
         *
         * @since 1.21
         *
-        * @param string|false
+        * @param $pagename string: Page name (default: false)
         *
         * @return string
         */
index 350a19d..200a006 100644 (file)
@@ -23,7 +23,7 @@
  * @file
  * @ingroup Site
  *
- * @licence GNU GPL v2+
+ * @license GNU GPL v2+
  * @author Jeroen De Dauw < jeroendedauw@gmail.com >
  */
 interface Site {
index df43148..141629e 100644 (file)
@@ -23,7 +23,7 @@
  * @file
  * @ingroup Site
  *
- * @licence GNU GPL v2+
+ * @license GNU GPL v2+
  * @author Jeroen De Dauw < jeroendedauw@gmail.com >
  */
 class SiteArray extends GenericArrayObject implements SiteList {
index 68bd106..6273364 100644 (file)
@@ -23,7 +23,7 @@
  * @file
  * @ingroup Site
  *
- * @licence GNU GPL v2+
+ * @license GNU GPL v2+
  * @author Jeroen De Dauw < jeroendedauw@gmail.com >
  */
 interface SiteList extends Countable, Traversable, Serializable, ArrayAccess {
index 7f143d1..6470c86 100644 (file)
@@ -23,7 +23,7 @@
  * @file
  * @ingroup Site
  *
- * @licence GNU GPL v2+
+ * @license GNU GPL v2+
  * @author Jeroen De Dauw < jeroendedauw@gmail.com >
  * @author Daniel Werner
  */
index 9e87ed9..56d567e 100644 (file)
@@ -25,7 +25,7 @@
  * @file
  * @ingroup Site
  *
- * @licence GNU GPL v2+
+ * @license GNU GPL v2+
  * @author Jeroen De Dauw < jeroendedauw@gmail.com >
  */
 class Sites {
index 71e55f8..a03c598 100644 (file)
@@ -24,7 +24,7 @@
  * @file
  * @ingroup Site
  *
- * @licence GNU GPL v2+
+ * @license GNU GPL v2+
  * @author Jeroen De Dauw < jeroendedauw@gmail.com >
  */
 class SitesTable extends ORMTable {
index fb65326..8e528dc 100644 (file)
@@ -63,7 +63,7 @@ class SpecialBookSources extends SpecialPage {
 
        /**
         * Returns whether a given ISBN (10 or 13) is valid.  True indicates validity.
-        * @param isbn string ISBN passed for check
+        * @param $isbn string ISBN passed for check
         * @return bool
         */
        public static function isValidISBN( $isbn ) {
index b3f6c72..949ac35 100644 (file)
@@ -119,7 +119,7 @@ abstract class SpecialCachedPage extends SpecialPage implements ICacheHelper {
         *
         * @since 1.20
         *
-        * @param {function} $computeFunction
+        * @param function $computeFunction
         * @param array|mixed $args
         * @param string|null $key
         *
@@ -137,7 +137,7 @@ abstract class SpecialCachedPage extends SpecialPage implements ICacheHelper {
         *
         * @since 1.20
         *
-        * @param {function} $computeFunction
+        * @param function $computeFunction
         * @param array $args
         * @param string|null $key
         */
index ca8c9c8..689e096 100644 (file)
@@ -399,7 +399,7 @@ class SpecialContributions extends SpecialPage {
                        $this->opts['topOnly'] = false;
                }
 
-               $form = Xml::openElement( 'form', array( 'method' => 'get', 'action' => $wgScript, 'class' => 'mw-contributions-form' ) );
+               $form = Html::openElement( 'form', array( 'method' => 'get', 'action' => $wgScript, 'class' => 'mw-contributions-form' ) );
 
                # Add hidden params for tracking except for parameters in $skipParameters
                $skipParameters = array( 'namespace', 'nsInvert', 'deletedOnly', 'target', 'contribs', 'year', 'month', 'topOnly', 'associated' );
@@ -414,13 +414,13 @@ class SpecialContributions extends SpecialPage {
 
                if ( $tagFilter ) {
                        $filterSelection =
-                               Xml::tags( 'td', array( 'class' => 'mw-label' ), array_shift( $tagFilter ) ) .
-                               Xml::tags( 'td', array( 'class' => 'mw-input' ), implode( '&#160', $tagFilter ) );
+                               Html::rawElement( 'td', array( 'class' => 'mw-label' ), array_shift( $tagFilter ) ) .
+                               Html::rawElement( 'td', array( 'class' => 'mw-input' ), implode( '&#160', $tagFilter ) );
                } else {
-                       $filterSelection = Xml::tags( 'td', array( 'colspan' => 2 ), '' );
+                       $filterSelection = Html::rawElement( 'td', array( 'colspan' => 2 ), '' );
                }
 
-               $targetSelection = Xml::tags( 'td', array( 'colspan' => 2 ),
+               $targetSelection = Html::rawElement( 'td', array( 'colspan' => 2 ),
                        Xml::radioLabel(
                                $this->msg( 'sp-contributions-newbies' )->text(),
                                'contribs',
@@ -455,7 +455,7 @@ class SpecialContributions extends SpecialPage {
                                        ''
                                )
                        ) .
-                       Xml::tags( 'td', null,
+                       Html::rawElement( 'td', null,
                                Html::namespaceSelector( array(
                                        'selected' => $this->opts['namespace'],
                                        'all'      => '',
@@ -499,7 +499,7 @@ class SpecialContributions extends SpecialPage {
                        $deletedOnlyCheck = '';
                }
 
-               $extraOptions = Xml::tags( 'td', array( 'colspan' => 2 ),
+               $extraOptions = Html::rawElement( 'td', array( 'colspan' => 2 ),
                        $deletedOnlyCheck .
                        Html::rawElement( 'span', array( 'style' => 'white-space: nowrap' ),
                                Xml::checkLabel(
@@ -510,7 +510,7 @@ class SpecialContributions extends SpecialPage {
                                        array( 'class' => 'mw-input' )
                                )
                        )
-               ) ;
+               );
 
                $dateSelectionAndSubmit = Xml::tags( 'td', array( 'colspan' => 2 ),
                        Xml::dateMenu(
@@ -525,23 +525,13 @@ class SpecialContributions extends SpecialPage {
 
                $form .=
                        Xml::fieldset( $this->msg( 'sp-contributions-search' )->text() ) .
-                       Xml::openElement( 'table', array( 'class' => 'mw-contributions-table' ) ) .
-                               Xml::openElement( 'tr' ) .
-                                       $targetSelection .
-                               Xml::closeElement( 'tr' ) .
-                               Xml::openElement( 'tr' ) .
-                                       $namespaceSelection .
-                               Xml::closeElement( 'tr' ) .
-                               Xml::openElement( 'tr' ) .
-                                       $filterSelection .
-                               Xml::closeElement( 'tr' ) .
-                               Xml::openElement( 'tr' ) .
-                                       $extraOptions .
-                               Xml::closeElement( 'tr' ) .
-                               Xml::openElement( 'tr' ) .
-                                       $dateSelectionAndSubmit .
-                               Xml::closeElement( 'tr' ) .
-                       Xml::closeElement( 'table' );
+                       Html::rawElement( 'table', array( 'class' => 'mw-contributions-table' ), "\n" .
+                               Html::rawElement( 'tr', array(), $targetSelection ) . "\n" .
+                               Html::rawElement( 'tr', array(), $namespaceSelection ) . "\n" .
+                               Html::rawElement( 'tr', array(), $filterSelection ) . "\n" .
+                               Html::rawElement( 'tr', array(), $extraOptions ) . "\n" .
+                               Html::rawElement( 'tr', array(), $dateSelectionAndSubmit ) . "\n"
+                       );
 
                $explain = $this->msg( 'sp-contributions-explain' );
                if ( $explain->exists() ) {
index 11d7f4d..8b44828 100644 (file)
@@ -36,7 +36,9 @@ class UsersPager extends AlphabeticPager {
 
        /**
         * @param $context IContextSource
-        * @param $par null|array
+        * @param $par array (Default null)
+        * @param $including boolean Whether this page is being transcluded in
+        * another page
         */
        function __construct( IContextSource $context = null, $par = null, $including = null ) {
                if ( $context ) {
index bd7b41f..08d1517 100644 (file)
@@ -325,12 +325,13 @@ class SpecialNewpages extends IncludableSpecialPage {
                        $query['rcid'] = $result->rc_id;
                }
 
-               $plink = Linker::linkKnown(
+               // Linker::linkKnown() uses 'known' and 'noclasses' options. This breaks the colouration for stubs.
+               $plink = Linker::link(
                        $title,
                        null,
                        array( 'class' => 'mw-newpages-pagename' ),
                        $query,
-                       array( 'known' ) // Set explicitly to avoid the default of 'known','noclasses'. This breaks the colouration for stubs
+                       array( 'known' )
                );
                $histLink = Linker::linkKnown(
                        $title,
index 862736d..40ebc2f 100644 (file)
@@ -37,7 +37,6 @@ class SpecialRecentchangeslinked extends SpecialRecentChanges {
                $opts = parent::getDefaultOptions();
                $opts->add( 'target', '' );
                $opts->add( 'showlinkedto', false );
-               $opts->add( 'tagfilter', '' );
                return $opts;
        }
 
index 560acde..733c686 100644 (file)
@@ -152,7 +152,7 @@ class UploadStash {
        /**
         * Getter for file metadata.
         *
-        * @param key String: key under which file information is stored
+        * @param $key String: key under which file information is stored
         * @return Array
         */
        public function getMetadata ( $key ) {
@@ -163,7 +163,7 @@ class UploadStash {
        /**
         * Getter for fileProps
         *
-        * @param key String: key under which file information is stored
+        * @param $key String: key under which file information is stored
         * @return Array
         */
        public function getFileProps ( $key ) {
index 522d80a..0baa8ed 100644 (file)
@@ -3336,7 +3336,7 @@ $1',
 'pageinfo-watchers' => 'عدد المراقبين',
 'pageinfo-redirects-name' => 'التحويلات إلى هذه الصفحة',
 'pageinfo-subpages-name' => 'الصفحات الفرعية لهذه الصفحة',
-'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|إعادة توجيه|إعادة توجيهات}}; $3 {{PLURAL:$3|غير إعادة توجه|غير إعادة توجيهات}})',
+'pageinfo-subpages-value' => '$1 ({{PLURAL:$2|لا تحويلات|تحويلة واحدة|تحويلتان|$2 تحويلات|$2 تحويلة}}؛ $3 {{PLURAL:$3|من غير  التحويلات}})',
 'pageinfo-firstuser' => 'منشئ الصفحة',
 'pageinfo-firsttime' => 'تاريخ إنشاء الصفحة',
 'pageinfo-lastuser' => 'آخر محرر',
@@ -3346,8 +3346,8 @@ $1',
 'pageinfo-recent-edits' => 'عدد التعديلات الأخيرة (خلال {{PLURAL:$1||يوم واحد|يومين|$1 أيام|$1 يوماً|$1 يوم}})',
 'pageinfo-recent-authors' => 'عدد المؤلفين المختلفين الأخيرين',
 'pageinfo-magic-words' => '{{PLURAL:$1|لا كلمات سحرية|الكلمة|الكلمات}} السحرية ($1)',
-'pageinfo-hidden-categories' => '{{PLURAL:$1|لا تصنيفات مخفية|التصنيف المخفي|التصنيفان المخفيان|التصانيف المخفية ($1)}}',
-'pageinfo-templates' => '{{PLURAL:$1|لا قوالب مضمنة|القالب المضمنن|القالبان المضمنان|القوالب المضمنة ($1)}}',
+'pageinfo-hidden-categories' => '{{PLURAL:$1|لا تصنيفات مخفية|التصنيف المخفي|التصنيفان المخفيان|التصنيفات المخفية ($1)}}',
+'pageinfo-templates' => '{{PLURAL:$1|لا قوالب مضمنة|القالب المضمن|القالبان المضمنان|القوالب المضمنة ($1)}}',
 'pageinfo-toolboxlink' => 'معلومات عن هذه الصفحة',
 'pageinfo-redirectsto' => 'تحويلة إلى',
 'pageinfo-redirectsto-info' => 'معلومات',
index 7980208..c5144dd 100644 (file)
@@ -185,14 +185,14 @@ $messages = array(
 'category_header' => 'ܦܐܬܬ̈ܐ ܒܣܕܪܐ ܕ "$1"',
 'subcategories' => 'ܣܕܪ̈ܐ ܦܪ̈ܥܝܐ',
 'category-media-header' => 'ܡܝܕܝܐ ܒܣܕܪܐ ܕ "$1"',
-'category-empty' => "''ܗܢܐ ܣܕܪܐ ܗܫܐ ܠܝܬ ܒܗ ܦܐܬܬ̈ܐ ܐܘ ܡܝܕܝܐ.''",
+'category-empty' => "''ܗܢܐ ܣܕܪܐ ܗܫܐܝܬ ܠܝܬ ܒܗ ܦܐܬܬ̈ܐ ܐܘ ܡܝܕܝܐ.''",
 'hidden-categories' => '{{PLURAL:$1|ܣܕܪܐ ܛܘܫܝܐ|ܣܕܪ̈ܐ ܛܘܫܝܐ}}',
 'hidden-category-category' => 'ܣܕܪ̈ܐ ܛܘܫܝ̈ܐ',
 'category-subcat-count' => '{{PLURAL:$2|ܣܕܪܐ ܗܢܐ ܐܝܬ ܒܗ ܗܢܐ ܣܕܪܐ ܦܪܥܝܐ ܕܐܬܐ ܒܠܚܘܕ.|ܣܕܪܐ ܗܢܐ ܐܝܬ ܒܗ {{PLURAL:$1|ܣܕܪܐ ܦܪܥܝܐ ܕܐܬܐ|$1 ܣܕܪ̈ܐ ܦܪ̈ܥܝܐ ܕܐܬܝܢ}}، ܡܢ ܣܘܝܟܐ ܕ $2.}}',
 'category-subcat-count-limited' => 'ܣܕܪܐ ܗܢܐ ܐܝܬ ܒܗ {{PLURAL:$1|ܣܕܪܐ ܦܪܥܝܐ ܗܢܐ|$1 ܣܕܪ̈ܐ ܦܪ̈ܥܝܐ ܗܠܝܢ}}.',
-'category-article-count' => '{{PLURAL:$2|ܣܕܪܐ ܗܢܐ ܐܝܬ ܒܗ ܦܐܬܐ ܗܕܐ ܒܠܚܘܕ.|ܐܝܬ {{PLURAL:$1|ܦܐܬܐ|$1 ܦܐܬܬ̈ܐ}} ܒܣܕܪܐ ܗܢܐ، ܡܢ ܣܘܝܟܐ ܕ$2.}}',
+'category-article-count' => '{{PLURAL:$2|ܣܕܪܐ ܗܢܐ ܐܝܬ ܒܗ ܦܐܬܐ ܗܕܐ ܒܠܚܘܕ.|ܐܝܬ {{PLURAL:$1|ܦܐܬܐ ܕܐܬܝܐ|$1 ܦܐܬܬ̈ܐ ܕܐܬܝܢ}} ܒܣܕܪܐ ܗܢܐ, ܡܢ ܣܘܝܟܐ ܕ $2.}}',
 'category-article-count-limited' => '{{PLURAL:$1|ܦܐܬܐ ܗܕܐ|$1 ܦܐܬܬ̈ܐ ܗܠܝܢ}} ܒܣܕܪܐ ܗܢܐ.',
-'category-file-count' => '{{PLURAL:$2|Ü£Ü\95ܪÜ\90 Ü\97Ü¢Ü\90 Ü\90Ü\9dܬ Ü\92Ü\97 Ü Ü¦Ü¦Ü\90 Ü\97Ü¢Ü\90 Ü\92Ü Ü\9aÜ\98Ü\95.|{{PLURAL:$1|ܠܦܦÜ\90 Ü\95Ü\90ܬÜ\90 Ü\90Ü\9dܬÜ\98Ü\97Ü\9d|$1 Ü Ü¦Ü¦Ì\88Ü\90 Ü\95Ü\90ܬÜ\9dÜ¢ Ü\90Ü\9dܬÜ\9dÜ\97Ü\98Ü¢}} Ü\92Ü£Ü\95ܪÜ\90 Ü\97Ü¢Ü\90Ø\8c Ü¡Ü¢ Ü£Ü\98Ü\9dÜ\9fÜ\90 Ü\95$2 Ü\9fܠܢÜ\90Ü\9dܬ.}}',
+'category-file-count' => '{{PLURAL:$2|Ü£Ü\95ܪÜ\90 Ü\97Ü¢Ü\90 Ü\90Ü\9dܬ Ü\92Ü\97 Ü Ü¦Ü¦Ü\90 Ü\95Ü\90ܬÜ\90 Ü\92Ü Ü\9aÜ\98Ü\95.|{{PLURAL:$1|ܠܦܦÜ\90 Ü\95Ü\90ܬÜ\90 Ü\90Ü\9dܬÜ\98Ü\97Ü\9d|$1 Ü Ü¦Ü¦Ì\88Ü\90 Ü\95Ü\90ܬÜ\9dÜ¢ Ü\90Ü\9dܬÜ\9dÜ\97Ü\98Ü¢}} Ü\92Ü£Ü\95ܪÜ\90 Ü\97Ü¢Ü\90Ø\8c Ü¡Ü¢ Ü£Ü\98Ü\9dÜ\9fÜ\90 Ü\95 $2.}}',
 'category-file-count-limited' => 'ܐܝܬ {{PLURAL:$1|ܠܦܦܐ ܕܐܬܐ|$1 ܠܦܦ̈ܐ ܕܐܬܝܢ}} ܒܣܕܪܐ ܗܫܝܐ.',
 'listingcontinuesabbrev' => '(ܫܘܠܡܐ)',
 
@@ -624,13 +624,13 @@ $1',
 'searchprofile-images' => 'ܡܝܕ̈ܝܐ ܣܓܝܐ̈ܐ (Multimedia)',
 'searchprofile-everything' => 'ܟܠ ܡܕܡ',
 'searchprofile-advanced' => 'ܡܬܩܕܡܢܐ',
-'searchprofile-articles-tooltip' => 'ܒܨܝ ܒ $1',
+'searchprofile-articles-tooltip' => 'ܒܨܝ ܒܓܘ $1',
 'searchprofile-project-tooltip' => 'ܒܨܝ ܒ $1',
 'searchprofile-images-tooltip' => 'ܒܨܝ ܥܠ ܠܦܦ̈ܐ',
 'search-result-size' => '$1 ({{PLURAL:$2|1 ܡܠܬܐ|$2 ܡܠ̈ܐ}})',
 'search-redirect' => '(ܨܝܒ $1)',
 'search-section' => '(ܡܢܬܐ $1)',
-'search-suggest' => 'Ü£Ü\9fÜ  ܐܢܬ: $1',
+'search-suggest' => 'Ü\90ܪÜ\90 Ü£Ü\9fÜ  Ü\97Ü\98Ü\90 ܐܢܬ: $1',
 'search-interwiki-caption' => 'ܬܪ̈ܡܝܬܐ ܐܚܘܬ̈ܐ',
 'search-interwiki-default' => 'ܦܠܛ̈ܐ ܕ $1:',
 'search-interwiki-more' => '(ܝܬܝܪ)',
@@ -921,7 +921,7 @@ $1',
 'filehist-dimensions' => 'ܩܝܡ̈ܐ',
 'filehist-filesize' => 'ܥܓܪܐ ܕܠܦܦܐ',
 'filehist-comment' => 'ܥܘܩܒܐ',
-'imagelinks' => 'Ü\9aÜ«ܚܬܐ ܕܠܦܦܐ',
+'imagelinks' => 'ܡܦܠܚܬܐ ܕܠܦܦܐ',
 'linkstoimage' => '{{PLURAL:$1|ܦܐܬܐ ܗܕܐ ܐܣܪ|$1 ܦܐܬܬ̈ܐ ܗܠܝܢ ܐܣܪܝܢ}} ܥܡ ܗܢܐ ܠܦܦܐ:',
 'nolinkstoimage' => 'ܠܝܬ ܦܐܬܐ ܕܐܣܪ ܠܗܢܐ ܠܦܦܐ.',
 'uploadnewversion-linktext' => 'ܐܣܩ ܨܚܚܐ ܚܕܬܐ ܡܢ ܗܢܐ ܠܦܦܐ',
@@ -1173,7 +1173,7 @@ $1',
 'watching' => 'ܪܗܝܐ...',
 'unwatching' => 'ܠܐ ܪܗܝܐ...',
 
-'enotif_reset' => 'ܫܘܕܥ ܟܠ ܦܐܬܬ̈ܐ ܐܝܟ ܣܥܝܪ̈ܐ',
+'enotif_reset' => 'Ü«Ü\98Ü\95Ü¥ Ü\9fÜ  Ü¦Ü\90ܬܬÌ\88Ü\90 Ü\90Ü\9dÜ\9f Ü£Ü¥Ü\9dܪÌ\88ܬÜ\90',
 'enotif_newpagetext' => 'ܗܕܐ ܗܝ ܦܐܬܐ ܚܕܬܐ',
 'enotif_impersonal_salutation' => 'ܡܦܠܚܢܐ {{SITENAME}}',
 'changed' => 'ܐܫܬܚܠܦܬ',
@@ -1426,16 +1426,16 @@ Do you want to change the settings?',
 
 # Tooltip help for the actions
 'tooltip-pt-userpage' => 'ܦܐܬܐ ܕܡܦܠܚܢܐ ܕܝܠܟ',
-'tooltip-pt-mytalk' => 'ܦÜ\90ܬÜ\90 Ü\95Ü¡Ü¡Ü Ü\98ܟ',
+'tooltip-pt-mytalk' => 'ܦÜ\90ܬÜ\90 Ü\95Ü¡Ü¡Ü Ü Ü\90 Ü\95Ü\9dÜ ܟ',
 'tooltip-pt-preferences' => 'Your preferences',
-'tooltip-pt-watchlist' => 'Ü¡Ü\9fܬÜ\92Ü¢Ü\98ܬÜ\90 Ü\95ܦÜ\90ܬܬÌ\88Ü\90 Ü\95Ü\92ܪÜ\97Ü\9dܬ ܐܢܬ ܫܘܚܠܦ̈ܐ ܕܬܗܘܐ ܒܗܘܢ',
+'tooltip-pt-watchlist' => 'Ü¡Ü\9fܬÜ\92Ü¢Ü\98ܬÜ\90 Ü\95ܦÜ\90ܬܬÌ\88Ü\90 Ü\95ܬܪÜ\97Ü\9d ܐܢܬ ܫܘܚܠܦ̈ܐ ܕܬܗܘܐ ܒܗܘܢ',
 'tooltip-pt-mycontris' => 'ܡܟܬܒܢܘܬܐ ܕܫܘܬܦܘܝܬ̈ܟ',
 'tooltip-pt-login' => 'ܢܠܒܒ ܠܟ ܕܣܓܠ ܐܢܬ ܥܠܠܐ ܕܝܠܟ، ܐܠܐ ܗܢܐ ܠܐ ܐܝܬܝܗܝ ܐܠܨܝܐ',
 'tooltip-pt-logout' => 'ܦܠܛܐ',
 'tooltip-ca-talk' => 'ܡܡܠܠܐ ܥܠ ܚܒܝܫܬܐ ܕܦܐܬܐ',
-'tooltip-ca-addsection' => 'ܫܪÜ\9d Ü¦Ü£Ü\98Ü©ܐ ܚܕܬܐ',
-'tooltip-ca-viewsource' => 'Ü\97Ü¢Ü\90 Ü¦Ü\90ܬÜ\90 Ü¢Ü\9bܪܬÜ\90 Ü\9dÜ Ü\97.
\90Ü\9dܬ Ü\92Ü\9f Ü¬Ü\9aÜ\99Ü\9d ܡܒܘܥܐ ܕܝܠܗ',
+'tooltip-ca-addsection' => 'ܫܪÜ\9d Ü¡Ü¢Ü¬ܐ ܚܕܬܐ',
+'tooltip-ca-viewsource' => 'Ü\97Ü¢Ü\90 Ü¦Ü\90ܬÜ\90 Ü¢Ü\9bܪܬÜ\90 Ü\90Ü\9dܬÜ\9dÜ\97Ü\9d.
¡Ü¨Ü\90 Ü\90ܢܬ Ü\95ܬÜ\9aÜ\99Ü\90 ܡܒܘܥܐ ܕܝܠܗ',
 'tooltip-ca-protect' => 'ܢܛܘܪ ܗܕܐ ܦܐܬܐ',
 'tooltip-ca-delete' => 'ܫܘܦ ܦܐܬܐ ܗܕܐ',
 'tooltip-ca-move' => 'ܫܢܝ ܦܐܬܐ ܗܕܐ',
@@ -1446,14 +1446,14 @@ Do you want to change the settings?',
 'tooltip-n-mainpage-description' => 'ܬܪܘܩܬܐ ܕܦܐܬܐ ܪܝܫܝܬܐ',
 'tooltip-n-portal' => 'ܚܕܪ ܬܪܡܝܬܐ، ܡܢܐ ܡܫܟܚ ܐܢܬ ܠܥܒܕܐ، ܐܝܟܐ ܬܚܙܝ ܟܠ ܡܐ ܕܣܢܝܩ ܐܢܬ ܠܗ',
 'tooltip-n-recentchanges' => 'ܡܟܬܒܢܘܬܐ ܒܫܘܚܠܦ̈ܐ ܚܕ̈ܬܐ ܒܓܘ ܘܝܩܝ.',
-'tooltip-n-randompage' => 'ܦܬÜ\98Ü\9f Ü¡Ü\93ܠܬÜ\90 ܚܘܝܚܬܐ',
+'tooltip-n-randompage' => 'Ü\90Ü\9bܥܢ Ü¡Ü\93ܠܬÜ\90 Ü\9aÜ\95 ܚܘܝܚܬܐ',
 'tooltip-n-help' => 'ܕܘܟܐ ܠܥܘܕܪܢܐ',
-'tooltip-feed-atom' => 'ܬܪܣÜ\9dܬÜ\90 Ü\95Atom Ü Ü\97Ü¢Ü\90 Ü¦Ü\90ܬܬܐ',
+'tooltip-feed-atom' => 'Ü\9bÜ¥Ü\9dÜ¡Ü\98ܬÜ\90 Ü\95Ü\90Ü\9bÜ\98Ü¡ Ü Ü¦Ü\90ܬܬÜ\90 Ü\97Ü\95ܐ',
 'tooltip-t-contributions' => 'ܡܟܬܒܢܘܬܐ ܒܫܘܬܦ̈ܐ ܕܗܢܐ ܡܦܠܚܢܐ',
 'tooltip-t-emailuser' => 'ܫܕܪ ܐܓܪܬܐ ܠܗܢܐ ܡܦܠܚܢܐ',
 'tooltip-t-upload' => 'ܐܣܩ ܠܦܦ̈ܐ',
 'tooltip-t-specialpages' => 'ܡܟܬܒܢܘܬܐ ܒܟܠ ܦܐܬܬ̈ܐ ܕ̈ܝܠܢܝܬܐ',
-'tooltip-ca-nstab-main' => 'Ü\9aÜ\98Ü\9d Ü¦Ü\90ܬܬÜ\90 Ü\95Ü\9aÜ\92Ì\88Ü\9dܫܬÜ\90',
+'tooltip-ca-nstab-main' => 'ܚܘܝ ܦܐܬܐ ܕܚܒ̈ܝܫܬܐ',
 'tooltip-ca-nstab-user' => 'ܚܘܝ ܦܐܬܐ ܕܡܦܠܚܢܐ',
 'tooltip-ca-nstab-image' => 'ܚܘܝ ܦܐܬܐ ܕܠܦܦܐ',
 'tooltip-ca-nstab-category' => 'ܚܘܝ ܦܐܬܐ ܕܣܕܪܐ',
index 9f91067..63121c2 100644 (file)
@@ -1785,7 +1785,7 @@ Seique quieras camudar la descripción de la so [páxina de descripción de fich
 'shared-repo-from' => 'de $1',
 'shared-repo' => 'un repositoriu compartíu',
 'filepage.css' => "/* El CSS allugáu equí s'incluye na páxina de descripción del ficheru, que tamién s'incluye nes wikis clientes foriates */",
-'upload-disallowed-here' => 'Por desgracia nun pues sobrescribir esta imaxe.',
+'upload-disallowed-here' => 'Nun pues sobrescribir esti ficheru.',
 
 # File reversion
 'filerevert' => 'Revertir $1',
@@ -2901,6 +2901,7 @@ Probablemente tea causao por un enllaz a un sitiu esternu de la llista prieta.',
 
 # Info page
 'pageinfo-title' => 'Información sobro "$1"',
+'pageinfo-not-current' => 'Namái se pue amosar la información pa la revisión actual.',
 'pageinfo-header-basic' => 'Información básica',
 'pageinfo-header-edits' => "Historial d'ediciones",
 'pageinfo-header-restrictions' => 'Proteición de páxina',
@@ -2929,6 +2930,13 @@ Probablemente tea causao por un enllaz a un sitiu esternu de la llista prieta.',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Categoría anubrida|Categoríes anubríes}} ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|Plantía incluída|Plantíes incluíes}} ($1)',
 'pageinfo-toolboxlink' => 'Información de la páxina',
+'pageinfo-redirectsto' => 'Redirixe a',
+'pageinfo-redirectsto-info' => 'información',
+'pageinfo-contentpage' => 'Contada como páxina de conteníu',
+'pageinfo-contentpage-yes' => 'Sí',
+'pageinfo-protect-cascading' => "Les proteiciones s'activen en serie dende equí",
+'pageinfo-protect-cascading-yes' => 'Sí',
+'pageinfo-protect-cascading-from' => "Les proteiciones s'activen en serie dende",
 
 # Skin names
 'skinname-standard' => 'Clásicu',
index 80c8530..687d5cc 100644 (file)
@@ -136,20 +136,20 @@ $messages = array(
 'thu' => 'Кс',
 'fri' => 'Йм',
 'sat' => 'Шб',
-'january' => 'ғинуар (һыуығай)',
-'february' => 'февраль (шаҡай)',
-'march' => 'март (буранай)',
-'april' => 'апрель (алағарай)',
+'january' => 'ғинуар',
+'february' => 'февраль',
+'march' => 'март',
+'april' => 'апрель',
 'may_long' => 'май (һабанай)',
-'june' => 'июнь (һөтай)',
-'july' => 'июль (майай)',
-'august' => 'август (урағай)',
-'september' => 'сентябрь (һарысай)',
-'october' => 'октябрь (ҡарасай)',
-'november' => 'ноябрь (ҡырпағай)',
-'december' => 'декабрь (аҡъюлай)',
-'january-gen' => 'ғинуар (һыуығай)',
-'february-gen' => 'февраль (шаҡай)',
+'june' => 'июнь',
+'july' => 'июль',
+'august' => 'август',
+'september' => 'сентябрь',
+'october' => 'октябрь',
+'november' => 'ноябрь',
+'december' => 'декабрь',
+'january-gen' => 'ғинуар',
+'february-gen' => 'февраль',
 'march-gen' => 'март',
 'april-gen' => 'апрель',
 'may-gen' => 'май',
@@ -158,8 +158,8 @@ $messages = array(
 'august-gen' => 'август',
 'september-gen' => 'сентябрь',
 'october-gen' => 'октябрь',
-'november-gen' => 'ноябрь (ҡырпағай)',
-'december-gen' => 'декабрь (аҡъюлай)',
+'november-gen' => 'ноябрь',
+'december-gen' => 'декабрь',
 'jan' => 'ғин',
 'feb' => 'фев',
 'mar' => 'мар',
index 22cb145..a924935 100644 (file)
@@ -254,7 +254,7 @@ $messages = array(
 'vector-action-protect' => 'Protektaran',
 'vector-action-undelete' => 'Bawion sa pagkapara',
 'vector-action-unprotect' => 'Ribayan an proteksyon',
-'vector-simplesearch-preference' => 'Paganahon an pinapusog na suhestiyon sa paghahanap (Yanong panhanap sana)',
+'vector-simplesearch-preference' => 'Paganahon an pinagyanong panukod sa paghahanap (Pansolong kublit sana)',
 'vector-view-create' => 'Magmukna',
 'vector-view-edit' => 'Liwatón',
 'vector-view-history' => 'Tanawon sa historiya',
@@ -476,8 +476,9 @@ Paki-otroha giraray sa nagkapirang minuto sana.',
 'protectedpagetext' => 'An pahinang ini pigsará tangarig pogolon an paghirá.',
 'viewsourcetext' => 'Pwede mong hilingón asin arógon an ginikanan kan pahinang ini:',
 'viewyourtext' => "Saimong mahihiling asin makokopya an gikanan kan '''saimong mga pinagriliwat''' sa pahinang ini:",
-'protectedinterface' => 'An pahinang ini nagtatao nin interface para sa software, asin sarado tangarig mapondo an pag-abuso.',
-'editinginterface' => "'''Warning:''' Ika nagliliwat kan pahina na ginagamit sa pagtao nin pantahaw-olay na teksto para sa software.
+'protectedinterface' => 'An pahinang ini nagtatao nin panlaog-olay para sa software, asin protektado tangaring malikayan an abuso.
+Sa pagdagdag or pagliwat nin mga dakit-taramon para sa bilog na wiki, gamita tabi an [//translatewiki.net/translatewiki.net], an MediaWiki sa proyektong lokalisasyon.',
+'editinginterface' => "'''Patanid:''' Ika nagliliwat kan pahina na ginagamit sa pagtao nin pantahaw-olay na teksto para sa software.
 An mga pagbabago kaining pahina makaka-apekto sa hitsura kan pantahaw-olay nin paragamit para sa iba man na paragamit.
 Para sa mga pagdadakit-taramon, pakikonsidera man tabi an paggagamit kan [//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net], an MediaWiking lokalisasyon kan proyekto.",
 'sqlhidden' => '(nakatagô an hapót nin SQL)',
@@ -761,8 +762,8 @@ Kun ika sarong dae pa bistadong paragamit asin mati mo na igwang irelebanteng sa
 Ika mapuwedeng [[Special:Search/{{PAGENAME}}|maghanap para sa titulo kan pahinang ini]] sa iba pang mga pahina,
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} maghanap sa magkasurundong mga talaan],
 o [{{fullurl:{{FULLPAGENAME}}|action=edit}} liwaton ining pahina]</span>.',
-'noarticletext-nopermission' => 'Mayo tabi sa presente nin teksto sa pahinang ini.
-Ika mapuwedeng [[Special:Search/{{PAGENAME}}|maghanap para sa titulo kan pahinang ini]] sa iba pang mga pahina,
+'noarticletext-nopermission' => 'Mayong sa presente nin teksto an pahinang ini.
+Ika mapuwedeng [[Special:Search/{{PAGENAME}}|hanapa para kaining titulo kan pahina]] sa iba pang mga pahina,
 o <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} maghanap sa magkasurundong mga talaan]</span>.',
 'missing-revision' => 'An rebisyon #$1 kan pahina pinagngaranan na "{{PAGENAME}}" bakong eksistido.
 
@@ -872,6 +873,15 @@ Ini minapahiwatig tabi na pinagpura na.',
 'edit-already-exists' => 'Dai maggibo an bàgong pahina.
 Igwa na kaini.',
 'defaultmessagetext' => 'Tugmadong mensahe sa teksto',
+'content-failed-to-parse' => 'Nagpalya sa paglunhay an $2 na laman para sa $1 na modelo: $3',
+'invalid-content-data' => 'Imbalidong datos nin laman',
+'content-not-allowed-here' => '"$1" na laman dae pinagtutugutan sa pahina [[$2]]',
+
+# Content models
+'content-model-wikitext' => 'wiki-teksto',
+'content-model-text' => 'yanong-teksto',
+'content-model-javascript' => 'Java-Kurit',
+'content-model-css' => 'CSS',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => "'''Patanid tabi:''' Ining pahina naglalaman nin grabe kadakulon na ekspensibong programang pambaranga sa punksyon nin mga pag-aapod.
@@ -1027,9 +1037,10 @@ Ika mayo tabing pangaputan kaini.',
 'revdelete-concurrent-change' => 'Napasalang pagsasangli kan item petsado $2, $1: An status nagpapahiling na pinagribayan kan ibang tawo habang ikan nagprubar na sanglian ini.
 Paki-tsek tabi sa mga talaan.',
 'revdelete-only-restricted' => 'Napasalang pagtatago kan item petsado $2, $1: Ika dae tabi makakapaglubog kan mga item na mahiling kan mga administrador na mayo kang piniling saro sa iba pang bisibilidad na mga pagpipilian.',
-'revdelete-reason-dropdown' => '*Pirmihang mga rason sa pagpura
+'revdelete-reason-dropdown' => '*Komon na mga rason sa pagpura
 **Paglapas kan Copyright
 **Bakong angay na personal na impormasyon
+**Bakong angay na pangaran nin paragamit
 **Potensiyal na libelosong impormasyon',
 'revdelete-otherreason' => 'Iba pa/kadagdagang rason:',
 'revdelete-reasonotherlist' => 'Ibang rason',
@@ -1225,7 +1236,7 @@ Uya an halaga sa random na pagbuswang na puwede mong magamit: $1',
 'timezoneregion-indian' => 'Indiyang Kadagatan',
 'timezoneregion-pacific' => 'Pasipikong Kadagatan',
 'allowemail' => "Togotan an mga ''e''-surat halî sa ibang mga parágamit",
-'prefs-searchoptions' => 'Pagpipilian sa Paghahanap',
+'prefs-searchoptions' => 'Hanapa',
 'prefs-namespaces' => 'Pangarang mga espasyo',
 'defaultns' => 'Kun laen maghanap sa laog kaining pangarang mga espasyo:',
 'default' => 'pwestong normal',
@@ -1268,6 +1279,7 @@ An saimong e-surat na adres dae ipagbuyagyag kunsoarin na an ibang paragamit mak
 'prefs-signature' => 'Pirma',
 'prefs-dateformat' => 'Pampetsang pormat',
 'prefs-timeoffset' => 'Pan-oras na tapal',
+'prefs-advancedediting' => 'Pinag-abanteng mga Pagpipilian',
 'prefs-advancedrc' => 'Pangenot na mga pagpipilian',
 'prefs-advancedrendering' => 'Abantidong mga pagpipilian',
 'prefs-advancedsearchoptions' => 'Abantidong mga pagpipilian',
@@ -1640,7 +1652,7 @@ Kun an problema yaon pa, pakikontak tabi nin sarong [[Special:ListUsers/sysop|ad
 'backend-fail-internal' => 'Sarong bakong bistadong kasalaan an nangyari sa panampad na sarayan "$1".',
 'backend-fail-contenttype' => 'Dae makapagdeterminar sa tipo kan laog kan sagunson na magsaray sa "$1".',
 'backend-fail-batchsize' => 'An panampad na sarayan pinagtao nin sarong batch kan sagunson sa $1 {{PLURAL:$1|operasyon|mga operasyon}}; an limit $2 {{PLURAL:$2|operasyon|mga operasyon}}.',
-'backend-fail-usable' => 'Dae makakapagsurat nin sagunson $1 sa dahilan na kulang an permiso o nawawara an mga direktoryo/kaaganan.',
+'backend-fail-usable' => 'Dae makakapagbasa o makakapagsurat nin sagunson sa "$1" nin hulita ta kulang an mga permiso o nawawara an mga direktoryo/kaaganan.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'Dae makakasugpon sa datos-sarayan kan dyornal para sa panampad na sarayan "$1".',
@@ -1772,6 +1784,7 @@ Mapuwede gayod na ika magustong liwatong an deskripsyon na yaon sa [$2 sagunsong
 'uploadnewversion-linktext' => 'Magkarga nin bàgong bersyon kaining file',
 'shared-repo-from' => 'gikan sa $1',
 'shared-repo' => 'sarong pinagheras na repositoryo',
+'upload-disallowed-here' => 'Ika dae makakapagpatong sa pagsurat kaining sagunson.',
 
 # File reversion
 'filerevert' => 'Ibalik an $1',
@@ -1880,6 +1893,7 @@ Ini ngunyan minatukdo-liwat pasiring sa [[$2]].',
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|byte|mga byte}}',
 'ncategories' => '$1 {{PLURAL:$1|kategorya|mga kategorya}}',
+'ninterwikis' => '$1 {{PLURAL:$1|an interwiki|mga interwiki}}',
 'nlinks' => '$1 {{PLURAL:$1|takod|mga takod}}',
 'nmembers' => '$1 {{PLURAL:$1|myembro|mga myembro}}',
 'nrevisions' => '$1 {{PLURAL:$1|pagpakarhay|mga pagpakarhay}}',
@@ -1908,6 +1922,7 @@ Ini ngunyan minatukdo-liwat pasiring sa [[$2]].',
 'mostlinkedtemplates' => 'An mga pinakanatakodan na templato',
 'mostcategories' => 'Mga artikulong may pinaka dakol na kategorya',
 'mostimages' => 'An pinakapakisugpunan na mga sagunson',
+'mostinterwikis' => 'Mga pahina na igwang mas kadakol na interwiki',
 'mostrevisions' => 'Mga artikulong may pinakadakol na pagpakarháy',
 'prefixindex' => 'Gabos na mga pahina na igwa nin enotang panigmit',
 'prefixindex-namespace' => 'Gabos na mga pahina na igwa nin enotang panigmit ($1 espasyong ngaran)',
@@ -2055,6 +2070,8 @@ Puwedeng magkakaigwa nin [[{{MediaWiki:Listgrouprights-helppage}}|kadagdagang im
 asin may marhay na ''e''-surat sa saimong [[Special:Preferences|Mga kabôtan]]
 para makapadara nin ''e''-surat sa ibang parágamit.",
 'emailuser' => 'E-koreohan ining paragamit',
+'emailuser-title-target' => 'E-surat kaining {{GENDER:$1|paragamit}}',
+'emailuser-title-notarget' => 'E-surat na paragamit',
 'emailpage' => 'E-suratan an parágamit',
 'emailpagetext' => 'Ika makakagamit kan porma na yaon sa ibaba tanganing magpadara nin e-surat na mensahe sa paragamit na ini.
 An e-surat na adres na saimong ilalaog sa [[Special:Preferences|saimong paragamit kagustuhan]] magluluwas bilang iyo an "Gikan ki" adres kan e-surat, kaya an sinuratan makakapagsimbag direkta mismo saimo.',
@@ -2316,7 +2333,8 @@ binalik an na pagribay o hinalî sa archibo.',
 'undeletedrevisions' => '{{PLURAL:$1|1 rebisyon|$1 mga rebisyon}} ipinagbalik',
 'undeletedrevisions-files' => '{{PLURAL:$1|1 rebisyon|$1 mga rebisyon}} asin {{PLURAL:$2|1 sagunson|$2 mga sagunson}} ipinagbalik',
 'undeletedfiles' => '{{PLURAL:$1|1 sagunson|$1 mga sagunson}} ipinagbalik',
-'cannotundelete' => 'Naprakaso an pagbalik kan pigparâ; pwede ser an binawi an pagparâ kan páhina kan ibang parágamit.',
+'cannotundelete' => 'An dae pagpura nagpalya:
+$1',
 'undeletedpage' => "'''binalik na an $1 '''
 
 Ikonsultar an [[Special:Log/delete|historial nin pagparâ]] para mahiling an lista nin mga kaaaging pagparâ asin pagbalik.",
@@ -2480,17 +2498,28 @@ Hilngon an [[Special:BlockList|listahan kan binarahan]] tanganing repasohon an m
 'blocklogpage' => 'Usip nin pagbagat',
 'blocklog-showlog' => 'Ining paragamit dati nang pinagbarahan.
 An talaan nin pagbara nakahaya sa ibaba bilang reperensiya:',
+'blocklog-showsuppresslog' => 'Ining paragamit pinagkubkob asin dati nang ipinagtago.
+An talaan nin pagpaunlok ipinagtao sa ibaba para hilingan.',
 'blocklogentry' => 'binagat na [[$1]] na may oras nin pagpaso na $2 $3',
-'blocklogtext' => 'Ini an historial kan pagbagat asin pagbawi sa pagbagat nin mga paragamit. An mga enseguidang binagat na direccion nin
-IP dai nakalista digdi. Hilingon an [[Special:BlockList|IP lista nin mga binagat]] para sa lista nin mga nakaandar na mga pagpangalad buda mga pagbagat.',
+'reblock-logentry' => 'pinagliwat an mga panuytoy nin pagkubkob para sa [[$1]] na igwang oras nin pagpaso kan $2 $3',
+'blocklogtext' => 'Ini sarong talaan kan mga aksyon nin paragamit sa pagkukubkob asin dae pagkukubkob.
+Awtomatikong pagkubkob kan IP address dae pinaglilista.
+Hilngon an [[Special:Blocklist|block list]] para sa listahan kan presenteng operasyonal na pagpangalad asin pagkukubkob.',
 'unblocklogentry' => 'binawi an pagbagat $1',
 'block-log-flags-anononly' => 'Mga paragamit na anónimo sana',
 'block-log-flags-nocreate' => "pigpopondohán an paggibo nin ''account'",
 'block-log-flags-noautoblock' => 'pigpopondo an enseguidang pagbagat',
 'block-log-flags-noemail' => 'binagát an e-surat',
+'block-log-flags-angry-autoblock' => 'pinakusog na awto-kubkob pinaandar',
+'block-log-flags-hiddenname' => 'pangaran nin paragamit itinago',
 'range_block_disabled' => 'Pigpopondo an abilidad kan sysop na maggibo nin bagat na hilera.',
 'ipb_expiry_invalid' => 'Dai pwede ini bilang oras kan pagpasó.',
-'ipb_already_blocked' => 'Dating binagat na si "$1"',
+'ipb_expiry_temp' => 'Itinagong pangaran nin paragamit na nagkukubkob dapat na magin permanente.',
+'ipb_hide_invalid' => 'Dae nakayanan na untukon ining panindog; ini gayod nagkaigwa nin kadakulon na mga pagliliwat.',
+'ipb_already_blocked' => 'An "$1" pinagkubkob na',
+'ipb-needreblock' => 'An $1 pinagkubkob na. Gusto mong liwaton an mga panuytoy?',
+'ipb-otherblocks-header' => 'Ibang {{PLURAL:$1|kubkob|mga kubkob',
+'unblock-hideuser' => 'Ika dae makakakubkog kaining paragamit, siring na an saindang paragamit na ngaran itinatago.',
 'ipb_cant_unblock' => 'Error: Dai nahanap an ID nin binagat na $1. Puede ser na dati nang binawi an pagbagat kaini.',
 'ip_range_invalid' => 'Dai pwede ining serye nin IP.',
 'proxyblocker' => 'Parabagát na karibay',
index b0f6a5c..98010ff 100644 (file)
@@ -574,7 +574,7 @@ Consulta: $2',
 'viewyourtext' => "Vostè pot veure i copiar la font de ' ' les modificacions ' ' d'aquesta pàgina:",
 'protectedinterface' => "Aquesta pàgina proporciona el text de la interfície del software d'aquest wiki i està protegida per evitar els abusos.
 Per agregar o canviar les traduccions per a tots els wikis, si us plau fes servir [//translatewiki.net/ translatewiki.net], el projecte de localització de MediaWiki.",
-'editinginterface' => "'''Avís:''' Esteu editant una pàgina que conté cadenes de text per a la interfície d'aquest programari. Tingueu en compte que els canvis que es fan a aquesta pàgina afecten a l'aparença de la interfície d'altres usuaris. Pel que fa a les traduccions, plantegeu-vos utilitzar la [//translatewiki.net/wiki/Main_Page?setlang=ca translatewiki.net], el projecte de traducció de MediaWiki.",
+'editinginterface' => "'''Avís:''' Esteu editant una pàgina que conté cadenes de text per a la interfície d'aquest programari. Tingueu en compte que els canvis que es fan a aquesta pàgina afecten a l'aparença de la interfície d'altres usuaris. Per afegir o modificar traduccions a totes les wikis, plantegeu-vos utilitzar la [//translatewiki.net/ translatewiki.net], el projecte de localització de MediaWiki.",
 'sqlhidden' => '(consulta SQL oculta)',
 'cascadeprotected' => "Aquesta pàgina està protegida i no es pot modificar perquè està inclosa en {{PLURAL:$1|la següent pàgina, que té|les següents pàgines, que tenen}} activada l'opció de «protecció en cascada»:
 $2",
@@ -853,11 +853,11 @@ Detalls es poden trobar en el [{{fullurl: {{# especial: registre}} / delete|page
 'userpage-userdoesnotexist-view' => 'El compte d\'usuari "$1" no està registrat.',
 'blocked-notice-logextract' => "En aquests moments aquest compte d'usuari es troba blocat.
 Per més detalls, la darrera entrada del registre es mostra a continuació:",
-'clearyourcache' => "'''Nota:''' després de guardar possiblement necessites refrescar el teu cache per poder veure els canvis.
-* '''Firefox / Safari:''' pressiona ''Shift'' mentre cliques el botó ''Actualitzar'', o pressiona ''Ctrl+F5'' o ''Ctrl+R'' (''⌘+R'' a Mac)
-* '''Google Chrome:''' pressiona ''Ctrl+Shift+R'' (''⌘+Shift+R'' a Mac)
-* '''Internet Explorer:''' pressiona la tecla ''Ctrl'' mentre cliques a ''Actualitzar'' o pressiona ''Ctrl+F5''
-* '''Opera:''' buida la memòria cau (cache) ''Eines → Preferències''",
+'clearyourcache' => "'''Nota:''' Després de desar, possiblement necessiteu refrescar la memòria cau del vostre navegador per a veure'n els canvis.
+* '''Firefox / Safari:''' Premeu ''Shift'' mentre cliqueu el botó ''Actualitzar'', o pressioneu ''Ctrl+F5'' o ''Ctrl+R'' (''⌘+R'' a Mac)
+* '''Google Chrome:''' Premeu ''Ctrl+Shift+R'' (''⌘+Shift+R'' a Mac)
+* '''Internet Explorer:''' Premeu la tecla ''Ctrl'' mentre cliqueu a ''Actualitzar'' o pressioneu ''Ctrl+F5''
+* '''Opera:''' Netegeu la memòria cau ''Eines → Preferències''",
 'usercssyoucanpreview' => "'''Consell:''' Utilitzeu el botó \"{{int:showpreview}}\" per provar el vostre nou CSS abans de desar-lo.",
 'userjsyoucanpreview' => "'''Consell:''' Utilitzeu el botó \"{{int:showpreview}}\" per provar el vostre nou JavaScript abans de desar-lo.",
 'usercsspreview' => "'''Recordeu que esteu previsualitzant el vostre CSS d'usuari.'''
@@ -953,6 +953,14 @@ Sembla haver estat esborrada.",
 'edit-already-exists' => "No s'ha pogut crear una pàgina.
 Ja existeix.",
 'defaultmessagetext' => 'Missatge per defecte',
+'content-failed-to-parse' => "Ha fallat l'anàlisi del contingut de $2 per al model $1: $3",
+'invalid-content-data' => 'Dades de contingut no vàlides',
+'content-not-allowed-here' => 'No és permés el contingut "$1" a la pàgina [[$2]]',
+
+# Content models
+'content-model-text' => 'text net',
+'content-model-javascript' => 'JavaScript',
+'content-model-css' => 'CSS',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => "Atenció: Aquesta pàgina conté massa crides a funcions parserfunction complexes.
@@ -1839,6 +1847,7 @@ Potser voleu modificar-ne la descripció en la seva [$2 pàgina de descripció].
 'uploadnewversion-linktext' => "Carrega una nova versió d'aquest fitxer",
 'shared-repo-from' => 'des de $1',
 'shared-repo' => 'un repositori compartit',
+'upload-disallowed-here' => 'No pot sobreescriure aquest fitxer.',
 
 # File reversion
 'filerevert' => 'Reverteix $1',
@@ -1973,6 +1982,7 @@ Les entrades <del>ratllades</del> s\'han resolt.',
 'mostlinkedtemplates' => 'Plantilles més usades',
 'mostcategories' => 'Pàgines amb més categories',
 'mostimages' => 'Fitxers més enllaçats',
+'mostinterwikis' => 'Pàgines amb més interwikis',
 'mostrevisions' => 'Pàgines més modificades',
 'prefixindex' => 'Totes les pàgines per prefix',
 'prefixindex-namespace' => 'Totes les pàgines amb prefix (espai de noms $1)',
@@ -2923,9 +2933,16 @@ Això deu ser degut per un enllaç a un lloc extern inclòs a la llista negra.',
 
 # Info page
 'pageinfo-title' => 'Informació de «$1»',
+'pageinfo-not-current' => 'Només es pot visualitzar la informació per a la revisió actual.',
 'pageinfo-header-basic' => 'Informació bàsica',
 'pageinfo-header-edits' => "Historial d'edicions",
 'pageinfo-header-restrictions' => 'Protecció de pàgina',
+'pageinfo-header-properties' => 'Propietats de la pàgina',
+'pageinfo-display-title' => 'Títol mostrat',
+'pageinfo-default-sort' => "Clau d'ordenació predeterminada",
+'pageinfo-length' => 'Mida de la pàgina (en bytes)',
+'pageinfo-article-id' => 'ID de la pàgina',
+'pageinfo-robot-policy' => 'Estat del motor de cerca',
 'pageinfo-views' => 'Número de visites',
 'pageinfo-watchers' => "Número d'usuaris que vigilen la pàgina",
 'pageinfo-firstuser' => 'Creador de la pàgina',
@@ -2934,6 +2951,9 @@ Això deu ser degut per un enllaç a un lloc extern inclòs a la llista negra.',
 'pageinfo-lasttime' => "Data de l'última edició",
 'pageinfo-edits' => "Número total d'edicions",
 'pageinfo-authors' => "Número total d'autors diferents",
+'pageinfo-toolboxlink' => 'Informació de la pàgina',
+'pageinfo-contentpage-yes' => 'Sí',
+'pageinfo-protect-cascading-yes' => 'Sí',
 
 # Skin names
 'skinname-standard' => 'Clàssic',
index 5c5ebf2..93ab38b 100644 (file)
@@ -273,7 +273,7 @@ $messages = array(
 'vector-action-protect' => 'Diogelu',
 'vector-action-undelete' => 'Adfer',
 'vector-action-unprotect' => 'Newid y diogelwch',
-'vector-simplesearch-preference' => 'Galluogi awgrymiadau chwilio uwch (gwedd Vector yn unig)',
+'vector-simplesearch-preference' => 'Galluogi bar chwilio syml (gwedd Vector yn unig)',
 'vector-view-create' => 'Dechrau',
 'vector-view-edit' => 'Golygu',
 'vector-view-history' => 'Gweld yr hanes',
@@ -760,8 +760,8 @@ Os daethoch yma ar ddamwain, cliciwch botwm '''n&ocirc;l''' y porwr.",
 'anontalkpagetext' => "----''Dyma dudalen sgwrs ar gyfer defnyddiwr anhysbys sydd heb greu cyfrif eto, neu nad yw'n ei ddefnyddio. Felly mae'n rhaid inni ddefnyddio'r cyfeiriad IP i'w (h)adnabod. Mae cyfeiriadau IP yn gallu cael eu rhannu rhwng nifer o ddefnyddwyr. Os ydych chi'n ddefnyddiwr anhysbys ac yn teimlo'ch bod wedi derbyn sylwadau amherthnasol, [[Special:UserLogin/signup|crëwch gyfrif]] neu [[Special:UserLogin|mewngofnodwch]] i osgoi cael eich drysu gyda defnyddwyr anhysbys eraill o hyn ymlaen.''",
 'noarticletext' => "Mae'r dudalen hon yn wag ar hyn o bryd.
 Gallwch [[Special:Search/{{PAGENAME}}|chwilio am y teitl hwn]] ar dudalennau eraill, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} chwilio drwy'r logiau perthnasol], neu [{{fullurl:{{FULLPAGENAME}}|action=edit}} golygu'r dudalen]</span>.",
-'noarticletext-nopermission' => 'Mae\'r dudalen hon yn wag ar hyn o bryd.
-Gallwch [[Special:Search/{{PAGENAME}}|chwilio am y teitl hwn]] ar dudalennau eraill, neu gallwch <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} chwilio drwy\'r logiau perthnasol]</span>.',
+'noarticletext-nopermission' => "Mae'r dudalen hon yn wag ar hyn o bryd.
+Gallwch [[Special:Search/{{PAGENAME}}|chwilio am y teitl hwn]] ar dudalennau eraill, neu gallwch <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} chwilio drwy'r logiau perthnasol]</span>, ond nid yw'r gallu gennych i ddechrau'r dudalen o'r dechrau cyntaf.",
 'missing-revision' => 'Nid yw\'r diwygiad #$1 o\'r dudalen "{{PAGENAME}}" ar gael.
 
 Fel arfer, fe ddigwydd hyn wrth ddilyn hen gyswllt i dudalen sydd wedi ei dileu.
index 30e9a32..079a864 100644 (file)
@@ -443,7 +443,7 @@ $messages = array(
 'article' => 'Wesiqe',
 'newwindow' => '(zerreyê pençereyê newey de beno a)',
 'cancel' => 'Bıtexelne',
-'moredotdotdot' => 'Vêşêri...',
+'moredotdotdot' => 'Vêşi...',
 'mypage' => 'Pela mı',
 'mytalk' => 'Werênayışê mı',
 'anontalk' => 'Pela werênayışê nê IPy',
@@ -463,7 +463,7 @@ $messages = array(
 # Vector skin
 'vector-action-addsection' => 'Mesel Vırazê',
 'vector-action-delete' => 'Besterne',
-'vector-action-move' => 'Wegirê',
+'vector-action-move' => 'Bere',
 'vector-action-protect' => 'Bıpawe',
 'vector-action-undelete' => 'Esterıtışi peyser bıgê',
 'vector-action-unprotect' => 'Starkerdışi bıvurne',
@@ -488,8 +488,8 @@ $messages = array(
 'history' => 'Verora perer',
 'history_short' => 'Vurnayışê verêni',
 'updatedmarker' => 'cıkewtena mına peyêne ra dıme biyo rocane',
-'printableversion' => 'Bınusnayen versiyon',
-'permalink' => 'Gıreyo manayen',
+'printableversion' => 'Asayışê çapkerdışi',
+'permalink' => 'Gıreyo jûqere',
 'print' => 'Çap ke',
 'view' => 'Bıvin',
 'edit' => 'Bıvurnên',
@@ -512,7 +512,7 @@ $messages = array(
 'personaltools' => 'Haletê şexsi',
 'postcomment' => 'Qısımo newe',
 'articlepage' => 'Pela zerreki bıvêne',
-'talk' => 'Behse',
+'talk' => 'Werênayış',
 'views' => 'Asayışi',
 'toolbox' => 'Haceti',
 'userpage' => 'Pela karberi bıvêne',
@@ -902,7 +902,7 @@ Parola vêrdiye: $2',
 
 # Edit pages
 'summary' => 'Xulasa:',
-'subject' => 'Mersel/Sernuşte:',
+'subject' => 'Mewzu/sernuşte:',
 'minoredit' => 'Eno vurnayışo de qıckeko',
 'watchthis' => 'Ena pele seyr ke',
 'savearticle' => 'Pele qeyd ke',
@@ -1449,7 +1449,7 @@ Na game tepeya nêerziyena.',
 'youremail' => 'E-Mail (mecbur niyo) *:',
 'username' => 'Namey karberi:',
 'uid' => 'Namey karberi:',
-'prefs-memberingroups' => 'Ezayê {{PLURAL:$1|grub|grubi}}:',
+'prefs-memberingroups' => 'Ezayê {{PLURAL:$1|grube|gruban}}:',
 'prefs-memberingroups-type' => '$1',
 'prefs-registration' => 'Wextê qeydbiyayışi',
 'prefs-registration-date-time' => '$1',
@@ -1488,7 +1488,7 @@ Kaberê bini ke şıma de kewti irtıbat, adresa e-postey şıma eşkera nêbena
 'prefs-displayrc' => 'Tercihan bımocne',
 'prefs-displaysearchoptions' => 'Weçinayışê mocnayışi',
 'prefs-displaywatchlist' => 'Weçinayışê mocnayışi',
-'prefs-diffs' => 'Diffs',
+'prefs-diffs' => 'Ferqi',
 
 # User preference: e-mail validation using jQuery
 'email-address-validity-valid' => 'e-posta adresi raştayo',
@@ -1502,7 +1502,7 @@ Kaberê bini ke şıma de kewti irtıbat, adresa e-postey şıma eşkera nêbena
 'editinguser' => "'''[[User:$1|$1]]''' keno weziyetê $2'i bıvurno",
 'userrights-editusergroup' => 'Grubanê karberi/karbere sero bıgureye (bıxebetiye)',
 'saveusergroups' => 'Grubanê karberi qeyd bıke',
-'userrights-groupsmember' => 'Ezaê / Ezaya:',
+'userrights-groupsmember' => 'Eza:',
 'userrights-groupsmember-auto' => 'Ezao daxıl/ezaa daxıle ê:',
 'userrights-groups-help' => 'şıma şenê grubanê nê karberi/na karbere, oyo/aya ke tede, bıvurnê:
 * qutiya ke nışankerdiya, mocnena ke karber/e na grube dero/dera.
@@ -1518,7 +1518,7 @@ Kaberê bini ke şıma de kewti irtıbat, adresa e-postey şıma eşkera nêbena
 'userrights-irreversible-marker' => '$1*',
 
 # Groups
-'group' => 'Grup:',
+'group' => 'Grube:',
 'group-user' => 'Karberi',
 'group-autoconfirmed' => 'Karberê ke xob xo biyê araşt',
 'group-bot' => 'Boti',
@@ -1539,7 +1539,7 @@ Kaberê bini ke şıma de kewti irtıbat, adresa e-postey şıma eşkera nêbena
 'grouppage-bot' => '{{ns:project}}:Boti',
 'grouppage-sysop' => '{{ns:project}}:İdarekeri',
 'grouppage-bureaucrat' => '{{ns:project}}:Burokrati',
-'grouppage-suppress' => '{{ns:project}}:Kontrol',
+'grouppage-suppress' => '{{ns:project}}:Qontrol',
 
 # Rights
 'right-read' => 'Pelan bıwanê',
@@ -1570,7 +1570,7 @@ Kaberê bini ke şıma de kewti irtıbat, adresa e-postey şıma eşkera nêbena
 'right-deleterevision' => 'Vurnayışê xısusiyê ke ê pelanê, inan bestere ya zi peyser bia',
 'right-deletedhistory' => 'Qeydanê tarixanê esterıteyan de qayt ke, bê nuştey inan',
 'right-deletedtext' => 'Mabênê newede vurnayışanê esterıtiyan de qaytê nuştey esterıtey u vurnayışan ke',
-'right-browsearchive' => 'Bıgeyre pelanê eserıtiyan',
+'right-browsearchive' => 'Pelanê esterıteyan bıgeyre',
 'right-undelete' => 'Jû pela esterıtiye peyser bia',
 'right-suppressrevision' => 'İdarekeran ra dızdeni/miyanki, newede vurnayışan de qayt ke u newede vıraze',
 'right-suppressionlog' => 'Rocekanê xasan bıvêne',
@@ -1579,7 +1579,7 @@ Kaberê bini ke şıma de kewti irtıbat, adresa e-postey şıma eşkera nêbena
 'right-hideuser' => 'Yew namey karberi  şari ra dızdeni/miyanki bloke bıke',
 'right-ipblock-exempt' => 'Blokanê IPi, oto-blokan u blokanê menzıli ra ravêre',
 'right-proxyunbannable' => 'Blokanê otomatikiê proksiyan ra ravêre',
-'right-unblockself' => 'Inan a bike',
+'right-unblockself' => 'İnan ake',
 'right-protect' => 'Sewiyanê pawıtışi (mıhafezey) bıvurne u pelanê kılitbiyaiyan sero bıgureye.',
 'right-editprotected' => 'Pelanê pawıtiyan sero bıgureye (bê pawıtena kaskadi (game be game))',
 'right-editinterface' => 'Interfaceê karberi sero bıgureye',
@@ -1595,7 +1595,7 @@ Kaberê bini ke şıma de kewti irtıbat, adresa e-postey şıma eşkera nêbena
 'right-autopatrol' => 'Vurnayîşanê xo otomatik nîşan bike ke patrol biyê',
 'right-patrolmarks' => 'Vurnayîşanê peniyî nîşan patrol biyê bivîne',
 'right-unwatchedpages' => 'Yew listeyê pelanê seyrnibiye bivîne',
-'right-mergehistory' => 'Tarixê pelanê yew bike',
+'right-mergehistory' => 'Tarixê pelan yew ke',
 'right-userrights' => 'Heqanê karberi pêro bıvurne',
 'right-userrights-interwiki' => 'Heqqa karberanê ke ho wîkîyo binî de ey bivurne',
 'right-siteadmin' => 'Database kilit bike u a bike',
@@ -1621,7 +1621,7 @@ Kaberê bini ke şıma de kewti irtıbat, adresa e-postey şıma eşkera nêbena
 'action-move-subpages' => 'ena pele, u pelanê daê bınênan bere',
 'action-move-rootuserpages' => 'pelanê karberiyê bıngeyan bere',
 'action-movefile' => 'ena dosya bere',
-'action-upload' => 'ena dosya bar bike',
+'action-upload' => 'ena dosya bar ke',
 'action-reupload' => 'dosyayê ke database de esto ser ey binuse',
 'action-reupload-shared' => 'dosyayê ki ho embarê medyayî de esto ser ay binusne',
 'action-upload_by_url' => 'Ena dosya yew URL ra bar bike',
@@ -1686,9 +1686,9 @@ Kaberê bini ke şıma de kewti irtıbat, adresa e-postey şıma eşkera nêbena
 'rc-old-title' => '"$1"i orcinalê cı vıraşt',
 
 # Recent changes linked
-'recentchangeslinked' => 'Elekeyın vurnayışi',
-'recentchangeslinked-feed' => 'Elekeyın vurnayışi',
-'recentchangeslinked-toolbox' => 'Elekeyın vurnayışi',
+'recentchangeslinked' => 'Vurnayışê eleqeyıni',
+'recentchangeslinked-feed' => 'Vurnayışê eleqeyıni',
+'recentchangeslinked-toolbox' => 'Vurnayışê eleqeyıni',
 'recentchangeslinked-title' => 'vurnayışan ser "$1"',
 'recentchangeslinked-noresult' => 'Pelanê ke link biye ey vurnayîşî çino.',
 'recentchangeslinked-summary' => "Lista cêrêne, pela bêlikerdiye rê (ya zi karberanê kategoriya bêlikerdiye rê) pelanê gırêdaoğan de lista de vurnayışê peyênana.
@@ -1726,7 +1726,7 @@ wexta şima qayîl e yew peli re dosya bierzî, formanê cêrinan ra yewi bişux
 'filedesc' => 'Xulasa',
 'fileuploadsummary' => 'Xulasa:',
 'filereuploadsummary' => 'Vurnayîşê dosyayî:',
-'filestatus' => 'Weziyetê heqê telifiye:',
+'filestatus' => 'Weziyetê heqa telifi:',
 'filesource' => 'Çıme:',
 'uploadedfiles' => 'Dosyayê ke bar biye',
 'ignorewarning' => 'Îkazi kebul meke u dosya reyna bar bike',
@@ -1826,7 +1826,7 @@ PICT # misc.
 
 'upload-proto-error' => 'Porotokol raşt ni yo.',
 'upload-proto-error-text' => 'Bar kerdişê durî gani  URLî estbiye ke pe <code>http://</code> ya zi <code>ftp://</code> başli beno.',
-'upload-file-error' => 'Ğeletê dahilî',
+'upload-file-error' => 'Xeta daxılkiye',
 'upload-file-error-text' => 'Peşkeşwan de wexta yew dosya vıraziyayene xeta bı.
 kerem kerê [[Special:ListUsers/sysop|serkari]]de irtibat kewe.',
 'upload-misc-error' => 'Ğeletê bar kerdişî nizanyeno',
@@ -2104,11 +2104,11 @@ gıreyê her satıri de gıreyi; raş motışê yewın u dıyıni esto.
 'nlinks' => '$1 {{PLURAL:$1|link|linkî}}',
 'nmembers' => '$1 {{PLURAL:$1|eza|ezayan}}',
 'nrevisions' => '$1 {{PLURAL:$1|vurnayış|vurnayışi}}',
-'nviews' => '$1 {{PLURAL:$1|vînayîÅ\9f|vînayîÅ\9fî}}',
-'nimagelinks' => '$1 {{PLURAL:$1|pelayan de|pelayan de}} gurweyêno',
-'ntransclusions' => '$1 {{PLURAL:$1|pelayan de|pelayan de}} gurweyêno',
-'specialpage-empty' => 'Ser ena report netice çini yo.',
-'lonelypages' => 'Peleyê ke cı rê gıre nêdeyayo',
+'nviews' => '$1 {{PLURAL:$1|vênayıÅ\9f|vênayıÅ\9fi}}',
+'nimagelinks' => '$1 {{PLURAL:$1|pele de|pelan de}} gureyeno',
+'ntransclusions' => '$1 {{PLURAL:$1|pele de|pelan de}} gureyeno',
+'specialpage-empty' => 'Seba na rapore netice çıniyo.',
+'lonelypages' => 'Pelê seyi',
 'lonelypagestext' => 'Ena pelî link nibiyê ya zi pelanê binî {{SITENAME}} de transclude biy.',
 'uncategorizedpages' => 'Pelayanê ke kategorî nibiye',
 'uncategorizedcategories' => 'Kategoriyê ke bê kategorîyê',
@@ -2133,7 +2133,7 @@ gıreyê her satıri de gıreyi; raş motışê yewın u dıyıni esto.
 'mostrevisions' => 'Pelan ke tewr zaf revizyonî biyê.',
 'prefixindex' => 'Veroleya peley pêro',
 'prefixindex-namespace' => 'Peleyê Veroleyıni ($1 cay nami)',
-'shortpages' => 'Peleyê kılmeki',
+'shortpages' => 'Pelê kılmeki',
 'longpages' => 'Peleyê dergeki',
 'deadendpages' => 'pelê ke pelê binan re gırey nêeşto',
 'deadendpagestext' => 'Ena pelan ke {{SITENAME}} de zerrî ey de link çini yo.',
@@ -2151,9 +2151,9 @@ gıreyê her satıri de gıreyi; raş motışê yewın u dıyıni esto.
 'usereditcount' => '$1 {{PLURAL:$1|vurnayîş|vurnayîşî}}',
 'usercreated' => '$2 de $1 {{GENDER:$3|viraziya}}',
 'newpages' => 'Pelê newey',
-'newpages-username' => 'Namey Karberi:',
+'newpages-username' => 'Nameyê karberi:',
 'ancientpages' => 'Wesiqeyê ke vurnayışê ciyê peyeni tewr kehani',
-'move' => 'Wegirê',
+'move' => 'Bere',
 'movethispage' => 'Ena pele bere',
 'unusedimagestext' => 'Enê dosyey estê, feqet zerrey yew pele de wedardey niyê.
 Xo vira mekerê ke, sıteyê webiê bini şenê direkt ebe URLi yew dosya ra gırê bê, u wına şenê verba gurênayışo feal de tiya hewna lista bê.',
@@ -2197,7 +2197,7 @@ tipa rocaneyi, nameyê karberi (herfa pil u qıci re hessas a), ya zi peli (reyn
 'allinnamespace' => 'Peli pênro ( $1 cayênameyî)',
 'allnotinnamespace' => 'Pelanê hemî ($1 cayênameyî de niyo)',
 'allpagesprev' => 'Verên',
-'allpagesnext' => 'ver şo',
+'allpagesnext' => 'Bahdo',
 'allpagessubmit' => 'Şo',
 'allpagesprefix' => 'herfê ke şıma tiya de nuşti, pê ney herfan pelê ke destpêkenê liste ker:',
 'allpagesbadtitle' => 'pel o ke şıma kewenî cı, nameyê no peli de gıreyê zıwanan u wikiyi re elaqa esto, ê ra cıkewtış qebul niyo. ya zi sernameyan de karakterê qedexeyi tede esto.',
@@ -2221,7 +2221,7 @@ hem zi bıewnê [[Special:WantedCategories|kategori yê ke waziyeni]].',
 # Special:DeletedContributions
 'deletedcontributions' => 'İştiraqê karberan de besternayına',
 'deletedcontributions-title' => 'Îştirakê karberî wederna',
-'sp-deletedcontributions-contribs' => 'dekerdeni',
+'sp-deletedcontributions-contribs' => 'iştıraqi',
 
 # Special:LinkSearch
 'linksearch' => 'Gıreyê teberi cı geyrê',
@@ -2246,10 +2246,10 @@ qaydeyê destek biyayeyi: <code>$1</code>',
 'activeusers-from' => 'Enê karberi ra tepya bımocne:',
 'activeusers-hidebots' => 'Botan bınımne',
 'activeusers-hidesysops' => 'İdarekerdoğan bınımne',
-'activeusers-noresult' => 'Karberî çini yo.',
+'activeusers-noresult' => 'Karberi nêdiyayê.',
 
 # Special:Log/newusers
-'newuserlogpage' => 'Cıkewtışê hesab-vıraştışi',
+'newuserlogpage' => 'Cıkewtışê hesabvıraştışi',
 'newuserlogpagetext' => 'Ena log de viraştişê karberî esta.',
 
 # Special:ListGroupRights
@@ -2258,14 +2258,14 @@ qaydeyê destek biyayeyi: <code>$1</code>',
 qey heqê şexsi de [[{{MediaWiki:Listgrouprights-helppage}}|hema malumato ziyed]] belka esto.',
 'listgrouprights-key' => '* <span class="listgrouprights-granted">Heqa daiye</span>
 * <span class="listgrouprights-revoked">Heqa guretiye</span>',
-'listgrouprights-group' => 'Grup',
+'listgrouprights-group' => 'Grube',
 'listgrouprights-rights' => 'Heqqî',
 'listgrouprights-helppage' => 'Help:Heqqanê gruban',
 'listgrouprights-members' => '(listey ezayan)',
 'listgrouprights-right-display' => '<span class="listgrouprights-granted">$1 <code>($2)</code></span>',
 'listgrouprights-right-revoked' => '<span class="listgrouprights-revoked">$1 <code>($2)</code></span>',
-'listgrouprights-addgroup' => 'şıma eşkenî hesabê xo re {{PLURAL:$2|grub|gruban}} têare kerî: $1',
-'listgrouprights-removegroup' => 'şıma eşkenî hesabê xo ra {{PLURAL:$2|grub|gruban}} bıvecî: $1',
+'listgrouprights-addgroup' => '{{PLURAL:$2|Grube|Gruban}} cı kerê: $1',
+'listgrouprights-removegroup' => '{{PLURAL:$2|Grube|Gruban}} bıvecê: $1',
 'listgrouprights-addgroup-all' => 'şıma hesabê xo re heme gruban eşkeni têare bıkeri',
 'listgrouprights-removegroup-all' => 'şıma hesabê xo ra heme gruban eşkeni veci',
 'listgrouprights-addgroup-self' => 'şıma hesabê xo re eşkeni {{PLURAL:$2|grub|gruban}} têare bıkerî: $1',
@@ -2293,13 +2293,13 @@ qey heqê şexsi de [[{{MediaWiki:Listgrouprights-helppage}}|hema malumato ziyed
 'emailnotarget' => 'Qandê Gêreninamey karberiyo wuna çınyo yana xırabo.',
 'emailtarget' => 'Namey Karberi defiyê de.',
 'emailusername' => 'Nameyê karberi:',
-'emailusernamesubmit' => 'Stare dı',
+'emailusernamesubmit' => 'İtaet',
 'email-legend' => 'karberê {{SITENAME}} binan re e-posta bıerşaw',
-'emailfrom' => 'Rışten:',
-'emailto' => 'Geren:',
-'emailsubject' => 'Mersel:',
-'emailmessage' => 'E-posta:',
-'emailsend' => 'bıerşawê/bıruşnê',
+'emailfrom' => 'Kami ra:',
+'emailto' => 'Kami rê:',
+'emailsubject' => 'Mewzu:',
+'emailmessage' => 'Mesac:',
+'emailsend' => 'Bırışe',
 'emailccme' => 'kopyayekê mesaji mı re bıerşaw',
 'emailccsubject' => '$2 kopyaya mesaj a ke şıma erşawıto/a $1:',
 'emailsent' => 'E-posta bırşê',
@@ -2307,7 +2307,7 @@ qey heqê şexsi de [[{{MediaWiki:Listgrouprights-helppage}}|hema malumato ziyed
 'emailuserfooter' => 'na e-posta hetê ıney ra $1 erşawiya $2 no/na karberi/e re. pê fonksiyonê "Karberi/e re e-posta bıerşaw" no {{SITENAME}} keyepeli erşawiya.',
 
 # User Messenger
-'usermessage-summary' => 'Mesajê sistemi caverd.',
+'usermessage-summary' => 'Mesacê sistemi caverde.',
 'usermessage-editor' => 'Mesaj berdoxe sistemi',
 'usermessage-template' => 'MediaWiki:UserMessage',
 
@@ -2325,7 +2325,7 @@ Ena deme ra, ma qe vurnayışan ser ena pele tı haberdar keni. Hem zi çı dem
 'removewatch' => 'Listedê mınê seyr kerdışi ra hewad',
 'removedwatchtext' => 'Ena pela "[[:$1]]" biya wedariya [[Special:Watchlist|listeyê seyr-kerdışi şıma]].',
 'watch' => 'Temaşe ke',
-'watchthispage' => 'Peler seyr ke',
+'watchthispage' => 'Na pele seyr ke',
 'unwatch' => 'Teqib mekerê',
 'unwatchthispage' => 'temaşa kerdışê peli vındarn.',
 'notanarticle' => 'mebhesê peli niyo',
@@ -2571,7 +2571,7 @@ $1',
 # Contributions
 'contributions' => 'İştiraqê karberi',
 'contributions-title' => 'Dekerdenê karber de $1',
-'mycontris' => 'Dekerdenê mı',
+'mycontris' => 'İştıraqê mı',
 'contribsub2' => 'Qandê $1 ($2)',
 'nocontribs' => 'Ena kriteriya de vurnayîş çini yo.',
 'uctop' => '(top)',
@@ -2597,7 +2597,7 @@ Cıkewtışo tewr peyêno ke bloke biyo, cêr seba referansi belikerdeyo:',
 'sp-contributions-submit' => 'Cı geyre',
 
 # What links here
-'whatlinkshere' => 'Gıreyê perer',
+'whatlinkshere' => 'Gıreyê pele',
 'whatlinkshere-title' => 'Per da "$1" rê perê ke gre danê',
 'whatlinkshere-page' => 'Per:',
 'linkshere' => "Ena peleyan grey biya '''[[:$1]]''':",
@@ -2883,7 +2883,7 @@ ma vaci: qey pelê "[[{{MediaWiki:Mainpage}}]]i " [[{{#Special:Export}}/{{MediaW
 'allmessages' => 'Mesacê sistemi',
 'allmessagesname' => 'Name',
 'allmessagesdefault' => 'Hesıbyaye metnê mesaci',
-'allmessagescurrent' => 'Metno ke karyayo',
+'allmessagescurrent' => 'Nuşteyê mesacê rocaney',
 'allmessagestext' => 'na liste, listeya mesajê cayê nameyê wikimedya yo.
 eke şıma qayili paşt bıdi mahalli kerdışê wikimedyayi, kerem kerê pelê [//www.mediawiki.org/wiki/Localisation mahalli kerdışê wikimedyayi] u [//translatewiki.net translatewiki.net] ziyaret bıkerê.',
 'allmessagesnotsupportedDB' => "'''\$wgUseDatabaseMessages''' qefelnaye yo u ey ra '''{{ns:special}}:Allmessages''' karkerdışi re akerde niyo.",
@@ -3623,9 +3623,9 @@ mw.loader.using( 'jquery.cookie', function() {
 'pageinfo-redirectsto' => 'Beno hetê',
 'pageinfo-redirectsto-info' => 'melumat',
 'pageinfo-contentpage' => 'Zey jû pela zerreki hesebiyena',
-'pageinfo-contentpage-yes' => 'E',
+'pageinfo-contentpage-yes' => 'Heya',
 'pageinfo-protect-cascading' => 'Sıtarkerdey tiya cı ra yenê war',
-'pageinfo-protect-cascading-yes' => 'E',
+'pageinfo-protect-cascading-yes' => 'Heya',
 'pageinfo-protect-cascading-from' => 'Sıtarkerdey cı ra yenê war',
 
 # Skin names
@@ -4057,7 +4057,7 @@ $8',
 
 'exif-subjectdistance-value' => '$1 metreyi',
 
-'exif-meteringmode-0' => 'Nêzanıte',
+'exif-meteringmode-0' => 'Nêzanayen',
 'exif-meteringmode-1' => 'orta',
 'exif-meteringmode-2' => 'gıraniyê merkeziyi ser',
 'exif-meteringmode-3' => 'noqtayın',
@@ -4066,7 +4066,7 @@ $8',
 'exif-meteringmode-6' => 'qısmî',
 'exif-meteringmode-255' => 'Bin',
 
-'exif-lightsource-0' => 'Nêzanıte',
+'exif-lightsource-0' => 'Nêzanayen',
 'exif-lightsource-1' => 'Roşnê Tici',
 'exif-lightsource-2' => 'Florasant',
 'exif-lightsource-3' => 'roşnê bêbızate',
@@ -4147,7 +4147,7 @@ $8',
 'exif-sharpness-1' => 'Nerm',
 'exif-sharpness-2' => 'Huşk',
 
-'exif-subjectdistancerange-0' => 'Nêzanıte',
+'exif-subjectdistancerange-0' => 'Nêzanayen',
 'exif-subjectdistancerange-1' => 'Makro',
 'exif-subjectdistancerange-2' => 'Vinayişê nezdiyi',
 'exif-subjectdistancerange-3' => 'Vinayişê duri',
index dc5fb52..def58d9 100644 (file)
@@ -3684,7 +3684,7 @@ You can view its source',
 'standard.css'            => '/* CSS placed here will affect users of the Standard skin */', # only translate this message to other languages if you have to change it
 'nostalgia.css'           => '/* CSS placed here will affect users of the Nostalgia skin */', # only translate this message to other languages if you have to change it
 'cologneblue.css'         => '/* CSS placed here will affect users of the Cologne Blue skin */', # only translate this message to other languages if you have to change it
-'monobook.css'            => '/* CSS placed here will affect users of the Monobook skin */', # only translate this message to other languages if you have to change it
+'monobook.css'            => '/* CSS placed here will affect users of the MonoBook skin */', # only translate this message to other languages if you have to change it
 'myskin.css'              => '/* CSS placed here will affect users of the MySkin skin */', # only translate this message to other languages if you have to change it
 'chick.css'               => '/* CSS placed here will affect users of the Chick skin */', # only translate this message to other languages if you have to change it
 'simple.css'              => '/* CSS placed here will affect users of the Simple skin */', # only translate this message to other languages if you have to change it
index d8deff9..a586007 100644 (file)
@@ -2344,7 +2344,7 @@ Puede haber información adicional sobre privilegios individuales en [[{{MediaWi
 'emailpagetext' => 'Puedes usar el formulario de abajo para enviar un correo electrónico a este usuario.
 La dirección electrónica que indicaste en [[Special:Preferences|tus preferencias de usuario]] aparecerá en el remitente para que el destinatario pueda responderte.',
 'usermailererror' => 'El sistema de correo devolvió un error:',
-'defemailsubject' => 'Correo de {{SITENAME}} para el usuario $1',
+'defemailsubject' => 'Correo electrónico enviado por el usuario «$1» desde {{SITENAME}}',
 'usermaildisabled' => 'Correo electrónico del usuario deshabilitado',
 'usermaildisabledtext' => 'No puedes enviar correos electrónicos a otros usuarios en esta wiki',
 'noemailtitle' => 'No hay dirección de correo electrónico',
index 8d1e503..29b6604 100644 (file)
@@ -638,7 +638,7 @@ $1',
 'youhavenewmessagesfromusers' => "Vous avez  $1  d'{{PLURAL:$3| un autre utilisateur|$3 autres utilisateurs}} ( $2 ).",
 'youhavenewmessagesmanyusers' => 'Vous avez $1 de nombreux utilisateurs ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|un message|nouveaux messages}}',
-'newmessagesdifflinkplural' => 'dernières {{PLURAL:$1|modification|modifications}}',
+'newmessagesdifflinkplural' => 'dernières modification{{PLURAL:$1||s}}',
 'youhavenewmessagesmulti' => 'Vous avez de nouveaux messages sur $1.',
 'editsection' => 'modifier',
 'editold' => 'modifier',
@@ -1116,7 +1116,7 @@ La dernière entrée du journal est affichée ci-dessous pour référence :",
 Vous pouvez revenir en arrière et modifier une page existante, ou bien [[Special:UserLogin|vous connecter ou créer un compte]].',
 'nocreate-loggedin' => 'Vous n’avez pas la permission de créer de nouvelles pages.',
 'sectioneditnotsupported-title' => 'Modification de section non prise en charge',
-'sectioneditnotsupported-text' => 'La modification d’une section n’est pas supportée dans cette page de modification.',
+'sectioneditnotsupported-text' => 'La modification d’une section n’est pas prise en charge pour cette page.',
 'permissionserrors' => 'Erreur de permissions',
 'permissionserrorstext' => 'Vous n’avez pas la permission d’effectuer l’opération demandée pour {{PLURAL:$1|la raison suivante|les raisons suivantes}} :',
 'permissionserrorstext-withaction' => 'Vous n’êtes pas autorisé{{GENDER:||e|(e)}} à $2, pour {{PLURAL:$1|la raison suivante|les raisons suivantes}} :',
@@ -1314,7 +1314,7 @@ Assurez-vous que cette opération conservera la continuité de l’historique de
 'mergehistory-box' => 'Fusionner les versions de deux pages :',
 'mergehistory-from' => 'Page d’origine :',
 'mergehistory-into' => 'Page de destination :',
-'mergehistory-list' => 'Historique des modifications fusionnable',
+'mergehistory-list' => 'Historique fusionnable des modifications',
 'mergehistory-merge' => 'Les versions suivantes de [[:$1]] peuvent être fusionnées avec [[:$2]]. Utilisez la colonne de boutons radio pour fusionner uniquement les versions créées du début jusqu’à la date indiquée. Notez bien que l’utilisation des liens de navigation réinitialisera cette colonne.',
 'mergehistory-go' => 'Voir les modifications qui peuvent être fusionnées',
 'mergehistory-submit' => 'Fusionner les versions',
@@ -1737,7 +1737,7 @@ Elle ne doit pas dépasser $1 caractère{{PLURAL:$1||s}}.',
 'recentchangeslinked-feed' => 'Suivi des pages liées',
 'recentchangeslinked-toolbox' => 'Suivi des pages liées',
 'recentchangeslinked-title' => 'Suivi des pages associées à « $1 »',
-'recentchangeslinked-noresult' => 'Il n’y a pas de modification sur les pages liées pendant la période choisie.',
+'recentchangeslinked-noresult' => 'Il n’y a pas de modification des pages liées pendant la période choisie.',
 'recentchangeslinked-summary' => "Cette page spéciale montre les modifications récentes sur les pages qui sont liées. Les pages de votre liste de suivi sont '''en gras'''.",
 'recentchangeslinked-page' => 'Nom de la page :',
 'recentchangeslinked-to' => 'Afficher les modifications des pages qui comportent un lien vers la page donnée plutôt que l’inverse',
@@ -1795,7 +1795,7 @@ Voyez la [[Special:NewFiles|galerie des nouvelles images]] pour une présentatio
 'filename-tooshort' => 'Le nom du fichier est trop court.',
 'filetype-banned' => 'Ce type de fichier est interdit.',
 'verification-error' => 'Ce fichier ne passe pas la vérification des fichiers.',
-'hookaborted' => 'La modification que vous avez essayé de faire a été arrêtée par un crochet d’une extension.',
+'hookaborted' => 'La modification que vous avez essayé de faire a été annulée par une extension.',
 'illegal-filename' => 'Le nom du fichier n’est pas autorisé.',
 'overwrite' => 'Écraser un fichier existant n’est pas autorisé.',
 'unknown-error' => 'Une erreur inconnue s’est produite.',
@@ -3017,7 +3017,7 @@ Un dossier temporaire est manquant.",
 
 # Import log
 'importlogpage' => 'Journal des importations',
-'importlogpagetext' => 'Importations administratives de pages avec leur historique de modifications depuis d’autres wikis.',
+'importlogpagetext' => 'Importations administratives de pages d’autres wikis, avec leur historique de modification.',
 'import-logentry-upload' => 'a importé [[$1]] par envoi de fichier',
 'import-logentry-upload-detail' => '$1 version{{PLURAL:$1||s}}',
 'import-logentry-interwiki' => 'a importé $1 d’un wiki à l’autre',
@@ -4145,7 +4145,7 @@ Sinon, vous pouvez utiliser le formulaire simplifié ci-dessous. Votre commentai
 'api-error-filetype-banned' => 'Ce type de fichier est interdit.',
 'api-error-filetype-banned-type' => '$1 {{PLURAL:$4|n’est pas un type de fichier autorisé|ne sont pas des types de fichiers autorisés}}. {{PLURAL:$3|Le type de fichier autorisé est |Les types de fichiers autorisés sont}} $2.',
 'api-error-filetype-missing' => 'L’extension du fichier est manquante.',
-'api-error-hookaborted' => 'La modification que vous avez essayé de faire a été arrêtée par un crochet d’une extension.',
+'api-error-hookaborted' => 'La modification que vous avez essayé de faire a été annulée par une extension.',
 'api-error-http' => 'Erreur interne : ne peut se connecter au serveur.',
 'api-error-illegal-filename' => 'Le nom du fichier n’est pas autorisé.',
 'api-error-internal-error' => 'Erreur interne : Quelque chose s’est mal passé lors du traitement de votre import sur le wiki.',
index e29cee5..3826bbd 100644 (file)
@@ -515,7 +515,7 @@ $messages = array(
 'views' => 'Visualisacions',
 'toolbox' => 'Bouèta d’outils',
 'userpage' => 'Vêde la pâge utilisator',
-'projectpage' => 'Vêde la pâge du projèt',
+'projectpage' => 'Vêde la pâge projèt',
 'imagepage' => 'Vêde la pâge du fichiér',
 'mediawikipage' => 'Vêde la pâge du mèssâjo',
 'templatepage' => 'Vêde la pâge du modèlo',
@@ -573,7 +573,7 @@ Vêde la [[Special:Version|pâge de les vèrsions]].',
 'youhavenewmessages' => 'Vos avéd de $1 ($2).',
 'newmessageslink' => 'mèssâjos novéls',
 'newmessagesdifflink' => 'dèrriér changement',
-'youhavenewmessagesfromusers' => 'Vos avéd $1 {{PLURAL:$3|d’un ôtrutilisator|de $3 ôtros utilisators}} ($2).',
+'youhavenewmessagesfromusers' => 'Vos avéd $1 {{PLURAL:$3|d’un ôtrutilisator|de $3 ôtros utilisators}} ($2).',
 'youhavenewmessagesmanyusers' => 'Vos avéd $1 d’un mouél d’utilisators ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|un mèssâjo novél|de mèssâjos novéls}}',
 'newmessagesdifflinkplural' => '{{PLURAL:$1|dèrriér changement|dèrriérs changements}}',
@@ -676,7 +676,7 @@ Contint sûrament yon ou ben un mouél de caractèros que pôvont pas étre empl
 'perfcached' => 'Cetes donâs sont en cacho et pôvont pas étre a jorn. Por lo més {{PLURAL:$1|yon rèsultat est disponiblo|$1 rèsultats sont disponiblos}} dedens lo cacho.',
 'perfcachedts' => 'Cetes donâs sont en cacho et sont étâyes betâyes a jorn por lo dèrriér côp a $1. Por lo més {{PLURAL:$1|yon rèsultat est disponiblo|$1 rèsultats sont disponiblos}} dedens lo cacho.',
 'querypage-no-updates' => 'Ora les mises a jorn por ceta pâge sont dèsactivâyes.
-Les donâs ce-desot sont pas betâyes a jorn.',
+Les donâs ique seront pas betâyes a jorn.',
 'wrong_wfQuery_params' => 'Paramètros fôx dessus wfQuery()<br />
 Fonccion : $1<br />
 Demanda : $2',
@@ -697,8 +697,8 @@ Por apondre ou ben changiér des traduccions sur tôs los vouiquis, volyéd empl
 'cascadeprotected' => 'Cela pâge-que est protègiêye perce qu’el est encllua dedens {{PLURAL:$1|ceta pâge, qu’est étâye protègiêye|cetes pâges, que sont étâyes protègiêyes}} avouéc lo chouèx « protèccion en cascâda » activâ :
 $2',
 'namespaceprotected' => "Vos avéd pas la pèrmission de changiér les pâges de l’èspâço de noms « '''$1''' ».",
-'customcssprotected' => 'Vos avéd pas la pèrmission de changiér cela pâge CSS, perce que contint la configuracion a sè d’un ôtrutilisator.',
-'customjsprotected' => 'Vos avéd pas la pèrmission de changiér cela pâge JavaScript, perce que contint la configuracion a sè d’un ôtrutilisator.',
+'customcssprotected' => 'Vos avéd pas la pèrmission de changiér cela pâge CSS, perce que contint la configuracion a sè d’un ôtrutilisator.',
+'customjsprotected' => 'Vos avéd pas la pèrmission de changiér cela pâge JavaScript, perce que contint la configuracion a sè d’un ôtrutilisator.',
 'ns-specialprotected' => 'Les pâges spèciâles pôvont pas étre changiêyes.',
 'titleprotected' => "Cél titro est étâ protègiê a la crèacion per [[User:$1|$1]].
 La rêson balyêye est « ''$2'' ».",
@@ -786,7 +786,7 @@ pouede ignorar ceti mèssâjo et continuar a empleyér voutron viely contresegno
 'passwordsent' => 'Un contresegno novél est étâ mandâ a l’adrèce èlèctronica de l’utilisator « $1 ».
 Vos volyéd tornar branchiér aprés l’avêr reçu.',
 'blocked-mailpassword' => 'Voutron adrèce IP est blocâye en ècritura, la fonccion de sovegnence du contresegno est vêr dèsactivâye por èvitar los abus.',
-'eauthentsent' => 'Un mèssâjo de confirmacion est étâ mandâ a l’adrèce endicâye.
+'eauthentsent' => 'Un mèssâjo de confirmacion est étâ mandâ a l’adrèce èlèctronica endicâye.
 Devant qu’un ôtro mèssâjo seye mandâ a ceti compto, vos devréd siuvre les enstruccions du mèssâjo et pués confirmar que lo compto est franc lo voutro.',
 'throttled-mailpassword' => 'Un mèssâjo de sovegnence de voutron contresegno est ja étâ mandâ pendent {{PLURAL:$1|l’hora passâye|les $1 hores passâyes}}.
 Por èvitar los abus, solament yon mèssâjo de sovegnence serat mandâ per {{PLURAL:$1|hora|entèrvalo de $1 hores}}.',
@@ -795,8 +795,8 @@ Por èvitar los abus, solament yon mèssâjo de sovegnence serat mandâ per {{PL
 Du côp la crèacion de compto est étâye dèsactivâye temporèrament por cel’adrèce IP.',
 'emailauthenticated' => 'Voutron adrèce èlèctronica est étâye ôtentifiâye lo $2 a $3.',
 'emailnotauthenticated' => 'Voutron adrèce èlèctronica est p’oncor ôtentifiâye.
-Nion mèssâjo serat mandâ por châcuna de cetes fonccions.',
-'noemailprefs' => 'Spècifiâd n’adrèce èlèctronica dens voutres prèferences por empleyér cetes fonccions.',
+Nion mèssâjo serat mandâ por châcuna de cetes fonccionalitâts.',
+'noemailprefs' => 'Spècifiâd n’adrèce èlèctronica dens voutres prèferences por empleyér cetes fonccionalitâts.',
 'emailconfirmlink' => 'Confirmâd voutron adrèce èlèctronica',
 'invalidemailaddress' => 'Cet’adrèce èlèctronica pôt pas étre accèptâye perce que semble avêr un format fôx.
 Volyéd buchiér n’adrèce bien formatâye ou ben lèssiér cél champ vouedo.',
@@ -912,39 +912,39 @@ Contresegno temporèro : $2',
 # Edit pages
 'summary' => 'Rèsumâ :',
 'subject' => 'Chousa / titro :',
-'minoredit' => 'Petiôt changement',
+'minoredit' => 'O est un petiôt changement',
 'watchthis' => 'Siuvre ceta pâge',
 'savearticle' => 'Sôvar la pâge',
 'preview' => 'Prèvisualisacion',
-'showpreview' => 'Fâre vêre una prèvisualisacion',
-'showlivepreview' => 'Apèrçu vito fêt',
+'showpreview' => 'Fâre vêre na prèvisualisacion',
+'showlivepreview' => 'Apèrçu rapido',
 'showdiff' => 'Fâre vêre los changements',
-'anoneditwarning' => "'''Atencion :''' vos éte pas branchiê.
-Voutra adrèce IP serat encartâ dens l’historico de ceta pâge.",
-'anonpreviewwarning' => "''Vos éte pas branchiê. Sôvar encarterat voutra adrèce IP dens l’historico des changements de la pâge.''",
-'missingsummary' => "'''Rapèl :''' vos éd p’oncor balyê lo rèsumâ de voutron changement.
-Se vos tornâd clicar dessus « {{int:savearticle}} », voutron changement serat sôvâ sen novél avèrtissement.",
-'missingcommenttext' => 'Volyéd fâre voutron comentèro ce-desot.',
-'missingcommentheader' => "'''Rapèl :''' vos éd p’oncor balyê de sujèt ou ben de titro a ceti comentèro.
-Se vos tornâd clicar dessus « {{int:savearticle}} », voutron changement serat sôvâ sen titro.",
-'summary-preview' => 'Prèvisualisacion du rèsumâ :',
-'subject-preview' => 'Prèvisualisacion du sujèt / titro :',
-'blockedtitle' => 'L’usanciér est blocâ.',
-'blockedtext' => "'''Voutron compto usanciér ou ben voutra adrèce IP at étâ blocâ.'''
-
-Lo blocâjo at étâ fêt per $1.
-La rêson balyê est ceta : ''$2''.
+'anoneditwarning' => "'''Atencion :''' vos éte pas branchiê(ye).
+Voutron adrèce IP serat encartâye dedens l’historico des changements de ceta pâge.",
+'anonpreviewwarning' => "''Vos éte pas branchiê(ye). Sôvar encarterat voutron adrèce IP dedens l’historico des changements de ceta pâge.''",
+'missingsummary' => "'''Sovegnence :''' vos éd balyê gins de rèsumâ de changement.
+Se vos tornâd clicar sur lo boton « {{int:savearticle}} », voutron changement serat sôvâ sen rèsumâ.",
+'missingcommenttext' => 'Volyéd buchiér un comentèro ce-desot.',
+'missingcommentheader' => "'''Sovegnence :''' vos éd balyê gins de chousa / titro a ceti comentèro.
+Se vos tornâd clicar sur lo boton « {{int:savearticle}} », voutron changement serat sôvâ sen chousa / titro.",
+'summary-preview' => 'Apèrçu du rèsumâ :',
+'subject-preview' => 'Apèrçu de la chousa / du titro :',
+'blockedtitle' => 'L’utilisator est blocâ',
+'blockedtext' => "'''Voutron nom d’utilisator ou ben voutron adrèce IP est étâ(ye) blocâ(ye).'''
+
+Lo blocâjo est étâ fêt per $1.
+La rêson balyêye est ''$2''.
 
 * Comencement du blocâjo : $8
 * Èxpiracion du blocâjo : $6
 * Compto blocâ : $7
 
 Vos vos pouede veriér vers $1 ou ben yon des ôtros [[{{MediaWiki:Grouppage-sysop}}|administrators]] por nen discutar.
-Vos pouede pas utilisar la fonccionalitât « Lui mandar un mèssâjo » a muens que vos èyâd una adrèce èlèctronica valida encartâ dens voutres [[Special:Preferences|prèferences]] et que la fonccionalitât èye pas étâ dèsactivâ.
-Voutra adrèce IP d’ora est $3, et lo numerô de blocâjo est $5.
-Volyéd spècefiar cetes endicacions dens totes les requétes que vos faréd.",
-'autoblockedtext' => "Voutra adrèce IP at étâ blocâ ôtomaticament perce qu’el at étâ utilisâ per un ôtro usanciér, lui-mémo blocâ per $1.
-La rêson balyê est ceta :
+Vos pouede pas empleyér la fonccionalitât « Lui mandar un mèssâjo » a muens qu’un’adrèce èlèctronica valida est spècifiâye dens voutres [[Special:Preferences|prèferences]] et que vos éte pas étâ blocâ de l’empleyér.
+Voutron adrèce IP d’ora est $3, et lo numerô de blocâjo est $5.
+Volyéd encllure tôs los dètalys ce-dessus dedens quinta que seye demanda que vos faréd.",
+'autoblockedtext' => "Voutron adrèce IP est étâye blocâye ôtomaticament perce qu’el est étâye empleyêye per un ôtr’utilisator, lui-mémo blocâ per $1.
+La rêson balyêye est :
 
 :''$2''
 
@@ -954,12 +954,12 @@ La rêson balyê est ceta :
 
 Vos vos pouede veriér vers $1 ou ben yon des ôtros [[{{MediaWiki:Grouppage-sysop}}|administrators]] por nen discutar.
 
-Notâd que vos porréd pas utilisar la fonccionalitât « Lui mandar un mèssâjo » a muens que vos èyâd una adrèce èlèctronica valida encartâ dens voutres [[Special:Preferences|prèferences]] et que la fonccionalitât èye pas étâ dèsactivâ.
+Notâd que vos porréd pas empleyér la fonccionalitât « Lui mandar un mèssâjo » a muens que vos avéd n’adrèce èlèctronica valida encartâye dens voutres [[Special:Preferences|prèferences]] et que vos éte pas étâ blocâ de l’empleyér.
 
-Voutra adrèce IP d’ora est $3, et lo numerô de blocâjo est $5.
-Volyéd spècefiar cetes endicacions dens totes les requétes que vos faréd.",
-'blockednoreason' => 'gins de rêson balyê',
-'whitelistedittext' => 'Vos dête étre $1 por avêr la pèrmission de changiér lo contegnu.',
+Voutron adrèce IP d’ora est $3, et lo numerô de blocâjo est $5.
+Volyéd encllure tôs los dètalys ce-dessus dedens quinta que seye demanda que vos faréd.",
+'blockednoreason' => 'gins de rêson balyêye',
+'whitelistedittext' => 'Vos vos dête $1 por povêr changiér les pâges.',
 'confirmedittext' => 'Vos dête confirmar voutra adrèce èlèctronica devant que changiér les pâges.
 Volyéd buchiér et pués validar voutra adrèce èlèctronica dens voutres [[Special:Preferences|prèferences]].',
 'nosuchsectiontitle' => 'Empossiblo de trovar la sèccion',
index 7552e54..603324d 100644 (file)
@@ -2378,7 +2378,7 @@ proceda con coidado.',
 'rollbacklink' => 'reverter',
 'rollbacklinkcount' => 'reverter $1 {{PLURAL:$1|edición|edicións}}',
 'rollbacklinkcount-morethan' => 'reverter máis de $1 {{PLURAL:$1|edición|edicións}}',
-'rollbackfailed' => 'Houbo un fallo ao reverter as edicións',
+'rollbackfailed' => 'Houbo un erro ao reverter as edicións',
 'cantrollback' => 'Non se pode desfacer a edición; o último colaborador é o único autor desta páxina.',
 'alreadyrolled' => 'Non se pode desfacer a edición en "[[:$1]]" feita por [[User:$2|$2]] ([[User talk:$2|conversa]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]); alguén máis editou ou desfixo os cambios desta páxina.
 
index 80fe8aa..baff36b 100644 (file)
@@ -14,6 +14,7 @@
  * @author Dineshjk
  * @author Dsvyas
  * @author Haritosh
+ * @author Harsh4101991
  * @author Jay
  * @author Kaganer
  * @author KartikMistry
@@ -172,7 +173,7 @@ $messages = array(
 'tog-nocache' => 'બ્રાઉઝરનું પેજ કેશિંગ અક્રિય કરો',
 'tog-enotifwatchlistpages' => 'મારી ધ્યાનસૂચિમાંનું પાનુ અને ફાઇલમાં ફેરફાર થાય ત્યારે મને ઇ-મેલ મોકલો',
 'tog-enotifusertalkpages' => 'મારી ચર્ચાનાં પાનામાં ફેરફાર થાય ત્યારે મને ઇ-મેલ મોકલો',
-'tog-enotifminoredits' => 'પાનાં અનેફાઇલ્સમાં નાનાં ફેરફાર થાય તો પણ મને ઇ-મેલ મોકલો',
+'tog-enotifminoredits' => 'પાનાં અને ફાઇલ્સમાં નાનાં ફેરફાર થાય તો પણ મને ઇ-મેલ મોકલો',
 'tog-enotifrevealaddr' => 'નોટીફીકેશનના ઇમેલમાં મારૂ ઇમેલ એડ્રેસ બતાવો',
 'tog-shownumberswatching' => 'ધ્યાનમાં રાખતા સભ્યોની સંખ્યા બતાવો',
 'tog-oldsig' => 'હાલના હસ્તાક્ષર',
@@ -2111,6 +2112,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization. જુઓ',
 'mailnologin' => 'મેળવનારનું સરનામું નથી',
 'mailnologintext' => 'અન્ય સભ્યને ઇ-મેલ મોકલવા માટે તમે [[Special:UserLogin|logged in]] પ્રવેશ કરેલ હોવો જોઈએ અને તમારા[[Special:Preferences|preferences]] વિકલ્પોમાં તમારા ઈ-મેલ સરનામાની પુષ્ટિ થયેલી હોવી જોઈએ',
 'emailuser' => 'સભ્યને ઇ-મેલ કરો',
+'emailuser-title-notarget' => 'ઇ-મેલ વપરાશકર્તા',
 'emailpage' => 'ઈ-મેલ સભ્ય',
 'emailpagetext' => 'તમે નીચે દર્શાવેલ ફોર્મ વાપરી ઇ-મેલ મોકલી શકો છો.
 તમે તમારી માહિતીમાં [[Special:Preferences|your user preferences]] જે ઇ-મેલ લખ્યો હશે  તે દ્વારા ના નામ હેઠળ દેખાશે, જેથી ઇ-મેલ મેળવનાર તમને સંદેશાનો જવાબ આપી શકશે.',
@@ -2923,10 +2925,15 @@ $1',
 # Info page
 'pageinfo-title' => ' $1 પાના ની માહિતી નૂ મથાડૂ',
 'pageinfo-header-edits' => 'ઇતિહાસ સંપાદન',
+'pageinfo-length' => 'પૃષ્ઠની લંબાઇ (બાઇટમાં)',
 'pageinfo-views' => 'જોનારાની સંખ્યા',
 'pageinfo-watchers' => 'પાના નીરીક્ષકોની સંખ્યા',
 'pageinfo-edits' => 'કુલ સંપાદનોની સંખ્યા',
 'pageinfo-authors' => 'ક્ષેત્રના લેખકોની કુલ સંખ્યા',
+'pageinfo-toolboxlink' => 'પૃષ્ઠમાહિતી',
+'pageinfo-redirectsto-info' => 'માહિતી',
+'pageinfo-contentpage-yes' => 'હા',
+'pageinfo-protect-cascading-yes' => 'હા',
 
 # Patrolling
 'markaspatrolleddiff' => 'નિરીક્ષીત અંકિત કરો',
index 7fc84c8..c6371bf 100644 (file)
@@ -1562,8 +1562,8 @@ $1",
 'editinguser' => "שינוי הרשאות המשתמש של '''[[User:$1|$1]]''' $2",
 'userrights-editusergroup' => 'עריכת קבוצות משתמש',
 'saveusergroups' => 'שמירת קבוצות משתמש',
-'userrights-groupsmember' => 'חבר בקבוצות:',
-'userrights-groupsmember-auto' => 'חבר אוטומטית בקבוצות:',
+'userrights-groupsmember' => '{{GENDER:$2|חבר|חברה}} ב{{PLURAL:$1|קבוצה|קבוצות}}:',
+'userrights-groupsmember-auto' => '{{GENDER:$2|חבר|חברה}} אוטומטית ב{{PLURAL:$1|קבוצה|קבוצות}}:',
 'userrights-groups-help' => 'באפשרותכם לשנות את הקבוצות שמשתמש זה חבר בהן:
 * תיבה מסומנת פירושה שהמשתמש חבר בקבוצה.
 * תיבה בלתי מסומנת פירושה שהמשתמש אינו חבר בקבוצה.
index 6f31430..67e3451 100644 (file)
@@ -152,7 +152,7 @@ $messages = array(
 'category-empty' => "''Daytoy a kategoria ket agdama a saan nga aglaon kadagiti panid wenno midia.''",
 'hidden-categories' => '{{PLURAL:$1|Nailemmeng a kategoria|Nailemmeng a katkategoria}}',
 'hidden-category-category' => 'Nailemmeng a katkategoria',
-'category-subcat-count' => '{{PLURAL:$2|Daytoy a kategoria ket adda laeng ti sumaganad nga apo ti kategoria.|Daytoy a kategoria ket adda kadagiti sumaganad  {{PLURAL:$1|nga apo ti kategoria|$1 nga apo dagiti kategoria}}, manipud ti dagup nga $2.}}',
+'category-subcat-count' => '{{PLURAL:$2|Daytoy a kategoria ket adda laeng ti sumaganad nga apo ti kategoria.|Daytoy a kategoria ket adda kadagiti sumaganad nga {{PLURAL:$1|nga apo ti kategoria|$1 nga apo dagiti kategoria}}, manipud ti dagup nga $2.}}',
 'category-subcat-count-limited' => 'Daytoy a kategoria ket adda ti sumaganad  {{PLURAL:$1|nga apo ti kategoria|$1 nga apo dagiti kategoria}}.',
 'category-article-count' => '{{PLURAL:$2|Daytoy a kategoria ket aglaon laeng ti sumaganad a panid.|Ti sumaganad  {{PLURAL:$1|a panid|$1 a pampanid}} ket adda iti daytoy a kategoria, manipud ti dagup nga $2.}}',
 'category-article-count-limited' => 'Ti sumaganad {{PLURAL:$1|a panid |$1 a pampanid}} ket adda iti agdama a kategoria.',
@@ -280,7 +280,7 @@ $1',
 'mainpage' => 'Umuna a Panid',
 'mainpage-description' => 'Umuna a Panid',
 'policy-url' => 'Project:Annuroten',
-'portal' => 'Pagdadanonan',
+'portal' => 'Portal ti komunidad',
 'portal-url' => 'Project:Portal ti komunidad',
 'privacy' => 'Annuroten iti kinapribado',
 'privacypage' => 'Project:Annuroten iti kinapribado',
@@ -835,6 +835,14 @@ Kasla met naikkaten.',
 'edit-already-exists' => 'Saan a makaaramid ti baro a panid.
 Adda met daytoyen.',
 'defaultmessagetext' => 'Kasisigud a testo ti mensahe',
+'invalid-content-data' => 'Imbalido a datos ti linaon',
+'content-not-allowed-here' => 'Ti "$1" a linaon ket saan a maipalubos idiay [[$2]] a panid',
+
+# Content models
+'content-model-wikitext' => 'wikitext',
+'content-model-text' => 'naranas a testo',
+'content-model-javascript' => 'JavaScript',
+'content-model-css' => 'CSS',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => "'''Ballaag:''' Daytoy a panid ket adu unay kadagiti nangina a parser a pamay-an  a panagtawtawag.
@@ -1751,7 +1759,7 @@ Baka kayatmo nga urnosen ti bukodna a deskripsionna idiay [$2 deskripsion ti pap
 'uploadnewversion-linktext' => 'Mangipan ti kabarbaro a bersion iti daytoy a papeles',
 'shared-repo-from' => 'Naggapo iti $1',
 'shared-repo' => 'iti pagbingbingayan a nagikabilan',
-'upload-disallowed-here' => 'Daksanggasat a saanmo a mabalin a suratan manen daytoy nga imahen.',
+'upload-disallowed-here' => 'Saanmo a masuratan manen daytoy nga imahen.',
 
 # File reversion
 'filerevert' => 'Isubli ti $1',
@@ -2303,8 +2311,8 @@ Addaan ka ngata ti madi a panilpo, wenno ti panagbaliw ket naipasubli wenno naik
 'undeletedrevisions' => '{{PLURAL:$1|1 a  binaliwan|dagiti $1 a binaliwan}} ti naisubli',
 'undeletedrevisions-files' => '{{PLURAL:$1|1 a binaliwan|dagiti $1 a binaliwan}} ken {{PLURAL:$2|1 a papeles|dagiti $2 a papeles}} ti naisubli',
 'undeletedfiles' => '{{PLURAL:$1|1 a papeles|dagiti $1 a papeles}} ti naisubli',
-'cannotundelete' => 'Napaay ti panagikkat;
-adda ngata immuna a nagikkat ti panid.',
+'cannotundelete' => 'Napaay ti panagikkat:
+$1',
 'undeletedpage' => "'''Naisublin ti $1'''
 
 Binsiren ti [[Special:Log/delete|listaan ti naik-ikkat]] para iti listaan dagiti naudi a naik-ikkat ken naisubsubli.",
@@ -2848,6 +2856,7 @@ Daytoy ket mabalin a gapuanan babaen ti panilpo a naiparit ti akin ruar a pagsaa
 
 # Info page
 'pageinfo-title' => 'Pakaammo para iti "$1"',
+'pageinfo-not-current' => 'Ti pakaammo ket mabalin laeng a maiparang para iti agdama a panagbalbaliw.',
 'pageinfo-header-basic' => 'Kangrunaan a pakaammuan',
 'pageinfo-header-edits' => 'Pakasaritaan ti inurnos',
 'pageinfo-header-restrictions' => 'Panagsalaknib ti panid',
@@ -2876,6 +2885,13 @@ Daytoy ket mabalin a gapuanan babaen ti panilpo a naiparit ti akin ruar a pagsaa
 'pageinfo-hidden-categories' => 'Nailemmeng {{PLURAL:$1|a kategoria|a katkategoria}} ($1)',
 'pageinfo-templates' => 'Nailak-am  {{PLURAL:$1|a plantilia|a planplantilia}} ($1)',
 'pageinfo-toolboxlink' => 'Pakaammo ti panid',
+'pageinfo-redirectsto' => 'Maibaw-ing idiay',
+'pageinfo-redirectsto-info' => 'pakaammo',
+'pageinfo-contentpage' => 'Naibilang a kas naglaon a panid',
+'pageinfo-contentpage-yes' => 'Wen',
+'pageinfo-protect-cascading' => 'Dagiti panagsalaknib ket agsariap manipud ditoy',
+'pageinfo-protect-cascading-yes' => 'Wen',
+'pageinfo-protect-cascading-from' => 'Dagiti panagsalaknib ket agsariap manipud idiay',
 
 # Patrolling
 'markaspatrolleddiff' => 'Markaan a kas napatruliaan',
@@ -3445,6 +3461,7 @@ Daytoy a kodigo a pasingkedan ket agpaso iti $4.',
 # Scary transclusion
 'scarytranscludedisabled' => '[Nabaldado ti Interwiki panagiraman]',
 'scarytranscludefailed' => '[Napaay ti panagala ti plantilia para iti $1]',
+'scarytranscludefailed-httpstatus' => '[Napaay ti panagala ti plantilia para iti $1: HTTP $2]',
 'scarytranscludetoolong' => '[Atiddog unay ti URL]',
 
 # Delete conflict
index 4ba8dc3..3544abc 100644 (file)
@@ -2190,13 +2190,12 @@ Frekari breytingar á henni eða spallsíðu hennar munu verða sýndar þar, og
 'enotif_anon_editor' => 'ónefndum notanda $1',
 'enotif_body' => 'Kæri $WATCHINGUSERNAME,
 
-Það lítur út fyrir að þú hafir ný skilaboð á {{SITENAME}} síðunni $PAGETITLE.
-Hún hefur verið $CHANGEDORCREATED $PAGEEDITDATE af 
+Síðan „$PAGETITLE” sem þú hefur beðið um að fylgjast með á {{SITENAME}} hefur verið $CHANGEDORCREATED $PAGEEDITDATE af 
 $PAGEEDITOR. Breytingarágripið var:
 
    $PAGESUMMARY
 
-Þetta er tengill á spjallsíðuna þína:
+Þetta er tengill á síðuna:
 
    $PAGETITLE_URL
 
@@ -2219,7 +2218,7 @@ Til þess að breyta stillingum um hvenær þú færð sendar tilkynningar, smel
 {{canonicalurl:{{#special:Preferences}}}}
 
 
-Til þess að hætta að fylgjast með $PAGETITLE, smelltu á:
+Til þess að hætta að fylgjast með „$PAGETITLE”, smelltu á:
 
 $UNWATCHURL',
 
index fb473e3..da77566 100644 (file)
@@ -3965,7 +3965,7 @@ $5
 'colon-separator' => ':&#32;',
 'pipe-separator' => '&#32;|&#32;',
 'word-separator' => '&#32;',
-'parentheses' => '($1)',
+'parentheses' => '($1)',
 
 # Multipage image navigation
 'imgmultipageprev' => '&larr;前ページ',
index 2a4c540..e8e12bd 100644 (file)
@@ -1918,6 +1918,7 @@ Tzemreḍ ad sageneḍ abeqqeḍ s tixtiṛit n tawsit n uɣmis, isem n useqdac
 Ilaq-asen deg udday taɣult n uswir imineg, am amedya « *.org ».<br />
 Ineggafen imazdayen : <code>$1</code> (ur d-renu acemma deg unadi inek/inem)',
 'linksearch-line' => '$1 yeqqen seg $2',
+'linksearch-error' => 'Tzemreḍ ad seqdeceḍ isekkilen usligen ala deg tazzwara n taɣult uselkim.',
 
 # Special:ListUsers
 'listusersfrom' => 'Ssken imseqdacen seg:',
@@ -1940,6 +1941,10 @@ Ineggafen imazdayen : <code>$1</code> (ur d-renu acemma deg unadi inek/inem)',
 
 # Special:ListGroupRights
 'listgrouprights' => 'Izerfan n igrawen n iseqdacen',
+'listgrouprights-summary' => 'Asebter agi yesɛa yiwen umuɣ n igrawen i sengelen deg wiki agi dɣa izerfan n wadduf i qqenen.
+Zemrent ad ilint [[{{MediaWiki:Listgrouprights-helppage}}|tilɣa nniḍen]] ɣef izerfan n yiwen.',
+'listgrouprights-key' => '*<span class="listgrouprights-granted">Izerfan sefkan</span>
+*<span class="listgrouprights-revoked">Izerfan ekkesen</span>',
 'listgrouprights-group' => 'Agraw',
 'listgrouprights-rights' => 'Izerfan',
 'listgrouprights-helppage' => 'Help:Izerfan n igrawen',
@@ -2080,6 +2085,7 @@ Tuɣalin d tadhelt :
 'delete-confirm' => 'Kkes "$1"',
 'delete-legend' => 'Ekkes',
 'historywarning' => 'Ɣur-wet : Asebter i ara temḥuḍ yesɛa amezruy s azal alemmas n $1 {{PLURAL:$1|lqem|ileqman}} :',
+'confirmdeletetext' => 'Aqlak ad mḥuḍ asebter naɣ afaylu, dɣa akkw ileqman-is iqdimen. Ilaq ad segegeḍ tigawt agi dɣa tfehemeḍ [[{{MediaWiki:Policy-url}}|ilugan n wiki]].',
 'actioncomplete' => 'Axdam yekfa',
 'actionfailed' => 'Tigawt agi texser',
 'deletedtext' => '"$1" yettumḥa.
index 04088c4..ff6fdad 100644 (file)
@@ -158,7 +158,6 @@ $messages = array(
 'qbbrowse' => 'Browse/تصفّح',
 'qbedit' => 'ترمیم',
 'qbpageoptions' => 'ھیہ صفحہ',
-'qbpageinfo' => 'مفہوم',
 'qbmyoptions' => 'مہ صفحات',
 'qbspecialpages' => 'خاص صفحات',
 'faq' => 'عام معلومات',
index d6e15d9..c5cb833 100644 (file)
@@ -148,7 +148,6 @@ $messages = array(
 'qbbrowse' => 'Килигун',
 'qbedit' => 'Дегишарун',
 'qbpageoptions' => 'Ччинин низамарунар',
-'qbpageinfo' => 'Ччиникай малумат',
 'qbmyoptions' => 'Зи ччинар',
 'qbspecialpages' => 'Кьетlен хъувун',
 'faq' => 'Фад-фад гузвай жузунар (ФГЖ)',
@@ -523,7 +522,7 @@ $messages = array(
 'revertmerge' => 'Ччара авун',
 
 # Diffs
-'history-title' => '$1  -  масакIавилерин тарих',
+'history-title' => 'Masak\'avilerin q\'isa "$1"',
 'lineno' => 'ЦIар $1:',
 'compareselectedversions' => 'Хкягъай жуьреяр гекъигун',
 'editundo' => 'гьич авун',
index 9b2d5fe..1e04a18 100644 (file)
@@ -1868,7 +1868,7 @@ Mungkin anda ingin menyunting keterangan pada [$2 laman penerangan failnya] di s
 'shared-repo' => 'sebuah gedung kongsi',
 'shared-repo-name-wikimediacommons' => 'Wikimedia Commons',
 'filepage.css' => '/* CSS yang ditempatkan di sini disertakan pada laman keterangan fail, dan juga pada klien wiki asing */',
-'upload-disallowed-here' => 'Maaf, anda tidak boleh menggantikan imej ini.',
+'upload-disallowed-here' => 'Anda tidak boleh menggantikan fail ini.',
 
 # File reversion
 'filerevert' => 'Balikkan $1',
@@ -2961,6 +2961,7 @@ Simpan dalam komputer anda dan muat naiknya di sini.',
 
 # Info page
 'pageinfo-title' => 'Maklumat untuk "$1"',
+'pageinfo-not-current' => 'Maklumat mungkin hanya dipaparkan untuk versi semasa.',
 'pageinfo-header-basic' => 'Maklumat asas',
 'pageinfo-header-edits' => 'Sunting sejarah',
 'pageinfo-header-restrictions' => 'Perlindungan halaman',
@@ -2989,6 +2990,13 @@ Simpan dalam komputer anda dan muat naiknya di sini.',
 'pageinfo-hidden-categories' => 'Kategori tersembunyi ($1)',
 'pageinfo-templates' => 'Templat tertransklusi ($1)',
 'pageinfo-toolboxlink' => 'Maklumat halaman',
+'pageinfo-redirectsto' => 'Melencong ke',
+'pageinfo-redirectsto-info' => 'maklumat',
+'pageinfo-contentpage' => 'Dikira sebagai halaman kandungan',
+'pageinfo-contentpage-yes' => 'Ya',
+'pageinfo-protect-cascading' => 'Perlindungan sedang melata dari sini',
+'pageinfo-protect-cascading-yes' => 'Ya',
+'pageinfo-protect-cascading-from' => 'Perlindungan sedang melata dari',
 
 # Skin names
 'skinname-standard' => 'Klasik',
index 3ed3338..7caadce 100644 (file)
@@ -96,9 +96,9 @@ $messages = array(
 'tog-minordefault' => 'Ticmachiyōtīz mochīntīn tlapatlalitzintli ic default',
 'tog-previewontop' => 'Tiquittāz achtochīhualiztli achtopa tlapatlaliztli caxitl',
 'tog-previewonfirst' => 'Xiquitta achtochīhualiztli inic cē tlapatlalizpan',
-'tog-enotifwatchlistpages' => 'Timitz-e-mailīzqueh ihcuāc mopatla cē zāzanilli tictlachiya.',
+'tog-enotifwatchlistpages' => 'Notech moēhualtia cē maltzinteyōtl netitlaniztli ihcuāc mopatla zāzanilli in notlachiyaliz.',
 'tog-enotifusertalkpages' => 'Nēchihtoa ihcuāc tlecpatla motēixnāmiquiliz',
-'tog-enotifminoredits' => 'Timitz-e-mailīzqueh nō zāzanilpatlatzintli ītechcopa',
+'tog-enotifminoredits' => 'Notech moēhualtia cē maltzinteyōtl netitlaniztli nō ihcuāc mopatla tepitōn zāzanilli in notlachiyaliz.',
 'tog-enotifrevealaddr' => 'Ticnēxtīz mo e-mailcān āxcāncayōtechcopa āmatlacuilizpan',
 'tog-shownumberswatching' => 'Tiquinttāz tlatequitiltilīlli tlein tlachiyacateh',
 'tog-forceeditsummary' => 'Xinēchnōtzāz ihcuāc ahmo niquihtōz inōn ōnitlapatlac',
@@ -203,7 +203,6 @@ $messages = array(
 'qbbrowse' => 'Titlatēmōz',
 'qbedit' => 'Ticpatlāz',
 'qbpageoptions' => 'Inīn zāzanilli',
-'qbpageinfo' => 'Tlahcuilōltechcopa',
 'qbmyoptions' => 'Nozāzanil',
 'qbspecialpages' => 'Nònkuâkìskàtlaìxtlapaltìn',
 'faq' => 'Zan īc tētlatlanīliztli',
@@ -667,7 +666,7 @@ Hueliz ōmopolo huiqui nozo ōmozacac.
 'timezoneregion-europe' => 'Europan',
 'timezoneregion-indian' => 'Índico Ilhuicaātl',
 'timezoneregion-pacific' => 'Pacífico Ilhuicaātl',
-'prefs-searchoptions' => 'Tlatēmoliztli tlaēlēhuiliztli',
+'prefs-searchoptions' => 'Titlatēmōz',
 'prefs-namespaces' => 'Tōcātzin',
 'defaultns' => 'Tlatēmōz inīn tōcātzimpan achtopa:',
 'default' => 'ic default',
index 26d0596..b213ccf 100644 (file)
@@ -1901,7 +1901,7 @@ Den kan ikke sikkerhetskontrolleres.',
 'uploadstash-summary' => 'Denne siden gir tilgang til filer som har blitt lastet opp (eller er i ferd med å bli lastet opp) men som ennå ikke er publisert til wikien. Disse filene er ikke synlige for andre enn brukeren som lastet dem opp.',
 'uploadstash-clear' => 'Fjern stashede filer',
 'uploadstash-nofiles' => 'Du har ingen stashede filer.',
-'uploadstash-badtoken' => 'Utføringen av den handlingen var mislykket, kanskje fordi dine redigeringsrettigheter har utløpt. Prøv igjen.',
+'uploadstash-badtoken' => 'Utføringen av den handlingen var mislykket, kanskje fordi redigeringsrettighetene dine har utløpt. Prøv igjen.',
 'uploadstash-errclear' => 'Fjerning av filene var mislykket.',
 'uploadstash-refresh' => 'Oppdater listen over filer',
 'invalid-chunk-offset' => 'Ugyldig delforskyvning',
index fdb6d41..51f7ad9 100644 (file)
@@ -3231,7 +3231,7 @@ Meestal wordt dit door een externe verwijzing op een zwarte lijst veroorzaakt.',
 
 # Info page
 'pageinfo-title' => 'Informatie over "$1"',
-'pageinfo-not-current' => 'Gegegevens worden mogelijk alleen weergegeven voor de huidige versie.',
+'pageinfo-not-current' => 'Gegevens worden mogelijk alleen weergegeven voor de huidige versie.',
 'pageinfo-header-basic' => 'Basisgegevens',
 'pageinfo-header-edits' => 'Bewerkingsgeschiedenis',
 'pageinfo-header-restrictions' => 'Paginabeveiliging',
index 110cc1f..37795cf 100644 (file)
@@ -1212,9 +1212,10 @@ Du har ikkje tilgang til henne.',
 Sjekk gjerne loggføringa.',
 'revdelete-only-restricted' => 'Feil under gøyming av objektet datert $2 $1: du kan ikkje gøyma objekt for administratorar utan å i tillegg velja eit av dei andre visingsvala.',
 'revdelete-reason-dropdown' => '*Vanlege grunnar til sletting
-** Brot på opphavsrettar
-** Ikkje høveleg personleg informasjon
-** Mogleg falskt sladder',
+** Brot på opphavsrett
+** Kommentar eller personleg informasjon som ikkje høver seg
+** Brukarnamn som ikkje høver seg
+** Mogeleg falskt sladder',
 'revdelete-otherreason' => 'Anna årsak, eller tilleggsårsak:',
 'revdelete-reasonotherlist' => 'Annan grunn',
 'revdelete-edit-reasonlist' => 'Endre grunnar til sletting',
@@ -1256,7 +1257,7 @@ Pass på at den nye sida også har innhald frå den innfletta sida.',
 
 # Diffs
 'history-title' => '$1: Versjonshistorikk',
-'difference-title' => '$1: Skilnad mellom versjonar',
+'difference-title' => 'Skilnad mellom versjonar av «$1»',
 'difference-title-multipage' => '$1 og $2: Skilnad mellom sidene',
 'difference-multipage' => '(Skilnad mellom sider)',
 'lineno' => 'Line $1:',
@@ -1265,6 +1266,10 @@ Pass på at den nye sida også har innhald frå den innfletta sida.',
 'editundo' => 'angre',
 'diff-multi' => '({{PLURAL:$1|Éin mellomversjon|$1 mellomversjonar}} frå {{PLURAL:$2|éin brukar|$2 brukarar}} er ikkje {{PLURAL:$1|vist|viste}})',
 'diff-multi-manyusers' => '({{PLURAL:$1|Ein mellomversjon|$1 mellomversjonar}} av meir enn $2 {{PLURAL:$2|brukar|brukarar}}  er ikkje {{PLURAL:$1|vist|viste}})',
+'difference-missing-revision' => '{{PLURAL:$2|Éin versjon|$2 versjonar}} av skilnaden ($1) vart ikkje funne.
+
+Dette skriv seg som oftast frå at ein har fylgd ei forelda versjonslenkje til ei side som er sletta.
+Detaljar kan ein finna i [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} sletteloggen].',
 
 # Search results
 'searchresults' => 'Søkjeresultat',
@@ -1425,6 +1430,7 @@ Dette kan ikkje tilbakestillast.',
 'yourrealname' => 'Verkeleg namn:',
 'yourlanguage' => 'Språk:',
 'yourvariant' => 'Språkvariant for innhald:',
+'prefs-help-variant' => 'Varianten eller ortografien som du føretrekkjer at innhaldet i wikien vert vist på.',
 'yournick' => 'Signatur:',
 'prefs-help-signature' => 'Kommentarar på diskusjonssider bør alltid signerast med «<nowiki>~~~~</nowiki>», som vil konverterast til signaturen din med tidspunkt.',
 'badsig' => 'Ugyldig råsignatur, sjekk HTML-kodinga.',
@@ -1816,6 +1822,7 @@ $1',
 'backend-fail-synced' => 'Fila «$1» er i ei inkonsistent stode i dei interne lagringsbaksystema',
 'backend-fail-connect' => 'Kunne ikkje kopla til filbaksystemet «$1».',
 'backend-fail-internal' => 'Ein ukjend feil oppstod i lagringsbaksystemet «$1».',
+'backend-fail-batchsize' => 'Baksystemet vart gjeve ei gruppe med $1 {{PLURAL:$1|filoperasjon|filoperasjonar}}; grensa er $2 {{PLURAL:$2|operasjon|operasjonar}}.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'Kunne ikkje kopla til journaldatabasen for lagringsbaksystemet «$1».',
@@ -1839,6 +1846,11 @@ $1',
 Ho kan ikkje tryggingskontrollerast.',
 
 # Special:UploadStash
+'uploadstash' => 'Lasta opp løynd samling',
+'uploadstash-summary' => 'Denne sida gjev tilgang til filer som er opplasta (eller i ferd med å verta det), men som ikkje er publiserte til wikien. Desse filene er ikkje synlege for andre enn opplastaren.',
+'uploadstash-clear' => 'Fjerna filer i den løynde samlinga',
+'uploadstash-nofiles' => 'Du har ingen filer i den løynde samlinga.',
+'uploadstash-badtoken' => 'Utføringa av handlinga lukkast ikkje; kan henda av di endringsrettane dine har gått ut. Freista om att.',
 'uploadstash-errclear' => 'Fjerning av filene var mislykka.',
 'uploadstash-refresh' => 'Oppdater fillista',
 
@@ -1859,6 +1871,7 @@ Berre tilgjenge til filer er tillete.',
 Denne wikien er sett opp som ein ålmennt tilgjengeleg wiki.
 For best tryggleik, er img_auth.php sett ut av funksjon.',
 'img-auth-noread' => 'Brukaren har ikkje rettar til å lesa «$1».',
+'img-auth-bad-query-string' => 'URL-en har ein ugild spørjestreng.',
 
 # HTTP errors
 'http-invalid-url' => 'Ugyldig URL: $1',
@@ -1928,6 +1941,10 @@ Ei [[Special:WhatLinksHere/$2|fullstendig liste]] er tilgjengeleg.',
 Sjå [$2 filskildringssida] for meir informasjon.',
 'sharedupload-desc-here' => 'Denne fila er frå $1 og kan verta nytta av andre prosjekt.
 Skildringa frå [$2 filskildringssida] der er vist nedanfor.',
+'sharedupload-desc-edit' => 'Fila er frå $1 og kan vera nytta på andre prosjekt.
+Du vil kan henda endra skildringa på [$2 filskildringssida] hennar der.',
+'sharedupload-desc-create' => 'Fila er frå $1 og kan vera nytta på andre prosjekt.
+Du vil kan henda endra skildringa på [$2 filskildringssida] hennar der.',
 'filepage-nofile' => 'Det finst ikkje noka fil med dette namnet.',
 'filepage-nofile-link' => 'Inga fil med dette namnet finst, men du kan [$1 lasta ho opp].',
 'uploadnewversion-linktext' => 'Last opp ny versjon av denne fila',
@@ -2004,6 +2021,7 @@ Skildringa frå [$2 filskildringssida] der er vist nedanfor.',
 'statistics-edits' => 'Endringar sidan {{SITENAME}} vart oppretta',
 'statistics-edits-average' => 'Gjennomsnittleg tal på endringar per side',
 'statistics-views-total' => 'Totalt visningstal',
+'statistics-views-total-desc' => 'Visingar av sider som ikkje finst og spesialsider er ikkje tekne med',
 'statistics-views-peredit' => 'Visingar per endring',
 'statistics-users' => 'Registrerte [[Special:ListUsers|brukarar]]',
 'statistics-users-active' => 'Aktive brukarar',
@@ -2058,6 +2076,8 @@ Ei side vert handsama som ei fleirtydingsside om ho nyttar ein mal som er lenkja
 'wantedpages' => 'Etterspurde sider',
 'wantedpages-badtitle' => 'Ugyldig tittel mellom resultata: $1',
 'wantedfiles' => 'Etterspurde filer',
+'wantedfiletext-cat' => 'Desse filene er nytta men finst ikkje. Filer frå utannettstadlege samlingar kan vera lista opp sjølv om dei finst. Slike falske positivar vert <del>strokne ut</del>. Sider som nyttar filer som ikkje finst vert lista opp i [[:$1]].',
+'wantedfiletext-nocat' => 'Desse filene er nytta men finst ikkje. Filer frå utannettstadlege samlingar kan vera lista opp sjølv om dei finst. Slike falske positivar vert <del>strokne ut</del>.',
 'wantedtemplates' => 'Etterspurde malar',
 'mostlinked' => 'Sidene med flest lenkjer til seg',
 'mostlinkedcategories' => 'Mest brukte kategoriar',
@@ -2988,6 +3008,7 @@ Vitja [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] og [//trans
 
 # Info page
 'pageinfo-title' => 'Informasjon om «$1»',
+'pageinfo-not-current' => 'Informasjon vert berre vist for den gjeldande versjonen.',
 'pageinfo-header-basic' => 'Grunnleggjande informasjon',
 'pageinfo-header-edits' => 'Endringshistorikk',
 'pageinfo-header-restrictions' => 'Sidevern',
@@ -3015,6 +3036,9 @@ Vitja [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] og [//trans
 'pageinfo-magic-words' => '{{PLURAL:$1|Trylleord}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Løynd kategori|Løynde kategoriar}} ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|Inkludert mal|Inkluderte malar}} ($1)',
+'pageinfo-toolboxlink' => 'Sideinformasjon',
+'pageinfo-redirectsto' => 'Omdirigerer til',
+'pageinfo-redirectsto-info' => 'info',
 'pageinfo-contentpage' => 'Tald som ei innhaldsside',
 'pageinfo-contentpage-yes' => 'Ja',
 'pageinfo-protect-cascading' => 'Djupvern byrjar her',
index aa734de..027ac0c 100644 (file)
@@ -1730,7 +1730,7 @@ Peul desse ch'a veula modifiché la descrission dzora soa [pàgina ëd descrissi
 'shared-repo-from' => 'da $1',
 'shared-repo' => "n'archivi condivis",
 'shared-repo-name-wikimediacommons' => 'Wikimedia Commons',
-'upload-disallowed-here' => 'A peul pa rampiassé sto archivi.',
+'upload-disallowed-here' => 'A peul pa rampiassé cost archivi.',
 
 # File reversion
 'filerevert' => "Buté torna $1 tanme ch'a l'era",
@@ -2824,7 +2824,7 @@ Sòn a l'é motobin belfé che a sia rivà përchè a-i era n'anliura a un sit e
 
 # Info page
 'pageinfo-title' => 'Anformassion për «$1»',
-'pageinfo-not-current' => "L'anformassion a peul mach esse mostà për la revision corenta.",
+'pageinfo-not-current' => "J'anformassion a peulo mach esse smonùe për la revision an cors.",
 'pageinfo-header-basic' => 'Anformassion ëd base',
 'pageinfo-header-edits' => 'Modìfiche',
 'pageinfo-header-restrictions' => 'Protession ëd la pàgina',
@@ -3191,13 +3191,13 @@ J'àutri a saran stërmà coma stàndard.
 'exif-meteringmode-6' => 'Parsial',
 'exif-meteringmode-255' => "n'àutr",
 
-'exif-lightsource-0' => 'Pa conossù',
+'exif-lightsource-0' => 'Dësconossùa',
 'exif-lightsource-1' => 'Lus dël dì',
 'exif-lightsource-2' => 'Fluoressenta',
 'exif-lightsource-3' => 'Lus al tungsten (a incandessensa)',
-'exif-lightsource-4' => 'Flash',
+'exif-lightsource-4' => 'Lòsna',
 'exif-lightsource-9' => 'Temp bel',
-'exif-lightsource-10' => 'Temp an-nivolà',
+'exif-lightsource-10' => 'Temp nìvol',
 'exif-lightsource-11' => 'Ombra',
 'exif-lightsource-12' => 'Fluoressensa tipo lus dël dì (D 5700 – 7100K)',
 'exif-lightsource-13' => 'Fluoressensa bianca për ël dì (N 4600 – 5400K)',
@@ -3210,7 +3210,7 @@ J'àutri a saran stërmà coma stàndard.
 'exif-lightsource-21' => 'Anluminant D65',
 'exif-lightsource-22' => 'Anluminant D75',
 'exif-lightsource-23' => 'Anluminant D50',
-'exif-lightsource-24' => 'Làmpada da studio ISO al tungsten',
+'exif-lightsource-24' => 'Làmpada da studi ISO al tungsten',
 'exif-lightsource-255' => "Aùtra sorgiss d'anluminassion",
 
 # Flash modes
index 8053935..bb01925 100644 (file)
@@ -213,9 +213,9 @@ $messages = array(
 'editfont-serif' => 'سېرېف ليکبڼه',
 
 # Dates
-'sunday' => 'اتوار',
-'monday' => 'ګل',
-'tuesday' => 'نهي',
+'sunday' => 'يونۍ',
+'monday' => 'دونۍ',
+'tuesday' => 'درې نۍ',
 'wednesday' => 'شورو',
 'thursday' => 'زيارت',
 'friday' => 'جمعه',
index 6684e66..76b726f 100644 (file)
@@ -45,6 +45,7 @@
  * @author Guglani
  * @author Gustronico
  * @author Hamilton Abreu
+ * @author Harsh4101991
  * @author Helix84
  * @author Holek
  * @author Huji
@@ -1638,15 +1639,17 @@ Used in [[Special:Preferences]], tab "Watchlist". The display options refer to:
 'userrights-editusergroup' => '{{Identical|Edit user groups}}. Parameter:
 * $1 is a username - optional, can be used for GENDER',
 'saveusergroups' => 'Button text when editing user groups',
-'userrights-groupsmember' => 'Used when editing user groups in [[Special:Userrights]]. The messsage is followed by a list of group names.
+'userrights-groupsmember' => 'Used when editing user groups in [[Special:Userrights]]. The message is followed by a list of group names.
 
 Parameters:
-* $1 - optional, for PLURAL use, the number of items in the list following the message. Avoid PLURAL, if your language can do without.',
+* $1 - the number of items in the list following the message, for PLURAL.
+* $2 - the user name, for GENDER.',
 'userrights-groupsmember-auto' => 'Used when editing user groups in [[Special:Userrights]]. The messsage is followed by a list of group names.
 "Implicit" is for groups that the user was automatically added to (such as "autoconfirmed"); cf. {{msg-mw|userrights-groupsmember}}
 
-Parameters:
-* $1 - optional, for PLURAL use, the number of items in the list following the message. Please avoid PLURAL, if your language can do without.',
+Parameters
+* $1 - the number of items in the list following the message, for PLURAL.
+* $2 - the user name, for GENDER.',
 'userrights-groups-help' => 'Instructions displayed on [[Special:UserRights]]. Parameters:
 * $1 is a username - optional, can be used for GENDER',
 'userrights-reason' => 'Text beside log field when editing user groups
@@ -3535,7 +3538,7 @@ See also {{msg-mw|Anonuser}} and {{msg-mw|Siteusers}}.',
 'pageinfo-header-properties' => 'Table section header in action=info.',
 'pageinfo-display-title' => 'The title that is displayed when the page is viewed.',
 'pageinfo-default-sort' => 'The key by which the page is sorted in categories by default.',
-'pageinfo-length' => 'The length of the page, in bytes.',
+'pageinfo-length' => 'પૃષ્ઠની લંબાઇ બાઇટમાં',
 'pageinfo-article-id' => 'The numeric identifier of the page.',
 'pageinfo-robot-policy' => 'The search engine status of the page, e.g. "marked as index".',
 'pageinfo-robot-index' => 'An indication that the page is indexable.',
index d9ed9c9..c0628ab 100644 (file)
@@ -711,8 +711,8 @@ Ce tu non ge si 'n'utende anonime e pinze ca le commende ca so revolte a te sond
 'noarticletext' => 'Non ge stè scritte ninde jndr\'à sta pàgene.
 Tu puè [[Special:Search/{{PAGENAME}}|cercà pe quiste titele]] jndr\'à otre pàggene, <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}}] oppure [{{fullurl:{{FULLPAGENAME}}|action=edit}} cange sta pàgene]</span>.',
 'noarticletext-nopermission' => "Pe mò non ge stè teste jndr'à sta pàgene.
-Tu puè [[Special:Search/{{PAGENAME}}|cercà pe stu titele]]  jndr'à otre pàggene,
-o <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} cirche jndr'à l'archivije cullegate]</span>.",
+Tu puè [[Special:Search/{{PAGENAME}}|cercà pe stu titole]] jndr'à otre pàggene,
+o <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} cirche jndr'à l'archivije cullegate]</span>, ma non ge tìne le permesse pe ccrejà sta pàgene.",
 'missing-revision' => "'A revisione #\$1 d'a pàgene chiamate \"{{PAGENAME}}\" non g'esiste.
 
 Quiste succede normalmende purcé 'u cunde jè collegate a 'na pàgene ca ha state scangellate.
@@ -829,6 +829,11 @@ Pare proprie ca l'onne scangellete.",
 'edit-already-exists' => "Non ge puè ccrejà 'na pàgene nove purcè esiste già!",
 'defaultmessagetext' => 'Messàgge de teste de base',
 
+# Content models
+'content-model-text' => 'teste semblice',
+'content-model-javascript' => 'JavaScript',
+'content-model-css' => 'CSS',
+
 # Parser/template warnings
 'expensive-parserfunction-warning' => "Fà attenziò: Sta vosce tène 'nu sbuenne de funziune de chiamate a l'analizzatore.
 
@@ -1762,7 +1767,7 @@ Pò essere ca tu vuè cangià 'a descrizione de jidde [$2 pàgene de descrizione
 'shared-repo' => "'nu condenitore de cose condivise",
 'shared-repo-name-wikimediacommons' => 'Wikimedia Commons',
 'filepage.css' => "/* 'U CSS ca se iacchie aqquà jè ingluse sus 'a pàgene de descrizione d'u file, pure ingluse pe le client de le Uicchi furastire */",
-'upload-disallowed-here' => "Sfortunatamende non ge puè sovrascrivere st'immaggine.",
+'upload-disallowed-here' => 'Non ge puè sovrascrivere stu file.',
 
 # File reversion
 'filerevert' => "'Nvirte $1",
@@ -2319,8 +2324,8 @@ Tu puè avè 'nu collegamende sbagliate o 'a revisione pò essere ca ha state re
 'undeletedrevisions' => '{{PLURAL:$1|1 revisione|$1 revisiune}} ripristinete',
 'undeletedrevisions-files' => '{{PLURAL:$1|1 revisione|$1 revisiune}} e {{PLURAL:$2|1 file|$2 file}} ripristinete',
 'undeletedfiles' => '{{PLURAL:$1|1 file|$1 file}} ripristinete',
-'cannotundelete' => "Repristine fallite;
-quaccheotre pò essere ca ha repristinate 'a pàgene apprime.",
+'cannotundelete' => 'Repristine fallite:
+$1',
 'undeletedpage' => "'''$1 ha state repristinate'''
 
 Ligge l'[[Special:Log/delete|archivije de le scangellaminde]] pe 'nu report de le urteme scangellaminde e repristinaminde.",
@@ -2931,6 +2936,8 @@ Stu fatte ha state causate da 'nu collegamende a 'nu site esterne ca appartene a
 'pageinfo-magic-words' => '{{PLURAL:$1|Parole|Parole}} maggiche ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Categorije|Categorije}} scunnute ($1)',
 'pageinfo-templates' => 'Esclude {{PLURAL:$1|template|template}} ($1)',
+'pageinfo-contentpage-yes' => 'Sine',
+'pageinfo-protect-cascading-yes' => 'Sine',
 
 # Skin names
 'skinname-standard' => 'Classeche',
index 94b5039..e271a25 100644 (file)
@@ -55,6 +55,7 @@
  * @author Lockal
  * @author MaxBioHazard
  * @author MaxSem
+ * @author NBS
  * @author Ola
  * @author Ole Yves
  * @author Putnik
@@ -3010,7 +3011,7 @@ $1',
 'djvu_no_xml' => 'Невозможно получить XML для DjVu',
 'thumbnail-temp-create' => 'Не удаётся создать временный файл эскиза',
 'thumbnail-dest-create' => 'Не удаётся сохранить эскиз по месту назначения',
-'thumbnail_invalid_params' => 'Ошибочный параметр миниатюры',
+'thumbnail_invalid_params' => 'Ошибочный параметр миниатюры или PNG-файл содержит более 12,5 млн. пикселей',
 'thumbnail_dest_directory' => 'Невозможно создать целевую директорию',
 'thumbnail_image-type' => 'Данный тип изображения не поддерживается',
 'thumbnail_gd-library' => 'Неполная конфигурация библиотеки GD, отсутствует функция $1',
index 523fa4d..e9e148b 100644 (file)
@@ -339,14 +339,14 @@ $messages = array(
 'vector-action-move' => 'ย้าย',
 'vector-action-protect' => 'ป้องกัน',
 'vector-action-undelete' => 'ยกเลิกการลบ',
-'vector-action-unprotect' => 'à¹\80à¸\9bลีà¹\88ยà¸\99à¸\84à¹\88าà¸\81ารà¸\9bà¸\81à¸\9bà¹\89อà¸\87à¸\82à¹\89อมูล',
+'vector-action-unprotect' => 'à¹\80à¸\9bลีà¹\88ยà¸\99à¸\84à¹\88าà¸\81ารà¸\9bà¹\89อà¸\87à¸\81ัà¸\99',
 'vector-simplesearch-preference' => 'เปิดใช้งานคำแนะนำการค้นหาขั้นสูง (สำหรับสกิน Vector เท่านั้น)',
 'vector-view-create' => 'สร้าง',
 'vector-view-edit' => 'แก้ไข',
 'vector-view-history' => 'ดูประวัติ',
 'vector-view-view' => 'อ่าน',
 'vector-view-viewsource' => 'ดูโค้ด',
-'actions' => 'à¸\81ารà¸\81ระà¸\97ำ',
+'actions' => 'à¸\9bà¸\8fิà¸\9aัà¸\95ิà¸\81าร',
 'namespaces' => 'เนมสเปซ',
 'variants' => 'สิ่งที่แตกต่าง',
 
@@ -372,7 +372,7 @@ $messages = array(
 'delete' => 'ลบ',
 'deletethispage' => 'ลบหน้านี้',
 'undelete_short' => 'เรียกคืน {{PLURAL:$1|1 การแก้ไข|$1 การแก้ไข}}',
-'viewdeleted_short' => 'ดู{{PLURAL:$1|1 การแก้ไขที่ถูกลบ|$1 การแก้ไขที่ถูกลบ}}',
+'viewdeleted_short' => 'ดู {{PLURAL:$1|1 การแก้ไขที่ถูกลบ|$1 การแก้ไขที่ถูกลบ}}',
 'protect' => 'ล็อก',
 'protect_change' => 'เปลี่ยน',
 'protectthispage' => 'ล็อกหน้านี้',
@@ -436,7 +436,7 @@ $1',
 
 'badaccess' => 'มีข้อผิดพลาดในการใช้สิทธิ',
 'badaccess-group0' => 'คุณไม่ได้รับอนุญาตให้ดำเนินการตามที่ร้องขอนี้',
-'badaccess-groups' => 'à¸\81ารà¸\81ระà¸\97ำà¸\97ีà¹\88รà¹\89อà¸\87à¸\82อà¸\99ีà¹\89สà¸\87วà¸\99à¹\84วà¹\89à¹\80à¸\89à¸\9eาะà¸\9cูà¹\89à¹\83à¸\8aà¹\89{{PLURAL:$2|à¸\88าà¸\81à¸\81ลุà¹\88ม|à¸\88าà¸\81กลุ่มใดกลุ่มหนึ่ง ดังนี้}}: $1',
+'badaccess-groups' => 'à¸\9bà¸\8fิà¸\9aัà¸\95ิà¸\81ารà¸\97ีà¹\88à¸\84ุà¸\93รà¹\89อà¸\87à¸\82อà¸\99ีà¹\89สà¸\87วà¸\99à¹\84วà¹\89à¹\80à¸\89à¸\9eาะà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¹\83à¸\99{{PLURAL:$2|à¸\81ลุà¹\88ม|กลุ่มใดกลุ่มหนึ่ง ดังนี้}}: $1',
 
 'versionrequired' => 'ต้องการมีเดียวิกิรุ่น $1',
 'versionrequiredtext' => 'ต้องการมีเดียวิกิรุ่น $1 สำหรับใช้งานหน้านี้ ดูเพิ่ม [[Special:Version|รุ่นซอฟต์แวร์]]',
@@ -446,6 +446,10 @@ $1',
 'youhavenewmessages' => 'คุณมี $1 ($2)',
 'newmessageslink' => 'ข้อความใหม่',
 'newmessagesdifflink' => 'การเปลี่ยนแปลงล่าสุด',
+'youhavenewmessagesfromusers' => 'คุณมี $1 จาก{{PLURAL:$3|ผู้ใช้คนอื่น|ผู้ใช้ $3 คน}} ($2)',
+'youhavenewmessagesmanyusers' => 'คุณมี $1 จากผู้ใช้หลายคน ($2)',
+'newmessageslinkplural' => '{{PLURAL:$1|ข้อความใหม่|ข้อความใหม่}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|การเปลี่ยนแปลง|การเปลี่ยนแปลง}}ล่าสุด',
 'youhavenewmessagesmulti' => 'คุณมีข้อความใหม่ที่ $1',
 'editsection' => 'แก้ไข',
 'editold' => 'แก้ไข',
@@ -564,6 +568,8 @@ $1',
 'ns-specialprotected' => 'หน้าพิเศษไม่สามารถแก้ไขได้',
 'titleprotected' => "หัวเรื่องนี้ได้รับการป้องกันไม่ให้สร้างใหม่ โดย [[User:$1|$1]] 
 เหตุผลที่ให้ไว้ คือ ''$2''",
+'exception-nologin' => 'ไม่ได้ล็อกอิน',
+'exception-nologin-text' => 'หน้าหรือปฏิบัติการนี้กำหนดให้คุณล็อกอินเข้าสู่วิกินี้ก่อน',
 
 # Virus scanner
 'virus-badscanner' => "การตั้งค่าผิดพลาด: ไม่รู้จักตัวสแกนไวรัส: ''$1''",
@@ -1086,6 +1092,8 @@ $1",
 
 # Diffs
 'history-title' => 'ประวัติรุ่นปรับปรุงของ "$1"',
+'difference-title' => 'ความแตกต่างระหว่างรุ่นของ "$1"',
+'difference-title-multipage' => 'ความแตกต่างระหว่างหน้า "$1" และ "$2"',
 'difference-multipage' => '(ความแตกต่างระหว่างหน้าต่างๆ)',
 'lineno' => 'แถว $1:',
 'compareselectedversions' => 'เปรียบเทียบสองรุ่นที่เลือก',
@@ -1919,6 +1927,7 @@ $1',
 'allpagesprefix' => 'แสดงหน้าที่ขึ้นต้นด้วย:',
 'allpagesbadtitle' => 'ชื่อเรื่องนี้ไม่ถูกต้อง อาจสะกดผิด ลิงก์มาจากภาษาอื่นหรือวิกิอื่น หรือมีตัวอักษรที่ไม่สามารถใช้เป็นชื่อเรื่องได้',
 'allpages-bad-ns' => '{{SITENAME}} ไม่มีเนมสเปซในชื่อ "$1"',
+'allpages-hide-redirects' => 'ซ่อนการเปลี่ยนทาง',
 
 # Special:Categories
 'categories' => 'หมวดหมู่',
@@ -2125,6 +2134,7 @@ $UNWATCHURL
 'rollback' => 'ย้อนการแก้ไขกลับฉุกเฉิน',
 'rollback_short' => 'ย้อนกลับฉุกเฉิน',
 'rollbacklink' => 'ย้อนกลับฉุกเฉิน',
+'rollbacklinkcount' => 'ย้อนกลับฉุกเฉิน $1 การแก้ไข',
 'rollbackfailed' => 'ย้อนไม่สำเร็จ',
 'cantrollback' => 'ไม่สามารถย้อนการแก้ไขได้ เนื่องจากหน้านี้ไม่มีผู้แก้ไขรายอื่นอีก',
 'alreadyrolled' => 'ไม่สามารถย้อนรุ่นล่าสุด
@@ -3444,6 +3454,7 @@ $5
 # New logging system
 'logentry-delete-delete' => '$1 ลบหน้า $3',
 'logentry-delete-restore' => '$1 กู้คืนหน้า $3',
+'logentry-delete-event' => '$1 เปลี่ยนทัศนวิสัยของ $5 รายการปูมใน $3: $4',
 'revdelete-content-hid' => 'เนื้อหาถูกซ่อน',
 'revdelete-summary-hid' => 'คำอธิบายอย่างย่อถูกซ่อน',
 'revdelete-uname-hid' => 'ชื่อผู้ใช้ถูกซ่อน',
index 8aac893..338a189 100644 (file)
@@ -2975,9 +2975,18 @@ Geçici dosya kayıp.',
 # Info page
 'pageinfo-title' => 'Bilgi için "$1"',
 'pageinfo-header-edits' => 'Değişiklikler',
+'pageinfo-header-restrictions' => 'Sayfa koruması',
+'pageinfo-header-properties' => 'Sayfa özellikleri',
+'pageinfo-display-title' => 'Görüntülenen başlık',
+'pageinfo-default-sort' => 'Varsayılan sıralama anahtarı',
+'pageinfo-article-id' => 'Sayfa ID',
+'pageinfo-robot-policy' => 'Arama motoru durumu',
+'pageinfo-robot-index' => 'İndekslenebilir',
+'pageinfo-robot-noindex' => 'İndekslenemez',
 'pageinfo-views' => 'Görüntülenme sayısı',
 'pageinfo-watchers' => 'İzleyen sayısı',
 'pageinfo-redirects-value' => '$1',
+'pageinfo-firstuser' => 'Sayfa oluşturucu',
 'pageinfo-edits' => 'Değişiklik sayısı',
 
 # Skin names
index 0315ba6..097e9b3 100644 (file)
@@ -725,7 +725,7 @@ $1',
 'badtitletext' => 'Запитана назва сторінки неправильна, порожня, або неправильно зазначена міжмовна чи міжвікі назва.
 Можливо, в назві використовуються недопустимі символи.',
 'perfcached' => 'Наступні дані взяті з кешу і можуть бути застарілими. В кеші зберігається не більше  {{PLURAL:$1| запису| записів}}.',
-'perfcachedts' => 'Ð\9dаÑ\81Ñ\82Ñ\83пнÑ\96 Ð´Ð°Ð½Ñ\96 Ð²Ð·Ñ\8fÑ\82Ñ\96 Ð· ÐºÐµÑ\88Ñ\83, Ð²Ð¾Ñ\81Ñ\82аннÑ\94 Ð²Ñ\96н Ð¾Ð½Ð¾Ð²Ð»Ñ\8eвавÑ\81Ñ\8f Ð¾ $1. Ð\92 ÐºÐµÑ\88Ñ\96 Ð·Ð±ÐµÑ\80Ñ\96гаÑ\94Ñ\82Ñ\8cÑ\81Ñ\8f Ð½Ðµ Ð±Ñ\96лÑ\8cÑ\88е {{PLURAL:$4|запису|записів}}.',
+'perfcachedts' => 'Ð\9dаÑ\81Ñ\82Ñ\83пнÑ\96 Ð´Ð°Ð½Ñ\96 Ð²Ð·Ñ\8fÑ\82Ñ\96 Ð· ÐºÐµÑ\88Ñ\83, Ð²Ð¾Ñ\81Ñ\82аннÑ\94 Ð²Ñ\96н Ð¾Ð½Ð¾Ð²Ð»Ñ\8eвавÑ\81Ñ\8f Ð¾ $1. Ð£ ÐºÐµÑ\88Ñ\96 Ð·Ð±ÐµÑ\80Ñ\96гаÑ\94Ñ\82Ñ\8cÑ\81Ñ\8f Ð½Ðµ Ð±Ñ\96лÑ\8cÑ\88е $4 {{PLURAL:$4|запису|записів}}.',
 'querypage-no-updates' => 'Зміни цієї сторінки зараз заборонені. Дані тут не можуть бути оновлені зараз.',
 'wrong_wfQuery_params' => 'Неприпустима параметри функцій wfQuery()<br />
 Функція: $1<br />
@@ -1477,7 +1477,7 @@ $1",
 'timezoneregion-indian' => 'Індійський океан',
 'timezoneregion-pacific' => 'Тихий океан',
 'allowemail' => 'Дозволити електронну пошту від інших користувачів',
-'prefs-searchoptions' => 'Ð\9fаÑ\80амеÑ\82Ñ\80и Ð¿Ð¾Ñ\88Ñ\83кÑ\83',
+'prefs-searchoptions' => 'Ð\9fоÑ\88Ñ\83к',
 'prefs-namespaces' => 'Простори назв',
 'defaultns' => 'Інакше шукати в таких просторах назв:',
 'default' => 'за умовчанням',
index b3cd79d..5345d61 100644 (file)
@@ -744,7 +744,7 @@ Hãy chắc chắn bạn đã bật lên cookie, làm mới trang này, và th
 Tên người dùng có phân biệt chữ hoa chữ thường.
 Hãy kiểm tra lại chính tả, hoặc [[Special:UserLogin/signup|mở tài khoản mới]].',
 'nosuchusershort' => 'Không có thành viên nào có tên “$1”. Xin hãy kiểm tra lại chính tả.',
-'nouserspecified' => 'Bạn phải đưa ra tên đăng ký.',
+'nouserspecified' => 'Bạn phải chỉ định một tên người dùng.',
 'login-userblocked' => 'Thành viên này đã bị cấm. Không cho phép đăng nhập.',
 'wrongpassword' => 'Mật khẩu sai. Xin vui lòng nhập lại.',
 'wrongpasswordempty' => 'Bạn chưa gõ vào mật khẩu. Xin thử lần nữa.',
@@ -756,7 +756,7 @@ Hãy kiểm tra lại chính tả, hoặc [[Special:UserLogin/signup|mở tài k
 'passwordremindertext' => 'Ai đó (có thể là bạn, có địa chỉ IP $1) đã yêu cầu chúng tôi gửi mật khẩu mới của {{SITENAME}} ($4). Chúng tôi đã tạo một mật khẩu tạm “$3” cho thành viên “$2”. Nếu bạn chính là người đã yêu cầu mật khẩu, bạn cần phải đăng nhập và thay đổi mật khẩu ngay bây giờ. Mật khẩu tạm sẽ hết hạn trong vòng {{PLURAL:$5|một ngày|$5 ngày}}.
 
 Nếu bạn không yêu cầu gửi mật khẩu mới, hoặc bạn đã nhớ ra mật khẩu cũ của mình và không còn muốn đổi nó nữa, bạn có thể bỏ qua bức thư này và tiếp tục sử dụng mật khẩu cũ của bạn.',
-'noemail' => 'Thành viên “$1” không đăng ký thư điện tử.',
+'noemail' => 'Thành viên “$1” không ghi thư điện tử.',
 'noemailcreate' => 'Bạn cần cung cấp một địa chỉ thư điện tử hợp lệ',
 'passwordsent' => 'Mật khẩu mới đã được gửi tới thư điện tử của thành viên “$1”. Xin đăng nhập lại sau khi nhận thư.',
 'blocked-mailpassword' => 'Địa chỉ IP của bạn bị cấm không được sửa đổi, do đó cũng không được phép dùng chức năng phục hồi mật khẩu để tránh lạm dụng.',
@@ -908,7 +908,7 @@ Lý do được cung cấp là ''$2''.
 * Mục tiêu cấm: $7
 
 Bạn có thể liên hệ với $1 hoặc một [[{{MediaWiki:Grouppage-sysop}}|bảo quản viên]] khác để thảo luận về việc cấm.
-Bạn không thể sử dụng tính năng “gửi thư cho người này” trừ khi bạn đã đăng ký một địa chỉ thư điện tử hợp lệ trong [[Special:Preferences|tùy chọn tài khoản]] và bạn không bị khóa chức năng đó.
+Bạn không thể sử dụng tính năng “gửi thư cho người này” trừ khi bạn đã ghi một địa chỉ thư điện tử hợp lệ trong [[Special:Preferences|tùy chọn tài khoản]] và bạn không bị khóa chức năng đó.
 Địa chỉ IP hiện tại của bạn là $3, và mã số cấm là #$5.
 Xin hãy ghi kèm tất cả các thông tin trên vào thư yêu cầu của bạn.",
 'autoblockedtext' => "Địa chỉ IP của bạn đã bị tự động cấm vì một người nào đó đã sử dụng nó, $1 là thành viên đã thực hiện cấm.
@@ -923,7 +923,7 @@ Lý do được cung cấp là:
 Bạn có thể liên hệ với $1 hoặc một trong số các
 [[{{MediaWiki:Grouppage-sysop}}|bảo quản viên]] khác để thảo luận về việc cấm.
 
-Chú ý rằng bạn sẽ không dùng được chức năng “gửi thư cho người này” trừ khi bạn đã đăng ký một địa chỉ thư điện tử hợp lệ trong [[Special:Preferences|tùy chọn]] và bạn không bị cấm dùng chức năng đó.
+Chú ý rằng bạn sẽ không dùng được chức năng “gửi thư cho người này” trừ khi bạn đã ghi một địa chỉ thư điện tử hợp lệ trong [[Special:Preferences|tùy chọn]] và bạn không bị cấm dùng chức năng đó.
 
 Địa chỉ IP hiện tại của bạn là $3, mã số cấm là $5.
 Xin hãy ghi kèm tất cả các chi tiết trên vào thư yêu cầu của bạn.",
@@ -955,14 +955,14 @@ Bạn có thể [[Special:Search/{{PAGENAME}}|tìm kiếm tựa trang này]] t
 
 Lỗi này thường xuất hiện đối khi theo dõi liên kết lỗi thời đến phiên bản cũ của một trang đã bị xóa.
 Xem chi tiết trong [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} nhật trình xóa].',
-'userpage-userdoesnotexist' => 'Tài khoản mang tên “<nowiki>$1</nowiki>” chưa được đăng ký. Xin hãy kiểm tra lại nếu bạn muốn tạo/sửa trang này.',
-'userpage-userdoesnotexist-view' => 'Tài khoản “$1” chưa được đăng ký.',
+'userpage-userdoesnotexist' => 'Đây chưa có tài khoản với tên “<nowiki>$1</nowiki>”. Xin hãy kiểm tra lại nếu bạn muốn tạo hay sửa trang này.',
+'userpage-userdoesnotexist-view' => 'Chưa có tài khoản với tên “$1”.',
 'blocked-notice-logextract' => 'Người dùng này hiện đang bị cấm sửa đổi. Nhật trình cấm gần nhất được ghi ở dưới để tiện theo dõi:',
 'clearyourcache' => "'''Chú ý:''' Sau khi lưu trang, có thể bạn sẽ phải xóa bộ nhớ đệm của trình duyệt để xem các thay đổi.
-* '''Firefox / Safari:''' Giữ phím ''Shift'' trong khi nhấn ''Reload'' (''Tải lại''), hoặc nhấn tổ hợp ''Ctrl-F5'' hay ''Ctrl-R'' (⌘R trên Mac)
+* '''Firefox / Safari:''' Giữ phím ''Shift'' trong khi nhấn ''Tải lại'' (''Reload''), hoặc nhấn tổ hợp ''Ctrl-F5'' hay ''Ctrl-R'' (⌘R trên Mac)
 * '''Google Chrome:''' Nhấn tổ hợp ''Ctrl-Shift-R'' (⇧⌘R trên Mac)
-* '''Internet Explorer:''' Giữ phím ''Ctrl'' trong khi nhấn ''Refresh'', hoặc nhấn tổ hợp ''Ctrl-F5''
-* '''Opera:''' Xóa bộ nhớ đệm trong ''Tools → Preferences''",
+* '''Internet Explorer:''' Giữ phím ''Ctrl'' trong khi nhấn ''Làm tươi'' (''Refresh''), hoặc nhấn tổ hợp ''Ctrl-F5''
+* '''Opera:''' Xóa bộ nhớ đệm trong ''Công cụ → Sở thích'' (''Tools → Preferences'')",
 'usercssyoucanpreview' => "'''Mẹo:''' Sử dụng nút “{{int:showpreview}}” để kiểm thử bản CSS của bạn trước khi lưu trang.",
 'userjsyoucanpreview' => "'''Mẹo:''' Sử dụng nút “{{int:showpreview}}” để kiểm thử bản JS của bạn trước khi lưu trang.",
 'usercsspreview' => "'''Hãy nhớ rằng bạn chỉ đang xem thử trang CSS cá nhân của bạn.
@@ -1020,7 +1020,7 @@ Không thể lưu trang.",
 Bảo quản viên khi khóa dữ liệu đã đưa ra lý do: $1",
 'protectedpagewarning' => "'''Cảnh báo: Trang này đã bị khóa và chỉ có các thành viên có quyền quản lý mới có thể sửa được.'''
 Thông tin mới nhất trong nhật trình được ghi dưới đây để tiện theo dõi:",
-'semiprotectedpagewarning' => "'''Lưu ý:''' Trang này đã bị khóa và chỉ có các thành viên đã đăng ký mới có thể sửa đổi được.
+'semiprotectedpagewarning' => "'''Lưu ý:''' Trang này đã bị khóa nên chỉ có các thành viên có tài khoản mới có thể sửa đổi được.
 Thông tin mới nhất trong nhật trình được ghi dưới đây để tiện theo dõi:",
 'cascadeprotectedwarning' => "'''Cảnh báo:''' Trang này đã bị khóa, chỉ có thành viên có quyền quản lý mới có thể sửa đổi được, vì nó được nhúng vào {{PLURAL:$1|trang|những trang}} bị khóa theo tầng sau:",
 'titleprotectedwarning' => "'''Cảnh báo:  Trang này đã bị khóa và bạn phải có một số [[Special:ListGroupRights|quyền nhất định]] mới có thể tạo trang.'''
@@ -1433,7 +1433,7 @@ Không có thể lùi lại tác động này.',
 'username' => 'Tên người dùng:',
 'uid' => 'Số thứ tự thành viên:',
 'prefs-memberingroups' => 'Thành viên của {{PLURAL:$1|nhóm|nhóm}}:',
-'prefs-registration' => 'Thời điểm đăng ký:',
+'prefs-registration' => 'Lúc mở tài khoản:',
 'yourrealname' => 'Tên thật:',
 'yourlanguage' => 'Ngôn ngữ:',
 'yourvariant' => 'Dạng chữ của nội dung:',
@@ -2052,7 +2052,7 @@ Hãy nhớ kiểm tra các liên kết khác đến bản mẫu trước khi xó
 'statistics-views-total' => 'Số lần xem tổng cộng',
 'statistics-views-total-desc' => 'Không bao gồm số lần xem các trang không tồn tại và các trang đặc biệt',
 'statistics-views-peredit' => 'Số lần xem trên một sửa đổi',
-'statistics-users' => 'Số [[Special:ListUsers|thành viên]] đã đăng ký',
+'statistics-users' => 'Số [[Special:ListUsers|thành viên]] có tài khoản',
 'statistics-users-active' => 'Số thành viên tích cực',
 'statistics-users-active-desc' => 'Những thành viên đã hoạt động trong {{PLURAL:$1|ngày|$1 ngày}} qua',
 'statistics-mostpopular' => 'Các trang được xem nhiều nhất',
@@ -2450,7 +2450,7 @@ hiện tại của trang '''$1''':",
 'protect-cascadeon' => 'Trang này hiện bị khóa vì nó được nhúng vào {{PLURAL:$1|những trang|trang}} dưới đây bị khóa với tùy chọn “khóa theo tầng” được kích hoạt. Bạn có thể đổi mức độ khóa của trang này, nhưng nó sẽ không ảnh hưởng đến việc khóa theo tầng.',
 'protect-default' => 'Cho phép mọi thành viên',
 'protect-fallback' => 'Cần quyền “$1”',
-'protect-level-autoconfirmed' => 'Cấm thành viên mới và thành viên chưa đăng ký',
+'protect-level-autoconfirmed' => 'Cấm thành viên mới và người dùng chưa mở tài khoản',
 'protect-level-sysop' => 'Cấm mọi thành viên (trừ bảo quản viên)',
 'protect-summary-cascade' => 'khóa theo tầng',
 'protect-expiring' => 'hết hạn $1 (UTC)',
@@ -2775,7 +2775,7 @@ Trong những trường hợp đó, bạn phải di chuyển hoặc hợp nhất
 'movearticle' => 'Di chuyển trang:',
 'moveuserpage-warning' => "'''Cảnh báo:''' Bạn sắp di chuyển trang cá nhân của người dùng. Xin lưu ý rằng chỉ có trang này sẽ được di chuyển, còn người dùng sẽ ''không'' đổi tên.",
 'movenologin' => 'Chưa đăng nhập',
-'movenologintext' => 'Bạn phải là thành viên đã đăng ký và [[Special:UserLogin|đăng nhập]] mới di chuyển trang được.',
+'movenologintext' => 'Bạn phải là thành viên đã mở tài khoản và [[Special:UserLogin|đăng nhập]] mới di chuyển trang được.',
 'movenotallowed' => 'Bạn không có quyền di chuyển trang.',
 'movenotallowedfile' => 'Bạn không có đủ quyền để di chuyển tập tin.',
 'cant-move-user-page' => 'Bạn không có quyền di chuyển trang cá nhân (ngoại trừ trang con).',
@@ -2825,9 +2825,9 @@ Trang với tên “[[:$1]]” đã tồn tại. Bạn có muốn xóa nó để
 'imageinvalidfilename' => 'Tên tập tin đích không hợp lệ',
 'fix-double-redirects' => 'Cập nhật tất cả các trang đổi hướng chỉ đến tựa đề cũ',
 'move-leave-redirect' => 'Để lại trang đổi hướng',
-'protectedpagemovewarning' => "'''Cảnh báo:''' Trang này đã bị khóa  chỉ có các thành viên có quyền quản lý mới có thể di chuyển được.
+'protectedpagemovewarning' => "'''Cảnh báo:''' Trang này đã bị khóa nên chỉ có các thành viên có quyền quản lý mới có thể di chuyển được.
 Thông tin mới nhất trong nhật trình được ghi dưới đây để tiện theo dõi:",
-'semiprotectedpagemovewarning' => "'''Lưu ý:''' Trang này đã bị khóa và chỉ có các thành viên đã đăng ký mới có thể di chuyển được.
+'semiprotectedpagemovewarning' => "'''Lưu ý:''' Trang này đã bị khóa nên chỉ có các thành viên có tài khoản mới có thể di chuyển được.
 Thông tin mới nhất trong nhật trình được ghi dưới đây để tiện theo dõi:",
 'move-over-sharedrepo' => '== Tập tin đã tồn tại ==
 [[:$1]] đã tồn tại trong kho dùng chung. Nếu đổi tên tập tin thành tên này thì sẽ ghi đè lên tập tin dùng chung.',
@@ -3702,19 +3702,19 @@ Chương trình thư báo rằng: $1',
 'confirmemail_error' => 'Có trục trặc khi lưu xác nhận của bạn.',
 'confirmemail_subject' => 'Xác nhận thư điện tử tại {{SITENAME}}',
 'confirmemail_body' => 'Ai đó, có thể là bạn, từ địa chỉ IP $1,
-đã đăng ký tài khoản có tên "$2" với địa chỉ thư điện tử này tại {{SITENAME}}.
+đã mở tài khoản có tên "$2" với địa chỉ thư điện tử này tại {{SITENAME}}.
 
 Để xác nhận rằng tài khoản này thực sự là của bạn và để kích hoạt tính năng thư điện tử tại {{SITENAME}}, xin mở liên kết này trong trình duyệt:
 
 $3
 
-Nếu bạn *không* đăng ký tài khoản, hãy nhấn vào liên kết này
+Nếu bạn *không* mở tài khoản, hãy nhấn vào liên kết này
 để hủy thủ tục xác nhận địa chỉ thư điện tử:
 
 $5
 
 Mã xác nhận này sẽ hết hạn vào $4.',
-'confirmemail_body_changed' => 'Ai đó, có thể là bạn, từ địa chỉ IP $1, đã đăng ký tài khoản có
+'confirmemail_body_changed' => 'Ai đó, có thể là bạn, từ địa chỉ IP $1, đã mở tài khoản có
 tên "$2" với địa chỉ thư điện tử này tại {{SITENAME}}.
 
 Để xác nhận rằng tài khoản này thực sự là của bạn và để kích hoạt tính năng
index 74cc1a1..591066d 100644 (file)
@@ -221,6 +221,7 @@ $messages = array(
 'vector-action-protect' => 'Panalipda',
 'vector-action-undelete' => 'Igbalik an ginpara',
 'vector-action-unprotect' => 'Liwani an panalipod',
+'vector-simplesearch-preference' => 'Ginpadulot an yinano nga pamiling nga kahon (Panit vector la)',
 'vector-view-create' => 'Himo-a',
 'vector-view-edit' => 'Igliwat',
 'vector-view-history' => 'Kitaa an kaagi',
@@ -456,6 +457,7 @@ An magdudurmara nga nagtrangka hini in naghatag hini nga eksplenasyon: "$3".',
 'exception-nologin-text' => 'Ini nga pakli o pagbuhat in nagkikinahanglan nga ikaw in mag-log-in ha dinhi nga wiki.',
 
 # Virus scanner
+'virus-scanfailed' => 'Nagpalya an pag-scan (kodigo $1)',
 'virus-unknownscanner' => 'diri-nasasabtan nga antivirus:',
 
 # Login and logout pages
@@ -523,12 +525,17 @@ Alayon pagutro pagbutang.',
 'login-abort-generic' => 'An imo paglog-in in diri malinamposon - Naundang',
 'loginlanguagelabel' => 'Pinulongan: $1',
 
+# E-mail sending
+'php-mail-error-unknown' => 'Waray kasabti ha kanan PHP mail() function.',
+
 # Change password dialog
 'resetpass' => 'Igliwat an tigaman-pagsulod',
 'resetpass_header' => 'Igliwan an akawnt nga tigaman-pagsulod',
 'oldpassword' => 'Daan nga tigaman-pagsulod:',
 'newpassword' => 'Bag-o nga tigaman-pagsulod:',
 'retypenew' => 'Utroha pagbutang an bag-o nga tigaman-pagsulod:',
+'resetpass_success' => 'Malinamposon nga nasalyuan na an imo tigaman-pagsulod!
+Ikaw in naglalog-in yana...',
 'resetpass_forbidden' => 'Diri mababalyoan an mga tigaman-pagsulod',
 'resetpass-no-info' => 'Kinahanglan mo paglog-in para direkta ka makasakob dinhi nga pakli.',
 'resetpass-submit-loggedin' => 'Igbal-iw an tigaman-pagsulod',
@@ -538,6 +545,7 @@ Alayon pagutro pagbutang.',
 # Special:PasswordReset
 'passwordreset' => 'igreset an tigaman-hit-pagsulod',
 'passwordreset-text' => 'Kompletoha ini nga porma para makakarawat hin email hin pahinumdom han detalye han akawnt.',
+'passwordreset-legend' => 'igreset an tigaman-hit-pagsulod',
 'passwordreset-username' => 'Agnay hiton gumaramit:',
 'passwordreset-domain' => 'Dominyo:',
 'passwordreset-capture' => 'Kikitaon mo an resulta nga e-mail?',
@@ -546,6 +554,8 @@ Alayon pagutro pagbutang.',
 'passwordreset-emailelement' => 'Agnay han gumaramit: $1
 Temporaryo nga tigaman han pagsakob: $2',
 'passwordreset-emailsent' => 'Ginpadara hin usa ka pahinumdom nga e-mail.',
+'passwordreset-emailsent-capture' => 'Mayda pahinumdom nga ginpadangat ha im e-mail, kun diin ini in ginpapakita ha ubos.',
+'passwordreset-emailerror-capture' => 'Mayda pahinumdom nga e-mail han nahimo, kun diin ini in ginpapakita ha ubos, pero an pagpadangat ngada ha gumaramit in nagpalya: $1',
 
 # Special:ChangeEmail
 'changeemail' => 'Igliwan an e-mail address',
@@ -588,6 +598,7 @@ Temporaryo nga tigaman han pagsakob: $2',
 'showdiff' => 'Igpakita an mga ginliwat',
 'anoneditwarning' => "'''Pahimatngon:''' Diri ka pa naka log-in.
 An imo IP address in maitatala ha kaagi hinin pakli han pagliwat.",
+'anonpreviewwarning' => "''Diri ka naka-log in.  Mahisusurat an imo IP address ngada ha kanan pakli kaagi hit pagliwat kun igtipig nimo.''",
 'missingsummary' => "'''Pahinumdom:''' Waray ka nagbutang hin dalikyat nga sumat han pagliwat.
 Kun pidliton mo an \"{{int:savearticle}}\" utro, an imo ginliwat in matitipig bisan waray hini.",
 'missingcommenttext' => 'Alayon pagbutang hin komento ha ilarom.',
@@ -597,6 +608,8 @@ Kun pidliton mo an \"{{int:savearticle}}\" utro, an imo ginliwat in matitipig bi
 'blockednoreason' => 'waray katadungan nga ginhatag',
 'whitelistedittext' => 'Kinahanglan mo mag-$1 para makaliwat han mga pakli.',
 'nosuchsectiontitle' => 'Waray kaagi-i an bahin',
+'nosuchsectiontext' => 'Imo ginliwat an seksyon nga waray dida.
+Ini in puydi binmalhin o napara samtang ikaw in nagkikita han pakli.',
 'loginreqtitle' => 'Nagkikinahanglan hin pan-sakob',
 'loginreqlink' => 'Magpasabot nga masakob',
 'loginreqpagetext' => 'Kinahanglan mo mag-$1 para makakita ha iba nga mga pakli.',
@@ -631,7 +644,10 @@ Nasaad ka liwat nga imo ini kalugaringon nga ginsurat, o ginkopya nimo ini tikan
 'template-protected' => '(pinaliporan)',
 'template-semiprotected' => '(katunga nga pinasaliporan)',
 'hiddencategories' => 'Ini nga pakli in api han {{PLURAL:$1|1 nakatago nga kaarangay|$1 nakatago nga kaarangay}}:',
+'nocreatetitle' => 'Limitado an pahimo hin pakli',
 'nocreate-loggedin' => 'Diri ka gintutugotan paghimo hin mga bag-o nga pakli.',
+'sectioneditnotsupported-title' => 'Diri suportado han pagliwat han seksyon',
+'sectioneditnotsupported-text' => 'Diri suportado an pagliwat han seksyon ha dinhi nga pakli.',
 'permissionserrors' => 'Mga sayop hin mga pagtugot',
 'permissionserrorstext' => 'Diri ka gintutugotan pagbuhat hito, mahitungod han mga nasunod nga {{PLURAL:$1|katadungan|mga katadungan}}:',
 'permissionserrorstext-withaction' => 'Waray ka permiso han $2, tungod han masunod nga {{PLURAL:$1|rason|mga rason}}:',
@@ -647,6 +663,7 @@ An taramdan han pagpara ngan pagbalhin para han pakli in ginhahatag ha ubos para
 'edit-already-exists' => 'Diri nakakahimo hin bag-o nga pakli.
 Aada na ito.',
 'defaultmessagetext' => 'Aada-nga-daan nga teksto han mensahe',
+'content-not-allowed-here' => 'An sulod nga "$1" in diri gintutugotan ha pakli nga [[$2]]',
 
 # Content models
 'content-model-wikitext' => 'wikiteksto',
@@ -702,8 +719,14 @@ Leyenda: '''({{int:cur}})''' = kaibhan ha giuurhii nga pag-bag-o, '''({{int:last
 'rev-suppressed-no-diff' => "Diri mo makikita ini nga kaibhan tungod nga usa ha mga rebisyon in '''ginpara'''.",
 'rev-delundel' => 'igpakita/igtago',
 'rev-showdeleted' => 'igpakita',
+'revisiondelete' => 'Pagpara/pagtanggal han pagpara nga mga rebisyon',
+'revdelete-nologtype-title' => 'Waray ginhatag nga klase hit talaan',
 'revdelete-show-file-confirm' => 'Sigurado ka nga gusto mo makita an ginpara nga pagliwat han file "<nowiki>$1</nowiki>" tikang $2 ha $3?',
 'revdelete-show-file-submit' => 'Oo',
+'revdelete-hide-text' => 'Tagoon an rebisyon han teksto',
+'revdelete-hide-image' => 'Tagoon an sulod han paypay',
+'revdelete-hide-name' => 'Tagoon an buhat ngan kakadtoan',
+'revdelete-hide-comment' => 'Tagoon an dalikyat nga sumat han pagliwat',
 'revdelete-radio-same' => '(ayaw balyu-e)',
 'revdelete-radio-set' => 'Oo',
 'revdelete-radio-unset' => 'Ayaw',
@@ -726,16 +749,21 @@ Diri mo ini malalabtan.',
 'mergehistory' => 'Igtampo an mga kasaysayan han pakli',
 'mergehistory-from' => 'Ginkuhaan nga pakli:',
 'mergehistory-into' => 'Kakadtoan nga pakli:',
+'mergehistory-submit' => 'Igtampo an mga rebisyon',
+'mergehistory-empty' => 'Waray mga rebisyon in puydi matampo.',
 'mergehistory-no-source' => 'Waray pa an tinikangan nga pakli nga $1.',
 'mergehistory-no-destination' => 'Waray pa an kakadtuan nga pakli nga $1.',
+'mergehistory-comment' => 'Gintampo an [[:$1]] ngada ha [[:$2]]: $3',
 'mergehistory-same-destination' => 'An gintikangan ngan kakadtoan nga mga pakli in diri puydi magkaparo',
 'mergehistory-reason' => 'Katadungan:',
 
 # Merge log
+'mergelog' => 'Talaan hin pagtampo',
 'revertmerge' => 'Igbulag an gintampo',
 
 # Diffs
 'history-title' => "Kaagi han pagbag-o han ''$1''",
+'difference-multipage' => '(Kaibhan ha butnga han mga pakli)',
 'lineno' => 'Bagis $1:',
 'compareselectedversions' => 'Igkumpara an mga pinili nga pagbabag-o',
 'editundo' => 'Igpawara an ginbuhat',
@@ -744,6 +772,8 @@ Diri mo ini malalabtan.',
 # Search results
 'searchresults' => 'Mga nabilingan han pagbiling',
 'searchresults-title' => 'Mga nabilngan han pagbiling para han "$1"',
+'searchsubtitleinvalid' => "Imo ginpamiling an '''$1'''",
+'toomanymatches' => 'Sobra kadamo nga mga igo an ginbalik, alayon pagbuhat hin iba nga pakiana',
 'prevn' => 'naha-una nga {{PLURAL:$1|$1}}',
 'nextn' => 'sunod nga {{PLURAL:$1|$1}}',
 'prevn-title' => 'Nahiuna $1 {{PLURAL:$1|resulta|mga resulta}}',
@@ -771,6 +801,7 @@ Diri mo ini malalabtan.',
 'search-suggest' => 'Buot sidngon mo ba: $1',
 'search-interwiki-caption' => 'Mga bugto nga proyekto',
 'search-interwiki-default' => '$1 nga resulta:',
+'search-interwiki-more' => '(damo pa)',
 'search-relatedarticle' => 'kasumapy',
 'searchrelated' => 'kadugtong',
 'searchall' => 'ngatanan',
@@ -778,6 +809,8 @@ Diri mo ini malalabtan.',
 'search-nonefound' => 'Waray resulta an nakakabaton han pakiana.',
 'powersearch' => 'Abansado nga pagbiling',
 'powersearch-legend' => 'Abansado nga pagbiling',
+'powersearch-ns' => "Pamiling ha mga ngaran-lat'ang:",
+'powersearch-redir' => 'Talaan hin mga redirect',
 'powersearch-field' => 'Bilnga an',
 'powersearch-togglelabel' => 'Panginano-a:',
 'powersearch-toggleall' => 'Ngatanan',
@@ -799,15 +832,21 @@ Ginpapasabot nga an sulod han mga panudlok han {{SITENAME}} in bangin daan an.',
 'preferences' => 'Mga karuyag',
 'mypreferences' => 'Akon mga karuyag',
 'prefs-edits' => 'Ihap han mga pagliwat:',
+'prefsnologin' => 'Diri nakalog-in',
 'changepassword' => 'Igliwan an tigaman-pagsulod',
 'prefs-skin' => 'Panit',
 'skin-preview' => 'Pahiuna nga pagawas',
 'datedefault' => 'Waray pinaurog nga karuyag',
 'prefs-datetime' => 'Pitsa ngan oras',
+'prefs-user-pages' => 'Mga pakli hin gumaramit',
 'prefs-personal' => 'Pangilal-an han nagamit',
 'prefs-rc' => 'Kalalabay la nga mga pagbabag-o',
 'prefs-watchlist-days' => 'Mga adlaw nga makikita ha barantayan:',
+'prefs-watchlist-days-max' => 'Pinakadamo $1 {{PLURAL:$1|ka adlaw|ka mga adlaw}}',
+'prefs-watchlist-edits-max' => 'Pinakadako nga ihap: 1000',
 'prefs-resetpass' => 'Igliwan an tigaman-pagsulod',
+'prefs-changeemail' => 'Igliwan an e-mail address',
+'prefs-email' => 'Mga pagpipilian han e-mail',
 'prefs-rendering' => 'Hitsura',
 'saveprefs' => 'Igtipig',
 'resetprefs' => 'Pabay-i an diri nakatipig nga mga pagbabag-o',
@@ -818,9 +857,12 @@ Ginpapasabot nga an sulod han mga panudlok han {{SITENAME}} in bangin daan an.',
 'columns' => 'Mga rumbay patindog:',
 'searchresultshead' => 'Bilnga',
 'resultsperpage' => 'Mga igo kada pakli:',
+'stub-threshold-disabled' => 'Waray ginpagana',
+'recentchangesdays-max' => 'Pinakadamo $1 {{PLURAL:$1|ka adlaw|ka mga adlaw}}',
 'savedprefs' => 'Gintipig an im karuyag.',
 'timezonelegend' => 'Zona hin oras',
 'localtime' => 'Oras nga lokal',
+'timezoneuseserverdefault' => 'Gamita an aada-nga-daan han wiki ($1)',
 'servertime' => 'Oras han serbidor:',
 'guesstimezone' => 'Butanga tikang han panngaykay(browser)',
 'timezoneregion-africa' => 'Aprika',
@@ -859,11 +901,15 @@ An imo e-mail address in diri makikit-an kun an iba nga mga gumaramit in makonta
 'prefs-info' => 'Panguna nga pananabotan',
 'prefs-i18n' => 'Internasyonalisasyon',
 'prefs-signature' => 'Pirma',
+'prefs-dateformat' => 'Batakan han petsa',
 'prefs-advancedediting' => 'Abansado nga mga pagpipilian',
 'prefs-advancedrc' => 'Abansado nga mga pagpipilian',
 'prefs-advancedrendering' => 'Abansado nga mga pagpipilian',
 'prefs-advancedsearchoptions' => 'Abansado nga mga pagpipilian',
 'prefs-advancedwatchlist' => 'Abansado nga mga pagpipilian',
+'prefs-displayrc' => 'Mga pirilion hiunong han ginpapakita',
+'prefs-displaysearchoptions' => 'Mga pirilion hiunong han ginpapakita',
+'prefs-displaywatchlist' => 'Mga pirilion hiunong han ginpapakita',
 'prefs-diffs' => 'Mga kaibhan',
 
 # User preference: e-mail validation using jQuery
@@ -874,7 +920,7 @@ An imo e-mail address in diri makikit-an kun an iba nga mga gumaramit in makonta
 'userrights-lookup-user' => 'Pagdumaraa han mga hugpo han gumaramit',
 'userrights-user-editname' => 'Igbutang an agnay han gumaramit:',
 'editusergroup' => 'Igliwat han mga hugpo han gumaramit',
-'editinguser' => "Igliliwat an mga katungod han gumaramit han gumaramit '''[[Gumaramit:$1|$1]]''' $2",
+'editinguser' => "Igliliwat an mga katungod han gumaramit han gumaramit '''[[User:$1|$1]]''' $2",
 'userrights-editusergroup' => 'Igliwat an mga hugpo hin gumaramit',
 'saveusergroups' => 'Igtipig an mga hugpo han gumaramit',
 'userrights-groupsmember' => 'Api han:',
@@ -929,21 +975,48 @@ Diri ka gintutugotan pagliwat han mga katungod han gumaramit ha iba nga mga wiki
 'right-block' => 'Pugnga an iba nga mga gumaramit ha pagliwat',
 'right-blockemail' => 'Pugnga an uska gumaramit tikang ha pagpadangat hin e-mail',
 'right-hideuser' => 'Pugnga an uska agnay-hin-gumaramit, tago-a ito tikang ha publiko',
+'right-unblockself' => 'Lugaring nga makakatanggal han pagpugong',
+'right-editusercssjs' => 'Igliwat an kanan iba mga gumaramit nga mga paypay han CSS ngan JavaScript',
+'right-editusercss' => 'Igliwat an kanan iba mga gumaramit nga mga paypay han CSS',
+'right-edituserjs' => 'Iliwat an kanan iba mga gumaramit nga paypay han JavaScript',
+'right-import' => 'Man-aangbit hin mga pakli tikang ha iba nga mga wiki',
+'right-importupload' => 'Man-aangbit hin mga pakli tikang ha uska paypay nga iginkarga-pasaka',
+'right-mergehistory' => 'Igtampo an kaagi han mga pakli',
+'right-userrights' => 'Igliwat an ngatanan nga mga katungod han gumaramit',
+'right-userrights-interwiki' => 'Igliwat an mga katungod han gumaramit han mga gumaramit ha iba nga mga wiki',
+'right-sendemail' => 'Padad-i hin e-mail ngada ha iba nga mga gumaramit',
 
 # User rights log
+'rightslog' => 'Talaan hin mga katungod han gumaramit',
 'rightsnone' => '(waray)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'basaha ini nga pakli',
 'action-edit' => 'liwata ini nga pakli',
 'action-createpage' => 'pahimo hin mga pakli',
+'action-createtalk' => 'Paghimo hin hiruhimangraw nga mga pakli',
+'action-createaccount' => 'Himoa ini nga akawnt hin gumaramit',
 'action-minoredit' => 'butanga hin tigaman hinin nga pagliwat komo gutiay',
 'action-move' => 'balhina ini nga pakli',
+'action-move-subpages' => 'igbalhin ini nga pakli, ngan iya mga bahin-pakli',
+'action-move-rootuserpages' => 'Igbalhin an gamot nga mga pakli han gumaramit',
 'action-movefile' => 'igbalhin ini nga paypay',
 'action-upload' => 'igkarga-pasaka ini nga paypay',
 'action-reupload' => 'igsapaw ini nga aanhi nga paypay',
+'action-upload_by_url' => 'igkaraga-pasaka ini nga paypay tikang ha uska URL',
 'action-delete' => 'paraa ini nga pakli',
 'action-deleterevision' => 'igpara ini nga pagbag-o',
+'action-deletedhistory' => 'kitaa an kanan hini nga pakli kaagi han mga ginpara',
+'action-browsearchive' => 'Pamiling hin mga ginpara nga mga pakli',
+'action-undelete' => 'Balika an ginpara hini nga pakli',
+'action-suppressionlog' => 'kitaa an kanan hini pribado nga talaan',
+'action-block' => 'Pugnga ini nga gumaramit ha pagliwat',
+'action-protect' => 'igsaliwan an katupngan han pananalipod para hini nga pakli',
+'action-import' => 'ig-angbit ini nga pakli tikang ha iba nga wiki',
+'action-importupload' => 'ig-angbit ini nga pakli tikang ha uska ginkarga-pasaka nga paypay',
+'action-mergehistory' => 'Igtampo an kaagi hini nga pakli',
+'action-userrights' => 'Igliwat an ngatanan nga mga katungod han gumaramit',
+'action-sendemail' => 'Padara hin mga e-mail',
 
 # Recent changes
 'nchanges' => '$1 {{PLURAL:$1|pagbag-o|mga pagbabag-o}}',
@@ -973,8 +1046,10 @@ Diri ka gintutugotan pagliwat han mga katungod han gumaramit ha iba nga mga wiki
 'newpageletter' => 'B',
 'boteditletter' => 'b',
 'rc_categories_any' => 'Bisan ano nga',
+'newsectionsummary' => '/* $1 */ bag-o nga bahin',
 'rc-enhanced-expand' => 'Igpakita an detalye (nagkikinahanglan hin JavaScript)',
 'rc-enhanced-hide' => 'Igtago an mga detalye',
+'rc-old-title' => 'orihinal nga ginhimo komo "$1"',
 
 # Recent changes linked
 'recentchangeslinked' => 'Mga may kalabotan nga binag-o',
@@ -990,10 +1065,14 @@ Mga pakli ha [[Special:Watchlist|imo angay timan-an]] in naka-'''bold'''.",
 # Upload
 'upload' => 'Pagkarga hin file',
 'uploadbtn' => 'Igkarga an file',
+'reuploaddesc' => 'Undanga an pagkarga-pasaka ngan balik ngadto ha porma han pagkarga-pasaka',
 'uploadnologin' => 'Diri nakalog-in',
+'uploaderror' => 'Sayop hit pagkarga-pasaka',
 'upload-recreate-warning' => "'''Pahimatngon:  An fayl nga may-ada hiton nga ngaran in ginpara o ginbalhin.'''
 
 An taramdan han pagpara ngan pagbalhin para hini nga pakli in ginhahatag para han imo kamurayaw:",
+'upload-permitted' => 'Gintutugotan nga mga klase han paypay: $1.',
+'upload-prohibited' => 'Gindidire nga mga klase han paypay: $1.',
 'uploadlog' => 'Talaan hin ginkarga-pasaka',
 'uploadlogpage' => 'Talaan han mga ginkarga-paigbaw',
 'filename' => 'Ngaran han fayl',
@@ -1002,6 +1081,7 @@ An taramdan han pagpara ngan pagbalhin para hini nga pakli in ginhahatag para ha
 'filereuploadsummary' => 'Mga pagbal-iw ha fayl:',
 'filesource' => 'Tinikangan:',
 'ignorewarning' => 'Pabay-i an pahimatngon ngan igtipig la ngahaw',
+'ignorewarnings' => 'Pasagdi an bisan ano nga mga pahimatngon',
 'filename-toolong' => 'Iton ngaran hin paypay in diri puyde na mas lapos pa ha 240 ka mga byte.',
 'badfilename' => 'An ngaran-han-paypay in ginliwat ngada ha "$1".',
 'filename-tooshort' => 'An ngaran han fayl in halipot hin duro.',
@@ -1010,6 +1090,8 @@ An taramdan han pagpara ngan pagbalhin para hini nga pakli in ginhahatag para ha
 'unknown-error' => 'Nahitabo an waray kasasabti nga sayop.',
 'tmp-create-error' => 'Diri makakahimo hin temporaryo nga paypay.',
 'tmp-write-error' => 'Sayop ha pagsurat hin temporaryo nga paypay.',
+'large-file' => 'Ginrerekomenda nga it mga paypay in diri malapos hin $1;
+ini nga paypay in $2.',
 'largefileserver' => 'Ini nga paypay in durudako kaysa ha ginpapakarawat han serbidor.',
 'uploadwarning' => 'Pahimatngon han pagkarga paigbaw',
 'savefile' => 'Igtipig an paypay',
@@ -1043,11 +1125,13 @@ $1',
 'upload-proto-error' => 'Sayop nga protocol',
 'upload-file-error' => 'Sayop ha sulod',
 'upload-unknown-size' => 'Waray kasabti an kadako',
+'upload-http-error' => 'Mayda nahitabo nga sayop hin HTTP: $1',
 
 # File backend
+'backend-fail-notexists' => 'Waray ngada an paypay nga $1.',
 'backend-fail-delete' => 'Diri nakakapara han paypay nga "$1".',
 'backend-fail-alreadyexists' => 'May-ada na paypay nga "$1".',
-'backend-fail-store' => 'Diri nakakatipig han paypay "$1" ha "$".',
+'backend-fail-store' => 'Diri nakakatipig han paypay "$1" ha "$2".',
 'backend-fail-copy' => 'Diri nakakakopya han paypay nga "$1" ngada "$2".',
 'backend-fail-move' => 'Diri nakakabalhin han paypay "$1" ngada "$2".',
 'backend-fail-opentemp' => 'Diri nakakaabre han temporaryo nga paypay.',
@@ -1060,10 +1144,15 @@ $1',
 
 # img_auth script messages
 'img-auth-accessdenied' => 'Diri gintutugutan makasulod',
+'img-auth-nofile' => 'Waray ngada an paypay nga "$1".',
 
 # HTTP errors
 'http-host-unreachable' => 'Diri nakakaabot ha URL.',
 
+# Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
+'upload-curl-error6' => 'Diri nakakaabot ha URL',
+'upload-curl-error28' => 'Linmapos ha oras an pagkarga-pasaka',
+
 'license' => 'Palilisensya:',
 'license-header' => 'Palilisensya:',
 'nolicense' => 'Waray napili',
@@ -1101,7 +1190,9 @@ $1',
 Alayon pagkita han [$2 nga pakli hin pagpahayag mahitungod hini nga fayl] para hin dugang nga kasayuran.',
 'sharedupload-desc-here' => 'An fayl in tikang ha $1 ngan puydi mahigamitan para han iba nga mga proyekto.
 An paglaladawan han iya [$2 fayl han paglaladawan nga pakli] didto in ginpapakita ha sirong.',
+'uploadnewversion-linktext' => 'Igkarga-pasaka an ba-o nga bersyon hini nga paypay',
 'shared-repo-from' => 'tikang $1',
+'upload-disallowed-here' => 'Diri nimo masasapaw ini nga paypay.',
 
 # File reversion
 'filerevert-comment' => 'Rason:',
@@ -1114,11 +1205,19 @@ An paglaladawan han iya [$2 fayl han paglaladawan nga pakli] didto in ginpapakit
 'filedelete-success' => "Napara an '''$1'''",
 'filedelete-otherreason' => 'Lain/dugang nga katadungan:',
 'filedelete-reason-otherlist' => 'Lain nga katadungan',
+'filedelete-edit-reasonlist' => 'Igliwat an mga rason han pagpara',
+'filedelete-maintenance-title' => 'Diri nakakapara han paypay',
 
 # MIME search
+'mimesearch' => 'MIME nga pamiling',
+'mimetype' => 'MIME nga klase:',
 'download' => 'pagkarga paubos',
 
+# List redirects
+'listredirects' => 'Talaan hin mga redirect',
+
 # Unused templates
+'unusedtemplates' => 'Waray kagamiti nga mga batakan',
 'unusedtemplateswlh' => 'iba nga mga sumpay',
 
 # Random page
@@ -1147,11 +1246,15 @@ An paglaladawan han iya [$2 fayl han paglaladawan nga pakli] didto in ginpapakit
 'disambiguations' => 'Mga pakli nga nasumpay ha mga pansayod nga pakli',
 'disambiguationspage' => 'Template:pansayod',
 
+'brokenredirects' => 'Mga redirect nga utod',
 'brokenredirects-edit' => 'igliwat',
 'brokenredirects-delete' => 'paraa',
 
+'withoutinterwiki' => 'Mga pakli nga waray sumpay nga yinaknan',
 'withoutinterwiki-submit' => 'Igpakita',
 
+'fewestrevisions' => 'Mga pakli nga may pinakagutiay nga mga rebisyon',
+
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|nga byte|nga mga byte}}',
 'ncategories' => '$1 {{PLURAL:$1|nga kaarangay|nga mga kaarangay}}',
@@ -1177,7 +1280,11 @@ An paglaladawan han iya [$2 fayl han paglaladawan nga pakli] didto in ginpapakit
 'prefixindex' => 'Ngatanan nga pakli nga may-ada pahiuna-nga-sumpay',
 'shortpages' => 'Haglipot nga mga pakli',
 'longpages' => 'Haglaba nga mga pakli',
+'deadendpages' => 'Waray na kakadtoan nga mga pakli',
+'protectedpages' => 'Pinapasaliporan nga mga pakli',
 'listusers' => 'Lista han mga gumaramit',
+'listusers-creationsort' => 'Ginsusunodsunod pinaagi han paghimo nga petsa',
+'usereditcount' => '$1 {{PLURAL:$1|ka pagliwat|ka mga pagliwat}}',
 'usercreated' => '{{GENDER:$3|Ginhimo}} han $1 ha $2',
 'newpages' => 'Bag-o nga mga pakli',
 'newpages-username' => 'Agnay hiton gumaramit:',
@@ -1185,6 +1292,7 @@ An paglaladawan han iya [$2 fayl han paglaladawan nga pakli] didto in ginpapakit
 'move' => 'Balhina',
 'movethispage' => 'Balhina ini nga pakli',
 'notargettitle' => 'Waray iiguon',
+'nopagetitle' => 'Waray sugad hito nga kakadtoan nga pakli',
 'pager-newer-n' => '{{PLURAL:$1|burubag-o 1|burubag-o $1}}',
 'pager-older-n' => '{{PLURAL:$1|durudaan 1|durudaan $1}}',
 
@@ -1197,6 +1305,7 @@ An paglaladawan han iya [$2 fayl han paglaladawan nga pakli] didto in ginpapakit
 'specialloguserlabel' => 'Magburuhat:',
 'speciallogtitlelabel' => 'iiguon (titulo o gumarami):',
 'log' => 'Mga talaan',
+'all-logs-page' => 'Ngatanan nga mga talaan panpubliko',
 
 # Special:AllPages
 'allpages' => 'Ngatanan nga mga pakli',
@@ -1211,6 +1320,10 @@ An paglaladawan han iya [$2 fayl han paglaladawan nga pakli] didto in ginpapakit
 'allpagesprev' => 'Naha-una',
 'allpagesnext' => 'Sunod',
 'allpagessubmit' => 'Kadto-a',
+'allpages-bad-ns' => '{{SITENAME}} in waray ngaran-lat\'ang nga "$1".',
+
+# SpecialCachedPage
+'cachedspecial-refresh-now' => 'Igkita an pinakaurhi.',
 
 # Special:Categories
 'categories' => 'Mga kaarangay',
@@ -1257,6 +1370,14 @@ An paglaladawan han iya [$2 fayl han paglaladawan nga pakli] didto in ginpapakit
 
 # E-mail user
 'emailuser' => 'Ig-e-mail ini nga gumaramit',
+'emailuser-title-target' => 'Ig-E-mail ini nga {{HENERO:$1|gumaramit}}',
+'emailuser-title-notarget' => 'Gumaramit han e-mail',
+'emailpage' => 'Gumaramit han e-mail',
+'defemailsubject' => '{{SITENAME}} e-mail tikang kan gumaramit na hi "$1"',
+'usermaildisabled' => 'Waray ginpagana an e-mail han gumaramit',
+'usermaildisabledtext' => 'Diri ka makakapadangat hin e-mail ha iba nga mga gumaramit ha dinhi nga wiki',
+'noemailtitle' => 'Waray e-mail address',
+'nowikiemailtitle' => 'Waray gintutugutan nga e-mail',
 'emailusername' => 'Agnay hiton gumaramit:',
 'emailfrom' => 'Tikang kan:',
 'emailto' => 'Para kan:',
@@ -1266,10 +1387,15 @@ An paglaladawan han iya [$2 fayl han paglaladawan nga pakli] didto in ginpapakit
 'emailccme' => 'Igemail ako hini nga kopya hit ak buot igpasabot.',
 'emailsent' => 'Napadara an e-mail',
 
+# User Messenger
+'usermessage-summary' => 'Nabilin hin mensahe pansistema',
+'usermessage-editor' => 'Mensahero han sistema',
+
 # Watchlist
 'watchlist' => 'Akon barantayan',
 'mywatchlist' => 'Akon angay timan-an',
 'watchlistfor2' => 'Para ha $1 $2',
+'watchnologin' => 'Diri nakalog-in',
 'watch' => 'Bantayi',
 'watchthispage' => 'Bantayi ini nga pakli',
 'unwatch' => 'Pabay-i an pagbantay',
@@ -1278,11 +1404,14 @@ An paglaladawan han iya [$2 fayl han paglaladawan nga pakli] didto in ginpapakit
 'watchlist-options' => 'Mga pirilian han talaan han binabantayan',
 
 'enotif_newpagetext' => 'Ini in bag-o nga pakli.',
+'enotif_impersonal_salutation' => 'gumaramit han {{SITENAME}}',
+'changed' => 'naliwanan',
 'created' => 'nahimo',
 'enotif_anon_editor' => 'waray magpakilala nga gumaramit $1',
 
 # Delete
 'deletepage' => 'Igpara an pakli',
+'confirm' => 'Kompirma',
 'excontent' => "An sulod in: ''$1''",
 'excontentauthor' => 'an sulod in: \'\'$1\'\' (ngan hi "[[Special:Contributions/$2|$2]]" la an nag-amot)',
 'exblank' => 'waray sulod an pakli',
@@ -1293,12 +1422,16 @@ An paglaladawan han iya [$2 fayl han paglaladawan nga pakli] didto in ginpapakit
 'deletedtext' => 'Ginpara an "$1".
 Kitaa an $2 para hin talaan han mga gibag-ohi nga mga ginpamara.',
 'dellogpage' => 'Talaan han mga ginpara',
+'deletionlog' => 'Talaan han mga ginpara',
+'reverted' => 'Ginbalik ha uruuna nga rebisyon',
 'deletecomment' => 'Katadungan:',
+'deleteotherreason' => 'Lain/dugang nga katadungan:',
 'deletereasonotherlist' => 'Lain nga katadungan',
 'deletereason-dropdown' => "*Agsob nga rason hin pagpara
 ** Tugon han manunurat
 ** Pagtalapas ha katungod hin pagtatag-iya (''copyright'')
 ** Bandalismo",
+'delete-edit-reasonlist' => 'Igliwat an mga rason han pagpara',
 
 # Rollback
 'rollback' => 'Mga libot-pabalik nga pagliwat',
@@ -1318,11 +1451,15 @@ Kitaa an $2 para hin talaan han mga gibag-ohi nga mga ginpamara.',
 'protect-otherreason' => 'Lain/dugang nga katadongan:',
 'protect-otherreason-op' => 'Lain nga katadongan',
 'restriction-type' => 'Pagtugot:',
+'minimum-size' => 'Pinakaguti nga kadako',
+'maximum-size' => 'Pinakadako nga kadako:',
+'pagesize' => '(mga byte)',
 
 # Restrictions (nouns)
 'restriction-edit' => 'Igliwat',
 'restriction-move' => 'Balhina',
 'restriction-create' => 'Himo-a',
+'restriction-upload' => 'Igkarga-pasaka',
 
 # Restriction levels
 'restriction-level-all' => 'bisan ano nga katupngan',
@@ -1332,6 +1469,10 @@ Kitaa an $2 para hin talaan han mga gibag-ohi nga mga ginpamara.',
 'undeletelink' => 'igpakita/igbalik',
 'undeleteviewlink' => 'kitaa',
 'undeletecomment' => 'Katadungan:',
+'cannotundelete' => 'Nagpalya an pabalik han pinara:
+$1',
+'undelete-search-title' => 'Pamiling hin mga ginpara nga mga pakli',
+'undelete-search-box' => 'Pamiling hin mga ginpara nga mga pakli',
 'undelete-search-submit' => 'Bilnga',
 'undelete-show-file-submit' => 'Oo',
 
@@ -1351,6 +1492,7 @@ Kitaa an $2 para hin talaan han mga gibag-ohi nga mga ginpamara.',
 'year' => 'Tikang ha tuig (ngan uruunhan):',
 
 'sp-contributions-newbies' => 'Igpakita an mga amot hin mga bag-o nga akawnt la',
+'sp-contributions-newbies-sub' => 'Para han bag-o nga mga akawnt',
 'sp-contributions-blocklog' => 'Talaan han pagpugong',
 'sp-contributions-uploads' => 'mga ginkarga-paigbaw',
 'sp-contributions-logs' => 'Mga talaan',
@@ -1394,10 +1536,12 @@ Kitaa an $2 para hin talaan han mga gibag-ohi nga mga ginpamara.',
 ** Pan-abusar hin dirudilain nga mga akawnt
 ** Diri makakarawat nga agnay-hit-gumaramit',
 'ipbsubmit' => 'Pugngi ini nga gumaramit',
+'ipbother' => 'Iba nga oras:',
 'ipboptions' => '2 ka oras:2 hours,1 ka adlaw:1 day,3 ka adlaw:3 days,1 ka semana:1 week,2 ka semana:2 weeks,1 ka bulan:1 month,3 ka bulan:3 months,6 ka bulan:6 months,1 ka tuig:1 year,waray katapusan:infinite',
 'ipbotheroption' => 'iba',
 'ipbotherreason' => 'Lain/dugang nga katadungan:',
 'blockipsuccesssub' => 'Malinamposon an pagpugong',
+'ipb-edit-dropdown' => 'Igliwat an mga rason han pagpugong',
 'ipblocklist' => 'Mga ginpugngan nga gumaramit',
 'blocklist-target' => 'Gin-iigo',
 'blocklist-expiry' => 'Napan-os',
@@ -1405,15 +1549,20 @@ Kitaa an $2 para hin talaan han mga gibag-ohi nga mga ginpamara.',
 'blocklist-reason' => 'Rason:',
 'ipblocklist-submit' => 'Bilnga',
 'ipblocklist-localblock' => 'Lokal nga pagpugong',
+'ipblocklist-otherblocks' => 'Iba {{PLURAL:$1|ka pagpugong|ka mga pagpugong}}',
 'blocklink' => 'igpugong',
 'unblocklink' => 'igtanggal an pagpugong',
 'change-blocklink' => 'igliwan an papugong',
 'contribslink' => 'mga ámot',
+'emaillink' => 'Padara hin e-mail',
 'blocklogpage' => 'Talaan han pagpugong',
 'blocklogentry' => 'ginpugngan hi [[$1]] nga natatapos ha takna hin $2 $3',
 'block-log-flags-nocreate' => 'diri gintutugutan an paghimo hin akawnt',
+'block-log-flags-nousertalk' => 'diri makakaliwat hit kalugaringon nga hiruhimangraw nga pakli',
+'ipb_already_blocked' => '"$1" in ginpugngan na',
 'blockme' => 'Pugngi ako',
 'proxyblocksuccess' => 'Human na.',
+'ipbnounblockself' => 'Diri ka gintutugotan hin pagtanggal hit pagpugong ha kalugaringon',
 
 # Developer tools
 'databasenotlocked' => 'An database in diri nakatrangka.',
@@ -1423,26 +1572,42 @@ Kitaa an $2 para hin talaan han mga gibag-ohi nga mga ginpamara.',
 'move-page-legend' => 'Balhina an pakli:',
 'movearticle' => 'Balhina an pakli:',
 'moveuserpage-warning' => "'''Pahimatngon:''' Tibalhin ka hin pakli hin gumaramit. Alayon pagtigaman nga an pakli là an mababalhin ngan an gumaramit in ''diri'' mababalyoan hin ngaran.",
+'movenologin' => 'Diri nakalog-in',
+'movenotallowed' => 'Waray ka pagtugot para makabalhin hin mga pakli.',
+'movenotallowedfile' => 'Waray ka pagtugot para makabalhin hin mga paypay.',
 'newtitle' => 'Para ha bag-o nga titulo:',
 'movepagebtn' => 'Igbalhin an pakli',
 'pagemovedsub' => 'Malinamposon an pagbalhin',
 'movedto' => 'ginbalhin ngadto',
 'movelogpage' => 'Talaan han pagbalhin',
+'movelogpagetext' => 'Ubos hini in uska talaan han ngatanan nga nabalhin nga pakli',
+'movenosubpage' => 'Ini nga pakli in waray mga bahin-pakli.',
 'movereason' => 'Rason:',
 'revertmove' => 'igbalik',
 'delete_and_move' => 'Igapara ngan igbalhin',
+'delete_and_move_confirm' => 'Oo, paraa an pakli',
+'delete_and_move_reason' => 'Ginpara para makahatag hin aragian para makabalhin tikan "[[$1]]"',
+'selfmove' => 'An tinikangan ngan kakadtoan nga mga titulo in parehas;
+diri makakabalhin ha iya kalugaringon ngahaw.',
+'immobile-source-page' => 'Diri mababalhin ini nga pakli.',
 
 # Export
 'export' => 'Mga pakli hit pagexport',
 'exportall' => 'Ig-export an ngatanan nga mga pakli',
+'exportlistauthors' => 'Lakip an bug-os nga talaan han mga man-aamot para ha kada pakli',
+'export-submit' => 'Ginpapaangbit',
 'export-addcattext' => 'Igdugang an mga pakli tikang ha kaarangay:',
 'export-addcat' => 'Dugngi',
 'export-addnstext' => "Igdugang an mga pakli tikang ha ngaran-lat'ang:",
 'export-addns' => 'Dugngi',
+'export-download' => 'Igtipig komo paypay',
 
 # Namespace 8 related
+'allmessages' => 'Mga mensahe han sistema',
 'allmessagesname' => 'Ngaran',
 'allmessagesdefault' => 'Daan aada nga teksto hiton mensahe',
+'allmessagescurrent' => 'Yana nga teksto han mensahe',
+'allmessages-filter-legend' => 'Sara',
 'allmessages-filter-all' => 'Ngatanan',
 'allmessages-language' => 'Yinaknan:',
 'allmessages-filter-submit' => 'Kadto-a',
@@ -1454,9 +1619,26 @@ Kitaa an $2 para hin talaan han mga gibag-ohi nga mga ginpamara.',
 'thumbnail_image-type' => 'An klase han hulagway in diri suportado',
 
 # Special:Import
+'import' => 'Naangbit hit mga pakli',
+'import-interwiki-source' => 'Tinikangan nga wiki/pakli:',
+'import-interwiki-templates' => 'Lakip an ngatanan nga mga batakan',
+'import-interwiki-submit' => 'Naangbit',
+'import-interwiki-namespace' => "Kakadtoan nga ngaran-lat'ang:",
 'import-upload-filename' => 'Ngaran han paypay:',
 'import-comment' => 'Komento:',
+'importstart' => 'Nag-aangbit hin mga pakli...',
 'importnopages' => 'Waray pakli nga ginpapaangbit.',
+'importbadinterwiki' => 'Maraot nga sumpay hit interwiki',
+'importnotext' => 'Waray sulod o waray teksto',
+'importsuccess' => 'Natapos an pag-aangbit!',
+'import-noarticle' => 'Waray pakli nga maaangbit!',
+
+# Import log
+'importlogpage' => 'Talaan hin pan-aangbit',
+'import-logentry-interwiki' => 'natranswiki $1',
+
+# JavaScriptTest
+'javascripttest-pagetext-skins' => 'Pagpili hin panit para ha pag-paandar han:',
 
 # Tooltip help for the actions
 'tooltip-pt-userpage' => 'An imo pakli hin gumaramit',
@@ -1525,6 +1707,7 @@ Makikit-an nimo an ginkuhaaan',
 'siteusers' => '{{SITENAME}} {{PLURAL:$2|gumaramit|mga gumaramit}} $1',
 
 # Info page
+'pageinfo-title' => 'Impormasyon para "$1"',
 'pageinfo-header-basic' => 'Panguna nga pananabotan',
 'pageinfo-header-edits' => 'Kaagi han pagliwat',
 'pageinfo-header-restrictions' => 'Panalipod han pakli',
@@ -1543,6 +1726,29 @@ Makikit-an nimo an ginkuhaaan',
 'pageinfo-lastuser' => 'Giurhii nga nagliwat',
 'pageinfo-lasttime' => 'Petsa han kataposan nga pagliwat',
 'pageinfo-edits' => 'Ngatanan nga ihap han mga pakli',
+'pageinfo-toolboxlink' => 'Impormasyon han pakli',
+'pageinfo-contentpage' => 'Ginlakip komo uska unod nga pakli',
+'pageinfo-contentpage-yes' => 'Oo',
+'pageinfo-protect-cascading-yes' => 'Oo',
+
+# Patrolling
+'markaspatrolleddiff' => 'Igmarka komo ginpatrolya na',
+'markaspatrolledtext' => 'Markaha ini nga pakli komo ginpatrolya na',
+'markedaspatrolled' => 'Igmarka komo ginpatrolya na',
+'markedaspatrollederror' => 'Diri nakakamarka komo ginpatrolya na',
+
+# Patrol log
+'patrol-log-page' => 'Talaan han pagpatrolya',
+'patrol-log-header' => 'Ini in uska talaan hin mga ginpatrolya nga mga rebisyon.',
+'log-show-hide-patrol' => '$1 talaan hin pagpatrolya',
+
+# Image deletion
+'deletedrevision' => 'Ginpara an daan nga rebisyon $1',
+'filedeleteerror-short' => 'Nagsayop ha pagpara han paypay: $1',
+'filedeleteerror-long' => 'Mga sayop nga ginengkwentro samtang nagpapara hin paypay:
+
+$1',
+'filedelete-missing' => 'An paypay nga "$1" in diri mapapara, tunogd nga waray ini dida.',
 
 # Browsing diffs
 'previousdiff' => '← Durudaan nga pagliwat',
@@ -1550,16 +1756,23 @@ Makikit-an nimo an ginkuhaaan',
 
 # Media information
 'widthheightpage' => '$1 × $2, $3 {{PLURAL:$3|pakli|mga pakli}}',
+'file-info' => 'Kadako han paypay: $1, klase han MIME: $2',
 'file-info-size' => '$1 × $2 nga pixel, kadako han fayl: $3, MIME nga tipo: $4',
 'file-nohires' => 'Waray mas hiruhitaas nga resolusyon.',
 'svg-long-desc' => 'SVG nga fayl, ginbabanabanahan nga $1 × $2 nga mga pixel, kadako han fayl: $3',
 'show-big-image' => 'Bug-os nga resolusyon',
+'show-big-image-preview' => 'Kadako hin nga pahiuna nga pagawas: $1.',
+'show-big-image-other' => 'Iba {{PLURAL:$2|nga resolusyon|nga mga resolusyon}}: $1.',
 'show-big-image-size' => '$1 × $2 nga mga pixel',
 
 # Special:NewFiles
+'newimages' => 'Galeryia hin mga paypay nga bag-o',
 'newimages-legend' => 'Panara',
+'newimages-label' => 'Ngaran han paypay (o uska bahin hini):',
+'showhidebots' => '($1 ka mga bot)',
 'noimages' => 'Waray makikit-an.',
 'ilsubmit' => 'Bilnga',
+'bydate' => 'pinaagi han petsa',
 
 # Video information, used by Language::formatTimePeriod() to format lengths in the above messages
 'ago' => '$1 an nakalabay',
@@ -1595,11 +1808,40 @@ An iba in daan nakatago.
 'exif-imagewidth' => 'Kahaluag',
 'exif-imagelength' => 'Kahitaas',
 'exif-ycbcrpositioning' => 'Pagpoposisyon han Y ngan C',
+'exif-referenceblackwhite' => 'Padis han itom nga busag nga reperensya hin mga balor',
+'exif-datetime' => 'Pagliwat han petsa ngan oras han paypay',
 'exif-imagedescription' => 'Titulo han hulagway',
+'exif-make' => 'Naghimo han kamera',
+'exif-model' => 'Modelo han kamera',
+'exif-software' => 'Software nga gingamit',
 'exif-artist' => 'Tag-iya',
+'exif-subsectime' => 'Mga bahin-segundo han PetsaOras',
+'exif-exposuretime-format' => '$1 seg ($2)',
+'exif-fnumber' => 'F Numero',
+'exif-lightsource' => 'Ginkuhaan han suga',
+'exif-filesource' => 'Ginkuhaan han paypay',
 'exif-sharpness' => 'Pagkatarom',
+'exif-gpslatituderef' => 'Amihanan o salatan nga latitud',
+'exif-gpslatitude' => 'Latitud',
+'exif-gpslongituderef' => 'Sinirangan o katundan nga longitud',
+'exif-gpslongitude' => 'Longitud',
+'exif-gpsaltitude' => 'Altitud',
 'exif-gpstimestamp' => 'GPS nga oras (atomiko nga relo)',
+'exif-gpssatellites' => 'Mga satelayt nga gingamit ha pagsukol',
+'exif-gpsstatus' => 'Kahimtang han nagkakarawat',
 'exif-gpsspeedref' => 'Sukol han kalaksi',
+'exif-gpstrack' => 'Direksyon han kiwa',
+'exif-gpsdestdistance' => 'Distansya ha destinasyon',
+'exif-gpsareainformation' => 'Ngaran han lugar an GPS',
+'exif-gpsdatestamp' => 'petsa han GPS',
+'exif-jpegfilecomment' => 'Komento han JPEG nga paypay',
+'exif-worldregioncreated' => 'Rehiyon han kalibutan kun diin an ritrato ginkuha',
+'exif-countrycreated' => 'Nasod kun diin an ritrato ginkuha',
+'exif-countrycodecreated' => 'Kodigo han nasod kun diin an ritrato ginkuha',
+'exif-provinceorstatecreated' => 'Lalawigan o estado kun diin an ritrato ginkuha',
+'exif-citycreated' => 'An syudad kun diin an ritrato ginkuha',
+'exif-sublocationcreated' => 'Bahin-lokasyon han syudad kun diin an ritrato ginkuha',
+'exif-worldregiondest' => 'Ginpakita an rehiyon han kalibutan',
 'exif-countrydest' => 'Ginpapakita an nasod',
 'exif-countrycodedest' => 'Ginpapakita an kodigo han nasod',
 'exif-provinceorstatedest' => 'Ginpapakita an lalawigan o estado',
@@ -1613,13 +1855,22 @@ An iba in daan nakatago.
 'exif-iimcategory' => 'Kaarangay',
 'exif-datetimeexpires' => 'Ayaw gamita kahuman han',
 'exif-datetimereleased' => 'Ginpagawas han',
+'exif-lens' => 'Mga lente nga gingamit',
 'exif-cameraownername' => 'Tag-iya han kamera',
+'exif-usageterms' => 'Mga termino hit paggamit',
+
+'exif-copyrighted-false' => 'Dominyo panpubliko',
+
+'exif-unknowndate' => 'Waray kasabti an petsa',
+
+'exif-orientation-1' => 'Normal',
 
 'exif-exposureprogram-1' => 'Mano-mano',
 
 'exif-subjectdistance-value' => '$1 ka mga metro',
 
 'exif-meteringmode-0' => 'Waray kasabti',
+'exif-meteringmode-255' => 'iba',
 
 'exif-lightsource-0' => 'Waray kasabti',
 'exif-lightsource-9' => 'Maupay nga panahon',
@@ -1629,14 +1880,20 @@ An iba in daan nakatago.
 
 'exif-gaincontrol-0' => 'Waray',
 
+'exif-contrast-0' => 'Normal',
 'exif-contrast-1' => 'Mahumok',
 'exif-contrast-2' => 'Matig-a',
 
+'exif-saturation-0' => 'Normal',
+
+'exif-sharpness-0' => 'Normal',
 'exif-sharpness-1' => 'Mahumok',
 'exif-sharpness-2' => 'Matig-a',
 
 'exif-subjectdistancerange-0' => 'Waray kasabti',
 'exif-subjectdistancerange-1' => 'Macro',
+'exif-subjectdistancerange-2' => 'Harani nga pagkita',
+'exif-subjectdistancerange-3' => 'Harayo nga pagkita',
 
 # Pseudotags used for GPSAltitudeRef
 'exif-gpsaltitude-above-sealevel' => '$1 {{PLURAL:$1|metro|mga metro}} bawbaw han katupngan ha dagat',
@@ -1652,15 +1909,24 @@ An iba in daan nakatago.
 
 'exif-objectcycle-a' => 'Aga la',
 'exif-objectcycle-p' => 'Gab-i la',
+'exif-objectcycle-b' => 'Pareho pan-aga ngan pan-gab-i',
 
 # Pseudotags used for GPSTrackRef, GPSImgDirectionRef and GPSDestBearingRef
 'exif-gpsdirection-t' => 'Tinood nga direksyon',
 
+'exif-ycbcrpositioning-1' => 'Nakabutnga',
+
+'exif-dc-contributor' => 'Mga nag-ámot',
 'exif-dc-date' => '(Mga) petsa',
+'exif-dc-relation' => 'Nahisumpay nga medya',
 'exif-dc-rights' => 'Mga katungod',
+'exif-dc-source' => 'Tinikangan nga medya',
+'exif-dc-type' => 'Klase nga medya',
 
 'exif-rating-rejected' => 'Waray karawta',
 
+'exif-isospeedratings-overflow' => 'Lapos han 65535',
+
 'exif-iimcategory-ace' => 'mga arte, kultura ngan panlibang',
 'exif-iimcategory-clj' => 'Krimen ngan balaod',
 'exif-iimcategory-fin' => 'Ekonomiya ngan negosyo',
@@ -1677,6 +1943,10 @@ An iba in daan nakatago.
 'exif-iimcategory-war' => 'Gera, samok ngan diri namumurayawan',
 'exif-iimcategory-wea' => 'panahon',
 
+'exif-urgency-normal' => 'Normal ($1)',
+'exif-urgency-low' => 'Hamubo ($1)',
+'exif-urgency-high' => 'Hataas ($1)',
+
 # External editor support
 'edit-externally' => 'Igliwat ini nga fayl gamit han gawas nga aplikasyon',
 'edit-externally-help' => '(Kitaa an [//www.mediawiki.org/wiki/Manual:External_editors mga pagtutdo hin pag-ayad] para han dugang nga pananabutan)',
@@ -1687,7 +1957,19 @@ An iba in daan nakatago.
 'monthsall' => 'ngatanan',
 'limitall' => 'ngatanan',
 
+# E-mail address confirmation
+'confirmemail' => 'Igkompirma an e-mail address',
+'confirmemail_sent' => 'Ginpadara an kompirmasyon han e-mail.',
+'confirmemail_needlogin' => 'Kinahanglanon mo hin $1 para makakompirma han imo e-mail address.',
+'confirmemail_loggedin' => 'Ginkompirma na yana an imo e-mail address',
+'confirmemail_error' => 'Mayda diri asya nga nahitabo ha pagtipig ha imo kompirmasyon.',
+'confirmemail_subject' => '{{SITENAME}} kompirmasyon han e-mail address',
+
+# Scary transclusion
+'scarytranscludetoolong' => '[Hala hin duro an URL]',
+
 # Delete conflict
+'deletedwhileediting' => "'''Pahimatngon''': Ini nga pakli in ginpara kahuman nim magtikang pagliwat!",
 'recreate' => 'Himo-a utro',
 
 # action=purge
@@ -1695,7 +1977,9 @@ An iba in daan nakatago.
 
 # action=watch/unwatch
 'confirm-watch-button' => 'OK',
+'confirm-watch-top' => 'Dudugngon ini nga pakli ngadto han imo talaan hin ginbibinantayan?',
 'confirm-unwatch-button' => 'OK',
+'confirm-unwatch-top' => 'Tatanggalon ini nga pakli tikang han imo tala hin binabantayan?',
 
 # Multipage image navigation
 'imgmultipageprev' => '← naha-una nga pakli',
@@ -1713,6 +1997,12 @@ An iba in daan nakatago.
 'table_pager_limit_submit' => 'Kadto-a',
 'table_pager_empty' => 'Waray mga resulta',
 
+# Auto-summaries
+'autosumm-blank' => 'Blankoha an pakli',
+'autosumm-replace' => 'Ginsaliwanan an sulod hin "$1"',
+'autoredircomment' => 'Ginredirecta an pakli ngada ha [[$1]]',
+'autosumm-new' => 'Nahimo an pakli nga may "$1"',
+
 # Size units
 'size-bytes' => '$1 nga B',
 'size-kilobytes' => '$1 nga KB',
@@ -1724,7 +2014,13 @@ An iba in daan nakatago.
 'livepreview-ready' => 'Ginkakarga. . . Pag-andam!',
 
 # Watchlist editor
+'watchlistedit-numitems' => 'An imo talaan hin binabantayan hin may sulod nga {{PLURAL:$1|1 ka titulo|$1 ka mga titulo}}, diri lakip an mga pakli nga hiruhimangraw.',
+'watchlistedit-noitems' => 'An imo talaan han binabantayan in waray sulod nga mga titulo.',
+'watchlistedit-normal-title' => 'Igliwat an talaan han binabantayan',
+'watchlistedit-normal-legend' => 'Igtanggal an mga titulo tikang ha talaan hit binabantayan',
 'watchlistedit-normal-submit' => 'Igtanggal an mga titulo',
+'watchlistedit-raw-title' => 'Igliwat an hilaw nga talaan han binabantayan',
+'watchlistedit-raw-legend' => 'Igliwat an hilaw nga talaan han binabantayan',
 'watchlistedit-raw-titles' => 'Mga titulo:',
 
 # Watchlist editing tools
@@ -1737,11 +2033,20 @@ An iba in daan nakatago.
 
 # Special:Version
 'version' => 'Bersyon',
+'version-specialpages' => 'Mga pinaurog nga pakli',
+'version-variables' => 'Mga variable',
+'version-antispam' => 'Pamugong hin spam',
 'version-skins' => 'Mga panit',
+'version-other' => 'iba',
 'version-version' => '(Bersion $1)',
 'version-license' => 'Lisensya',
+'version-poweredby-credits' => "Ini nga wiki in pinapaandar han '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-others' => 'mga iba',
 'version-software-product' => 'Produkto',
 'version-software-version' => 'Bersyon',
+'version-entrypoints' => 'Surudlan nga mga URL',
+'version-entrypoints-header-entrypoint' => 'Surudlan',
+'version-entrypoints-header-url' => 'URL',
 
 # Special:FilePath
 'filepath' => 'Aragian han paypay',
@@ -1749,11 +2054,16 @@ An iba in daan nakatago.
 'filepath-submit' => 'Kadto-a',
 
 # Special:FileDuplicateSearch
+'fileduplicatesearch' => 'Pamiling hin nadoble nga mga paypay',
+'fileduplicatesearch-legend' => 'Pamiling hin nadoble',
+'fileduplicatesearch-filename' => 'Ngaran han paypay:',
 'fileduplicatesearch-submit' => 'Pamilnga',
-'fileduplicatesearch-noresults' => 'Waray nabilngan nga paypay nga an ngaran in "$".',
+'fileduplicatesearch-noresults' => 'Waray nabilngan nga paypay nga an ngaran in "$1".',
 
 # Special:SpecialPages
 'specialpages' => 'Mga pinaurog nga pakli',
+'specialpages-group-maintenance' => 'Mga sumat han pagmintinar',
+'specialpages-group-other' => 'Mga iba nga pinaurog nga pakli',
 'specialpages-group-login' => 'Magpalista nga masakob / paghimo hin bag-o nga akawnt',
 'specialpages-group-users' => 'Mga gumaramit ngan mga katungod',
 'specialpages-group-highuse' => 'Mga pakli nga damo nagamit',
@@ -1800,6 +2110,9 @@ An iba in daan nakatago.
 'htmlform-selectorother-other' => 'iba',
 
 # New logging system
+'revdelete-content-hid' => 'sulod nakatago',
+'revdelete-summary-hid' => 'nakatago an dalikyat nga sumat han pagliwat',
+'revdelete-uname-hid' => 'nakatago an agnay-hit-gumaramit',
 'logentry-newusers-newusers' => '$1 in naghimo hin gumaramit nga akawnt',
 'logentry-newusers-create' => '$1 in naghimo hin gumaramit nga akawnt',
 'logentry-newusers-create2' => '$1 in naghimo hin gumaramit nga akawnt $3',
@@ -1807,6 +2120,10 @@ An iba in daan nakatago.
 'newuserlog-byemail' => 'Ginpadangat an tigaman-pagsulod pinaagi han e-mail',
 
 # Feedback
+'feedback-subject' => 'Himangrawon:',
+'feedback-message' => 'Mensahe:',
+'feedback-cancel' => 'Pasagdi',
+'feedback-error2' => 'Sayop: Nagpalya an pagliwat',
 'feedback-close' => 'Human na.',
 
 # Search suggestions
@@ -1817,11 +2134,14 @@ An iba in daan nakatago.
 'api-error-badaccess-groups' => 'Diri ka gintutugotan pagkarga paigbaw ha dinhi nga wiki.',
 'api-error-badtoken' => 'Sayop ha sulod: Maraot nga token.',
 'api-error-copyuploaddisabled' => 'Pagkarga paigbaw pinaagi han URL in diri mahihimo ha dinhi nga serbidor.',
+'api-error-duplicate-popup-title' => 'Nadoble {{PLURAL:$1|nga paypay|nga mga paypay}}.',
 'api-error-filename-tooshort' => 'An ngaran han paypay in halipot hin duro.',
 'api-error-filetype-banned' => 'Diri gintutugotan ini nga klase nga paypay.',
 'api-error-filetype-missing' => 'Ini nga ngaran han paypay in nawawad-an hin ekstensyon.',
 'api-error-http' => 'Sayop ha sulod: Diri nakakasumpay ha serbidor.',
 'api-error-illegal-filename' => 'Diri gintutugotan an ngaran-han-paypay.',
+'api-error-mustbeloggedin' => 'Diri ka nakalog-in para makapagkarga-pasaka hin mga paypay.',
+'api-error-mustbeposted' => 'Sayop ha sulod: Iton paalayon in nagkikinahanglan hin HTTP POST.',
 'api-error-overwrite' => 'Pagsasapaw in aada nga paypay in diri gintutugotan.',
 'api-error-stashfailed' => 'Sayop ha sulod:  An serbidor in waray makatipig han temporaryo nga paypay.',
 'api-error-timeout' => 'An serbidor in diri nabaton ha sulod han ginaasahan nga oras.',
index 3989be2..15a3e41 100644 (file)
@@ -1794,7 +1794,7 @@ $1",
 'shared-repo-from' => 'פֿון $1',
 'shared-repo' => 'א געמיינזאַמער זאַפאַס',
 'shared-repo-name-wikimediacommons' => 'וויקימעדיע קאמאנס',
-'upload-disallowed-here' => '×\9c×\99×\99×\93ער ×§×¢× ×\98 ×\90×\99ר × ×\99ש×\98 ×\90×\99×\91ערשר×\99×\99×\91×\9f ×\93×\90ס ×\91×\99×\9c×\93.',
+'upload-disallowed-here' => '×\90×\99ר ×§×¢× ×\98 × ×\99ש×\98 ×\90×\99×\91ערשר×\99×\99×\91×\9f ×\93×\99 ×\98עקע.',
 
 # File reversion
 'filerevert' => 'צוריקדרייען $1',
@@ -1816,6 +1816,7 @@ $1",
 'filedelete-success' => "'''$1''' איז געווען אויסגעמעקט.",
 'filedelete-success-old' => "די ווערסיע פֿון '''[[Media:$1|$1]]''' פֿון $3, $2 איז געווארן אויסגעמעקט.",
 'filedelete-nofile' => "'''$1''' עקזיסטירט נישט.",
+'filedelete-nofile-old' => "נישט פאראן קיין ארכיווירטע ווערסיע פון '''$1''' מיט די ספעציפירטע אייגנקייטן.",
 'filedelete-otherreason' => 'אנדער/נאך א סיבה:',
 'filedelete-reason-otherlist' => 'אַנדער אורזאַך',
 'filedelete-reason-dropdown' => '*אַלגעמיינע אויסמעקן סיבות
index 024a446..44bcc30 100644 (file)
@@ -2962,9 +2962,10 @@ $1被封禁的理由是:“$2”',
 'pageinfo-authors' => '不同编者总计',
 'pageinfo-recent-edits' => '最近的编辑数($1内)',
 'pageinfo-recent-authors' => '最近的不同编者数',
-'pageinfo-magic-words' => '魔术字 ($1)',
-'pageinfo-hidden-categories' => '隐藏分类 ($1)',
-'pageinfo-templates' => '使用的模板 ($1)',
+'pageinfo-magic-words' => '魔术字($1)',
+'pageinfo-hidden-categories' => '隐藏分类($1)',
+'pageinfo-templates' => '使用的模板($1)',
+'pageinfo-toolboxlink' => '页面信息',
 
 # Skin names
 'skinname-standard' => '标准',
index 72c1825..a6194f8 100644 (file)
@@ -2976,9 +2976,9 @@ $1被封禁的理由是“$2”',
 'pageinfo-authors' => '作者總數',
 'pageinfo-recent-edits' => '最近編輯次數 (過去 $1 內)',
 'pageinfo-recent-authors' => '最近作者數目',
-'pageinfo-magic-words' => '魔術{{PLURAL:$1|字|字}} ( $1 )',
-'pageinfo-hidden-categories' => '隱藏{{PLURAL:$1|分類|分類}} ( $1 )',
-'pageinfo-templates' => '被引用的{{PLURAL:$1|模版|模版}} ( $1 )',
+'pageinfo-magic-words' => '魔術{{PLURAL:$1|字|字}}($1)',
+'pageinfo-hidden-categories' => '隱藏{{PLURAL:$1|分類|分類}}($1)',
+'pageinfo-templates' => '被引用的{{PLURAL:$1|模版|模版}}($1)',
 'pageinfo-toolboxlink' => '頁面資訊',
 'pageinfo-redirectsto' => '重定向到',
 'pageinfo-redirectsto-info' => '資訊',
index e3ba4e5..e6862ac 100644 (file)
@@ -62,7 +62,8 @@ ALIASES =     "type{1}=<b> \1 </b>:" \
                "protected=\access protected" \
                "public=\access public" \
                "copyright=\note" \
-               "license=\note"
+               "license=\note" \
+               "codeCoverageIgnore="
 OPTIMIZE_OUTPUT_FOR_C  = NO
 OPTIMIZE_OUTPUT_JAVA   = NO
 OPTIMIZE_FOR_FORTRAN   = NO
@@ -171,7 +172,9 @@ FILE_PATTERNS          = *.c \
                          *.PHP5 \
                          *.M \
                          *.MM \
-                         *.PY
+                         *.PY \
+                         *.txt \
+                         README
 RECURSIVE              = YES
 EXCLUDE_SYMLINKS       = YES
 EXCLUDE_PATTERNS       = LocalSettings.php AdminSettings.php StartProfiler.php .svn */.git/* {{EXCLUDE_PATTERNS}}
index 6afe9e1..dc03c34 100644 (file)
@@ -70,7 +70,7 @@ class UploadStashCleanup extends Maintenance {
                        array_push( $keys, $row->us_key );
                }
 
-               $this->output( 'Removing ' . count($keys) . " file(s)...\n" );
+               $this->output( 'Removing ' . count( $keys ) . " file(s)...\n" );
                // this could be done some other, more direct/efficient way, but using
                // UploadStash's own methods means it's less likely to fall accidentally
                // out-of-date someday
@@ -100,6 +100,7 @@ class UploadStashCleanup extends Maintenance {
                $this->output( "Deleting old thumbnails...\n" );
                $i = 0;
                foreach ( $iterator as $file ) {
+                       $i++;
                        if ( wfTimestamp( TS_UNIX, $tempRepo->getFileTimestamp( "$dir/$file" ) ) < $cutoff ) {
                                $tempRepo->quickPurge( "$dir/$file" );
                        }
index ca719ab..8bcece1 100644 (file)
                                },
                                select: function ( $input ) {
                                        $input.closest( 'form' ).append(
-                                               $( '<input type="hidden"/>', {
-                                                       name: 'fulltext',
-                                                       val: '1'
-                                               })
+                                               $( '<input type="hidden" name="fulltext" value="1"/>' )
                                        );
                                        $input.closest( 'form' ).submit();
                                }
 
        } );
 
-}( mediaWiki, jQuery ) );
\ No newline at end of file
+}( mediaWiki, jQuery ) );
index 22ec0f9..32aa902 100644 (file)
@@ -55,6 +55,8 @@ class SkinCologneBlue extends SkinTemplate {
 
 class CologneBlueTemplate extends BaseTemplate {
        function execute() {
+               // Suppress warnings to prevent notices about missing indexes in $this->data
+               wfSuppressWarnings();
                $this->html( 'headelement' );
                echo $this->beforeContent();
                $this->html( 'bodytext' );
@@ -63,6 +65,7 @@ class CologneBlueTemplate extends BaseTemplate {
                $this->html( 'dataAfterContent' );
                $this->printTrail();
                echo "\n</body></html>";
+               wfRestoreWarnings();
        }
 
        /**
@@ -338,56 +341,79 @@ class CologneBlueTemplate extends BaseTemplate {
                }
        }
 
+       // @fixed
        function talkLink() {
                $title = $this->getSkin()->getTitle();
-               if ( NS_SPECIAL == $title->getNamespace() ) {
-                       # No discussion links for special pages
-                       return '';
+
+               if ( $title->getNamespace() == NS_SPECIAL ) {
+                       // No discussion links for special pages
+                       return "";
                }
 
-               $linkOptions = array();
-
-               if ( $title->isTalkPage() ) {
-                       $link = $title->getSubjectPage();
-                       switch( $link->getNamespace() ) {
-                               case NS_MAIN:
-                                       $text = wfMessage( 'articlepage' );
-                                       break;
-                               case NS_USER:
-                                       $text = wfMessage( 'userpage' );
-                                       break;
-                               case NS_PROJECT:
-                                       $text = wfMessage( 'projectpage' );
-                                       break;
-                               case NS_FILE:
-                                       $text = wfMessage( 'imagepage' );
-                                       # Make link known if image exists, even if the desc. page doesn't.
-                                       if ( wfFindFile( $link ) )
-                                               $linkOptions[] = 'known';
-                                       break;
-                               case NS_MEDIAWIKI:
-                                       $text = wfMessage( 'mediawikipage' );
-                                       break;
-                               case NS_TEMPLATE:
-                                       $text = wfMessage( 'templatepage' );
-                                       break;
-                               case NS_HELP:
-                                       $text = wfMessage( 'viewhelppage' );
-                                       break;
-                               case NS_CATEGORY:
-                                       $text = wfMessage( 'categorypage' );
-                                       break;
-                               default:
-                                       $text = wfMessage( 'articlepage' );
-                       }
+               $companionTitle = $title->isTalkPage() ? $title->getSubjectPage() : $title->getTalkPage();
+               $companionNamespace = $companionTitle->getNamespace();
+
+               // TODO these messages appear to only be used by CologneBlue and legacy skins,
+               // kill and replace with something more sensibly named?
+               $nsToMessage = array(
+                       NS_MAIN => 'articlepage',
+                       NS_USER => 'userpage',
+                       NS_PROJECT => 'projectpage',
+                       NS_FILE => 'imagepage',
+                       NS_MEDIAWIKI => 'mediawikipage',
+                       NS_TEMPLATE => 'templatepage',
+                       NS_HELP => 'viewhelppage',
+                       NS_CATEGORY => 'categorypage',
+                       NS_FILE => 'imagepage',
+               );
+
+               // Find out the message to use for link text. Use either the array above or,
+               // for non-talk pages, a generic "discuss this" message.
+               // Default is the same as for main namespace.
+               if ( isset( $nsToMessage[$companionNamespace] ) ) {
+                       $message = $nsToMessage[$companionNamespace];
                } else {
-                       $link = $title->getTalkPage();
-                       $text = wfMessage( 'talkpage' );
+                       $message = $companionTitle->isTalkPage() ? 'talkpage' : 'articlepage';
                }
 
-               $s = Linker::link( $link, $text->text(), array(), array(), $linkOptions );
+               // Obviously this can't be reasonable and just return the key for talk namespace, only for content ones.
+               // Thus we have to mangle it in exactly the same way SkinTemplate does. (bug 40805)
+               $key = $companionTitle->getNamespaceKey( '' );
+               if ( $companionTitle->isTalkPage() ) {
+                       $key = ( $key == 'main' ? 'talk' : $key . "_talk" );
+               }
 
-               return $s;
+               // Use the regular navigational link, but replace its text. Everything else stays unmodified.
+               $namespacesLinks = $this->data['content_navigation']['namespaces'];
+               $link = $this->processNavlinkForDocument( $namespacesLinks[ $key ] );
+               $link['text'] = wfMessage( $message )->text();
+
+               return $this->makeListItem( $message, $link, array( 'tag' => 'span' ) );
+       }
+
+       /**
+        * Takes a navigational link generated by SkinTemplate in whichever way
+        * and mangles attributes unsuitable for repeated use. In particular, this modifies the ids
+        * and removes the accesskeys. This is necessary to be able to use the same navlink twice,
+        * e.g. in sidebar and in footer.
+        *
+        * @param $navlink array Navigational link generated by SkinTemplate
+        * @param $idPrefix mixed Prefix to add to id of this navlink. If false, id is removed entirely. Default is 'cb-'.
+        */
+       function processNavlinkForDocument( $navlink, $idPrefix='cb-' ) {
+               if ( $navlink['id'] ) {
+                       $navlink['single-id'] = $navlink['id']; // to allow for tooltip generation
+                       $navlink['tooltiponly'] = true; // but no accesskeys
+
+                       // mangle or remove the id
+                       if ( $idPrefix === false ) {
+                               unset( $navlink['id'] );
+                       } else {
+                               $navlink['id'] =  $idPrefix . $navlink['id'];
+                       }
+               }
+
+               return $navlink;
        }
 
        /**
index fa60b42..dbbcd47 100644 (file)
@@ -987,8 +987,7 @@ bar
 !!end
 
 ###
-### Parsoid-centric tests for testing RT edge cases
-### around comments and white-space inside pre blocks
+### Parsoid-centric tests for testing RT edge cases for pre
 ###
 
 !!test
@@ -1030,6 +1029,75 @@ c
 </pre>
 !!end
 
+!!test
+2a. Pre and tables
+!!input
+ {|
+ |-
+ !h1!!h2
+ |foo||bar
+ |}
+!!result
+<table>
+
+<tr>
+<th>h1</th>
+<th>h2
+</th>
+<td>foo</td>
+<td>bar
+</td></tr></table>
+
+!!end
+
+!!test
+2b. Pre and tables
+!!input
+  {|
+ |-
+|foo
+|}
+!!result
+<table>
+
+<tr>
+<td>foo
+</td></tr></table>
+
+!!end
+
+!!test
+3. Pre and block tags
+!!input
+ <p> foo </p>
+ <div> foo </div>
+ <span> foo </span>
+!!result
+ <p> foo </p>
+ <div> foo </div>
+<pre><span> foo </span>
+</pre>
+!!end
+
+!!test
+4. Multiple spaces at start-of-line
+!!input
+    <p> foo </p>
+    foo
+       {|
+|foo
+|}
+!!result
+    <p> foo </p>
+<pre>   foo
+</pre>
+<table>
+<tr>
+<td>foo
+</td></tr></table>
+
+!!end
+
 ###
 ### Definition lists
 ###
@@ -1252,6 +1320,26 @@ Definition Lists: Indentation: Multi-level indent
 
 !! end
 
+!! test
+Definition Lists: Hacky use to indent tables
+!! input
+::{|
+|foo
+|bar
+|}
+this text
+should be left alone
+!! result
+<dl><dd><dl><dd><table>
+<tr>
+<td>foo
+</td>
+<td>bar
+</td></tr></table></dd></dl></dd></dl>
+<p>this text
+should be left alone
+</p>
+!! end
 ## The PHP parser treats : items (dd) without a corresponding ; item (dt)
 ## as an empty dt item.  It also ignores all but the last ";" when followed
 ## by ":" later on.  So, ";" are not ignored in ";;;t3" but are ignored  in
@@ -2278,6 +2366,24 @@ Simple table
 
 !! end
 
+!! test
+Simple table but with multiple dashes for row wikitext
+!! input
+{| 
+| foo
+|-----
+| bar
+|}
+!! result
+<table>
+<tr>
+<td> foo
+</td></tr>
+<tr>
+<td> bar
+</td></tr></table>
+
+!! end
 !! test
 Multiplication table
 !! input
@@ -2349,6 +2455,29 @@ Multiplication table
 
 !! end
 
+!!test
+Allow +/- in 2nd and later cells in a row
+!!input
+{|
+| 1 || 2 || 3
+|-
+| 1 || +2 || -3
+|}
+!!result
+<table>
+<tr>
+<td> 1 </td>
+<td> 2 </td>
+<td> 3
+</td></tr>
+<tr>
+<td> 1 </td>
+<td> +2 </td>
+<td> -3
+</td></tr></table>
+
+!!end
+
 !! test
 Table rowspan
 !! input
@@ -3315,6 +3444,31 @@ Nested lists 8 (multiple nesting transitions)
 
 !! end
 
+!! test
+1. Lists with start-of-line-transparent tokens before bullets: Comments
+!! input
+*foo
+*<!--cmt-->bar
+<!--cmt-->*baz
+!! result
+<ul><li>foo
+</li><li>bar
+</li><li>baz
+</li></ul>
+
+!! end
+
+!! test
+2. Lists with start-of-line-transparent tokens before bullets: Template close
+!! input
+*foo {{echo|bar
+}}*baz
+!! result
+<ul><li>foo bar
+</li><li>baz
+</li></ul>
+
+!! end
 
 !! test
 List items are not parsed correctly following a <pre> block (bug 785)
@@ -4762,6 +4916,70 @@ a<div>bc</div>de
 
 !!end
 
+!!test
+Templates: Ugly templates: 1. Navbox template parses badly leading to table misnesting
+(Parsoid-centric)
+!! options
+disabled
+!!input
+{|
+|{{echo|foo</table>}}
+|bar
+|}
+!!result
+<table data-parsoid="{&quot;src&quot;:&quot;{|\n|{{echo|foo&lt;/table&gt;}}\n|bar\n|}&quot;}" about="#mwt1" typeof="mw:Object/Template ">
+<tbody><tr><td>foo</td></tr></tbody></table><span about="#mwt1">
+bar</span><span about="#mwt1">
+</span>
+!!end
+
+!!test
+Templates: Ugly templates: 2. Navbox template parses badly leading to table misnesting
+(Parsoid-centric)
+!! options
+disabled
+!!input
+<table>
+  <tr>
+    <td>
+    <table>
+      <tr>
+        <td>1. {{echo|foo </table>}}</td>
+        <td> bar </td>
+        <td>2. {{echo|baz </table>}}</td>
+      </tr>
+      <tr>
+        <td>abc</td>
+      </tr>
+    </table>
+    </td>
+  </tr>
+  <tr>
+    <td>xyz</td>
+  </tr>
+</table>
+!!result
+<table data-parsoid="{&quot;src&quot;:&quot;&lt;table&gt;\n  &lt;tr&gt;\n    &lt;td&gt;\n    &lt;table&gt;\n      &lt;tr&gt;\n        &lt;td&gt;1. {{echo|foo &lt;/table&gt;}}&lt;/td&gt;\n        &lt;td&gt; bar &lt;/td&gt;\n        &lt;td&gt;2. {{echo|baz &lt;/table&gt;}}&lt;/td&gt;\n      &lt;/tr&gt;\n      &lt;tr&gt;\n        &lt;td&gt;abc&lt;/td&gt;\n      &lt;/tr&gt;\n    &lt;/table&gt;\n    &lt;/td&gt;\n  &lt;/tr&gt;\n  &lt;tr&gt;\n    &lt;td&gt;xyz&lt;/td&gt;\n  &lt;/tr&gt;\n&lt;/table&gt;&quot;}" about="#mwt1" typeof="mw:Object/Template">
+  <tbody><tr data-parsoid="{&quot;stx&quot;:&quot;html&quot;}">
+    <td data-parsoid="{&quot;stx&quot;:&quot;html&quot;}">
+    <table data-parsoid="{&quot;stx&quot;:&quot;html&quot;}">
+      <tbody><tr data-parsoid="{&quot;stx&quot;:&quot;html&quot;}">
+        <td data-parsoid="{&quot;stx&quot;:&quot;html&quot;}">1. foo </td></tr></tbody></table></td>
+        <td data-parsoid="{&quot;stx&quot;:&quot;html&quot;}"> bar </td>
+        <td data-parsoid="{&quot;stx&quot;:&quot;html&quot;}">2. baz </td></tr></tbody></table><span about="#mwt1">
+      </span><span about="#mwt1">
+      
+        abc</span><span about="#mwt1">
+      </span><span about="#mwt1">
+    </span><span about="#mwt1">
+    </span><span about="#mwt1">
+  </span><span about="#mwt1">
+  
+    xyz</span><span about="#mwt1">
+  </span><span about="#mwt1">
+</span>
+!!end
+
 !!test
 Parser Functions: 1. Simple example
 !!input
@@ -5449,6 +5667,29 @@ Image with empty attribute
 
 !! end
 
+!! test
+Image with link tails
+!! input
+123[[Image:foobar.jpg]]456
+123[[Image:foobar.jpg|right]]456
+123[[Image:foobar.jpg|thumb]]456
+!! result
+<p>123<a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>456
+</p>
+123<div class="floatright"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a></div>456
+123<div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div></div></div></div>456
+
+!! end
+
+!! test
+Image with multiple captions -- only last one is accepted
+!! input
+[[Image:foobar.jpg|right|Caption1 - ignored|[[Caption2]] - ignored|Caption3 - accepted]]
+!! result
+<div class="floatright"><a href="/wiki/File:Foobar.jpg" class="image" title="Caption3 - accepted"><img alt="Caption3 - accepted" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a></div>
+
+!! end
+
 !! test
 Image with link parameter, wiki target
 !! input
@@ -5916,6 +6157,17 @@ pst
 [[Category:Foo (bar)|Foo]]
 !! end
 
+!! test
+Category with link tail
+!! options
+cat
+pst
+!! input
+123[[Category:Foo]]456
+!! result
+123[[Category:Foo]]456
+!! end
+
 !! test
 Category with template
 !! options
index 46aaa4b..20952b1 100644 (file)
@@ -13,16 +13,16 @@ class ArticleTest extends MediaWikiTestCase {
 
        /** creates a title object and its article object */
        protected function setUp() {
+               parent::setUp();
                $this->title = Title::makeTitle( NS_MAIN, 'SomePage' );
                $this->article = new Article( $this->title );
-
        }
 
        /** cleanup title object and its article object */
        protected function tearDown() {
+               parent::tearDown();
                $this->title = null;
                $this->article = null;
-
        }
 
        function testImplementsGetMagic() {
index 5ac05ba..29931c8 100644 (file)
@@ -13,7 +13,10 @@ class BlockTest extends MediaWikiLangTestCase {
 
        protected function setUp() {
                parent::setUp();
-               $this->setMwGlobals( 'wgContLang', Language::factory( 'en' ) );
+               $this->setMwGlobals( array(
+                       'wgLanguageCode' => 'en',
+                       'wgContLang' => Language::factory( 'en' )
+               ) );
        }
 
        function addDBData() {
index 97fffda..7db8c8c 100644 (file)
@@ -7,6 +7,7 @@
 class CdbTest extends MediaWikiTestCase {
 
        protected function setUp() {
+               parent::setUp();
                if ( !CdbReader::haveExtension() ) {
                        $this->markTestSkipped( 'Native CDB support is not available' );
                }
index 14bc0bb..ca1615e 100644 (file)
@@ -8,17 +8,18 @@ class ExtraParserTest extends MediaWikiTestCase {
        protected function setUp() {
                parent::setUp();
 
+               $contLang = Language::factory( 'en' );
                $this->setMwGlobals( array(
                        'wgShowDBErrorBacktrace' => true,
                        'wgLanguageCode' => 'en',
-                       'wgContLang' => Language::factory( 'en' ),
+                       'wgContLang' => $contLang,
                        'wgLang' => Language::factory( 'en' ),
                        'wgMemc' => new EmptyBagOStuff,
                        'wgAlwaysUseTidy' => false,
                        'wgCleanSignatures' => true,
                ) );
                
-               $this->options = new ParserOptions;
+               $this->options = ParserOptions::newFromUserAndLang( new User, $contLang );
                $this->options->setTemplateCallback( array( __CLASS__, 'statelessFetchTemplate' ) );
                $this->parser = new Parser;
 
index 35c7f8f..56691c9 100644 (file)
@@ -26,6 +26,7 @@ class FauxResponseTest extends MediaWikiTestCase {
        var $response;
 
        protected function setUp() {
+               parent::setUp();
                $this->response = new FauxResponse;
        }
 
index d86c95d..af28f79 100644 (file)
@@ -41,8 +41,8 @@ class FormOptionsInitializationTest extends MediaWikiTestCase {
         * with.
         */
        protected function setUp() {
+               parent::setUp();
                $this->object = new FormOptionsExposed();
-               
        }
 
        public function testAddStringOption() {
index 749343e..d4e3c5e 100644 (file)
@@ -23,12 +23,13 @@ class FormOptionsTest extends MediaWikiTestCase {
        protected $object;
 
        /**
-        * Instanciates a FormOptions object to play with.       
+        * Instanciates a FormOptions object to play with.
         * FormOptions::add() is tested by the class FormOptionsInitializationTest
         * so we assume the function is well tested already an use it to create
         * the fixture.
         */
        protected function setUp() {
+               parent::setUp();
                $this->object = new FormOptions;
                $this->object->add( 'string1', 'string one' );
                $this->object->add( 'string2', 'string two' );
index bc71ab7..7499272 100644 (file)
@@ -26,6 +26,7 @@ class LinksUpdateTest extends MediaWikiTestCase {
        }
 
        protected function setUp() {
+               parent::setUp();
                $dbw = wfGetDB( DB_MASTER );
                $dbw->replace(
                        'interwiki',
index 4487210..910743e 100644 (file)
@@ -6,6 +6,7 @@
 class PathRouterTest extends MediaWikiTestCase {
 
        protected function setUp() {
+               parent::setUp();
                $router = new PathRouter;
                $router->add("/wiki/$1");
                $this->basicRouter = $router;
index 8d2a7bd..fbaa34c 100644 (file)
@@ -41,6 +41,8 @@ class RevisionStorageTest extends MediaWikiTestCase {
        public function setUp() {
                global $wgExtraNamespaces, $wgNamespaceContentModels, $wgContentHandlers, $wgContLang;
 
+               parent::setUp();
+
                $wgExtraNamespaces[ 12312 ] = 'Dummy';
                $wgExtraNamespaces[ 12313 ] = 'Dummy_talk';
 
@@ -57,6 +59,8 @@ class RevisionStorageTest extends MediaWikiTestCase {
        public function tearDown() {
                global $wgExtraNamespaces, $wgNamespaceContentModels, $wgContentHandlers, $wgContLang;
 
+               parent::tearDown();
+
                unset( $wgExtraNamespaces[ 12312 ] );
                unset( $wgExtraNamespaces[ 12313 ] );
 
index 4e0d2f4..27c0bb5 100644 (file)
@@ -26,6 +26,8 @@ class SiteConfigurationTest extends MediaWikiTestCase {
        var $mConf;
 
        protected function setUp() {
+               parent::setUp();
+
                $this->mConf = new SiteConfiguration;
 
                $this->mConf->suffixes = array( 'wiki' );
@@ -92,7 +94,6 @@ class SiteConfigurationTest extends MediaWikiTestCase {
                $GLOBALS['global'] = array( 'global' => 'global' );
        }
 
-
        function testSiteFromDb() {
                $this->assertEquals(
                        array( 'wikipedia', 'en' ),
index 10934b4..b80af29 100644 (file)
@@ -11,6 +11,8 @@ class TextContentTest extends MediaWikiTestCase {
        public function setup() {
                global $wgUser;
 
+               parent::setUp();
+
                // anon user
                $wgUser = new User();
                $wgUser->setName( '127.0.0.1' );
index 44fd690..c12fb22 100644 (file)
@@ -12,6 +12,8 @@ class TitleMethodsTest extends MediaWikiTestCase {
        public function setup() {
                global $wgExtraNamespaces, $wgNamespaceContentModels, $wgContLang;
 
+               parent::setUp();
+
                $this->mergeMwGlobalArrayValue(
                        'wgExtraNamespaces',
                        array(
@@ -34,6 +36,8 @@ class TitleMethodsTest extends MediaWikiTestCase {
        public function teardown() {
                global $wgContLang;
 
+               parent::tearDown();
+
                MWNamespace::getCanonicalNamespaces( true ); # reset namespace cache
                $wgContLang->resetNamespaces(); # reset namespace cache
        }
index e98f5a7..6dc1568 100644 (file)
@@ -579,7 +579,7 @@ class WikiPageTest extends MediaWikiLangTestCase {
        public function testGetParserOutput( $model, $text, $expectedHtml ) {
                $page = $this->createPage( 'WikiPageTest_testGetParserOutput', $text, $model );
 
-               $opt = new ParserOptions();
+               $opt = $page->makeParserOptions( 'canonical' );
                $po = $page->getParserOutput( $opt );
                $text = $po->getText();
 
index 8aeb529..8db96d1 100644 (file)
@@ -11,12 +11,10 @@ class WikitextContentHandlerTest extends MediaWikiTestCase {
        var $handler;
 
        public function setup() {
+               parent::setUp();
                $this->handler = ContentHandler::getForModelID( CONTENT_MODEL_WIKITEXT );
        }
 
-       public function teardown() {
-       }
-
        public function testSerializeContent( ) {
                $content = new WikitextContent( 'hello world' );
 
index 75bd922..1b48ad2 100644 (file)
@@ -5,9 +5,11 @@ class XmlSelectTest extends MediaWikiTestCase {
        protected $select;
 
        protected function setUp() {
+               parent::setUp();
                $this->select = new XmlSelect();
        }
        protected function tearDown() {
+               parent::tearDown();
                $this->select = null;
        }
 
index 81b32c2..9a03d5c 100644 (file)
@@ -4,6 +4,7 @@ class ZipDirectoryReaderTest extends MediaWikiTestCase {
        var $zipDir, $entries;
 
        protected function setUp() {
+               parent::setUp();
                $this->zipDir = __DIR__ . '/../data/zip';
        }
 
index a8a6b48..cbbdc1f 100644 (file)
@@ -8,10 +8,12 @@ class DatabaseTest extends MediaWikiTestCase {
        var $db, $functionTest = false;
 
        protected function setUp() {
+               parent::setUp();
                $this->db = wfGetDB( DB_MASTER );
        }
 
        protected function tearDown() {
+               parent::tearDown();
                if ( $this->functionTest ) {
                        $this->dropFunctions();
                        $this->functionTest = false;
index 4f338d3..bd2c388 100644 (file)
@@ -4,6 +4,7 @@ class MWDebugTest extends MediaWikiTestCase {
 
 
        protected function setUp() {
+               parent::setUp();
                // Make sure MWDebug class is enabled
                static $MWDebugEnabled = false;
                if( !$MWDebugEnabled ) {
@@ -17,6 +18,7 @@ class MWDebugTest extends MediaWikiTestCase {
 
        protected function tearDown() {
                wfRestoreWarnings();
+               parent::tearDown();
        }
 
        function testAddLog() {
index ee1c6f8..e027668 100644 (file)
@@ -2,6 +2,7 @@
 class PNGMetadataExtractorTest extends MediaWikiTestCase {
 
        protected function setUp() {
+               parent::setUp();
                $this->filePath = __DIR__ . '/../../data/media/';
        }
        /**
index 007ce46..d9a59ca 100644 (file)
@@ -3,6 +3,7 @@
 class SVGMetadataExtractorTest extends MediaWikiTestCase {
 
        protected function setUp() {
+               parent::setUp();
                AutoLoader::loadClass( 'SVGMetadataExtractorTest' );
        }
 
index be02dd7..452016f 100644 (file)
@@ -2,6 +2,7 @@
 class XMPTest extends MediaWikiTestCase {
 
        protected function setUp() {
+               parent::setUp();
                if ( !wfDl( 'xml' ) ) {
                        $this->markTestSkipped( 'Requires libxml to do XMP parsing' );
                }
index 46ef5da..611a45a 100644 (file)
@@ -32,10 +32,11 @@ class MagicVariableTest extends MediaWikiTestCase {
        protected function setUp() {
                parent::setUp();
 
-               $this->setMwGlobals( 'wgContLang', Language::factory( 'en' ) );
+               $contLang = Language::factory( 'en' );
+               $this->setMwGlobals( 'wgContLang', $contLang );
 
                $this->testParser = new Parser();
-               $this->testParser->Options( new ParserOptions() );
+               $this->testParser->Options( ParserOptions::newFromUserAndLang( new User, $contLang ) );
 
                # initialize parser output
                $this->testParser->clearState();
index d537b6e..8c22c59 100644 (file)
@@ -9,7 +9,10 @@ class ParserPreloadTest extends MediaWikiTestCase {
        private $title;
 
        protected function setUp() {
-               $this->testParserOptions = new ParserOptions();
+               global $wgContLang;
+
+               parent::setUp();
+               $this->testParserOptions = ParserOptions::newFromUserAndLang( new User, $wgContLang );
 
                $this->testParser = new Parser();
                $this->testParser->Options( $this->testParserOptions );
@@ -19,6 +22,8 @@ class ParserPreloadTest extends MediaWikiTestCase {
        }
 
        protected function tearDown() {
+               parent::tearDown();
+
                unset( $this->testParser );
                unset( $this->title );
        }
index d82fc6c..362d9f7 100644 (file)
@@ -6,8 +6,9 @@ class PreprocessorTest extends MediaWikiTestCase {
        var $mOptions;
 
        protected function setUp() {
-               global $wgParserConf;
-               $this->mOptions = new ParserOptions();
+               global $wgParserConf, $wgContLang;
+               parent::setUp();
+               $this->mOptions = ParserOptions::newFromUserAndLang( new User, $wgContLang );
                $name = isset( $wgParserConf['preprocessorClass'] ) ? $wgParserConf['preprocessorClass'] : 'Preprocessor_DOM';
 
                $this->mPreprocessor = new $name( $this );
index 713ce84..d089aff 100644 (file)
@@ -17,11 +17,11 @@ class TagHookTest extends MediaWikiTestCase {
         * @dataProvider provideValidNames
         */
        function testTagHooks( $tag ) {
-               global $wgParserConf;
+               global $wgParserConf, $wgContLang;
                $parser = new Parser( $wgParserConf );
                
                $parser->setHook( $tag, array( $this, 'tagCallback' ) );
-               $parserOutput = $parser->parse( "Foo<$tag>Bar</$tag>Baz", Title::newFromText( 'Test' ), new ParserOptions );
+               $parserOutput = $parser->parse( "Foo<$tag>Bar</$tag>Baz", Title::newFromText( 'Test' ), ParserOptions::newFromUserAndLang( new User, $wgContLang ) );
                $this->assertEquals( "<p>FooOneBaz\n</p>", $parserOutput->getText() );
                
                $parser->mPreprocessor = null; # Break the Parser <-> Preprocessor cycle
@@ -32,11 +32,11 @@ class TagHookTest extends MediaWikiTestCase {
         * @expectedException MWException
         */
        function testBadTagHooks( $tag ) {
-               global $wgParserConf;
+               global $wgParserConf, $wgContLang;
                $parser = new Parser( $wgParserConf );
                
                $parser->setHook( $tag, array( $this, 'tagCallback' ) );
-               $parser->parse( "Foo<$tag>Bar</$tag>Baz", Title::newFromText( 'Test' ), new ParserOptions );
+               $parser->parse( "Foo<$tag>Bar</$tag>Baz", Title::newFromText( 'Test' ), ParserOptions::newFromUserAndLang( new User, $wgContLang ) );
                $this->fail('Exception not thrown.');
        }
        
@@ -44,11 +44,11 @@ class TagHookTest extends MediaWikiTestCase {
         * @dataProvider provideValidNames
         */
        function testFunctionTagHooks( $tag ) {
-               global $wgParserConf;
+               global $wgParserConf, $wgContLang;
                $parser = new Parser( $wgParserConf );
                
                $parser->setFunctionTagHook( $tag, array( $this, 'functionTagCallback' ), 0 );
-               $parserOutput = $parser->parse( "Foo<$tag>Bar</$tag>Baz", Title::newFromText( 'Test' ), new ParserOptions );
+               $parserOutput = $parser->parse( "Foo<$tag>Bar</$tag>Baz", Title::newFromText( 'Test' ), ParserOptions::newFromUserAndLang( new User, $wgContLang ) );
                $this->assertEquals( "<p>FooOneBaz\n</p>", $parserOutput->getText() );
                
                $parser->mPreprocessor = null; # Break the Parser <-> Preprocessor cycle
@@ -59,11 +59,11 @@ class TagHookTest extends MediaWikiTestCase {
         * @expectedException MWException
         */
        function testBadFunctionTagHooks( $tag ) {
-               global $wgParserConf;
+               global $wgParserConf, $wgContLang;
                $parser = new Parser( $wgParserConf );
                
                $parser->setFunctionTagHook( $tag, array( $this, 'functionTagCallback' ), SFH_OBJECT_ARGS );
-               $parser->parse( "Foo<$tag>Bar</$tag>Baz", Title::newFromText( 'Test' ), new ParserOptions );
+               $parser->parse( "Foo<$tag>Bar</$tag>Baz", Title::newFromText( 'Test' ), ParserOptions::newFromUserAndLang( new User, $wgContLang ) );
                $this->fail('Exception not thrown.');
        }
        
index f102309..82426bd 100644 (file)
@@ -14,9 +14,6 @@ class SpecialRecentchangesTest extends MediaWikiTestCase {
         */
        protected $rc;
 
-       protected function setUp() {
-       }
-
        /** helper to test SpecialRecentchanges::buildMainQueryConds() */
        private function assertConditions( $expected, $requestOptions = null, $message = '' ) {
                $context = new RequestContext;