Merge "(bug 32774) Added config options and flags for SSL and compression in DB."
authorAaron Schulz <aschulz@wikimedia.org>
Sun, 19 Aug 2012 02:49:05 +0000 (02:49 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Sun, 19 Aug 2012 02:49:05 +0000 (02:49 +0000)
110 files changed:
CREDITS
docs/uidesign/mediawiki.action.history.diff.html
includes/Action.php
includes/Article.php
includes/Block.php
includes/CategoryViewer.php
includes/ChangeTags.php
includes/ChangesFeed.php
includes/DefaultSettings.php
includes/GlobalFunctions.php
includes/Html.php
includes/ImageGallery.php
includes/Licenses.php
includes/OutputPage.php
includes/Pager.php
includes/QueryPage.php
includes/Status.php
includes/Xml.php
includes/actions/HistoryAction.php
includes/api/ApiBase.php
includes/api/ApiEditPage.php
includes/api/ApiFeedContributions.php
includes/api/ApiFeedWatchlist.php
includes/api/ApiParse.php
includes/db/DatabaseError.php
includes/db/DatabaseSqlite.php
includes/filebackend/FileBackendMultiWrite.php
includes/filebackend/SwiftFileBackend.php
includes/filebackend/TempFSFile.php
includes/filerepo/FileRepo.php
includes/filerepo/file/File.php
includes/filerepo/file/LocalFile.php
includes/installer/CliInstaller.php
includes/installer/Ibm_db2Installer.php
includes/installer/MysqlInstaller.php
includes/installer/OracleInstaller.php
includes/installer/PostgresInstaller.php
includes/job/DoubleRedirectJob.php
includes/media/DjVu.php
includes/media/GIF.php
includes/media/PNG.php
includes/media/SVG.php
includes/objectcache/SqlBagOStuff.php
includes/search/SearchEngine.php
includes/specials/SpecialEditWatchlist.php
includes/specials/SpecialUndelete.php
includes/specials/SpecialUpload.php
includes/specials/SpecialVersion.php
includes/upload/UploadBase.php
languages/Language.php
languages/LanguageConverter.php
languages/messages/MessagesAr.php
languages/messages/MessagesAst.php
languages/messages/MessagesAz.php
languages/messages/MessagesBcl.php
languages/messages/MessagesCrh_latn.php
languages/messages/MessagesCs.php
languages/messages/MessagesCy.php
languages/messages/MessagesDe.php
languages/messages/MessagesDiq.php
languages/messages/MessagesDsb.php
languages/messages/MessagesEn.php
languages/messages/MessagesEs.php
languages/messages/MessagesEt.php
languages/messages/MessagesEu.php
languages/messages/MessagesFi.php
languages/messages/MessagesFo.php
languages/messages/MessagesFr.php
languages/messages/MessagesGa.php
languages/messages/MessagesGd.php
languages/messages/MessagesHe.php
languages/messages/MessagesHr.php
languages/messages/MessagesHsb.php
languages/messages/MessagesHu.php
languages/messages/MessagesIt.php
languages/messages/MessagesJa.php
languages/messages/MessagesKk_cyrl.php
languages/messages/MessagesKo.php
languages/messages/MessagesLv.php
languages/messages/MessagesMk.php
languages/messages/MessagesMt.php
languages/messages/MessagesNl.php
languages/messages/MessagesNn.php
languages/messages/MessagesOr.php
languages/messages/MessagesPl.php
languages/messages/MessagesPms.php
languages/messages/MessagesQqq.php
languages/messages/MessagesRo.php
languages/messages/MessagesRu.php
languages/messages/MessagesSa.php
languages/messages/MessagesSr_ec.php
languages/messages/MessagesSr_el.php
languages/messages/MessagesTl.php
languages/messages/MessagesTr.php
languages/messages/MessagesTt_cyrl.php
languages/messages/MessagesUg_arab.php
languages/messages/MessagesZh_hans.php
maintenance/cleanupSpam.php
maintenance/language/dumpMessages.php
maintenance/language/messages.inc
maintenance/moveBatch.php
maintenance/storage/orphanStats.php
opensearch_desc.php
skins/CologneBlue.php
skins/Nostalgia.php
skins/Standard.php
tests/parser/parserTests.txt
tests/phpunit/includes/UserTest.php
tests/phpunit/includes/parser/NewParserTest.php
thumb.php

diff --git a/CREDITS b/CREDITS
index aa55af9..5ceccc5 100644 (file)
--- a/CREDITS
+++ b/CREDITS
@@ -125,7 +125,7 @@ following names for their contribution to the product.
 * Jimmy Xu
 * Jonathan Wiltshire
 * John N
-* Karun Dambietz
+* Karun Dambiec
 * Kim Hyun-Joon
 * Krenair
 * Lee Worden
index fdc54aa..7b8eb2a 100644 (file)
@@ -5,9 +5,9 @@
 </head>
 <body style="background-color: #C0C0C0;">
 <p>
-This show various styles for our diff action, the background being hardcoded to gray (<tt>#C0C0C0</tt>) The reference style sheet is:</p>
+This show various styles for our diff action, the background being hardcoded to gray (<code>#C0C0C0</code>) The reference style sheet is:</p>
 <p>
-<tt><a href="../../resources/mediawiki.action/mediawiki.action.history.diff.css">resources/mediawiki.action/mediawiki.action.history.diff.css</a></tt>.
+<code><a href="../../resources/mediawiki.action/mediawiki.action.history.diff.css">resources/mediawiki.action/mediawiki.action.history.diff.css</a></code>.
 </p>
 <p>
 This file might help us fix our diff colors which have been a recurring issues among the community for a loooong time.</p>
@@ -35,12 +35,12 @@ Below are some basic lines being applied one or two classes. Mainly for debuggin
 
        <tr><th>Diff</th></tr>
 
-       <tr><td class="diff-addedline"><tt>diff-addedline</tt>: added line</td></tr>
-       <tr><td class="diff-deletedline"><tt>diff-deletedline</tt>: deleted line</td></tr>
-       <tr><td class="diff-context"><tt>diff-context</tt>: context</td></tr>
+       <tr><td class="diff-addedline"><code>diff-addedline</code>: added line</td></tr>
+       <tr><td class="diff-deletedline"><code>diff-deletedline</code>: deleted line</td></tr>
+       <tr><td class="diff-context"><code>diff-context</code>: context</td></tr>
 
 
-       <tr><th>Same as above with a <tt>&lt;span&gt;</tt> child element having the <tt>diffchange</tt> class</th></tr>
+       <tr><th>Same as above with a <code>&lt;span&gt;</code> child element having the <code>diffchange</code> class</th></tr>
 
        <tr><td class="diffchange">Diffchange</td></tr>
        <tr><td class="diff-addedline">
index f4343d1..5192225 100644 (file)
@@ -341,7 +341,7 @@ abstract class Action {
         * @return String
         */
        protected function getDescription() {
-               return wfMsgHtml( strtolower( $this->getName() ) );
+               return $this->msg( strtolower( $this->getName() ) )->escaped();
        }
 
        /**
index 237f0ce..92b6991 100644 (file)
@@ -245,7 +245,8 @@ class Article extends Page {
                                        $text = '';
                                }
                        } else {
-                               $text = wfMsgExt( $this->getContext()->getUser()->isLoggedIn() ? 'noarticletext' : 'noarticletextanon', 'parsemag' );
+                               $message = $this->getContext()->getUser()->isLoggedIn() ? 'noarticletext' : 'noarticletextanon';
+                               $text = wfMessage( $message )->text();
                        }
                        wfProfileOut( __METHOD__ );
 
@@ -961,21 +962,20 @@ class Article extends Page {
                $token = $user->getEditToken( $rcid );
                $outputPage->preventClickjacking();
 
+               $link = Linker::linkKnown(
+                       $this->getTitle(),
+                       wfMessage( 'markaspatrolledtext' )->escaped(),
+                       array(),
+                       array(
+                               'action' => 'markpatrolled',
+                               'rcid' => $rcid,
+                               'token' => $token,
+                       )
+               );
+
                $outputPage->addHTML(
                        "<div class='patrollink'>" .
-                               wfMsgHtml(
-                                       'markaspatrolledlink',
-                                       Linker::linkKnown(
-                                               $this->getTitle(),
-                                               wfMsgHtml( 'markaspatrolledtext' ),
-                                               array(),
-                                               array(
-                                                       'action' => 'markpatrolled',
-                                                       'rcid' => $rcid,
-                                                       'token' => $token,
-                                               )
-                                       )
-                               ) .
+                               wfMessage( 'markaspatrolledlink' )->rawParams( $link )->escaped() .
                        '</div>'
                );
        }
@@ -1148,18 +1148,18 @@ class Article extends Page {
                        $tdtime, $revision->getUser() )->parse() . "</div>" );
 
                $lnk = $current
-                       ? wfMsgHtml( 'currentrevisionlink' )
+                       ? wfMessage( 'currentrevisionlink' )->escaped()
                        : Linker::linkKnown(
                                $this->getTitle(),
-                               wfMsgHtml( 'currentrevisionlink' ),
+                               wfMessage( 'currentrevisionlink' )->escaped(),
                                array(),
                                $extraParams
                        );
                $curdiff = $current
-                       ? wfMsgHtml( 'diff' )
+                       ? wfMessage( 'diff' )->escaped()
                        : Linker::linkKnown(
                                $this->getTitle(),
-                               wfMsgHtml( 'diff' ),
+                               wfMessage( 'diff' )->escaped(),
                                array(),
                                array(
                                        'diff' => 'cur',
@@ -1170,30 +1170,30 @@ class Article extends Page {
                $prevlink = $prev
                        ? Linker::linkKnown(
                                $this->getTitle(),
-                               wfMsgHtml( 'previousrevision' ),
+                               wfMessage( 'previousrevision' )->escaped(),
                                array(),
                                array(
                                        'direction' => 'prev',
                                        'oldid' => $oldid
                                ) + $extraParams
                        )
-                       : wfMsgHtml( 'previousrevision' );
+                       : wfMessage( 'previousrevision' )->escaped();
                $prevdiff = $prev
                        ? Linker::linkKnown(
                                $this->getTitle(),
-                               wfMsgHtml( 'diff' ),
+                               wfMessage( 'diff' )->escaped(),
                                array(),
                                array(
                                        'diff' => 'prev',
                                        'oldid' => $oldid
                                ) + $extraParams
                        )
-                       : wfMsgHtml( 'diff' );
+                       : wfMessage( 'diff' )->escaped();
                $nextlink = $current
-                       ? wfMsgHtml( 'nextrevision' )
+                       ? wfMessage( 'nextrevision' )->escaped()
                        : Linker::linkKnown(
                                $this->getTitle(),
-                               wfMsgHtml( 'nextrevision' ),
+                               wfMessage( 'nextrevision' )->escaped(),
                                array(),
                                array(
                                        'direction' => 'next',
@@ -1201,10 +1201,10 @@ class Article extends Page {
                                ) + $extraParams
                        );
                $nextdiff = $current
-                       ? wfMsgHtml( 'diff' )
+                       ? wfMessage( 'diff' )->escaped()
                        : Linker::linkKnown(
                                $this->getTitle(),
-                               wfMsgHtml( 'diff' ),
+                               wfMessage( 'diff' )->escaped(),
                                array(),
                                array(
                                        'diff' => 'next',
@@ -1241,7 +1241,8 @@ class Article extends Page {
                $imageDir = $lang->getDir();
 
                if ( $appendSubtitle ) {
-                       $this->getContext()->getOutput()->appendSubtitle( wfMsgHtml( 'redirectpagesub' ) );
+                       $out = $this->getContext()->getOutput();
+                       $out->appendSubtitle( wfMessage( 'redirectpagesub' )->escaped() );
                }
 
                // the loop prepends the arrow image before the link, so the first case needs to be outside
@@ -1347,7 +1348,8 @@ class Article extends Page {
                        $reason = $deleteReason;
                } elseif ( $deleteReason != '' ) {
                        // Entry from drop down menu + additional comment
-                       $reason = $deleteReasonList . wfMsgForContent( 'colon-separator' ) . $deleteReason;
+                       $colonseparator = wfMessage( 'colon-separator' )->inContentLanguage()->text();
+                       $reason = $deleteReasonList . $colonseparator . $deleteReason;
                } else {
                        $reason = $deleteReasonList;
                }
@@ -1382,9 +1384,9 @@ class Article extends Page {
                        $revisions = $this->mTitle->estimateRevisionCount();
                        // @todo FIXME: i18n issue/patchwork message
                        $this->getContext()->getOutput()->addHTML( '<strong class="mw-delete-warning-revisions">' .
-                               wfMsgExt( 'historywarning', array( 'parseinline' ), $this->getContext()->getLanguage()->formatNum( $revisions ) ) .
-                               wfMsgHtml( 'word-separator' ) . Linker::linkKnown( $title,
-                                       wfMsgHtml( 'history' ),
+                               wfMessage( 'historywarning' )->numParams( $revisions )->parse() .
+                               wfMessage( 'word-separator' )->plain() . Linker::linkKnown( $title,
+                                       wfMessage( 'history' )->escaped(),
                                        array( 'rel' => 'archives' ),
                                        array( 'action' => 'history' ) ) .
                                '</strong>'
@@ -1422,7 +1424,7 @@ class Article extends Page {
                        $suppress = "<tr id=\"wpDeleteSuppressRow\">
                                        <td></td>
                                        <td class='mw-input'><strong>" .
-                                               Xml::checkLabel( wfMsg( 'revdelete-suppress' ),
+                                               Xml::checkLabel( wfMessage( 'revdelete-suppress' )->text(),
                                                        'wpSuppress', 'wpSuppress', false, array( 'tabindex' => '4' ) ) .
                                        "</strong></td>
                                </tr>";
@@ -1438,17 +1440,17 @@ class Article extends Page {
                        Xml::openElement( 'table', array( 'id' => 'mw-deleteconfirm-table' ) ) .
                        "<tr id=\"wpDeleteReasonListRow\">
                                <td class='mw-label'>" .
-                                       Xml::label( wfMsg( 'deletecomment' ), 'wpDeleteReasonList' ) .
+                                       Xml::label( wfMessage( 'deletecomment' )->text(), 'wpDeleteReasonList' ) .
                                "</td>
                                <td class='mw-input'>" .
                                        Xml::listDropDown( 'wpDeleteReasonList',
-                                               wfMsgForContent( 'deletereason-dropdown' ),
-                                               wfMsgForContent( 'deletereasonotherlist' ), '', 'wpReasonDropDown', 1 ) .
+                                               wfMessage( 'deletereason-dropdown' )->inContentLanguage()->text(),
+                                               wfMessage( 'deletereasonotherlist' )->inContentLanguage()->text(), '', 'wpReasonDropDown', 1 ) .
                                "</td>
                        </tr>
                        <tr id=\"wpDeleteReasonRow\">
                                <td class='mw-label'>" .
-                                       Xml::label( wfMsg( 'deleteotherreason' ), 'wpReason' ) .
+                                       Xml::label( wfMessage( 'deleteotherreason' )->text(), 'wpReason' ) .
                                "</td>
                                <td class='mw-input'>" .
                                Html::input( 'wpReason', $reason, 'text', array(
@@ -1467,7 +1469,7 @@ class Article extends Page {
                        <tr>
                                <td></td>
                                <td class='mw-input'>" .
-                                       Xml::checkLabel( wfMsg( 'watchthis' ),
+                                       Xml::checkLabel( wfMessage( 'watchthis' )->text(),
                                                'wpWatch', 'wpWatch', $checkWatch, array( 'tabindex' => '3' ) ) .
                                "</td>
                        </tr>";
@@ -1478,7 +1480,7 @@ class Article extends Page {
                        <tr>
                                <td></td>
                                <td class='mw-submit'>" .
-                                       Xml::submitButton( wfMsg( 'deletepage' ),
+                                       Xml::submitButton( wfMessage( 'deletepage' )->text(),
                                                array( 'name' => 'wpConfirmB', 'id' => 'wpConfirmB', 'tabindex' => '5' ) ) .
                                "</td>
                        </tr>" .
@@ -1491,7 +1493,7 @@ class Article extends Page {
                                $title = Title::makeTitle( NS_MEDIAWIKI, 'Deletereason-dropdown' );
                                $link = Linker::link(
                                        $title,
-                                       wfMsgHtml( 'delete-edit-reasonlist' ),
+                                       wfMessage( 'delete-edit-reasonlist' )->escaped(),
                                        array(),
                                        array( 'action' => 'edit' )
                                );
index 301a45a..6e8f9f3 100644 (file)
@@ -613,7 +613,7 @@ class Block {
                $key = wfMemcKey( 'ipb', 'autoblock', 'whitelist' );
                $lines = $wgMemc->get( $key );
                if ( !$lines ) {
-                       $lines = explode( "\n", wfMsgForContentNoTrans( 'autoblock_whitelist' ) );
+                       $lines = explode( "\n", wfMessage( 'autoblock_whitelist' )->inContentLanguage()->plain() );
                        $wgMemc->set( $key, $lines, 3600 * 24 );
                }
 
@@ -687,7 +687,7 @@ class Block {
                wfDebug( "Autoblocking {$this->getTarget()}@" . $autoblockIP . "\n" );
                $autoblock->setTarget( $autoblockIP );
                $autoblock->setBlocker( $this->getBlocker() );
-               $autoblock->mReason = wfMsgForContent( 'autoblocker', $this->getTarget(), $this->mReason );
+               $autoblock->mReason = wfMessage( 'autoblocker', $this->getTarget(), $this->mReason )->inContentLanguage()->text();
                $timestamp = wfTimestampNow();
                $autoblock->mTimestamp = $timestamp;
                $autoblock->mAuto = 1;
@@ -1020,7 +1020,7 @@ class Block {
                        $keys = array( 'infiniteblock', 'expiringblock' );
 
                        foreach ( $keys as $key ) {
-                               $msg[$key] = wfMsgHtml( $key );
+                               $msg[$key] = wfMessage( $key )->escaped();
                        }
                }
 
index ddd01eb..4e4f311 100644 (file)
@@ -526,7 +526,7 @@ class CategoryViewer extends ContextSource {
                                if ( $first && $char === $prevchar ) {
                                        # We're continuing a previous chunk at the top of a new
                                        # column, so add " cont." after the letter.
-                                       $ret .= ' ' . wfMsgHtml( 'listingcontinuesabbrev' );
+                                       $ret .= ' ' . wfMessage( 'listingcontinuesabbrev' )->escaped();
                                }
                                $ret .= "</h3>\n";
 
index 34e9eba..0ebc926 100644 (file)
@@ -227,7 +227,7 @@ class ChangeTags {
                if ( !$wgUseTagFilter || !count( self::listDefinedTags() ) )
                        return $fullForm ? '' : array();
 
-               $data = array( Html::rawElement( 'label', array( 'for' => 'tagfilter' ), wfMsgExt( 'tag-filter', 'parseinline' ) ),
+               $data = array( Html::rawElement( 'label', array( 'for' => 'tagfilter' ), wfMessage( 'tag-filter' )->parse() ),
                        Xml::input( 'tagfilter', 20, $selected, array( 'class' => 'mw-tagfilter-input' ) ) );
 
                if ( !$fullForm ) {
@@ -235,7 +235,7 @@ class ChangeTags {
                }
 
                $html = implode( '&#160;', $data );
-               $html .= "\n" . Xml::element( 'input', array( 'type' => 'submit', 'value' => wfMsg( 'tag-filter-submit' ) ) );
+               $html .= "\n" . Xml::element( 'input', array( 'type' => 'submit', 'value' => wfMessage( 'tag-filter-submit' )->text() ) );
                $html .= "\n" . Html::hidden( 'title', $title->getPrefixedText() );
                $html = Xml::tags( 'form', array( 'action' => $title->getLocalURL(), 'class' => 'mw-tagfilter-form', 'method' => 'get' ), $html );
 
index 2954920..ee4c2d6 100644 (file)
@@ -206,7 +206,7 @@ class ChangesFeed {
                                FeedUtils::formatDiff( $obj ),
                                $url,
                                $obj->rc_timestamp,
-                               ($obj->rc_deleted & Revision::DELETED_USER) ? wfMsgHtml('rev-deleted-user') : $obj->rc_user_text,
+                               ( $obj->rc_deleted & Revision::DELETED_USER ) ? wfMessage( 'rev-deleted-user' )->escaped() : $obj->rc_user_text,
                                $talkpage
                        );
                        $feed->outItem( $item );
index 1ccf5a9..d77aed1 100644 (file)
@@ -2323,16 +2323,16 @@ $wgVariantArticlePath = false;
 $wgLoginLanguageSelector = false;
 
 /**
- * When translating messages with wfMsg(), it is not always clear what should
- * be considered UI messages and what should be content messages.
+ * When translating messages with wfMessage(), it is not always clear what 
+ * should be considered UI messages and what should be content messages.
  *
  * For example, for the English Wikipedia, there should be only one 'mainpage',
  * so when getting the link for 'mainpage', we should treat it as site content
- * and call wfMsgForContent(), but for rendering the text of the link, we call
- * wfMsg(). The code behaves this way by default. However, sites like the
- * Wikimedia Commons do offer different versions of 'mainpage' and the like for
- * different languages. This array provides a way to override the default
- * behavior.
+ * and call ->inContentLanguage()->text(), but for rendering the text of the
+ * link, we call ->text(). The code behaves this way by default. However,
+ * sites like the Wikimedia Commons do offer different versions of 'mainpage'
+ * and the like for different languages. This array provides a way to override
+ * the default behavior.
  *
  * @par Example:
  * To allow language-specific main page and community
index 308b711..c592c7c 100644 (file)
@@ -476,7 +476,7 @@ function wfCgiToArray( $query ) {
  * Append a query string to an existing URL, which may or may not already
  * have query string parameters already. If so, they will be combined.
  *
- * @deprecated
+ * @deprecated in 1.20. Use Uri class.
  * @param $url String
  * @param $query Mixed: string or associative array
  * @return string
@@ -1906,13 +1906,7 @@ function wfFormatStackFrame( $frame ) {
  * @return String
  */
 function wfShowingResults( $offset, $limit ) {
-       global $wgLang;
-       return wfMsgExt(
-               'showingresults',
-               array( 'parseinline' ),
-               $wgLang->formatNum( $limit ),
-               $wgLang->formatNum( $offset + 1 )
-       );
+       return wfMessage( 'showingresults' )->numParams( $limit, $offset + 1 )->parse();
 }
 
 /**
@@ -3969,7 +3963,7 @@ function wfIsBadImage( $name, $contextTitle = false, $blacklist = null ) {
                $badImages = $badImageCache;
        } else { // cache miss
                if ( $blacklist === null ) {
-                       $blacklist = wfMsgForContentNoTrans( 'bad_image_list' ); // site list
+                       $blacklist = wfMessage( 'bad_image_list' )->inContentLanguage()->plain(); // site list
                }
                # Build the list now
                $badImages = array();
index 7fa98e1..23fead7 100644 (file)
@@ -749,7 +749,7 @@ class Html {
                if ( isset( $params['all'] ) ) {
                        // add an option that would let the user select all namespaces.
                        // Value is provided by user, the name shown is localized for the user.
-                       $options[$params['all']] = wfMsg( 'namespacesall' );
+                       $options[$params['all']] = wfMessage( 'namespacesall' )->text();
                }
                // Add all namespaces as options (in the content langauge)
                $options += $wgContLang->getFormattedNamespaces();
@@ -763,7 +763,7 @@ class Html {
                        if ( $nsId === 0 ) {
                                // For other namespaces use use the namespace prefix as label, but for
                                // main we don't use "" but the user message descripting it (e.g. "(Main)" or "(Article)")
-                               $nsName = wfMsg( 'blanknamespace' );
+                               $nsName = wfMessage( 'blanknamespace' )->text();
                        }
                        $optionsHtml[] = Html::element(
                                'option', array(
@@ -859,7 +859,7 @@ class Html {
        /**
         * Get HTML for an info box with an icon.
         *
-        * @param $text String: wikitext, get this with wfMsgNoTrans()
+        * @param $text String: wikitext, get this with wfMessage()->plain()
         * @param $icon String: icon name, file in skins/common/images
         * @param $alt String: alternate text for the icon
         * @param $class String: additional class name to add to the wrapper div
index d391ead..91c3190 100644 (file)
@@ -339,7 +339,7 @@ class ImageGallery {
                                if( $img ) {
                                        $fileSize = htmlspecialchars( $wgLang->formatSize( $img->getSize() ) );
                                } else {
-                                       $fileSize = wfMsgHtml( 'filemissing' );
+                                       $fileSize = wfMessage( 'filemissing' )->escaped();
                                }
                                $fileSize = "$fileSize<br />\n";
                        } else {
index c498a57..0cfb047 100644 (file)
@@ -52,7 +52,7 @@ class Licenses extends HTMLFormField {
        public function __construct( $params ) {
                parent::__construct( $params );
 
-               $this->msg = empty( $params['licenses'] ) ? wfMsgForContent( 'licenses' ) : $params['licenses'];
+               $this->msg = empty( $params['licenses'] ) ? wfMessage( 'licenses' )->inContentLanguage()->plain() : $params['licenses'];
                $this->selected = null;
 
                $this->makeLicenses();
@@ -182,7 +182,7 @@ class Licenses extends HTMLFormField {
        public function getInputHTML( $value ) {
                $this->selected = $value;
 
-               $this->html = $this->outputOption( wfMsg( 'nolicense' ), '',
+               $this->html = $this->outputOption( wfMessage( 'nolicense' )->text(), '',
                        (bool)$this->selected ? null : array( 'selected' => 'selected' ) );
                $this->makeHtml( $this->getLicenses() );
 
index a9c7d14..d170722 100644 (file)
@@ -3521,7 +3521,7 @@ $templates
         * Add a wikitext-formatted message to the output.
         * This is equivalent to:
         *
-        *    $wgOut->addWikiText( wfMsgNoTrans( ... ) )
+        *    $wgOut->addWikiText( wfMessage( ... )->plain() )
         */
        public function addWikiMsg( /*...*/ ) {
                $args = func_get_args();
index bd6a7f0..96ba446 100644 (file)
@@ -927,7 +927,7 @@ abstract class TablePager extends IndexPager {
                $tableClass = htmlspecialchars( $this->getTableClass() );
                $sortClass = htmlspecialchars( $this->getSortHeaderClass() );
 
-               $s = "<table style='border:1;' class=\"mw-datatable $tableClass\"><thead><tr>\n";
+               $s = "<table style='border:1px;' class=\"mw-datatable $tableClass\"><thead><tr>\n";
                $fields = $this->getFieldNames();
 
                # Make table header
index 076b1b5..e188d3b 100644 (file)
@@ -526,7 +526,8 @@ abstract class QueryPage extends SpecialPage {
                        $out->addHTML( $this->getPageHeader() );
                        if ( $this->numRows > 0 ) {
                                $out->addHTML( $this->msg( 'showingresults' )->numParams(
-                                       $this->numRows, $this->offset + 1 )->parseAsBlock() );
+                                       min( $this->numRows, $this->limit ), # do not show the one extra row, if exist
+                                       $this->offset + 1 )->parseAsBlock() );
                                # Disable the "next" link when we reach the end
                                $paging = $this->getLanguage()->viewPrevNext( $this->getTitle( $par ), $this->offset,
                                        $this->limit, $this->linkParameters(), ( $this->numRows <= $this->limit ) );
@@ -557,7 +558,7 @@ abstract class QueryPage extends SpecialPage {
 
                $out->addHTML( Xml::closeElement( 'div' ) );
 
-               return $this->numRows;
+               return min( $this->numRows, $this->limit ); # do not return the one extra row, if exist
        }
 
        /**
index a2df380..29dc2f4 100644 (file)
@@ -172,7 +172,7 @@ class Status {
                $params = $this->cleanParams( $item['params'] );
                $xml = "<{$item['type']}>\n" .
                        Xml::element( 'message', null, $item['message'] ) . "\n" .
-                       Xml::element( 'text', null, wfMsg( $item['message'], $params ) ) ."\n";
+                       Xml::element( 'text', null, wfMessage( $item['message'], $params )->text() ) ."\n";
                foreach ( $params as $param ) {
                        $xml .= Xml::element( 'param', null, $param );
                }
@@ -214,17 +214,17 @@ class Status {
                if ( count( $this->errors ) == 1 ) {
                        $s = $this->getWikiTextForError( $this->errors[0], $this->errors[0]  );
                        if ( $shortContext ) {
-                               $s = wfMsgNoTrans( $shortContext, $s );
+                               $s = wfMessage( $shortContext, $s )->plain();
                        } elseif ( $longContext ) {
-                               $s = wfMsgNoTrans( $longContext, "* $s\n" );
+                               $s = wfMessage( $longContext, "* $s\n" )->plain();
                        }
                } else {
                        $s = '* '. implode("\n* ",
                                $this->getWikiTextArray( $this->errors ) ) . "\n";
                        if ( $longContext ) {
-                               $s = wfMsgNoTrans( $longContext, $s );
+                               $s = wfMessage( $longContext, $s )->plain();
                        } elseif ( $shortContext ) {
-                               $s = wfMsgNoTrans( $shortContext, "\n$s\n" );
+                               $s = wfMessage( $shortContext, "\n$s\n" )->plain();
                        }
                }
                return $s;
@@ -242,15 +242,15 @@ class Status {
        protected function getWikiTextForError( $error ) {
                if ( is_array( $error ) ) {
                        if ( isset( $error['message'] ) && isset( $error['params'] ) ) {
-                               return wfMsgNoTrans( $error['message'],
-                                       array_map( 'wfEscapeWikiText', $this->cleanParams( $error['params'] ) )  );
+                               return wfMessage( $error['message'],
+                                       array_map( 'wfEscapeWikiText', $this->cleanParams( $error['params'] ) )  )->plain();
                        } else {
                                $message = array_shift($error);
-                               return wfMsgNoTrans( $message,
-                                       array_map( 'wfEscapeWikiText', $this->cleanParams( $error ) ) );
+                               return wfMessage( $message,
+                                       array_map( 'wfEscapeWikiText', $this->cleanParams( $error ) ) )->plain();
                        }
                } else {
-                       return wfMsgNoTrans( $error );
+                       return wfMessage( $error )->plain();
                }
        }
 
index 505cb7f..120312d 100644 (file)
@@ -166,7 +166,7 @@ class Xml {
                if( is_null( $selected ) )
                        $selected = '';
                if( !is_null( $allmonths ) )
-                       $options[] = self::option( wfMsg( 'monthsall' ), $allmonths, $selected === $allmonths );
+                       $options[] = self::option( wfMessage( 'monthsall' )->text(), $allmonths, $selected === $allmonths );
                for( $i = 1; $i < 13; $i++ )
                        $options[] = self::option( $wgLang->getMonthName( $i ), $i, $selected === $i );
                return self::openElement( 'select', array( 'id' => $id, 'name' => 'month', 'class' => 'mw-month-selector' ) )
@@ -198,9 +198,9 @@ class Xml {
                } else {
                        $encYear = '';
                }
-               return Xml::label( wfMsg( 'year' ), 'year' ) . ' '.
+               return Xml::label( wfMessage( 'year' )->text(), 'year' ) . ' '.
                        Xml::input( 'year', 4, $encYear, array('id' => 'year', 'maxlength' => 4) ) . ' '.
-                       Xml::label( wfMsg( 'month' ), 'month' ) . ' '.
+                       Xml::label( wfMessage( 'month' )->text(), 'month' ) . ' '.
                        Xml::monthSelector( $encMonth, -1 );
        }
 
@@ -772,7 +772,7 @@ class Xml {
                foreach( $fields as $labelmsg => $input ) {
                        $id = "mw-$labelmsg";
                        $form .= Xml::openElement( 'tr', array( 'id' => $id ) );
-                       $form .= Xml::tags( 'td', array('class' => 'mw-label'), wfMsgExt( $labelmsg, array('parseinline') ) );
+                       $form .= Xml::tags( 'td', array('class' => 'mw-label'), wfMessage( $labelmsg )->parse() );
                        $form .= Xml::openElement( 'td', array( 'class' => 'mw-input' ) ) . $input . Xml::closeElement( 'td' );
                        $form .= Xml::closeElement( 'tr' );
                }
@@ -780,7 +780,7 @@ class Xml {
                if( $submitLabel ) {
                        $form .= Xml::openElement( 'tr' );
                        $form .= Xml::tags( 'td', array(), '' );
-                       $form .= Xml::openElement( 'td', array( 'class' => 'mw-submit' ) ) . Xml::submitButton( wfMsg( $submitLabel ) ) . Xml::closeElement( 'td' );
+                       $form .= Xml::openElement( 'td', array( 'class' => 'mw-submit' ) ) . Xml::submitButton( wfMessage( $submitLabel )->text() ) . Xml::closeElement( 'td' );
                        $form .= Xml::closeElement( 'tr' );
                }
 
index 1dacabc..c22c04b 100644 (file)
@@ -248,8 +248,8 @@ class HistoryAction extends FormlessAction {
 
                $feed = new $wgFeedClasses[$type](
                        $this->getTitle()->getPrefixedText() . ' - ' .
-                       wfMsgForContent( 'history-feed-title' ),
-                       wfMsgForContent( 'history-feed-description' ),
+                       wfMessage( 'history-feed-title' )->inContentLanguage()->text(),
+                       wfMessage( 'history-feed-description' )->inContentLanguage()->text(),
                        $this->getTitle()->getFullUrl( 'action=history' )
                );
 
@@ -275,8 +275,8 @@ class HistoryAction extends FormlessAction {
 
        function feedEmpty() {
                return new FeedItem(
-                       wfMsgForContent( 'nohistory' ),
-                       $this->getOutput()->parse( wfMsgForContent( 'history-feed-empty' ) ),
+                       wfMessage( 'nohistory' )->inContentLanguage()->text(),
+                       $this->getOutput()->parse( wfMessage( 'history-feed-empty' )->inContentLanguage()->text() ),
                        $this->getTitle()->getFullUrl(),
                        wfTimestamp( TS_MW ),
                        '',
@@ -304,15 +304,14 @@ class HistoryAction extends FormlessAction {
                );
                if ( $rev->getComment() == '' ) {
                        global $wgContLang;
-                       $title = wfMsgForContent( 'history-feed-item-nocomment',
+                       $title = wfMessage( 'history-feed-item-nocomment',
                                $rev->getUserText(),
                                $wgContLang->timeanddate( $rev->getTimestamp() ),
                                $wgContLang->date( $rev->getTimestamp() ),
-                               $wgContLang->time( $rev->getTimestamp() )
-                       );
+                               $wgContLang->time( $rev->getTimestamp() ) )->inContentLanguage()->text();
                } else {
                        $title = $rev->getUserText() .
-                       wfMsgForContent( 'colon-separator' ) .
+                       wfMessage( 'colon-separator' )->inContentLanguage()->text() .
                        FeedItem::stripComment( $rev->getComment() );
                }
                return new FeedItem(
index ca9f738..1e62766 100644 (file)
@@ -697,14 +697,15 @@ abstract class ApiBase extends ContextSource {
        public function requireOnlyOneParameter( $params ) {
                $required = func_get_args();
                array_shift( $required );
+               $p = $this->getModulePrefix();
 
                $intersection = array_intersect( array_keys( array_filter( $params,
                        array( $this, "parameterNotEmpty" ) ) ), $required );
 
                if ( count( $intersection ) > 1 ) {
-                       $this->dieUsage( 'The parameters ' . implode( ', ', $intersection ) . ' can not be used together', 'invalidparammix' );
+                       $this->dieUsage( "The parameters {$p}" . implode( ", {$p}",  $intersection ) . ' can not be used together', "{$p}invalidparammix" );
                } elseif ( count( $intersection ) == 0 ) {
-                       $this->dieUsage( 'One of the parameters ' . implode( ', ', $required ) . ' is required', 'missingparam' );
+                       $this->dieUsage( "One of the parameters {$p}" . implode( ", {$p}", $required ) . ' is required', "{$p}missingparam" );
                }
        }
 
@@ -732,12 +733,13 @@ abstract class ApiBase extends ContextSource {
        public function requireMaxOneParameter( $params ) {
                $required = func_get_args();
                array_shift( $required );
+               $p = $this->getModulePrefix();
 
                $intersection = array_intersect( array_keys( array_filter( $params,
                        array( $this, "parameterNotEmpty" ) ) ), $required );
 
                if ( count( $intersection ) > 1 ) {
-                       $this->dieUsage( 'The parameters ' . implode( ', ', $intersection ) . ' can not be used together', 'invalidparammix' );
+                       $this->dieUsage( "The parameters {$p}" . implode( ", {$p}", $intersection ) . ' can not be used together', "{$p}invalidparammix" );
                }
        }
 
index e75c4ad..3be4b00 100644 (file)
@@ -162,7 +162,7 @@ class ApiEditPage extends ApiBase {
                        // If no summary was given and we only undid one rev,
                        // use an autosummary
                        if ( is_null( $params['summary'] ) && $titleObj->getNextRevisionID( $undoafterRev->getID() ) == $params['undo'] ) {
-                               $params['summary'] = wfMsgForContent( 'undo-summary', $params['undo'], $undoRev->getUserText() );
+                               $params['summary'] = wfMessage( 'undo-summary', $params['undo'], $undoRev->getUserText() )->inContentLanguage()->text();
                        }
                }
 
index d808075..1cf760a 100644 (file)
@@ -60,7 +60,7 @@ class ApiFeedContributions extends ApiBase {
                        $this->dieUsage( 'Size difference is disabled in Miser Mode', 'sizediffdisabled' );
                }
 
-               $msg = wfMsgForContent( 'Contributions' );
+               $msg = wfMessage( 'Contributions' )->inContentLanguage()->text();
                $feedTitle = $wgSitename . ' - ' . $msg . ' [' . $wgLanguageCode . ']';
                $feedUrl = SpecialPage::getTitleFor( 'Contributions', $params['user'] )->getFullURL();
 
@@ -129,7 +129,8 @@ class ApiFeedContributions extends ApiBase {
         */
        protected function feedItemDesc( $revision ) {
                if( $revision ) {
-                       return '<p>' . htmlspecialchars( $revision->getUserText() ) . wfMsgForContent( 'colon-separator' ) .
+                       $msg = wfMessage( 'colon-separator' )->inContentLanguage()->text();
+                       return '<p>' . htmlspecialchars( $revision->getUserText() ) . $msg .
                                htmlspecialchars( FeedItem::stripComment( $revision->getComment() ) ) .
                                "</p>\n<hr />\n<div>" .
                                nl2br( htmlspecialchars( $revision->getText() ) ) . "</div>";
index 7f79835..6ccb02f 100644 (file)
@@ -117,7 +117,7 @@ class ApiFeedWatchlist extends ApiBase {
                                $feedItems[] = $this->createFeedItem( $info );
                        }
 
-                       $msg = wfMsgForContent( 'watchlist' );
+                       $msg = wfMessage( 'watchlist' )->inContentLanguage()->text();
 
                        $feedTitle = $wgSitename . ' - ' . $msg . ' [' . $wgLanguageCode . ']';
                        $feedUrl = SpecialPage::getTitleFor( 'Watchlist' )->getFullURL();
@@ -131,11 +131,12 @@ class ApiFeedWatchlist extends ApiBase {
                        // Error results should not be cached
                        $this->getMain()->setCacheMaxAge( 0 );
 
-                       $feedTitle = $wgSitename . ' - Error - ' . wfMsgForContent( 'watchlist' ) . ' [' . $wgLanguageCode . ']';
+                       $feedTitle = $wgSitename . ' - Error - ' . wfMessage( 'watchlist' )->inContentLanguage()->text() . ' [' . $wgLanguageCode . ']';
                        $feedUrl = SpecialPage::getTitleFor( 'Watchlist' )->getFullURL();
 
                        $feedFormat = isset( $params['feedformat'] ) ? $params['feedformat'] : 'rss';
-                       $feed = new $wgFeedClasses[$feedFormat] ( $feedTitle, htmlspecialchars( wfMsgForContent( 'watchlist' ) ), $feedUrl );
+                       $msg = wfMessage( 'watchlist' )->inContentLanguage()->escaped();
+                       $feed = new $wgFeedClasses[$feedFormat] ( $feedTitle, $msg, $feedUrl );
 
                        if ( $e instanceof UsageException ) {
                                $errorCode = $e->getCodeString();
index f64b3e5..8aac2f4 100644 (file)
@@ -413,7 +413,7 @@ class ApiParse extends ApiBase {
                        return '';
                }
 
-               $s = htmlspecialchars( wfMsg( 'otherlanguages' ) . wfMsg( 'colon-separator' ) );
+               $s = htmlspecialchars( wfMessage( 'otherlanguages' )->text() . wfMessage( 'colon-separator' )->text() );
 
                $langs = array();
                foreach ( $languages as $l ) {
index 53341c3..a53a674 100644 (file)
@@ -318,7 +318,7 @@ class DBQueryError extends DBError {
                                $fname = $this->fname;
                                $error = $this->error;
                        }
-                       return wfMsg( $msg, $sql, $fname, $this->errno, $error );
+                       return wfMessage( $msg )->rawParams( $sql, $fname, $this->errno, $error )->text();
                } else {
                        return parent::getContentMessage( $html );
                }
index 952b497..cb3da1e 100644 (file)
@@ -622,7 +622,7 @@ class DatabaseSqlite extends DatabaseBase {
         * @return string User-friendly database information
         */
        public function getServerInfo() {
-               return wfMsg( self::getFulltextSearchModule() ? 'sqlite-has-fts' : 'sqlite-no-fts', $this->getServerVersion() );
+               return wfMessage( self::getFulltextSearchModule() ? 'sqlite-has-fts' : 'sqlite-no-fts', $this->getServerVersion() )->text();
        }
 
        /**
index e9136d5..f4a7eac 100644 (file)
@@ -72,9 +72,12 @@ class FileBackendMultiWrite extends FileBackend {
         */
        public function __construct( array $config ) {
                parent::__construct( $config );
-               $namesUsed = array();
+               $this->syncChecks = isset( $config['syncChecks'] )
+                       ? $config['syncChecks']
+                       : self::CHECK_SIZE;
                // Construct backends here rather than via registration
                // to keep these backends hidden from outside the proxy.
+               $namesUsed = array();
                foreach ( $config['backends'] as $index => $config ) {
                        if ( isset( $config['template'] ) ) {
                                // Config is just a modified version of a registered backend's.
@@ -108,9 +111,6 @@ class FileBackendMultiWrite extends FileBackend {
                if ( $this->masterIndex < 0 ) { // need backends and must have a master
                        throw new MWException( 'No master backend defined.' );
                }
-               $this->syncChecks = isset( $config['syncChecks'] )
-                       ? $config['syncChecks']
-                       : self::CHECK_SIZE;
        }
 
        /**
@@ -167,7 +167,7 @@ class FileBackendMultiWrite extends FileBackend {
        /**
         * Check that a set of files are consistent across all internal backends
         *
-        * @param $paths Array
+        * @param $paths Array List of storage paths
         * @return Status
         */
        public function consistencyCheck( array $paths ) {
@@ -183,7 +183,7 @@ class FileBackendMultiWrite extends FileBackend {
                        // Stat the file on the 'master' backend
                        $mStat = $mBackend->getFileStat( $mParams );
                        if ( $this->syncChecks & self::CHECK_SHA1 ) {
-                               $mSha1 = $mBackend->getFileSha1( $mParams );
+                               $mSha1 = $mBackend->getFileSha1Base36( $mParams );
                        } else {
                                $mSha1 = false;
                        }
@@ -215,7 +215,7 @@ class FileBackendMultiWrite extends FileBackend {
                                                }
                                        }
                                        if ( $this->syncChecks & self::CHECK_SHA1 ) {
-                                               if ( $cBackend->getFileSha1( $cParams ) !== $mSha1 ) { // wrong SHA1
+                                               if ( $cBackend->getFileSha1Base36( $cParams ) !== $mSha1 ) { // wrong SHA1
                                                        $status->fatal( 'backend-fail-synced', $path );
                                                        continue;
                                                }
@@ -234,6 +234,44 @@ class FileBackendMultiWrite extends FileBackend {
                return $status;
        }
 
+       /**
+        * Check that a set of files are consistent across all internal backends
+        * and re-synchronize those files againt the "multi master" if needed.
+        *
+        * @param $paths Array List of storage paths
+        * @return Status
+        */
+       public function resyncFiles( array $paths ) {
+               $status = Status::newGood();
+
+               $mBackend = $this->backends[$this->masterIndex];
+               foreach ( $paths as $path ) {
+                       $mPath  = $this->substPaths( $path, $mBackend );
+                       $mSha1  = $mBackend->getFileSha1Base36( array( 'src' => $mPath ) );
+                       $mExist = $mBackend->fileExists( array( 'src' => $mPath ) );
+                       // Check of all clone backends agree with the master...
+                       foreach ( $this->backends as $index => $cBackend ) {
+                               if ( $index === $this->masterIndex ) {
+                                       continue; // master
+                               }
+                               $cPath = $this->substPaths( $path, $cBackend );
+                               $cSha1 = $cBackend->getFileSha1Base36( array( 'src' => $cPath ) );
+                               if ( $mSha1 === $cSha1 ) {
+                                       // already synced; nothing to do
+                               } elseif ( $mSha1 ) { // file is in master
+                                       $fsFile = $mBackend->getLocalReference( array( 'src' => $mPath ) );
+                                       $status->merge( $cBackend->quickStore(
+                                               array( 'src' => $fsFile->getPath(), 'dst' => $cPath )
+                                       ) );
+                               } elseif ( $mExist === false ) { // file is not in master
+                                       $status->merge( $cBackend->quickDelete( array( 'src' => $cPath ) ) );
+                               }
+                       }
+               }
+
+               return $status;
+       }
+
        /**
         * Get a list of file storage paths to read or write for a list of operations
         *
index 5fe568a..f54f666 100644 (file)
@@ -45,13 +45,19 @@ class SwiftFileBackend extends FileBackendStore {
        protected $swiftCDNExpiry; // integer; how long to cache things in the CDN
        protected $swiftCDNPurgable; // boolean; whether object CDN purging is enabled
 
-       protected $maxContCacheSize = 300; // integer; max containers with entries
-
        /** @var CF_Connection */
        protected $conn; // Swift connection handle
-       protected $connStarted = 0; // integer UNIX timestamp
-       protected $connContainers = array(); // container object cache
-       protected $connException; // CloudFiles exception
+       protected $sessionStarted = 0; // integer UNIX timestamp
+
+       /** @var CloudFilesException */
+       protected $connException;
+       protected $connErrorTime = 0; // UNIX timestamp
+
+       /** @var BagOStuff */
+       protected $srvCache;
+
+       /** @var ProcessCacheLRU */
+       protected $connContainerCache; // container object cache
 
        /**
         * @see FileBackendStore::__construct()
@@ -75,6 +81,8 @@ class SwiftFileBackend extends FileBackendStore {
         *                             - levels : the number of hash levels (and digits)
         *                             - repeat : hash subdirectories are prefixed with all the
         *                                        parent hash directory names (e.g. "a/ab/abc")
+        *   - cacheAuthInfo      : Whether to cache authentication tokens in APC/XCache.
+        *                          This is probably insecure in shared hosting environments.
         */
        public function __construct( array $config ) {
                parent::__construct( $config );
@@ -107,8 +115,17 @@ class SwiftFileBackend extends FileBackendStore {
                $this->swiftCDNPurgable = isset( $config['swiftCDNPurgable'] )
                        ? $config['swiftCDNPurgable']
                        : true;
-               // Cache container info to mask latency
+               // Cache container information to mask latency
                $this->memCache = wfGetMainCache();
+               // Process cache for container info
+               $this->connContainerCache = new ProcessCacheLRU( 300 );
+               // Cache auth token information to avoid RTTs
+               if ( !empty( $config['cacheAuthInfo'] ) ) {
+                       try { // look for APC, XCache, WinCache, ect...
+                               $this->srvCache = ObjectCache::newAccelerator( array() );
+                       } catch ( Exception $e ) {}
+               }
+               $this->srvCache = $this->srvCache ? $this->srvCache : new EmptyBagOStuff();
        }
 
        /**
@@ -712,6 +729,7 @@ class SwiftFileBackend extends FileBackendStore {
                if ( isset( $obj->metadata['Sha1base36'] ) ) {
                        return true; // nothing to do
                }
+               wfProfileIn( __METHOD__ );
                $status = Status::newGood();
                $scopeLockS = $this->getScopedFileLocks( array( $path ), LockManager::LOCK_UW, $status );
                if ( $status->isOK() ) {
@@ -722,11 +740,13 @@ class SwiftFileBackend extends FileBackendStore {
                                if ( $hash !== false ) {
                                        $obj->metadata['Sha1base36'] = $hash;
                                        $obj->sync_metadata(); // save to Swift
+                                       wfProfileOut( __METHOD__ );
                                        return true; // success
                                }
                        }
                }
                $obj->metadata['Sha1base36'] = false;
+               wfProfileOut( __METHOD__ );
                return false; // failed
        }
 
@@ -1120,41 +1140,67 @@ class SwiftFileBackend extends FileBackendStore {
        }
 
        /**
-        * Get a connection to the Swift proxy
+        * Get an authenticated connection handle to the Swift proxy
         *
         * @return CF_Connection|bool False on failure
         * @throws CloudFilesException
         */
        protected function getConnection() {
-               if ( $this->connException instanceof Exception ) {
-                       throw $this->connException; // failed last attempt
+               if ( $this->connException instanceof CloudFilesException ) {
+                       if ( ( time() - $this->connErrorTime ) < 60 ) {
+                               throw $this->connException; // failed last attempt; don't bother
+                       } else { // actually retry this time
+                               $this->connException = null;
+                               $this->connErrorTime = 0;
+                       }
                }
                // Session keys expire after a while, so we renew them periodically
-               if ( $this->conn && ( time() - $this->connStarted ) > $this->authTTL ) {
-                       $this->conn->close(); // close active cURL connections
-                       $this->conn = null;
-               }
+               $reAuth = ( ( time() - $this->sessionStarted ) > $this->authTTL );
                // Authenticate with proxy and get a session key...
-               if ( !$this->conn ) {
-                       $this->connStarted = 0;
-                       $this->connContainers = array();
-                       try {
-                               $this->auth->authenticate();
-                               $this->conn = new CF_Connection( $this->auth );
-                               $this->connStarted = time();
-                       } catch ( CloudFilesException $e ) {
-                               $this->connException = $e; // don't keep re-trying
-                               throw $e; // throw it back
+               if ( !$this->conn || $reAuth ) {
+                       $this->sessionStarted = 0;
+                       $this->connContainerCache->clear();
+                       $cacheKey = $this->getCredsCacheKey( $this->auth->username );
+                       $creds = $this->srvCache->get( $cacheKey ); // credentials
+                       if ( is_array( $creds ) ) { // cache hit
+                               $this->auth->load_cached_credentials(
+                                       $creds['auth_token'], $creds['storage_url'], $creds['cdnm_url'] );
+                               $this->sessionStarted = time() - ceil( $this->authTTL/2 ); // skew for worst case
+                       } else { // cache miss
+                               try {
+                                       $this->auth->authenticate();
+                                       $creds = $this->auth->export_credentials();
+                                       $this->srvCache->add( $cacheKey, $creds, ceil( $this->authTTL/2 ) ); // cache
+                                       $this->sessionStarted = time();
+                               } catch ( CloudFilesException $e ) {
+                                       $this->connException = $e; // don't keep re-trying
+                                       $this->connErrorTime = time();
+                                       throw $e; // throw it back
+                               }
+                       }
+                       if ( $this->conn ) { // re-authorizing?
+                               $this->conn->close(); // close active cURL handles in CF_Http object
                        }
+                       $this->conn = new CF_Connection( $this->auth );
                }
                return $this->conn;
        }
 
+       /**
+        * Get the cache key for a container
+        *
+        * @param $username string
+        * @return string
+        */
+       private function getCredsCacheKey( $username ) {
+               return wfMemcKey( 'backend', $this->getName(), 'usercreds', $username );
+       }
+
        /**
         * @see FileBackendStore::doClearCache()
         */
        protected function doClearCache( array $paths = null ) {
-               $this->connContainers = array(); // clear container object cache
+               $this->connContainerCache->clear(); // clear container object cache
        }
 
        /**
@@ -1169,25 +1215,21 @@ class SwiftFileBackend extends FileBackendStore {
        protected function getContainer( $container, $bypassCache = false ) {
                $conn = $this->getConnection(); // Swift proxy connection
                if ( $bypassCache ) { // purge cache
-                       unset( $this->connContainers[$container] );
-               } elseif ( !isset( $this->connContainers[$container] ) ) {
+                       $this->connContainerCache->clear( $container );
+               } elseif ( !$this->connContainerCache->has( $container, 'obj' ) ) {
                        $this->primeContainerCache( array( $container ) ); // check persistent cache
                }
-               if ( !isset( $this->connContainers[$container] ) ) {
+               if ( !$this->connContainerCache->has( $container, 'obj' ) ) {
                        $contObj = $conn->get_container( $container );
                        // NoSuchContainerException not thrown: container must exist
-                       if ( count( $this->connContainers ) >= $this->maxContCacheSize ) { // trim cache?
-                               reset( $this->connContainers );
-                               unset( $this->connContainers[key( $this->connContainers )] );
-                       }
-                       $this->connContainers[$container] = $contObj; // cache it
+                       $this->connContainerCache->set( $container, 'obj', $contObj ); // cache it
                        if ( !$bypassCache ) {
                                $this->setContainerCache( $container, // update persistent cache
                                        array( 'bytes' => $contObj->bytes_used, 'count' => $contObj->object_count )
                                );
                        }
                }
-               return $this->connContainers[$container];
+               return $this->connContainerCache->get( $container, 'obj' );
        }
 
        /**
@@ -1200,7 +1242,7 @@ class SwiftFileBackend extends FileBackendStore {
        protected function createContainer( $container ) {
                $conn = $this->getConnection(); // Swift proxy connection
                $contObj = $conn->create_container( $container );
-               $this->connContainers[$container] = $contObj; // cache it
+               $this->connContainerCache->set( $container, 'obj', $contObj ); // cache
                return $contObj;
        }
 
@@ -1213,7 +1255,7 @@ class SwiftFileBackend extends FileBackendStore {
         */
        protected function deleteContainer( $container ) {
                $conn = $this->getConnection(); // Swift proxy connection
-               unset( $this->connContainers[$container] ); // purge cache
+               $this->connContainerCache->clear( $container ); // purge
                $conn->delete_container( $container );
        }
 
@@ -1225,13 +1267,9 @@ class SwiftFileBackend extends FileBackendStore {
                try {
                        $conn = $this->getConnection(); // Swift proxy connection
                        foreach ( $containerInfo as $container => $info ) {
-                               $this->connContainers[$container] = new CF_Container(
-                                       $conn->cfs_auth,
-                                       $conn->cfs_http,
-                                       $container,
-                                       $info['count'],
-                                       $info['bytes']
-                               );
+                               $contObj = new CF_Container( $conn->cfs_auth, $conn->cfs_http,
+                                       $container, $info['count'], $info['bytes'] );
+                               $this->connContainerCache->set( $container, 'obj', $contObj );
                        }
                } catch ( CloudFilesException $e ) { // some other exception?
                        $this->handleException( $e, null, __METHOD__, array() );
index ddc640a..00f1080 100644 (file)
@@ -36,12 +36,13 @@ class TempFSFile extends FSFile {
        /**
         * Make a new temporary file on the file system.
         * Temporary files may be purged when the file object falls out of scope.
-        * 
+        *
         * @param $prefix string
         * @param $extension string
-        * @return TempFSFile|null 
+        * @return TempFSFile|null
         */
        public static function factory( $prefix, $extension = '' ) {
+               wfProfileIn( __METHOD__ );
                $base = wfTempDir() . '/' . $prefix . dechex( mt_rand( 0, 99999999 ) );
                $ext = ( $extension != '' ) ? ".{$extension}" : "";
                for ( $attempt = 1; true; $attempt++ ) {
@@ -54,17 +55,19 @@ class TempFSFile extends FSFile {
                                break; // got it
                        }
                        if ( $attempt >= 15 ) {
+                               wfProfileOut( __METHOD__ );
                                return null; // give up
                        }
                }
                $tmpFile = new self( $path );
                $tmpFile->canDelete = true; // safely instantiated
+               wfProfileOut( __METHOD__ );
                return $tmpFile;
        }
 
        /**
         * Purge this file off the file system
-        * 
+        *
         * @return bool Success
         */
        public function purge() {
index 32ef5a9..1563a58 100644 (file)
@@ -1388,18 +1388,14 @@ class FileRepo {
        }
 
        /**
-        * Get the sha1 of a file with a given virtual URL/storage path
+        * Get the sha1 (base 36) of a file with a given virtual URL/storage path
         *
         * @param $virtualUrl string
         * @return string|bool
         */
        public function getFileSha1( $virtualUrl ) {
                $path = $this->resolveToStoragePath( $virtualUrl );
-               $tmpFile = $this->backend->getLocalReference( array( 'src' => $path ) );
-               if ( !$tmpFile ) {
-                       return false;
-               }
-               return $tmpFile->getSha1Base36();
+               return $this->backend->getFileSha1Base36( array( 'src' => $path ) );
        }
 
        /**
index 7489862..133a956 100644 (file)
@@ -804,7 +804,7 @@ abstract class File {
                        return $this->handler->getTransform( $this, $thumbPath, $thumbUrl, $params );
                } else {
                        return new MediaTransformError( 'thumbnail_error',
-                               $params['width'], 0, wfMsg( 'thumbnail-dest-create' ) );
+                               $params['width'], 0, wfMessage( 'thumbnail-dest-create' )->text() );
                }
        }
 
@@ -894,7 +894,9 @@ abstract class File {
                        $tmpThumbPath = $tmpFile->getPath(); // path of 0-byte temp file
 
                        // Actually render the thumbnail...
+                       wfProfileIn( __METHOD__ . '-doTransform' );
                        $thumb = $this->handler->doTransform( $this, $tmpThumbPath, $thumbUrl, $params );
+                       wfProfileOut( __METHOD__ . '-doTransform' );
                        $tmpFile->bind( $thumb ); // keep alive with $thumb
 
                        if ( !$thumb ) { // bad params?
index 1a86e71..e849c8e 100644 (file)
@@ -1043,7 +1043,7 @@ class LocalFile extends File {
                if ( !$props ) {
                        wfProfileIn( __METHOD__ . '-getProps' );
                        $props = $this->repo->getFileProps( $this->getVirtualUrl() );
-                       wfProfileOut( __METHOD__ . -'getProps' );
+                       wfProfileOut( __METHOD__ . '-getProps' );
                }
 
                if ( $timestamp === false ) {
index 28b34a8..38b4a82 100644 (file)
@@ -163,7 +163,7 @@ class CliInstaller extends Installer {
        protected function getMessageText( $params ) {
                $msg = array_shift( $params );
 
-               $text = wfMsgExt( $msg, array( 'parseinline' ), $params );
+               $text = wfMessage( $msg, $params )->parse();
 
                $text = preg_replace( '/<a href="(.*?)".*?>(.*?)<\/a>/', '$2 &lt;$1&gt;', $text );
                return html_entity_decode( strip_tags( $text ), ENT_QUOTES );
index 76df7af..ca9bdf4 100644 (file)
@@ -68,7 +68,7 @@ class Ibm_db2Installer extends DatabaseInstaller {
                        $this->getTextBox( 'wgDBserver', 'config-db-host', array(), $this->parent->getHelpBox( 'config-db-host-help' ) ) .
                        $this->getTextBox( 'wgDBport', 'config-db-port', array(), $this->parent->getHelpBox( 'config-db-port' ) ) .
                        Html::openElement( 'fieldset' ) .
-                       Html::element( 'legend', array(), wfMsg( 'config-db-wiki-settings' ) ) .
+                       Html::element( 'legend', array(), wfMessage( 'config-db-wiki-settings' )->text() ) .
                        $this->getTextBox( 'wgDBname', 'config-db-name', array(), $this->parent->getHelpBox( 'config-db-name-help' ) ) .
                        $this->getTextBox( 'wgDBmwschema', 'config-db-schema', array(), $this->parent->getHelpBox( 'config-db-schema-help' ) ) .
                        Html::closeElement( 'fieldset' ) .
index 5230c81..f66f15f 100644 (file)
@@ -89,7 +89,7 @@ class MysqlInstaller extends DatabaseInstaller {
                return
                        $this->getTextBox( 'wgDBserver', 'config-db-host', array(), $this->parent->getHelpBox( 'config-db-host-help' ) ) .
                        Html::openElement( 'fieldset' ) .
-                       Html::element( 'legend', array(), wfMsg( 'config-db-wiki-settings' ) ) .
+                       Html::element( 'legend', array(), wfMessage( 'config-db-wiki-settings' )->text() ) .
                        $this->getTextBox( 'wgDBname', 'config-db-name', array( 'dir' => 'ltr' ), $this->parent->getHelpBox( 'config-db-name-help' ) ) .
                        $this->getTextBox( 'wgDBprefix', 'config-db-prefix', array( 'dir' => 'ltr' ), $this->parent->getHelpBox( 'config-db-prefix-help' ) ) .
                        Html::closeElement( 'fieldset' ) .
@@ -351,7 +351,7 @@ class MysqlInstaller extends DatabaseInstaller {
                $s .= Xml::openElement( 'div', array(
                        'id' => 'dbMyisamWarning'
                ));
-               $s .= $this->parent->getWarningBox( wfMsg( 'config-mysql-myisam-dep' ) );
+               $s .= $this->parent->getWarningBox( wfMessage( 'config-mysql-myisam-dep' )->text() );
                $s .= Xml::closeElement( 'div' );
 
                if( $this->getVar( '_MysqlEngine' ) != 'MyISAM' ) {
index 863a625..72ec800 100644 (file)
@@ -62,12 +62,12 @@ class OracleInstaller extends DatabaseInstaller {
                return
                        $this->getTextBox( 'wgDBserver', 'config-db-host-oracle', array(), $this->parent->getHelpBox( 'config-db-host-oracle-help' ) ) .
                        Html::openElement( 'fieldset' ) .
-                       Html::element( 'legend', array(), wfMsg( 'config-db-wiki-settings' ) ) .
+                       Html::element( 'legend', array(), wfMessage( 'config-db-wiki-settings' )->text() ) .
                        $this->getTextBox( 'wgDBprefix', 'config-db-prefix' ) .
                        $this->getTextBox( '_OracleDefTS', 'config-oracle-def-ts' ) .
                        $this->getTextBox( '_OracleTempTS', 'config-oracle-temp-ts', array(), $this->parent->getHelpBox( 'config-db-oracle-help' ) ) .
                        Html::closeElement( 'fieldset' ) .
-                       $this->parent->getWarningBox( wfMsg( 'config-db-account-oracle-warn' ) ).
+                       $this->parent->getWarningBox( wfMessage( 'config-db-account-oracle-warn' )->text() ).
                        $this->getInstallUserBox().
                        $this->getWebUserBox();
        }
index 641f6e3..3ac2b3a 100644 (file)
@@ -60,7 +60,7 @@ class PostgresInstaller extends DatabaseInstaller {
                        $this->getTextBox( 'wgDBserver', 'config-db-host', array(), $this->parent->getHelpBox( 'config-db-host-help' ) ) .
                        $this->getTextBox( 'wgDBport', 'config-db-port' ) .
                        Html::openElement( 'fieldset' ) .
-                       Html::element( 'legend', array(), wfMsg( 'config-db-wiki-settings' ) ) .
+                       Html::element( 'legend', array(), wfMessage( 'config-db-wiki-settings' )->text() ) .
                        $this->getTextBox( 'wgDBname', 'config-db-name', array(), $this->parent->getHelpBox( 'config-db-name-help' ) ) .
                        $this->getTextBox( 'wgDBmwschema', 'config-db-schema', array(), $this->parent->getHelpBox( 'config-db-schema-help' ) ) .
                        Html::closeElement( 'fieldset' ) .
index b6f54ea..5b86a90 100644 (file)
@@ -141,8 +141,9 @@ class DoubleRedirectJob extends Job {
                $oldUser = $wgUser;
                $wgUser = $this->getUser();
                $article = WikiPage::factory( $this->title );
-               $reason = wfMsgForContent( 'double-redirect-fixed-' . $this->reason,
-                       $this->redirTitle->getPrefixedText(), $newTitle->getPrefixedText() );
+               $reason = wfMessage( 'double-redirect-fixed-' . $this->reason,
+                       $this->redirTitle->getPrefixedText(), $newTitle->getPrefixedText()
+               )->inContentLanguage()->text();
                $article->doEdit( $newText, $reason, EDIT_UPDATE | EDIT_SUPPRESS_RC, false, $this->getUser() );
                $wgUser = $oldUser;
 
@@ -194,7 +195,7 @@ class DoubleRedirectJob extends Job {
         */
        function getUser() {
                if ( !self::$user ) {
-                       self::$user = User::newFromName( wfMsgForContent( 'double-redirect-fixer' ), false );
+                       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();
index ed38bd1..7ee93a1 100644 (file)
@@ -146,7 +146,6 @@ class DjVuHandler extends ImageHandler {
                }
                $width = $params['width'];
                $height = $params['height'];
-               $srcPath = $image->getLocalRefPath();
                $page = $params['page'];
                if ( $page > $this->pageCount( $image ) ) {
                        return new MediaTransformError( 'thumbnail_error', $width, $height, wfMsg( 'djvu_page_error' ) );
@@ -160,6 +159,7 @@ class DjVuHandler extends ImageHandler {
                        return new MediaTransformError( 'thumbnail_error', $width, $height, wfMsg( 'thumbnail_dest_directory' ) );
                }
 
+               $srcPath = $image->getLocalRefPath();
                # Use a subshell (brackets) to aggregate stderr from both pipeline commands
                # before redirecting it to the overall stdout. This works in both Linux and Windows XP.
                $cmd = '(' . wfEscapeShellArg( $wgDjvuRenderer ) . " -format=ppm -page={$page}" .
index 2ec523d..028fbb0 100644 (file)
@@ -142,11 +142,11 @@ class GIFHandler extends BitmapHandler {
                $info[] = $original;
                
                if ( $metadata['looped'] ) {
-                       $info[] = wfMsgExt( 'file-info-gif-looped', 'parseinline' );
+                       $info[] = wfMessage( 'file-info-gif-looped' )->parse();
                }
                
                if ( $metadata['frameCount'] > 1 ) {
-                       $info[] = wfMsgExt( 'file-info-gif-frames', 'parseinline', $metadata['frameCount'] );
+                       $info[] = wfMessage( 'file-info-gif-frames' )->numParams( $metadata['frameCount'] )->parse();
                }
                
                if ( $metadata['duration'] ) {
index afc7d6a..8289cd4 100644 (file)
@@ -128,13 +128,13 @@ class PNGHandler extends BitmapHandler {
                $info[] = $original;
                
                if ( $metadata['loopCount'] == 0 ) {
-                       $info[] = wfMsgExt( 'file-info-png-looped', 'parseinline' );
+                       $info[] = wfMessage( 'file-info-png-looped' )->parse();
                } elseif ( $metadata['loopCount'] > 1 ) {
-                       $info[] = wfMsgExt( 'file-info-png-repeat', 'parseinline', $metadata['loopCount'] );
+                       $info[] = wfMessage( 'file-info-png-repeat' )->numParams( $metadata['loopCount'] )->parse();
                }
                
                if ( $metadata['frameCount'] > 0 ) {
-                       $info[] = wfMsgExt( 'file-info-png-frames', 'parseinline', $metadata['frameCount'] );
+                       $info[] = wfMessage( 'file-info-png-frames' )->numParams( $metadata['frameCount'] )->parse();
                }
                
                if ( $metadata['duration'] ) {
index 9c8fc5e..9846c71 100644 (file)
@@ -108,7 +108,6 @@ class SvgHandler extends ImageHandler {
                $clientHeight = $params['height'];
                $physicalWidth = $params['physicalWidth'];
                $physicalHeight = $params['physicalHeight'];
-               $srcPath = $image->getLocalRefPath();
 
                if ( $flags & self::TRANSFORM_LATER ) {
                        return new ThumbnailImage( $image, $dstUrl, $clientWidth, $clientHeight, $dstPath );
@@ -119,6 +118,7 @@ class SvgHandler extends ImageHandler {
                                wfMsg( 'thumbnail_dest_directory' ) );
                }
 
+               $srcPath = $image->getLocalRefPath();
                $status = $this->rasterize( $srcPath, $dstPath, $physicalWidth, $physicalHeight );
                if( $status === true ) {
                        return new ThumbnailImage( $image, $dstUrl, $clientWidth, $clientHeight, $dstPath );
index 5ad7020..a3d2d89 100644 (file)
@@ -27,7 +27,6 @@
  * @ingroup Cache
  */
 class SqlBagOStuff extends BagOStuff {
-
        /**
         * @var LoadBalancer
         */
@@ -43,6 +42,9 @@ class SqlBagOStuff extends BagOStuff {
        var $shards = 1;
        var $tableName = 'objectcache';
 
+       protected $connFailureTime = 0; // UNIX timestamp
+       protected $connFailureError; // exception
+
        /**
         * Constructor. Parameters are:
         *   - server:   A server info structure in the format required by each
@@ -88,6 +90,12 @@ class SqlBagOStuff extends BagOStuff {
         */
        protected function getDB() {
                global $wgDebugDBTransactions;
+
+               # Don't keep timing out trying to connect for each call if the DB is down
+               if ( $this->connFailureError && ( time() - $this->connFailureTime ) < 60 ) {
+                       throw $this->connFailureError;
+               }
+
                if ( !isset( $this->db ) ) {
                        # If server connection info was given, use that
                        if ( $this->serverInfo ) {
@@ -107,7 +115,7 @@ class SqlBagOStuff extends BagOStuff {
                                if ( wfGetDB( DB_MASTER )->getType() == 'mysql' ) {
                                        $this->lb = wfGetLBFactory()->newMainLB();
                                        $this->db = $this->lb->getConnection( DB_MASTER );
-                                       $this->db->clearFlag( DBO_TRX );
+                                       $this->db->clearFlag( DBO_TRX ); // auto-commit mode
                                } else {
                                        $this->db = wfGetDB( DB_MASTER );
                                }
@@ -165,55 +173,59 @@ class SqlBagOStuff extends BagOStuff {
        public function getMulti( array $keys ) {
                $values = array(); // array of (key => value)
 
-               $keysByTableName = array();
-               foreach ( $keys as $key ) {
-                       $tableName = $this->getTableByKey( $key );
-                       if ( !isset( $keysByTableName[$tableName] ) ) {
-                               $keysByTableName[$tableName] = array();
+               try {
+                       $db = $this->getDB();
+                       $keysByTableName = array();
+                       foreach ( $keys as $key ) {
+                               $tableName = $this->getTableByKey( $key );
+                               if ( !isset( $keysByTableName[$tableName] ) ) {
+                                       $keysByTableName[$tableName] = array();
+                               }
+                               $keysByTableName[$tableName][] = $key;
                        }
-                       $keysByTableName[$tableName][] = $key;
-               }
 
-               $db = $this->getDB();
-               $this->garbageCollect(); // expire old entries if any
+                       $this->garbageCollect(); // expire old entries if any
 
-               $dataRows = array();
-               foreach ( $keysByTableName as $tableName => $tableKeys ) {
-                       $res = $db->select( $tableName,
-                               array( 'keyname', 'value', 'exptime' ),
-                               array( 'keyname' => $tableKeys ),
-                               __METHOD__ );
-                       foreach ( $res as $row ) {
-                               $dataRows[$row->keyname] = $row;
+                       $dataRows = array();
+                       foreach ( $keysByTableName as $tableName => $tableKeys ) {
+                               $res = $db->select( $tableName,
+                                       array( 'keyname', 'value', 'exptime' ),
+                                       array( 'keyname' => $tableKeys ),
+                                       __METHOD__ );
+                               foreach ( $res as $row ) {
+                                       $dataRows[$row->keyname] = $row;
+                               }
                        }
-               }
 
-               foreach ( $keys as $key ) {
-                       if ( isset( $dataRows[$key] ) ) { // HIT?
-                               $row = $dataRows[$key];
-                               $this->debug( "get: retrieved data; expiry time is " . $row->exptime );
-                               if ( $this->isExpired( $row->exptime ) ) { // MISS
-                                       $this->debug( "get: key has expired, deleting" );
-                                       try {
-                                               $db->begin( __METHOD__ );
-                                               # Put the expiry time in the WHERE condition to avoid deleting a
-                                               # newly-inserted value
-                                               $db->delete( $this->getTableByKey( $key ),
-                                                       array( 'keyname' => $key, 'exptime' => $row->exptime ),
-                                                       __METHOD__ );
-                                               $db->commit( __METHOD__ );
-                                       } catch ( DBQueryError $e ) {
-                                               $this->handleWriteError( $e );
+                       foreach ( $keys as $key ) {
+                               if ( isset( $dataRows[$key] ) ) { // HIT?
+                                       $row = $dataRows[$key];
+                                       $this->debug( "get: retrieved data; expiry time is " . $row->exptime );
+                                       if ( $this->isExpired( $row->exptime ) ) { // MISS
+                                               $this->debug( "get: key has expired, deleting" );
+                                               try {
+                                                       $db->begin( __METHOD__ );
+                                                       # Put the expiry time in the WHERE condition to avoid deleting a
+                                                       # newly-inserted value
+                                                       $db->delete( $this->getTableByKey( $key ),
+                                                               array( 'keyname' => $key, 'exptime' => $row->exptime ),
+                                                               __METHOD__ );
+                                                       $db->commit( __METHOD__ );
+                                               } catch ( DBQueryError $e ) {
+                                                       $this->handleWriteError( $e );
+                                               }
+                                               $values[$key] = false;
+                                       } else { // HIT
+                                               $values[$key] = $this->unserialize( $db->decodeBlob( $row->value ) );
                                        }
+                               } else { // MISS
                                        $values[$key] = false;
-                               } else { // HIT
-                                       $values[$key] = $this->unserialize( $db->decodeBlob( $row->value ) );
+                                       $this->debug( 'get: no matching rows' );
                                }
-                       } else { // MISS
-                               $values[$key] = false;
-                               $this->debug( 'get: no matching rows' );
                        }
-               }
+               } catch ( DBError $e ) {
+                       $this->handleReadError( $e );
+               };
 
                return $values;
        }
@@ -225,23 +237,23 @@ class SqlBagOStuff extends BagOStuff {
         * @return bool
         */
        public function set( $key, $value, $exptime = 0 ) {
-               $db = $this->getDB();
-               $exptime = intval( $exptime );
-
-               if ( $exptime < 0 ) {
-                       $exptime = 0;
-               }
+               try {
+                       $db = $this->getDB();
+                       $exptime = intval( $exptime );
 
-               if ( $exptime == 0 ) {
-                       $encExpiry = $this->getMaxDateTime();
-               } else {
-                       if ( $exptime < 3.16e8 ) { # ~10 years
-                               $exptime += time();
+                       if ( $exptime < 0 ) {
+                               $exptime = 0;
                        }
 
-                       $encExpiry = $db->timestamp( $exptime );
-               }
-               try {
+                       if ( $exptime == 0 ) {
+                               $encExpiry = $this->getMaxDateTime();
+                       } else {
+                               if ( $exptime < 3.16e8 ) { # ~10 years
+                                       $exptime += time();
+                               }
+
+                               $encExpiry = $db->timestamp( $exptime );
+                       }
                        $db->begin( __METHOD__ );
                        // (bug 24425) use a replace if the db supports it instead of
                        // delete/insert to avoid clashes with conflicting keynames
@@ -254,9 +266,8 @@ class SqlBagOStuff extends BagOStuff {
                                        'exptime' => $encExpiry
                                ), __METHOD__ );
                        $db->commit( __METHOD__ );
-               } catch ( DBQueryError $e ) {
+               } catch ( DBError $e ) {
                        $this->handleWriteError( $e );
-
                        return false;
                }
 
@@ -269,18 +280,16 @@ class SqlBagOStuff extends BagOStuff {
         * @return bool
         */
        public function delete( $key, $time = 0 ) {
-               $db = $this->getDB();
-
                try {
+                       $db = $this->getDB();
                        $db->begin( __METHOD__ );
                        $db->delete(
                                $this->getTableByKey( $key ),
                                array( 'keyname' => $key ),
                                __METHOD__ );
                        $db->commit( __METHOD__ );
-               } catch ( DBQueryError $e ) {
+               } catch ( DBError $e ) {
                        $this->handleWriteError( $e );
-
                        return false;
                }
 
@@ -293,11 +302,10 @@ class SqlBagOStuff extends BagOStuff {
         * @return int|null
         */
        public function incr( $key, $step = 1 ) {
-               $db = $this->getDB();
-               $tableName = $this->getTableByKey( $key );
-               $step = intval( $step );
-
                try {
+                       $db = $this->getDB();
+                       $tableName = $this->getTableByKey( $key );
+                       $step = intval( $step );
                        $db->begin( __METHOD__ );
                        $row = $db->selectRow(
                                $tableName,
@@ -333,9 +341,8 @@ class SqlBagOStuff extends BagOStuff {
                                $newValue = null;
                        }
                        $db->commit( __METHOD__ );
-               } catch ( DBQueryError $e ) {
+               } catch ( DBError $e ) {
                        $this->handleWriteError( $e );
-
                        return null;
                }
 
@@ -346,15 +353,19 @@ class SqlBagOStuff extends BagOStuff {
         * @return Array
         */
        public function keys() {
-               $db = $this->getDB();
                $result = array();
 
-               for ( $i = 0; $i < $this->shards; $i++ ) {
-                       $res = $db->select( $this->getTableByShard( $i ),
-                               array( 'keyname' ), false, __METHOD__ );
-                       foreach ( $res as $row ) {
-                               $result[] = $row->keyname;
+               try {
+                       $db = $this->getDB();
+                       for ( $i = 0; $i < $this->shards; $i++ ) {
+                               $res = $db->select( $this->getTableByShard( $i ),
+                                       array( 'keyname' ), false, __METHOD__ );
+                               foreach ( $res as $row ) {
+                                       $result[] = $row->keyname;
+                               }
                        }
+               } catch ( DBError $e ) {
+                       $this->handleReadError( $e );
                }
 
                return $result;
@@ -407,12 +418,11 @@ class SqlBagOStuff extends BagOStuff {
         * @return bool
         */
        public function deleteObjectsExpiringBefore( $timestamp, $progressCallback = false ) {
-               $db = $this->getDB();
-               $dbTimestamp = $db->timestamp( $timestamp );
-               $totalSeconds = false;
-               $baseConds = array( 'exptime < ' . $db->addQuotes( $dbTimestamp ) );
-
                try {
+                       $db = $this->getDB();
+                       $dbTimestamp = $db->timestamp( $timestamp );
+                       $totalSeconds = false;
+                       $baseConds = array( 'exptime < ' . $db->addQuotes( $dbTimestamp ) );
                        for ( $i = 0; $i < $this->shards; $i++ ) {
                                $maxExpTime = false;
                                while ( true ) {
@@ -468,24 +478,28 @@ class SqlBagOStuff extends BagOStuff {
                                        }
                                }
                        }
-               } catch ( DBQueryError $e ) {
+               } catch ( DBError $e ) {
                        $this->handleWriteError( $e );
+                       return false;
                }
+
                return true;
        }
 
        public function deleteAll() {
-               $db = $this->getDB();
-
                try {
+                       $db = $this->getDB();
                        for ( $i = 0; $i < $this->shards; $i++ ) {
                                $db->begin( __METHOD__ );
                                $db->delete( $this->getTableByShard( $i ), '*', __METHOD__ );
                                $db->commit( __METHOD__ );
                        }
-               } catch ( DBQueryError $e ) {
+               } catch ( DBError $e ) {
                        $this->handleWriteError( $e );
+                       return false;
                }
+
+               return true;
        }
 
        /**
@@ -528,23 +542,40 @@ class SqlBagOStuff extends BagOStuff {
        }
 
        /**
-        * Handle a DBQueryError which occurred during a write operation.
-        * Ignore errors which are due to a read-only database, rethrow others.
+        * Handle a DBError which occurred during a read operation.
         */
-       protected function handleWriteError( $exception ) {
-               $db = $this->getDB();
-
-               if ( !$db->wasReadOnlyError() ) {
-                       throw $exception;
+       protected function handleReadError( DBError $exception ) {
+               if ( $exception instanceof DBConnectionError ) {
+                       $this->connFailureTime  = time();
+                       $this->connFailureError = $exception;
                }
-
-               try {
-                       $db->rollback( __METHOD__ );
-               } catch ( DBQueryError $e ) {
+               wfDebugLog( 'SQLBagOStuff', "DBError: {$exception->getMessage()}" );
+               if ( $this->db ) {
+                       wfDebug( __METHOD__ . ": ignoring query error\n" );
+               } else {
+                       wfDebug( __METHOD__ . ": ignoring connection error\n" );
                }
+       }
 
-               wfDebug( __METHOD__ . ": ignoring query error\n" );
-               $db->ignoreErrors( false );
+       /**
+        * Handle a DBQueryError which occurred during a write operation.
+        */
+       protected function handleWriteError( DBError $exception ) {
+               if ( $exception instanceof DBConnectionError ) {
+                       $this->connFailureTime  = time();
+                       $this->connFailureError = $exception;
+               }
+               if ( $this->db && $this->db->wasReadOnlyError() ) {
+                       try {
+                               $this->db->rollback( __METHOD__ );
+                       } catch ( DBError $e ) {}
+               }
+               wfDebugLog( 'SQLBagOStuff', "DBError: {$exception->getMessage()}" );
+               if ( $this->db ) {
+                       wfDebug( __METHOD__ . ": ignoring query error\n" );
+               } else {
+                       wfDebug( __METHOD__ . ": ignoring connection error\n" );
+               }
        }
 
        /**
index b95499f..b505592 100644 (file)
@@ -315,7 +315,7 @@ class SearchEngine {
                        return $parsed;
                }
 
-               $allkeyword = wfMsgForContent( 'searchall' ) . ":";
+               $allkeyword = wfMessage( 'searchall' )->inContentLanguage()->text() . ":";
                if ( strncmp( $query, $allkeyword, strlen( $allkeyword ) ) == 0 ) {
                        $this->namespaces = null;
                        $parsed = substr( $query, strlen( $allkeyword ) );
@@ -417,7 +417,7 @@ class SearchEngine {
                $formatted = array_map( array( $wgContLang, 'getFormattedNsText' ), $namespaces );
                foreach ( $formatted as $key => $ns ) {
                        if ( empty( $ns ) )
-                               $formatted[$key] = wfMsg( 'blanknamespace' );
+                               $formatted[$key] = wfMessage( 'blanknamespace' )->text();
                }
                return $formatted;
        }
index b20348d..25a3e27 100644 (file)
@@ -632,12 +632,12 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
                        // can use messages 'watchlisttools-view', 'watchlisttools-edit', 'watchlisttools-raw'
                        $tools[] = Linker::linkKnown(
                                SpecialPage::getTitleFor( $arr[0], $arr[1] ),
-                               wfMsgHtml( "watchlisttools-{$mode}" )
+                               wfMessage( "watchlisttools-{$mode}" )->escaped()
                        );
                }
                return Html::rawElement( 'span',
                                        array( 'class' => 'mw-watchlist-toollinks' ),
-                                       wfMsg( 'parentheses', $wgLang->pipeList( $tools ) ) );
+                                       wfMessage( 'parentheses', $wgLang->pipeList( $tools ) )->text() );
        }
 }
 
index 578a940..2b9b523 100644 (file)
@@ -374,7 +374,7 @@ class PageArchive {
                }
 
                if( trim( $comment ) != '' ) {
-                       $reason .= wfMsgForContent( 'colon-separator' ) . $comment;
+                       $reason .= wfMessage( 'colon-separator' )->inContentLanguage()->text() . $comment;
                }
 
                if ( $user === null ) {
index 3072408..8cecd07 100644 (file)
@@ -235,7 +235,7 @@ class SpecialUpload extends SpecialPage {
                        !$this->mTokenOk && !$this->mCancelUpload &&
                        ( $this->mUpload && $this->mUploadClicked )
                ) {
-                       $form->addPreText( wfMsgExt( 'session_fail_preview', 'parseinline' ) );
+                       $form->addPreText( $this->msg( 'session_fail_preview' )->parse() );
                }
 
                # Give a notice if the user is uploading a file that has been deleted or moved
@@ -261,10 +261,10 @@ class SpecialUpload extends SpecialPage {
                $form->addPreText( $message );
 
                # Add footer to form
-               $uploadFooter = wfMessage( 'uploadfooter' );
+               $uploadFooter = $this->msg( 'uploadfooter' );
                if ( !$uploadFooter->isDisabled() ) {
                        $form->addPostText( '<div id="mw-upload-footer-message">'
-                               . $this->getOutput()->parse( $uploadFooter->plain() ) . "</div>\n" );
+                               . $uploadFooter->parseAsBlock() . "</div>\n" );
                }
 
                return $form;
@@ -306,11 +306,11 @@ class SpecialUpload extends SpecialPage {
         */
        protected function showRecoverableUploadError( $message ) {
                $sessionKey = $this->mUpload->stashSession();
-               $message = '<h2>' . wfMsgHtml( 'uploaderror' ) . "</h2>\n" .
+               $message = '<h2>' . $this->msg( 'uploaderror' )->escaped() . "</h2>\n" .
                        '<div class="error">' . $message . "</div>\n";
 
                $form = $this->getUploadForm( $message, $sessionKey );
-               $form->setSubmitText( wfMsg( 'upload-tryagain' ) );
+               $form->setSubmitText( $this->msg( 'upload-tryagain' )->escaped() );
                $this->showUploadForm( $form );
        }
        /**
@@ -335,7 +335,7 @@ class SpecialUpload extends SpecialPage {
 
                $sessionKey = $this->mUpload->stashSession();
 
-               $warningHtml = '<h2>' . wfMsgHtml( 'uploadwarning' ) . "</h2>\n"
+               $warningHtml = '<h2>' . $this->msg( 'uploadwarning' )->escaped() . "</h2>\n"
                        . '<ul class="warning">';
                foreach( $warnings as $warning => $args ) {
                        if( $warning == 'exists' ) {
@@ -343,8 +343,8 @@ class SpecialUpload extends SpecialPage {
                        } elseif( $warning == 'duplicate' ) {
                                $msg = self::getDupeWarning( $args );
                        } elseif( $warning == 'duplicate-archive' ) {
-                               $msg = "\t<li>" . wfMsgExt( 'file-deleted-duplicate', 'parseinline',
-                                               array( Title::makeTitle( NS_FILE, $args )->getPrefixedText() ) )
+                               $msg = "\t<li>" . $this->msg( 'file-deleted-duplicate',
+                                               Title::makeTitle( NS_FILE, $args )->getPrefixedText() )->parse()
                                        . "</li>\n";
                        } else {
                                if ( $args === true ) {
@@ -352,7 +352,7 @@ class SpecialUpload extends SpecialPage {
                                } elseif ( !is_array( $args ) ) {
                                        $args = array( $args );
                                }
-                               $msg = "\t<li>" . wfMsgExt( $warning, 'parseinline', $args ) . "</li>\n";
+                               $msg = "\t<li>" . $this->msg( $warning, $args )->parse() . "</li>\n";
                        }
                        $warningHtml .= $msg;
                }
@@ -360,9 +360,9 @@ class SpecialUpload extends SpecialPage {
                $warningHtml .= wfMsgExt( 'uploadwarning-text', 'parse' );
 
                $form = $this->getUploadForm( $warningHtml, $sessionKey, /* $hideIgnoreWarning */ true );
-               $form->setSubmitText( wfMsg( 'upload-tryagain' ) );
-               $form->addButton( 'wpUploadIgnoreWarning', wfMsg( 'ignorewarning' ) );
-               $form->addButton( 'wpCancelUpload', wfMsg( 'reuploaddesc' ) );
+               $form->setSubmitText( $this->msg( 'upload-tryagain' )->text() );
+               $form->addButton( 'wpUploadIgnoreWarning', $this->msg( 'ignorewarning' )->text() );
+               $form->addButton( 'wpCancelUpload', $this->msg( 'reuploaddesc' )->text() );
 
                $this->showUploadForm( $form );
 
@@ -376,7 +376,7 @@ class SpecialUpload extends SpecialPage {
         * @param $message string HTML string
         */
        protected function showUploadError( $message ) {
-               $message = '<h2>' . wfMsgHtml( 'uploadwarning' ) . "</h2>\n" .
+               $message = '<h2>' . $this->msg( 'uploadwarning' )->escaped() . "</h2>\n" .
                        '<div class="error">' . $message . "</div>\n";
                $this->showUploadForm( $this->getUploadForm( $message ) );
        }
@@ -414,8 +414,7 @@ class SpecialUpload extends SpecialPage {
                $permErrors = $this->mUpload->verifyTitlePermissions( $this->getUser() );
                if( $permErrors !== true ) {
                        $code = array_shift( $permErrors[0] );
-                       $this->showRecoverableUploadError( wfMsgExt( $code,
-                                       'parseinline', $permErrors[0] ) );
+                       $this->showRecoverableUploadError( $this->msg( $code, $permErrors[0] )->parse() );
                        return;
                }
 
@@ -469,7 +468,7 @@ class SpecialUpload extends SpecialPage {
                        if ( in_array( $msgName, $wgForceUIMsgAsContentMsg ) ) {
                                $msg[$msgName] = "{{int:$msgName}}";
                        } else {
-                               $msg[$msgName] = wfMsgForContent( $msgName );
+                               $msg[$msgName] = wfMessage( $msgName )->inContentLanguage()->text();
                        }
                }
 
@@ -536,33 +535,31 @@ class SpecialUpload extends SpecialPage {
 
                        /** Statuses that only require name changing **/
                        case UploadBase::MIN_LENGTH_PARTNAME:
-                               $this->showRecoverableUploadError( wfMsgHtml( 'minlength1' ) );
+                               $this->showRecoverableUploadError( $this->msg( 'minlength1' )->escaped() );
                                break;
                        case UploadBase::ILLEGAL_FILENAME:
-                               $this->showRecoverableUploadError( wfMsgExt( 'illegalfilename',
-                                       'parseinline', $details['filtered'] ) );
+                               $this->showRecoverableUploadError( $this->msg( 'illegalfilename',
+                                       $details['filtered'] )->parse() );
                                break;
                        case UploadBase::FILENAME_TOO_LONG:
-                               $this->showRecoverableUploadError( wfMsgHtml( 'filename-toolong' ) );
+                               $this->showRecoverableUploadError( $this->msg( 'filename-toolong' )->escaped() );
                                break;
                        case UploadBase::FILETYPE_MISSING:
-                               $this->showRecoverableUploadError( wfMsgExt( 'filetype-missing',
-                                       'parseinline' ) );
+                               $this->showRecoverableUploadError( $this->msg( 'filetype-missing' )->parse() );
                                break;
                        case UploadBase::WINDOWS_NONASCII_FILENAME:
-                               $this->showRecoverableUploadError( wfMsgExt( 'windows-nonascii-filename',
-                                       'parseinline' ) );
+                               $this->showRecoverableUploadError( $this->msg( 'windows-nonascii-filename' )->parse() );
                                break;
 
                        /** Statuses that require reuploading **/
                        case UploadBase::EMPTY_FILE:
-                               $this->showUploadError( wfMsgHtml( 'emptyfile' ) );
+                               $this->showUploadError( $this->msg( 'emptyfile' )->escaped() );
                                break;
                        case UploadBase::FILE_TOO_LARGE:
-                               $this->showUploadError( wfMsgHtml( 'largefileserver' ) );
+                               $this->showUploadError( $this->msg( 'largefileserver' )->escaped() );
                                break;
                        case UploadBase::FILETYPE_BADTYPE:
-                               $msg = wfMessage( 'filetype-banned-type' );
+                               $msg = $this->msg( 'filetype-banned-type' );
                                if ( isset( $details['blacklistedExt'] ) ) {
                                        $msg->params( $this->getLanguage()->commaList( $details['blacklistedExt'] ) );
                                } else {
@@ -585,7 +582,7 @@ class SpecialUpload extends SpecialPage {
                        case UploadBase::VERIFICATION_ERROR:
                                unset( $details['status'] );
                                $code = array_shift( $details['details'] );
-                               $this->showUploadError( wfMsgExt( $code, 'parseinline', $details['details'] ) );
+                               $this->showUploadError( $this->msg( $code, $details['details'] )->parse() );
                                break;
                        case UploadBase::HOOK_ABORTED:
                                if ( is_array( $details['error'] ) ) { # allow hooks to return error details in an array
@@ -596,7 +593,7 @@ class SpecialUpload extends SpecialPage {
                                        $args = null;
                                }
 
-                               $this->showUploadError( wfMsgExt( $error, 'parseinline', $args ) );
+                               $this->showUploadError( $this->msg( $error, $args )->parse() );
                                break;
                        default:
                                throw new MWException( __METHOD__ . ": Unknown value `{$details['status']}`" );
@@ -641,30 +638,30 @@ class SpecialUpload extends SpecialPage {
 
                if( $exists['warning'] == 'exists' ) {
                        // Exact match
-                       $warning = wfMsgExt( 'fileexists', 'parseinline', $filename );
+                       $warning = wfMessage( 'fileexists', $filename )->parse();
                } elseif( $exists['warning'] == 'page-exists' ) {
                        // Page exists but file does not
-                       $warning = wfMsgExt( 'filepageexists', 'parseinline', $filename );
+                       $warning = wfMessage( 'filepageexists', $filename )->parse();
                } elseif ( $exists['warning'] == 'exists-normalized' ) {
-                       $warning = wfMsgExt( 'fileexists-extension', 'parseinline', $filename,
-                               $exists['normalizedFile']->getTitle()->getPrefixedText() );
+                       $warning = wfMessage( 'fileexists-extension', $filename,
+                               $exists['normalizedFile']->getTitle()->getPrefixedText() )->parse();
                } elseif ( $exists['warning'] == 'thumb' ) {
                        // Swapped argument order compared with other messages for backwards compatibility
-                       $warning = wfMsgExt( 'fileexists-thumbnail-yes', 'parseinline',
-                               $exists['thumbFile']->getTitle()->getPrefixedText(), $filename );
+                       $warning = wfMessage( 'fileexists-thumbnail-yes', 
+                               $exists['thumbFile']->getTitle()->getPrefixedText(), $filename )->parse();
                } elseif ( $exists['warning'] == 'thumb-name' ) {
                        // Image w/o '180px-' does not exists, but we do not like these filenames
                        $name = $file->getName();
                        $badPart = substr( $name, 0, strpos( $name, '-' ) + 1 );
-                       $warning = wfMsgExt( 'file-thumbnail-no', 'parseinline', $badPart );
+                       $warning = wfMessage( 'file-thumbnail-no', $badPart )->parse();
                } elseif ( $exists['warning'] == 'bad-prefix' ) {
-                       $warning = wfMsgExt( 'filename-bad-prefix', 'parseinline', $exists['prefix'] );
+                       $warning = wfMessage( 'filename-bad-prefix', $exists['prefix'] )->parse();
                } elseif ( $exists['warning'] == 'was-deleted' ) {
                        # If the file existed before and was deleted, warn the user of this
                        $ltitle = SpecialPage::getTitleFor( 'Log' );
                        $llink = Linker::linkKnown(
                                $ltitle,
-                               wfMsgHtml( 'deletionlog' ),
+                               wfMessage( 'deletionlog' )->escaped(),
                                array(),
                                array(
                                        'type' => 'delete',
@@ -775,7 +772,7 @@ class UploadForm extends HTMLForm {
                parent::__construct( $descriptor, $context, 'upload' );
 
                # Set some form properties
-               $this->setSubmitText( wfMsg( 'uploadbtn' ) );
+               $this->setSubmitText( $this->msg( 'uploadbtn' )->text() );
                $this->setSubmitName( 'wpUpload' );
                # Used message keys: 'accesskey-upload', 'tooltip-upload'
                $this->setSubmitTooltip( 'upload' );
@@ -846,7 +843,7 @@ class UploadForm extends HTMLForm {
                        'help' => wfMsgExt( 'upload-maxfilesize',
                                        array( 'parseinline', 'escapenoentities' ),
                                        $this->getContext()->getLanguage()->formatSize( $this->mMaxUploadSize['file'] )
-                               ) . ' ' . wfMsgHtml( 'upload_source_file' ),
+                               ) . ' ' . $this->msg( 'upload_source_file' )->escaped(),
                        'checked' => $selectedSourceType == 'file',
                );
                if ( $canUploadByUrl ) {
@@ -861,7 +858,7 @@ class UploadForm extends HTMLForm {
                                'help' => wfMsgExt( 'upload-maxfilesize',
                                                array( 'parseinline', 'escapenoentities' ),
                                                $this->getContext()->getLanguage()->formatSize( $this->mMaxUploadSize['url'] )
-                                       ) . ' ' . wfMsgHtml( 'upload_source_url' ),
+                                       ) . ' ' . $this->msg( 'upload_source_url' )->escaped(),
                                'checked' => $selectedSourceType == 'url',
                        );
                }
index a1cda0d..fbc2c93 100644 (file)
@@ -80,13 +80,13 @@ class SpecialVersion extends SpecialPage {
         * @return string
         */
        private static function getMediaWikiCredits() {
-               $ret = Xml::element( 'h2', array( 'id' => 'mw-version-license' ), wfMsg( 'version-license' ) );
+               $ret = Xml::element( 'h2', array( 'id' => 'mw-version-license' ), wfMessage( 'version-license' )->text() );
 
                // This text is always left-to-right.
                $ret .= '<div>';
                $ret .= "__NOTOC__
                " . self::getCopyrightAndAuthorList() . "\n
-               " . wfMsg( 'version-license-info' );
+               " . wfMessage( 'version-license-info' )->text();
                $ret .= '</div>';
 
                return str_replace( "\t\t", '', $ret ) . "\n";
@@ -109,11 +109,11 @@ class SpecialVersion extends SpecialPage {
                        'Roan Kattouw', 'Trevor Parscal', 'Bryan Tong Minh', 'Sam Reed',
                        'Victor Vasiliev', 'Rotem Liss', 'Platonides', 'Antoine Musso',
                        'Timo Tijhof',
-                       wfMsg( 'version-poweredby-others' )
+                       wfMessage( 'version-poweredby-others' )->text()
                );
 
-               return wfMsg( 'version-poweredby-credits', date( 'Y' ),
-                       $wgLang->listToText( $authorList ) );
+               return wfMessage( 'version-poweredby-credits', date( 'Y' ),
+                       $wgLang->listToText( $authorList ) )->text();
        }
 
        /**
@@ -125,8 +125,8 @@ class SpecialVersion extends SpecialPage {
                $dbr = wfGetDB( DB_SLAVE );
 
                // Put the software in an array of form 'name' => 'version'. All messages should
-               // be loaded here, so feel free to use wfMsg*() in the 'name'. Raw HTML or wikimarkup
-               // can be used.
+               // be loaded here, so feel free to use wfMessage in the 'name'. Raw HTML or
+               // wikimarkup can be used.
                $software = array();
                $software['[https://www.mediawiki.org/ MediaWiki]'] = self::getVersionLinked();
                $software['[http://www.php.net/ PHP]'] = phpversion() . " (" . php_sapi_name() . ")";
@@ -135,11 +135,11 @@ class SpecialVersion extends SpecialPage {
                // Allow a hook to add/remove items.
                wfRunHooks( 'SoftwareInfo', array( &$software ) );
 
-               $out = Xml::element( 'h2', array( 'id' => 'mw-version-software' ), wfMsg( 'version-software' ) ) .
+               $out = Xml::element( 'h2', array( 'id' => 'mw-version-software' ), wfMessage( 'version-software' )->text() ) .
                           Xml::openElement( 'table', array( 'class' => 'wikitable', 'id' => 'sv-software' ) ) .
                                "<tr>
-                                       <th>" . wfMsg( 'version-software-product' ) . "</th>
-                                       <th>" . wfMsg( 'version-software-version' ) . "</th>
+                                       <th>" . wfMessage( 'version-software-product' )->text() . "</th>
+                                       <th>" . wfMessage( 'version-software-version' )->text() . "</th>
                                </tr>\n";
 
                foreach( $software as $name => $version ) {
@@ -177,11 +177,11 @@ class SpecialVersion extends SpecialPage {
                        $version = "$wgVersion (r{$svnInfo['checkout-rev']})";
                } else {
                        $version = $wgVersion . ' ' .
-                               wfMsg(
+                               wfMessage(
                                        'version-svn-revision',
                                        isset( $info['directory-rev'] ) ? $info['directory-rev'] : '',
                                        $info['checkout-rev']
-                               );
+                               )->text();
                }
 
                wfProfileOut( __METHOD__ );
@@ -227,11 +227,11 @@ class SpecialVersion extends SpecialPage {
                        return false;
                }
 
-               $linkText = wfMsg(
+               $linkText = wfMessage(
                        'version-svn-revision',
                        isset( $info['directory-rev'] ) ? $info['directory-rev'] : '',
                        $info['checkout-rev']
-               );
+               )->text();
 
                if ( isset( $info['viewvc-url'] ) ) {
                        $version = "$wgVersion [{$info['viewvc-url']} $linkText]";
@@ -277,14 +277,14 @@ class SpecialVersion extends SpecialPage {
        public static function getExtensionTypes() {
                if ( self::$extensionTypes === false ) {
                        self::$extensionTypes = array(
-                               'specialpage' => wfMsg( 'version-specialpages' ),
-                               'parserhook' => wfMsg( 'version-parserhooks' ),
-                               'variable' => wfMsg( 'version-variables' ),
-                               'media' => wfMsg( 'version-mediahandlers' ),
-                               'antispam' => wfMsg( 'version-antispam' ),
-                               'skin' => wfMsg( 'version-skins' ),
-                               'api' => wfMsg( 'version-api' ),
-                               'other' => wfMsg( 'version-other' ),
+                               'specialpage' => wfMessage( 'version-specialpages' )->text(),
+                               'parserhook' => wfMessage( 'version-parserhooks' )->text(),
+                               'variable' => wfMessage( 'version-variables' )->text(),
+                               'media' => wfMessage( 'version-mediahandlers' )->text(),
+                               'antispam' => wfMessage( 'version-antispam' )->text(),
+                               'skin' => wfMessage( 'version-skins' )->text(),
+                               'api' => wfMessage( 'version-api' )->text(),
+                               'other' => wfMessage( 'version-other' )->text(),
                        );
 
                        wfRunHooks( 'ExtensionTypes', array( &self::$extensionTypes ) );
@@ -326,7 +326,7 @@ class SpecialVersion extends SpecialPage {
                 */
                wfRunHooks( 'SpecialVersionExtensionTypes', array( &$this, &$extensionTypes ) );
 
-               $out = Xml::element( 'h2', array( 'id' => 'mw-version-ext' ), wfMsg( 'version-extensions' ) ) .
+               $out = Xml::element( 'h2', array( 'id' => 'mw-version-ext' ), $this->msg( 'version-extensions' )->text() ) .
                        Xml::openElement( 'table', array( 'class' => 'wikitable', 'id' => 'sv-ext' ) );
 
                // Make sure the 'other' type is set to an array.
@@ -352,7 +352,7 @@ class SpecialVersion extends SpecialPage {
                $out .= $this->getExtensionCategory( 'other', $extensionTypes['other'] );
 
                if ( count( $wgExtensionFunctions ) ) {
-                       $out .= $this->openExtType( wfMsg( 'version-extension-functions' ), 'extension-functions' );
+                       $out .= $this->openExtType( $this->msg( 'version-extension-functions' )->text(), 'extension-functions' );
                        $out .= '<tr><td colspan="4">' . $this->listToText( $wgExtensionFunctions ) . "</td></tr>\n";
                }
 
@@ -363,13 +363,13 @@ class SpecialVersion extends SpecialPage {
                        for ( $i = 0; $i < $cnt; ++$i ) {
                                $tags[$i] = "&lt;{$tags[$i]}&gt;";
                        }
-                       $out .= $this->openExtType( wfMsg( 'version-parser-extensiontags' ), 'parser-tags' );
+                       $out .= $this->openExtType( $this->msg( 'version-parser-extensiontags' )->text(), 'parser-tags' );
                        $out .= '<tr><td colspan="4">' . $this->listToText( $tags ). "</td></tr>\n";
                }
 
                $fhooks = $wgParser->getFunctionHooks();
                if( count( $fhooks ) ) {
-                       $out .= $this->openExtType( wfMsg( 'version-parser-function-hooks' ), 'parser-function-hooks' );
+                       $out .= $this->openExtType( $this->msg( 'version-parser-function-hooks' )->text(), 'parser-function-hooks' );
                        $out .= '<tr><td colspan="4">' . $this->listToText( $fhooks ) . "</td></tr>\n";
                }
 
@@ -448,7 +448,7 @@ class SpecialVersion extends SpecialPage {
                                # Make subversion text/link.
                                if ( $svnInfo !== false ) {
                                        $directoryRev = isset( $svnInfo['directory-rev'] ) ? $svnInfo['directory-rev'] : null;
-                                       $vcsText = wfMsg( 'version-svn-revision', $directoryRev, $svnInfo['checkout-rev'] );
+                                       $vcsText = $this->msg( 'version-svn-revision', $directoryRev, $svnInfo['checkout-rev'] )->text();
                                        $vcsText = isset( $svnInfo['viewvc-url'] ) ? '[' . $svnInfo['viewvc-url'] . " $vcsText]" : $vcsText;
                                }
                        }
@@ -463,7 +463,7 @@ class SpecialVersion extends SpecialPage {
 
                if ( isset( $extension['version'] ) ) {
                        $versionText = '<span class="mw-version-ext-version">' .
-                               wfMsg( 'version-version', $extension['version'] ) .
+                               $this->msg( 'version-version', $extension['version'] )->text() .
                                '</span>';
                } else {
                        $versionText = '';
@@ -480,9 +480,9 @@ class SpecialVersion extends SpecialPage {
                                $descriptionMsgKey = $descriptionMsg[0]; // Get the message key
                                array_shift( $descriptionMsg ); // Shift out the message key to get the parameters only
                                array_map( "htmlspecialchars", $descriptionMsg ); // For sanity
-                               $description = wfMsg( $descriptionMsgKey, $descriptionMsg );
+                               $description = $this->msg( $descriptionMsgKey, $descriptionMsg )->text();
                        } else {
-                               $description = wfMsg( $descriptionMsg );
+                               $description = $this->msg( $descriptionMsg )->text();
                        }
                }
 
@@ -515,11 +515,11 @@ class SpecialVersion extends SpecialPage {
                        $myWgHooks = $wgHooks;
                        ksort( $myWgHooks );
 
-                       $ret = Xml::element( 'h2', array( 'id' => 'mw-version-hooks' ), wfMsg( 'version-hooks' ) ) .
+                       $ret = Xml::element( 'h2', array( 'id' => 'mw-version-hooks' ), $this->msg( 'version-hooks' )->text() ) .
                                Xml::openElement( 'table', array( 'class' => 'wikitable', 'id' => 'sv-hooks' ) ) .
                                "<tr>
-                                       <th>" . wfMsg( 'version-hook-name' ) . "</th>
-                                       <th>" . wfMsg( 'version-hook-subscribedby' ) . "</th>
+                                       <th>" . $this->msg( 'version-hook-name' )->text() . "</th>
+                                       <th>" . $this->msg( 'version-hook-subscribedby' )->text() . "</th>
                                </tr>\n";
 
                        foreach ( $myWgHooks as $hook => $hooks ) {
@@ -575,7 +575,7 @@ class SpecialVersion extends SpecialPage {
                $list = array();
                foreach( (array)$authors as $item ) {
                        if( $item == '...' ) {
-                               $list[] = wfMsg( 'version-poweredby-others' );
+                               $list[] = $this->msg( 'version-poweredby-others' )->text();
                        } else {
                                $list[] = $item;
                        }
@@ -759,11 +759,11 @@ class SpecialVersion extends SpecialPage {
                        'version-entrypoints-load-php' => wfScript( 'load' ),
                );
 
-               $out = Html::element( 'h2', array( 'id' => 'mw-version-entrypoints' ), wfMsg( 'version-entrypoints' ) ) .
+               $out = Html::element( 'h2', array( 'id' => 'mw-version-entrypoints' ), $this->msg( 'version-entrypoints' )->text() ) .
                        Html::openElement( 'table', array( 'class' => 'wikitable', 'id' => 'mw-version-entrypoints-table' ) ) .
                        Html::openElement( 'tr' ) .
-                       Html::element( 'th', array(), wfMessage( 'version-entrypoints-header-entrypoint' )->text() ) .
-                       Html::element( 'th', array(), wfMessage( 'version-entrypoints-header-url' )->text() ) .
+                       Html::element( 'th', array(), $this->msg( 'version-entrypoints-header-entrypoint' )->text() ) .
+                       Html::element( 'th', array(), $this->msg( 'version-entrypoints-header-url' )->text() ) .
                        Html::closeElement( 'tr' );
 
                foreach ( $entryPoints as $message => $value ) {
@@ -771,7 +771,7 @@ class SpecialVersion extends SpecialPage {
                        $out .= Html::openElement( 'tr' ) .
                                // ->text() looks like it should be ->parse(), but this function
                                // returns wikitext, not HTML, boo
-                               Html::rawElement( 'td', array(), wfMessage( $message )->text() ) .
+                               Html::rawElement( 'td', array(), $this->msg( $message )->text() ) .
                                Html::rawElement( 'td', array(), Html::rawElement( 'code', array(), "[$url $value]" ) ) .
                                Html::closeElement( 'tr' );
                }
index ba3a05c..6ef3be2 100644 (file)
@@ -1184,7 +1184,7 @@ abstract class UploadBase {
                        $wgOut->wrapWikiMsg( "<div class=\"error\">\n$1\n</div>",
                                array( 'virus-badscanner', $wgAntivirus ) );
                        wfProfileOut( __METHOD__ );
-                       return wfMsg( 'virus-unknownscanner' ) . " $wgAntivirus";
+                       return wfMessage( 'virus-unknownscanner' )->text() . " $wgAntivirus";
                }
 
                # look up scanner configuration
index 320cdf2..06f4073 100644 (file)
@@ -800,7 +800,7 @@ class Language {
         * @return string
         */
        function getMessageFromDB( $msg ) {
-               return wfMsgExt( $msg, array( 'parsemag', 'language' => $this ) );
+               return wfMessage( $msg )->inLanguage( $this )->text();
        }
 
        /**
@@ -2865,7 +2865,7 @@ class Language {
          *
          * An example of this function being called:
          * <code>
-         * wfMsg( 'message', $wgLang->formatNum( $num ) )
+         * wfMessage( 'message' )->numParams( $num )->text()
          * </code>
          *
          * See LanguageGu.php for the Gujarati implementation and
index edc4822..cbd5d9a 100644 (file)
@@ -687,8 +687,8 @@ class LanguageConverter {
                                                $inner .= '-{';
                                                if ( !$warningDone ) {
                                                        $inner .= '<span class="error">' .
-                                                               wfMsgForContent( 'language-converter-depth-warning',
-                                                                       $this->mMaxDepth ) .
+                                                               wfMessage( 'language-converter-depth-warning' )
+                                                                       ->numParams( $this->mMaxDepth )->inContentLanguage()->text() .
                                                                '</span>';
                                                        $warningDone = true;
                                                }
index 69faf87..2060419 100644 (file)
@@ -741,7 +741,7 @@ $1',
 'collapsible-expand' => 'وسع',
 'thisisdeleted' => 'أأعرض أو أسترجع $1؟',
 'viewdeleted' => 'أأعرض $1؟',
-'restorelink' => '{{PLURAL:$1|$1 تعديل محذوف|تعديلاً واحداً محذوفاً|تعديلين محذوفين|$1 تعديلات محذوفة|$1 تعديلاً محذوفاً|$1 تعديل محذوف}}',
+'restorelink' => '{{PLURAL:$1|$1 تعديل محذوف|تعديلا واحدا محذوفا|تعديلين محذوفين|$1 تعديلات محذوفة|$1 تعديلا محذوفا|$1 تعديل محذوف}}',
 'feedlinks' => 'التغذية:',
 'feed-invalid' => 'نوع اشتراك التلقيم غير صحيح.',
 'feed-unavailable' => 'التلقيمات غير متوفرة',
@@ -2427,7 +2427,7 @@ $1',
 # Special:ActiveUsers
 'activeusers' => 'قائمة المستخدمين النشطين',
 'activeusers-intro' => 'هذه قائمة بالمستخدمين الذين مارسوا نوعاً من النشاط خلال {{PLURAL:$1||اليوم الماضي|اليومين الماضيين|ال$1 أيام الماضية|ال$1 يوماً ماضياً|ال$1 يوم ماضي}}.',
-'activeusers-count' => '{{PLURAL:$1|Ù\84ا ØªØ¹Ø¯Ù\8aÙ\84ات Ø­Ø¯Ù\8aثة|تعدÙ\8aÙ\84 Ø­Ø¯Ù\8aØ« Ù\88احد|تعدÙ\8aÙ\84اÙ\86 Ø­Ø¯Ù\8aثاÙ\86|$1 ØªØ¹Ø¯Ù\8aÙ\84ات Ø­Ø¯Ù\8aثة|$1 ØªØ¹Ø¯Ù\8aÙ\84اÙ\8b Ø­Ø¯Ù\8aثاÙ\8b|$1 ØªØ¹Ø¯Ù\8aÙ\84 Ø­Ø¯Ù\8aØ«}} Ø®Ù\84اÙ\84 {{PLURAL:$3||اÙ\84Ù\8aÙ\88Ù\85 Ø§Ù\84Ù\85اضÙ\8a|اÙ\84Ù\8aÙ\88Ù\85Ù\8aÙ\86 Ø§Ù\84Ù\85اضÙ\8aÙ\8aÙ\86|$3 Ø£Ù\8aاÙ\85 Ù\85اضÙ\8aØ©|$3 Ù\8aÙ\88Ù\85اÙ\8b Ù\85اضÙ\8aØ©|اÙ\84$1 Ù\8aÙ\88Ù\85 Ù\85اضÙ\8a}}',
+'activeusers-count' => '{{PLURAL:$1|Ù\85ا Ù\85Ù\86 ØªØ¹Ø¯Ù\8aÙ\84ات|تعدÙ\8aÙ\84 Ø­Ø¯Ù\8aØ« Ù\88احد|تعدÙ\8aÙ\84اÙ\86 Ø­Ø¯Ù\8aثاÙ\86|$1 ØªØ¹Ø¯Ù\8aÙ\84ات Ø­Ø¯Ù\8aثة|$1 ØªØ¹Ø¯Ù\8aÙ\84ا Ø­Ø¯Ù\8aثا|$1 ØªØ¹Ø¯Ù\8aÙ\84 Ø­Ø¯Ù\8aØ«}} Ù\85Ù\86Ø° {{PLURAL:$3||Ù\8aÙ\88Ù\85\8aÙ\88Ù\85Ù\8aÙ\86|$3 Ø£Ù\8aاÙ\85|$3 Ù\8aÙ\88Ù\85ا|$1 Ù\8aÙ\88Ù\85}}',
 'activeusers-from' => 'اعرض المستخدمين بدءاً من:',
 'activeusers-hidebots' => 'أخف البوتات',
 'activeusers-hidesysops' => 'أخف الإداريين',
@@ -2602,7 +2602,7 @@ $UNWATCHURL
 'rollback' => 'استرجاع التعديلات',
 'rollback_short' => 'استرجع',
 'rollbacklink' => 'استرجع',
-'rollbacklinkcount' => 'استرجع {{PLURAL:$1|لا تعديلات|تعديلاً واحداً|تعديلين|$1 تعديلات|$1 تعديل}}',
+'rollbacklinkcount' => 'استرجع {{PLURAL:$1|لا تعديلات|تعديلا واحدا|تعديلين|$1 تعديلات|$1 تعديل}}',
 'rollbacklinkcount-morethan' => 'استرجاع أكثر من $1 {{PLURAL:$1|تعديل|تعديلات}}',
 'rollbackfailed' => 'لم ينجح الاسترجاع',
 'cantrollback' => 'لم يمكن استرجاع التعديل؛
index 6f687dd..a8239e7 100644 (file)
@@ -322,6 +322,10 @@ $1',
 'youhavenewmessages' => 'Tienes $1 ($2).',
 'newmessageslink' => 'mensaxes nuevos',
 'newmessagesdifflink' => 'cambéu postreru',
+'youhavenewmessagesfromusers' => "Tienes $1 {{PLURAL:$3|d'otru usuariu|de $3 usuarios}} ($2).",
+'youhavenewmessagesmanyusers' => 'Tienes $1 de munchos usuarios ($2).',
+'newmessageslinkplural' => '{{PLURAL:$1|un mensaxe nuevu|$1 mensaxes nuevos}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|cambéu postreru|cambeos postreros}}',
 'youhavenewmessagesmulti' => 'Tienes mensaxes nuevos en $1',
 'editsection' => 'editar',
 'editold' => 'editar',
@@ -876,6 +880,7 @@ Estos parámetros s'omitieron.",
 'expansion-depth-exceeded-warning' => "La páxina pasó la fondura d'espansión",
 'parser-unstrip-loop-warning' => 'Deteutóse un bucle "unstrip"',
 'parser-unstrip-recursion-limit' => 'Superóse\'l llímite de recursión d\'"unstrip" ($1)',
+'converter-manual-rule-error' => 'Detectóse un error na regla de conversión manual de llingua',
 
 # "Undo" feature
 'undo-success' => "La edición se pue esfacer.
@@ -2696,6 +2701,7 @@ Toles aiciones d'importación treswiki queden rexistraes nel [[Special:Log/impor
 'import-interwiki-templates' => 'Incluyir toles plantíes',
 'import-interwiki-submit' => 'Importar',
 'import-interwiki-namespace' => 'Espaciu de nomes de destín:',
+'import-interwiki-rootpage' => 'Páxina raíz de destín (opcional):',
 'import-upload-filename' => 'Nome del ficheru:',
 'import-comment' => 'Comentariu:',
 'importtext' => "Por favor, esporta'l ficheru dende la wiki d'orixe usando la [[Special:Export|ferramienta d'esportación]].
@@ -2728,6 +2734,9 @@ Guárdalu nel ordenador y xúbilu equí.",
 'import-error-interwiki' => "La páxina «$1» nun s'importó porque'l so nome ta acutáu pa enllaces esternos (interwiki).",
 'import-error-special' => "La páxina «$1» nun s'importó porque pertenez a un espaciu de nomes especial que nun permite les páxines.",
 'import-error-invalid' => "La páxina «$1» nun s'importó porque tien un nome inválidu.",
+'import-options-wrong' => '{{PLURAL:$2|Opción enquivocada|Opciones enquivocaes}}: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'La páxina raíz dada ye un títulu inválidu.',
+'import-rootpage-nosubpage' => 'L\'espaciu de nomes "$1" de la páxina raíz nun permite subpáxines.',
 
 # Import log
 'importlogpage' => "Rexistru d'importaciones",
@@ -3622,7 +3631,7 @@ Les imáxenes amuésense a resolución completa; les demás tribes d'archivu exe
 * <span class="mw-specialpagecached">Páxines especiales en caché (seique nun tean actualizaes).</span>',
 'specialpages-group-maintenance' => 'Informes de mantenimientu',
 'specialpages-group-other' => 'Otres páxines especiales',
-'specialpages-group-login' => 'Entrar / Crear cuenta',
+'specialpages-group-login' => 'Identificase / crear cuenta',
 'specialpages-group-changes' => 'Cambeos recientes y rexistros',
 'specialpages-group-media' => 'Informes multimedia y xubíes',
 'specialpages-group-users' => 'Usuarios y drechos',
index 44c684a..6950e99 100644 (file)
@@ -1460,7 +1460,8 @@ $1',
 ** İstifadəsiz fayl
 ** Qeyri-ensiklopedik şəxs
 ** Lisenziyasız fayl
-** Azad şəkillə əvəz olundu',
+** Azad şəkillə əvəz olundu
+** Müəllif istəyi',
 'filedelete-edit-reasonlist' => 'Silmə səbəblərini redaktə et',
 
 # MIME search
index 874090e..6106fca 100644 (file)
@@ -1496,6 +1496,7 @@ Kaipuhan mong aramon an historiya kan pagpura bago ka man magpadagos sa pagkarga
 'uploaddisabledtext' => 'An pagkarga kan mga sagunson pinagpondo tabi.',
 'uploadscripted' => "Ining ''file'' igwang HTML o kodang eskritura na pwede ser na salang mainterpretar kan ''browser''.",
 'uploadvirus' => "May virus an ''file''! Mga detalye: $1",
+'upload-source' => 'Gikanang sagunson',
 'sourcefilename' => 'Ginikanan kan pangaran nin sagunson:',
 'sourceurl' => 'Ginikanan kan kilyawan:',
 'destfilename' => 'Destinasyon kan pangaran nin sagunson:',
@@ -1595,6 +1596,7 @@ Kun an problema yaon pa, pakikontak tabi nin sarong [[Special:ListUsers/sysop|ad
 'nolinkstoimage' => 'Mayong mga pahinang nakatakod sa dokumentong ini.',
 'sharedupload' => "Ining ''file'' sarong bakas na pagkarga asin pwede ser na gamiton kan ibang mga proyekto.",
 'uploadnewversion-linktext' => 'Magkarga nin bàgong bersyon kaining file',
+'shared-repo' => 'sarong pinagheras na repositoryo',
 
 # File reversion
 'filerevert' => 'Ibalik an $1',
@@ -1609,14 +1611,22 @@ Kun an problema yaon pa, pakikontak tabi nin sarong [[Special:ListUsers/sysop|ad
 # File deletion
 'filedelete' => 'Parâon an $1',
 'filedelete-legend' => 'Parâon an dokumento',
-'filedelete-intro' => "Pigpaparâ mo an '''[[Media:$1|$1]]'''.",
+'filedelete-intro' => "Saimong pagpupuraon an sagunson '''[[Media:$1|$1]]''' kaiba an gabos kaining historiya.",
 'filedelete-intro-old' => "Pigpaparâ mo an bersyon kan '''[[Media:$1|$1]]''' sa ngonyan [$4 $3, $2].",
 'filedelete-comment' => 'Rason:',
 'filedelete-submit' => 'Parâon',
 'filedelete-success' => "An '''$1''' pinarâ na.",
-'filedelete-success-old' => '<span class="plainlinks">An bersyón kan \'\'\'[[Media:$1|$1]]\'\'\' na ngonyan na $3, pigparâ na an $2.</span>',
-'filedelete-nofile' => "Mayo man an '''$1''' sa ining sitio.",
+'filedelete-success-old' => "An bersyon kan '''[[Media:$1|$1]]''' magpoon kan $3, $2 pinagpura na tabi.",
+'filedelete-nofile' => "'''$1''' bakong eksistido.",
 'filedelete-nofile-old' => "Mayong bersyón na nakaarchibo kan '''$1''' na igwang kan mga piniling ''character''.",
+'filedelete-otherreason' => 'An iba pa/kadugangang rason:',
+'filedelete-reason-otherlist' => 'Ibang dahilan',
+'filedelete-reason-dropdown' => '*Kumon na mga rason nin pagpura
+** Copyright na paglapas
+** Duplikadong sagunson',
+'filedelete-edit-reasonlist' => 'Liwaton an mga rason nin pagpura',
+'filedelete-maintenance' => 'Pagpupura asin restorasyon nin mga sagunson temporaryong pinagpupundo sa panahon nin pagpapakarhay.',
+'filedelete-maintenance-title' => 'Dae makapagpura nin sagunson',
 
 # MIME search
 'mimesearch' => 'Paghanap kan MIME',
@@ -1632,20 +1642,28 @@ Kun an problema yaon pa, pakikontak tabi nin sarong [[Special:ListUsers/sysop|ad
 
 # Unused templates
 'unusedtemplates' => 'Mga templatong dai ginamit',
-'unusedtemplatestext' => 'Piglilista kaining páhina an gabos na mga páhina sa templatong ngaran-espacio na dai nakakaag sa ibang páhina. Giromdomon tabî na sosogon an ibang mga takod sa mga templato bâgo parâon iyan.',
+'unusedtemplatestext' => 'Ining pahina minalista kan gabos na mga pahina sa {{ns:template}} ngarang-espasyo na bakong kabali sa ibang pahina.
+Giromdoma baya na mag-tsek para sa iba pang kasugpon sa mga templato bago mo pagpuraon sinda.',
 'unusedtemplateswlh' => 'ibang mga takod',
 
 # Random page
 'randompage' => 'Arín man na pahina',
-'randompage-nopages' => 'Mayong páhina an ngaran-espacio.',
+'randompage-nopages' => 'Dae tabi nin mga pahina sa minasunod na {{PLURAL:$2|espasyong-ngaran|mga espasyong-ngaran}}: $1.',
 
 # Random redirect
 'randomredirect' => 'Random na pagredirekta',
-'randomredirect-nopages' => 'Mayong paglikay (redirects) didgi sa ngaran-espacio.',
+'randomredirect-nopages' => 'Mayo nin panukdo-liwat sa espasyong-ngaran na "$1".',
 
 # Statistics
 'statistics' => 'Mga Estadistiko',
+'statistics-header-pages' => 'Estadistikong pahina',
+'statistics-header-edits' => 'Estadistiko nin pagliwat',
+'statistics-header-views' => 'Estadistiko nin pagmansay',
 'statistics-header-users' => 'Mga estadistiko nin parágamit',
+'statistics-header-hooks' => 'Iba pang estadistiko',
+'statistics-articles' => 'Laman na mga pahina',
+'statistics-pages' => 'Mga Pahina',
+'statistics-pages-desc' => 'Gabos na mga pahina sa laog kan wiki, kabali an pahina nin orolay, mga panukdo-liwat, ibp.',
 'statistics-files' => 'Pinagkargang mga sagunson',
 'statistics-edits' => 'Mga pagliwat sa pahina magpoon pa na an {{SITENAME}} pinagmukna.',
 'statistics-edits-average' => 'Katahaw kan mga pagliliwat sa kada pahina',
@@ -1654,19 +1672,26 @@ Kun an problema yaon pa, pakikontak tabi nin sarong [[Special:ListUsers/sysop|ad
 'statistics-views-peredit' => 'Mga kamansayan kada pagliwat',
 'statistics-users' => 'Rehistrado [[Special:ListUsers|users]]',
 'statistics-users-active' => 'Mga Aktibong Paragamit',
+'statistics-users-active-desc' => 'Mga paragamit na may ginibong aksyon sa nakaaging {{PLURAL:$1|aldaw|$1 mga aldaw}}',
 'statistics-mostpopular' => 'mga pinaka pighiling na pahina',
 
-'disambiguations' => 'Mga pahinang klaripikasyon',
+'disambiguations' => 'Mga pahinang minatulay pasiring sa pampalinaw na mga pahina',
 'disambiguationspage' => 'Template:clarip',
-'disambiguations-text' => "An mga nasunod na páhina nakatakod sa sarong '''páhina nin klaripikasyon'''.
-Imbis, kaipuhan na nakatakod sinda sa maninigong tema.<br />
-An páhina pigkokonsiderar na páhina nin klaripikasyon kun naggagamit ini nin templatong nakatakod sa [[MediaWiki:Disambiguationspage]]",
+'disambiguations-text' => "An mga minasunod na mga pahina igwang laog nin kisera sarong tulay pasiring sa '''pampalinaw na pahina'''.
+Sinda mapuwedeng makipagsugpon pasiring sa sarong mas manigong pahina nanggad.<br />
+An sarong pahina tratado bilang pampalinaw na pahina kun ini minagamit nin sarong templato na nakasugpon gikan sa [[MediaWiki:Disambiguationspage]].",
 
 'doubleredirects' => 'Dobleng mga redirekta',
-'doubleredirectstext' => 'Piglilista kaining pahina an mga pahinang minalikay sa ibang pahinang paralikay. Kada raya may mga takod sa primero asin segundang likay, buda an destino kan segundong likay, na puro-pirme sarong "tunay " na pahinang destino, na dapat duman nakaturo an primerong likay.',
+'doubleredirectstext' => 'Ining pahina minalista nin mga pahina na minatukdo liwat pasiring sa pinagtukdong-liwat na mga pahina.
+Kada palunpon igwang laog na minasugpon pasiring sa enot asin ikaduwang pagtukdo-liwat, siring man sa target kan ikaduwang pagtukdo-liwat, na pirme nanggad an "tunay" na pahinang target, na an enot na pagtukdong-liwat dapat na iyo an pagtutukdoon.
+<del>Pinagpura</del> na mga entrada naresolberan na.',
+'double-redirect-fixed-move' => '[[$1]] pinagbalyo tabi.
+Ini ngunyan minatukdo-liwat pasiring sa [[$2]].',
+'double-redirect-fixed-maintenance' => 'Pinapakarhay na dobleng panukdo-liwat magpoon sa [[$1]] pasiring sa [[$2]].',
+'double-redirect-fixer' => 'Parapakarhay kan panukdo-liwat',
 
 'brokenredirects' => 'Putol na mga paglikay',
-'brokenredirectstext' => 'An nagsusunod naglilikay kan takod sa mga pahinang mayo man:',
+'brokenredirectstext' => 'An mga minasunod na panukdo-liwat nakasugpon pasiring sa busyaw na mga pahina:',
 'brokenredirects-edit' => 'hirahón',
 'brokenredirects-delete' => 'parâon',
 
index cf1790c..71f44c4 100644 (file)
@@ -708,10 +708,10 @@ Siziñ deñişmeleriñiz astında kösterildi. Şimdi yapqan deñişmeleriñizni
 'editingold' => "'''DİQQAT: Saifeniñ eski bir versiyasını deñiştireyatasız.
 Saifeni saqlağanıñızdan soñ bu tarihlı versiyadan künümizge qadar olğan deñişmeler yoq olacaq.'''",
 'yourdiff' => 'Farqlar',
-'copyrightwarning' => "'''Lütfen, diqqat:''' {{SITENAME}} saytına qoşulğan bütün isseler <i>$2</i> muqavelesi dairesindedir (tafsilât içün $1 saifesine baqıñız).
+'copyrightwarning' => "'''Lütfen, diqqat:''' {{SITENAME}} saytına qoşulğan bütün isseler $2 muqavelesi dairesindedir (tafsilât içün $1 saifesine baqıñız).
 Qoşqan isseñizniñ başqa insanlar tarafından acımasızca deñiştirilmesini ya da azat tarzda ve sıñırsızca başqa yerlerge dağıtılmasını istemeseñiz, isse qoşmañız.<br />
 Ayrıca, mında isse qoşıp, bu isseniñ özüñiz tarafından yazılğanına, ya da cemaatqa açıq bir menbadan ya da başqa bir azat menbadan kopiyalanğanına garantiya bergen olasıñız.<br />
-'''<center>MÜELLİFLİK AQQINEN QORÇALANĞAN İÇ BİR METİNNİ MINDA RUHSETSİZ QOŞMAÑIZ!</center>'''",
+'''MÜELLİFLİK AQQINEN QORÇALANĞAN İÇ BİR METİNNİ MINDA RUHSETSİZ QOŞMAÑIZ!'''",
 'copyrightwarning2' => "'''Lütfen, diqqat:''' {{SITENAME}} saytına siz qoşqan bütün isseler başqa bir qullanıcı tarafından deñiştirilip ya da yoq etilip olur. Qoşqan isseñizniñ başqa insanlar tarafından acımasızca deñiştirilmesini ya da azat tarzda ve sıñırsızca başqa yerlerge dağıtılmasını istemeseñiz, isse qoşmañız.<br />
 Ayrıca, mında isse qoşıp, bu isseniñ özüñiz tarafından yazılğanına, ya da cemaatqa açıq bir menbadan ya da başqa bir azat menbadan kopiyalanğanına garantiya bergen olasıñız ($1 baqıñız).<br />
 '''MÜELLİFLİK AQQINEN QORÇALANĞAN İÇ BİR METİNNİ MINDA RUHSETSİZ QOŞMAÑIZ!'''",
index ed5f68d..887aacb 100644 (file)
@@ -1346,7 +1346,7 @@ Podrobnosti mohou být uvedeny v [{{fullurl:{{#Special:Log}}/delete|page={{FULLP
 'shown-title' => 'Zobrazit $1 {{PLURAL:$1|výsledek|výsledky|výsledků}} na stránku',
 'viewprevnext' => 'Ukázat ($1 {{int:pipe-separator}} $2) ($3).',
 'searchmenu-legend' => 'Možnosti hledání',
-'searchmenu-exists' => "*Stránka '''[[$1]]'''",
+'searchmenu-exists' => "'''Na této wiki existuje stránka nazvaná „[[:$1]]“.'''",
 'searchmenu-new' => "'''Vytvořte na této wiki stránku „[[:$1]]“!'''",
 'searchhelp-url' => 'Help:Obsah',
 'searchmenu-prefix' => '[[Special:PrefixIndex/$1|Zobrazit stránky, jejichž název začíná „$1“]]',
index f0e56a8..d9d19b4 100644 (file)
@@ -2723,6 +2723,7 @@ Mae ffolder dros dro yn eisiau.',
 'import-error-interwiki' => 'Ni fewnforwyd y dudalen "$1" oherwydd bod yr enw arni wedi ei neilltuo at ddiben cysylltu\'n allanol (rhyngwici).',
 'import-error-special' => 'Ni fewnforiwyd y dudalen "$1" oherwydd ei bod yn perthyn i barth arbennig lle nad oes tudalennau i\'w cael.',
 'import-error-invalid' => 'Ni fewnforwyd y dudalen "$1" oherwydd bod yr enw arni yn annilys.',
+'import-options-wrong' => '{{PLURAL:$2|Dewis|Dewis|Dewisiadau}} annilys: <nowiki>$1</nowiki>',
 
 # Import log
 'importlogpage' => 'Lòg mewnforio',
index 77f64dc..ab2e528 100644 (file)
@@ -2969,6 +2969,7 @@ Alle Transwiki-Import-Aktionen werden im [[Special:Log/import|Import-Logbuch]] p
 'import-interwiki-templates' => 'Alle Vorlagen einschließen',
 'import-interwiki-submit' => 'Import',
 'import-interwiki-namespace' => 'Zielnamensraum:',
+'import-interwiki-rootpage' => 'Zielstammseite (optional):',
 'import-upload-filename' => 'Dateiname:',
 'import-comment' => 'Grund:',
 'importtext' => 'Bitte die Datei über die Spezialseite [[Special:Export|Exportfunktion]] aus dem Quellwiki exportieren.
@@ -3001,6 +3002,9 @@ Diese auf dem lokalen Rechner speichern und danach hier hochladen.',
 'import-error-interwiki' => 'Die Seite „$1“ wurde nicht importiert, da deren Name für externe Links (Interwiki) reserviert ist.',
 'import-error-special' => 'Die Seite „$1“ wurde nicht importiert, da sie zu einem besonderen Namensraum gehört, in dem keine Seiten möglich sind.',
 'import-error-invalid' => 'Seite „$1“ wurde nicht importiert, da deren Name ungültig ist.',
+'import-options-wrong' => 'Falsche {{PLURAL:$2|Option|Optionen}}: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'Der angegebene Stammseitenname ist ungültig.',
+'import-rootpage-nosubpage' => 'Im Namensraum „$1“ der Stammseite sind keine Unterseiten erlaubt.',
 
 # Import log
 'importlogpage' => 'Import-Logbuch',
@@ -4083,6 +4087,4 @@ Anderenfalls kannst du auch das untenstehende einfache Formular nutzen. Dein Kom
 'duration-centuries' => '$1 {{PLURAL:$1|Jahrhundert|Jahrhunderte}}',
 'duration-millennia' => '$1 {{PLURAL:$1|Jahrtausend|Jahrtausende}}',
 
-# Unknown messages
-'import-options-wrong' => 'Falsche {{PLURAL:$2|Option|Optionen}}: <nowiki>$1</nowiki>',
 );
index b31ddc5..7fb30b8 100644 (file)
@@ -2868,6 +2868,7 @@ karê zerredayişê benateyê wikiyani[[Special:Log/import|zerreyê rocaneyê k
 'import-interwiki-templates' => 'Şablonê hemî dehil bike',
 'import-interwiki-submit' => 'Azare de',
 'import-interwiki-namespace' => 'Destinasyonê canameyî:',
+'import-interwiki-rootpage' => 'Hedef pelaya reçi (opsiyonel):',
 'import-upload-filename' => 'Nameyê dosyayi:',
 'import-comment' => 'Vatış:',
 'importtext' => 'Kerem ke dosyay, çımeyê wiki ra pê [[Special:Export|kırıştışê teberdayişi]] bıdê teber, Komputerê xo de qeyd kerê u bar kerê tiya.',
@@ -2902,6 +2903,9 @@ dosyaya emaneti vindbiyo',
 'import-error-interwiki' => 'Pela " $1 " qandê name dayışi aya nêgêrêna çıkı namey cı (interwiki) sero cırê ca abıryayo.',
 'import-error-special' => 'Pela " $1 " qandê vıraştışi aya nêgêrêna çıkı namay cı nameyo do xısusiyo u na pela rê no name nêgêrêno.',
 'import-error-invalid' => 'Pela "$1" nêdebyê de çıkı namey cı çınyo.',
+'import-options-wrong' => '{{PLURAL:$2|Weçenego|Weçenego}} xerpiyaye: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'Sernuştey ena pela reçey cı raverde niyo.',
+'import-rootpage-nosubpage' => 'Qan de bınnaman reçe de "$1" re mısade nedano.',
 
 # Import log
 'importlogpage' => 'Logê împortî',
index 63bfc50..8272c6c 100644 (file)
@@ -2686,6 +2686,7 @@ Wšykne transwiki-importowe akcije protokolěruju se w [[Special:Log/import|log-
 'import-interwiki-templates' => 'Wše pśedłogi zapśěgnuś',
 'import-interwiki-submit' => 'Importěrowaś',
 'import-interwiki-namespace' => 'Celowy mjenjowy rum:',
+'import-interwiki-rootpage' => 'Celowy kórjenjowy bok (opcionalny):',
 'import-upload-filename' => 'Datajowe mě:',
 'import-comment' => 'Komentar:',
 'importtext' => 'Eksportěruj pšosym dataju ze žredlowego wikija z pomocu [[Special:Export|eksporteje funkcije]]. Składuj ju na swójom licadle a nagraj ju sem.',
@@ -2717,6 +2718,9 @@ Wšykne transwiki-importowe akcije protokolěruju se w [[Special:Log/import|log-
 'import-error-interwiki' => 'Bok "$1" se njeimportěrujo, dokulaž jogo mě jo za eksterne wótkazowanje (interwiki) wuměnjone.',
 'import-error-special' => 'Bok "$1" se njeimportěrujo, dokulaž słuša k wósebnemu mjenjowemu rumoju, kótaryž njedowólujo boki.',
 'import-error-invalid' => 'Bok "$1" se njeimportěrujo, dokulaž jogo mě jo njepłaśiwe.',
+'import-options-wrong' => '{{PLURAL:$2|Wopacna opcija|Wopacnej opciji|Wopacne opcije|Wopacne opcije}}: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'Pódany kórjenjowy bok jo njepłaśiwy.',
+'import-rootpage-nosubpage' => 'Mjenjowy rum "$1" kórjenjowego boka njedowólujo pódboki.',
 
 # Import log
 'importlogpage' => 'Log-lisćinu importěrowaś',
index bf253ae..cba4317 100644 (file)
@@ -976,9 +976,9 @@ A list of valid special pages can be found at [[Special:SpecialPages|{{int:speci
 'dberrortext'                   => 'A database query syntax error has occurred.
 This may indicate a bug in the software.
 The last attempted database query was:
-<blockquote><tt>$1</tt></blockquote>
-from within function "<tt>$2</tt>".
-Database returned error "<tt>$3: $4</tt>".',
+<blockquote><code>$1</code></blockquote>
+from within function "<code>$2</code>".
+Database returned error "<samp>$3: $4</samp>".',
 'dberrortextcl'                 => 'A database query syntax error has occurred.
 The last attempted database query was:
 "$1"
@@ -2153,9 +2153,9 @@ The deletion and move log for this page are provided here for convenience:",
 To view or search previously uploaded files go to the [[Special:FileList|list of uploaded files]], (re)uploads are also logged in the [[Special:Log/upload|upload log]], deletions in the [[Special:Log/delete|deletion log]].
 
 To include a file in a page, use a link in one of the following forms:
-* '''<tt><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></tt>''' to use the full version of the file
-* '''<tt><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|alt text]]</nowiki></tt>''' to use a 200 pixel wide rendition in a box in the left margin with 'alt text' as description
-* '''<tt><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></tt>''' for directly linking to the file without displaying the file",
+* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''' to use the full version of the file
+* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|alt text]]</nowiki></code>''' to use a 200 pixel wide rendition in a box in the left margin with 'alt text' as description
+* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' for directly linking to the file without displaying the file",
 'upload-permitted'            => 'Permitted file types: $1.',
 'upload-preferred'            => 'Preferred file types: $1.',
 'upload-prohibited'           => 'Prohibited file types: $1.',
@@ -2204,21 +2204,21 @@ this file is $2.',
 This might be due to a typo in the filename.
 Please check whether you really want to upload this file.',
 'windows-nonascii-filename'   => 'This wiki does not support filenames with special characters.',
-'fileexists'                  => "A file with this name exists already, please check '''<tt>[[:$1]]</tt>''' if you are not sure if you want to change it.
+'fileexists'                  => "A file with this name exists already, please check <strong>[[:$1]]</strong> if you are not sure if you want to change it.
 [[$1|thumb]]",
-'filepageexists'              => "The description page for this file has already been created at '''<tt>[[:$1]]</tt>''', but no file with this name currently exists.
+'filepageexists'              => "The description page for this file has already been created at <strong>[[:$1]]</strong>, but no file with this name currently exists.
 The summary you enter will not appear on the description page.
 To make your summary appear there, you will need to manually edit it.
 [[$1|thumb]]",
 'fileexists-extension'        => "A file with a similar name exists: [[$2|thumb]]
-* Name of the uploading file: '''<tt>[[:$1]]</tt>'''
-* Name of the existing file: '''<tt>[[:$2]]</tt>'''
+* Name of the uploading file: <strong>[[:$1]]</strong>
+* Name of the existing file: <strong>[[:$2]]</strong>
 Please choose a different name.",
 'fileexists-thumbnail-yes'    => "The file seems to be an image of reduced size ''(thumbnail)''.
 [[$1|thumb]]
-Please check the file '''<tt>[[:$1]]</tt>'''.
+Please check the file <strong>[[:$1]]</strong>.
 If the checked file is the same image of original size it is not necessary to upload an extra thumbnail.",
-'file-thumbnail-no'           => "The filename begins with '''<tt>$1</tt>'''.
+'file-thumbnail-no'           => "The filename begins with <strong>$1</strong>.
 It seems to be an image of reduced size ''(thumbnail)''.
 If you have this image in full resolution upload this one, otherwise change the filename please.",
 'fileexists-forbidden'        => 'A file with this name already exists, and cannot be overwritten.
@@ -2492,7 +2492,7 @@ Maybe you want to edit the description on its [$2 file description page] there.'
 # MIME search
 'mimesearch'         => 'MIME search',
 'mimesearch-summary' => 'This page enables the filtering of files for their MIME type.
-Input: contenttype/subtype, e.g. <tt>image/jpeg</tt>.',
+Input: contenttype/subtype, e.g. <code>image/jpeg</code>.',
 'mimetype'           => 'MIME type:',
 'download'           => 'download',
 
@@ -2742,7 +2742,7 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'linksearch-ok'      => 'Search',
 'linksearch-text'    => 'Wildcards such as "*.wikipedia.org" may be used.
 Needs at least a top-level domain, for example "*.org".<br />
-Supported protocols: <tt>$1</tt> (do not add any of these in your search).',
+Supported protocols: <code>$1</code> (do not add any of these in your search).',
 'linksearch-line'    => '$1 is linked from $2',
 'linksearch-error'   => 'Wildcards may appear only at the start of the hostname.',
 
@@ -2776,8 +2776,8 @@ There may be [[{{MediaWiki:Listgrouprights-helppage}}|additional information]] a
 'listgrouprights-rights'               => 'Rights',
 'listgrouprights-helppage'             => 'Help:Group rights',
 'listgrouprights-members'              => '(list of members)',
-'listgrouprights-right-display'        => '<span class="listgrouprights-granted">$1 <tt>($2)</tt></span>', # only translate this message to other languages if you have to change it
-'listgrouprights-right-revoked'        => '<span class="listgrouprights-revoked">$1 <tt>($2)</tt></span>', # only translate this message to other languages if you have to change it
+'listgrouprights-right-display'        => '<span class="listgrouprights-granted">$1 <code>($2)</code></span>', # only translate this message to other languages if you have to change it
+'listgrouprights-right-revoked'        => '<span class="listgrouprights-revoked">$1 <code>($2)</code></span>', # only translate this message to other languages if you have to change it
 'listgrouprights-addgroup'             => 'Add {{PLURAL:$2|group|groups}}: $1',
 'listgrouprights-removegroup'          => 'Remove {{PLURAL:$2|group|groups}}: $1',
 'listgrouprights-addgroup-all'         => 'Add all groups',
index 91725d7..6980cf7 100644 (file)
@@ -612,6 +612,8 @@ $1',
 'youhavenewmessages' => 'Tienes $1 ($2).',
 'newmessageslink' => 'mensajes nuevos',
 'newmessagesdifflink' => 'última modificación',
+'youhavenewmessagesfromusers' => 'Tienes $1 de {{PLURAL:$3|otro usuario|$3 usuarios}} ($2).',
+'youhavenewmessagesmanyusers' => 'Tienes $1 de muchos usuarios ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|un nuevo mensaje|mensajes nuevos}}',
 'newmessagesdifflinkplural' => '{{PLURAL:$1|última modificación|últimos cambios}}',
 'youhavenewmessagesmulti' => 'Tienes nuevos mensajes en $1',
@@ -2940,6 +2942,7 @@ Todas las importaciones transwiki se registran en el [[Special:Log/import|regist
 'import-interwiki-templates' => 'Incluir todas las plantillas',
 'import-interwiki-submit' => 'Importar',
 'import-interwiki-namespace' => 'Espacio de nombres de destino:',
+'import-interwiki-rootpage' => 'Página raíz del destino (opcional):',
 'import-upload-filename' => 'Nombre de archivo:',
 'import-comment' => 'Comentario:',
 'importtext' => 'Por favor, exporta el archivo desde el wiki de origen usando la [[Special:Export|herramienta de exportación]], guárdalo en tu disco y súbelo aquí.',
@@ -2974,6 +2977,9 @@ No hay un directorio temporal.',
 'import-error-interwiki' => 'La página "$1" no se ha importado porque su nombre está reservado para la vinculación externa (interwikis).',
 'import-error-special' => 'La página "$1" no se ha importado porque pertenece a un espacio de nombres especial que no admite páginas.',
 'import-error-invalid' => 'La página "$1" no se ha importado porque su nombre no es válido.',
+'import-options-wrong' => '{{PLURAL:$2|Opción errónea|Opciones erróneas}}: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'La página raíz dada es un título inválido.',
+'import-rootpage-nosubpage' => 'El espacio de nombres "$1" de la página raíz no permite subpáginas.',
 
 # Import log
 'importlogpage' => 'Registro de importaciones',
index 06306e6..9e9b475 100644 (file)
@@ -742,8 +742,7 @@ Kontrollige kirjapilti või [[Special:UserLogin/signup|looge uus kasutajakonto]]
 'login-userblocked' => 'See kasutaja on blokeeritud. Sisselogimine pole lubatud.',
 'wrongpassword' => 'Vale parool. Proovige uuesti.',
 'wrongpasswordempty' => 'Parool jäi sisestamata. Palun proovi uuesti.',
-'passwordtooshort' => 'Parool on liiga lühike.
-See peab koosnema vähemalt {{PLURAL:$1|ühest|$1}} tähemärgist.',
+'passwordtooshort' => 'Parool peab koosnema vähemalt {{PLURAL:$1|ühest|$1}} tähemärgist.',
 'password-name-match' => 'Parool peab kasutajanimest erinema.',
 'password-login-forbidden' => 'Selle kasutajanime ja parooli kasutamine on keelatud.',
 'mailmypassword' => 'Saada e-posti teel uus parool',
@@ -1502,10 +1501,10 @@ See ei tohi olla pikem kui $1 {{PLURAL:$1|sümbol|sümbolit}}.',
 # Rights
 'right-read' => 'Lugeda lehekülgi',
 'right-edit' => 'Redigeerida lehekülje sisu',
-'right-createpage' => 'Luua lehekülgi (mis pole arutelu leheküljed)',
+'right-createpage' => 'Luua lehekülgi (mis pole aruteluleheküljed)',
 'right-createtalk' => 'Luua arutelulehekülgi',
 'right-createaccount' => 'Luua uusi kasutajakontosid',
-'right-minoredit' => 'Märkida muudatusi pisimuudatustena',
+'right-minoredit' => 'Märkida muudatusi pisimuudatusteks',
 'right-move' => 'Teisaldada lehekülgi',
 'right-move-subpages' => 'Teisaldada lehekülgi koos nende alamlehtedega',
 'right-move-rootuserpages' => 'Teisaldada kasutajalehekülgi',
@@ -2564,12 +2563,13 @@ Täida ka põhjuse väli, näiteks viidates lehekülgedele, mis rikuti.',
 'ipbreason' => 'Põhjus:',
 'ipbreasonotherlist' => 'Muul põhjusel',
 'ipbreason-dropdown' => '*Tavalised blokeerimise põhjused
-** Lehtedelt sisu kustutamine
+** Valeandmete lisamine
+** Lehekülgedelt sisu kustutamine
+** Välislinkide rämpspostitus
 ** Sodimine
-** Taunitav käitumine, isiklikud rünnakud
-** Mittesobiv kasutajanimi
-** Spämmi levitamine
-** Vale info levitamine',
+** Hirmutav käitumine/ahistamine
+** Mitme konto väärkasutus
+** Lubamatu kasutajanimi',
 'ipb-hardblock' => 'Keela sellelt IP-aadressilt sisseloginud kasutajatel redigeerida',
 'ipbcreateaccount' => 'Takista konto loomist',
 'ipbemailban' => 'Takista kasutajal e-kirjade saatmine',
@@ -2593,7 +2593,7 @@ Kehtivaid blokeeringuid vaata [[Special:BlockList|blokeerimisnimekirjast]].',
 'ipb-edit-dropdown' => 'Muuda blokeeringu põhjuseid',
 'ipb-unblock-addr' => 'Kustuta $1 blokeering',
 'ipb-unblock' => 'Kasutaja või IP-aadressi vabastamine blokeerimisest',
-'ipb-blocklist' => 'Vaata kehtivaid keelde',
+'ipb-blocklist' => 'Vaata kehtivaid blokeeringuid',
 'ipb-blocklist-contribs' => 'Kasutaja $1 kaastöö',
 'unblockip' => 'Blokeerimise eemaldamine',
 'unblockiptext' => 'Kasutage allpool olevat vormi redigeerimisõiguste taastamiseks varem blokeeritud IP aadressile.',
@@ -2791,13 +2791,14 @@ Palun kasuta mõnda teist nime.',
 
 # Export
 'export' => 'Lehekülgede eksport',
-'exporttext' => 'Sa saad siin eksportida kindla lehekülje või nende kogumi, tekstid, koos kogu nende muudatuste ajalooga, XML kujule viiduna. Seda saad sa vajadusel kasutada teksti ülekandmiseks teise vikisse, kasutades selleks MediaWiki [[Special:Import|impordi lehekülge]].
+'exporttext' => 'Saad eksportida kindla leheküljel või lehekülgede kogumi teksti ja redigeerimisloo XML-kujule viiduna.
+Seda saab teise vikisse importida, kasutades selleks MediaWiki [[Special:Import|impordi lehekülge]].
 
-Et eksportida lehekülgi, sisesta nende pealkirjad all olevasse teksti kasti, iga pealkiri ise reale, ning vali kas sa soovid saada leheküljest kõiki selle vanemaid versioone (muudatusi) või soovid sa saada leheküljest vaid hetke versiooni.
+Et eksportida lehekülgi, sisesta nende pealkirjad allolevasse tekstikasti, iga pealkiri ise reale ja vali, kas soovid viimast redaktsiooni ja kõiki vanemaid redaktsioone ühes redigeerimislooga või viimast redaktsiooni ühes andmetega viimase redigeerimise kohta.
 
-Viimasel juhul võid sa näiteks "[[{{MediaWiki:Mainpage}}]]" lehekülje, jaoks kasutada samuti linki kujul:  [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]].',
+Viimasel juhul saab kasutada ka linki, näiteks lehekülje "[[{{MediaWiki:Mainpage}}]]" jaoks [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]].',
 'exportall' => 'Ekspordi kõik leheküljed',
-'exportcuronly' => 'Lisa vaid viimane versioon lehest, ning mitte kogu ajalugu',
+'exportcuronly' => 'Lisa vaid viimane redaktsioon, mitte kogu ajalugu',
 'exportnohistory' => "----
 '''Märkus:''' Lehekülgede täieliku ajaloo eksportimine on siin leheküljel jõudluse tagamiseks blokeeritud.",
 'exportlistauthors' => 'Lisa kõigile lehekülgedele kogu kaastööliste nimekiri',
@@ -2852,17 +2853,17 @@ Kõik vikidevahelised toimingud on [[Special:Log/import|impordilogis]].',
 'import-interwiki-templates' => 'Liida kõik mallid',
 'import-interwiki-submit' => 'Impordi',
 'import-interwiki-namespace' => 'Sihtkoha nimeruum:',
+'import-interwiki-rootpage' => 'Sihtkoha juurlehekülg (valikuline):',
 'import-upload-filename' => 'Failinimi:',
 'import-comment' => 'Kommentaar:',
 'importtext' => 'Palun kasuta faili allikvikist eksportimiseks [[Special:Export|ekspordivahendit]].
 Salvesta see oma arvutisse ja laadi siia üles.',
-'importstart' => 'Impordin lehekülgi...',
+'importstart' => 'Lehekülgede importimine...',
 'import-revision-count' => '$1 {{PLURAL:$1|versioon|versiooni}}',
 'importnopages' => 'Ei olnud imporditavaid lehekülgi.',
 'imported-log-entries' => 'Imporditi $1 {{PLURAL:$1|logisissekanne|logisissekannet}}.',
 'importfailed' => 'Importimine ebaõnnestus: <nowiki>$1</nowiki>',
-'importunknownsource' => 'Unknown import source type
-Tundmatu tüüpi algallikas',
+'importunknownsource' => 'Tundmatut tüüpi impordiallikas',
 'importcantopen' => 'Ei saa imporditavat faili avada',
 'importbadinterwiki' => 'Vigane vikidevaheline link',
 'importnotext' => 'Tühi või ilma tekstita',
@@ -2889,6 +2890,9 @@ Palun ürita uuesti.',
 'import-error-interwiki' => 'Lehekülge "$1" ei impordita, sest selle pealkirja hoitakse välislinkide (interviki) jaoks.',
 'import-error-special' => 'Lehekülge "$1" ei impordita, sest see kuulub erinimeruumi, kus pole leheküljed lubatud.',
 'import-error-invalid' => 'Lehekülge "$1" ei impordita, sest selle pealkiri on vigane.',
+'import-options-wrong' => '{{PLURAL:$2|Vale valik|Valed valikud}}: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'Etteantud juurlehekülje pealkiri on vigane.',
+'import-rootpage-nosubpage' => 'Juurlehekülje nimeruumis "$1" pole alamleheküljed lubatud.',
 
 # Import log
 'importlogpage' => 'Impordilogi',
@@ -3158,7 +3162,7 @@ Kui faili on rakendustarkvaraga töödeldud, võib osa andmeid olla muudetud võ
 'exif-stripbytecounts' => 'Baitide hulk kokkusurutud riba kohta',
 'exif-jpeginterchangeformat' => 'Kaugus JPEG SOI-ni',
 'exif-jpeginterchangeformatlength' => 'JPEG-andmete suurus baitides',
-'exif-whitepoint' => 'Valge punkti heledus',
+'exif-whitepoint' => 'Valgepunkti värvsus',
 'exif-primarychromaticities' => 'Põhivärvide värvsus',
 'exif-ycbcrcoefficients' => 'Värviruumi ümberkujundamise maatriksi koefitsiendid',
 'exif-referenceblackwhite' => 'Musta ja valge kontrollväärtused',
@@ -3216,7 +3220,7 @@ Kui faili on rakendustarkvaraga töödeldud, võib osa andmeid olla muudetud võ
 'exif-sharpness' => 'Teravus',
 'exif-devicesettingdescription' => 'Seadme seadistuste kirjeldus',
 'exif-imageuniqueid' => 'Üksiku pildi ID',
-'exif-gpsversionid' => 'GPS tähise versioon',
+'exif-gpsversionid' => 'GPS-tähise versioon',
 'exif-gpslatituderef' => 'Põhja- või lõunalaius',
 'exif-gpslatitude' => 'Laius',
 'exif-gpslongituderef' => 'Ida- või läänepikkus',
@@ -3345,20 +3349,20 @@ Kui faili on rakendustarkvaraga töödeldud, võib osa andmeid olla muudetud võ
 
 'exif-lightsource-0' => 'Teadmata',
 'exif-lightsource-1' => 'Päevavalgus',
-'exif-lightsource-2' => 'Helendav',
+'exif-lightsource-2' => 'Fluorestsentsvalgus',
 'exif-lightsource-3' => 'Hõõglambi valgus',
 'exif-lightsource-4' => 'Välk',
 'exif-lightsource-9' => 'Hea ilm',
 'exif-lightsource-10' => 'Pilvine ilm',
 'exif-lightsource-11' => 'Varjus',
-'exif-lightsource-12' => 'Luminofoor päevavalgus (D 5700 - 7100K)',
-'exif-lightsource-13' => 'Luminofoor päevavalgus (N 4600 - 5400K)',
-'exif-lightsource-14' => 'Luminofoor külm valgus (W 3900 - 4500K)',
-'exif-lightsource-15' => 'Luminofoor valge (WW 3200 - 3700K)',
+'exif-lightsource-12' => 'Päevane fluorestsentsvalgus (D 5700 – 7100K)',
+'exif-lightsource-13' => 'Päevavalge fluorestsentsvalgus (N 4600 – 5400K)',
+'exif-lightsource-14' => 'Külmvalge fluorestsentsvalgus (W 3900 – 4500K)',
+'exif-lightsource-15' => 'Valge fluorestsentsvalgus (WW 3200 – 3700K)',
 'exif-lightsource-17' => 'Standardne valgus A',
 'exif-lightsource-18' => 'Standardne valgus B',
 'exif-lightsource-19' => 'Standardne valgus C',
-'exif-lightsource-24' => 'stuudio hõõglambid (ISO)',
+'exif-lightsource-24' => 'Stuudio hõõglamp (ISO)',
 'exif-lightsource-255' => 'Muu valgusallikas',
 
 # Flash modes
@@ -3662,7 +3666,7 @@ Sa võid [[Special:EditWatchlist|kasutada ka harilikku tekstiredaktorit]].',
 'version' => 'Versioon',
 'version-extensions' => 'Paigaldatud lisad',
 'version-specialpages' => 'Erileheküljed',
-'version-parserhooks' => 'Süntaksianalüsaatori lisad (Parser hooks)',
+'version-parserhooks' => 'Parserihaagid',
 'version-variables' => 'Muutujad',
 'version-antispam' => 'Rämpsposti tõkestus',
 'version-skins' => 'Kujundused',
index c8ffb9b..51f1c05 100644 (file)
@@ -20,6 +20,7 @@
  * @author Urhixidur
  * @author Xabier Armendaritz
  * @author לערי ריינהארט
+ * @author පසිඳු කාවින්ද
  */
 
 $namespaceNames = array(
@@ -3162,6 +3163,7 @@ Halaber [[Special:EditWatchlist|aldatzaile estandarra]] erabil dezakezu.',
 'version-software' => 'Instalatutako softwarea',
 'version-software-product' => 'Produktua',
 'version-software-version' => 'Bertsioa',
+'version-entrypoints-header-url' => 'URL',
 
 # Special:FilePath
 'filepath' => 'Fitxategi bidea',
index e4d5da3..142a6e0 100644 (file)
@@ -2355,8 +2355,8 @@ Sivulla $2 on lista viimeaikaisista poistoista.',
 'rollback' => 'palauta aiempaan versioon',
 'rollback_short' => 'Palautus',
 'rollbacklink' => 'palauta',
-'rollbacklinkcount' => 'kumoa {{PLURAL:$1|muokkaus|$1 muokkausta}}',
-'rollbacklinkcount-morethan' => 'kumoa yli $1 {{PLURAL:$1|muutos|muutosta}}',
+'rollbacklinkcount' => 'palauta {{PLURAL:$1|muokkaus|$1 muokkausta}}',
+'rollbacklinkcount-morethan' => 'palauta yli $1 {{PLURAL:$1|muutos|muutosta}}',
 'rollbackfailed' => 'Palautus epäonnistui',
 'cantrollback' => 'Aiempaan versioon ei voi palauttaa, koska viimeisin kirjoittaja on sivun ainoa tekijä.',
 'alreadyrolled' => 'Käyttäjän [[User:$2|$2]] ([[User talk:$2|keskustelu]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) tekemiä muutoksia sivuun [[:$1]] ei voi kumota, koska joku muu on muuttanut sivua.
index 56eeebd..8eec8a2 100644 (file)
@@ -864,6 +864,8 @@ Tann seinasti posturin í loggfíluni er vístur niðanfyri fyri kelduávísing:
 'template-semiprotected' => '(lutvíst vardar)',
 'hiddencategories' => 'Henda síðan er í {{PLURAL:$1|1 fjaldum bólki|$1 fjaldum bólkum}}:',
 'nocreatetitle' => 'Upprættan av síðu er avmarkað',
+'nocreatetext' => '{{SITENAME}} hevur noktað fyri møguleikanum at upprætta nýggjar síður.
+Tú kanst fara aftur og rætta eina síðu sum longu er til, ella [[Special:UserLogin|rita teg inn ella få tær eina konto]].',
 'nocreate-loggedin' => 'Tú hevur ikki loyvi til at upprætta nýggjar síður.',
 'sectioneditnotsupported-title' => 'Tað ber ikki til at rætta brot',
 'sectioneditnotsupported-text' => 'Tað ber ikki til at rætta brot á hesi síðu.',
@@ -877,6 +879,8 @@ Strikingar og flytingar loggurin (søgan) fyri hesa síðuna eru at finna her fy
 'moveddeleted-notice' => 'Henda síðan er blivin strikað.
 Strikingar og flytingar loggurin (søgan) fyri hesa síðuna eru at finna her niðanfyri.',
 'log-fulllog' => 'Vís allan gerðalistan (loggin)',
+'edit-hook-aborted' => 'Rættingin bleiv avbrotin av einum programmfeili. 
+Ongin frágreiðing finst.',
 'edit-gone-missing' => 'Tað var ikki møguligt at dagføra síðuna.
 Tað sær út til at hon er blivin strikað.',
 'edit-conflict' => 'Rættingar trupulleiki (konflikt).',
@@ -1271,6 +1275,7 @@ Tín t-post adressa verður ikki avdúkað, tá aðrir brúkarir seta seg í sam
 'right-browsearchive' => 'Leita í strikaðum síðum',
 'right-undelete' => 'Endurstovnað eina síðu',
 'right-block' => 'Nokta øðrum brúkarum at rætta (blokka)',
+'right-blockemail' => 'Nokta einum brúkara at senda teldupost',
 'right-hideuser' => 'Sperra eitt brúkaranavn og goyma tað burtur fyri almenninginum',
 'right-unblockself' => 'Taka burtur sperring av sær sjálvum',
 'right-protect' => 'Broyt verjustøður og rætta vardar síður',
@@ -1373,6 +1378,16 @@ Síður á [[Special:Watchlist|tínum eftiransingarlista]] eru skrivaðar við '
 'uploadnologin' => 'Ikki ritað inn',
 'uploadnologintext' => 'Tú mást hava [[Special:UserLogin|ritað inn]]
 fyri at leggja fílur upp.',
+'upload-recreate-warning' => "'''Ávaring: Ein fíla við hasum navninum er blivin strikað ella flutt.'''
+
+Strikingar og flytingar loggurin (søgan) fyri ta síðuna verður vístur her niðanfyri fyri at gera tað lættari hjá tær:",
+'uploadtext' => "Brúka formularin her niðanfyri tá tú skalt leggja fílur út.
+Fyri at síggja ella leita eftir fílur sum longu eru lagdar út, kanst tú fara til [[Special:FileList|lista við upploadaðum fílum]], (endur)uploads eru eisini goymd í [[Special:Log/upload|upload logginum]], strikingar í [[Special:Log/delete|strikingarlogginum]].
+
+Fyri at taka eina fílu við á eina síðu, brúka so eina leinkju í ein av hesum formunum:
+* '''<tt><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></tt>''' fyri at brúka fulla versjón av fíluni
+* '''<tt><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|alt text]]</nowiki></tt>''' fyri at brúka eina 200 pixel breiða endurgeving í vinstra bredda við 'alt text' sum frágreiðing
+* '''<tt><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></tt>''' fyri at leinkja beinleiðis til fíluna uttan at vísa fíluna",
 'upload-permitted' => 'Loyvd fílu sløg: $1.',
 'upload-preferred' => 'Best umtóktu fílu sløg: $1.',
 'upload-prohibited' => 'Ikki loyvd fílu sløg: $1.',
index cda6f64..8230e05 100644 (file)
@@ -2960,6 +2960,7 @@ Toutes les actions d’importation inter-wiki sont consignées dans l’[[Specia
 'import-interwiki-templates' => 'Inclure tous les modèles',
 'import-interwiki-submit' => 'Importer',
 'import-interwiki-namespace' => 'Espace de noms de destination :',
+'import-interwiki-rootpage' => 'Page racine de destination (optionnelle):',
 'import-upload-filename' => 'Nom du fichier :',
 'import-comment' => 'Commentaire :',
 'importtext' => 'Veuillez exporter le fichier depuis le wiki d’origine en utilisant son [[Special:Export|outil d’exportation]].
@@ -2995,6 +2996,9 @@ Un dossier temporaire est manquant.",
 'import-error-interwiki' => "La page « $1 » n'est pas importée parce que son nom est réservé pour un lien externe (interwiki).",
 'import-error-special' => 'La page " $1 " n\'est pas importée parce qu\'elle appartient à un espace de noms special qui n’en autorise aucune.',
 'import-error-invalid' => 'Page « $1 » n’est pas importée parce que son nom n’est pas valide.',
+'import-options-wrong' => '{{PLURAL:$2|Mauvaise option|Mauvaises options}}: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'La page racine fournie est un titre non valide.',
+'import-rootpage-nosubpage' => 'L\'espace de noms "$1" de la page racine n\'autorise pas les sous-pages.',
 
 # Import log
 'importlogpage' => 'Journal des importations',
index 3e333dc..1ba84cc 100644 (file)
@@ -20,6 +20,7 @@
  * @author Tameamseo
  * @author Urhixidur
  * @author לערי ריינהארט
+ * @author පසිඳු කාවින්ද
  */
 
 $magicWords = array(
@@ -578,6 +579,12 @@ Chun d'iarratas logáil isteach a chríochnú, caithfidh tú focal faire nua a r
 'resetpass-submit-cancel' => 'Cealaigh',
 'resetpass-temp-password' => 'Focal faire sealadach:',
 
+# Special:PasswordReset
+'passwordreset-username' => 'Ainm úsáideora:',
+
+# Special:ChangeEmail
+'changeemail-cancel' => 'Cealaigh',
+
 # Edit page toolbar
 'bold_sample' => 'Cló trom',
 'bold_tip' => 'Cló trom',
@@ -739,6 +746,7 @@ Treoir: (rth) = difríocht ón leagan reatha, (rmh) = difríocht ón leagan roim
 # Revision deletion
 'rev-deleted-user' => '(ainm úsáideora dealaithe)',
 'rev-delundel' => 'taispeáin/folaigh',
+'rev-showdeleted' => 'taispeáin',
 'revisiondelete' => 'Scrios/díscrios leagain',
 'revdelete-show-file-confirm' => 'An bhfuil tú cinnte gur mhaith leat féach ar leasú scriosta don chomhad "<nowiki>$1</nowiki>" ó $2 ag $3?',
 'revdelete-show-file-submit' => 'Tá',
@@ -746,6 +754,7 @@ Treoir: (rth) = difríocht ón leagan reatha, (rmh) = difríocht ón leagan roim
 'logdelete-selected' => "'''{{PLURAL:$1|Teagmhas log roghnaithe|Teagmhais log roghnaithe}}:'''",
 'revdelete-hide-text' => 'Folaigh leagan téacs',
 'revdelete-radio-same' => 'ná hathraigh',
+'revdelete-radio-unset' => 'Ní',
 'revdel-restore' => 'athraigh infheictheacht',
 'pagehist' => 'Stair leathanach',
 'deletedhist' => 'Stair scriosta',
@@ -810,6 +819,7 @@ Bain triail as ''all:'' a chur roimh d'iarratas chun an t-inneachar ar fad (leat
 'powersearch-redir' => 'Liosta athsheoltaí',
 'powersearch-field' => 'Cuardaigh le',
 'powersearch-toggleall' => 'Uile',
+'powersearch-togglenone' => 'Tada',
 'searchdisabled' => "Tá brón orainn! Mhíchumasaíodh an cuardach téacs iomlán go sealadach chun luas an tsuímh a chosaint. Idir an dá linn, is féidir leat an cuardach Google anseo thíos a úsáid - b'fhéidir go bhfuil sé as dáta.",
 
 # Quickbar
@@ -1255,6 +1265,7 @@ Beidh do seoladh ríomhphoist a d\'iontráil tú i [[Special:Preferences|do chui
 'defemailsubject' => 'Ríomhphost {{GRAMMAR:genitive|{{SITENAME}}}}',
 'noemailtitle' => 'Níl aon seoladh ríomhphoist ann',
 'noemailtext' => 'Níor thug an úsáideoir seo seoladh ríomhphoist bhailí.',
+'emailusername' => 'Ainm úsáideora:',
 'emailfrom' => 'Seoltóir:',
 'emailto' => 'Chuig:',
 'emailsubject' => 'Ábhar:',
@@ -1409,6 +1420,7 @@ Is féidir an leibhéal glasála a athrú, ach ní féidir cur isteach ar an ghl
 'pagesize' => '(bearta)',
 
 # Restrictions (nouns)
+'restriction-edit' => 'Cuir in eagar',
 'restriction-create' => 'Cruthaigh',
 'restriction-upload' => 'Uaslódaigh',
 
@@ -1431,6 +1443,7 @@ Is an téacs as na leagan scriosta seo ar fáil do riarthóirí amháin.',
 'undelete-revision' => 'Leagan scriosta $1 (ó $4, ar $5) le $3:',
 'undeletebtn' => 'Díscrios!',
 'undeletelink' => 'féach/díscrios',
+'undeleteviewlink' => 'Amharc',
 'undeletereset' => 'Athshocraigh',
 'undeleteinvert' => 'Cuir an roghnú bun os cionn',
 'undeletecomment' => 'Tuairisc:',
@@ -1644,6 +1657,9 @@ Sa dara cás, is féidir leat nasc a úsáid, mar shampla [[{{#Special:Export}}/
 'allmessagestext' => 'Is liosta é seo de theachtaireachtaí córais atá le fáil san ainmspás MediaWiki.
 Tabhair cuairt ar [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] agus [//translatewiki.net translatewiki.net] le do thoil más mian leat cur leis an logánú ginearálta MediaWiki.',
 'allmessagesnotsupportedDB' => "Ní féidir an leathanach seo a úsáid dá bharr gur díchumasaíodh '''\$wgUseDatabaseMessages'''.",
+'allmessages-filter-all' => 'Uile',
+'allmessages-language' => 'Teanga:',
+'allmessages-filter-submit' => 'Gabh',
 
 # Thumbnails
 'thumbnail-more' => 'Méadaigh',
@@ -1654,6 +1670,7 @@ Tabhair cuairt ar [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation]
 'import' => 'Iompórtáil leathanaigh',
 'importinterwiki' => 'Iompórtáil trasna vicithe',
 'import-interwiki-submit' => 'iompórtáil',
+'import-comment' => 'Nóta tráchta:',
 'importtext' => 'Easportáil an comhad ón vici-fhoinse (le húsáid na [[Special:Export|tréithe easportáil]]), sábháil ar do dhíosca é agus uaslódáil anseo é.',
 'import-revision-count' => '{{PLURAL:$1|Leagan amháin|$1 leagain}}',
 'importnopages' => 'Níl aon leathanaigh chun iompórtáil',
@@ -1756,6 +1773,9 @@ iarradh sábháil. Is dócha gur nasc chuig suíomh seachtrach ba chúis leis.',
 'spamprotectionmatch' => 'Truicear ár scagaire dramhála ag an téacs seo a leanas: $1',
 'spambot_username' => 'MediaWiki turscar glanadh',
 
+# Info page
+'pageinfo-subjectpage' => 'Leathanach',
+
 # Skin names
 'skinname-standard' => 'Clasaiceach',
 'skinname-nostalgia' => 'Sean-nós',
@@ -1950,6 +1970,9 @@ Beidh na cinn eile ceilte de réir réamhshocraithe.
 'exif-gpsareainformation' => 'Ainm an cheantair GPS',
 'exif-gpsdatestamp' => 'Dáta GPS',
 'exif-gpsdifferential' => 'Ceartú difreálach GPS',
+'exif-source' => 'Foinse',
+'exif-languagecode' => 'Teanga',
+'exif-iimcategory' => 'Catagóir',
 
 # EXIF attributes
 'exif-compression-1' => 'Neamh-chomhbhrúite',
@@ -2092,6 +2115,7 @@ cúlra i bhfócas)',
 'watchlistall2' => 'an t-iomlán',
 'namespacesall' => 'iad uile',
 'monthsall' => 'gach mí',
+'limitall' => 'iad uile',
 
 # E-mail address confirmation
 'confirmemail' => 'Deimhnigh do ríomhsheoladh',
@@ -2145,6 +2169,7 @@ Rachaidh an cód deimhnithe seo as feidhm ag $4.',
 'table_pager_prev' => 'Leathanach roimhe',
 'table_pager_first' => 'Céad leathanach',
 'table_pager_last' => 'Deireadh leathanach',
+'table_pager_limit_submit' => 'Gabh',
 'table_pager_empty' => 'Folamh',
 
 # Auto-summaries
@@ -2179,6 +2204,7 @@ Rachaidh an cód deimhnithe seo as feidhm ag $4.',
 'version-license' => 'Ceadúnas',
 'version-software' => 'Bogearraí suiteáilte',
 'version-software-version' => 'Leagan',
+'version-entrypoints-header-url' => 'URL',
 
 # Special:FilePath
 'filepath' => 'Cosán comhaid',
@@ -2204,4 +2230,11 @@ Rachaidh an cód deimhnithe seo as feidhm ag $4.',
 # Special:BlankPage
 'blankpage' => 'Leathanach bán',
 
+# HTML forms
+'htmlform-selectorother-other' => 'Eile',
+
+# Feedback
+'feedback-message' => 'Teachtaireacht:',
+'feedback-cancel' => 'Cealaigh',
+
 );
index 68a5ba7..4ea373b 100644 (file)
@@ -667,6 +667,7 @@ Dh'fhaoidte nach urrainn dhut am feart \"Cuir post-d dhan chleachdaiche seo\" a
 'S e \$3 an seòladh IP làithreach agus agus 's e #\$5 ID a' bhacaidh.
 Thoir iomradh air a' mhion-fhiosrachadh gu h-àrd ma chuireas tu ceist sam bith mu dhèidhinn.",
 'blockednoreason' => 'cha deach adhbhar a shònrachadh',
+'whitelistedittext' => 'Feumaidh tu $1 mus urrainn dhut duilleagan a dheasachadh.',
 'loginreqlink' => 'log a-steach',
 'accmailtitle' => 'Facal-faire air a chur.',
 'accmailtext' => "Chaidh facal-faire a chruthachadh air thuaiream airson [[User talk:$1|$1]] 's a chur gu $2.
index 084e434..1335d89 100644 (file)
@@ -2971,6 +2971,7 @@ $1',
 'import-interwiki-templates' => 'ייבוא גם של כל התבניות המוכללות בדף',
 'import-interwiki-submit' => 'ייבוא',
 'import-interwiki-namespace' => 'העתקה למרחב השם:',
+'import-interwiki-rootpage' => 'דף הבסיס של היעד (לא חובה):',
 'import-upload-filename' => 'שם הקובץ:',
 'import-comment' => 'הערה:',
 'importtext' => 'נא לייצא את הקובץ מאתר המקור באמצעות ב[[Special:Export|כלי הייצוא]].
@@ -3004,6 +3005,9 @@ $1',
 'import-error-interwiki' => 'לא ניתן לייבא את הדף "$1" כיוון ששמו שמור לקישור חיצוני (בין־ויקי).',
 'import-error-special' => 'לא ניתן לייבא את הדף "$1" כיוון שהוא שייך למרחב שם מיוחד שלא יכול להכיל דפים.',
 'import-error-invalid' => 'לא ניתן לייבא את הדף "$1" כיוון ששמו אינו תקין.',
+'import-options-wrong' => '{{PLURAL:$2|אפשרות שגויה|אפשרויות שגויות}}: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'לדף הבסיס שניתן יש כותרת לא תקינה.',
+'import-rootpage-nosubpage' => 'מרחב השם "$1" של דף הבסיס אינו מאפשר דפי־משנה.',
 
 # Import log
 'importlogpage' => 'יומן ייבוא',
index 19cb70c..565c96b 100644 (file)
@@ -2075,6 +2075,12 @@ Možete suziti prikaz odabirući tip evidencije, suradničko ime ili stranicu u
 'allpagesprefix' => 'Stranice čiji naslov počinje s:',
 'allpagesbadtitle' => 'Zadana stranica nije valjana, ili je imala međuwiki predmetak. Možda sadrži jedan ili više znakova koji ne mogu biti uporabljeni u nazivu stranice.',
 'allpages-bad-ns' => '{{SITENAME}} nema imenski prostor "$1".',
+'allpages-hide-redirects' => 'Sakrij preusmjeravanja',
+
+# SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'Gledate inačicu ove stranice iz privremene memorije, koja može biti stara i do $1.',
+'cachedspecial-viewing-cached-ts' => 'Gledate inačicu ove stranice iz privremene memorije, koja možda nije potpuno aktualna.',
+'cachedspecial-refresh-now' => 'Pogledaj najnoviju.',
 
 # Special:Categories
 'categories' => 'Kategorije',
@@ -2286,6 +2292,8 @@ Sva vremena su prema poslužiteljevom vremenu.',
 'rollback' => 'Ukloni posljednju promjenu',
 'rollback_short' => 'Ukloni',
 'rollbacklink' => 'ukloni',
+'rollbacklinkcount' => 'ukloni $1 {{PLURAL:$1|uređivanje|uređivanja}}',
+'rollbacklinkcount-morethan' => 'ukloni više od $1 {{PLURAL:$1|uređivanje|uređivanja}}',
 'rollbackfailed' => 'Uklanjanje neuspješno',
 'cantrollback' => 'Ne mogu ukloniti posljednju promjenu, postoji samo jedna promjena.',
 'alreadyrolled' => 'Ne mogu ukloniti posljednju promjenu članka [[:$1]] koju je napravio  [[User:$2|$2]] ([[User talk:$2|Razgovor]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]); netko je već promijenio stranicu ili uklonio promjenu.
index fee41e2..6925ced 100644 (file)
@@ -2131,7 +2131,7 @@ Jeli chceš stronu pozdźišo ze swojich wobkedźbowankow wotstronić, klikń na
 'watchmethod-list' => 'Wobkedźbowanki za aktualnymi změnami přepruwować',
 'watchlistcontains' => 'Maš $1 {{PLURAL:$1|stronu|stronje|strony|stronow}} w swojich wobkedźbowankach.',
 'iteminvalidname' => 'Problem ze zapiskom „$1“, njepłaćiwe mjeno.',
-'wlnote' => "Deleka {{PLURAL:$1|je '''1''' změna|stej poslednjej '''$1''' změnje|su poslednje '''$1''' změny|je poslednich '''$1''' změnow}} za {{PLURAL:$2|poslednju hodźinu|poslednje '''$2''' hodźinje|poslednje '''$2''' hodźiny|poslednje '''$2''' hodźin}}, staw : $3, $4.",
+'wlnote' => "Deleka {{PLURAL:$1|je poslednja změna|stej poslednjej '''$1''' změnje|su poslednje '''$1''' změny|je poslednich '''$1''' změnow}} za {{PLURAL:$2|poslednju hodźinu|poslednje '''$2''' hodźinje|poslednje '''$2''' hodźiny|poslednje '''$2''' hodźin}}, staw : $3, $4.",
 'wlshowlast' => 'Poslednje $1 hodź. - $2 dnjow - $3 pokazać',
 'watchlist-options' => 'Opcije wobkedźbowankow',
 
@@ -2683,6 +2683,7 @@ W poslednim padźe móžeš tež wotkaz wužiwać, na př. „[[{{#Special:Expor
 'import-interwiki-templates' => 'Wšě předłohi zapřijeć',
 'import-interwiki-submit' => 'Importować',
 'import-interwiki-namespace' => 'Cilowy mjenowy rum:',
+'import-interwiki-rootpage' => 'Cilowa korjenjowa strona (opcionalna):',
 'import-upload-filename' => 'Datajowe mjeno:',
 'import-comment' => 'Přičina:',
 'importtext' => 'Prošu eksportuj dataju ze žórłoweho wikija z pomocu funkcije [[Special:Export|Strony eksportować]]. Składuj ju na swojim ličaku a nahraj ju tu.',
@@ -2714,6 +2715,9 @@ W poslednim padźe móžeš tež wotkaz wužiwać, na př. „[[{{#Special:Expor
 'import-error-interwiki' => 'Strona "$1" so njeimportuje, dokelž jeje mjeno je za eksterne wotkazowanje (interwiki) wuměnjene.',
 'import-error-special' => 'Strona "$1" so njeimportuje, dokelž k wosebitemu mjenowemu rumej słuša, kotryž strony njedowola.',
 'import-error-invalid' => 'Strona "$1" so njeimportuje, dokelž jeje mjeno je njepłaćiwe.',
+'import-options-wrong' => '{{PLURAL:$2|Wopačna opcija|Wopačnej opciji|Wopačne opcije|Wopačne opcije}}: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'Podata korjenjowa strona je njepłaćiwa.',
+'import-rootpage-nosubpage' => 'Mjenowy rum "$1" korjenjoweje strony njedowola podstrony.',
 
 # Import log
 'importlogpage' => 'Protokol importow',
index bd69a9d..55422e2 100644 (file)
@@ -2372,6 +2372,8 @@ A legutóbbi törlések listájához lásd a $2 lapot.',
 'rollback' => 'Szerkesztések visszaállítása',
 'rollback_short' => 'Visszaállítás',
 'rollbacklink' => 'visszaállítás',
+'rollbacklinkcount' => '$1 szerkesztés visszaállítása',
+'rollbacklinkcount-morethan' => 'több mint $1 szerkesztés visszaállítása',
 'rollbackfailed' => 'A visszaállítás nem sikerült',
 'cantrollback' => 'Nem lehet visszaállítani: az utolsó szerkesztést végző felhasználó az egyetlen, aki a lapot szerkesztette.',
 'alreadyrolled' => '[[:$1]] utolsó, [[User:$2|$2]] ([[User talk:$2|vita]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) általi szerkesztését nem lehet visszavonni:
index f253a3d..c55ccf4 100644 (file)
@@ -812,8 +812,8 @@ Se non sei stato tu a fare la richiesta, o se ti sei ricordato la password origi
 'passwordreset-emailelement' => 'Nome utente: $1
 Password temporanea: $2',
 'passwordreset-emailsent' => 'È stata inviata una e-mail di promemoria.',
-'passwordreset-emailsent-capture' => "E' stato inviato un e-mail promemoria, il contenuto è riportato di seguito.",
-'passwordreset-emailerror-capture' => "E' stata generata l'e-mail promemoria riportata di seguito. L'invio all'utente non è riuscito: $1",
+'passwordreset-emailsent-capture' => 'È stata inviata una e-mail di promemoria, il contenuto è riportato di seguito.',
+'passwordreset-emailerror-capture' => "È stata generata l'e-mail di promemoria riportata di seguito. L'invio all'utente non è riuscito: $1",
 
 # Special:ChangeEmail
 'changeemail' => "Modifica l'indirizzo e-mail",
@@ -858,7 +858,7 @@ Password temporanea: $2',
 'showdiff' => 'Mostra cambiamenti',
 'anoneditwarning' => "'''Attenzione:''' Accesso non effettuato. Nella cronologia della pagina verrà registrato l'indirizzo IP.",
 'anonpreviewwarning' => "''Non hai eseguito il login. Salvando il tuo indirizzo IP sarà registrato nella cronologia di questa voce.''",
-'missingsummary' => "'''Attenzione:''' non è stato specificato l'oggetto di questa modifica. Premendo di nuovo '''Salva la pagina''' la modifica verrà salvata con l'oggetto vuoto.",
+'missingsummary' => "'''Attenzione:''' non è stato specificato l'oggetto di questa modifica. Premendo di nuovo \"{{int:savearticle}}\" la modifica verrà salvata con l'oggetto vuoto.",
 'missingcommenttext' => 'Inserire un commento qui sotto.',
 'missingcommentheader' => "'''Attenzione:''' non è stata specificato l'oggetto/l'intestazione di questo commento. Premendo di nuovo \"{{int:savearticle}}\" la modifica verrà salvata senza intestazione.",
 'summary-preview' => "Anteprima dell'oggetto:",
@@ -935,7 +935,7 @@ L'ultimo elemento del registro dei blocchi è riportato di seguito per informazi
 'sitejspreview' => "Questa è solo un'anteprima per provare il JavaScript; le modifiche non sono ancora state salvate!'''",
 'userinvalidcssjstitle' => "'''Attenzione:'''  Non esiste alcuna skin con nome \"\$1\". Si noti che le pagine per i .css e .js personalizzati hanno l'iniziale del titolo minuscola, ad esempio {{ns:user}}:Esempio/vector.css e non {{ns:user}}:Esempio/Vector.css.",
 'updated' => '(Aggiornato)',
-'note' => "'''NOTA:'''",
+'note' => "'''Nota:'''",
 'previewnote' => "'''Ricorda che questa è solo un'anteprima.'''
 Le tue modifiche NON sono ancora state salvate!",
 'continue-editing' => 'Continua a modificare',
@@ -949,7 +949,7 @@ Se il problema persiste, si può tentare di [[Special:UserLogout|scollegarsi]] e
 
 '''Se questo è un legittimo tentativo di modifica, riprovare. Se il problema persiste, si può provare a [[Special:UserLogout|scollegarsi]] ed effettuare un nuovo accesso.'''",
 'token_suffix_mismatch' => "'''La modifica non è stata salvata perché il client ha mostrato di gestire in modo errato i caratteri di punteggiatura nel token associato alla stessa. Per evitare una possibile corruzione del testo della pagina, è stata rifiutata l'intera modifica. Questa situazione può verificarsi, talvolta, quando vengono usati alcuni servizi di proxy anonimi via web che presentano dei bug.'''",
-'edit_form_incomplete' => "' ' Alcune parti del modulo di modifica non hanno raggiunto il server; controllare che le modifiche siano intatte e riprovare. ' '",
+'edit_form_incomplete' => "'''Alcune parti del modulo di modifica non hanno raggiunto il server; controllare che le modifiche siano intatte e riprovare.'''",
 'editing' => 'Modifica di $1',
 'creating' => 'Stai creando $1',
 'editingsection' => 'Modifica di $1 (sezione)',
@@ -976,15 +976,16 @@ Inviando il testo dichiari inoltre, sotto tua responsabilità, che è stato scri
 '''Non inviare materiale protetto da copyright senza autorizzazione!'''",
 'longpageerror' => "'''Errore: il testo inviato è lungo {{PLURAL:$1|1|$1}} kilobyte, che è maggiore della dimensione massima consentita ({{PLURAL:$2|1|$2}} kilobyte).'''
 Il testo non può essere salvato.",
-'readonlywarning' => "'''ATTENZIONE: Il database è stato bloccato per manutenzione, è quindi impossibile salvare le modifiche in questo momento. Per non perderle, è possibile copiare quanto inserito finora nella casella di modifica, incollarlo in un programma di elaborazione testi e salvarlo in attesa dello sblocco del database.'''
+'readonlywarning' => "'''Attenzione: il database è stato bloccato per manutenzione, è quindi impossibile salvare le modifiche in questo momento.'''
+Per non perderle, è possibile copiare quanto inserito finora nella casella di modifica, incollarlo in un programma di elaborazione testi e salvarlo in attesa dello sblocco del database.
 
 L'amministratore che ha bloccato il database ha fornito questa spiegazione: $1",
-'protectedpagewarning' => "'''ATTENZIONE: Questa pagina è stata bloccata in modo che solo gli utenti con privilegi di amministratore possano modificarla.'''
+'protectedpagewarning' => "'''Attenzione: questa pagina è stata bloccata in modo che solo gli utenti con privilegi di amministratore possano modificarla.'''
 L'ultimo elemento del registro è riportato di seguito per informazione:",
 'semiprotectedpagewarning' => "'''Nota:''' Questa pagina è stata bloccata in modo che solo gli utenti registrati possano modificarla.
 L'ultimo elemento del registro è riportato di seguito per informazione:",
 'cascadeprotectedwarning' => "'''Attenzione:''' Questa pagina è stata bloccata in modo che solo gli utenti con privilegi di amministratore possano modificarla. Ciò avviene perché la pagina è inclusa {{PLURAL:\$1|nella pagina indicata di seguito, che è stata protetta|nelle pagine indicate di seguito, che sono state protette}} selezionando la protezione \"ricorsiva\":",
-'titleprotectedwarning' => "'''ATTENZIONE:  Questa pagina è stata bloccata in modo che siano necessari [[Special:ListGroupRights|diritti specifici]] per crearla.'''
+'titleprotectedwarning' => "'''Attenzione: questa pagina è stata bloccata in modo che siano necessari [[Special:ListGroupRights|diritti specifici]] per crearla.'''
 L'ultimo elemento del registro è riportato di seguito per informazione:",
 'templatesused' => '{{PLURAL:$1|Template utilizzato|Template utilizzati}} in questa pagina:',
 'templatesusedpreview' => '{{PLURAL:$1|Template utilizzato|Template utilizzati}} in questa anteprima:',
@@ -1165,7 +1166,8 @@ $1",
 'revdelete-only-restricted' => "Errore nel nascondere l'oggetto datato $1, $2: non è possibile nascondere gli oggetti alla vista degli amministratori senza selezionare almeno un'altra delle opzioni di rimozione.",
 'revdelete-reason-dropdown' => '*Motivazioni più comuni per la cancellazione
 ** Violazione di copyright
-** Informazioni personali inappropriate',
+** Informazioni personali inappropriate
+** Informazione potenzialmente diffamatoria',
 'revdelete-otherreason' => 'Altra motivazione o motivazione aggiuntiva:',
 'revdelete-reasonotherlist' => 'Altra motivazione',
 'revdelete-edit-reasonlist' => 'Modifica le motivazioni per la cancellazione',
@@ -1306,7 +1308,7 @@ I dettagli possono essere trovati nel [{{fullurl:{{#Special:Log}}/delete|page={{
 'datedefault' => 'Nessuna preferenza',
 'prefs-beta' => 'Funzionalità beta',
 'prefs-datetime' => 'Data e ora',
-'prefs-labs' => 'Funzionalità dei laboratori',
+'prefs-labs' => 'Funzionalità sperimentali',
 'prefs-user-pages' => 'Pagine utente',
 'prefs-personal' => 'Profilo utente',
 'prefs-rc' => 'Ultime modifiche',
@@ -2798,6 +2800,7 @@ Tutte le operazioni di importazione trans-wiki sono registrate nel [[Special:Log
 'import-interwiki-templates' => 'Includi tutti i template',
 'import-interwiki-submit' => 'Importa',
 'import-interwiki-namespace' => 'Namespace di destinazione:',
+'import-interwiki-rootpage' => 'Pagina principale di destinazione (opzionale):',
 'import-upload-filename' => 'Nome file:',
 'import-comment' => 'Oggetto:',
 'importtext' => 'Si prega di esportare il file dal sito wiki di origine con la [[Special:Export|funzione di esportazione]], salvarlo sul proprio disco e poi caricarlo qui.',
@@ -2829,6 +2832,9 @@ Tutte le operazioni di importazione trans-wiki sono registrate nel [[Special:Log
 'import-error-interwiki' => 'La pagina "$1" non viene importata perché il suo nome è riservato per il collegamento esterno (interwiki).',
 'import-error-special' => 'La pagina "$1" non viene importata perché appartiene a un namespace speciale che non permette pagine.',
 'import-error-invalid' => 'La pagina "$1" non viene importata perché il suo nome non è valido.',
+'import-options-wrong' => '{{PLURAL:$2|Opzione sbagliata|Opzioni sbagliate}}: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'La pagina principale fornita non è un titolo valido.',
+'import-rootpage-nosubpage' => 'Il namespace "$1" della pagina principale non permette di avere sottopagine.',
 
 # Import log
 'importlogpage' => 'Importazioni',
index abf57c0..bdbaf4c 100644 (file)
@@ -628,6 +628,8 @@ $1',
 'youhavenewmessages' => '$1があります($2)。',
 'newmessageslink' => '新着メッセージ',
 'newmessagesdifflink' => '最終更新の差分',
+'newmessageslinkplural' => '{{PLURAL:$1|新着メッセージ}}',
+'newmessagesdifflinkplural' => '最終更新の{{PLURAL:$1|差分}}',
 'youhavenewmessagesmulti' => '$1に新着メッセージがあります',
 'editsection' => '編集',
 'editold' => '編集',
@@ -1659,7 +1661,7 @@ $1 {{PLURAL:$1|文字}}以下である必要があります。',
 'right-editusercssjs' => '他の利用者のCSSとJavaScriptファイルを編集',
 'right-editusercss' => '他の利用者のCSSファイルを編集',
 'right-edituserjs' => '他の利用者のJavaScriptファイルを編集',
-'right-rollback' => 'ç\89¹å®\9aã\83\9aã\83¼ã\82¸ã\82\92æ\9c\80å¾\8cã\81«ç·¨é\9b\86ã\81\97ã\81\9få\88©ç\94¨è\80\85ã\81®ç·¨é\9b\86ã\81®即時巻き戻し',
+'right-rollback' => 'ç\89¹å®\9aã\83\9aã\83¼ã\82¸ã\82\92æ\9c\80å¾\8cã\81«ç·¨é\9b\86ã\81\97ã\81\9få\88©ç\94¨è\80\85ã\81®ç·¨é\9b\86ã\82\92即時巻き戻し',
 'right-markbotedits' => '巻き戻しをボットの編集として扱う',
 'right-noratelimit' => '速度制限を受けない',
 'right-import' => '他のウィキからのページ取り込み',
@@ -1721,7 +1723,7 @@ $1 {{PLURAL:$1|文字}}以下である必要があります。',
 'action-sendemail' => 'メールを送信',
 
 # Recent changes
-'nchanges' => '$1{{PLURAL:$1|回の変更}}',
+'nchanges' => '$1 {{PLURAL:$1|回の変更}}',
 'recentchanges' => '最近の更新',
 'recentchanges-legend' => '最近の更新のオプション',
 'recentchanges-summary' => 'このページでは、このウィキでの最近の更新を確認できます。',
@@ -2194,7 +2196,7 @@ contenttype/subtypeの形式で入力してください(例:<tt>image/jpeg</
 # Miscellaneous special pages
 'nbytes' => '$1バイト',
 'ncategories' => '$1カテゴリ',
-'nlinks' => '$1個のリンク',
+'nlinks' => '$1 {{PLURAL:$1|個のリンク}}',
 'nmembers' => '$1項目',
 'nrevisions' => '$1版',
 'nviews' => '$1回の閲覧',
@@ -2240,7 +2242,7 @@ contenttype/subtypeの形式で入力してください(例:<tt>image/jpeg</
 'listusers' => '利用者一覧',
 'listusers-editsonly' => '投稿記録のある利用者のみを表示',
 'listusers-creationsort' => '作成日順に並べ替え',
-'usereditcount' => '$1{{PLURAL:$1|回の編集}}',
+'usereditcount' => '$1 {{PLURAL:$1|回の編集}}',
 'usercreated' => '$1 $2 に{{GENDER:$3|作成}}',
 'newpages' => '新しいページ',
 'newpages-username' => '利用者名:',
@@ -2513,8 +2515,8 @@ $UNWATCHURL
 'rollback' => '編集を巻き戻し',
 'rollback_short' => '巻き戻し',
 'rollbacklink' => '巻き戻し',
-'rollbacklinkcount' => '$1個の{{PLURAL:$1|編集|編集}}を巻き戻し',
-'rollbacklinkcount-morethan' => '$1個以上の{{PLURAL:$1|編集|編集}}を巻き戻し',
+'rollbacklinkcount' => '$1版の{{PLURAL:$1|編集}}を巻き戻し',
+'rollbacklinkcount-morethan' => '$1版以上の{{PLURAL:$1|編集}}を巻き戻し',
 'rollbackfailed' => '巻き戻しに失敗しました',
 'cantrollback' => '編集を差し戻せません。
 最後の投稿者が、このページの唯一の作者です。',
@@ -3807,10 +3809,10 @@ Variants for Chinese language
 'confirmemail_loggedin' => 'メールアドレスは確認されました。',
 'confirmemail_error' => '確認情報を保存する際にエラーが発生しました。',
 'confirmemail_subject' => '{{SITENAME}} メールアドレスの確認',
-'confirmemail_body' => 'だれかが、IPアドレス$1から、
+'confirmemail_body' => '誰か(おそらくあなた)が、IPアドレス$1から、
 このメールアドレスで{{SITENAME}}のアカウント「$2」を登録しました。
 
\81\93ã\81®ã\82¢ã\82«ã\82¦ã\83³ã\83\88ã\81\8cæ\9c¬å½\93ã\81«è\87ªå\88\86ã\81®ã\82\82ã\81®ã\81§ã\81\82ã\82\8bã\81\8b確èª\8dã\81\97ã\81¦ã\80\81
+このアカウントが本当に自分のものか確認して、
 {{SITENAME}}のメール機能を有効にするには、以下のURLをブラウザーで開いてください:
 
 $3
index bbd7a2a..d55c254 100644 (file)
@@ -1029,7 +1029,8 @@ IP-мекенжайыңыз бұл беттің түзету тарихында
 'storedversion' => 'Сақталған нұсқасы',
 'nonunicodebrowser' => "'''ҚҰЛАҚТАНДЫРУ: Шолғышыңыз Unicode белгілеуіне үйлесімді емес, сондықтан латын емес әріптері бар беттерді өңдеу зіл болу мүмкін.
 Жұмыс істеуге ықтималдық беру үшін, төмендегі кірістіру орнында ASCII емес таңбалар оналтылық кодымен көрсетіледі'''.",
-'editingold' => '<div id="editingold" style="background: #FFBDBD; border: 1px solid #BB7979; color: #000000; margin: 2em 0 1em; padding: .5em 1em; vertical-align: middle; clear: both;"><center><strong>ҚҰЛАҚТАНДЫРУ: Осы беттің ертерек түзетуін өңдеп жатырсыз. Бұны сақтасаңыз, осы түзетуден кейінгі барлық өзгерістер [[Help:Қайтару|жойылады]].</strong></center></div>',
+'editingold' => "'''ҚҰЛАҚТАНДЫРУ: Осы беттің ертерек түзетуін өңдеп жатырсыз.'''
+Бұны сақтасаңыз, осы түзетуден кейінгі барлық өзгерістер жойылады.",
 'yourdiff' => 'Айырмалар',
 'copyrightwarning' => "Аңғартпа: {{SITENAME}} жобасына берілген барлық үлестер $2 (көбірек ақпарат үшін: $1) құжатына сай деп саналады.
 Егер жазуыңыздың еркін өңделуін және ақысыз көпшілікке таратуын қаламасаңыз, мында жарияламауыңыз жөн.<br />
index f3d7107..a48ed4e 100644 (file)
@@ -905,8 +905,8 @@ $2
 'passwordreset-emailelement' => '사용자 이름: $1
 임시 비밀번호: $2',
 'passwordreset-emailsent' => '비밀번호 찾기 이메일을 보냈습니다.',
-'passwordreset-emailsent-capture' => '비밀번호 찾기 이메일이 발송되었으며, 아래에 표시되어 있습니다.',
-'passwordreset-emailerror-capture' => '비밀번호 찾기 이메일이 만들어져 아래에 표시되었지만 발송하는 데에는 실패했습니다: $1',
+'passwordreset-emailsent-capture' => '비밀번호 찾기 이메일이 발송되었으며, 아래에 나타나 있습니다.',
+'passwordreset-emailerror-capture' => '비밀번호 찾기 이메일이 만들어져 아래에 나타났지만 발송하는 데에는 실패했습니다: $1',
 
 # Special:ChangeEmail
 'changeemail' => '이메일 주소 바꾸기',
@@ -927,7 +927,7 @@ $2
 'link_sample' => '링크 제목',
 'link_tip' => '내부 링크',
 'extlink_sample' => 'http://www.example.com 사이트 이름',
-'extlink_tip' => '외부 사이트 링크 (주소 앞에 http://가 있어야 합니다.)',
+'extlink_tip' => '바깥 링크 (주소 앞에 http://가 있어야 합니다.)',
 'headline_sample' => '제목',
 'headline_tip' => '2단계 문단 제목',
 'nowiki_sample' => '여기에 위키 문법을 사용하지 않을 글을 적어 주세요',
@@ -935,7 +935,7 @@ $2
 'image_tip' => '파일 넣기',
 'media_tip' => '파일 링크하기',
 'sig_tip' => '내 서명과 현재 시각',
-'hr_tip' => '가로(되도록 사용하지 말아 주세요)',
+'hr_tip' => '가로 줄 (되도록 사용하지 말아 주세요)',
 
 # Edit pages
 'summary' => '편집 요약:',
@@ -1009,11 +1009,11 @@ $1 또는 [[{{MediaWiki:Grouppage-sysop}}|다른 관리자]]에게 차단에 대
 IP 주소는 여러 사용자가 공유할 수 있습니다.
 자신과 관계없는 의견이 자신에게 남겨져 있어 불쾌하다고 생각하는 익명 사용자는 [[Special:UserLogin/signup|계정을 만들고]] [[Special:UserLogin|로그인 하여]] 나중에 다른 익명 사용자에게 줄 혼란을 줄일 수 있습니다.',
 'noarticletext' => '이 문서가 존재하지 않습니다.
-이 문서와 제목이 비슷한 문서가 있는지 [[Special:Search/{{PAGENAME}}|검색]]하거나,
+이 문서와 제목이 비슷한 문서가 있는지 [[Special:Search/{{PAGENAME}}|찾거나]],
 이 문서에 관련된 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 기록]을 확인하거나,
 문서를 직접 [{{fullurl:{{FULLPAGENAME}}|action=edit}} 편집]</span>할 수 있습니다.',
 'noarticletext-nopermission' => '이 문서가 존재하지 않습니다.
-이 문서와 제목이 비슷한 문서가 있는지 [[Special:Search/{{PAGENAME}}|검색]]하거나,
+이 문서와 제목이 비슷한 문서가 있는지 [[Special:Search/{{PAGENAME}}|찾거나]],
 이 문서에 관련된 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 기록]을 확인할 수 있습니다.</span>',
 'missing-revision' => '"{{PAGENAME}}"이라는 문서의 #$1판이 존재하지 않습니다.
 
@@ -1196,7 +1196,7 @@ $2개 보다 적게 써야 하지만 지금은 $1개를 쓰고 있습니다.",
 'history-feed-item-nocomment' => '$2에 대한 $1의 편집',
 'history-feed-empty' => '요청한 문서가 존재하지 않습니다.
 해당 문서가 삭제되었거나, 문서 이름이 바뀌었을 수 있습니다.
-[[Special:Search|검색 기능]]을 사용해 관련 문서를 찾아보세요.',
+[[Special:Search|찾기]]를 사용해 관련 문서를 찾아보세요.',
 
 # Revision deletion
 'rev-deleted-comment' => '(편집 요약 삭제됨)',
@@ -1350,7 +1350,7 @@ $1",
 'searchresults' => '찾기 결과',
 'searchresults-title' => '"$1"에 대한 찾기 결과',
 'searchresulttext' => '{{SITENAME}}의 찾기 기능에 대한 자세한 정보는 [[{{MediaWiki:Helppage}}|{{int:help}}]] 문서를 참고해주세요.',
-'searchsubtitle' => "'''[[:$1]]''' 문서를 찾고 있습니다. ([[Special:Prefixindex/$1|이름이 ‘$1’ 접두어로 시작하는 문서 목록]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|‘$1’ 문서를 가리키는 문서 목록]])",
+'searchsubtitle' => '\'\'\'[[:$1]]\'\'\' 문서를 찾고 있습니다. ([[Special:Prefixindex/$1|이름이 "$1" 접두어로 시작하는 문서 목록]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|"$1" 문서를 가리키는 문서 목록]])',
 'searchsubtitleinvalid' => "찾은 단어 '''$1'''",
 'toomanymatches' => '일치하는 결과가 너무 많습니다. 다른 검색어를 입력해주세요.',
 'titlematches' => '문서 제목 일치',
@@ -1458,11 +1458,11 @@ $1",
 'columns' => '열 수:',
 'searchresultshead' => '찾기',
 'resultsperpage' => '쪽마다 보이는 결과 수:',
-'stub-threshold' => '링크를 <a href="#" class="stub">토막글</a> 형식으로 표시할 문서 크기 (바이트 수):',
+'stub-threshold' => '링크를 <a href="#" class="stub">토막글</a> 형식으로 보여줄 문서 크기 (바이트 수):',
 'stub-threshold-disabled' => '비활성화됨',
-'recentchangesdays' => '최근 바뀜에 표시할 날짜 수:',
+'recentchangesdays' => '최근 바뀜에 보여줄 날짜 수:',
 'recentchangesdays-max' => '최대 $1일',
-'recentchangescount' => '기본으로 표시할 편집 수:',
+'recentchangescount' => '기본으로 보여줄 편집 수:',
 'prefs-help-recentchangescount' => '이 설정은 최근 바뀜, 문서 역사와 기록에 적용됩니다.',
 'prefs-help-watchlist-token' => '아래에 비밀 값을 넣으면 주시문서 목록에 대한 RSS 피드가 만들어집니다.
 비밀 값을 알고 있는 사람이라면 누구나 피드를 읽을 수 있으므로 안전한 값을 입력해주세요.
@@ -1506,7 +1506,7 @@ $1",
 'yourrealname' => '실명:',
 'yourlanguage' => '언어:',
 'yourvariant' => '언어 변종:',
-'prefs-help-variant' => '위키 내용을 표시할 때 사용할 언어 변종이나 철자 체계를 선택해주세요.',
+'prefs-help-variant' => '위키 내용을  때 사용할 언어 변종이나 철자 체계를 선택해주세요.',
 'yournick' => '새 서명:',
 'prefs-help-signature' => '토론 문서에 글을 쓴 후에는 마지막에 서명을 해야 합니다.  “<nowiki>~~~~</nowiki>” 기호를 추가하면 서명과 글 작성 시각이 자동으로 입력됩니다.',
 'badsig' => '서명이 잘못되었습니다.
@@ -1538,7 +1538,7 @@ HTML 태그를 확인하세요.',
 'prefs-advancedwatchlist' => '고급 설정',
 'prefs-displayrc' => '보이기 설정',
 'prefs-displaysearchoptions' => '보이기 설정',
-'prefs-displaywatchlist' => '표시 설정',
+'prefs-displaywatchlist' => '보이기 설정',
 'prefs-diffs' => '차이',
 
 # User preference: e-mail validation using jQuery
@@ -1679,7 +1679,7 @@ HTML 태그를 확인하세요.',
 'action-delete' => '이 문서 삭제하기',
 'action-deleterevision' => '이 판을 삭제',
 'action-deletedhistory' => '이 문서의 삭제된 기여의 역사 보기',
-'action-browsearchive' => '삭제된 문서 검색',
+'action-browsearchive' => '삭제된 문서 찾기',
 'action-undelete' => '이 문서를 복구하기',
 'action-suppressrevision' => '이 숨겨진 판을 검토하고 복구할',
 'action-suppressionlog' => '비공개 기록 보기',
@@ -2248,9 +2248,9 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 'log' => '기록 목록',
 'all-logs-page' => '모든 공개 기록',
 'alllogstext' => '{{SITENAME}}에서의 기록이 모두 나와 있습니다.
-기록 종류, 사용자 이름 (대소문자 구분), 문서 이름을 선택해서 볼 수 있습니다. 검색시에는 대소문자를 구별합니다.',
+기록 종류, 사용자 이름, 문서 이름을 선택해서 볼 수 있습니다. (대소문자를 구별합니다.)',
 'logempty' => '일치하는 항목이 없습니다.',
-'log-title-wildcard' => '다음 글로 시작하는 제목 검색',
+'log-title-wildcard' => '다음 글로 시작하는 제목 찾기',
 'showhideselectedlogentries' => '선택한 기록 항목 보이기/숨기기',
 
 # Special:AllPages
@@ -2292,13 +2292,13 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 'sp-deletedcontributions-contribs' => '기여',
 
 # Special:LinkSearch
-'linksearch' => '외부 링크 찾기',
-'linksearch-pat' => '검색 패턴:',
+'linksearch' => '바깥 링크 찾기',
+'linksearch-pat' => '찾기 패턴:',
 'linksearch-ns' => '이름공간:',
 'linksearch-ok' => '찾기',
 'linksearch-text' => '"*.wikipedia.org"와 같이 와일드카드를 사용할 수 있습니다.
 적어도 "*.org"와 같이 최상위 도메인을 입력해야 합니다.<br />
-지원하는 프로토콜 목록: <tt>$1</tt> (검색할 때 이것을 추가하지 마세요)',
+지원하는 프로토콜 목록: <tt>$1</tt> (찾을 때 이것을 추가하지 마세요)',
 'linksearch-line' => '$2에서 $1 을 링크하고 있습니다.',
 'linksearch-error' => '와일드카드는 주소의 처음 부분에만 사용될 수 있습니다.',
 
@@ -2374,7 +2374,6 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 # User Messenger
 'usermessage-summary' => '시스템 메시지 남기기',
 'usermessage-editor' => '시스템 메신저',
-'usermessage-template' => 'MediaWiki:UserMessage',
 
 # Watchlist
 'watchlist' => '주시문서 목록',
@@ -2402,7 +2401,7 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 'watchmethod-recent' => '주시된 문서를 확인하고자 최근 편집을 확인',
 'watchmethod-list' => '최근 편집을 확인하고자 주시된 문서 확인',
 'watchlistcontains' => '문서 $1개를 주시하고 있습니다.',
-'iteminvalidname' => '"$1" 항목에 문제가 발생했습니다. 이름이 잘못되었습니다...',
+'iteminvalidname' => "'$1' 항목에 문제가 발생했습니다. 이름이 잘못되었습니다...",
 'wlnote' => "다음은 최근 '''$2'''시간 동안 바뀐 문서 '''$1'''개 입니다. ($3 $4 기준)",
 'wlshowlast' => '최근 $1시간 $2일 또는 $3 동안에 바뀐 문서',
 'watchlist-options' => '주시문서 목록 설정',
@@ -2514,10 +2513,10 @@ $UNWATCHURL
 'protectlogpage' => '문서 보호 기록',
 'protectlogtext' => '아래의 목록은 문서 보호에 관한 바뀜 사항에 대한 기록입니다.
 현재 보호된 문서의 목록에 대해서는 [[Special:ProtectedPages|보호된 문서 목록]]을 참고하세요.',
-'protectedarticle' => '"[[$1]]" 문서를 보호함',
-'modifiedarticleprotection' => '"[[$1]]" 문서의 보호 설정을 바꿈',
-'unprotectedarticle' => '"[[$1]]" 문서를 보호 해제함',
-'movedarticleprotection' => '문서의 보호 설정을 "[[$2]]"에서 "[[$1]]"으로 옮김',
+'protectedarticle' => '사용자가 "[[$1]]" 문서를 보호함',
+'modifiedarticleprotection' => '사용자가 "[[$1]]" 문서의 보호 설정을 바꿈',
+'unprotectedarticle' => '사용자가 "[[$1]]" 문서를 보호 해제함',
+'movedarticleprotection' => '사용자가 문서의 보호 설정을 "[[$2]]"에서 "[[$1]]"으로 옮김',
 'protect-title' => '"$1" 보호하기',
 'protect-title-notallowed' => '"$1" 문서의 보호 수준 보기',
 'prot_1movedto2' => '[[$1]] 문서를 [[$2]] 문서로 이동함',
@@ -2667,7 +2666,6 @@ $1',
 'sp-contributions-username' => 'IP 주소 또는 사용자 이름:',
 'sp-contributions-toponly' => '최신판만 보기',
 'sp-contributions-submit' => '찾기',
-'sp-contributions-explain' => '',
 
 # What links here
 'whatlinkshere' => '여기를 가리키는 문서',
@@ -3000,6 +2998,7 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 'import-interwiki-templates' => '모든 틀을 포함하기',
 'import-interwiki-submit' => '가져오기',
 'import-interwiki-namespace' => '새 이름공간:',
+'import-interwiki-rootpage' => '대상 루트 문서 (선택 사항):',
 'import-upload-filename' => '파일 이름:',
 'import-comment' => '이유:',
 'importtext' => '원본 위키에서 [[Special:Export|내보내기]] 기능을 사용해 파일을 내려받으세요.
@@ -3033,9 +3032,12 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 'import-invalid-interwiki' => '해당 위키에서 문서를 가져올 수 없습니다.',
 'import-error-edit' => '현재 문서를 편집할 권한이 없기 때문에 "$1" 문서를 불러올 수 없습니다.',
 'import-error-create' => '현재 문서를 만들 권한이 없기 때문에 "$1" 문서를 불러올 수 없습니다.',
-'import-error-interwiki' => '문서 "$1"은 제목이 바깥 고리(인터위키)용으로 할당되어 있기 때문에 가져오지 않습니다.',
-'import-error-special' => '문서 "$1"은 특수 문서에 속해 있기 때문에 가져오지 않습니다.',
-'import-error-invalid' => '문서 "$1"은 제목이 잘못되었기 때문에 가져오지 않습니다.',
+'import-error-interwiki' => '"$1" 문서는 제목이 바깥 링크(인터위키)용으로 할당되어 있기 때문에 가져오지 않습니다.',
+'import-error-special' => '"$1" 문서는 특수 문서에 속해 있기 때문에 가져오지 않습니다.',
+'import-error-invalid' => '"$1" 문서는 제목이 잘못되었기 때문에 가져오지 않습니다.',
+'import-options-wrong' => '잘못된 {{PLURAL:$2|선택 사항}}: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => '주어진 루트 문서는 잘못된 제목입니다.',
+'import-rootpage-nosubpage' => '루트 문서의 "$1" 이름공간은 하위 문서를 허용하지 않습니다.',
 
 # Import log
 'importlogpage' => '가져오기 기록',
@@ -3179,7 +3181,7 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 # Spam protection
 'spamprotectiontitle' => '스팸 방지 필터',
 'spamprotectiontext' => '스팸 필터가 문서 저장을 막았습니다.
-외부 사이트로 연결하는 링크 중에 블랙리스트에 포함된 사이트가 있을 것입니다.',
+바깥 사이트로 연결하는 링크 중에 블랙리스트에 포함된 사이트가 있을 것입니다.',
 'spamprotectionmatch' => '문제가 되는 부분은 다음과 같습니다: $1',
 'spambot_username' => 'MediaWiki 스팸 제거',
 'spam_reverting' => '$1을 포함하지 않는 최신 버전으로 되돌림',
@@ -3483,7 +3485,7 @@ Variants for Chinese language
 'exif-licenseurl' => '저작권 라이선스의 URL',
 'exif-morepermissionsurl' => '다른 라이선스 정보',
 'exif-attributionurl' => '이 저작물을 이용할 때 링크할 주소',
-'exif-preferredattributionname' => '이 저작물을 이용할 때 표시할 저작자 이름',
+'exif-preferredattributionname' => '이 저작물을 이용할 때 보일 저작자 이름',
 'exif-pngfilecomment' => 'PNG 파일 주석',
 'exif-disclaimer' => '면책 조항',
 'exif-contentwarning' => '콘텐츠 경고',
@@ -3850,24 +3852,24 @@ $5
 
 # Friendlier slave lag warnings
 'lag-warn-normal' => '최근 $1초 안에 바뀐 문서는 이 목록에서 빠졌을 수 있습니다.',
-'lag-warn-high' => '데이터베이스 서버의 과도한 부하 때문에 최근 $1초 안에 바뀐 문서 목록은 표시되지 않을 수 있습니다.',
+'lag-warn-high' => '데이터베이스 서버의 과도한 부하 때문에 최근 $1초 안에 바뀐 문서 목록은 보여지지 않을 수 있습니다.',
 
 # Watchlist editor
 'watchlistedit-numitems' => '토론 문서를 제외하고 문서 $1개를 주시하고 있습니다.',
 'watchlistedit-noitems' => '주시문서 목록이 비어 있습니다.',
 'watchlistedit-normal-title' => '주시문서 목록 편집하기',
 'watchlistedit-normal-legend' => '주시문서 목록에서 문서 제거하기',
-'watchlistedit-normal-explain' => "주시문서 목록에 있는 문서의 제목이 아래에 나열되어 있습니다.
-주시문서 목록에서 제거하려는 문서가 있으면, 각 항목의 체크박스를 선택한 다음 '{{int:Watchlistedit-normal-submit}}'를 클릭해주세요.
-또는 [[Special:EditWatchlist/raw|목록을 직접 편집]]할 수도 있습니다.",
+'watchlistedit-normal-explain' => '주시문서 목록에 있는 문서의 제목이 아래에 나열되어 있습니다.
+주시문서 목록에서 제거하려는 문서가 있으면, 각 항목의 체크박스를 선택한 다음 "{{int:Watchlistedit-normal-submit}}"를 클릭해주세요.
+또는 [[Special:EditWatchlist/raw|목록을 직접 편집]]할 수도 있습니다.',
 'watchlistedit-normal-submit' => '항목 삭제',
 'watchlistedit-normal-done' => '주시문서 목록에서 다음 {{PLURAL:$1|항목}}을 주시하지 않습니다:',
 'watchlistedit-raw-title' => '주시문서 목록 직접 편집하기',
 'watchlistedit-raw-legend' => '주시문서 목록 직접 편집하기',
-'watchlistedit-raw-explain' => "주시문서 목록의 각 항목이 나와 있습니다. 필요한 항목을 직접 추가하거나 제거할 수 있습니다.
+'watchlistedit-raw-explain' => '주시문서 목록의 각 항목이 나와 있습니다. 필요한 항목을 직접 추가하거나 제거할 수 있습니다.
 각 줄마다 하나의 제목을 입력하세요.
-수정을 마쳤다면 '{{int:Watchlistedit-raw-submit}}'을 누르면 됩니다.
-또는 [[Special:EditWatchlist|일반적인 편집기]]를 쓸 수도 있습니다.",
+수정을 마쳤다면 "{{int:Watchlistedit-raw-submit}}"을 누르면 됩니다.
+또는 [[Special:EditWatchlist|일반적인 편집기]]를 쓸 수도 있습니다.',
 'watchlistedit-raw-titles' => '목록:',
 'watchlistedit-raw-submit' => '주시문서 목록 새로 고침',
 'watchlistedit-raw-done' => '주시문서 목록을 새로 고쳤습니다.',
@@ -4018,21 +4020,21 @@ $5
 'htmlform-selectorother-other' => '기타',
 
 # SQLite database support
-'sqlite-has-fts' => '$1 (본문 전체 검색)',
-'sqlite-no-fts' => '$1 (본문은 검색에서 제외)',
+'sqlite-has-fts' => '$1 (본문 전체 찾기)',
+'sqlite-no-fts' => '$1 (본문은 찾기에서 제외)',
 
 # New logging system
 'logentry-delete-delete' => '$1 사용자가 $3 문서를 삭제하였습니다.',
 'logentry-delete-restore' => '$1 사용자가 $3 문서를 복구하였습니다.',
-'logentry-delete-event' => '$1 사용자가 $3의 기록 $5개에 대해 표시 설정을 바꾸었습니다: $4',
+'logentry-delete-event' => '$1 사용자가 $3의 기록 $5개에 대해 보이기 설정을 바꾸었습니다: $4',
 'logentry-delete-revision' => '$1 사용자가 $3 문서의 {{PLURAL:$5|$5개 편집}}의 설정을 바꾸었습니다: $4',
-'logentry-delete-event-legacy' => '$1 사용자가 $3 문서 기록의 표시 설정을 바꾸었습니다.',
-'logentry-delete-revision-legacy' => '$1 사용자가 $3 문서 편집의 표시 설정을 바꾸었습니다.',
+'logentry-delete-event-legacy' => '$1 사용자가 $3 문서 기록의 보이기 설정을 바꾸었습니다.',
+'logentry-delete-revision-legacy' => '$1 사용자가 $3 문서 편집의 보이기 설정을 바꾸었습니다.',
 'logentry-suppress-delete' => '$1 사용자가 $3 문서를 숨겼습니다.',
-'logentry-suppress-event' => '$1 사용자가 비공개적으로 $3의 {{PLURAL:$5|기록 $5개}}에 대해 표시 설정을 바꾸었습니다: $4',
-'logentry-suppress-revision' => '$1 사용자가 비공개적으로 $3 문서의 {{PLURAL:$5|판 $5개}}에 대해 표시 설정을 바꾸었습니다: $4',
-'logentry-suppress-event-legacy' => '$1 사용자가 비공개적으로 $3의 항목에 대한 표시 설정을 바꾸었습니다.',
-'logentry-suppress-revision-legacy' => '$1 사용자가 비공개적으로 $3 문서의 특정 판에 대한 표시 설정을 바꾸었습니다.',
+'logentry-suppress-event' => '$1 사용자가 비공개적으로 $3의 {{PLURAL:$5|기록 $5개}}에 대해 보이기 설정을 바꾸었습니다: $4',
+'logentry-suppress-revision' => '$1 사용자가 비공개적으로 $3 문서의 {{PLURAL:$5|판 $5개}}에 대해 보이기 설정을 바꾸었습니다: $4',
+'logentry-suppress-event-legacy' => '$1 사용자가 비공개적으로 $3의 항목에 대한 보이기 설정을 바꾸었습니다.',
+'logentry-suppress-revision-legacy' => '$1 사용자가 비공개적으로 $3 문서의 특정 판에 대한 보이기 설정을 바꾸었습니다.',
 'revdelete-content-hid' => '내용 숨겨짐',
 'revdelete-summary-hid' => '편집 요약 숨겨짐',
 'revdelete-uname-hid' => '사용자 이름 숨겨짐',
@@ -4050,7 +4052,7 @@ $5
 'logentry-newusers-newusers' => '$1 사용자가 계정을 만들었습니다.',
 'logentry-newusers-create' => '$1 사용자가 계정을 만들었습니다.',
 'logentry-newusers-create2' => '$1 사용자가 $3 계정을 만들었습니다.',
-'logentry-newusers-autocreate' => '$1 계정을 자동적으로 만들었습니다.',
+'logentry-newusers-autocreate' => '$1 사용자 계정을 자동적으로 만들었습니다.',
 'newuserlog-byemail' => '이메일로 보낸 비밀번호',
 
 # Feedback
index 10d51b4..7a310d9 100644 (file)
@@ -439,11 +439,11 @@ Tavs lietotāja konts ir izveidots. Neaizmirsti, ka ir iespējams mainīt [[Spec
 'securelogin-stick-https' => 'Saglabāt HTTPS savienojumu pēc pieslēgšanās',
 'yourdomainname' => 'Tavs domēns',
 'externaldberror' => 'Notikusi vai nu ārējās autentifikācijas datubāzes kļūda, vai arī tev nav atļauts izmainīt savu ārējo kontu.',
-'login' => 'Ieiet',
+'login' => 'Pieslēgties',
 'nav-login-createaccount' => 'Izveidot jaunu lietotāju vai doties iekšā',
 'loginprompt' => 'Lai ieietu {{grammar:lokatīvs|{{SITENAME}}}}, tavam datoram ir jāpieņem sīkdatnes (<i>cookies</i>).',
 'userlogin' => 'Izveidot jaunu lietotāju vai doties iekšā',
-'userloginnocreate' => 'Ieiet',
+'userloginnocreate' => 'Pieslēgties',
 'logout' => 'Iziet',
 'userlogout' => 'Iziet',
 'notloggedin' => 'Neesi iegājis',
@@ -975,6 +975,7 @@ Pagaidām vari meklēt, izmantojot Google vai Yahoo.
 'prefs-beta' => 'Beta funkcijas',
 'prefs-datetime' => 'Datums un laiks',
 'prefs-labs' => 'Laboratorijas funkcijas',
+'prefs-user-pages' => 'Lietotāja lapas',
 'prefs-personal' => 'Lietotāja dati',
 'prefs-rc' => 'Pēdējās izmaiņas',
 'prefs-watchlist' => 'Uzraugāmie raksti',
@@ -1524,6 +1525,7 @@ Apraksts ir [$2 faila apraksta lapā], kas ir parādīta zemāk.',
 ** Viens tāds jau ir',
 'filedelete-edit-reasonlist' => 'Izmainīt dzēšanas iemeslus',
 'filedelete-maintenance' => 'Failu dzēšana un atjaunošana uzturēšanas laikā ir atslēgta.',
+'filedelete-maintenance-title' => 'Nevar izdzēst failu',
 
 # MIME search
 'mimesearch' => 'MIME meklēšana',
@@ -1656,7 +1658,7 @@ Katrā rindiņā ir saites uz pirmo un otro pāradresācijas lapu, kā arī pirm
 
 # Special:Log
 'specialloguserlabel' => 'Izpildītājs:',
-'speciallogtitlelabel' => 'Nosaukums:',
+'speciallogtitlelabel' => 'Mērķis (nosaukums vai lietotājs):',
 'log' => 'Reģistri',
 'all-logs-page' => 'Visi publiski pieejamie reģistri',
 'alllogstext' => 'Visi pieejamie {{grammar:akuzatīvs{{SITENAME}}}} reģistri.
@@ -2100,6 +2102,7 @@ Visus blokus var apskatīties [[Special:BlockList|IP bloku sarakstā]].',
 'blocklist-userblocks' => 'Paslēpt kontu bloķējumus',
 'blocklist-tempblocks' => 'Paslēpt pagaidu bloķējumus',
 'blocklist-addressblocks' => 'Paslēpt vienas IP adreses bloķējumus',
+'blocklist-target' => 'Mērķis',
 'blocklist-params' => 'Bloķēšanas parametri',
 'blocklist-reason' => 'Iemesls',
 'ipblocklist-submit' => 'Meklēt',
index cd2ba8f..53611df 100644 (file)
@@ -2983,6 +2983,7 @@ $1',
 'import-interwiki-templates' => 'Вклучи ги сите шаблони',
 'import-interwiki-submit' => 'Увези',
 'import-interwiki-namespace' => 'Целен именски простор:',
+'import-interwiki-rootpage' => 'Целна основна страница (незадолжително):',
 'import-upload-filename' => 'Податотека:',
 'import-comment' => 'Коментар:',
 'importtext' => 'Извезете ја податотеката од изворното вики користејќи ја [[Special:Export|алатката за извоз]].
@@ -3018,6 +3019,9 @@ $1',
 'import-error-interwiki' => 'Страницата „$1“ не е увезена бидејќи името е резервирано за надворешни врски (меѓувики).',
 'import-error-special' => 'Страницата „$1“ не е увезена бидејќи припаѓа на посебен именски простор што не дозволува страници.',
 'import-error-invalid' => 'Страницата „$1“ не е увезена бидејќи името ѝ е неважечко.',
+'import-options-wrong' => '{{PLURAL:$2|Погрешна можност|Погрешни можности}}: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'Укажаната основна страница е неважечки наслов.',
+'import-rootpage-nosubpage' => 'Именскиот простор „$1“ на основната страница не допушта потстраници.',
 
 # Import log
 'importlogpage' => 'Дневник на увезувања',
index d881a1e..6d435cc 100644 (file)
@@ -1003,7 +1003,7 @@ Tista' tmur lura u tagħmel modifiki ta' paġni eżistenti, inkella [[Special:Us
 
 Aċċerta ruħek jekk huwiex opportun li tkompli timmodifika din il-paġna.
 Ir-reġistru tat-tħassir u tal-mixi huwa pprovdut għal aktar konvenjenza:",
-'moveddeleted-notice' => 'Din il-paġna ġiet imħassra. Ir-reġistri tat-tħassir u tal-mixi għal din il-paġna huma provduti hawn taħt għal referenza.',
+'moveddeleted-notice' => 'Din il-paġna ġiet imħassra. Ir-reġistri tat-tħassir u tal-mixi għal din il-paġna huma provduti hawn taħt bħala referenza.',
 'log-fulllog' => 'Uri r-reġistru sħiħ',
 'edit-hook-aborted' => "Il-modifika ġiet abbandunata mill-''hook''.
 Ma ngħatat l-ebda spjegazzjoni.",
@@ -1965,7 +1965,7 @@ Kull filliera għandha ħolqa għall-ewwel u t-tieni riindirizz, kif ukoll fejn
 
 # Miscellaneous special pages
 'nbytes' => '{{PLURAL:$1|byte|$1  bytes}}',
-'ncategories' => '{{PLURAL:$1|kategorija|$1  kategoriji}}',
+'ncategories' => '{{PLURAL:$1|kategorija|$1 kategoriji}}',
 'nlinks' => '{{PLURAL:$1|link|$1 links}}',
 'nmembers' => '$1 {{PLURAL:$1|membru|membri}}',
 'nrevisions' => '{{PLURAL:$1|reviżjoni|$1 reviżjonijiet}}',
index 59ea23a..ea8f03e 100644 (file)
@@ -3059,6 +3059,7 @@ Een tijdelijke map is niet aanwezig.',
 'import-error-interwiki' => 'De pagina "$1" is niet geïmporteerd omdat deze naam is gereserveerd voor externe verwijzingen (interwiki).',
 'import-error-special' => 'Pagina "$1" is niet geïmporteerd omdat deze is geplaatst in een speciale naamruimte waar geen pagina\'s in geplaatst kunnen worden.',
 'import-error-invalid' => 'De pagina" "$1" is niet geïmporteerd omdat de naam ongeldig is.',
+'import-options-wrong' => 'Verkeerde {{PLURAL:$2|optie|opties}}: <nowiki>$1</nowiki>',
 
 # Import log
 'importlogpage' => 'Importlogboek',
index 587524c..13eb27b 100644 (file)
@@ -2778,7 +2778,7 @@ Vitja [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] og [//trans
 'tooltip-watchlistedit-raw-submit' => 'Oppdater overvakingslista',
 'tooltip-recreate' => 'Ved å trykkje på «Nyopprett» vert sida oppretta på nytt.',
 'tooltip-upload' => 'Start opplastinga',
-'tooltip-rollback' => '«Attenderull»-knappen attenderullar endringar på denne sida med eitt klikk til den førre utgåva av ein annan brukar',
+'tooltip-rollback' => '«Rulla attende»-knappen rullar med eitt klikk attende endringa(ne) på sida gjorde av den siste bidragsytaren',
 'tooltip-undo' => '«Gjer om» attenderullar endringar og opnar endringsvindauga med førehandsvising. Gjer at ein kan leggje til ei årsak samandragsboksen.',
 'tooltip-preferences-save' => 'Lagra innstillingar',
 'tooltip-summary' => 'Skriv inn eit kort samandrag',
index aa06cc9..a6482da 100644 (file)
@@ -16,6 +16,7 @@
  * @author Psubhashish
  * @author Sambiwiki
  * @author Shijualex
+ * @author Shisir 1945
  * @author Ævar Arnfjörð Bjarmason <avarab@gmail.com>
  */
 
@@ -3687,6 +3688,7 @@ MediaWiki ଉପଯୋଗୀ ହେବା ଲକ୍ଷରେ ବଣ୍ଟାଯ
 'version-software' => 'ଇନଷ୍ଟଲ ହୋଇଥିବା ସଫ୍ଟୱାର',
 'version-software-product' => 'ଉତ୍ପାଦ',
 'version-software-version' => 'ସଂସ୍କରଣ',
+'version-entrypoints-header-entrypoint' => 'ପ୍ରବେଶ ବିନ୍ଦୁ',
 'version-entrypoints-header-url' => 'ଇଉଆରଏଲ',
 
 # Special:FilePath
index 5bf9d62..08b1dc5 100644 (file)
@@ -2911,6 +2911,7 @@ Wszystkie operacje importu transwiki są odnotowywane w [[Special:Log/import|rej
 'import-interwiki-templates' => 'Załącz wszystkie szablony',
 'import-interwiki-submit' => 'Importuj',
 'import-interwiki-namespace' => 'Docelowa przestrzeń nazw',
+'import-interwiki-rootpage' => 'Docelowa strona główna (opcjonalna):',
 'import-upload-filename' => 'Nazwa pliku',
 'import-comment' => 'Komentarz:',
 'importtext' => 'Korzystając na źródłowej wiki z narzędzia [[Special:Export|eksportu]] wyeksportuj plik.
@@ -2944,6 +2945,9 @@ Brak katalogu dla plików tymczasowych.',
 'import-error-interwiki' => 'Strona „$1” nie została zaimportowana, ponieważ jej nazwa jest zarezerwowana do linków zewnętrznych (interwiki).',
 'import-error-special' => 'Strona „$1” nie została zaimportowana, ponieważ należy do specjalnej przestrzeni nazw, która nie zezwala na strony.',
 'import-error-invalid' => 'Strona „$1” nie została zaimportowana, ponieważ jej nazwa jest nieprawidłowa.',
+'import-options-wrong' => '{{PLURAL:$2|Niepoprawna opcja|Niepoprawne opcje}}: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'Wskazana strona główna jest niepoprawna.',
+'import-rootpage-nosubpage' => 'Przestrzeń nazw "$1" strony głównej nie dopuszcza stron podrzędnych.',
 
 # Import log
 'importlogpage' => 'Rejestr importu',
index 7f156b2..6179740 100644 (file)
@@ -306,9 +306,9 @@ $1",
 'newmessageslink' => 'mëssagi neuv',
 'newmessagesdifflink' => "A-i é chèich-còs ëd diferent da 'nt l'ùltima revision",
 'youhavenewmessagesfromusers' => "It l'has $1 da {{PLURAL:$3|n'autr utent|$3 utent}} ($2).",
-'youhavenewmessagesmanyusers' => "It l'has $1 da vaire utent ($2).",
+'youhavenewmessagesmanyusers' => "A l'ha $1 da vàire utent ($2).",
 'newmessageslinkplural' => '{{PLURAL:$1|un mëssagi neuv|$1 mëssagi neuv}}',
-'newmessagesdifflinkplural' => 'ùltim {{PLURAL:$1|cambiament|cambiament}}',
+'newmessagesdifflinkplural' => 'ùltime {{PLURAL:$1|modìfica|modìfiche}}',
 'youhavenewmessagesmulti' => "A l'ha dij neuv mëssagi an $1",
 'editsection' => 'modìfica',
 'editold' => 'modìfica',
@@ -629,7 +629,7 @@ Ciav a temp: $2',
 # Edit pages
 'summary' => 'Resumé:',
 'subject' => 'Sogèt:',
-'minoredit' => "Costa-sì a l'é na modìfica cita",
+'minoredit' => "Costa a l'é na modìfica cita",
 'watchthis' => "Ten sot euj st'artìcol-sì",
 'savearticle' => 'Salva sta pàgina',
 'preview' => 'Preuva',
@@ -2645,6 +2645,7 @@ Tute j'amportassion antra wiki diferente a resto marcà ant ël [[Special:Log/im
 'import-interwiki-templates' => 'Anserì tùit jë stamp',
 'import-interwiki-submit' => 'Amporté',
 'import-interwiki-namespace' => 'Spassi nominal ëd destinassion:',
+'import-interwiki-rootpage' => 'Pagina prinsipal ëd destinassion (opsional):',
 'import-upload-filename' => "Nòm ëd l'archivi:",
 'import-comment' => 'Oget:',
 'importtext' => "Për piasì, che as espòrta l'archivi da 'nt la sorgiss wiki ën dovrand l'[[Special:Export|utiss d'esportassion]]. 
@@ -2678,6 +2679,9 @@ Për piasì, ch'a preuva torna.",
 'import-error-interwiki' => "La pàgina «$1» a l'é pa amportà përchè sò nòm a l'é arzervà për na liura esterna (antërwiki).",
 'import-error-special' => "La pàgina «$1» a l'é pa amportà përchè a ponta a në spassi nominal ch'a përmët pa dle pàgine.",
 'import-error-invalid' => "La pàgina «$1» a l'é pa amportà përchè sò nòm a l'é pa bon.",
+'import-options-wrong' => '{{PLURAL:$2|Opsion|Opsion}} sbalià: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => "La pagina prinsipal dàita a l'é un tìtol pa bon.",
+'import-rootpage-nosubpage' => 'Lë spassi nominal "$1" ëd la pagina prinsipal a përmëtt pa dle sotpagine.',
 
 # Import log
 'importlogpage' => "Registr dj'amportassion",
@@ -2710,8 +2714,8 @@ Për piasì, ch'a preuva torna.",
 'tooltip-pt-anonlogin' => "Un a l'é nen obligà a rintré ant al sistema, ma se a lo fa a l'é mej",
 'tooltip-pt-logout' => 'Seurte da',
 'tooltip-ca-talk' => 'Discussion ansima a sta pàgina ëd contnù.',
-'tooltip-ca-edit' => 'Modifiché sta pàgina-sì. Për piasì, che as fasa na preuva anans che salvé .',
-'tooltip-ca-addsection' => 'Ancamin-a na neuva session',
+'tooltip-ca-edit' => 'A peul modifiché sa pàgina-sì. Për piasì, che as fasa na preuva anans che salvé.',
+'tooltip-ca-addsection' => 'Ancaminé na neuva session',
 'tooltip-ca-viewsource' => 'Sta pàgina-sì a l',
 'tooltip-ca-history' => 'Veje version dla pàgina.',
 'tooltip-ca-protect' => 'Për protege sta pàgina-sì.',
index 461ea1b..ef79c09 100644 (file)
  * @author Seb35
  * @author Sherbrooke
  * @author Shirayuki
+ * @author Shisir 1945
  * @author Shushruth
  * @author Siddhartha Ghai
  * @author Siebrand
@@ -2809,11 +2810,9 @@ This message was something like "unlock move protection" in the past.',
 <tt><nowiki>* Groupname</nowiki></tt> - defines a new group<br />
 <tt><nowiki>** Reason</nowiki></tt> - defines a reason in this group',
 'protect-edit-reasonlist' => 'Shown beneath the page protection form on the right side. It is a link to [[MediaWiki:Protect-dropdown]]. See also {{msg|Delete-edit-reasonlist}} and {{msg|Ipb-edit-dropdown}}.',
-'protect-expiry-options' => "* Description: Options for the duration of the page protection.
-* <font color=\"red\">Be careful:</font> '''1 translation:1 english''', so the first part is the translation and the second part should stay in English.
-* Example: See e.g. [[MediaWiki:Protect-expiry-options/nl]] if you still don't know how to do it.
+'protect-expiry-options' => "{{Identical|Infinite}}{{doc-important|Be careful: '''1 translation:1 english''', so the first part is the translation and the second part should stay in English.}}
 
-{{Identical|Infinite}}",
+Options for the duration of the page protection. Example: See e.g. [[MediaWiki:Protect-expiry-options/nl]] if you still don't know how to do it.",
 'restriction-type' => 'Used on [[Special:ProtectedPages]]. The text next to a drop-down box. See [[mw:Manual:Administrators|MediaWiki Manual]] for more information on protection.',
 'restriction-level' => 'Used on [[Special:ProtectedPages]] and [[Special:ProtectedTitles]]. The text next to a drop-down box. See the [//www.mediawiki.org/wiki/Project:Protected_titles help page on Mediawiki] and on [http://meta.wikimedia.org/wiki/Protect Meta] for more information.',
 'minimum-size' => 'Used in [[Special:Protectedpages]] as a pair of radio buttons, with {{msg-mw|Maximum-size}}. There is an input box to specify the minimum bites of the projected pages listed.',
@@ -2997,11 +2996,9 @@ Example line:
 'ipbenableautoblock' => '{{Identical|Automatically block ...}}',
 'ipbsubmit' => '{{Identical|Block this user}}',
 'ipbother' => '{{Identical|Other time}}',
-'ipboptions' => "* Description: Options for the duration of the block.
-* <font color=\"red\">Be careful:</font> '''1 translation:1 english''', so the first part is the translation and the second part should stay in English.
-* Example: See e.g. [[MediaWiki:Ipboptions/nl]] if you still don't know how to do it.
+'ipboptions' => "{{Identical|Infinite}}{{doc-important|Be careful: '''1 translation:1 english''', so the first part is the translation and the second part should stay in English.}}
 
-{{Identical|Infinite}}",
+Options for the duration of the block. Example: See e.g. [[MediaWiki:Ipboptions/nl]] if you still don't know how to do it.",
 'ipbotheroption' => '{{Identical|Other}}',
 'ipbotherreason' => '{{Identical|Other/additional reason}}',
 'ipbhidename' => 'This is the label for a checkbox in the user block form on [[Special:Block]].',
@@ -3232,6 +3229,7 @@ Tooltip shown when hovering over a little sign of a thumb image, to go to the im
 'import' => 'The title of the special page [[Special:Import]];',
 'import-interwiki-history' => 'This is an option on [[Special:Import]]. Usually, when unchecked, only the first version of a page is imported. When you check the option, all versions are imported. This is important often to check for licensing reasons.',
 'import-interwiki-submit' => '{{Identical|Import}}',
+'import-interwiki-rootpage' => 'Used on [[Special:Import]] as label',
 'import-upload-filename' => 'Used on [[Special:Import]] as label for upload of an XML file containing the pages to import.',
 'xml-error-string' => ':$1: Some kind of message, perhaps name of the error?
 :$2: line number
@@ -3252,6 +3250,9 @@ See also:
 * $1 is a page name.
 See also:
 * {{msg-mw|import-error-edit}}',
+'import-options-wrong' => 'Used on [[Special:Import]], when one of the options has an error.',
+'import-rootpage-invalid' => 'Used on [[Special:Import]], when the root page is invalid.',
+'import-rootpage-nosubpage' => 'Used on [[Special:Import]], when the import namespace does not support subpages.',
 
 # Import log
 'importlogpage' => '{{doc-logpage}}',
@@ -4556,8 +4557,7 @@ This is being used in [[Special:Version]], preceeding the subversion revision nu
 'version-software-product' => 'Shown in [[Special:Version]]',
 'version-software-version' => '{{Identical|Version}}',
 'version-entrypoints' => 'Header on [[Special:Version]] above a table that lists the URLs of various entry points in this MediaWiki installation. Entry points are the "places" where the wiki\'s content and information can be accessed in various ways, for instance the standard index.php which shows normal pages, histories etc.',
-'version-entrypoints-header-entrypoint' => 'Header for the first column in the entry points table on [[Special:Version]].
-See also {{msg-mw|Version-entrypoints}}',
+'version-entrypoints-header-entrypoint' => 'ପ୍ରବେଶ ବିନ୍ଦୁ',
 'version-entrypoints-header-url' => 'Header for the second column in the entry points table on [[Special:Version]].',
 'version-entrypoints-articlepath' => 'A short description of the article path entry point. Links to the mediawiki.org documentation page for $wgArticlePath.',
 'version-entrypoints-scriptpath' => 'A short description of the script path entry point. Links to the mediawiki.org documentation page for $wgScriptPath.',
@@ -4826,9 +4826,4 @@ $4 is the gender of the target user.',
 'api-error-uploaddisabled' => 'API error message that can be used for client side localisation of API errors.',
 'api-error-verification-error' => 'The word "extension" refers to the part behind the last dot in a file name, that by convention gives a hint about the kind of data format which a files contents are in.',
 
-# Unknown messages
-'import-interwiki-rootpage' => 'Used on [[Special:Import]] as label',
-'import-options-wrong' => 'Used on [[Special:Import]], when one of the options has an error.',
-'import-rootpage-invalid' => 'Used on [[Special:Import]], when the root page is invalid.',
-'import-rootpage-nosubpage' => 'Used on [[Special:Import]], when the import namespace does not support subpages.',
 );
index 393eac7..20dacfd 100644 (file)
@@ -2916,6 +2916,7 @@ Vă rugăm să vizitați [//www.mediawiki.org/wiki/Localisation MediaWiki Locali
 'import-interwiki-templates' => 'Includeți toate formatele',
 'import-interwiki-submit' => 'Importă',
 'import-interwiki-namespace' => 'Transferă către spațiul de nume:',
+'import-interwiki-rootpage' => 'Pagina rădăcină de destinație (opțional):',
 'import-upload-filename' => 'Nume fișier:',
 'import-comment' => 'Comentariu:',
 'importtext' => 'Vă rugăm să exportați fișierul din wikiul sursă folosind [[Special:Export|utilitarul de exportare]].
@@ -2951,6 +2952,9 @@ Un dosar temporar lipsește.',
 'import-error-interwiki' => 'Pagina „$1” nu poate fi importată deoarece numele acesteia este rezervat pentru legături externe (interwiki).',
 'import-error-special' => 'Pagina „$1” nu poate fi importată deoarece aparține unui spațiu de nume special care nu admite pagini.',
 'import-error-invalid' => 'Pagina „$1” nu poate fi importată deoarece numele acesteia este invalid.',
+'import-options-wrong' => '{{PLURAL:$2|Opțiune eronată|Opțiuni eronate}}: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'Pagina rădăcină furnizată este un titlu nevalid.',
+'import-rootpage-nosubpage' => 'Spațiul de nume „$1” al paginii rădăcină nu permite subpagini.',
 
 # Import log
 'importlogpage' => 'Log import',
index 66522a0..eabb1c1 100644 (file)
@@ -658,6 +658,10 @@ $1',
 'youhavenewmessages' => 'Вы получили $1 ($2).',
 'newmessageslink' => 'новые сообщения',
 'newmessagesdifflink' => 'последнее изменение',
+'youhavenewmessagesfromusers' => 'Вы получили $1 от {{PLURAL:$3|$3 участника|$3 участников|$3 участников}} ($2).',
+'youhavenewmessagesmanyusers' => 'Вы получили $1 от множества пользователей ($2).',
+'newmessageslinkplural' => '{{PLURAL:$1|новое сообщение|новые сообщения}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|последнее изменение|последние изменения}}',
 'youhavenewmessagesmulti' => 'Вы получили новые сообщения на $1',
 'editsection' => 'править',
 'editold' => 'править',
@@ -1064,6 +1068,10 @@ $2
 'noarticletext-nopermission' => 'В настоящее время на этой странице нет текста.
 Вы можете [[Special:Search/{{PAGENAME}}|найти упоминание данного названия]] в других статьях,
 или <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} найти соответствующие записи журналов].</span>',
+'missing-revision' => 'Версия $1 страницы «{{PAGENAME}}» не существует.
+
+Это обычно бывает, если последовать по устаревшей ссылке на страницу, которая была удалена.
+Подробности могут быть в [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} журнале удалений].',
 'userpage-userdoesnotexist' => 'Учётной записи «<nowiki>$1</nowiki>» не существует. Убедитесь, что вы действительно желаете создать или изменить эту страницу.',
 'userpage-userdoesnotexist-view' => 'Не зарегистрировано учётной записи «$1».',
 'blocked-notice-logextract' => 'Этот участник в данный момент заблокирован.
@@ -1192,6 +1200,7 @@ $2
 'expansion-depth-exceeded-warning' => 'На странице превышен предел вложенности',
 'parser-unstrip-loop-warning' => 'Обнаружен незакрытый pre',
 'parser-unstrip-recursion-limit' => 'Превышен предел рекурсии ($1)',
+'converter-manual-rule-error' => 'Ошибка в ручном правиле преобразования языка',
 
 # "Undo" feature
 'undo-success' => 'Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.',
@@ -1377,6 +1386,10 @@ $1",
 'editundo' => 'отменить',
 'diff-multi' => '({{PLURAL:$1|не показана $1 промежуточная версия|не показаны $1 промежуточные версии|не показаны $1 промежуточных версий}} {{PLURAL:$2|$2 участника|$2 участников}})',
 'diff-multi-manyusers' => '(не {{PLURAL:$1|показана $1 промежуточная версия|показаны $1 промежуточные версии|показаны $1 промежуточных версий}}, сделанные более чем $2 {{PLURAL:$2|участником|участниками}})',
+'difference-missing-revision' => '{{PLURAL:$2|$2 версия|$2 версии|$2 версий}} для этого сравнения ($1) {{PLURAL:$2|не обнаружена|не обнаружены}}.
+
+Это обычно бывает, если последовать по устаревшей ссылке на страницу, которая была удалена.
+Подробности могут быть в [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} журнале удалений].',
 
 # Search results
 'searchresults' => 'Результаты поиска',
@@ -2996,6 +3009,7 @@ $1',
 'import-interwiki-templates' => 'Включить все шаблоны',
 'import-interwiki-submit' => 'Импортировать',
 'import-interwiki-namespace' => 'Целевое пространство имён:',
+'import-interwiki-rootpage' => 'Корневая страница (необязательно):',
 'import-upload-filename' => 'Имя файла:',
 'import-comment' => 'Примечание:',
 'importtext' => 'Пожалуйста, экспортируйте страницу из исходной вики, используя [[Special:Export|соответствующий инструмент]]. Сохраните файл на диск, а затем загрузите его сюда.',
@@ -3027,6 +3041,9 @@ $1',
 'import-error-interwiki' => 'Страница «$1» не была импортирована, так как её название зарезервировано для внешних ссылок (интервики).',
 'import-error-special' => 'Страница «$1» не была импортирована, так как она относится к особому пространству имён, не позволяющему создавать страницы.',
 'import-error-invalid' => 'Страница «$1» не была импортирована из-за недопустимого названия.',
+'import-options-wrong' => '{{PLURAL:$2|Неверная опция|Неверные опции}}: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'Указанное название корневой страницы некорректно.',
+'import-rootpage-nosubpage' => 'В пространстве имён указанной корневой страницы «$1» подстраницы запрещены.',
 
 # Import log
 'importlogpage' => 'Журнал импорта',
@@ -4144,7 +4161,7 @@ MediaWiki распространяется в надежде, что она бу
 'api-error-file-too-large' => 'Отправленный вами файл слишком велик.',
 'api-error-filename-tooshort' => 'Слишком короткое имя файла.',
 'api-error-filetype-banned' => 'Этот тип файлов запрещён.',
-'api-error-filetype-banned-type' => '$1 â\80\94 {{PLURAL:$4|запÑ\80еÑ\89Ñ\91ннÑ\8bй Ñ\82ип Ñ\84айла|запÑ\80еÑ\89Ñ\91ннÑ\8bе Ñ\82ипÑ\8b Ñ\84айлов}}. {{PLURAL:$3|РазÑ\80еÑ\88Ñ\91ннÑ\8bм Ñ\82ипом Ñ\84айла Ñ\8fвлÑ\8fеÑ\82Ñ\81Ñ\8f|Разрешённые типы файлов:}} $2.',
+'api-error-filetype-banned-type' => '$1 â\80\94 {{PLURAL:$4|запÑ\80еÑ\89Ñ\91ннÑ\8bй Ñ\82ип Ñ\84айла|запÑ\80еÑ\89Ñ\91ннÑ\8bе Ñ\82ипÑ\8b Ñ\84айлов}}. {{PLURAL:$3|РазÑ\80еÑ\88Ñ\91ннÑ\8bй Ñ\82ип Ñ\84айлов â\80\94|Разрешённые типы файлов:}} $2.',
 'api-error-filetype-missing' => 'У этого файла отсутствует расширение.',
 'api-error-hookaborted' => 'Изменение, которые вы пытались сделать, прервано обработчиком расширения.',
 'api-error-http' => 'Внутренняя ошибка: не удаётся подключиться к серверу.',
index 8e01121..974755a 100644 (file)
@@ -2654,6 +2654,32 @@ $2 इति प्रकारस्य अवरोधं कर्तुं 
 # Move page
 'move-page' => ' $1 चालयतु ।',
 'move-page-legend' => 'पृष्ठं रक्ष्यताम्',
+'movepagetext' => "अधोतत्तं प्रपत्रमुपयुज्य  पुटस्य पुनर्नामकरणं करिष्यति । अस्य पूर्णेतिहासः नूतनेन नाम्ना सह गच्छति । 
+नूतनशीर्षकस्य प्राचीनशीर्षकं पुनर्निदिष्टं  भवति । 
+भवान् पुनर्निदेशान् उन्नतीकरोतु यत् स्वयं मूलशीर्षकं निदेशति । 
+यदि भवान् एवं कर्तुं नैव शक्नोति तर्हि  [[Special:DoubleRedirects|द्विगुणम्]]पुनर्दिदेशाः[[Special:BrokenRedirects|भग्नपुनर्निदेशाः]] एतदर्थम् अवश्यं परिशीलयतु । 
+एतत् भवतः दायित्वं यत् अनुबन्धाः सुनिश्चितं स्थानं नयेयुः ।
+यदि नूतनशीर्षकस्य लेखः पूर्वमेवास्ति तर्हि स्थानान्तरणं न भविष्यति । नूतनशीर्षकयुक्तलेखः रिक्तमस्ति अथवा कुत्रचित् अनुप्रेषणं करोति अपि च अनेन सह प्राचीनेतिहासः नास्ति चेत् स्थानान्तरणं न सम्भविष्यति ।
+अर्थात् यदि भवता दोषः संवृत्तः चेत् भवान् पुनः प्राचीननाम्ना एतत्पुटं स्थानान्तरणं कर्तुं शक्नोति । अपि च किञ्चिदपि वर्तमानपुटस्य स्थाने एतत् स्थानान्तरणं कर्तुं नैव शक्नोति ।
+पूर्वसूचना : यदि पुटं प्रसिद्धं तर्हि तस्य एतत् बृहत् अथवा अकस्मात् परिवर्तनं भवितुमर्हति ।
+अनुवर्तनात् पूर्वम् अस्य परिणामं सम्यक् चिन्तयतु ।
+
+'''सूचना'''
+स्थानान्तरकरणेन कस्मिंश्चित् महालेखे अनपेक्षितं परिवर्तनं सम्भवेत् ।
+अतः भवति निवेदनम् अस्ति यत् भवान् पूवमेव परिणामं चित्नयतु ।",
+'movepagetext-noredirectfixer' => "अधोतत्तं प्रपत्रमुपयुज्य  पुटस्य पुनर्नामकरणं करिष्यति । अस्य पूर्णेतिहासः नूतनेन नाम्ना सह गच्छति । 
+नूतनशीर्षकस्य प्राचीनशीर्षकं पुनर्निदिष्टं  भवति । 
+भवान् पुनर्निदेशान् उन्नतीकरोतु यत् स्वयं मूलशीर्षकं निदेशति । 
+यदि भवान् एवं कर्तुं नैव शक्नोति तर्हि  [[Special:DoubleRedirects|द्विगुणम्]]पुनर्दिदेशाः[[Special:BrokenRedirects|भग्नपुनर्निदेशाः]] एतदर्थम् अवश्यं परिशीलयतु । 
+एतत् भवतः दायित्वं यत् अनुबन्धाः सुनिश्चितं स्थानं नयेयुः ।
+यदि नूतनशीर्षकस्य लेखः पूर्वमेवास्ति तर्हि स्थानान्तरणं न भविष्यति । नूतनशीर्षकयुक्तलेखः रिक्तमस्ति अथवा कुत्रचित् अनुप्रेषणं करोति अपि च अनेन सह प्राचीनेतिहासः नास्ति चेत् स्थानान्तरणं न सम्भविष्यति ।
+अर्थात् यदि भवता दोषः संवृत्तः चेत् भवान् पुनः प्राचीननाम्ना एतत्पुटं स्थानान्तरणं कर्तुं शक्नोति । अपि च किञ्चिदपि वर्तमानपुटस्य स्थाने एतत् स्थानान्तरणं कर्तुं नैव शक्नोति ।
+पूर्वसूचना : यदि पुटं प्रसिद्धं तर्हि तस्य एतत् बृहत् अथवा अकस्मात् परिवर्तनं भवितुमर्हति ।
+अनुवर्तनात् पूर्वम् अस्य परिणामं सम्यक् चिन्तयतु ।
+
+'''सूचना'''
+स्थानान्तरकरणेन कस्मिंश्चित् महालेखे अनपेक्षितं परिवर्तनं सम्भवेत् ।
+अतः भवति निवेदनम् अस्ति यत् भवान् पूवमेव परिणामं चित्नयतु ।",
 'movepagetalktext' => 'सम्बद्धसम्भाषणपुटानि अनेन सह स्थानान्तरितानि भवन्ति अन्यथा  
 * भवान् पुटं अन्यस्थानान्तरं कुर्वन् अस्ति । 
 * अस्मिन् नाम्नि सम्भाषणपुटं पूर्वनिर्मितमस्ति अस्थवा  
@@ -2719,6 +2745,10 @@ $2 इति प्रकारस्य अवरोधं कर्तुं 
 
 # Export
 'export' => 'पृष्ठानां निर्यातं करोतु',
+'exporttext' => 'विशेष पुटस्य पाठम् अथवा सम्पादनेतिहासं निर्हर्तुं शक्नोति । अथवा पुटसमूहम् उपोतं कर्तुमपि शक्नोति ।
+एतत् [[Special:Import|आयातपुटं]] अस्य साहाय्येन मीडियाविक्याः प्रयोगं कृत्वा अन्यविकीतः आयातं कर्तुं शक्नोति ।
+पुटानि नर्हर्तुम् अधो दत्तपाठमञ्जूषायां शीर्शकं लिखतु । एकस्य शीर्षकस्य एका पङ्क्तिः । अपि च वर्तमानावृत्त्या सह प्राचीनावृत्तिमपि इच्छति वा नेति अथवा गतसम्पादनस्य विषयज्ञानेन सह केवलं वर्नमानावृत्तिम् इच्छाति । 
+पश्चात् स्थित्यर्थे भवान् कञ्चित् अनुबन्धं प्रयोक्तुमर्हति । यथा"[[{{MediaWiki:Mainpage}}]]"पुटार्थम् [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]]।',
 'exportall' => 'सर्वपुटानि निर्यातानि करोतु ।',
 'exportcuronly' => 'सद्यः पुनरावृत्तिं केवलं सङ्गृह्णातु  समूर्णम् इतिहासं न ।',
 'exportnohistory' => 'सुचना : अनुष्टानस्य कारणेन पुटनिर्यातस्य सम्पूर्णेतिहासः एतत्पुटाद्वारा निष्क्रियाः  ।',
@@ -2773,6 +2803,7 @@ $2 इति प्रकारस्य अवरोधं कर्तुं 
 'import-interwiki-templates' => 'प्राकृतीः अनर्भावयतु ।',
 'import-interwiki-submit' => 'आयातं करोतु ।',
 'import-interwiki-namespace' => 'लक्षितनामस्थानानि ।',
+'import-interwiki-rootpage' => 'लक्षितमूलपुटम् । (ऐच्छिकम्)',
 'import-upload-filename' => 'सञ्चिकानाम',
 'import-comment' => 'टिप्पणी:',
 'importtext' => '[[Special:Export|export utility]] एतेनानुबन्धेन स्रोतविकितः सञ्चिकानां निर्यातं करोतु । भवदीयसङ्गणके सुरक्ष्य अत्र उत्तारयतु ।',
@@ -2806,6 +2837,9 @@ $2 इति प्रकारस्य अवरोधं कर्तुं 
 'import-error-interwiki' => '"$1" पुटम् आयातं न यतः अस्य नाम बाह्यानुबन्धार्थं सुरक्षितम् । (अन्तर्विकि)',
 'import-error-special' => '"$1" पुटम् आयातं नैव यतः एतत् विशेषनामस्थानेन सम्बद्धं यत् अन्यपुटानि नानुमन्यते ।',
 'import-error-invalid' => '"$1" पुटं न आयातं यतः अस्य नाम अमान्यम् ।',
+'import-options-wrong' => 'असमीचीनः {{PLURAL:$2|विकल्पः|विकल्पाः}}: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'दत्तमूलपुटम् अमान्यशीर्षकयुक्तम् ।',
+'import-rootpage-nosubpage' => 'मूलपुटस्य "$1" इति नामस्थाने उपपुटानि नानुमतानि ।',
 
 # Import log
 'importlogpage' => 'आयातसूचिका ।',
@@ -3233,24 +3267,205 @@ $2 इति प्रकारस्य अवरोधं कर्तुं 
 'exif-unknowndate' => 'अज्ञातदिनाङ्कः ।',
 
 'exif-orientation-1' => 'सामान्य',
+'exif-orientation-2' => 'तिर्यक् परिवर्तितम् ।',
+'exif-orientation-3' => '१८०° प्ररिभ्रमितम् ।',
+'exif-orientation-4' => 'लम्भतया परिवर्तितम् ।',
+'exif-orientation-5' => 'CCW ९०° परिभ्रमितम् । अपि च लम्बतया परिवर्तितम् ।',
+'exif-orientation-6' => 'CCW ९०° परिभ्रमितम् ।',
+'exif-orientation-7' => 'CCW ९०° परिभ्रमितम् । अपि च लम्बतया परिवर्तितम् ।',
+'exif-orientation-8' => 'CCW ९०° परिभ्रमितम् ।',
+
+'exif-planarconfiguration-1' => 'विशालं प्रारूपम् ।',
+'exif-planarconfiguration-2' => 'पर्यालोचकस्य प्रारूपम् ।',
+
+'exif-colorspace-65535' => 'अक्रमाङ्कितम् ।',
+
+'exif-componentsconfiguration-0' => 'न वर्तते ।',
+
+'exif-exposureprogram-0' => 'न व्याख्यातम् ।',
+'exif-exposureprogram-1' => 'मानवीयः ।',
+'exif-exposureprogram-2' => 'साधारणकार्यक्रमः ।',
+'exif-exposureprogram-3' => 'अवकाशस्य आद्यता ।',
+'exif-exposureprogram-4' => 'पिधानस्य आद्यता ।',
+'exif-exposureprogram-5' => 'सर्जनात्मकः कार्यक्रमः ।',
+'exif-exposureprogram-6' => 'प्रक्रियाकार्यक्रमः ।',
+'exif-exposureprogram-7' => 'आलेख्य प्रकारः ।',
+'exif-exposureprogram-8' => 'आयतप्रकारः । (आयतचित्राणि पृष्ठभूमिकेन्द्रीकृतनि )',
+
+'exif-subjectdistance-value' => '$1 मीटर्स् ।',
 
 'exif-meteringmode-0' => 'अज्ञात',
 'exif-meteringmode-1' => 'माध्य',
+'exif-meteringmode-2' => 'केन्द्रभारयुतं सर्वसामान्यम् ।',
+'exif-meteringmode-3' => 'प्रदेशः ।',
+'exif-meteringmode-4' => 'विविधप्रदेशाः ।',
+'exif-meteringmode-5' => 'प्रकारः ।',
+'exif-meteringmode-6' => 'भागशः ।',
+'exif-meteringmode-255' => 'अन्यत्',
 
 'exif-lightsource-0' => 'अज्ञात',
+'exif-lightsource-1' => 'दिवाप्रकाशः ।',
+'exif-lightsource-2' => 'प्रभासमानम् ।',
+'exif-lightsource-3' => 'उज्वलप्रकाशस्य तन्त्रीविशेषः',
+'exif-lightsource-4' => 'स्फुरणम् ।',
+'exif-lightsource-9' => 'सुवायुमण्डलम् ।',
+'exif-lightsource-10' => 'मेघाच्छन्नवायुमण्डलम् ।',
+'exif-lightsource-11' => 'छाया ।',
+'exif-lightsource-12' => 'दिवाप्रकाशः उज्वलकान्तिः ।(D 5700 – 7100K)',
+'exif-lightsource-13' => 'दिनस्य श्वेतोज्वलप्रकाशः (N 4600 – 5400K)',
+'exif-lightsource-14' => 'शान्तशुभ्रः उज्ज्वलप्रकाशः (W 3900 – 4500K)',
+'exif-lightsource-15' => 'श्वेतदीप्तप्रकाशः ।(WW 3200 – 3700K)',
+'exif-lightsource-17' => 'सुयोगः प्रकाशः A',
+'exif-lightsource-18' => 'योग्यप्रकाशः B',
+'exif-lightsource-19' => 'सुयोग्यप्रकाशः C',
+'exif-lightsource-24' => 'ISO स्टूडीयो टङ्गस्टन् ।',
+'exif-lightsource-255' => 'अन्यप्रकाशस्रोतः ।',
+
+# Flash modes
+'exif-flash-fired-0' => 'स्फुरणं न सम्भूतम् ।',
+'exif-flash-fired-1' => 'स्फुरणमभवत् ।',
+'exif-flash-return-0' => 'न कोऽपि स्फुरणप्रयागमनस्य शोधकार्यकलापः अस्ति ।',
+'exif-flash-return-2' => 'स्फुरणप्रत्यागमनस्य प्रकाशः न शोधितः ।',
+'exif-flash-return-3' => 'स्फुरणप्रत्यागमनस्य प्रकाशः अभिज्ञातम् ।',
+'exif-flash-mode-1' => 'अनिवार्यं स्फुरणचालनम् ।',
+'exif-flash-mode-2' => 'अनिवर्यः स्फुरणनिग्रहः ।',
+'exif-flash-mode-3' => 'स्वयं चालनप्रकारः ।',
+'exif-flash-function-1' => 'स्फुरणकार्यकलापः नास्ति ।',
+'exif-flash-redeye-1' => 'लोहितनेत्र न्यूनीकरणस्य प्रकारः ।',
+
+'exif-focalplaneresolutionunit-2' => 'इञ्चस्',
+
+'exif-sensingmethod-1' => 'अनिरूपितम् ।',
+'exif-sensingmethod-2' => 'एकशलाकावर्णस्थानस्य संवेदकः ।',
+'exif-sensingmethod-3' => 'शलाकद्वसस्य वर्णस्थानस्य संवेदकः ।',
+'exif-sensingmethod-4' => 'शलाकत्रयस्य वर्णस्थानस्य संवेदकः ।',
+'exif-sensingmethod-5' => 'वर्णसान्दर्भिकस्थानस्य संवेदकः ।',
+'exif-sensingmethod-7' => 'ट्रिलियनियर्  संवेदकः ।',
+'exif-sensingmethod-8' => 'वर्णसान्दर्भिकस्थानस्य संवेदकः ।',
+
+'exif-filesource-3' => 'आङ्किकस्थिरचित्रग्राही ।',
+
+'exif-scenetype-1' => 'सक्षात् ग्रहीतचित्रम् ।',
+
+'exif-customrendered-0' => 'साधारणप्रक्रिया ।',
+'exif-customrendered-1' => 'प्रक्रियां परिवर्तयतु ।',
+
+'exif-exposuremode-0' => 'स्वयं प्रदर्शनम् ।',
+'exif-exposuremode-1' => 'मानवीयं प्रदर्शनम् ।',
+'exif-exposuremode-2' => 'स्वयम् आवरणम्',
+
+'exif-whitebalance-0' => 'स्वयं श्वेतावरणम् ।',
+'exif-whitebalance-1' => 'मनवकरणस्य श्वेतावरणम् ।',
+
+'exif-scenecapturetype-0' => 'सुयोग्यम् ।',
+'exif-scenecapturetype-1' => 'आयतम् ।',
+'exif-scenecapturetype-2' => 'लम्बचित्राकृतिः ।',
+'exif-scenecapturetype-3' => 'रात्रिदृश्यम् ।',
+
+'exif-gaincontrol-0' => 'नास्ति',
+'exif-gaincontrol-1' => 'मन्दार्जनम् ।',
+'exif-gaincontrol-2' => 'तीव्रार्जनम् ।',
+'exif-gaincontrol-3' => 'मन्दार्जनावन्तिः ।',
+'exif-gaincontrol-4' => 'तीव्रार्जनावनतिः ।',
 
 'exif-contrast-0' => 'सामान्य',
+'exif-contrast-1' => 'कोमलम् ।',
+'exif-contrast-2' => 'कठिणम् ।',
+
+'exif-saturation-0' => 'सामान्यम्',
+'exif-saturation-1' => 'मन्दतर्पणम् ।',
+'exif-saturation-2' => 'तीव्रतर्पणम् ।',
 
 'exif-sharpness-0' => 'सामान्य',
+'exif-sharpness-1' => 'कोमलम् ।',
+'exif-sharpness-2' => 'कठिणम् ।',
 
 'exif-subjectdistancerange-0' => 'अज्ञात',
-
+'exif-subjectdistancerange-1' => 'बृहत्',
+'exif-subjectdistancerange-2' => 'अवलोकनं पिदधातु ।',
+'exif-subjectdistancerange-3' => 'दूरदृश्यम् ।',
+
+# Pseudotags used for GPSLatitudeRef and GPSDestLatitudeRef
+'exif-gpslatitude-n' => 'उत्तराक्षांशः ।',
+'exif-gpslatitude-s' => 'दक्षिणाक्षांशः ।',
+
+# Pseudotags used for GPSLongitudeRef and GPSDestLongitudeRef
+'exif-gpslongitude-e' => 'पश्चिमरेखांशः ।',
+'exif-gpslongitude-w' => 'पश्चिमरेखांशः ।',
+
+# Pseudotags used for GPSAltitudeRef
+'exif-gpsaltitude-above-sealevel' => '$1 {{PLURAL:$1|meter|meters}} समुद्रस्तरादौन्नत्यम् ।',
+'exif-gpsaltitude-below-sealevel' => '$1 {{PLURAL:$1|meter|meters}} समुद्रस्तरादवनतिः ।',
+
+'exif-gpsstatus-a' => 'मापनस्य प्रगतिः ।',
+'exif-gpsstatus-v' => 'अन्तर्निर्वहणस्य मापनम् ।',
+
+'exif-gpsmeasuremode-2' => 'द्विमुखमापनम् ।',
+'exif-gpsmeasuremode-3' => 'त्रिमुखमापनम् ।',
+
+# Pseudotags used for GPSSpeedRef
+'exif-gpsspeed-k' => 'प्रतिहोरा कि.मी ।',
+'exif-gpsspeed-m' => 'मैल् प्रतिहोरा ।',
+'exif-gpsspeed-n' => 'ग्रन्थयः ।',
+
+# Pseudotags used for GPSDestDistanceRef
+'exif-gpsdestdistance-k' => 'कि.मी.',
+'exif-gpsdestdistance-m' => 'मैल्स् ।',
+'exif-gpsdestdistance-n' => 'समुद्रीयः क्रोशः ।',
+
+'exif-gpsdop-excellent' => 'उत्कृष्टम् ($1)',
+'exif-gpsdop-good' => 'साधु ($1)',
+'exif-gpsdop-moderate' => 'मध्यमः $1',
+'exif-gpsdop-fair' => ' युक्तम् ($1)',
+'exif-gpsdop-poor' => 'दीनम् ($1)',
+
+'exif-objectcycle-a' => 'प्रतः केवलम् ।',
+'exif-objectcycle-p' => 'सायं केवलम् ।',
+'exif-objectcycle-b' => 'सायं प्रातः च ।',
+
+# Pseudotags used for GPSTrackRef, GPSImgDirectionRef and GPSDestBearingRef
+'exif-gpsdirection-t' => 'यथार्था दिशा ।',
+'exif-gpsdirection-m' => 'कान्तीयदिशा ।',
+
+'exif-ycbcrpositioning-1' => 'केन्द्रितम् ।',
+'exif-ycbcrpositioning-2' => 'सहक्षेत्रम् ।',
+
+'exif-dc-contributor' => 'योगदानिनः ।',
+'exif-dc-coverage' => 'माध्यमस्य स्थानिकः अथवा लैकिकः अवकाशः ।',
+'exif-dc-date' => 'दिनाङ्काः ।',
+'exif-dc-publisher' => 'प्रकाशकः ।',
+'exif-dc-relation' => 'सम्बद्धमाध्यमः ।',
+'exif-dc-rights' => 'अधिकाराः ।',
+'exif-dc-source' => 'स्रोतसः माध्यमः ।',
+'exif-dc-type' => 'माध्यमप्रकारः ।',
+
+'exif-rating-rejected' => 'तिरस्कृतम् ।',
+
+'exif-isospeedratings-overflow' => '६५५३५ तः महत्तरः ।',
+
+'exif-iimcategory-ace' => 'कलाः, संस्कृतिः, मनोरञ्जनम् ।',
+'exif-iimcategory-clj' => 'पराधः न्यायनियमाः ।',
+'exif-iimcategory-dis' => 'विपदः व्यापदः च ।',
+'exif-iimcategory-fin' => 'अर्थव्यवस्था वाणिज्यं च ।',
 'exif-iimcategory-edu' => 'विद्याभ्यासः',
 'exif-iimcategory-evn' => 'परिसरः',
 'exif-iimcategory-hth' => 'स्वास्थ्यम्',
+'exif-iimcategory-hum' => 'मानवीयासक्तिः ।',
+'exif-iimcategory-lab' => 'परिश्रमः',
+'exif-iimcategory-lif' => 'जीवनविधानं विश्रामः च ।',
+'exif-iimcategory-pol' => 'राजनीतिः ।',
+'exif-iimcategory-rel' => 'मतं विश्वासः च ।',
+'exif-iimcategory-sci' => 'विज्ञानं तन्त्रज्ञानं च ।',
+'exif-iimcategory-soi' => 'समाजिकाः विवादाः ।',
 'exif-iimcategory-spo' => 'क्रीडाः',
+'exif-iimcategory-war' => 'युद्धम्, सङ्घर्षः, अशान्तिः ।',
 'exif-iimcategory-wea' => 'वातावरण',
 
+'exif-urgency-normal' => 'सामान्यम् ($1)',
+'exif-urgency-low' => 'मन्दम् ।$1',
+'exif-urgency-high' => 'उन्नतम् ($1)',
+'exif-urgency-other' => 'योजकनिरूपिता आद्यता : $1',
+
 # External editor support
 'edit-externally' => 'बाह्यां प्रणालीम् उपयुज्य इयं सञ्चिका सम्पाद्यताम् ।',
 'edit-externally-help' => '(अधिकासूचनार्थं [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] इत्येतत् दृश्यताम्)',
@@ -3263,63 +3478,197 @@ $2 इति प्रकारस्य अवरोधं कर्तुं 
 
 # E-mail address confirmation
 'confirmemail' => 'ईपत्रसङ्केतः प्रमाणीक्रियताम्',
+'confirmemail_noemail' => 'भवतः योजकाद्यतायां व्यवस्थापितः विद्युन्मानपत्रसङ्केतः मान्यं नाश्ति ।  [[Special:Preferences|user preferences]]',
+'confirmemail_text' => '{{SITENAME}} इत्यत्र विद्युन्मानसुविधोपयोगात् पूर्वं भवतः विद्युन्मानपत्रसङ्केतं मान्यं करोतु । 
+भवतः सङ्केतं दृढीकरणसङ्केतं प्राप्तुं अधः दत्तं कड्मलं तुदतु ।
+तत्र पत्रं ससङ्केतम् अनुबन्धयुक्तं भवति । 
+भवतः विद्युन्मानपत्रसङ्केतं प्रमाणीकर्तुम् अनेन अनुबन्धेन जालगवाक्षेन पूरयतु ।',
+'confirmemail_pending' => 'कश्चित् दृढीकरणस्य सङ्केतसङ्ख्या तावत् विद्युन्मानपत्रद्वारा ते प्रेषितम् । 
+भवान् सद्यः योजकस्थानं निर्मितवान् । नूतनसङ्केतसङ्ख्या कतिपयनिमेषापर्यन्तं निरीक्षताम्,',
+'confirmemail_send' => 'दृढीकरणसङ्केतसङ्ख्यां प्रेषयतु ।',
+'confirmemail_sent' => 'दृढीकरणस्य विद्युन्मानपत्रं प्रेषितम् ।',
+'confirmemail_oncreate' => 'दृढीकरणस्य सङ्केतसङ्ख्या विद्युन्मानपत्रद्वारा सम्प्रेषितम् । 
+नामाभिलेखार्थम् एषा सङ्केतसङ्ख्या नावश्यकी । किन्तु  वीक्यां विद्युन्मानपत्राधारितलक्षणानि सक्रिययितुं सङ्केतसङ्ख्या प्रकप्पनीया ।',
+'confirmemail_sendfailed' => '{{SITENAME}}भवतः दृढीकरणपत्रप्रेषणं विफलम् । 
+अमान्याक्षरशोधाय भवतः विद्युन्मानपत्रसङ्केतं परिशीलयतु ।   
+पत्रवाहकः प्रत्यर्पितवान् : $1',
+'confirmemail_invalid' => 'अमान्या दृढीकरणसङ्केतसङ्ख्या ।
+प्रायः सङ्केतसङ्ख्या विनष्टा ।',
+'confirmemail_needlogin' => 'भवतः विद्युन्मनपत्रसङ्केतं दृढयितुं भवान् $1 करोतु ।',
+'confirmemail_success' => 'भवतः विद्युन्मानपत्रसङ्केतः इदानीं दृढीकृतः अस्ति । [[Special:UserLogin|log in]]
+अधुना भवान् नामाभिलेखेन विकिविहरस्य आनन्दम् अनुभवितुं शक्नोति ।',
+'confirmemail_loggedin' => 'भवतः विद्युन्मानपत्रसङ्केतः दृढीकृतः ।',
+'confirmemail_error' => 'भवतः दृढीकरणावसरे काचित् समस्या उत्पन्ना ।',
+'confirmemail_subject' => '{{SITENAME}}विद्युन्मानपत्रसङ्केतस्य दृढीकरणम् ।',
+'confirmemail_body' => 'कोऽपि अथवा भवान् $1 इति ऐपिसङ्केतद्वारा {{SITENAME}}इत्यस्मिन् "$2" इति नाम्ना योजकस्थाननिर्माणार्थम् अभ्यर्थनं दत्तवान् ।
+एतत् योजकस्थानं भवतः एव अपि च {{SITENAME}} इत्यस्मिन् उलब्धे विद्युन्मानपत्रसङ्केतः ।
+सुविधारम्भं कर्तुम् अधोदत्तानुबन्ध स्वस्य जालगवाक्षे उद्घाटयतु ।
+
+$3
+
+यदि एतदभ्यर्थनं भवान् न कृतवान् तर्हि एतत् अपकर्षितुम् अधो दतानुबन्धम् उद्घाटयतु ।
+
+$5
+
+इयं दृढीकरणसङ्केतसङ्ख्या $4 इत्यस्मिन् समाप्ता भवति ।',
+'confirmemail_body_changed' => 'कोऽपि अथवा भवान् $1 इति ऐपिसङ्केतद्वारा {{SITENAME}}इत्यस्मिन् "$2" इति योजस्थानस्य विद्युन्मानपत्रसङ्केतं परिवर्त्य दत्तवान्  ।
+अस्य विषयस्य दृढीकरणार्थम् एतत् योजकस्थानं भवतः एव अस्ति अपि च  {{SITENAME}}इत्यस्मिन् विद्युन्मानसौकर्यं पुनरारब्धुम् अधो दत्तानुबन्धं जालगवाक्षे उद्घाटयतु ।
+
+$3
+
+यदि एतत् योजकस्थानं भवतः नाश्ति तर्हि भवतः विद्युन्मानपत्रसङ्केतम् अपाकृष्टुं अधो दत्तानुबन्धं जालगवाक्षे उद्घाटयतु ।
+
+
+$5
+एतत् दृढीकर्तुं $6 इत्येतत् $7 इति होरायाः पश्चात् कार्यं न करोति ।',
+'confirmemail_invalidated' => 'विद्युन्मानपत्रसङ्केतस्य दृढीकरणम् अपकर्षितम् ।',
+'invalidateemail' => 'विद्युन्मानपत्रस्य दृढीकरणम् अपकर्षतु ।',
+
+# Scary transclusion
+'scarytranscludedisabled' => 'अन्तर्विकीयः अन्तर्भवनं निष्क्रियम् ।',
+'scarytranscludefailed' => '$1 कृते प्राकृतिः प्रार्थना न प्राप्ता ।',
+'scarytranscludetoolong' => '[URLअतिदीर्घा अस्ति ]',
+
+# Delete conflict
+'deletedwhileediting' => 'पूर्वसूचना : भवतः सम्पादनारम्भात् पश्चात् एतत् पुटम् अपमर्जितम् ।',
+'confirmrecreate' => "योजकः [[User:$1|$1]] ([[User talk:$1|सम्भाषणम्]]) सकारणं भवतः सम्पादनात् परं पुटमेतत् अपमर्जितम् । 
+: ''$2''
+एतत्पुटं पुनर्निमातुम् इच्छति वेति दृढयतु ।",
+'confirmrecreate-noreason' => 'यदा भावान् अस्य पुटास्य सम्पादनम् आरब्धवान् तत्पश्चात् अन्यः योजकः [[User:$1|$1]] ([[User talk:$1|talk]]) एतत् अपनीतवान् । अतः एतत्पुटं पुनर्निमातुम् इच्छति वेति दृढयतु ।',
+'recreate' => 'पुनर्निर्मीयताम्',
 
 # action=purge
 'confirm_purge_button' => 'अस्तु',
+'confirm-purge-top' => 'अस्य पुटस्य इतिहाससङ्ग्रहं निर्मलं करोति वा ?',
+'confirm-purge-bottom' => 'कस्यचिदपि पुटस्य अपमर्जनेन सञ्चिका निर्मला भवति  अपि च नूतनतमा आवृत्तिः प्रकटिता भवति ।',
 
 # action=watch/unwatch
 'confirm-watch-button' => 'अस्तु',
 'confirm-watch-top' => 'इदं पृष्ठं भवतः अवेक्षणसूच्यां योजयाम ?',
 'confirm-unwatch-button' => 'अस्तु',
+'confirm-unwatch-top' => 'इदं पृष्ठं भवतः अवेक्षणसूच्याः निष्कास्यताम्',
 
 # Multipage image navigation
+'imgmultipageprev' => 'पूर्वतनं पृष्ठम्',
 'imgmultipagenext' => 'अग्रिमं पृष्ठम्',
 'imgmultigo' => 'गम्यताम् !',
 'imgmultigoto' => '$1 पृष्ठं गम्यताम्',
 
 # Table pager
+'ascending_abbrev' => 'आरुह्',
+'descending_abbrev' => 'अवरुह्',
 'table_pager_next' => 'अग्रिमं पृष्ठम्',
 'table_pager_prev' => 'पूर्वतनं पृष्ठम्',
 'table_pager_first' => 'प्रथमं पृष्ठम्',
 'table_pager_last' => 'अन्तिमं पृष्ठम्',
+'table_pager_limit' => 'प्रतिपृष्ठं $1 वस्तु दर्श्यताम्',
+'table_pager_limit_label' => 'प्रतिपुटं पदार्थाः ।',
 'table_pager_limit_submit' => 'गम्यताम्',
 'table_pager_empty' => 'फलितानि न सन्ति',
 
 # Auto-summaries
 'autosumm-blank' => 'पृष्ठं रिक्तीकृतम्',
+'autosumm-replace' => '"$1" इत्यनेन सह आधेस्य विनिमयः कृतः ।',
+'autoredircomment' => '[[$1]] प्रति पुटं पुनर्निदिष्टम् ।',
 'autosumm-new' => '$1 नवीन पृष्ठं निर्मीत अस्ती',
 
+# Live preview
+'livepreview-loading' => 'सम्पूर्यमाणः.....',
+'livepreview-ready' => 'सम्पूरणं सज्जम् ।',
+'livepreview-failed' => 'साक्षात् पूर्वावलोकनं निष्पलम् ।
+सामान्यपूर्वावलोकनं यतताम् ।',
+'livepreview-error' => '$1 "$2" तः सम्पर्कः न सिद्धः ।
+सामान्यपूर्वावलोकनं यतताम् ।',
+
+# Friendlier slave lag warnings
+'lag-warn-normal' => '$1 {{PLURAL:$1|क्षणम्|क्षणानि}} इति काले सम्भूतपरिवर्तन प्रायः अस्यां सूचिकायां न दर्शितम् ।',
+'lag-warn-high' => 'अत्युन्नतदत्तांशवितारकस्य विलम्बत्वेन {{PLURAL:$1|क्षणम्|क्षणानि}} तः पूर्वं सम्भूतपरिवर्तनं सूचिकायां न दृश्यते ।',
+
 # Watchlist editor
+'watchlistedit-numitems' => 'भवतः अवलोकनावली {{PLURAL:$1|1 शीर्षकम्|$1 शीर्षकानि}}, अन्तर्भूता, सम्भाषणपुटरहिता ।',
+'watchlistedit-noitems' => 'भवतः अवलोकनावली शीर्षकैः रहिता ।',
+'watchlistedit-normal-title' => 'अवलोकनावलीं सम्पादयतु ।',
+'watchlistedit-normal-legend' => 'अवलोकनावलीतः शीर्षकानि अपनयतु ।',
+'watchlistedit-normal-explain' => 'भवतः अवलोकनावल्याः शीर्षकानि अधः दर्शितानि । 
+शीर्षकम् अपनेतुम् अस्य पार्श्वे विद्यमानमञ्जूषाम् अर्गलयतु । पश्चात् {{int:Watchlistedit-normal-submit}}" एतत् तुदतु ।
+भवान् [[Special:EditWatchlist/raw|अपक्वावलोकनावलीं सम्पादयतु ]] कर्तुं शक्नोति ।',
+'watchlistedit-normal-submit' => 'शीर्षकानि अपनयतु ।',
+'watchlistedit-normal-done' => 'भवतः अवलोकनावली तः{{PLURAL:$1|1शीर्षकम्|$1 शीर्षकानि}} अपनीतानि ।',
+'watchlistedit-raw-title' => 'अपक्वाम् अवलोकनावलीं सम्पादयतु ।',
+'watchlistedit-raw-legend' => 'अपक्वाम् अवलोकनावलीं सम्पादयतु ।',
+'watchlistedit-raw-explain' => 'भवतः अवलोकनावल्याः शीर्षकानि अधः दर्शितानि । अपि च भवान् आवलीतः अपनीय संयोज्य वा परिवर्तयितुं शक्नोति । 
+प्रत्येकं लङ्क्तौ एकं शीर्षकम् । 
+समाप्तेः पश्चात् "{{int:Watchlistedit-raw-submit}}" एतत् तुदतु ।
+भवान् [[Special:EditWatchlist|सूक्तसम्पादकस्य]] अपि उपयोजयितुं शक्नोति ।',
 'watchlistedit-raw-titles' => 'शीर्षकाणि :',
 'watchlistedit-raw-submit' => 'अवलोकनावली उपारोप्यताम्',
+'watchlistedit-raw-done' => 'भवतः अवलोकनावली उन्नतीकारोतु ।',
+'watchlistedit-raw-added' => '{{PLURAL:$1|1शीर्षकम्|$1 शीर्षकानि}} संवृद्धानि ।',
+'watchlistedit-raw-removed' => '{{PLURAL:$1|1शीर्षकम्|$1 शीर्षकानि}} अपनीतानि ।',
 
 # Watchlist editing tools
 'watchlisttools-view' => 'उचितानि परिवर्तनानि दृश्यन्ताम्',
 'watchlisttools-edit' => 'अवेक्षणसूची दृश्यतां सम्पाद्यतां च',
 'watchlisttools-raw' => 'अपरिष्कृता अवेक्षणसूची सम्पाद्यताम्',
 
+# Signatures
+'signature' => '[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|अम्भाषणम्]])',
+
 # Core parser functions
+'unknown_extension_tag' => 'अज्ञातं वर्तमानसूत्रम् $1',
 'duplicate-defaultsort' => '\'\'\'प्रबोधः\'\'\' पुरानी मूल क्रमांकन कुंजी "$1" के बजाय अब मूल क्रमांकन कुंजी "$2" होगी।',
 
 # Special:Version
 'version' => 'आवृत्तिः',
+'version-extensions' => 'अनुस्थापितानि विस्तरणानि ।',
 'version-specialpages' => 'विशेषपृष्ठानि',
+'version-parserhooks' => 'विन्यासस्य आलम्बः ।',
+'version-variables' => 'भङ्गुरम्',
+'version-antispam' => 'अनिष्टस्य अवरोधः ।',
 'version-skins' => 'छादन',
 'version-other' => 'अन्यत्',
+'version-mediahandlers' => 'माध्यनिर्वाहकाः ।',
+'version-hooks' => 'आलम्बाः ।',
+'version-extension-functions' => 'विस्तरणस्य कार्यकलापाः ।',
+'version-parser-extensiontags' => 'विन्यासविस्तारणस्य सूत्रम् ।',
+'version-parser-function-hooks' => 'विन्यासकलापस्य आलम्बाः ।',
+'version-hook-name' => 'आलम्बस्य नाम ।',
+'version-hook-subscribedby' => 'सदस्यत्वम् अनेन प्राप्तम् ।',
+'version-version' => '(आवृत्तिः$1)',
+'version-license' => 'अनुज्ञापत्रम्',
 'version-poweredby-others' => 'अन्य',
+'version-software' => 'तन्त्रांशः अनुस्थापितः ।',
 'version-software-product' => 'उत्पाद',
 'version-software-version' => 'आवृत्ति',
+'version-entrypoints' => 'प्रवेशबिन्दुः URLs',
+'version-entrypoints-header-entrypoint' => 'प्रवेशबिन्दुः ।',
+'version-entrypoints-header-url' => 'URL',
 
 # Special:FilePath
+'filepath' => 'सञ्चिकापथः ।',
 'filepath-page' => 'सञ्चिका:',
 'filepath-submit' => 'गम्यताम्',
+'filepath-summary' => 'एतद्विशेषपुटं सञ्चिकायाः पूर्णपथं प्रदर्शयति । 
+चित्राणि परिपूर्णसत्वयुतानि दर्शितानि । अन्यसञ्चिकाभेदाः सम्बद्धकार्यकलापैः प्रत्यक्षं आरब्धाः ।',
 
 # Special:FileDuplicateSearch
+'fileduplicatesearch' => 'प्रतिकृतिसञ्चिकार्थम् अन्विषतु ।',
+'fileduplicatesearch-summary' => 'सम्मिश्रमौल्यामूलयुतर्थं  प्रतिकृतिसञ्चिकार्थम् अन्विषतु ।',
+'fileduplicatesearch-legend' => 'प्रतिकृत्यर्थम् अन्विषतु ।',
 'fileduplicatesearch-filename' => 'सञ्चिकानाम:',
 'fileduplicatesearch-submit' => 'अन्वेषणम्',
+'fileduplicatesearch-info' => '$1 × $2 पिक्सेलानि, संचिकायाः आकारः: $3, MIME-प्रकारः: $4',
+'fileduplicatesearch-result-1' => '"$1" इत्यस्मिन् सादृश्यावृत्तिः नास्ति ।',
+'fileduplicatesearch-result-n' => 'इति सञ्चिका {{PLURAL:$1|सादृश्यप्रतिकृतिः|$2 सादृश्यप्रतिकृतयः}}',
+'fileduplicatesearch-noresults' => '"$1" इति नाम्ना सञ्चिका न दृष्टा ।',
 
 # Special:SpecialPages
 'specialpages' => 'विशेषपृष्ठानि',
+'specialpages-note' => '----
+* साधारणं विशेषपुटम् । 
+* <span class="mw-specialpagerestricted">प्रतिद्धं विशेषपुटम् ।</span>',
+'specialpages-group-maintenance' => 'निर्वहणवृत्तानि ।',
+'specialpages-group-other' => 'अन्यविशेषपुटानि ।',
 'specialpages-group-login' => 'प्रविश्यताम् / लेखा सृज्यताम्',
 'specialpages-group-changes' => 'सद्योजातानि परिवर्तनानि आवल्यश्च',
 'specialpages-group-media' => 'माध्यमस्य इतिवृत्तम् आरोपणानि च',
@@ -3350,6 +3699,7 @@ $2 इति प्रकारस्य अवरोधं कर्तुं 
 'tag-filter' => '[[Special:Tags|Tag]] शोधनी:',
 'tag-filter-submit' => 'शोधनी',
 'tags-title' => 'अङ्कनानि',
+'tags-intro' => 'एतत्पुटं सार्थसूत्राणि दर्शयति यस्य कोऽपि तन्त्रांशः यत्किमपि सम्पादनम् अङ्कयितुं प्रयोजयति ।',
 'tags-tag' => 'अङ्कननाम',
 'tags-display-header' => 'परिवर्तितसूचीषु प्रदर्शनम्',
 'tags-description-header' => 'अर्थस्य समग्रवर्णनम्',
@@ -3373,12 +3723,18 @@ $2 इति प्रकारस्य अवरोधं कर्तुं 
 'dberr-header' => 'अस्मिन् विकिमध्ये काचित् समस्या विद्यते',
 'dberr-problems' => 'क्षम्यताम् ! अस्मिन् जालपुटे तान्त्रिकसमस्याः अनुभूयमानाः सन्ति ।',
 'dberr-again' => 'किञ्चित् कालं प्रतीक्ष्य पुनः उपारोप्यताम् ।',
+'dberr-info' => '(दत्ताशं वितारकं सम्पर्कयितुं नैव शक्यते $1 )',
+'dberr-usegoogle' => 'अत्रान्तरे भवान् गूगल् इति शोधनयन्त्रे अन्वेषणं कर्तुं शक्नोति ।',
+'dberr-outofdate' => 'अस्माकम् आधेयस्य तेषाम् अनुक्रमणिका कालातिक्रान्ता इति जानातु ।',
+'dberr-cachederror' => 'एषा सङ्ग्रहितप्रतिः अभ्यर्थितपुटस्य , एषा उन्नतीकृता अपि न स्यात् ।',
 
 # HTML forms
 'htmlform-invalid-input' => 'भवता आरोपितेषु अंशेषु काचन समस्या विद्यते ।',
 'htmlform-select-badoption' => 'भवता निर्दिष्टं मौल्यं युक्तविकल्पः न ।',
 'htmlform-int-invalid' => 'भवता निर्दिष्टं मौल्यं पूर्णाङ्कः न ।',
 'htmlform-float-invalid' => 'भवता निर्दिष्टं मौल्यं संख्या न ।',
+'htmlform-int-toolow' => 'भवता निश्चितं मौल्यं $1 इत्यस्मात् न्यूनम् अस्ति ।',
+'htmlform-int-toohigh' => 'भवता निश्चितं मौल्यं  $1 तः अधिकम् अस्ति ।',
 'htmlform-required' => 'इदं मूल्यम् अपेक्षितम् ।',
 'htmlform-submit' => 'उपस्थाप्यताम्',
 'htmlform-reset' => 'परिवर्तनानि पूर्वस्थितिं प्रति आनयतु',
@@ -3391,6 +3747,15 @@ $2 इति प्रकारस्य अवरोधं कर्तुं 
 # New logging system
 'logentry-delete-delete' => '$1 इत्यनेन $3 पुटं निष्कासितम्',
 'logentry-delete-restore' => '$1 इत्यनेन $3 पृष्ठं प्रात्यानीतम्',
+'logentry-delete-event' => '$1 परिवर्तितदृश्यस्य {{PLURAL:$5|a log event|$5 log events}} $3: $4 इत्यस्मिन् ।',
+'logentry-delete-revision' => '$1 इत्येषः $3 पुटस्य {{PLURAL:$5|एका आवृत्तिः|$५ आवृत्तयः}}इत्यस्य दृश्यता परिवर्तिता $4',
+'logentry-delete-event-legacy' => '$1 इत्येतत् $3 पुटे  प्रवेशप्रक्रियायाः दृश्यताः परिवर्तिता ।',
+'logentry-delete-revision-legacy' => '$1 इत्येतत् $3 पुटे आवृत्तीनां दृश्यता  परिवर्तिता ।',
+'logentry-suppress-delete' => '$1 निग्रहितपुटम् $3',
+'logentry-suppress-event' => '$1 परिवर्तितदृश्यस्य {{PLURAL:$5|a log event|$5 log events}} $3: $4 इत्यस्मिन् ।',
+'logentry-suppress-revision' => '$1 इत्येषः $3 पुटस्य {{PLURAL:$5|एका आवृत्तिः|$५ आवृत्तयः}}इत्यस्य दृश्यता परिवर्तिता $4',
+'logentry-suppress-event-legacy' => '$1 इत्येतत् $3 पुटे  प्रवेशप्रक्रियायाः दृश्यताः परिवर्तिता ।',
+'logentry-suppress-revision-legacy' => '$1 इत्येतत् $3 पुटे आवृत्तीनां दृश्यता  परिवर्तिता ।',
 'revdelete-content-hid' => 'आधेयं विलोपितम्',
 'revdelete-summary-hid' => 'सम्पादनसारः विलोपितः',
 'revdelete-uname-hid' => 'योजकस्य नाम सङ्गुप्तम् ।',
@@ -3404,6 +3769,8 @@ $2 इति प्रकारस्य अवरोधं कर्तुं 
 'logentry-move-move_redir' => '↓
 $1 इत्यनेन $3 इति पृष्ठम् $4 इत्येतत् प्रति चालितं, अनुप्रेषणम् अतिक्रम्य',
 'logentry-move-move_redir-noredirect' => '$1 इति प्रयोक्त्रा $3 इति पृष्ठं $4 इत्येतत् प्रति चालितम्, अनुप्रेषणम् अतिक्रम्य, अनुप्रेषणमोचनेन च विना।',
+'logentry-patrol-patrol' => '$1 अङ्कितावृत्तिः $4 इति पुटस्य $3 आरक्षणम् ।',
+'logentry-patrol-patrol-auto' => '$1 इत्येतत् $3 पुटस्य $4 आवृत्तिं स्वयं चालितरूपात् आरक्षितम् ।',
 'logentry-newusers-newusers' => '$1 योजकलेखाम् असृजत्',
 'logentry-newusers-create' => '$1 योजकलेखाम् असृजत्',
 'logentry-newusers-create2' => '$1,  $3 योजकलेखाम् असृजत्',
@@ -3416,24 +3783,44 @@ $1 इत्यनेन $3 इति पृष्ठम् $4 इत्ये
 'feedback-cancel' => 'निवर्तयते',
 'feedback-submit' => 'प्रतिस्पन्दः प्रेष्यताम्',
 'feedback-adding' => 'पृष्ठे प्रतिस्पन्दः योजनीयः ...',
+'feedback-error1' => 'API इत्यस्मात् दोषः : अज्ञातः परिणामः ।',
 'feedback-error2' => 'दोषः : सम्पादनं निष्फलं जातम्',
 'feedback-error3' => 'दोषः : ए पि ऐ तः प्रतिस्पन्दः न प्राप्तः',
 'feedback-thanks' => 'धन्यवादः ! भवतः प्रतिस्पन्दः "[ $2  $1 ]" पृष्ठाय प्रेषितः अस्ति ।',
 'feedback-close' => 'समापित',
+'feedback-bugcheck' => 'उत्तमम् परिशीलयतु यत्  [ $1 known bugs] पूर्वमेव नासीत् इति ।',
+'feedback-bugnew' => 'अहं परीक्षितवान् ।  नूतनदोषं सूचयतु ।',
 
 # API errors
+'api-error-badaccess-groups' => 'भवान् अस्यां वीक्यां सञ्चिकाः उत्तारयितुम् नानुमतः ।',
+'api-error-badtoken' => 'आन्तरिकदोषः : दुष्टप्रतीकः ।',
+'api-error-copyuploaddisabled' => 'अस्मिन् वितारके युआर् एल् द्वारा उत्तारणं निष्क्रियम् ।',
+'api-error-duplicate' => '{{PLURAL:$1| [ $2 अन्यसञ्चिकाः] | सन्ति [ $2 काश्चन अन्यसञ्चिकाः]}} एकस्मिन् एव ।',
+'api-error-duplicate-archive' => 'तत्र {{PLURAL:$1|आसीत् [$2 काश्चन अन्यसञ्चिकाः] |  [$2काचन अन्यसञ्चिकाः]}}, पूर्वमेव {{PLURAL:$1|यह was|they आसन्}} किन्तु अपनीताः ।',
+'api-error-duplicate-archive-popup-title' => 'द्विप्रतिः {{PLURAL:$1| सञ्चिका |सञ्चिकाः}} पूर्वमेव अपमर्जिताः ।',
+'api-error-duplicate-popup-title' => 'द्विप्रतिः {{PLURAL:$1| सञ्चिका| सञ्चिकाः}}',
 'api-error-empty-file' => 'समर्पिता सञ्चिका रिक्ता आसीत् ।',
 'api-error-emptypage' => 'नूतनस्य रिक्तस्य पृष्ठस्य सर्जनं निषिद्धम् ।',
 'api-error-fetchfileerror' => 'आन्तरिकदोषः : सञ्चिकायाः प्राप्त्यवसरे कश्चन दोषः जातः ।',
 'api-error-fileexists-forbidden' => '"$1" नामिका सञ्चिका पूर्वमेव विद्यते । पुनः तदुपरि लेखनम् अशक्यम् ।',
+'api-error-fileexists-shared-forbidden' => '"$1" इति नाम्नः सञ्चिका पूर्वमेव सञ्चिकाकोशे अस्ति । अधिलिखितं न स्यात् ।',
 'api-error-file-too-large' => 'समर्पिता सञ्चिका सुदीर्घा अस्ति ।',
 'api-error-filename-tooshort' => 'सञ्चिकानाम अतीव ह्रस्वम् अस्ति ।',
 'api-error-filetype-banned' => 'ईदृशी सञ्चिका अनुरुद्धा ।',
+'api-error-filetype-banned-type' => '\'\'\'".$1"\'\'\'सञ्चिका {{PLURAL:$4|प्रकारस्य }} अनुमतिः नास्ति ।
+प्रकारसञ्चिकायाः{{PLURAL:$3|}} अनुमतिरस्ति  $2।',
 'api-error-filetype-missing' => 'अस्याः सञ्चिकायाः विस्तारः लुप्तः अस्ति ।',
 'api-error-hookaborted' => 'भवतः संस्करणप्रयत्नः विस्तारेण अपसारितः ।',
 'api-error-http' => 'आन्तरिकदोषः : वितारकस्य सम्पर्के असमर्थम् ।',
 'api-error-illegal-filename' => 'सञ्चिकानामलेखनं नानुमतम् ।',
+'api-error-internal-error' => 'आन्तरिकदोषः : वीक्यां भवतः उत्तारणावसरे काचनदोषः संवृत्तः ।',
+'api-error-invalid-file-key' => 'आन्तरिकदोषः : अनित्यसञ्चिकाकोशे सञ्चिका न दृष्टा ।',
+'api-error-missingparam' => 'आन्तरिकदोषः : अभ्यर्थनानुगुणं व्याप्तिः विलुप्ता ।',
+'api-error-missingresult' => 'आन्तरिकदोषः : प्रतिकृतिः सफला इति निश्चिता नाभवत् ।',
 'api-error-mustbeloggedin' => 'सञ्चिकायाः उपारोपणाय अन्तः प्रवेशः अनिवार्यः ।',
+'api-error-mustbeposted' => 'आन्तरिकदोषः : HTTP प्रस्तोतुम् अभ्यर्थनम् आवश्यकम् ।',
+'api-error-noimageinfo' => 'उत्तारणं सफलम् । किन्तु सञ्चिकाविषये वितारकः कामपि सूचनां न अयच्छतु ।',
+'api-error-nomodule' => 'आन्तरिकदोषः : उत्तारणघटकः न व्यवस्थितः ।',
 'api-error-ok-but-empty' => 'आन्तरिकदोषः : वितारकतः प्रतिस्पन्दः न प्राप्तः ।',
 'api-error-overwrite' => 'वर्तमानसञ्चिकायाः पुनर्लेखनं नानुमतम् ।',
 'api-error-stashfailed' => 'आन्तरिकदोषः : तात्कालिकसञ्चिकायाः रक्षणे वितारकः असमर्थः जातः ।',
index 419ed9c..a584187 100644 (file)
@@ -3069,6 +3069,7 @@ $1',
 'import-interwiki-templates' => 'Укључи све шаблоне',
 'import-interwiki-submit' => 'Увези',
 'import-interwiki-namespace' => 'Одредишни именски простор:',
+'import-interwiki-rootpage' => 'Одредишна основна страница (необавезно):',
 'import-upload-filename' => 'Назив датотеке:',
 'import-comment' => 'Коментар:',
 'importtext' => 'Извезите датотеку с изворног викија користећи [[Special:Export|извоз]].
@@ -3105,6 +3106,9 @@ $1',
 'import-error-interwiki' => 'Не могу да увезем страницу „$1“ јер је њен назив резервисан за спољно повезивање (међувики).',
 'import-error-special' => 'Не могу да увезем страницу „$1“ јер она припада посебном именском простору које не прихвата странице.',
 'import-error-invalid' => 'Не могу да увезем страницу „$1“ јер је њен назив неисправан.',
+'import-options-wrong' => '{{PLURAL:$2|Погрешна опција|Погрешне опције}}: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'Наведена основна страница има неисправан наслов.',
+'import-rootpage-nosubpage' => 'Именски простор „$1“ основне странице не дозвољава подстранице.',
 
 # Import log
 'importlogpage' => 'Дневник увоза',
index 9185507..50e2751 100644 (file)
@@ -2978,6 +2978,7 @@ Sve radnje pri uvozu s drugih vikija su zabeležene u [[Special:Log/import|dnevn
 'import-interwiki-templates' => 'Uključi sve šablone',
 'import-interwiki-submit' => 'Uvezi',
 'import-interwiki-namespace' => 'Odredišni imenski prostor:',
+'import-interwiki-rootpage' => 'Odredišna osnovna stranica (neobavezno):',
 'import-upload-filename' => 'Naziv datoteke:',
 'import-comment' => 'Komentar:',
 'importtext' => 'Izvezite datoteku s izvornog vikija koristeći [[Special:Export|izvoz]].
@@ -3014,6 +3015,9 @@ Pokušajte ponovo.',
 'import-error-interwiki' => 'Ne mogu da uvezem stranicu „$1“ jer je njen naziv rezervisan za spoljno povezivanje (međuviki).',
 'import-error-special' => 'Ne mogu da uvezem stranicu „$1“ jer ona pripada posebnom imenskom prostoru koje ne prihvata stranice.',
 'import-error-invalid' => 'Ne mogu da uvezem stranicu „$1“ jer je njen naziv neispravan.',
+'import-options-wrong' => '{{PLURAL:$2|Pogrešna opcija|Pogrešne opcije}}: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'Navedena osnovna stranica ima neispravan naslov.',
+'import-rootpage-nosubpage' => 'Imenski prostor „$1“ osnovne stranice ne dozvoljava podstranice.',
 
 # Import log
 'importlogpage' => 'Dnevnik uvoza',
index 8638292..ecce07e 100644 (file)
@@ -2783,6 +2783,7 @@ Naitatala sa [[Special:Log/import|tala ng inangkat]] ang lahat ng mga transwikin
 'import-interwiki-templates' => 'Isama ang lahat ng mga suleras',
 'import-interwiki-submit' => 'Mag-angkat',
 'import-interwiki-namespace' => 'Kapupuntahang espasyo ng pangalan:',
+'import-interwiki-rootpage' => 'Ugat na pahina ng kapupuntahan (maaaring wala ito):',
 'import-upload-filename' => 'Pangalan ng talaksan:',
 'import-comment' => 'Komento:',
 'importtext' => 'Pakiluwas ang talaksan magmula sa pinagmulang wiki na ginagamit ang [[Special:Export|kasangkapang pangluwas]].  
@@ -2815,6 +2816,9 @@ Sagipin mo ito sa iyong kompyuter at papaitaas na ikarga ito rito.',
 'import-error-interwiki' => 'Hindi naangkat ang pahinang "$1" dahil ang pangalan nito ay nakalaan para sa pagkakawing na panlabas (interwiki).',
 'import-error-special' => 'Hindi naangkat ang pahinang "$1" dahil pag-aari ito ng isang natatanging puwang na pampangalan na hindi nagpapahintulot ng mga pahina.',
 'import-error-invalid' => 'Hindi naangkat ang pahinang "$1" dahil hindi katanggap-tanggap ang pangalan nito.',
+'import-options-wrong' => 'Maling {{PLURAL:$2|pili|mga mapipili}}: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'Ang ibinigay na ugat na pahina ay isang hindi katanggap-tanggap na pamagat.',
+'import-rootpage-nosubpage' => 'Ang puwang ng pangalan na "$1" ng ugat na pahina ay hindi nagpapahintulot ng kabahaging mga pahina.',
 
 # Import log
 'importlogpage' => 'Talaan ng pagaangkat',
index 6b9b136..c258b9e 100644 (file)
@@ -435,14 +435,14 @@ $messages = array(
 'pagecategories' => '{{PLURAL:$1|Kategori|Kategoriler}}',
 'category_header' => '"$1" kategorisindeki sayfalar',
 'subcategories' => 'Alt kategoriler',
-'category-media-header' => '"$1" kategorisindeki medya',
-'category-empty' => "''Bu kategoride henüz herhangi bir madde ya da medya bulunmamaktadır.''",
+'category-media-header' => '"$1" kategorisindeki dosyalar',
+'category-empty' => "''Bu kategoride henüz herhangi bir sayfa ya da dosya bulunmamaktadır.''",
 'hidden-categories' => '{{PLURAL:$1|Gizli kategori|Gizli kategoriler}}',
 'hidden-category-category' => 'Gizli kategoriler',
-'category-subcat-count' => '{{PLURAL:$2|Bu kategori sadece aşağıdaki alt kategoriyi içermektedir.|Bu kategoride aşağıdaki {{PLURAL:$1|alt kategori|$1 alt kategori}} dahil $2 alt kategori vardır.}}',
+'category-subcat-count' => '{{PLURAL:$2|Bu kategori sadece aşağıdaki alt kategoriyi içermektedir.|Bu kategoride aşağıdaki {{PLURAL:$1|alt kategori|$1 alt kategorisi}} dahil $2 alt kategorisi vardır.}}',
 'category-subcat-count-limited' => 'Bu kategori aşağıdaki {{PLURAL:$1|alt kategoriye|$1 alt kategoriye}} sahiptir.',
 'category-article-count' => '{{PLURAL:$2|Bu kategori sadece aşağıdaki sayfayı içermektedir.|Toplam $2 taneden, aşağıdaki {{PLURAL:$1|sayfa|$1 sayfa}} bu kategoridedir.}}',
-'category-article-count-limited' => 'Aşağıdaki {{PLURAL:$1|sayfa|$1 sayfa}} mevcut kategoridedir.',
+'category-article-count-limited' => 'Bu kategoride {{PLURAL:$1|sayfa|$1 sayfa}} bulunmaktadır.',
 'category-file-count' => '{{PLURAL:$2|Bu kategori sadece aşağıdaki dosyayı içerir.|Toplam $2 taneden, aşağıdaki {{PLURAL:$1|dosya|$1 dosya}} bu kategoridedir.}}',
 'category-file-count-limited' => 'Aşağıdaki {{PLURAL:$1|dosya|$1 dosya}} mevcut kategoridedir.',
 'listingcontinuesabbrev' => '(devam)',
index c2886b9..ae55940 100644 (file)
@@ -969,6 +969,9 @@ $2
 'parser-template-loop-warning' => 'Үрнәкләрдә йомык сылтама табылды: [[$1]]',
 'parser-template-recursion-depth-warning' => '($1) үрнәген рекурсия итеп куллану чиге рөхсәт ителгәннән артып киткән',
 'language-converter-depth-warning' => 'Телләрне үзгәртүләре артык югарыга киткән ($1)',
+'node-count-exceeded-warning' => 'Биттә бәйләү өлешләре артып киткән',
+'expansion-depth-exceeded-category' => 'Ачыклык тирәнлеге зур булган битләр',
+'expansion-depth-exceeded-warning' => 'Биттә кертем чиге артып киткән',
 
 # "Undo" feature
 'undo-success' => 'Үзгәртүдән баш тартып була.
index d963c42..76562a2 100644 (file)
@@ -43,7 +43,7 @@ $messages = array(
 'tog-extendwatchlist' => 'كۈچەيتىلگەن كۆزەت تىزىملىكىدە يېقىنقى ئۆزگەرتىشنىلا كۆرسەتمەي بەلكى ھەممە ئۆزگەرتىشنى كۆرسەت',
 'tog-usenewrc' => 'بەت گۇرۇپپىلىنىشىغا ئاساسەن يېقىنقى ئۆزگەرتىش ۋە كۆزەت تىزىمى (JavaScript زۆرۈر)',
 'tog-numberheadings' => 'ماۋزۇغا ئۆزلۈكىدىن تەرتىپ نومۇرى قوش',
-'tog-showtoolbar' => 'تÛ\95ھرÙ\89ر Ù\82Ù\88راÙ\84 Ø³ØªÙ\88Ù\86Ù\89نى كۆرسەت (JavaScript زۆرۈر)',
+'tog-showtoolbar' => 'تÛ\95ھرÙ\89ر Ù\82Ù\88راÙ\84 Ø¨Ø§Ù\84داÙ\82نى كۆرسەت (JavaScript زۆرۈر)',
 'tog-editondblclick' => 'قوش چەككەندە بەت تەھرىرلە (JavaScript زۆرۈر)',
 'tog-editsection' => '[تەھرىر] ئۇلانمىسىنى چېكىپ ئابزاس تەھرىرلەشكە يول قوي',
 'tog-editsectiononrightclick' => 'ماۋزۇنى چاشقىنەكتە ئوڭ چېكىپ ئابزاس تەھرىرلەشكە يول قوي (JavaScript زۆرۈر)',
@@ -62,7 +62,7 @@ $messages = array(
 'tog-enotifminoredits' => 'بەت ۋە ھۆججەت ئازراقلا تەھرىرلەنگەندىمۇ ئېلخەت يوللا',
 'tog-enotifrevealaddr' => 'ئۇقتۇرۇش ئېلخەت تىزىملىكىدە ئېلخەت ئادرېسىمنى ئاشكارىلا',
 'tog-shownumberswatching' => 'بۇ بەتنى كۆزىتىۋاتقان ئىشلەتكۈچى سانىنى كۆرسەت',
-'tog-oldsig' => 'Ù\85Û\95Û\8bجÛ\87ت ئىمزا:',
+'tog-oldsig' => 'Ù\86Û\86Û\8bÛ\95تتÙ\89Ù\83Ù\89 ئىمزا:',
 'tog-fancysig' => 'ئىمزاغا wiki تېكستى سۈپىتىدە مۇئامىلە قىل (ئۆزلۈكىدىن ئۇلانما ھاسىل بولمايدۇ)',
 'tog-externaleditor' => 'كۆڭۈلدىكى ئەھۋالدا سىرتقى تەھرىرلىگۈچ ئىشلىتىدۇ (ئالىي ئىشلەتكۈچىگە تەمىنلىنىدۇ، كومپيۇتېرىڭىزدا بىر قىسىم ئالاھىدە تەڭشەش ئېلىپ بېرىشىڭىز لازىم
 [//www.mediawiki.org/wiki/Manual:External_editors تېخىمۇ كۆپ ئۇچۇر.])',
@@ -79,6 +79,7 @@ $messages = array(
 'tog-ccmeonemails' => 'مەن باشقىلارغا يوللىغان ئېلخەتنى ئۆزەمگىمۇ بىر نۇسخا يوللا',
 'tog-diffonly' => 'تۈزىتىلگەن ئىككى نەشرىنىڭ پەرقىنى سېلىشتۇرغاندا بەت مەزمۇنىنى كۆرسەتمە',
 'tog-showhiddencats' => 'يوشۇرۇن تۈرلەرنى كۆرسەت',
+'tog-noconvertlink' => 'ئۇلانما ماۋزۇ ئالماشتۇرۇشنى چەكلە',
 'tog-norollbackdiff' => 'قايتۇرۇشنى ئىجرا قىلغاندىن كېيىن پەرقنى كۆرسەتمە',
 
 'underline-always' => 'دائىم',
@@ -161,7 +162,10 @@ $messages = array(
 'listingcontinuesabbrev' => 'داۋاملاشتۇر',
 'index-category' => 'ئىندېكسلانغان بەتلەر',
 'noindex-category' => 'ئىندېكسلانمىغان بەتلەر',
-'broken-file-category' => 'بۇزۇلغان ھۆججەتكە ئۇلانغان بەتلەر',
+'broken-file-category' => 'ھۆججەت ئۇلىنىشى بۇزۇلغان بەتلەر',
+'categoryviewer-pagedlinks' => '($1) ($2)',
+
+'linkprefix' => '/^(.*?)([a-zA-Z\\x80-\\xff]+)$/sD',
 
 'about' => 'ھەققىدە',
 'article' => 'مەزمۇن بېتى',
@@ -175,7 +179,7 @@ $messages = array(
 'and' => '&#32;ۋە',
 
 # Cologne Blue skin
-'qbfind' => 'ئىزدە',
+'qbfind' => 'ئىزدە:',
 'qbbrowse' => 'كۆز يۈگۈرت',
 'qbedit' => 'تەھرىر',
 'qbpageoptions' => 'بۇ بەت',
@@ -191,7 +195,7 @@ $messages = array(
 'vector-action-move' => 'يۆتكە',
 'vector-action-protect' => 'قوغدا',
 'vector-action-undelete' => 'ئەسلىگە قايتۇر',
-'vector-action-unprotect' => 'قوغداشنى ئۆزگەرت',
+'vector-action-unprotect' => 'قوغداش ئۆزگەرت',
 'vector-simplesearch-preference' => 'ئالىي ئىزدەش تەكلىپىنى ئاچ (Vector تېرىدىلا)',
 'vector-view-create' => 'قۇر',
 'vector-view-edit' => 'تەھرىر',
@@ -210,7 +214,7 @@ $messages = array(
 'searchbutton' => 'ئىزدە',
 'go' => 'يۆتكەل',
 'searcharticle' => 'يۆتكەل',
-'history' => 'بەت تارىخى',
+'history' => 'بەتنىڭ تارىخى',
 'history_short' => 'تارىخ',
 'updatedmarker' => 'مەن ئالدىنقى قېتىم زىيارەت قىلغاندىن بۇيانقى يېڭىلانغىنى',
 'printableversion' => 'باسقىلى بولىدىغان نەشرى',
@@ -224,11 +228,11 @@ $messages = array(
 'delete' => 'ئۆچۈر',
 'deletethispage' => 'بۇ بەتنى ئۆچۈر',
 'undelete_short' => 'ئۆچۈرۈلگەن {{PLURAL:$1|بىر تەھرىر|$1 تەھرىر}} ئەسلىگە كەلتۈرۈلدى',
-'viewdeleted_short' => '{{PLURAL:$1|بىر ئۆچۈرۈلگەن تەھرىر|$1 ئۆچۈرۈلگەن تەھرىر}}نى كۆرسەت',
+'viewdeleted_short' => '{{PLURAL:$1|بىر ئۆچۈرۈلگەن نەشرى|$1 ئۆچۈرۈلگەن نەشرى}}نى كۆرسەت',
 'protect' => 'قوغدا',
 'protect_change' => 'ئۆزگەرت',
 'protectthispage' => 'بۇ بەتنى قوغدا',
-'unprotect' => 'قوغداشنى ئۆزگەرت',
+'unprotect' => 'قوغداش ئۆزگەرت',
 'unprotectthispage' => 'بۇ بەتنى قوغداشنى ئۆزگەرت',
 'newpage' => 'يېڭى بەت',
 'talkpage' => 'بۇ بەتنىڭ مۇنازىرىسى',
@@ -239,7 +243,7 @@ $messages = array(
 'articlepage' => 'مەزمۇن بېتىنى كۆرسەت',
 'talk' => 'مۇنازىرە',
 'views' => 'كۆرۈنۈش',
-'toolbox' => 'Ù\82Ù\88راÙ\84 Ø³ØªÙ\88Ù\86ى',
+'toolbox' => 'Ù\82Ù\88راÙ\84 Ø³Ø§Ù\86دÛ\87Ù\82ى',
 'userpage' => 'ئىشلەتكۈچى بېتىنى كۆرسەت',
 'projectpage' => 'قۇرۇلۇش بېتىنى كۆرسەت',
 'imagepage' => 'ھۆججەت بېتىنى كۆرسەت',
@@ -277,7 +281,7 @@ $1',
 'disclaimerpage' => 'Project:ئادەتتىكى جاۋابكارلىقنى كەچۈرۈم قىلىش باياناتى',
 'edithelp' => 'تەھرىرلەش ياردىمى',
 'edithelppage' => 'Help:تەھرىرلەۋاتىدۇ',
-'helppage' => 'Help:Ù\85Û\95زÙ\85Û\87Ù\86Ù\89',
+'helppage' => 'Help:Ù\85Û\95زÙ\85Û\87Ù\86Ù\84ار',
 'mainpage' => 'باش بەت',
 'mainpage-description' => 'باش بەت',
 'policy-url' => 'Project:تاكتىكا',
@@ -295,13 +299,20 @@ $1',
 
 [[Special:Version|نەشر بېتى]] نى كۆرۈڭ.',
 
-'ok' => 'جەزملە',
+'ok' => 'ماقۇل',
+'pagetitle-view-mainpage' => '{{SITENAME}}',
+'backlinksubtitle' => '← $1',
 'retrievedfrom' => '"$1" دىن ئېرىشكەن',
 'youhavenewmessages' => 'سىزدە $1 ($2) بار.',
 'newmessageslink' => 'يېڭى ئۇچۇر',
 'newmessagesdifflink' => 'ئاخىرقى ئۆزگەرتىش',
+'youhavenewmessagesfromusers' => 'سىزنىڭ {{PLURAL:$3|باشقا ئىشلەتكۈچى|$3 ئىشلەتكۈچى}} $1  ($2)ڭىز بار.',
+'youhavenewmessagesmanyusers' => 'سىزنىڭ نۇرغۇن ئىشلەتكۈچىدىن كەلگەن $1  ($2) بار.',
+'newmessageslinkplural' => '{{PLURAL:$1|بىر يېڭى |يېڭى ئۇچۇر}}ئۇچۇر',
+'newmessagesdifflinkplural' => 'ئاخىرقى $1 {{PLURAL:$1|ئۆزگەرتىش|ئۆزگەرتىش}}',
 'youhavenewmessagesmulti' => '$1 يېڭى ئۇچۇرىڭىز بار',
 'editsection' => 'تەھرىر',
+'editsection-brackets' => '[$1]',
 'editold' => 'تەھرىر',
 'viewsourceold' => 'مەنبەنى كۆرسەت',
 'editlink' => 'تەھرىر',
@@ -310,7 +321,7 @@ $1',
 'toc' => 'مەزمۇنى',
 'showtoc' => 'كۆرسەت',
 'hidetoc' => 'يوشۇر',
-'collapsible-collapse' => 'قاتلا',
+'collapsible-collapse' => 'ئابزاس ئايرىمىسى يوشۇر',
 'collapsible-expand' => 'ياي',
 'thisisdeleted' => 'كۆرسەت ياكى ئەسلىگە كەلتۈر $1 ؟',
 'viewdeleted' => '$1 كۆرسەت؟',
@@ -322,9 +333,11 @@ $1',
 'site-atom-feed' => '$1 نىڭ Atom قانالى',
 'page-rss-feed' => '"$1" نىڭ RSS قانىلى',
 'page-atom-feed' => '"$1" نىڭ Atom قانىلى',
+'feed-atom' => 'ئاتوم',
+'feed-rss' => 'RSS',
 'red-link-title' => '$1 (بەت مەۋجۇد ئەمەس)',
-'sort-descending' => 'كېمەيگۈچى تەرتىپتە تەرتىپلە',
-'sort-ascending' => 'ئۆسكۈچى تەرتىپتە تەرتىپلە',
+'sort-descending' => 'كېمەيگۈچى تەرتىپ',
+'sort-ascending' => 'ئۆسكۈچى تەرتىپ',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-main' => 'بەت',
@@ -397,11 +410,14 @@ MySQL قايتۇرغان خاتالىقى"$3: $4"',
 'cannotdelete' => 'بەلگىلەنگەن "$1" ھۆججەت ياكى بەتنى ئۆچۈرەلمىدى.
 
 ئۇ باشقىلار تەرىپىدىن ئۆچۈرۈلگەن بولۇشى مۇمكىن.',
+'cannotdelete-title' => '"$1" بەتنى ئۆچۈرەلمەيدۇ',
+'delete-hook-aborted' => 'ئۆچۈرۈش ئىلمەك تەرىپىدىن چېكىندۈرۈلدى
+ئۇ سەۋەبىنى تەمىنلىمىدى.',
 'badtitle' => 'خاتا ماۋزۇ',
 'badtitletext' => 'ئىلتىماس قىلىنغان بەتنىڭ ماۋزۇسى ئىناۋەتسىز، مەۋجۇد ئەمەس، تىل ھالقىغان ياكى wiki ئۇلانمىسىدىن ھالقىغان ماۋزۇ خاتالىقى.
 ئۇ بىر ياكى بىر قانچە ماۋزۇغا ئىشلەتكىلى بولمايدىغان ھەرپنى ئۆز ئىچىگە ئالغان.',
-'perfcached' => 'تۆۋەندىكىسى غەملەك سانلىق مەلۇماتى، شۇڭلاشقا يېڭى بولماسلىقى مۇمكىن. A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.',
-'perfcachedts' => 'تۆۋەندىكىسى غەملەك سانلىق مەلۇماتى، ئاخىرقى يېڭىلانغان ۋاقتى $1. A maximum of {{PLURAL:$4|one result is|$4 results are}} available in the cache.',
+'perfcached' => 'تۆۋەندىكىسى غەملەك سانلىق مەلۇماتى، شۇڭلاشقا يېڭى بولماسلىقى مۇمكىن. ئەڭ كۆپ بولغاندا غەملەكتىكى {{PLURAL:$1|بىر تۈر|$1 تۈر}} نى ئىشلەتكىلى بولىدۇ.',
+'perfcachedts' => 'تۆۋەندىكىسى غەملەك سانلىق مەلۇماتى، ئاخىرقى يېڭىلانغان ۋاقتى $1. ئەڭ كۆپ بولغاندا غەملەكتىكى {{PLURAL:$1|بىر تۈر|$1 تۈر}} نى ئىشلەتكىلى بولىدۇ.',
 'querypage-no-updates' => 'نۆۋەتتە مەزكۇر بەتنى يېڭىلاش چەكلەندى.
 
 بۇ جايدىكى سانلىق مەلۇماتنى دەرھال يېڭىلىغىلى بولمايدۇ.',
@@ -411,12 +427,14 @@ MySQL قايتۇرغان خاتالىقى"$3: $4"',
 
 سۈرۈشتۈرۈش: $2',
 'viewsource' => 'مەنبەنى كۆرسەت',
+'viewsource-title' => '$1 نىڭ ئەسلى كودىنى كۆرسەت',
 'actionthrottled' => 'مەشغۇلات چەكلەندى',
 'actionthrottledtext' => 'ئەخلەتكە قارشى تۇرۇش ئۆلچىمىگە ئاساسەن، سىز بۇ بىر بۆلۈك قىسقا ۋاقىتتا بۇ مەشغۇلاتنى ئېلىپ بېرىشىڭىزنى چەكلىدى، ئەمما سىز بۇ چەكتىن ئېشىپ كەتتىڭىز.
 
 بىر قانچە مىنۇتتىن كېيىن قايتا سىناڭ.',
 'protectedpagetext' => 'بۇ بەت تەھرىرلەشنىڭ ئالدىنى ئېلىش ئۈچۈن قۇلۇپلانغان.',
 'viewsourcetext' => 'سىز بۇ بەتنى ئەسلى كودىنى كۆرەلەيسىز ۋە كۆچۈرەلەيسىز:',
+'viewyourtext' => "بۇ بەتتىكى '''تەھرىرلىگەنلىرىڭىز'''نىڭ ئەسلى كودىنى كۆرۈپ كۆچۈرەلەيسىز.",
 'protectedinterface' => 'بۇ بەت يۇمشاق دېتالنىڭ كۆرۈنۈش تېكستىنى تەمىنلىگەن، خالىغانچە تەھرىرلەشتىن ساقلىنىش ئۈچۈن قۇلۇپلانغان.',
 'editinginterface' => "'''ئاگاھلاندۇرۇش:''' سىز تەھرىرلەۋاتقان بەت يۇمشاق دېتالنىڭ كۆرۈنۈش تېكستىگە ئىشلىتىلىدۇ.
 
@@ -434,6 +452,13 @@ $2',
 'titleprotected' => 'بۇ ماۋزۇ قايتا قۇرۇشتىن ساقلىنىش ئۈچۈن [[User:$1|$1]] تەرىپىدىن قوغدالغان.
 
 سەۋەبى"\'\'$2\'\'" .',
+'filereadonlyerror' => 'بۇ ھۆججەت "$1" نى ئۆزگەرتەلمەيدۇ چۈنكى ھۆججەت خەزىنە "$2" سى پەقەت ئوقۇشقىلا بولىدىغان ھالەتتە.
+
+قۇلۇپلىغان باشقۇرغۇچى تەمىنلىگەن چۈشەندۈرۈش: "$3".',
+'invalidtitle-knownnamespace' => 'ئات بوشلۇقى "$2" ۋە تېكىست "$3" نى ئىشلەتكەن ئىناۋەتسىز ماۋزۇ',
+'invalidtitle-unknownnamespace' => 'يوچۇن ئات بوشلۇقى نومۇرى $1 ۋە تېكىست "$2" نى ئىشلەتكەن ئىناۋەتسىز ماۋزۇ',
+'exception-nologin' => 'تىزىمغا كىرمىدى',
+'exception-nologin-text' => 'بۇ بەت ياكى مەشغۇلات مەزكۇر ۋىكىغا تىزىمغا كىرىشىڭىزنى تەلەپ قىلىدۇ.',
 
 # Virus scanner
 'virus-badscanner' => "بۇزۇلغان سەپلىمە: نامەلۇم ۋىرۇسخور: ''$1''",
@@ -454,28 +479,29 @@ $2',
 'yourpassword' => 'ئىم:',
 'yourpasswordagain' => 'ئاچقۇچنى قايتا بەسىڭ:',
 'remembermypassword' => 'بۇ كومپيۇتېردا كىرگىنىمنى ئەستە ساقلا(ئەڭ ئۇزۇن بولغاندا $1 {{PLURAL:$1|كۈن|كۈن}})',
-'securelogin-stick-https' => 'تÙ\89زÙ\89Ù\85غا Ù\83Ù\89رگÛ\95Ù\86دÙ\89Ù\86 Ù\83Û\90Ù\8aÙ\89Ù\86 HTTPS Ø¨Ø§ØºÙ\84Ù\89Ù\86Ù\89Ø´Ù\89Ù\86Ù\89 Ø¦Ù\89Ø´Ù\84Û\95ت',
+'securelogin-stick-https' => 'تÙ\89زÙ\89Ù\85غا Ù\83Ù\89رگÛ\95Ù\86دÙ\89Ù\86 Ù\83Û\90Ù\8aÙ\89Ù\86 HTTPS Ø¨Ø§ØºÙ\84Ù\89Ù\86Ù\89Ø´Ù\86Ù\89 Ø¯Ø§Û\8bاÙ\85Ù\84اشتÛ\87ر',
 'yourdomainname' => 'دائىرە ئاتىڭىز:',
+'password-change-forbidden' => 'بۇ ۋىكىدىكى ئىمنى ئۆزگەرتەلمەيسىز.',
 'externaldberror' => 'بۇ سانداننى دەلىللەش خاتالىقى ياكى سىرتقى ھېساباتىڭىزنى يېڭىلاشنى چەكلىگەنلىكتىن بولغان بولۇشى مۇمكىن.',
 'login' => 'تىزىمغا كىر',
-'nav-login-createaccount' => 'كىر / ھېسابات قۇر',
+'nav-login-createaccount' => 'تىزىمغا كىر/ھېسابات قۇر',
 'loginprompt' => 'سىز cookies نى قوزغاتقاندىلا ئاندىن   {{SITENAME}} غا كىرەلەيسىز.',
 'userlogin' => 'تىزىمغا كىر/ھېسابات قۇر',
 'userloginnocreate' => 'تىزىمغا كىر',
 'logout' => 'تىزىمدىن چىق',
 'userlogout' => 'تىزىمدىن چىق',
-'notloggedin' => 'تىزىمغا كىرمىگەن',
+'notloggedin' => 'تىزىمغا كىرمىدى',
 'nologin' => "ھېساباتىڭىز يوقمۇ؟ '''$1'''.",
 'nologinlink' => 'ھېساباتتىن بىرنى قۇر',
 'createaccount' => 'ھېسابات قۇر',
 'gotaccount' => "ھېساباتىم بار؟ '''$1'''.",
 'gotaccountlink' => 'تىزىمغا كىر',
-'userlogin-resetlink' => 'تىزىمغا كىرىش تەپسىلاتىڭىزنى ئۇنۇتتىڭىز؟',
+'userlogin-resetlink' => 'تىزىمغا كىرىش تەپسىلاتىنى ئۇنۇتتىڭىز؟',
 'createaccountmail' => 'ئېلخەتتە',
 'createaccountreason' => 'سەۋەب:',
 'badretype' => 'سىز كىرگۈزگەن ئىم ماس كەلمىدى.',
-'userexists' => 'كىرگۈزگەن ئىشلەتكۈچى ئاتى مەۋجۇد.
-باشقا ئاتتىن بىرنى تاللاڭ.',
+'userexists' => 'كىرگۈزگەن ئىشلەتكۈچى ئاتى ئىشلىتىلىۋاتىدۇ.
+باشقا ئاتنى تاللاڭ.',
 'loginerror' => 'تىزىمغا كىرىش خاتالىقى',
 'createaccounterror' => 'ھېسابات قۇرالمىدى: $1',
 'nocookiesnew' => 'ئىشلەتكۈچى ھېساباتى قۇرۇلدى ئەمما سىز تېخى كىرمىدىڭىز..
@@ -490,15 +516,16 @@ $2',
 سىز cookies نى چەكلىگەن.
 
 ئۇنى قوزغىتىپ قايتا سىناڭ.',
-'nocookiesfornew' => 'بۇ ئىشلەتكۈچى ھېساباتى قۇرۇلمىدى، ئۇنىڭ مەنبەسىنى جەزملىيەلمەيمىز.
-سىز cookie نى قوزغاتقانلىقىڭىزنى جەزملەپ، بۇ بەتنى قايتا يۈكلەپ ئاندىن قايتا سىناڭ.',
+'nocookiesfornew' => 'ئىشلەتكۈچى ھېساباتى قۇرۇلمىدى، ئۇنىڭ مەنبەسىنى جەزملىيەلمەيمىز.
+cookies نى قوزغاتقانلىقىڭىزنى جەزملەڭ، بۇ بەتنى قايتا يۈكلەپ ئاندىن قايتا سىناڭ.',
+'nocookiesforlogin' => '{{int:nocookieslogin}}',
 'noname' => 'سىز تېخى ئىناۋەتلىك ئىشلەتكۈچى ئاتىنى بەلگىلىمىدىڭىز.',
 'loginsuccesstitle' => 'تىزىمغا كىرىش مۇۋەپپەقىيەتلىك',
 'loginsuccess' => "'''سىز {{SITENAME}} غا \"\$1\" سالاھىيىتىدە كىردىڭىز.'''",
 'nosuchuser' => '"$1" ئاتلىق ئىشلەتكۈچىنى تاپالمىدى.
 ئىشلەتكۈچى ئاتىنى تەكشۈرۈڭ.
 ياكى [[Special:UserLogin/signup|يېڭى ھېسابات قۇرۇڭ]].',
-'nosuchusershort' => ' "$1" ئاتلىق ئىشلەتكۈچى يوق.
+'nosuchusershort' => '"$1" ئاتلىق ئىشلەتكۈچى يوق.
 كىرگۈزگىنىڭىزنى تەكشۈرۈڭ.',
 'nouserspecified' => 'ئىشلەتكۈچى ئاتىدىن بىرنى بەلگىلەڭ.',
 'login-userblocked' => 'بۇ ئىشلەتكۈچى چەكلەنگەن. تىزىمغا كىرىشكە يول قويۇلمايدۇ.',
@@ -508,7 +535,7 @@ $2',
 قايتا سىناڭ.',
 'passwordtooshort' => 'ئىم ئاز دېگەندە {{PLURAL:$1|1 ھەرپ|$1 ھەرپ}} بولۇشى لازىم.',
 'password-name-match' => 'ئىم ئىشلەتكۈچى ئاتىڭىزدىن پەرقلىنىشى لازىم.',
-'password-login-forbidden' => 'بۇ ئىشلەتكۈچى ئاتى ۋە ئىمنى ئىشلىتىش چەكلەنگەن.',
+'password-login-forbidden' => 'بۇ ئىشلەتكۈچى ئاتى ۋە ئىم چەكلەنگەن.',
 'mailmypassword' => 'يېڭى ئىمنى ئېخەتكە ئەۋەت',
 'passwordremindertitle' => '{{SITENAME}} ئۈچۈن يېڭى ۋاقىتلىق ئىم',
 'passwordremindertext' => 'باشقىلار (بەلكىم سىز، IP ئادرېسى $1)
@@ -536,9 +563,10 @@ $2',
 'emailnotauthenticated' => 'ئېلخەت ئادرېسىڭىز تېخى دەلىللەنمىدى.
 تۆۋەندىكى ئىقتىدارى ھېچقانداق ئېلخەت ئەۋەتمەيدۇ.',
 'noemailprefs' => 'بۇ ئىقتىدارنى ئىشلىتىش ئۈچۈن مايىللىق تەڭشىكىڭىزدە ئېلخەت ئادرېسى بەلگىلەڭ.',
-'emailconfirmlink' => 'ئېلخەت ئادرېسىڭىزنى جەزملەڭ',
+'emailconfirmlink' => 'ئېلخەت مەنزىلىڭىزنى جەزملەڭ',
 'invalidemailaddress' => 'ئېلخەت ئادرېس فورماتى خاتا.
 توغرا ئېلخەت ئادرېسى كىرگۈزۈڭ ياكى بۇ جاينى بوش قالدۇرۇڭ.',
+'emaildisabled' => 'بۇ تورتۇرا ئېلخەت يوللىيالمايدۇ.',
 'accountcreated' => 'ھېسابات قۇرۇلدى',
 'accountcreatedtext' => '$1 نىڭ ھېساباتى قۇرۇلدى.',
 'createaccount-title' => '{{SITENAME}} دا يېڭى ھېسابات قۇر',
@@ -549,18 +577,19 @@ $2',
 'usernamehasherror' => 'ئىشلەتكۈچى ئاتىدا مۇكەممەللىك كود ھەرپلىرى بولماسلىقى لازىم',
 'login-throttled' => 'سىز بۇ ھېساباتنىڭ ئىمنى كۆپ قېتىم سىنىدىڭىز.
 سەل تەخىر قىلىپ، ئاندىن قايتا سىناڭ.',
-'login-abort-generic' => 'تىزىمغا غەلبىلىك كىرەلمىدىڭىز - چېكىندى',
+'login-abort-generic' => 'تىزىمغا كىرەلمىدىڭىز - چېكىندى',
 'loginlanguagelabel' => 'تىل: $1',
 'suspicious-userlogout' => 'تىزىمدىن چىقىش ئىلتىماسىڭىز رەت قىلىندى، چۈنكى ئۇ بەلكىم بۇزۇلغان توركۆرگۈ ياكى غەملەك ۋاكالەتچىسى يوللىغان بولۇشى مۇمكىن.',
 
 # E-mail sending
-'php-mail-error-unknown' => 'PHP نىڭmail() فونكسىيەسىدىكى يوچۇن خاتالىق',
+'php-mail-error-unknown' => 'PHP نىڭ mail() فونكسىيەسىدىكى يوچۇن خاتالىق',
 'user-mail-no-addy' => 'ئېلخەت ئادرېسسىز خەت يوللاشنى سىنىدى.',
 
 # Change password dialog
 'resetpass' => 'ئىم ئۆزگەرت',
 'resetpass_announce' => 'سىز ۋاقىتلىق ئېلخەت جەزملەش كودىدا تىزىمغا كىرگەن.
 تىزىمغا كىرىشنى تاماملاشتا، بۇ جايدا يېڭى ئىم بەلگىلىشىڭىز لازىم:',
+'resetpass_text' => '<!-- بۇ يەرگە تېكست قوشۇڭ -->',
 'resetpass_header' => 'ھېسابات ئىمنى ئۆزگەرت',
 'oldpassword' => 'كونا ئىم:',
 'newpassword' => 'يېڭى ئىم:',
@@ -578,36 +607,45 @@ $2',
 'resetpass-temp-password' => 'ۋاقىتلىق ئىم:',
 
 # Special:PasswordReset
-'passwordreset' => 'ئىمنى ئەسلىگە قايتۇر',
+'passwordreset' => 'ئىمنى ئەسلىگە قايتۇرماق',
 'passwordreset-text' => 'بۇ جەدۋەل تاماملانسا ھېسابات تەپسىلاتىڭىزنى ئېلخەتىڭىزدە تاپشۇرۇۋالىسىز.',
-'passwordreset-legend' => 'ئىمنى ئەسلىگە قايتۇر',
+'passwordreset-legend' => 'ئىمنى ئەسلىگە قايتۇرماق',
 'passwordreset-disabled' => 'بۇ ۋىكىدا ئىمنى ئەسلىگە قايتۇرۇش چەكلەنگەن.',
 'passwordreset-pretext' => '{{PLURAL:$1||تۆۋەندىكى سانلىق مەلۇماتتىن بىرنى كىرگۈزۈڭ}}',
-'passwordreset-username' => 'ئÙ\89Ø´Ù\84Û\95تÙ\83Û\87Ú\86Ù\89 Ø¦Ù\89سÙ\85ى:',
+'passwordreset-username' => 'ئÙ\89Ø´Ù\84Û\95تÙ\83Û\88Ú\86Ù\89 Ø¦Ø§Øªى:',
 'passwordreset-domain' => 'دائىرە:',
-'passwordreset-email' => 'ئېلخەت ئادرېس:',
+'passwordreset-capture' => 'ھاسىل قىلىنغان ئېلخەتنى كۆرسىتەمدۇ؟',
+'passwordreset-capture-help' => 'ئەگەر بۇ رامكا تاللانسا، ئېلخەت (ۋاقىتلىق ئىمنى ئۆز ئىچىگە ئالىدۇ) كۆرسىتىپ ئىشلەتكۈچىگە يوللايدۇ.',
+'passwordreset-email' => 'ئېلخەت ئادرېس',
 'passwordreset-emailtitle' => '{{SITENAME}} دىكى ھېسابات تەپسىلاتى',
-'passwordreset-emailtext-ip' => 'بەزىلەر(بەلكىم سىز بولۇشىڭىز مۇمكىن) IP ئادرېس $1 ئارقىلىق {{SITENAME}} ($4) دىكى مۇناسىۋەتلىك ھېساباتنىڭ ئىم ئەسكەرتىشىگە ئېرىشىشنى تەلەپ قىلدى.  {{PLURAL:$3|ھېسابات|ھېسابات}} بىلەن شۇ ئېلخەت ئادرېس باغلانغان:
+'passwordreset-emailtext-ip' => 'باشقىلار (بەلكىم سىز، IP ئادرېسى $1)
+{{SITENAME}} ($4) دىكى ھېسابات تەپسىلات ئەسكەرتىشىنى ئىلتىماس قىلدى .
+تۆۋەندىكى ئىشلەتكۈچىنىڭ {{PLURAL:$3|ھېسابات|ھېسابات}}ى مۇشۇ ئېلخەتكە باغلانغان:
 
 $2
 
-بۇ {{PLURAL:$3|ۋاقىتلىق ئىم|ۋاقىتلىق ئىم}}نىڭ {{PLURAL:$5|كۈن|$5 كۈن}}دە ۋاقتى توشىدۇ.
-ھازىرلا تىزىمغا كىرىپ يېڭى ئىم تەڭشەڭ. ئەگەر ئىلتىماسنى باشقىلار ئوتتۇرىغا قويغان بولسا ياكى كونا ئىمنى ئەسكە ئالغان بولسىڭىز ئۆزگەرتىشنىڭ ھاجىتى يوق، بۇ ئۇچۇرغا پەرۋا قىلماي كونا ئىمنى داۋاملىق ئىشلىتىۋەرسىڭىز بولىدۇ.',
-'passwordreset-emailtext-user' => '{{SITENAME}} بېكەتتىكى $1 ئىشلەتكۈچى  {{SITENAME}}($4) دىكى مۇناسىۋەتلىك ھېساباتنىڭ ئىم ئەسكەرتىشىگە ئېرىشىشنى تەلەپ قىلدى.  {{PLURAL:$3|ھېسابات|ھېسابات}} بىلەن شۇ ئېلخەت ئادرېس باغلانغان:
+{{PLURAL:$3|بۇ ۋاقىتلىق ئىم|بۇ ۋاقىتلىق ئىم}} {{PLURAL:$5|بىر كۈن|$5 كۈن}}دە ۋاقتى ئۆتىدۇ. ئەگەر بۇ مەشغۇلاتنى سىز ئىلتىماس قىلغان بولسىڭىز، دەرھال تىزىمغا كىرىپ يېڭى ئىمدىن بىرنى تاللاڭ.
+سىز بەلگىلىگەن يېڭى ئىم  {{PLURAL:$5|كۈن|$5 كۈن}}دە ۋاقتى توشىدۇ. ئەگەر باشقىلار ئىلتىماس قىلغان بولسا ياكى ئۆزىڭىز بەلگىلىگەن ئىم ئېسىڭىزگە كېلىپ ئۇنى ئۆزگەرتمىسىڭىز، 
+بۇ ئۇچۇرغا پەرۋا قىلماي ئۆزىڭىزنىڭ كونا ئىمنى ئىشلىتىۋېرىڭ.',
+'passwordreset-emailtext-user' => '{{SITENAME}} دىكى $1 ئىشلەتكۈچى ھېسابات تەپسىلات ئەسكەرتىشىنى ئىلتىماس قىلدى .
+تۆۋەندىكى ئىشلەتكۈچىنىڭ {{PLURAL:$3|ھېسابات|ھېسابات}}($4)ى مۇشۇ ئېلخەتكە باغلانغان:
 
 $2
 
-بۇ {{PLURAL:$3|ۋاقىتلىق ئىم|ۋاقىتلىق ئىم}}نىڭ {{PLURAL:$5|كۈن|$5 كۈن}}دە ۋاقتى توشىدۇ.
-ھازىرلا تىزىمغا كىرىپ يېڭى ئىم تەڭشەڭ. ئەگەر ئىلتىماسنى باشقىلار ئوتتۇرىغا قويغان بولسا ياكى كونا ئىمنى ئەسكە ئالغان بولسىڭىز ئۆزگەرتىشنىڭ ھاجىتى يوق، بۇ ئۇچۇرغا پەرۋا قىلماي كونا ئىمنى داۋاملىق ئىشلىتىۋەرسىڭىز بولىدۇ.',
+{{PLURAL:$3|بۇ ۋاقىتلىق ئىم|بۇ ۋاقىتلىق ئىم}} {{PLURAL:$5|بىر كۈن|$5 كۈن}}دە ۋاقتى ئۆتىدۇ. ئەگەر بۇ مەشغۇلاتنى سىز ئىلتىماس قىلغان بولسىڭىز، دەرھال تىزىمغا كىرىپ يېڭى ئىمدىن بىرنى تاللاڭ.
+سىز بەلگىلىگەن يېڭى ئىم  {{PLURAL:$5|كۈن|$5 كۈن}}دە ۋاقتى توشىدۇ. ئەگەر باشقىلار ئىلتىماس قىلغان بولسا ياكى ئۆزىڭىز بەلگىلىگەن ئىم ئېسىڭىزگە كېلىپ ئۇنى ئۆزگەرتمىسىڭىز، 
+بۇ ئۇچۇرغا پەرۋا قىلماي ئۆزىڭىزنىڭ كونا ئىمنى ئىشلىتىۋېرىڭ.',
 'passwordreset-emailelement' => 'ئىشلەتكۈچى ئاتى: $1
 ۋاقىتلىق ئىم: $2',
-'passwordreset-emailsent' => 'ئەسكەرتىش ئېلخەت ئەۋەتىلدى.',
+'passwordreset-emailsent' => 'ئەسكەرتىش ئېلخەت يوللاندى.',
+'passwordreset-emailsent-capture' => 'ئەسكەرتىش ئېلخەت يوللاندى، تۆۋەندە كۆرسىتىلىدۇ.',
+'passwordreset-emailerror-capture' => 'ھاسىل قىلىنغان ئەسكەرتىش ئېلخەت تۆۋەندە كۆرسىتىلگەندەك ئەمما يوللىيالمىدى: $1',
 
 # Special:ChangeEmail
 'changeemail' => 'ئېلخەت ئادرېس ئۆزگەرت',
 'changeemail-header' => 'ھېساباتنىڭ ئېلخەت ئادرېسىنى ئۆزگەرت',
 'changeemail-text' => 'بۇ جەدۋەل تاماملانسا ئېلخەت ئادرېسىڭىزنى ئۆزگەرتىدۇ. سىز ئىم كىرگۈزۈپ بۇ ئۆزگەرتىشنى جەزملەيسىز.',
-'changeemail-no-info' => 'تÙ\89زÙ\89Ù\85غا Ù\83Ù\89رسÙ\89Ú­Ù\89ز Ø¦Ø§Ù\86دÙ\89Ù\86 Ø¨Û\87 Ø¨Û\95تÙ\86Ù\89 Ø¨Ù\89Û\8bاستÛ\95 Ø²Ù\89Ù\8aارÛ\95ت Ù\82Ù\89Ù\84اÙ\84اÙ\8aسÙ\89ز.',
+'changeemail-no-info' => 'سÙ\89ز ØªÙ\89زÙ\89Ù\85غا Ù\83Ù\89رگÛ\95Ù\86دÙ\89Ù\86 Ù\83Û\90Ù\8aÙ\89Ù\86 Ø¨Ù\89Û\8bاسÙ\89تÛ\95 Ø¨Û\87 Ø¨Û\95تÙ\83Û\95 Ù\83Ù\89رÙ\89Ø´Ù\89Ú­Ù\89ز Ù\84ازÙ\89Ù\85.',
 'changeemail-oldemail' => 'نۆۋەتتىكى ئېلخەت ئادرېسى:',
 'changeemail-newemail' => 'يېڭى ئېلخەت ئادرېسى:',
 'changeemail-none' => '(يوق)',
@@ -627,13 +665,15 @@ $2
 'headline_tip' => '2- دەرىجىلىك ماۋزۇ',
 'nowiki_sample' => 'فورماتى يوق تېكست قىستۇر',
 'nowiki_tip' => 'wiki فورماتىغا پەرۋا قىلما',
+'image_sample' => 'Example.jpg',
 'image_tip' => 'سىڭدۈرمە ھۆججەت',
+'media_sample' => 'Example.ogg',
 'media_tip' => 'ھۆججەت ئۇلىنىشى',
 'sig_tip' => 'ۋاقىت تامغىلىق ئىمزايىڭىز',
 'hr_tip' => 'توغرىسىغا سىزىق (ئېھتىيات بىلەن ئىشلىتىڭ)',
 
 # Edit pages
-'summary' => 'مۇھىم مەزمۇن:',
+'summary' => 'ئۈزۈندە',
 'subject' => 'تېما/ماۋزۇ:',
 'minoredit' => 'بۇ ئازراقلا تەھرىرلەش',
 'watchthis' => 'بۇ بەتنى كۆزەت',
@@ -706,11 +746,15 @@ $2
 [{{fullurl:{{FULLPAGENAME}}|action=edit}} بۇ بەتنى تەھرىرلىيەلەيسىز]</span>',
 'noarticletext-nopermission' => 'بۇ بەتتە ھازىرچە مەزمۇن يوق.
  سىز باشقا بەتتە [[Special:Search/{{PAGENAME}}|بۇ بەتنىڭ ماۋزۇسىنى ئىزدىيەلەيسىز]] ياكى <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}}] مۇناسىۋەتلىك خاتىرىسىنى ئىزدىيەلەيسىز،</span>',
+'missing-revision' => '"{{PAGENAME}}" ئاتلىق بەتنىڭ تۈزىتىلگەن نەشرى #$1 مەۋجۇت ئەمەس.
+
+ئادەتتە بۇ ئۆچۈرۈلگەن بىر بەتنىڭ ئۇلانمىسىغا كىرگەنلىك سەۋەبىدىن بولىدۇ.
+تەپسىلىي ئۇچۇرنى [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ئۆچۈرۈش خاتىرىسى] دىن تاپقىلى بولىدۇ.',
 'userpage-userdoesnotexist' => '"<nowiki>$1</nowiki>" ئىشلەتكۈچى خەتلەتمىگەن.
 بۇ بەتنى قۇرۇش/تەھرىرلەشتىن ئىلگىرى تەكشۈرۈپ بېقىڭ.',
 'userpage-userdoesnotexist-view' => '"$1" ئىشلەتكۈچى ھېساباتى خەتلەتمىگەن.',
 'blocked-notice-logextract' => 'بۇ ئىشلەتكۈچى نۆۋەتتە چەكلەنگەن.
-پايدىلىنىش ئۈچۈن يېقىنقى تۆۋەندە چەكلەش خاتىرە تۈرلىرى تەمىنلەندى:',
+پايدىلىنىش ئۈچۈن يېقىنقى چەكلەش خاتىرە تۈرلىرى تۆۋەندە تەمىنلەندى:',
 'clearyourcache' => "'''دىققەت''' - ساقلىغاندىن كېيىن، تور كۆرگۈنىڭ غەملىكىنى تازىلىغاندىن كېيىنلا ئاندىن ئېلىپ بارغان ئۆزگەرتىشنى كۆرەلەيسىز.
 * '''Mozilla / Firefox / Safari:''' دا ''Shift'' كۇنۇپكىسىنى بېسىپ تۇرۇپ ''قايتا يۈكلە''نى ياكى ''Ctrl-F5'' ياكى ''Ctrl-R'' (''Mac تا Command-R'')؛
 * '''Google Chrome:''' دا ''Ctrl-Shift-R'' (''Command-Shift-R''  Mac)
@@ -725,14 +769,15 @@ $2
 '''ئۇ تېخى ساقلانمىدى!'''",
 'sitecsspreview' => "'''دىققەت سىز پەقەت بۇ CSS نى ئالدىن كۆزىتىۋاتىسىز.'''
 '''ئۇ تېخى ساقلانمىدى!'''",
-'sitejspreview' => "'''دىققەت سىز پەقەت بۇ JavaScript  كودىنى ئالدىن كۆزىتىۋاتىسىز.'''
+'sitejspreview' => "'''دىققەت سىز پەقەت بۇ JavaScript كودنى ئالدىن كۆزىتىۋاتىسىز.'''
 '''ئۇ تېخى ساقلانمىدى!'''",
 'userinvalidcssjstitle' => "'''ئاگاھلاندۇرۇش:''' تېرە\\\"\$1\" مەۋجۇد ئەمەس.
 ئادەتلەنگەن .css ۋە .js تور بەت ماۋزۇسىغا كىچىك يېزىلىشتىكى ھەرپ ئىشلىتىلىدۇ، مەسىلەن، {{ns:user}}:Foo/vector.css بىلەن {{ns:user}}:Foo/Vector.css ئوخشاش ئەمەس.",
 'updated' => '(يېڭىلاندى)',
 'note' => "'''ئىزاھات:'''",
 'previewnote' => "'''ئېسىڭىزدە بولسۇنكى بۇ پەقەتلا ئالدىن كۆزىتىش.'''
-ئۆزگەرتكەنلىرىڭىز تېخى ساقلانمىدى!",
+ئۆزگەرتكەن مەزمۇنىڭىز تېخى ساقلانمىدى!",
+'continue-editing' => 'تەھرىرلەشنى داۋاملاشتۇر',
 'previewconflict' => 'بۇ ئالدىن كۆزىتىشتە ئۈستىدىكى تېكست تەھرىرلەش رايونىدىكى مەزمۇننى كۆرسەتتى. ئۇ ساقلانى تاللىغاندىن كېيىن كۆرۈنىدۇ.',
 'session_fail_preview' => "'''كەچۈرۈڭ! سىزنىڭ جەريان سانلىق مەلۇماتىڭىز يوقاپ كەتكەندە ئېلىپ بارغان تەھرىرىڭىزنى بىر تەرەپ قىلالمايمىز.'''
 قايتا سىناڭ.
@@ -746,8 +791,9 @@ $2
 'token_suffix_mismatch' => "'''سىزنىڭ ئىشلەتكۈچى تەرەپتىكى تەھرىر بۇيرۇقى بىر قىسىم تىنىش بەلگىلىرىنى بۇزۇۋەتتى، '''
 بەتتىكى تەھرىرلەۋاتقان تېكستنىڭ بۇزۇلۇشىنىڭ ئالدىنى ئېلىش ئۈچۈن تەھرىرىڭىز رەت قىلىندى.
 بۇ خىل ئەھۋال ئادەتتە نۇرغۇن خاتالىق بار تورنى ئاساس قىلغان ئاتسىز ۋاكالەتچىنى ئىشلەتكەندە كۆرۈلىدۇ.",
-'edit_form_incomplete' => "'''تÛ\95ھرÙ\89رÙ\84Ù\89Ú¯Û\95Ù\86 Ø¬Û\95دÛ\8bÛ\95Ù\84Ù\86Ù\89Ú­ Ø¨Û\95زÙ\89 Ø¨Û\86Ù\84Ù\89Ù\83Ù\89 Ù\85Û\87Ù\84ازÙ\89Ù\85Û\90تÙ\89رغا Ù\8aÛ\95تÙ\85Ù\89دÙ\89Ø\9b ØªÛ\95ھرÙ\89رÙ\84Ù\89Ú¯Û\95Ù\86 Ù\85Û\95زÙ\85Û\87Ù\86Ù\89Ú­Ù\89زÙ\86Ù\89Ú­ Ù\85Û\87Ù\83Û\95Ù\85Ù\85Û\95Ù\84لىكىنى تەكشۈرۈپ ئاندىن قايتا سىناڭ.'''",
+'edit_form_incomplete' => "'''تÛ\95ھرÙ\89رÙ\84Ù\89Ú¯Û\95Ù\86 Ø¬Û\95دÛ\8bÛ\95Ù\84Ù\86Ù\89Ú­ Ø¨Û\95زÙ\89 Ø¨Û\86Ù\84Ù\89Ù\83Ù\89 Ù\85Û\87Ù\84ازÙ\89Ù\85Û\90تÙ\89رغا Ù\8aÛ\90تÙ\89Ù¾ Ø¨Ø§Ø±Ù\85Ù\89دÙ\89Ø\9b ØªÛ\95ھرÙ\89رÙ\84Ù\89Ú¯Û\95Ù\86 Ù\85Û\95زÙ\85Û\87Ù\86Ù\89Ú­Ù\89زÙ\86Ù\89Ú­ ØªÙ\88Ù\84Û\87Ù\82 Ø¦Ù\89Ù\83Û\95Ù\86لىكىنى تەكشۈرۈپ ئاندىن قايتا سىناڭ.'''",
 'editing' => '$1 تەھرىرلەۋاتىدۇ',
+'creating' => '$1 قۇرۇۋاتىدۇ',
 'editingsection' => '$1 تەھرىرلەۋاتىدۇ (ئابزاس)',
 'editingcomment' => '$1 تەھرىرلەۋاتىدۇ (يېڭى ئابزاس)',
 'editconflict' => 'تەھرىر توقۇنۇشى: $1',
@@ -771,7 +817,7 @@ $2
 ئەگەر يازمىڭىزنىڭ خالىغانچە ئۆزگەرتىلىشى ياكى قايتا تارقىلىشىنى خالىمىسىڭىز، يوللىماڭ. <br />
  سىز يوللىغان مەزمۇننىڭ ئۆزىڭىزنىڭ يازغانلىقى ياكى يەرلىك تور دائىرىسىدىن ياكى ئەركىن مەنبە ($1 دىكى تەپسىلاتنى كۆرۈڭ) دىن كەلگەنلىكىگە كاپالەتلىك قىلىڭ.
 '''ئىجازەتكە ئېرىشمەي تۇرۇپ يوللىماڭ!'''",
-'longpageerror' => "'''خاتالىق: سىز يوللىغان تېكستنىڭ چوڭلۇقى $1 كىلوبايت، بۇ  $2 كىلوبايتلىق ئەڭ چوڭ قىممەتتىن ئېشىپ كەتتى.'''
+'longpageerror' => "'''خاتالىق: سىز يوللىغان تېكىستنىڭ چوڭلۇقى {{PLURAL:$1|بىر كىلوبايت |$1 كىلوبايت}}، بۇ  {{PLURAL:$2|بىر كىلوبايت|$2 كىلوبايت}}لىق ئەڭ چوڭ قىممەتتىن ئېشىپ كەتتى.'''
 ئۇنى ساقلىغىلى بولمايدۇ.",
 'readonlywarning' => "'''ئاگاھلاندۇرۇش: ساندان قۇلۇپلىنىپ ئاسرىلىۋاتىدۇ، شۇڭلاشقا ئۆزگەرتىشىڭىزنى ساقلىيالمايسىز.'''
 سىز بۇ تېكستنى كۆچۈرۈپ تېكست ھۆججىتىگە ساقلاپ، سەل تۇرۇپ ئاندىن ئۆزگەرتىڭ.
@@ -789,6 +835,8 @@ $2
 'template-protected' => '(قوغدالغان)',
 'template-semiprotected' => '(يېرىم قوغدالغان)',
 'hiddencategories' => 'بۇ بەت {{PLURAL:$1|1 يوشۇرۇن تۈر|$1 يوشۇرۇن تۈر}} نىڭ ئەزالىرىغا تەۋە:',
+'edittools' => '<!-- بۇ جايدىكى تېكىست جەدۋەل تەھرىرلەش ۋە يوللاشنىڭ ئاستى تەرىپىدە كۆرۈنىدۇ. -->',
+'edittools-upload' => '-',
 'nocreatetitle' => 'بەت قۇرۇش چەكلىمىسى',
 'nocreatetext' => '{{SITENAME}} يېڭى بەت قۇرۇش ئىقتىدارىنى چەكلىگەن.
 كەينىگە قايتىپ مەۋجۇد بەتنى تەھرىرلىيەلەيسىز ياكى [[Special:UserLogin|تىزىمغا كىر ياكى يېڭى بىر ھېسابات قۇر]]الايسىز.',
@@ -813,6 +861,7 @@ $2
 'edit-no-change' => 'تەھرىرلىگىنىڭىزگە پەرۋا قىلىنمىدى، چۈنكى تېكستتە ئۆزگىرىش بولمىدى.',
 'edit-already-exists' => 'يېڭى بەت قۇرالمىدى
 ئۇ مەۋجۇد.',
+'defaultmessagetext' => 'كۆڭۈلدىكى ئۇچۇر تېكستى',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => "'''ئاگاھلاندۇرۇش:''' بۇ بەت ناھايىتى كۆپ يۇقىرى سەرپىياتتىكى گىرامماتىكىلىق ئىقتىدارنى چاقىرغان.\\n
@@ -828,6 +877,13 @@ $2
 'parser-template-loop-warning' => 'قېلىپ دەۋرىيلىكى بايقالدى: [[$1]]',
 'parser-template-recursion-depth-warning' => 'قايتىلانما ئىپادە چوڭقۇر چەكلىمىسىدىن ئېشىپ كەتتى ($1)',
 'language-converter-depth-warning' => 'تىل ئالماشتۇرۇش چوڭقۇرلۇقى چەكتىن ئاشتى ($1)',
+'node-count-exceeded-category' => 'بەتنىڭ نۇقتا سانى چەكتىن ئېشىپ كەتتى',
+'node-count-exceeded-warning' => 'بەت نۇقتا سانىدىن ئېشىپ كەتتى',
+'expansion-depth-exceeded-category' => 'كېڭەيتىلگەن چوڭقۇرلۇق بەت چەكلىمىسىدىن ئېشىپ كەتتى',
+'expansion-depth-exceeded-warning' => 'بەت كېڭەيتىلگەن چوڭقۇرلۇقتىن ئېشىپ كەتتى',
+'parser-unstrip-loop-warning' => 'دەۋرىيلىك بايقالدى',
+'parser-unstrip-recursion-limit' => 'قايتىلانما چەكلىمە ($1) دىن ئېشىپ كەتتى',
+'converter-manual-rule-error' => 'قولدا ئالماشتۇرىدىغان قائىدىدە خاتالىق بايقالدى',
 
 # "Undo" feature
 'undo-success' => 'بۇ تەھرىردىن يېنىۋالغىلى بولىدۇ
@@ -877,7 +933,7 @@ $3 تەمىنلىگەن چەكلەش سەۋەبى ''$2''",
  [[Special:Search|wiki دىن ئىزدە]] نى سىناپ مۇناسىۋەتلىك يېڭى بەتكە ئېرىشىڭ.',
 
 # Revision deletion
-'rev-deleted-comment' => '(تەھرىر ئۈزۈندەسى چىقىرىۋېتىلدى)',
+'rev-deleted-comment' => '(تەھرىرلەش ئۈزۈندىسى چىقىرىۋېتىلدى)',
 'rev-deleted-user' => '(ئىشلەتكۈچى ئاتى چىقىرىۋېتىلدى)',
 'rev-deleted-event' => '(خاتىرە مەشغۇلاتى چىقىرىۋېتىلدى)',
 'rev-deleted-user-contribs' => '[ئىشلەتكۈچى ئاتى ياكى IP ئادرېس چىقىرىۋېتىلدى - تۆھپىدىن تەھرىرنى يوشۇر]',
@@ -886,24 +942,24 @@ $3 تەمىنلىگەن چەكلەش سەۋەبى ''$2''",
 'rev-deleted-text-unhide' => "بۇ بەتنىڭ تۈزىتىلگەن نەشرى '''ئۆچۈرۈلگەن'''.
 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ئۆچۈرۈش خاتىرىسى]دىن تەپسىلىي ئۇچۇرنى تاپقىلى بولىدۇ.
 داۋاملاشتۇرماقچى بولسىڭىز يەنىلا [$1 بۇ نەشرىنى كۆرسەت]ەلەيسىز.",
-'rev-suppressed-text-unhide' => "بÛ\87 Ø¨Û\95تÙ\86Ù\89Ú­ ØªÛ\88زÙ\89تÙ\89Ù\84Ú¯Û\95Ù\86 Ù\86Û\95شرÙ\89 '''Ù\8aÙ\88Ù\82Ù\89تÙ\89Ù\84غان'''.
-[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} Ù\8aÙ\88Ù\82Ù\89تÙ\89Ø´ Ø®Ø§ØªÙ\89رÙ\89سÙ\89]دÙ\89Ù\86 ØªÛ\95پسÙ\89Ù\84Ù\89Ù\8a Ø¦Û\87Ú\86Û\87رÙ\86Ù\89 ØªØ§Ù¾Ù\82Ù\89Ù\84Ù\89 Ø¨Ù\88Ù\84Ù\89دÛ\87.باشÙ\82Û\87رغÛ\87Ú\86Ù\89 Ø¨Ù\88Ù\84Û\87Ø´ Ø³Û\88Ù¾Ù\89تÙ\89دÛ\95Ø\8c داۋاملاشتۇرماقچى بولسىڭىز يەنىلا [$1 بۇ تۈزىتىلگەن نەشرىنى كۆرسەت]ەلەيسىز.",
+'rev-suppressed-text-unhide' => "بÛ\87 Ø¨Û\95تÙ\86Ù\89Ú­ ØªÛ\88زÙ\89تÙ\89Ù\84Ú¯Û\95Ù\86 Ù\86Û\95شرÙ\89 '''Ù\86ازارÛ\95تÚ\86Ù\89 Ù\8aÙ\88Ø´Û\87رغان'''.
+[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} Ù\86ازارÛ\95تÚ\86Ù\89 Ù\8aÙ\88Ø´Û\87رÛ\87Ø´ Ø®Ø§ØªÙ\89رÙ\89سÙ\89]دÙ\89Ù\86 ØªÛ\95پسÙ\89Ù\84Ù\89Ù\8a Ø¦Û\87Ú\86Û\87رÙ\86Ù\89 ØªØ§Ù¾Ù\82Ù\89Ù\84Ù\89 Ø¨Ù\88Ù\84Ù\89دÛ\87. Ø¦Û\95Ú¯Û\95ر داۋاملاشتۇرماقچى بولسىڭىز يەنىلا [$1 بۇ تۈزىتىلگەن نەشرىنى كۆرسەت]ەلەيسىز.",
 'rev-deleted-text-view' => "بۇ بەتنىڭ تۈزىتىلگەن نەشرى '''ئۆچۈرۈلگەن'''.
¨Ø§Ø´Ù\82Û\87رغÛ\87Ú\86Ù\89 Ø¨Ù\88Ù\84Û\87Ø´ Ø³Û\88Ù¾Ù\89تÙ\89Ú­Ù\89ز Ø¨Ù\89Ù\84Û\95Ù\86 Ø¦Û\87Ù\86Ù\89 Ù\83Û\86رÛ\95Ù\84Û\95Ù\8aسÙ\89ز.: ØªÛ\95پسÙ\89Ù\84اتÙ\89Ù\86Ù\89 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} Ø¦Û\86Ú\86Û\88رÛ\88Ø´ Ø®Ø§ØªÙ\89رÙ\89سÙ\89]دÙ\89Ù\86 ØªØ§Ù¾Ø§Ù\84اÙ\8aسÙ\89ز.",
-'rev-suppressed-text-view' => "بÛ\87 Ø¨Û\95تÙ\86Ù\89Ú­ ØªÛ\88زÙ\89تÙ\89Ù\84Ú¯Û\95Ù\86 Ù\86Û\95شرÙ\89 '''Ù\8aÙ\88Ù\82Ù\89تÙ\89Ù\84غان'''.
¨Ø§Ø´Ù\82Û\87رغÛ\87Ú\86Ù\89 Ø¨Ù\88Ù\84Û\87Ø´ Ø³Û\88Ù¾Ù\89تÙ\89Ú­Ù\89ز Ø¨Ù\89Ù\84Û\95Ù\86 Ø¦Û\87Ù\86Ù\89 Ù\83Û\86رÛ\95Ù\84Û\95Ù\8aسÙ\89ز.: ØªÛ\95پسÙ\89Ù\84اتÙ\89Ù\86Ù\89 [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} Ù\8aÙ\88Ù\82Ù\89تÙ\89ش خاتىرىسى]دىن تاپالايسىز.",
+ئۇنى كۆرەلەيسىز.: تەپسىلاتىنى [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ئۆچۈرۈش خاتىرىسى]دىن تاپالايسىز.",
+'rev-suppressed-text-view' => "بÛ\87 Ø¨Û\95تÙ\86Ù\89Ú­ ØªÛ\88زÙ\89تÙ\89Ù\84Ú¯Û\95Ù\86 Ù\86Û\95شرÙ\89 '''Ù\86ازارÛ\95تÚ\86Ù\89 Ù\8aÙ\88Ø´Û\87رغان'''.
¦Û\87Ù\86Ù\89 Ù\83Û\86رÛ\95Ù\84Û\95Ù\8aسÙ\89ز.: ØªÛ\95پسÙ\89Ù\84اتÙ\89Ù\86Ù\89 [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} Ù\86ازارÛ\95تÚ\86Ù\89 Ù\8aÙ\88Ø´Û\87رÛ\87ش خاتىرىسى]دىن تاپالايسىز.",
 'rev-deleted-no-diff' => "بۇ پەرقنى كۆرەلمەيسىز چۈنكى بىر قېتىملىق تۈزىتىلگەن نەشرى '''ئۆچۈرۈلگەن'''
 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ئۆچۈرۈش خاتىرىسى]دىن تەپسىلىي ئۇچۇرنى تاپقىلى بولىدۇ.",
 'rev-suppressed-no-diff' => "بۇ پەرقنى كۆرەلمەيسىز چۈنكى بىر قېتىملىق تۈزىتىلگەن نەشرى '''ئۆچۈرۈلگەن'''.",
 'rev-deleted-unhide-diff' => "بۇ بەتتىكى بىر قېتىملىق تۈزىتىلگەن نەشرى '''ئۆچۈرۈلگەن'''.
 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ئۆچۈرۈش خاتىرىسى]دىن تەپسىلىي ئۇچۇرنى تاپقىلى بولىدۇ.
¨Ø§Ø´Ù\82Û\87رغÛ\87Ú\86Ù\89 Ø¨Ù\88Ù\84Û\87Ø´ Ø³Û\88Ù¾Ù\89تÙ\89دÛ\95Ø\8c داۋاملاشتۇرماقچى بولسىڭىز يەنىلا [$1 بۇ تۈزىتىلگەن نەشرىنى كۆرسەت]ەلەيسىز.",
-'rev-suppressed-unhide-diff' => "بÛ\87 Ø¨Û\95تÙ\86Ù\89Ú­ ØªÛ\88زÙ\89تÙ\89Ù\84Ú¯Û\95Ù\86 Ù\86Û\95شرÙ\89 '''Ù\8aÙ\88Ù\82Ù\89تÙ\89Ù\84غان'''.
-[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} Ù\8aÙ\88Ù\82Ù\89تÙ\89Ø´ Ø®Ø§ØªÙ\89رÙ\89سÙ\89]دÙ\89Ù\86 ØªÛ\95پسÙ\89Ù\84Ù\89Ù\8a Ø¦Û\87Ú\86Û\87رÙ\86Ù\89 ØªØ§Ù¾Ù\82Ù\89Ù\84Ù\89 Ø¨Ù\88Ù\84Ù\89دÛ\87.باشÙ\82Û\87رغÛ\87Ú\86Ù\89 Ø¨Ù\88Ù\84Û\87Ø´ Ø³Û\88Ù¾Ù\89تÙ\89دÛ\95Ø\8c داۋاملاشتۇرماقچى بولسىڭىز يەنىلا [$1 بۇ تۈزىتىلگەن نەشرىنى كۆرسەت]ەلەيسىز.",
¦Û\95Ú¯Û\95ر داۋاملاشتۇرماقچى بولسىڭىز يەنىلا [$1 بۇ تۈزىتىلگەن نەشرىنى كۆرسەت]ەلەيسىز.",
+'rev-suppressed-unhide-diff' => "بÛ\87 Ø¨Û\95تÙ\86Ù\89Ú­ ØªÛ\88زÙ\89تÙ\89Ù\84Ú¯Û\95Ù\86 Ù\86Û\95شرÙ\89 '''Ù\86ازارÛ\95تÚ\86Ù\89 Ù\8aÙ\88Ø´Û\87رغان'''.
+[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} Ù\86ازارÛ\95تÚ\86Ù\89 Ù\8aÙ\88Ø´Û\87رÛ\87Ø´ Ø®Ø§ØªÙ\89رÙ\89سÙ\89]دÙ\89Ù\86 ØªÛ\95پسÙ\89Ù\84Ù\89Ù\8a Ø¦Û\87Ú\86Û\87رÙ\86Ù\89 ØªØ§Ù¾Ù\82Ù\89Ù\84Ù\89 Ø¨Ù\88Ù\84Ù\89دÛ\87. Ø¦Û\95Ú¯Û\95ر داۋاملاشتۇرماقچى بولسىڭىز يەنىلا [$1 بۇ تۈزىتىلگەن نەشرىنى كۆرسەت]ەلەيسىز.",
 'rev-deleted-diff-view' => "بۇ بەتنىڭ بىر قېتىملىق تۈزىتىلگەن نەشرى '''ئۆچۈرۈلگەن'''
-.باشقۇرغۇچى بولۇش سۈپىتىڭىز بىلەن بۇ پەرقنى كۆرەلەيسىز.: تەپسىلاتىنى [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ئۆچۈرۈش خاتىرىسى]دىن تاپالايسىز.",
-'rev-suppressed-diff-view' => "بÛ\87 Ø¨Û\95تÙ\86Ù\89Ú­ Ø¨Ù\89ر Ù\82Û\90تÙ\89Ù\85Ù\84Ù\89Ù\82 ØªÛ\88زÙ\89تÙ\89Ù\84Ú¯Û\95Ù\86 Ù\86Û\95شرÙ\89 '''Ù\8aÙ\88Ù\82Ù\89تÙ\89Ù\84غان'''.
اشقۇرغۇچى بولۇش سۈپىتىڭىز بىلەن بۇ پەرقنى كۆرەلەيسىز.: تەپسىلاتىنى [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} يوقىتىش خاتىرىسى]دىن تاپالايسىز.",
+بۇ پەرقنى كۆرەلەيسىز.: تەپسىلاتىنى [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ئۆچۈرۈش خاتىرىسى]دىن تاپالايسىز.",
+'rev-suppressed-diff-view' => "بÛ\87 Ø¨Û\95تÙ\86Ù\89Ú­ Ø¨Ù\89ر Ù\82Û\90تÙ\89Ù\85Ù\84Ù\89Ù\82 ØªÛ\88زÙ\89تÙ\89Ù\84Ú¯Û\95Ù\86 Ù\86Û\95شرÙ\89 '''Ù\86ازارÛ\95تÚ\86Ù\89 Ù\8aÙ\88Ø´Û\87رغان'''.
ۇ پەرقنى كۆرەلەيسىز.: تەپسىلاتىنى [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} نازارەتچى يوشۇرۇش خاتىرىسى]دىن تاپالايسىز.",
 'rev-delundel' => 'كۆرسەت/يوشۇر',
 'rev-showdeleted' => 'كۆرسەت',
 'revisiondelete' => 'تۈزىتىلگەن نەشرىنى ئۆچۈر/ئەسلىگە كەلتۈر',
@@ -968,9 +1024,9 @@ $1",
 'revdelete-offender' => 'تۈزەتكۈچى ئاپتور:',
 
 # Suppression log
-'suppressionlog' => 'خاتىرىنى چەكلە',
-'suppressionlogtext' => 'تۆۋەندىكىسى ئۆچۈرۈلگەن ۋە باشقۇرغۇچى چەكلىگەن مەزمۇنغا چېتىلىدىغان تىزىملىك.
- [[Special:IPBlockList|چەكلەنگەنIP تىزىملىكى]] نى كۆرۈڭ. نۆۋەتتە ئېلىپ بېرىلىۋاتقان چەكلەنگەن ۋە پىچەتلەنگەن تىزىملىكتىن كۆرۈڭ.',
+'suppressionlog' => 'خاتىرە نازارەت',
+'suppressionlogtext' => 'تۆۋەندىكىسى ئۆچۈرۈلگەن ۋە باشقۇرغۇچى چەكلىگەن مەزمۇنغا چېتىلىدىغان تىزىم.
+ [[Special:BlockList|چەكلەنگەن تىزىم]] نى كۆرۈڭ. نۆۋەتتە ئېلىپ بېرىلىۋاتقان چەكلەنگەن ۋە پىچەتلەنگەن تىزىمدىن كۆرۈڭ.',
 
 # History merging
 'mergehistory' => 'بەت تارىخىنى بىرلەشتۈر',
@@ -996,6 +1052,7 @@ $1",
 'mergehistory-comment' => '[[:$1]] نى [[:$2]] غا بىرلەشتۈرۈلدى: $3',
 'mergehistory-same-destination' => 'مەنبە بەت بىلەن نىشان بەت ئوخشاش بولسا بولمايدۇ',
 'mergehistory-reason' => 'سەۋەب:',
+'mergehistory-revisionrow' => '$1 ($2) $3 . . $4 $5 $6',
 
 # Merge log
 'mergelog' => 'بىرلەشتۈرۈش خاتىرىسى',
@@ -1004,7 +1061,9 @@ $1",
 'mergelogpagetext' => 'تۆۋەندىكىسى يېقىندا بىر بەتنىڭ تۈزىتىش تارىخىنىڭ باشقا بىر بەتكە بىرلەشتۈرۈلگەنلىك تىزىملىكى',
 
 # Diffs
-'history-title' => '"$1" نىڭ ئۆزگەرتىش نەشر تارىخى',
+'history-title' => '"$1" نىڭ ئۆزگەرتىش خاتىرىسى',
+'difference-title' => '"$1" تۈزىتىلگەن نەشرى ئارىسىدىكى پەرق',
+'difference-title-multipage' => '"$1" بىلەن "$2" بەت ئارىسىدىكى پەرق',
 'difference-multipage' => '(بەتلەر ئارىسىدىكى پەرق)',
 'lineno' => '$1 -قۇر:',
 'compareselectedversions' => 'تاللانغان نەشرىنى سېلىشتۇر',
index 2d45c75..9681abb 100644 (file)
@@ -1256,7 +1256,7 @@ $1",
 
 # Preferences page
 'preferences' => '系统设置',
-'mypreferences' => '我的参数设置',
+'mypreferences' => '我的设置',
 'prefs-edits' => '编辑数量:',
 'prefsnologin' => '尚未登录',
 'prefsnologintext' => '您必须先<span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} 登录]</span>才能设置个人参数。',
@@ -1264,9 +1264,9 @@ $1",
 'prefs-skin' => '皮肤',
 'skin-preview' => '预览',
 'datedefault' => '默认格式',
-'prefs-beta' => 'æµ\8bè¯\95ç\89\88ç\89¹è\89²',
+'prefs-beta' => 'æµ\8bè¯\95ç\89¹æ\80§',
 'prefs-datetime' => '日期时间',
-'prefs-labs' => '实验室特',
+'prefs-labs' => '实验室特',
 'prefs-user-pages' => '用户页面',
 'prefs-personal' => '用户资料',
 'prefs-rc' => '最近更改',
@@ -1317,7 +1317,7 @@ $1",
 'timezoneregion-indian' => '印度洋',
 'timezoneregion-pacific' => '太平洋',
 'allowemail' => '接受来自其他用户的邮件',
-'prefs-searchoptions' => '搜索选项',
+'prefs-searchoptions' => '搜索',
 'prefs-namespaces' => '名字空间',
 'defaultns' => '否则在这些名字空间中搜索:',
 'default' => '默认',
index 42d8440..2051c89 100644 (file)
@@ -41,7 +41,7 @@ class CleanupSpam extends Maintenance {
        public function execute() {
                global $wgLocalDatabases, $wgUser;
 
-               $username = wfMsg( 'spambot_username' );
+               $username = wfMessage( 'spambot_username' )->text();
                $wgUser = User::newFromName( $username );
                if ( !$wgUser ) {
                        $this->error( "Invalid username", true );
@@ -118,16 +118,16 @@ class CleanupSpam extends Maintenance {
                        if ( $rev ) {
                                // Revert to this revision
                                $this->output( "reverting\n" );
-                               $page->doEdit( $rev->getText(), wfMsgForContent( 'spam_reverting', $domain ),
+                               $page->doEdit( $rev->getText(), wfMessage( 'spam_reverting', $domain )->inContentLanguage()->text(),
                                        EDIT_UPDATE, $rev->getId() );
                        } elseif ( $this->hasOption( 'delete' ) ) {
                                // Didn't find a non-spammy revision, blank the page
                                $this->output( "deleting\n" );
-                               $page->doDeleteArticle( wfMsgForContent( 'spam_deleting', $domain ) );
+                               $page->doDeleteArticle( wfMessage( 'spam_deleting', $domain )->inContentLanguage()->text() );
                        } else {
                                // Didn't find a non-spammy revision, blank the page
                                $this->output( "blanking\n" );
-                               $page->doEdit( '', wfMsgForContent( 'spam_blanking', $domain ) );
+                               $page->doEdit( '', wfMessage( 'spam_blanking', $domain )->inContentLanguage()->text() );
                        }
                        $dbw->commit( __METHOD__ );
                }
index 9bdda09..b7ca88d 100644 (file)
@@ -35,7 +35,7 @@ class DumpMessages extends Maintenance {
 
                $messages = array();
                foreach ( array_keys( Language::getMessagesFor( 'en' ) ) as $key ) {
-                       $messages[$key] = wfMsg( $key );
+                       $messages[$key] = wfMessage( $key )->text();
                }
                $this->output( "MediaWiki $wgVersion language file\n" );
                $this->output( serialize( $messages ) );
index 5fd1a99..16580b8 100644 (file)
@@ -2399,6 +2399,7 @@ $wgMessageStructure = array(
                'import-interwiki-templates',
                'import-interwiki-submit',
                'import-interwiki-namespace',
+               'import-interwiki-rootpage',
                'import-upload-filename',
                'import-comment',
                'importtext',
@@ -2430,6 +2431,9 @@ $wgMessageStructure = array(
                'import-error-interwiki',
                'import-error-special',
                'import-error-invalid',
+               'import-options-wrong',
+               'import-rootpage-invalid',
+               'import-rootpage-nosubpage',
        ),
        'importlog' => array(
                'importlogpage',
index f846994..78db8b9 100644 (file)
@@ -102,7 +102,7 @@ class MoveBatch extends Maintenance {
                        $err = $source->moveTo( $dest, false, $reason );
                        if ( $err !== true ) {
                                $msg = array_shift( $err[0] );
-                               $this->output( "\nFAILED: " . wfMsg( $msg, $err[0] ) );
+                               $this->output( "\nFAILED: " . wfMessage( $msg, $err[0] )->text() );
                        }
                        $dbw->commit( __METHOD__ );
                        $this->output( "\n" );
index f30f07e..f3b521f 100644 (file)
@@ -28,7 +28,7 @@ class OrphanStats extends Maintenance {
                $this->mDescription = "how some statistics on the blob_orphans table, created with trackBlobs.php";
        }
 
-       private function getDB( $cluster ) {
+       protected function &getDB( $cluster, $groups = array(), $wiki = false ) {
                $lb = wfGetLBFactory()->getExternalLB( $cluster );
                return $lb->getConnection( DB_SLAVE );
        }
index a5e48fa..630b05c 100644 (file)
@@ -54,7 +54,7 @@ print Xml::openElement( 'OpenSearchDescription',
 //
 // Behavior seems about the same between Firefox and IE 7/8 here.
 // 'Description' doesn't appear to be used by either.
-$fullName = wfMsgForContent( 'opensearch-desc' );
+$fullName = wfMessage( 'opensearch-desc' )->inContentLanguage()->text();
 print Xml::element( 'ShortName', null, $fullName );
 print Xml::element( 'Description', null, $fullName );
 
index 214d9bc..155dace 100644 (file)
@@ -84,14 +84,14 @@ class CologneBlueTemplate extends LegacyTemplate {
 
                $s .= '<td class="top" nowrap="nowrap">';
                $s .= '<a href="' . htmlspecialchars( $mainPageObj->getLocalURL() ) . '">';
-               $s .= '<span id="sitetitle">' . wfMsg( 'sitetitle' ) . '</span></a>';
+               $s .= '<span id="sitetitle">' . $this->msg( 'sitetitle' )->text() . '</span></a>';
 
                $s .= '</td><td class="top" id="top-syslinks" width="100%">';
                $s .= $this->sysLinks();
                $s .= '</td></tr><tr><td class="top-subheader">';
 
                $s .= '<font size="-1"><span id="sitesub">';
-               $s .= htmlspecialchars( wfMsg( 'sitesubtitle' ) ) . '</span></font>';
+               $s .= htmlspecialchars( $this->msg( 'sitesubtitle' )->text() ) . '</span></font>';
                $s .= '</td><td class="top-linkcollection">';
 
                $s .= '<font size="-1"><span id="langlinks">';
@@ -136,7 +136,7 @@ class CologneBlueTemplate extends LegacyTemplate {
                                array( 'known', 'noclasses' )
                        ),
                        $this->getSkin()->aboutLink(),
-                       $this->searchForm( wfMsg( 'qbfind' ) )
+                       $this->searchForm( $this->msg( 'qbfind' )->text() )
                ) );
 
                $s .= "\n<br />" . $this->pageStats();
@@ -167,16 +167,16 @@ class CologneBlueTemplate extends LegacyTemplate {
                $s = array(
                        $this->getSkin()->mainPageLink(),
                        Linker::linkKnown(
-                               Title::newFromText( wfMsgForContent( 'aboutpage' ) ),
-                               wfMsg( 'about' )
+                               Title::newFromText( $this->msg( 'aboutpage' )->inContentLanguage()->text() ),
+                               $this->msg( 'about' )->text()
                        ),
                        Linker::linkKnown(
-                               Title::newFromText( wfMsgForContent( 'helppage' ) ),
-                               wfMsg( 'help' )
+                               Title::newFromText( $this->msg( 'helppage' )->inContentLanguage()->text() ),
+                               $this->msg( 'help' )->text()
                        ),
                        Linker::linkKnown(
-                               Title::newFromText( wfMsgForContent( 'faqpage' ) ),
-                               wfMsg( 'faq' )
+                               Title::newFromText( $this->msg( 'faqpage' )->inContentLanguage()->text() ),
+                               $this->msg( 'faq' )->text()
                        ),
                        Linker::specialLink( 'Specialpages' )
                );
@@ -191,14 +191,14 @@ class CologneBlueTemplate extends LegacyTemplate {
                if ( $this->data['loggedin'] ) {
                        $s[] = Linker::linkKnown(
                                $lo,
-                               wfMsg( 'logout' ),
+                               $this->msg( 'logout' )->text(),
                                array(),
                                $q
                        );
                } else {
                        $s[] = Linker::linkKnown(
                                $li,
-                               wfMsg( 'login' ),
+                               $this->msg( 'login' )->text(),
                                array(),
                                $q
                        );
@@ -257,8 +257,8 @@ class CologneBlueTemplate extends LegacyTemplate {
                        $s .= '<strong>' . $this->editThisPage() . '</strong>';
 
                        $s .= $sep . Linker::linkKnown(
-                               Title::newFromText( wfMsgForContent( 'edithelppage' ) ),
-                               wfMsg( 'edithelp' )
+                               Title::newFromText( $this->msg( 'edithelppage' )->inContentLanguage()->text() ),
+                               $this->msg( 'edithelp' )->text()
                        );
 
                        if( $this->data['loggedin'] ) {
@@ -311,7 +311,7 @@ class CologneBlueTemplate extends LegacyTemplate {
                if ( $this->data['loggedin'] ) {
                        $tl = Linker::link(
                                $user->getTalkPage(),
-                               wfMsg( 'mytalk' ),
+                               $this->msg( 'mytalk' )->text(),
                                array(),
                                array(),
                                array( 'known', 'noclasses' )
@@ -322,7 +322,7 @@ class CologneBlueTemplate extends LegacyTemplate {
 
                        $s .= Linker::link(
                                        $user->getUserPage(),
-                                       wfMsg( 'mypage' ),
+                                       $this->msg( 'mypage' )->text(),
                                        array(),
                                        array(),
                                        array( 'known', 'noclasses' )
@@ -330,7 +330,7 @@ class CologneBlueTemplate extends LegacyTemplate {
                                        . $sep .
                                Linker::link(
                                        SpecialPage::getSafeTitleFor( 'Contributions', $user->getName() ),
-                                       wfMsg( 'mycontris' ),
+                                       $this->msg( 'mycontris' )->text(),
                                        array(),
                                        array(),
                                        array( 'known', 'noclasses' )
@@ -352,12 +352,12 @@ class CologneBlueTemplate extends LegacyTemplate {
 
                if( $wgSiteSupportPage ) {
                        $s .= $sep . '<a href="' . htmlspecialchars( $wgSiteSupportPage ) . '" class="internal">'
-                                       . wfMsg( 'sitesupport' ) . '</a>';
+                                       . $this->msg( 'sitesupport' )->text() . '</a>';
                }
 
                $s .= $sep . Linker::link(
                        SpecialPage::getTitleFor( 'Specialpages' ),
-                       wfMsg( 'moredotdotdot' ),
+                       $this->msg( 'moredotdotdot' )->text(),
                        array(),
                        array(),
                        array( 'known', 'noclasses' )
@@ -372,7 +372,7 @@ class CologneBlueTemplate extends LegacyTemplate {
         * @return string
         */
        function menuHead( $key ) {
-               $s = "\n<h6>" . wfMsg( $key ) . "</h6>";
+               $s = "\n<h6>" . $this->msg( $key )->text() . "</h6>";
                return $s;
        }
 
@@ -392,12 +392,12 @@ class CologneBlueTemplate extends LegacyTemplate {
 
                $s .= "<input type='text' id=\"searchInput{$this->searchboxes}\" class=\"mw-searchInput\" name=\"search\" size=\"14\" value=\""
                        . htmlspecialchars( substr( $search, 0, 256 ) ) . "\" /><br />"
-                       . "<input type='submit' id=\"searchGoButton{$this->searchboxes}\" class=\"searchButton\" name=\"go\" value=\"" . htmlspecialchars( wfMsg( 'searcharticle' ) ) . "\" />";
+                       . "<input type='submit' id=\"searchGoButton{$this->searchboxes}\" class=\"searchButton\" name=\"go\" value=\"" . htmlspecialchars( wfMessage( 'searcharticle' )->text() ) . "\" />";
 
                if( $wgUseTwoButtonsSearchForm ) {
-                       $s .= "<input type='submit' id=\"mw-searchButton{$this->searchboxes}\" class=\"searchButton\" name=\"fulltext\" value=\"" . htmlspecialchars( wfMsg( 'search' ) ) . "\" />\n";
+                       $s .= "<input type='submit' id=\"mw-searchButton{$this->searchboxes}\" class=\"searchButton\" name=\"fulltext\" value=\"" . htmlspecialchars( $this->msg( 'search' )->text() ) . "\" />\n";
                } else {
-                       $s .= '<div><a href="' . $action . '" rel="search">' . wfMsg( 'powersearch-legend' ) . "</a></div>\n";
+                       $s .= '<div><a href="' . $action . '" rel="search">' . $this->msg( 'powersearch-legend' )->text() . "</a></div>\n";
                }
 
                $s .= '</form>';
index 98437e2..295058c 100644 (file)
@@ -99,8 +99,8 @@ class NostalgiaTemplate extends LegacyTemplate {
                } else {
                        /* show user page and user talk links */
                        $user = $this->getSkin()->getUser();
-                       $s .= $sep . Linker::link( $user->getUserPage(), wfMsgHtml( 'mypage' ) );
-                       $s .= $sep . Linker::link( $user->getTalkPage(), wfMsgHtml( 'mytalk' ) );
+                       $s .= $sep . Linker::link( $user->getUserPage(), $this->msg( 'mypage' )->escaped() );
+                       $s .= $sep . Linker::link( $user->getTalkPage(), $this->msg( 'mytalk' )->escaped() );
                        if ( $user->getNewtalk() ) {
                                $s .= ' *';
                        }
@@ -109,7 +109,7 @@ class NostalgiaTemplate extends LegacyTemplate {
                        /* show my contributions link */
                        $s .= $sep . Linker::link(
                                SpecialPage::getSafeTitleFor( 'Contributions', $this->data['username'] ),
-                               wfMsgHtml( 'mycontris' ) );
+                               $this->msg( 'mycontris' )->escaped() );
                        /* show my preferences link */
                        $s .= $sep . Linker::specialLink( 'Preferences' );
                        /* show upload file link */
index 1114e7d..0b43a13 100644 (file)
@@ -133,7 +133,7 @@ class StandardTemplate extends LegacyTemplate {
                                        $s.= Linker::specialLink( 'Watchlist' ) ;
                                        $s .= $sep . Linker::linkKnown(
                                                SpecialPage::getTitleFor( 'Contributions' ),
-                                               wfMsg( 'mycontris' ),
+                                               $this->msg( 'mycontris' )->text(),
                                                array(),
                                                array( 'target' => $this->data['username'] )
                                        );
@@ -158,34 +158,34 @@ class StandardTemplate extends LegacyTemplate {
                                                case NS_TEMPLATE_TALK:
                                                case NS_HELP_TALK:
                                                case NS_CATEGORY_TALK:
-                                                       $text = wfMsg('viewtalkpage');
+                                                       $text = $this->msg('viewtalkpage')->text();
                                                        break;
                                                case NS_MAIN:
-                                                       $text = wfMsg( 'articlepage' );
+                                                       $text = $this->msg( 'articlepage' )->text();
                                                        break;
                                                case NS_USER:
-                                                       $text = wfMsg( 'userpage' );
+                                                       $text = $this->msg( 'userpage' )->text();
                                                        break;
                                                case NS_PROJECT:
-                                                       $text = wfMsg( 'projectpage' );
+                                                       $text = $this->msg( 'projectpage' )->text();
                                                        break;
                                                case NS_FILE:
-                                                       $text = wfMsg( 'imagepage' );
+                                                       $text = $this->msg( 'imagepage' )->text();
                                                        break;
                                                case NS_MEDIAWIKI:
-                                                       $text = wfMsg( 'mediawikipage' );
+                                                       $text = $this->msg( 'mediawikipage' )->text();
                                                        break;
                                                case NS_TEMPLATE:
-                                                       $text = wfMsg( 'templatepage' );
+                                                       $text = $this->msg( 'templatepage' )->text();
                                                        break;
                                                case NS_HELP:
-                                                       $text = wfMsg( 'viewhelppage' );
+                                                       $text = $this->msg( 'viewhelppage' )->text();
                                                        break;
                                                case NS_CATEGORY:
-                                                       $text = wfMsg( 'categorypage' );
+                                                       $text = $this->msg( 'categorypage' )->text();
                                                        break;
                                                default:
-                                                       $text = wfMsg( 'articlepage' );
+                                                       $text = $this->msg( 'articlepage' )->text();
                                        }
 
                                        $link = $title->getText();
@@ -198,7 +198,7 @@ class StandardTemplate extends LegacyTemplate {
                                } elseif( $title->getNamespace() != NS_SPECIAL ) {
                                        # we just throw in a "New page" text to tell the user that he's in edit mode,
                                        # and to avoid messing with the separator that is prepended to the next item
-                                       $s .= '<strong>' . wfMsg( 'newpage' ) . '</strong>';
+                                       $s .= '<strong>' . $this->msg( 'newpage' )->text() . '</strong>';
                                }
                        }
 
@@ -206,7 +206,7 @@ class StandardTemplate extends LegacyTemplate {
                        if( ( $title->isTalkPage() || $this->getSkin()->getOutput()->showNewSectionLink() ) && $action != 'edit' && !$wpPreview )
                                $s .= '<br />' . Linker::link(
                                        $title,
-                                       wfMsg( 'postcomment' ),
+                                       $this->msg( 'postcomment' )->text(),
                                        array(),
                                        array(
                                                'action' => 'edit',
@@ -268,7 +268,7 @@ class StandardTemplate extends LegacyTemplate {
                global $wgSiteSupportPage;
                if( $wgSiteSupportPage ) {
                        $s .= "\n<br /><a href=\"" . htmlspecialchars( $wgSiteSupportPage ) .
-                       '" class="internal">' . wfMsg( 'sitesupport' ) . '</a>';
+                       '" class="internal">' . $this->msg( 'sitesupport' )->text() . '</a>';
                }
 
                $s .= "\n<br /></div>\n";
index 0f2165d..23067c1 100644 (file)
@@ -1604,6 +1604,23 @@ External links: [IDN ignored character reference in hostname; strip it right off
 </p>
 !! end
 
+# FIXME: This test (the IDN characters in the text of a link) is an inconsistency.
+# Where an external link could easily circumvent the sanitization of the text of
+# a link like this (where an IDN-ignore character is in the URL somewhere), this
+# test demands a higher standard. That's a bit strange.
+#
+# Example:
+#
+# http://e‌xample.com -> [http://example.com|http://example.com]
+# [http://example.com|http://e‌xample.com] -> [http://example.com|http://e‌xample.com]
+#
+# The first example is sanitized, but the second is not. Any security benefits
+# from this production are trivial to circumvent. Either remove this test and
+# let the parser(s) do their thing unaccosted, or fix the inconsistency and change
+# the test accordingly.
+#
+# All our love,
+# The Parsoid team.
 !! test
 External links: IDN ignored character reference in hostname; strip it right off
 !! input
index ef03e83..7a424ae 100644 (file)
@@ -140,4 +140,32 @@ class UserTest extends MediaWikiTestCase {
                        array( 'Ab cd', false, ' Ideographic space' ),
                );
        }
+
+       /**
+        * Test, if for all rights a right- message exist,
+        * which is used on Special:ListGroupRights as help text
+        * Extensions and core
+        */
+       public function testAllRightsWithMessage() {
+               //Getting all user rights, for core: User::$mCoreRights, for extensions: $wgAvailableRights
+               $allRights = User::getAllRights();
+               $allMessageKeys = Language::getMessageKeysFor( 'en' );
+
+               $rightsWithMessage = array();
+               foreach ( $allMessageKeys as $message ) {
+                       // === 0: must be at beginning of string (position 0)
+                       if ( strpos( $message, 'right-' ) === 0 ) {
+                               $rightsWithMessage[] = substr( $message, strlen( 'right-' ) );
+                       }
+               }
+
+               sort( $allRights );
+               sort( $rightsWithMessage );
+
+               $this->assertEquals(
+                       $allRights,
+                       $rightsWithMessage,
+                       'Each user rights (core/extensions) has a corresponding right- message.'
+               );
+       }
 }
index 0380152..ff6e472 100644 (file)
@@ -186,7 +186,7 @@ class NewParserTest extends MediaWikiTestCase {
                if ( !$this->db->selectField( 'image', '1', array( 'img_name' => $image->getName() ) ) ) {
                        $image->recordUpload2(
                                '', // archive name
-                               'Upload of some lame file', 
+                               'Upload of some lame file',
                                'Some lame file',
                                array(
                                        'size'        => 12345,
@@ -197,7 +197,7 @@ class NewParserTest extends MediaWikiTestCase {
                                        'mime'        => 'image/jpeg',
                                        'metadata'    => serialize( array() ),
                                        'sha1'        => wfBaseConvert( '', 16, 36, 31 ),
-                                       'fileExists'  => true ), 
+                                       'fileExists'  => true ),
                                $this->db->timestamp( '20010115123500' ), $user
                        );
                }
@@ -207,8 +207,8 @@ class NewParserTest extends MediaWikiTestCase {
                if ( !$this->db->selectField( 'image', '1', array( 'img_name' => $image->getName() ) ) ) {
                        $image->recordUpload2(
                                '', // archive name
-                               'zomgnotcensored', 
-                               'Borderline image', 
+                               'zomgnotcensored',
+                               'Borderline image',
                                array(
                                        'size'        => 12345,
                                        'width'       => 320,
@@ -218,7 +218,7 @@ class NewParserTest extends MediaWikiTestCase {
                                        'mime'        => 'image/jpeg',
                                        'metadata'    => serialize( array() ),
                                        'sha1'        => wfBaseConvert( '', 16, 36, 31 ),
-                                       'fileExists'  => true ), 
+                                       'fileExists'  => true ),
                                $this->db->timestamp( '20010115123500' ), $user
                        );
                }
@@ -383,7 +383,7 @@ class NewParserTest extends MediaWikiTestCase {
                # The entries saved into RepoGroup cache with previous globals will be wrong.
                RepoGroup::destroySingleton();
                FileBackendGroup::destroySingleton();
-               MessageCache::singleton()->destroyInstance();
+               MessageCache::destroyInstance();
 
                return $context;
        }
index 9cfdae4..58a8194 100644 (file)
--- a/thumb.php
+++ b/thumb.php
@@ -129,13 +129,13 @@ function wfStreamThumb( array $params ) {
                // Format is <timestamp>!<name>
                $bits = explode( '!', $fileName, 2 );
                if ( count( $bits ) != 2 ) {
-                       wfThumbError( 404, wfMsg( 'badtitletext' ) );
+                       wfThumbError( 404, wfMessage( 'badtitletext' )->text() );
                        wfProfileOut( __METHOD__ );
                        return;
                }
                $title = Title::makeTitleSafe( NS_FILE, $bits[1] );
                if ( !$title ) {
-                       wfThumbError( 404, wfMsg( 'badtitletext' ) );
+                       wfThumbError( 404, wfMessage( 'badtitletext' )->text() );
                        wfProfileOut( __METHOD__ );
                        return;
                }
@@ -147,7 +147,7 @@ function wfStreamThumb( array $params ) {
                // Get the name without the timestamp so hash paths are correctly computed
                $title = Title::makeTitleSafe( NS_FILE, isset( $bits[1] ) ? $bits[1] : $fileName );
                if ( !$title ) {
-                       wfThumbError( 404, wfMsg( 'badtitletext' ) );
+                       wfThumbError( 404, wfMessage( 'badtitletext' )->text() );
                        wfProfileOut( __METHOD__ );
                        return;
                }
@@ -172,7 +172,7 @@ function wfStreamThumb( array $params ) {
 
        // Check the source file storage path
        if ( !$img ) {
-               wfThumbError( 404, wfMsg( 'badtitletext' ) );
+               wfThumbError( 404, wfMessage( 'badtitletext' )->text() );
                wfProfileOut( __METHOD__ );
                return;
        }
@@ -243,15 +243,16 @@ function wfStreamThumb( array $params ) {
 
        // Check for thumbnail generation errors...
        $errorMsg = false;
+       $msg = wfMessage( 'thumbnail_error' );
        if ( !$thumb ) {
-               $errorMsg = wfMsgHtml( 'thumbnail_error', 'File::transform() returned false' );
+               $errorMsg = $msg->rawParams( 'File::transform() returned false' )->escaped();
        } elseif ( $thumb->isError() ) {
                $errorMsg = $thumb->getHtmlMsg();
        } elseif ( !$thumb->hasFile() ) {
-               $errorMsg = wfMsgHtml( 'thumbnail_error', 'No path supplied in thumbnail object' );
+               $errorMsg = $msg->rawParams( 'No path supplied in thumbnail object' )->escaped();
        } elseif ( $thumb->fileIsSource() ) {
-               $errorMsg = wfMsgHtml( 'thumbnail_error',
-                       'Image was not scaled, is the requested width bigger than the source?' );
+               $errorMsg = $msg->
+                       rawParams( 'Image was not scaled, is the requested width bigger than the source?' )->escaped();
        }
 
        if ( $errorMsg !== false ) {