Merge "Kill off numerous unused variables"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Sun, 10 Mar 2013 14:13:29 +0000 (14:13 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Sun, 10 Mar 2013 14:13:29 +0000 (14:13 +0000)
154 files changed:
RELEASE-NOTES-1.21
includes/AutoLoader.php
includes/DefaultSettings.php
includes/FeedUtils.php
includes/ImageGallery.php
includes/MappedIterator.php [new file with mode: 0644]
includes/OutputPage.php
includes/SpecialPage.php
includes/SpecialPageFactory.php
includes/WikiPage.php
includes/api/ApiBase.php
includes/api/ApiCreateAccount.php
includes/api/ApiQueryAllMessages.php
includes/api/ApiQueryWatchlist.php
includes/clientpool/RedisConnectionPool.php
includes/installer/Installer.i18n.php
includes/job/JobQueue.php
includes/job/JobQueueDB.php
includes/job/JobQueueRedis.php
includes/job/README
includes/limit.sh
includes/specials/SpecialActiveusers.php
includes/specials/SpecialAllmessages.php
includes/specials/SpecialAllpages.php
includes/specials/SpecialAncientpages.php
includes/specials/SpecialBlock.php
includes/specials/SpecialBlockList.php
includes/specials/SpecialBlockme.php
includes/specials/SpecialBooksources.php
includes/specials/SpecialBrokenRedirects.php
includes/specials/SpecialCategories.php
includes/specials/SpecialChangeEmail.php
includes/specials/SpecialChangePassword.php
includes/specials/SpecialComparePages.php
includes/specials/SpecialContributions.php
includes/specials/SpecialDeadendpages.php
includes/specials/SpecialDeletedContributions.php
includes/specials/SpecialDisambiguations.php
includes/specials/SpecialDoubleRedirects.php
includes/specials/SpecialEmailuser.php
includes/specials/SpecialExport.php
includes/specials/SpecialFewestrevisions.php
includes/specials/SpecialFileDuplicateSearch.php
includes/specials/SpecialFilepath.php
includes/specials/SpecialImport.php
includes/specials/SpecialJavaScriptTest.php
includes/specials/SpecialLinkSearch.php
includes/specials/SpecialListfiles.php
includes/specials/SpecialListgrouprights.php
includes/specials/SpecialListredirects.php
includes/specials/SpecialListusers.php
includes/specials/SpecialLockdb.php
includes/specials/SpecialLog.php
includes/specials/SpecialLonelypages.php
includes/specials/SpecialLongpages.php
includes/specials/SpecialMIMEsearch.php
includes/specials/SpecialMergeHistory.php
includes/specials/SpecialMostcategories.php
includes/specials/SpecialMostimages.php
includes/specials/SpecialMostinterwikis.php
includes/specials/SpecialMostlinked.php
includes/specials/SpecialMostlinkedcategories.php
includes/specials/SpecialMostlinkedtemplates.php
includes/specials/SpecialMostrevisions.php
includes/specials/SpecialMovepage.php
includes/specials/SpecialNewimages.php
includes/specials/SpecialNewpages.php
includes/specials/SpecialPagesWithProp.php
includes/specials/SpecialPasswordReset.php
includes/specials/SpecialPopularpages.php
includes/specials/SpecialPreferences.php
includes/specials/SpecialPrefixindex.php
includes/specials/SpecialProtectedpages.php
includes/specials/SpecialProtectedtitles.php
includes/specials/SpecialRandompage.php
includes/specials/SpecialRecentchanges.php
includes/specials/SpecialRevisiondelete.php
includes/specials/SpecialSearch.php
includes/specials/SpecialShortpages.php
includes/specials/SpecialSpecialpages.php
includes/specials/SpecialStatistics.php
includes/specials/SpecialTags.php
includes/specials/SpecialUnblock.php
includes/specials/SpecialUncategorizedimages.php
includes/specials/SpecialUncategorizedpages.php
includes/specials/SpecialUndelete.php
includes/specials/SpecialUnlockdb.php
includes/specials/SpecialUnusedcategories.php
includes/specials/SpecialUnusedimages.php
includes/specials/SpecialUnusedtemplates.php
includes/specials/SpecialUnwatchedpages.php
includes/specials/SpecialUpload.php
includes/specials/SpecialUserlogin.php
includes/specials/SpecialUserlogout.php
includes/specials/SpecialUserrights.php
includes/specials/SpecialVersion.php
includes/specials/SpecialWantedcategories.php
includes/specials/SpecialWantedfiles.php
includes/specials/SpecialWantedpages.php
includes/specials/SpecialWantedtemplates.php
includes/specials/SpecialWatchlist.php
includes/specials/SpecialWhatlinkshere.php
includes/specials/SpecialWithoutinterwiki.php
languages/messages/MessagesAf.php
languages/messages/MessagesAr.php
languages/messages/MessagesAst.php
languages/messages/MessagesBe_tarask.php
languages/messages/MessagesBho.php
languages/messages/MessagesBr.php
languages/messages/MessagesCkb.php
languages/messages/MessagesCy.php
languages/messages/MessagesDa.php
languages/messages/MessagesDe.php
languages/messages/MessagesEn.php
languages/messages/MessagesEs.php
languages/messages/MessagesEu.php
languages/messages/MessagesFa.php
languages/messages/MessagesFi.php
languages/messages/MessagesFr.php
languages/messages/MessagesGl.php
languages/messages/MessagesHe.php
languages/messages/MessagesHy.php
languages/messages/MessagesIa.php
languages/messages/MessagesId.php
languages/messages/MessagesIlo.php
languages/messages/MessagesIt.php
languages/messages/MessagesJa.php
languages/messages/MessagesKa.php
languages/messages/MessagesKo.php
languages/messages/MessagesLb.php
languages/messages/MessagesMk.php
languages/messages/MessagesNl.php
languages/messages/MessagesNn.php
languages/messages/MessagesPl.php
languages/messages/MessagesPt_br.php
languages/messages/MessagesQqq.php
languages/messages/MessagesRo.php
languages/messages/MessagesRoa_tara.php
languages/messages/MessagesRu.php
languages/messages/MessagesSl.php
languages/messages/MessagesSv.php
languages/messages/MessagesTg_cyrl.php
languages/messages/MessagesTh.php
languages/messages/MessagesTt_cyrl.php
languages/messages/MessagesUk.php
languages/messages/MessagesUz.php
languages/messages/MessagesVi.php
languages/messages/MessagesZh_hans.php
languages/messages/MessagesZh_hant.php
maintenance/language/messages.inc
maintenance/purgeParserCache.php
tests/phpunit/includes/EditPageTest.php
tests/phpunit/includes/api/ApiEditPageTest.php
tests/phpunit/includes/cache/MessageCacheTest.php

index d6ca336..883fb8b 100644 (file)
@@ -193,6 +193,7 @@ production.
   extensions) performed using Git 1.7.8+ should now appear.
 * (bug 42184) $wgUploadSizeWarning missing second variable
 * (bug 40326) Check if files exist with a different extension during uploading
+* (bug 34798) Updated CSS for Atom/RSS recent changes feeds to match on-wiki diffs.
 
 === API changes in 1.21 ===
 * prop=revisions can now report the contentmodel and contentformat.
index 789538e..3b5fbac 100644 (file)
@@ -168,6 +168,7 @@ $wgAutoloadLocalClasses = array(
        'MagicWord' => 'includes/MagicWord.php',
        'MagicWordArray' => 'includes/MagicWord.php',
        'MailAddress' => 'includes/UserMailer.php',
+       'MappedIterator' => 'includes/MappedIterator.php',
        'MediaWiki' => 'includes/Wiki.php',
        'MediaWiki_I18N' => 'includes/SkinTemplate.php',
        'Message' => 'includes/Message.php',
index ec8c2f7..8ca5fa9 100644 (file)
@@ -5820,111 +5820,10 @@ $wgDisableQueryPageUpdate = false;
 /**
  * List of special pages, followed by what subtitle they should go under
  * at Special:SpecialPages
+ *
+ * @deprecated 1.21 Override SpecialPage::getGroupName instead
  */
-$wgSpecialPageGroups = array(
-       'DoubleRedirects' => 'maintenance',
-       'BrokenRedirects' => 'maintenance',
-       'Lonelypages' => 'maintenance',
-       'Uncategorizedpages' => 'maintenance',
-       'Uncategorizedcategories' => 'maintenance',
-       'Uncategorizedimages' => 'maintenance',
-       'Uncategorizedtemplates' => 'maintenance',
-       'Unusedcategories' => 'maintenance',
-       'Unusedimages' => 'maintenance',
-       'Protectedpages' => 'maintenance',
-       'Protectedtitles' => 'maintenance',
-       'Unusedtemplates' => 'maintenance',
-       'Withoutinterwiki' => 'maintenance',
-       'Longpages' => 'maintenance',
-       'Shortpages' => 'maintenance',
-       'Ancientpages' => 'maintenance',
-       'Deadendpages' => 'maintenance',
-       'Wantedpages' => 'maintenance',
-       'Wantedcategories' => 'maintenance',
-       'Wantedfiles' => 'maintenance',
-       'Wantedtemplates' => 'maintenance',
-       'Unwatchedpages' => 'maintenance',
-       'Fewestrevisions' => 'maintenance',
-
-       'Userlogin' => 'login',
-       'Userlogout' => 'login',
-       'CreateAccount' => 'login',
-
-       'Recentchanges' => 'changes',
-       'Recentchangeslinked' => 'changes',
-       'Watchlist' => 'changes',
-       'Newimages' => 'changes',
-       'Newpages' => 'changes',
-       'Log' => 'changes',
-       'Tags' => 'changes',
-
-       'Upload' => 'media',
-       'Listfiles' => 'media',
-       'MIMEsearch' => 'media',
-       'FileDuplicateSearch' => 'media',
-       'Filepath' => 'media',
-
-       'Listusers' => 'users',
-       'Activeusers' => 'users',
-       'Listgrouprights' => 'users',
-       'BlockList' => 'users',
-       'Contributions' => 'users',
-       'Emailuser' => 'users',
-       'Listadmins' => 'users',
-       'Listbots' => 'users',
-       'Userrights' => 'users',
-       'Block' => 'users',
-       'Unblock' => 'users',
-       'Preferences' => 'users',
-       'ChangeEmail' => 'users',
-       'ChangePassword' => 'users',
-       'DeletedContributions' => 'users',
-       'PasswordReset' => 'users',
-
-       'Mostlinked' => 'highuse',
-       'Mostlinkedcategories' => 'highuse',
-       'Mostlinkedtemplates' => 'highuse',
-       'Mostcategories' => 'highuse',
-       'Mostimages' => 'highuse',
-       'Mostinterwikis' => 'highuse',
-       'Mostrevisions' => 'highuse',
-
-       'Allpages' => 'pages',
-       'Prefixindex' => 'pages',
-       'Listredirects' => 'pages',
-       'Categories' => 'pages',
-       'Disambiguations' => 'pages',
-       'PagesWithProp' => 'pages',
-
-       'Randompage' => 'redirects',
-       'Randomredirect' => 'redirects',
-       'Mypage' => 'redirects',
-       'Mytalk' => 'redirects',
-       'Mycontributions' => 'redirects',
-       'Search' => 'redirects',
-       'LinkSearch' => 'redirects',
-
-       'ComparePages' => 'pagetools',
-       'Movepage' => 'pagetools',
-       'MergeHistory' => 'pagetools',
-       'Revisiondelete' => 'pagetools',
-       'Undelete' => 'pagetools',
-       'Export' => 'pagetools',
-       'Import' => 'pagetools',
-       'Whatlinkshere' => 'pagetools',
-
-       'Statistics' => 'wiki',
-       'Version' => 'wiki',
-       'Lockdb' => 'wiki',
-       'Unlockdb' => 'wiki',
-       'Allmessages' => 'wiki',
-       'Popularpages' => 'wiki',
-
-       'Specialpages' => 'other',
-       'Blockme' => 'other',
-       'Booksources' => 'other',
-       'JavaScriptTest' => 'other',
-);
+$wgSpecialPageGroups = array();
 
 /** Whether or not to sort special pages in Special:Specialpages */
 
index 67011d2..8cbc663 100644 (file)
@@ -242,12 +242,12 @@ class FeedUtils {
        public static function applyDiffStyle( $text ) {
                $styles = array(
                        'diff'             => 'background-color: white; color:black;',
-                       'diff-otitle'      => 'background-color: white; color:black;',
-                       'diff-ntitle'      => 'background-color: white; color:black;',
-                       'diff-addedline'   => 'background: #cfc; color:black; font-size: smaller;',
-                       'diff-deletedline' => 'background: #ffa; color:black; font-size: smaller;',
-                       'diff-context'     => 'background: #eee; color:black; font-size: smaller;',
-                       'diffchange'       => 'color: red; font-weight: bold; text-decoration: none;',
+                       'diff-otitle'      => 'background-color: white; color:black; text-align: center;',
+                       'diff-ntitle'      => 'background-color: white; color:black; text-align: center;',
+                       'diff-addedline'   => 'color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;',
+                       'diff-deletedline' => 'color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;',
+                       'diff-context'     => 'background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;',
+                       'diffchange'       => 'font-weight: bold; text-decoration: none;',
                );
 
                foreach( $styles as $class => $style ) {
index 037093a..2c9fece 100644 (file)
@@ -238,8 +238,6 @@ class ImageGallery {
         * @return string
         */
        function toHTML() {
-               global $wgLang;
-
                if ( $this->mPerRow > 0 ) {
                        $maxwidth = $this->mPerRow * ( $this->mWidths + self::THUMB_PADDING + self::GB_PADDING + self::GB_BORDERS );
                        $oldStyle = isset( $this->mAttribs['style'] ) ? $this->mAttribs['style'] : '';
@@ -255,6 +253,7 @@ class ImageGallery {
                        $output .= "\n\t<li class='gallerycaption'>{$this->mCaption}</li>";
                }
 
+               $lang = $this->getLang();
                $params = array(
                        'width' => $this->mWidths,
                        'height' => $this->mHeights
@@ -337,7 +336,7 @@ class ImageGallery {
 
                        if( $this->mShowBytes ) {
                                if( $img ) {
-                                       $fileSize = htmlspecialchars( $wgLang->formatSize( $img->getSize() ) );
+                                       $fileSize = htmlspecialchars( $lang->formatSize( $img->getSize() ) );
                                } else {
                                        $fileSize = wfMessage( 'filemissing' )->escaped();
                                }
@@ -349,7 +348,7 @@ class ImageGallery {
                        $textlink = $this->mShowFilename ?
                                Linker::link(
                                        $nt,
-                                       htmlspecialchars( $wgLang->truncate( $nt->getText(), $this->mCaptionLength ) ),
+                                       htmlspecialchars( $lang->truncate( $nt->getText(), $this->mCaptionLength ) ),
                                        array(),
                                        array(),
                                        array( 'known', 'noclasses' )
@@ -403,4 +402,15 @@ class ImageGallery {
                        : false;
        }
 
+       /**
+        * Determines the correct language to be used for this image gallery
+        * @return Language object
+        */
+       private function getLang() {
+               global $wgLang;
+               return $this->mParser
+                       ? $this->mParser->getTargetLanguage()
+                       : $wgLang;
+       }
+
 } //class
diff --git a/includes/MappedIterator.php b/includes/MappedIterator.php
new file mode 100644 (file)
index 0000000..b4376f4
--- /dev/null
@@ -0,0 +1,96 @@
+<?php
+/**
+ * Convenience class for generating iterators from iterators.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @author Aaron Schulz
+ */
+
+/**
+ * Convenience class for generating iterators from iterators.
+ *
+ * @since 1.21
+ */
+class MappedIterator implements Iterator {
+       /** @var Iterator */
+       protected $baseIterator;
+       /** @var Closure */
+       protected $vCallback;
+
+       /**
+        * Build an new iterator from a base iterator by having the former wrap the
+        * later, returning the result of "value" callback for each current() invocation.
+        * The callback takes the result of current() on the base iterator as an argument.
+        * The keys of the base iterator are reused verbatim.
+        *
+        * @param Iterator|Array $iter
+        * @param Closure $vCallback
+        * @throws MWException
+        */
+    public function __construct( $iter, Closure $vCallback ) {
+               if ( is_array( $iter ) ) {
+                       $this->baseIterator = new ArrayIterator( $iter );
+               } elseif ( $iter instanceof Iterator ) {
+                       $this->baseIterator = $iter;
+               } else {
+                       throw new MWException( "Invalid base iterator provided." );
+               }
+               $this->vCallback = $vCallback;
+    }
+
+       /**
+        * @return void
+        */
+       public function rewind() {
+               $this->baseIterator->rewind();
+       }
+
+       /**
+        * @return Mixed|null Returns null if out of range
+        */
+       public function current() {
+               if ( !$this->baseIterator->valid() ) {
+                       return null; // out of range
+               }
+               return call_user_func_array( $this->vCallback, array( $this->baseIterator->current() ) );
+       }
+
+       /**
+        * @return Mixed|null Returns null if out of range
+        */
+       public function key() {
+               if ( !$this->baseIterator->valid() ) {
+                       return null; // out of range
+               }
+               return $this->baseIterator->key();
+       }
+
+       /**
+        * @return void
+        */
+       public function next() {
+               $this->baseIterator->next();
+       }
+
+       /**
+        * @return bool
+        */
+       public function valid() {
+               return $this->baseIterator->valid();
+       }
+}
index 62219e2..6bcc625 100644 (file)
@@ -3400,8 +3400,7 @@ $templates
         * @return string
         */
        public function buildCssLinks() {
-               global $wgUseSiteCss, $wgAllowUserCss, $wgAllowUserCssPrefs,
-                       $wgLang, $wgContLang;
+               global $wgUseSiteCss, $wgAllowUserCss, $wgAllowUserCssPrefs, $wgContLang;
 
                $this->getSkin()->setupSkinUserCss( $this );
 
@@ -3435,7 +3434,7 @@ $templates
                                // If needed, Janus it first. This is user-supplied CSS, so it's
                                // assumed to be right for the content language directionality.
                                $previewedCSS = $this->getRequest()->getText( 'wpTextbox1' );
-                               if ( $wgLang->getDir() !== $wgContLang->getDir() ) {
+                               if ( $this->getLanguage()->getDir() !== $wgContLang->getDir() ) {
                                        $previewedCSS = CSSJanus::transform( $previewedCSS, true, false );
                                }
                                $otherTags .= Html::inlineStyle( $previewedCSS );
index 5801e2a..5412d65 100644 (file)
@@ -850,6 +850,57 @@ class SpecialPage {
                        $this->getOutput()->addFeedLink( $format, $url );
                }
        }
+
+       /**
+        * Get the group that the special page belongs in on Special:SpecialPage
+        * Use this method, instead of getGroupName to allow customization
+        * of the group name from the wiki side
+        *
+        * @return string Group of this special page
+        * @since 1.21
+        */
+       public function getFinalGroupName() {
+               global $wgSpecialPageGroups;
+               $name = $this->getName();
+               $group = '-';
+
+               // Allow overridding the group from the wiki side
+               $msg = $this->msg( 'specialpages-specialpagegroup-' . strtolower( $name ) )->inContentLanguage();
+               if ( !$msg->isBlank() ) {
+                       $group = $msg->text();
+               } else {
+                       // Than use the group from this object
+                       $group = $this->getGroupName();
+
+                       // Group '-' is used as default to have the chance to determine,
+                       // if the special pages overriddes this method,
+                       // if not overridden, $wgSpecialPageGroups is checked for b/c
+                       if ( $group === '-' && isset( $wgSpecialPageGroups[$name] ) ) {
+                               $group = $wgSpecialPageGroups[$name];
+                       }
+               }
+
+               // never give '-' back, change to 'other'
+               if ( $group === '-' ) {
+                       $group = 'other';
+               }
+
+               return $group;
+       }
+
+       /**
+        * Under which header this special page is listed in Special:SpecialPages
+        * See messages 'specialpages-group-*' for valid names
+        * This method defaults to group 'other'
+        *
+        * @return string
+        * @since 1.21
+        */
+       protected function getGroupName() {
+               // '-' used here to determine, if this group is overridden or has a hardcoded 'other'
+               // Needed for b/c in getFinalGroupName
+               return '-';
+       }
 }
 
 /**
index c94c358..09479bd 100644 (file)
@@ -286,8 +286,11 @@ class SpecialPageFactory {
         *
         * @param $page Mixed: SpecialPage or string
         * @param $group String
+        * @deprecated 1.21 Override SpecialPage::getGroupName
         */
        public static function setGroup( $page, $group ) {
+               wfDeprecated( __METHOD__, '1.21' );
+
                global $wgSpecialPageGroups;
                $name = is_object( $page ) ? $page->getName() : $page;
                $wgSpecialPageGroups[$name] = $group;
@@ -298,28 +301,12 @@ class SpecialPageFactory {
         *
         * @param $page SpecialPage
         * @return String
+        * @deprecated 1.21 Use SpecialPage::getFinalGroupName
         */
        public static function getGroup( &$page ) {
-               $name = $page->getName();
+               wfDeprecated( __METHOD__, '1.21' );
 
-               global $wgSpecialPageGroups;
-               static $specialPageGroupsCache = array();
-               if ( isset( $specialPageGroupsCache[$name] ) ) {
-                       return $specialPageGroupsCache[$name];
-               }
-               $msg = wfMessage( 'specialpages-specialpagegroup-' . strtolower( $name ) );
-               if ( !$msg->isBlank() ) {
-                       $group = $msg->text();
-               } else {
-                       $group = isset( $wgSpecialPageGroups[$name] )
-                               ? $wgSpecialPageGroups[$name]
-                               : '-';
-               }
-               if ( $group == '-' ) {
-                       $group = 'other';
-               }
-               $specialPageGroupsCache[$name] = $group;
-               return $group;
+               return $page->getFinalGroupName();
        }
 
        /**
index 2da314f..da90811 100644 (file)
@@ -377,6 +377,7 @@ class WikiPage implements Page, IDBAccessObject {
         */
        public function loadFromRow( $data, $from ) {
                $lc = LinkCache::singleton();
+               $lc->clearLink( $this->mTitle );
 
                if ( $data ) {
                        $lc->addGoodLinkObjFromRow( $this->mTitle, $data );
index b82aadf..3577193 100644 (file)
@@ -965,7 +965,6 @@ abstract class ApiBase extends ContextSource {
                                                if ( $required && $value === '' ) {
                                                        $this->dieUsageMsg( array( 'missingparam', $paramName ) );
                                                }
-
                                                break;
                                        case 'integer': // Force everything using intval() and optionally validate limits
                                                $min = isset ( $paramSettings[self::PARAM_MIN] ) ? $paramSettings[self::PARAM_MIN] : null;
@@ -1022,20 +1021,12 @@ abstract class ApiBase extends ContextSource {
                                                }
                                                break;
                                        case 'user':
-                                               if ( !is_array( $value ) ) {
-                                                       $value = array( $value );
-                                               }
-
-                                               foreach ( $value as $key => $val ) {
-                                                       $title = Title::makeTitleSafe( NS_USER, $val );
-                                                       if ( is_null( $title ) ) {
-                                                               $this->dieUsage( "Invalid value for user parameter $encParamName", "baduser_{$encParamName}" );
+                                               if ( is_array( $value ) ) {
+                                                       foreach ( $value as $key => $val ) {
+                                                               $value[$key] = $this->validateUser( $val, $encParamName );
                                                        }
-                                                       $value[$key] = $title->getText();
-                                               }
-
-                                               if ( !$multi ) {
-                                                       $value = $value[0];
+                                               } else {
+                                                       $value = $this->validateUser( $value, $encParamName );
                                                }
                                                break;
                                        case 'upload': // nothing to do
@@ -1046,7 +1037,7 @@ abstract class ApiBase extends ContextSource {
                        }
 
                        // Throw out duplicates if requested
-                       if ( is_array( $value ) && !$dupes ) {
+                       if ( !$dupes && is_array( $value ) ) {
                                $value = array_unique( $value );
                        }
 
@@ -1158,18 +1149,33 @@ abstract class ApiBase extends ContextSource {
        }
 
        /**
-        * @param $value string
-        * @param $paramName string
-        * @return string
+        * Validate and normalize of parameters of type 'timestamp'
+        * @param $value string Parameter value
+        * @param $encParamName string Parameter name
+        * @return string Validated and normalized parameter
         */
-       function validateTimestamp( $value, $paramName ) {
+       function validateTimestamp( $value, $encParamName ) {
                $unixTimestamp = wfTimestamp( TS_UNIX, $value );
                if ( $unixTimestamp === false ) {
-                       $this->dieUsage( "Invalid value '$value' for timestamp parameter $paramName", "badtimestamp_{$paramName}" );
+                       $this->dieUsage( "Invalid value '$value' for timestamp parameter $encParamName", "badtimestamp_{$encParamName}" );
                }
                return wfTimestamp( TS_MW, $unixTimestamp );
        }
 
+       /**
+        * Validate and normalize of parameters of type 'user'
+        * @param $value string Parameter value
+        * @param $encParamName string Parameter value
+        * @return string Validated and normalized parameter
+        */
+       private function validateUser( $value, $encParamName ) {
+               $title = Title::makeTitleSafe( NS_USER, $value );
+               if ( $title === null ) {
+                       $this->dieUsage( "Invalid value '$value' for user parameter $encParamName", "baduser_{$encParamName}" );
+               }
+               return $title->getText();
+       }
+
        /**
         * Adds a warning to the output, else dies
         *
index 7a36ce8..3f059d6 100644 (file)
@@ -108,8 +108,10 @@ class ApiCreateAccount extends ApiBase {
 
                $apiResult = $this->getResult();
 
-               if( $status->hasMessage( 'sessionfailure' ) ) {
-                       // Token was incorrect, so add it to result, but don't throw an exception.
+               if( $status->hasMessage( 'sessionfailure' ) || $status->hasMessage( 'nocookiesfornew' ) ) {
+                       // Token was incorrect, so add it to result, but don't throw an exception
+                       // since not having the correct token is part of the normal
+                       // flow of events.
                        $result['token'] = LoginForm::getCreateaccountToken();
                        $result['result'] = 'needtoken';
                } elseif( !$status->isOK() ) {
@@ -230,7 +232,6 @@ class ApiCreateAccount extends ApiBase {
        public function getPossibleErrors() {
                $localErrors = array(
                        'wrongpassword',
-                       'sessionfailure',
                        'sorbs_create_account_reason',
                        'noname',
                        'userexists',
index b0ecca8..0555a39 100644 (file)
@@ -39,8 +39,7 @@ class ApiQueryAllMessages extends ApiQueryBase {
                $params = $this->extractRequestParams();
 
                if ( is_null( $params['lang'] ) ) {
-                       global $wgLang;
-                       $langObj = $wgLang;
+                       $langObj = $this->getLanguage();
                } else {
                        $langObj = Language::factory( $params['lang'] );
                }
index dd50624..53f4230 100644 (file)
@@ -240,14 +240,16 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase {
 
                if ( $this->fld_user || $this->fld_userid ) {
 
-                       if ( $this->fld_user ) {
-                               $vals['user'] = $row->rc_user_text;
-                       }
-
                        if ( $this->fld_userid ) {
+                               $vals['userid'] = $row->rc_user;
+                               // for backwards compatibility
                                $vals['user'] = $row->rc_user;
                        }
 
+                       if ( $this->fld_user ) {
+                               $vals['user'] = $row->rc_user_text;
+                       }
+
                        if ( !$row->rc_user ) {
                                $vals['anon'] = '';
                        }
index e81bc5d..ab1b9b7 100644 (file)
@@ -40,7 +40,6 @@ class RedisConnectionPool {
        protected $connectTimeout; // string; connection timeout
        protected $persistent; // bool; whether connections persist
        protected $password; // string; plaintext auth password
-       protected $poolSize; // integer; maximum number of idle connections
        protected $serializer; // integer; the serializer to use (Redis::SERIALIZER_*)
 
        protected $idlePoolSize = 0; // integer; current idle pool size
@@ -61,7 +60,6 @@ class RedisConnectionPool {
         *                      Optional, default is 1 second.
         *   - persistent     : Set this to true to allow connections to persist across
         *                      multiple web requests. False by default.
-        *   - poolSize       : Maximim number of idle connections. Default is 5.
         *   - password       : The authentication password, will be sent to Redis in clear text.
         *                      Optional, if it is unspecified, no AUTH command will be sent.
         *   - serializer     : Set to "php" or "igbinary". Default is "php".
@@ -75,7 +73,6 @@ class RedisConnectionPool {
                $this->connectTimeout = $options['connectTimeout'];
                $this->persistent = $options['persistent'];
                $this->password = $options['password'];
-               $this->poolSize = $options['poolSize'];
                if ( !isset( $options['serializer'] ) || $options['serializer'] === 'php' ) {
                        $this->serializer = Redis::SERIALIZER_PHP;
                } elseif ( $options['serializer'] === 'igbinary' ) {
@@ -99,9 +96,6 @@ class RedisConnectionPool {
                if ( !isset( $options['password'] ) ) {
                        $options['password'] = '';
                }
-               if ( !isset( $options['poolSize'] ) ) {
-                       $options['poolSize'] = 1;
-               }
                return $options;
        }
 
@@ -112,19 +106,13 @@ class RedisConnectionPool {
        public static function singleton( array $options ) {
                $options = self::applyDefaultConfig( $options );
                // Map the options to a unique hash...
-               $poolOptions = $options;
-               unset( $poolOptions['poolSize'] ); // avoid pool fragmentation
-               ksort( $poolOptions ); // normalize to avoid pool fragmentation
-               $id = sha1( serialize( $poolOptions ) );
+               ksort( $options ); // normalize to avoid pool fragmentation
+               $id = sha1( serialize( $options ) );
                // Initialize the object at the hash as needed...
                if ( !isset( self::$instances[$id] ) ) {
                        self::$instances[$id] = new self( $options );
                        wfDebug( "Creating a new " . __CLASS__ . " instance with id $id." );
                }
-               // Simply grow the pool size if the existing one is too small
-               $psize = $options['poolSize']; // size requested
-               self::$instances[$id]->poolSize = max( $psize, self::$instances[$id]->poolSize );
-
                return self::$instances[$id];
        }
 
@@ -244,16 +232,16 @@ class RedisConnectionPool {
         * @return void
         */
        protected function closeExcessIdleConections() {
-               if ( $this->idlePoolSize <= $this->poolSize ) {
-                       return; // nothing to do
+               if ( $this->idlePoolSize <= count( $this->connections ) ) {
+                       return; // nothing to do (no more connections than servers)
                }
 
                foreach ( $this->connections as $server => &$serverConnections ) {
                        foreach ( $serverConnections as $key => &$connection ) {
                                if ( $connection['free'] ) {
                                        unset( $serverConnections[$key] );
-                                       if ( --$this->idlePoolSize <= $this->poolSize ) {
-                                               return; // done
+                                       if ( --$this->idlePoolSize <= count( $this->connections ) ) {
+                                               return; // done (no more connections than servers)
                                        }
                                }
                        }
index 6e32757..863ec54 100644 (file)
@@ -3044,6 +3044,9 @@ $messages['ceb'] = array(
  * @author Calak
  */
 $messages['ckb'] = array(
+       'config-wiki-language' => 'زمانی ویکی:',
+       'config-page-language' => 'زمان',
+       'config-page-name' => 'ناو',
        'mainpagetext' => "'''میدیاویکی بە سەرکەوتوویی دامەزرا.'''",
        'mainpagedocfooter' => 'لە [//meta.wikimedia.org/wiki/Help:Contents ڕێنوێنیی بەکارھێنەران] بۆ زانیاری سەبارەت بە بەکارھێنانی نەرمامێری ویکی کەڵک وەربگرە.
 
index b7bbfe6..cb01c2e 100644 (file)
@@ -43,9 +43,16 @@ abstract class JobQueue {
        protected function __construct( array $params ) {
                $this->wiki = $params['wiki'];
                $this->type = $params['type'];
-               $this->order = isset( $params['order'] ) ? $params['order'] : 'random';
                $this->claimTTL = isset( $params['claimTTL'] ) ? $params['claimTTL'] : 0;
                $this->maxTries = isset( $params['maxTries'] ) ? $params['maxTries'] : 3;
+               if ( isset( $params['order'] ) && $params['order'] !== 'any' ) {
+                       $this->order = $params['order'];
+               } else {
+                       $this->order = $this->optimalOrder();
+               }
+               if ( !in_array( $this->order, $this->supportedOrders() ) ) {
+                       throw new MWException( __CLASS__ . " does not support '{$this->order}' order." );
+               }
        }
 
        /**
@@ -60,10 +67,10 @@ abstract class JobQueue {
         *                job runners since jobs can take different times to finish once popped.
         *                If "timestamp" is used, the queue will at least be loosely ordered
         *                by timestamp, allowing for some jobs to be popped off out of order.
-        *                If "random" is used, pop() will pick jobs in random order. This might be
-        *                useful for improving concurrency depending on the queue storage medium.
-        *                Note that "random" really means "don't care", so it may actually be FIFO
-        *                or only weakly random (e.g. pop() takes one of the first X jobs randomly).
+        *                If "random" is used, pop() will pick jobs in random order.
+        *                Note that it may only be weakly random (e.g. a lottery of the oldest X).
+        *                If "any" is choosen, the queue will use whatever order is the fastest.
+        *                This might be useful for improving concurrency for job acquisition.
         *   - claimTTL : If supported, the queue will recycle jobs that have been popped
         *                but not acknowledged as completed after this many seconds. Recycling
         *                of jobs simple means re-inserting them into the queue. Jobs can be
@@ -101,6 +108,23 @@ abstract class JobQueue {
                return $this->type;
        }
 
+       /**
+        * @return string One of (random, timestamp, fifo)
+        */
+       final public function getOrder() {
+               return $this->order;
+       }
+
+       /**
+        * @return Array Subset of (random, timestamp, fifo)
+        */
+       abstract protected function supportedOrders();
+
+       /**
+        * @return string One of (random, timestamp, fifo)
+        */
+       abstract protected function optimalOrder();
+
        /**
         * Quickly check if the queue is empty (has no available jobs).
         * Queue classes should use caching if they are any slower without memcached.
@@ -378,6 +402,16 @@ abstract class JobQueue {
         */
        protected function doFlushCaches() {}
 
+       /**
+        * Get an iterator to traverse over all of the jobs in this queue.
+        * This does not include jobs that are current acquired. In general,
+        * this should only be called on a queue that is no longer being popped.
+        *
+        * @return Iterator|Traversable|Array
+        * @throws MWException
+        */
+       abstract public function getAllQueuedJobs();
+
        /**
         * Namespace the queue with a key to isolate it for testing
         *
index fee1aaf..52d2bfe 100644 (file)
@@ -50,6 +50,14 @@ class JobQueueDB extends JobQueue {
                $this->cluster = isset( $params['cluster'] ) ? $params['cluster'] : false;
        }
 
+       protected function supportedOrders() {
+               return array( 'random', 'timestamp', 'fifo' );
+       }
+
+       protected function optimalOrder() {
+               return 'random';
+       }
+
        /**
         * @see JobQueue::doIsEmpty()
         * @return bool
@@ -580,6 +588,27 @@ class JobQueueDB extends JobQueue {
                }
        }
 
+       /**
+        * @see JobQueue::getAllQueuedJobs()
+        * @return Iterator
+        */
+       public function getAllQueuedJobs() {
+               list( $dbr, $scope ) = $this->getSlaveDB();
+               return new MappedIterator(
+                       $dbr->select( 'job', '*', array( 'job_cmd' => $this->getType(), 'job_token' => '' ) ),
+                       function( $row ) use ( $scope ) {
+                               $job = Job::factory(
+                                       $row->job_cmd,
+                                       Title::makeTitle( $row->job_namespace, $row->job_title ),
+                                       strlen( $row->job_params ) ? unserialize( $row->job_params ) : false,
+                                       $row->job_id
+                               );
+                               $job->id = $row->job_id; // XXX: work around broken subclasses
+                               return $job;
+                       }
+               );
+       }
+
        /**
         * @return Array (DatabaseBase, ScopedCallback)
         */
index a6b5bb3..8a4f181 100644 (file)
@@ -52,6 +52,14 @@ class JobQueueRedis extends JobQueue {
                $this->redisPool = RedisConnectionPool::singleton( $params['redisConfig'] );
        }
 
+       protected function supportedOrders() {
+               return array( 'timestamp', 'fifo' );
+       }
+
+       protected function optimalOrder() {
+               return 'fifo';
+       }
+
        /**
         * @see JobQueue::doIsEmpty()
         * @return bool
@@ -329,6 +337,52 @@ class JobQueueRedis extends JobQueue {
                return ( $timestamp && $timestamp > $params['rootJobTimestamp'] );
        }
 
+       /**
+        * @see JobQueue::getAllQueuedJobs()
+        * @return Iterator
+        */
+       public function getAllQueuedJobs() {
+               $conn = $this->getConnection();
+               if ( !$conn ) {
+                       throw new MWException( "Unable to connect to redis server." );
+               }
+               try {
+                       $that = $this;
+                       return new MappedIterator(
+                               $conn->lRange( $this->getQueueKey( 'l-unclaimed' ), 0, -1 ),
+                               function( $uid ) use ( $that, $conn ) {
+                                       return $that->getJobFromUidInternal( $uid, $conn );
+                               }
+                       );
+               } catch ( RedisException $e ) {
+                       $this->throwRedisException( $this->server, $conn, $e );
+               }
+       }
+
+       /**
+        * This function should not be called outside RedisJobQueue
+        *
+        * @param $uid string
+        * @param $conn RedisConnRef
+        * @return Job
+        * @throws MWException
+        */
+       public function getJobFromUidInternal( $uid, RedisConnRef $conn ) {
+               try {
+                       $fields = $conn->get( $this->prefixWithQueueKey( 'data', $uid ) );
+                       if ( !is_array( $fields ) ) { // wtf?
+                               $conn->delete( $this->prefixWithQueueKey( 'data', $uid ) );
+                               throw new MWException( "Could not find job with UID '$uid'." );
+                       }
+                       $title = Title::makeTitle( $fields['namespace'], $fields['title'] );
+                       $job = Job::factory( $fields['type'], $title, $fields['params'] );
+                       $job->metadata['sourceFields'] = $fields;
+                       return $job;
+               } catch ( RedisException $e ) {
+                       $this->throwRedisException( $this->server, $conn, $e );
+               }
+       }
+
        /**
         * Recycle or destroy any jobs that have been claimed for too long
         *
index 57c92e9..deb8fb0 100644 (file)
@@ -7,7 +7,6 @@ Notes on the Job queuing system architecture.
 \section intro Introduction
 
 The data model consist of the following main components:
-
 * The Job object represents a particular deferred task that happens in the
   background. All jobs subclass the Job object and put the main logic in the
   function called run().
@@ -15,6 +14,8 @@ The data model consist of the following main components:
   For example there may be a queue for email jobs and a queue for squid purge
   jobs.
 
+\section jobqueue Job queues
+
 Each job type has its own queue and is associated to a storage medium. One
 queue might save its jobs in redis while another one uses would use a database.
 
@@ -27,6 +28,7 @@ The factory class JobQueueGroup provides helper functions:
 
 The following queue classes are available:
 * JobQueueDB (stores jobs in the `job` table in a database)
+* JobQueueRedis (stores jobs in a redis server)
 
 All queue classes support some basic operations (though some may be no-ops):
 * enqueueing a batch of jobs
@@ -46,6 +48,27 @@ dequeued by a job runner, which crashes before completion, the job will be
 lost. Some jobs, like purging squid caches after a template change, may not
 require durable queues, whereas other jobs might be more important.
 
+\section aggregator Job queue aggregator
+
+The aggregators are used by nextJobDB.php, which is a script that will return a
+random ready queue (on any wiki in the farm) that can be used with runJobs.php.
+This can be used in conjuction with any scripts that handle wiki farm job queues.
+Note that $wgLocalDatabases defines what wikis are in the wiki farm.
+
+Since each job type has its own queue, and wiki-farms may have many wikis,
+there might be a large number of queues to keep track of. To avoid wasting
+large amounts of time polling empty queues, aggregators exists to keep track
+of which queues are ready.
+
+The following queue aggregator classes are available:
+* JobQueueAggregatorMemc (uses $wgMemc to track ready queues)
+* JobQueueAggregatorRedis (uses a redis server to track ready queues)
+
+Some aggregators cache data for a few minutes while others may be always up to date.
+This can be an important factor for jobs that need a low pickup time (or latency).
+
+\section jobs Jobs
+
 Callers should also try to make jobs maintain correctness when executed twice.
 This is useful for queues that actually implement ack(), since they may recycle
 dequeued but un-acknowledged jobs back into the queue to be attempted again. If
index 44b9edc..bc1988d 100644 (file)
@@ -36,6 +36,8 @@ if [ "$MW_MEM_LIMIT" -gt 0 ]; then
        else
                ulimit -v "$MW_MEM_LIMIT"
        fi
+else
+       MW_CGROUP=""
 fi
 if [ "$MW_FILE_SIZE_LIMIT" -gt 0 ]; then
        ulimit -f "$MW_FILE_SIZE_LIMIT"
index 994365e..72cfcc2 100644 (file)
@@ -244,4 +244,7 @@ class SpecialActiveUsers extends SpecialPage {
                }
        }
 
+       protected function getGroupName() {
+               return 'users';
+       }
 }
index e3424ec..a60c8ef 100644 (file)
@@ -77,6 +77,9 @@ class SpecialAllmessages extends SpecialPage {
 
        }
 
+       protected function getGroupName() {
+               return 'wiki';
+       }
 }
 
 /**
index d401d34..a5bf8df 100644 (file)
@@ -538,4 +538,8 @@ class SpecialAllpages extends IncludableSpecialPage {
                        return null;
                }
        }
+
+       protected function getGroupName() {
+               return 'pages';
+       }
 }
index fc5df4f..b0f333c 100644 (file)
@@ -71,4 +71,8 @@ class AncientPagesPage extends QueryPage {
                );
                return $this->getLanguage()->specialList( $link, htmlspecialchars( $d ) );
        }
+
+       protected function getGroupName() {
+               return 'maintenance';
+       }
 }
index ac05f67..efa718f 100644 (file)
@@ -946,6 +946,10 @@ class SpecialBlock extends FormSpecialPage {
                $out->setPageTitle( $this->msg( 'blockipsuccesssub' ) );
                $out->addWikiMsg( 'blockipsuccesstext', wfEscapeWikiText( $this->target ) );
        }
+
+       protected function getGroupName() {
+               return 'users';
+       }
 }
 
 # BC @since 1.18
index 56b9b00..0771512 100644 (file)
@@ -205,6 +205,10 @@ class SpecialBlockList extends SpecialPage {
                        $out->addHTML( Html::rawElement( 'ul', array( 'class' => 'mw-ipblocklist-otherblocks' ), $list ) . "\n" );
                }
        }
+
+       protected function getGroupName() {
+               return 'users';
+       }
 }
 
 class BlockListPager extends TablePager {
index 13e2351..85a3019 100644 (file)
@@ -59,4 +59,8 @@ class SpecialBlockme extends UnlistedSpecialPage {
 
                $this->getOutput()->addWikiMsg( 'proxyblocksuccess' );
        }
+
+       protected function getGroupName() {
+               return 'other';
+       }
 }
index 527dbb7..7849c0c 100644 (file)
@@ -179,4 +179,8 @@ class SpecialBookSources extends SpecialPage {
                $url = str_replace( '$1', $this->isbn, $url );
                return '<li><a href="' . htmlspecialchars( $url ) . '" class="external">' . htmlspecialchars( $label ) . '</a></li>';
        }
+
+       protected function getGroupName() {
+               return 'other';
+       }
 }
index 77b69e8..fac4123 100644 (file)
@@ -151,4 +151,8 @@ class BrokenRedirectsPage extends QueryPage {
                $out .= " {$arr} {$to}";
                return $out;
        }
+
+       protected function getGroupName() {
+               return 'maintenance';
+       }
 }
index 44388c4..9040c64 100644 (file)
@@ -50,6 +50,10 @@ class SpecialCategories extends SpecialPage {
                        Html::closeElement( 'div' )
                );
        }
+
+       protected function getGroupName() {
+               return 'pages';
+       }
 }
 
 /**
index 53faba7..59a0257 100644 (file)
@@ -254,4 +254,8 @@ class SpecialChangeEmail extends UnlistedSpecialPage {
 
                return $status->value;
        }
+
+       protected function getGroupName() {
+               return 'users';
+       }
 }
index 2b505b3..73eb97f 100644 (file)
@@ -270,4 +270,8 @@ class SpecialChangePassword extends UnlistedSpecialPage {
 
                $user->saveSettings();
        }
+
+       protected function getGroupName() {
+               return 'users';
+       }
 }
index 8be1cf0..c3bd3fe 100644 (file)
@@ -163,4 +163,8 @@ class SpecialComparePages extends SpecialPage {
                }
                return true;
        }
+
+       protected function getGroupName() {
+               return 'pagetools';
+       }
 }
index 1ea903b..637dda2 100644 (file)
@@ -540,6 +540,10 @@ class SpecialContributions extends SpecialPage {
                        Xml::closeElement( 'form' );
                return $form;
        }
+
+       protected function getGroupName() {
+               return 'users';
+       }
 }
 
 /**
index f4904a5..6978d6b 100644 (file)
@@ -82,4 +82,8 @@ class DeadendPagesPage extends PageQueryPage {
                        return array( 'page_title' );
                }
        }
+
+       protected function getGroupName() {
+               return 'maintenance';
+       }
 }
index 0c934a4..e291a55 100644 (file)
@@ -522,4 +522,8 @@ class DeletedContributionsPage extends SpecialPage {
                        Xml::closeElement( 'form' );
                return $f;
        }
+
+       protected function getGroupName() {
+               return 'users';
+       }
 }
index a9c554a..2126ca5 100644 (file)
@@ -158,4 +158,8 @@ class DisambiguationsPage extends QueryPage {
 
                return "$from $edit $arr $to";
        }
+
+       protected function getGroupName() {
+               return 'pages';
+       }
 }
index 512fd85..5a5d749 100644 (file)
@@ -162,4 +162,8 @@ class DoubleRedirectsPage extends QueryPage {
 
                return( "{$linkA} {$edit} {$arr} {$linkB} {$arr} {$linkC}" );
        }
+
+       protected function getGroupName() {
+               return 'maintenance';
+       }
 }
index 9a42c09..6842386 100644 (file)
@@ -337,4 +337,8 @@ class SpecialEmailUser extends UnlistedSpecialPage {
                        return $status;
                }
        }
+
+       protected function getGroupName() {
+               return 'users';
+       }
 }
index 9d1ec10..2abd116 100644 (file)
@@ -561,4 +561,7 @@ class SpecialExport extends SpecialPage {
                return $pageSet;
        }
 
+       protected function getGroupName() {
+               return 'pagetools';
+       }
 }
index 5366e3b..5b7f353 100644 (file)
@@ -93,4 +93,8 @@ class FewestrevisionsPage extends QueryPage {
 
                return $this->getLanguage()->specialList( $plink, $nlink );
        }
+
+       protected function getGroupName() {
+               return 'maintenance';
+       }
 }
index 366aa81..bdf3263 100644 (file)
@@ -215,4 +215,8 @@ class FileDuplicateSearchPage extends QueryPage {
 
                return "$plink . . $user . . $time";
        }
+
+       protected function getGroupName() {
+               return 'media';
+       }
 }
index d0ae101..bbcced2 100644 (file)
@@ -86,4 +86,8 @@ class SpecialFilepath extends SpecialPage {
                        Html::closeElement( 'form' )
                );
        }
+
+       protected function getGroupName() {
+               return 'media';
+       }
 }
index 16772ec..aa56041 100644 (file)
@@ -341,6 +341,10 @@ class SpecialImport extends SpecialPage {
                        );
                }
        }
+
+       protected function getGroupName() {
+               return 'pagetools';
+       }
 }
 
 /**
index 84e3cb7..f7e2267 100644 (file)
@@ -157,4 +157,8 @@ HTML;
                // $wgJavaScriptTestConfig in DefaultSettings.php
                $out->addJsConfigVars( 'QUnitTestSwarmInjectJSPath', $wgJavaScriptTestConfig['qunit']['testswarm-injectjs'] );
        }
+
+       protected function getGroupName() {
+               return 'other';
+       }
 }
index 018ad79..53625cf 100644 (file)
@@ -221,4 +221,8 @@ class LinkSearchPage extends QueryPage {
        function getOrderFields() {
                return array();
        }
+
+       protected function getGroupName() {
+               return 'redirects';
+       }
 }
index 661db7b..c864ae2 100644 (file)
@@ -51,6 +51,10 @@ class SpecialListFiles extends IncludableSpecialPage {
                }
                $this->getOutput()->addHTML( $html );
        }
+
+       protected function getGroupName() {
+               return 'media';
+       }
 }
 
 /**
index c82522a..c625044 100644 (file)
@@ -212,4 +212,8 @@ class SpecialListGroupRights extends SpecialPage {
                        return '<ul><li>' . implode( "</li>\n<li>", $r ) . '</li></ul>';
                }
        }
+
+       protected function getGroupName() {
+               return 'users';
+       }
 }
index cdad688..0283767 100644 (file)
@@ -126,4 +126,8 @@ class ListredirectsPage extends QueryPage {
                        return "<del>$rd_link</del>";
                }
        }
+
+       protected function getGroupName() {
+               return 'pages';
+       }
 }
index 3265d1a..10e9e68 100644 (file)
@@ -347,4 +347,8 @@ class SpecialListUsers extends IncludableSpecialPage {
 
                $this->getOutput()->addHTML( $s );
        }
+
+       protected function getGroupName() {
+               return 'users';
+       }
 }
index d71ac6e..95ef951 100644 (file)
@@ -102,4 +102,8 @@ class SpecialLockdb extends FormSpecialPage {
                $out->addSubtitle( $this->msg( 'lockdbsuccesssub' ) );
                $out->addWikiMsg( 'lockdbsuccesstext' );
        }
+
+       protected function getGroupName() {
+               return 'wiki';
+       }
 }
index 0b9cf43..4fc0f6e 100644 (file)
@@ -193,4 +193,7 @@ class SpecialLog extends SpecialPage {
                $this->getOutput()->addHTML( $page->getDescription()->parseAsBlock() );
        }
 
+       protected function getGroupName() {
+               return 'changes';
+       }
 }
index 2889f7e..8c6a88a 100644 (file)
@@ -81,4 +81,8 @@ class LonelyPagesPage extends PageQueryPage {
                        return array( 'page_title' );
                }
        }
+
+       protected function getGroupName() {
+               return 'maintenance';
+       }
 }
index dd60e37..c045f9e 100644 (file)
@@ -34,4 +34,8 @@ class LongPagesPage extends ShortPagesPage {
        function sortDescending() {
                return true;
        }
+
+       protected function getGroupName() {
+               return 'maintenance';
+       }
 }
index 7350cc7..c5a109d 100644 (file)
@@ -133,4 +133,8 @@ class MIMEsearchPage extends QueryPage {
                );
                return in_array( $type, $types );
        }
+
+       protected function getGroupName() {
+               return 'media';
+       }
 }
index 85e1d65..c68f2df 100644 (file)
@@ -423,6 +423,10 @@ class SpecialMergeHistory extends SpecialPage {
 
                return true;
        }
+
+       protected function getGroupName() {
+               return 'pagetools';
+       }
 }
 
 class MergeHistoryPager extends ReverseChronologicalPager {
index 085a09f..11f26bd 100644 (file)
@@ -99,4 +99,8 @@ class MostcategoriesPage extends QueryPage {
 
                return $this->getLanguage()->specialList( $link, $count );
        }
+
+       protected function getGroupName() {
+               return 'highuse';
+       }
 }
index 01a5caf..78b2d91 100644 (file)
@@ -58,4 +58,7 @@ class MostimagesPage extends ImageQueryPage {
                return $this->msg( 'nimagelinks' )->numParams( $row->value )->escaped() . '<br />';
        }
 
+       protected function getGroupName() {
+               return 'highuse';
+       }
 }
index e08cdf3..574a9af 100644 (file)
@@ -114,4 +114,8 @@ class MostinterwikisPage extends QueryPage {
 
                return $this->getLanguage()->specialList( $link, $count );
        }
+
+       protected function getGroupName() {
+               return 'highuse';
+       }
 }
index 66814cb..3c30bfb 100644 (file)
@@ -107,4 +107,8 @@ class MostlinkedPage extends QueryPage {
                        $this->msg( 'nlinks' )->numParams( $result->value )->escaped() );
                return $this->getLanguage()->specialList( $link, $wlh );
        }
+
+       protected function getGroupName() {
+               return 'highuse';
+       }
 }
index df2975c..a1bce45 100644 (file)
@@ -94,4 +94,8 @@ class MostlinkedCategoriesPage extends QueryPage {
                $nlinks = $this->msg( 'nmembers' )->numParams( $result->value )->escaped();
                return $this->getLanguage()->specialList( $plink, $nlinks );
        }
+
+       protected function getGroupName() {
+               return 'highuse';
+       }
 }
index a2d51db..506e6b2 100644 (file)
@@ -124,4 +124,8 @@ class MostlinkedTemplatesPage extends QueryPage {
                $label = $this->msg( 'ntransclusions' )->numParams( $result->value )->escaped();
                return Linker::link( $wlh, $label );
        }
+
+       protected function getGroupName() {
+               return 'highuse';
+       }
 }
index b025331..ad6b788 100644 (file)
@@ -31,4 +31,8 @@ class MostrevisionsPage extends FewestrevisionsPage {
        function sortDescending() {
                return true;
        }
+
+       protected function getGroupName() {
+               return 'highuse';
+       }
 }
index b76e877..70ea6b9 100644 (file)
@@ -675,4 +675,8 @@ class MovePageForm extends UnlistedSpecialPage {
                }
                $out->addHTML( "</ul>\n" );
        }
+
+       protected function getGroupName() {
+               return 'pagetools';
+       }
 }
index 7954795..52cbc3a 100644 (file)
@@ -42,6 +42,10 @@ class SpecialNewFiles extends IncludableSpecialPage {
                        $this->getOutput()->addHTML( $pager->getNavigationBar() );
                }
        }
+
+       protected function getGroupName() {
+               return 'changes';
+       }
 }
 
 /**
index 6e8e634..ebb3021 100644 (file)
@@ -476,6 +476,10 @@ class SpecialNewpages extends IncludableSpecialPage {
                }
                return '';
        }
+
+       protected function getGroupName() {
+               return 'changes';
+       }
 }
 
 /**
index 189798d..8f8c981 100644 (file)
@@ -131,4 +131,8 @@ class SpecialPagesWithProp extends QueryPage {
                }
                return $ret;
        }
+
+       protected function getGroupName() {
+               return 'pages';
+       }
 }
index f42a7a1..90b0ac8 100644 (file)
@@ -326,4 +326,8 @@ class SpecialPasswordReset extends FormSpecialPage {
 
                return false;
        }
+
+       protected function getGroupName() {
+               return 'users';
+       }
 }
index 99b586e..7ce8c13 100644 (file)
@@ -72,4 +72,8 @@ class PopularPagesPage extends QueryPage {
                $nv = $this->msg( 'nviews' )->numParams( $result->value )->escaped();
                return $this->getLanguage()->specialList( $link, $nv );
        }
+
+       protected function getGroupName() {
+               return 'wiki';
+       }
 }
index 340172c..a50e7c1 100644 (file)
@@ -87,4 +87,8 @@ class SpecialPreferences extends SpecialPage {
 
                return true;
        }
+
+       protected function getGroupName() {
+               return 'users';
+       }
 }
index 7586dbb..0d68737 100644 (file)
@@ -263,4 +263,8 @@ class SpecialPrefixindex extends SpecialAllpages {
 
                $this->getOutput()->addHTML( $out2 . $out . $footer );
        }
+
+       protected function getGroupName() {
+               return 'pages';
+       }
 }
index bc0cab7..5f04ab5 100644 (file)
@@ -290,6 +290,10 @@ class SpecialProtectedpages extends SpecialPage {
                                array( 'id' => $this->IdLevel, 'name' => $this->IdLevel ),
                                implode( "\n", $options ) ) . "</span>";
        }
+
+       protected function getGroupName() {
+               return 'maintenance';
+       }
 }
 
 /**
index bac8b7b..6a94deb 100644 (file)
@@ -182,6 +182,10 @@ class SpecialProtectedtitles extends SpecialPage {
                                array( 'id' => $this->IdLevel, 'name' => $this->IdLevel ),
                                implode( "\n", $options ) );
        }
+
+       protected function getGroupName() {
+               return 'maintenance';
+       }
 }
 
 /**
index 74fe66c..b59f834 100644 (file)
@@ -159,4 +159,8 @@ class RandomPage extends SpecialPage {
 
                return $dbr->fetchObject( $res );
        }
+
+       protected function getGroupName() {
+               return 'redirects';
+       }
 }
index 69c291d..59d3138 100644 (file)
@@ -907,4 +907,8 @@ class SpecialRecentChanges extends IncludableSpecialPage {
                        'mediawiki.special.recentchanges',
                ) );
        }
+
+       protected function getGroupName() {
+               return 'changes';
+       }
 }
index 85ca2bd..148bc48 100644 (file)
@@ -623,4 +623,8 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
                        array( 'value' => $bitfield, 'comment' => $reason )
                );
        }
+
+       protected function getGroupName() {
+               return 'pagetools';
+       }
 }
index ae2b009..0d54e76 100644 (file)
@@ -1161,4 +1161,7 @@ class SpecialSearch extends SpecialPage {
                $this->extraParams[$key] = $value;
        }
 
+       protected function getGroupName() {
+               return 'redirects';
+       }
 }
index 5a4e8f0..1be7fbe 100644 (file)
@@ -110,4 +110,8 @@ class ShortPagesPage extends QueryPage {
                                ? "${hlinkInParentheses} {$dm}{$plink} {$dm}[{$size}]"
                                : "<del>${hlinkInParentheses} {$dm}{$plink} {$dm}[{$size}]</del>";
        }
+
+       protected function getGroupName() {
+               return 'maintenance';
+       }
 }
index d80218f..57fffb8 100644 (file)
@@ -62,7 +62,7 @@ class SpecialSpecialpages extends UnlistedSpecialPage {
                $groups = array();
                foreach ( $pages as $page ) {
                        if ( $page->isListed() ) {
-                               $group = SpecialPageFactory::getGroup( $page );
+                               $group = $page->getFinalGroupName();
                                if( !isset( $groups[$group] ) ) {
                                        $groups[$group] = array();
                                }
index 7d6d90e..bc1b600 100644 (file)
@@ -329,4 +329,8 @@ class SpecialStatistics extends SpecialPage {
                        Xml::tags( 'th', array( 'colspan' => '2' ), $this->msg( $header )->parse() ) .
                        Xml::closeElement( 'tr' );
        }
+
+       protected function getGroupName() {
+               return 'wiki';
+       }
 }
index 4036ebb..6d16103 100644 (file)
@@ -92,4 +92,8 @@ class SpecialTags extends SpecialPage {
 
                return Xml::tags( 'tr', null, $newRow ) . "\n";
        }
+
+       protected function getGroupName() {
+               return 'changes';
+       }
 }
index 076469c..c4a53cf 100644 (file)
@@ -213,4 +213,8 @@ class SpecialUnblock extends SpecialPage {
 
                return true;
        }
+
+       protected function getGroupName() {
+               return 'users';
+       }
 }
index 5865bf6..53aa3f3 100644 (file)
@@ -60,4 +60,7 @@ class UncategorizedImagesPage extends ImageQueryPage {
                );
        }
 
+       protected function getGroupName() {
+               return 'maintenance';
+       }
 }
index abbe997..b518e6f 100644 (file)
@@ -69,4 +69,8 @@ class UncategorizedPagesPage extends PageQueryPage {
                        return array( 'page_namespace', 'page_title' );
                return array( 'page_title' );
        }
+
+       protected function getGroupName() {
+               return 'maintenance';
+       }
 }
index 942c337..66d2a07 100644 (file)
@@ -1523,4 +1523,8 @@ class SpecialUndelete extends SpecialPage {
                        $out->addWikiText( '<div class="error">' . $status->getWikiText( 'undelete-error-short', 'undelete-error-long' ) . '</div>' );
                }
        }
+
+       protected function getGroupName() {
+               return 'pagetools';
+       }
 }
index 2e77254..35141d8 100644 (file)
@@ -84,4 +84,8 @@ class SpecialUnlockdb extends FormSpecialPage {
                $out->addSubtitle( $this->msg( 'unlockdbsuccesssub' ) );
                $out->addWikiMsg( 'unlockdbsuccesstext' );
        }
+
+       protected function getGroupName() {
+               return 'wiki';
+       }
 }
index 69c42d5..6b91dd3 100644 (file)
@@ -64,4 +64,8 @@ class UnusedCategoriesPage extends QueryPage {
                $title = Title::makeTitle( NS_CATEGORY, $result->title );
                return Linker::link( $title, htmlspecialchars( $title->getText() ) );
        }
+
+       protected function getGroupName() {
+               return 'maintenance';
+       }
 }
index cdab557..6955328 100644 (file)
@@ -80,4 +80,7 @@ class UnusedimagesPage extends ImageQueryPage {
                return $this->msg( 'unusedimagestext' )->parseAsBlock();
        }
 
+       protected function getGroupName() {
+               return 'maintenance';
+       }
 }
index fe79731..493e936 100644 (file)
@@ -85,4 +85,8 @@ class UnusedtemplatesPage extends QueryPage {
        function getPageHeader() {
                return $this->msg( 'unusedtemplatestext' )->parseAsBlock();
        }
+
+       protected function getGroupName() {
+               return 'maintenance';
+       }
 }
index d397149..05ec6b0 100644 (file)
@@ -94,4 +94,8 @@ class UnwatchedpagesPage extends QueryPage {
 
                return $this->getLanguage()->specialList( $plink, $wlink );
        }
+
+       protected function getGroupName() {
+               return 'maintenance';
+       }
 }
index 1a35b04..babbde1 100644 (file)
@@ -717,6 +717,9 @@ class SpecialUpload extends SpecialPage {
                        $gallery->toHtml() . "</li>\n";
        }
 
+       protected function getGroupName() {
+               return 'media';
+       }
 }
 
 /**
index 9362385..74bdb2e 100644 (file)
@@ -1366,4 +1366,8 @@ class LoginForm extends SpecialPage {
                        $query
                );
        }
+
+       protected function getGroupName() {
+               return 'login';
+       }
 }
index 4be36c6..d957e87 100644 (file)
@@ -62,4 +62,8 @@ class SpecialUserlogout extends UnlistedSpecialPage {
 
                $out->returnToMain();
        }
+
+       protected function getGroupName() {
+               return 'login';
+       }
 }
index 22fdc1a..5224183 100644 (file)
@@ -639,4 +639,8 @@ class UserrightsPage extends SpecialPage {
                $output->addHTML( Xml::element( 'h2', null, $rightsLogPage->getName()->text() ) );
                LogEventsList::showLogExtract( $output, 'rights', $user->getUserPage() );
        }
+
+       protected function getGroupName() {
+               return 'users';
+       }
 }
index 6447bbe..ea9b247 100644 (file)
@@ -827,6 +827,10 @@ class SpecialVersion extends SpecialPage {
                return $out;
        }
 
+       protected function getGroupName() {
+               return 'wiki';
+       }
+
        function showEasterEgg() {
                $rx = $rp = $xe = '';
                $alpha = array( "", "kbQW", "\$\n()" );
index 0b1fb25..0035bfa 100644 (file)
@@ -72,4 +72,8 @@ class WantedCategoriesPage extends WantedQueryPage {
                $nlinks = $this->msg( 'nmembers' )->numParams( $result->value )->escaped();
                return $this->getLanguage()->specialList( $plink, $nlinks );
        }
+
+       protected function getGroupName() {
+               return 'maintenance';
+       }
 }
index ddeb4a1..9a2d30a 100644 (file)
@@ -87,4 +87,8 @@ class WantedFilesPage extends WantedQueryPage {
                        )
                );
        }
+
+       protected function getGroupName() {
+               return 'maintenance';
+       }
 }
index 05df400..acec4ea 100644 (file)
@@ -91,4 +91,8 @@ class WantedPagesPage extends WantedQueryPage {
                wfRunHooks( 'WantedPages::getQueryInfo', array( &$this, &$query ) );
                return $query;
        }
+
+       protected function getGroupName() {
+               return 'maintenance';
+       }
 }
index f3e3369..f5539c1 100644 (file)
@@ -52,4 +52,8 @@ class WantedTemplatesPage extends WantedQueryPage {
                                                'page_title = tl_title' ) ) )
                );
        }
+
+       protected function getGroupName() {
+               return 'maintenance';
+       }
 }
index c498bde..89c2e76 100644 (file)
@@ -503,4 +503,8 @@ class SpecialWatchlist extends SpecialPage {
 
                return floor( $count / 2 );
        }
+
+       protected function getGroupName() {
+               return 'changes';
+       }
 }
index 0b835a2..bc20e3d 100644 (file)
@@ -464,4 +464,8 @@ class SpecialWhatLinksHere extends SpecialPage {
                }
                return Xml::fieldset( $this->msg( 'whatlinkshere-filters' )->text(), $this->getLanguage()->pipeList( $links ) );
        }
+
+       protected function getGroupName() {
+               return 'pagetools';
+       }
 }
index 2988b04..3723740 100644 (file)
@@ -95,4 +95,8 @@ class WithoutInterwikiPage extends PageQueryPage {
                }
                return $query;
        }
+
+       protected function getGroupName() {
+               return 'maintenance';
+       }
 }
index 1926cea..c373c6d 100644 (file)
@@ -1991,8 +1991,10 @@ Hulle moet gewysig word om eerder direk na die regte onderwerpe te skakel.<br />
 'n Bladsy word beskou as 'n dubbelsinnigheidsbladsy as dit 'n sjabloon bevat wat geskakel is vanaf [[MediaWiki:Disambiguationspage]]",
 
 'pageswithprop' => "Blaaie met 'n bladsy-eienskap",
+'pageswithprop-legend' => "Blaaie met 'n bladsy-eienskap",
 'pageswithprop-text' => "Hierdie bladsy lys blaaie met 'n bepaalde blady-eienskap.",
 'pageswithprop-prop' => 'Naam van die eienskap:',
+'pageswithprop-submit' => 'OK',
 
 'doubleredirects' => 'Dubbele aansture',
 'doubleredirectstext' => 'Hierdie lys bevat bladsye wat aansture na ander aanstuurblaaie is.
@@ -3964,7 +3966,4 @@ Anders kan u die eenvoudige vorm hieronder gebruik. U kommentaar sal by die blad
 'duration-centuries' => '$1 {{PLURAL:$1|eeu|eeue}}',
 'duration-millennia' => '$1 {{PLURAL:$1|millennium|millennia}}',
 
-# Unknown messages
-'pageswithprop-legend' => "Blaaie met 'n bladsy-eienskap",
-'pageswithprop-submit' => 'OK',
 );
index 7912159..579c836 100644 (file)
@@ -2289,8 +2289,10 @@ $1',
 تعامل الصفحة كصفحة توضيح إذا كان بها قالب موجود في [[MediaWiki:Disambiguationspage]]",
 
 'pageswithprop' => 'صفحات مع خاصية الصفحة',
+'pageswithprop-legend' => 'صفحات مع خاصية الصفحة',
 'pageswithprop-text' => 'تسرد هذه الصفحة الصفحات التي تستخدم خاصية صفحة معينة.',
 'pageswithprop-prop' => 'اسم الخاصية:',
+'pageswithprop-submit' => 'اذهب',
 
 'doubleredirects' => 'تحويلات مزدوجة',
 'doubleredirectstext' => 'هذه الصفحة تعرض الصفحات التي تحول إلى صفحات تحويل أخرى.
@@ -4439,7 +4441,4 @@ $5
 'duration-centuries' => '{{PLURAL: $1||قرن واحد|قرنان|$1 قرون|$1 قرنًا|$1 قرن}}',
 'duration-millennia' => '{{PLURAL: $1||ألفية واحدة|ألفيتان|$1 ألفيات|$1 ألفية}}',
 
-# Unknown messages
-'pageswithprop-legend' => 'صفحات مع خاصية الصفحة',
-'pageswithprop-submit' => 'اذهب',
 );
index ae21f24..2cb5726 100644 (file)
@@ -1875,8 +1875,10 @@ Alcuérdate de comprobar otros enllaces a les plantíes enantes d'esborrales.",
 Una páxina tratase como una páxina de dixebra si usa una plantía que tea enllaciada dende [[MediaWiki:Disambiguationspage]]",
 
 'pageswithprop' => 'Páxines con una propiedá de páxina',
+'pageswithprop-legend' => 'Páxines con una propiedá de páxina',
 'pageswithprop-text' => "Esta páxina llista les páxines qu'usen una propiedá de páxina determinada.",
 'pageswithprop-prop' => 'Nome de la propiedá:',
+'pageswithprop-submit' => 'Dir',
 
 'doubleredirects' => 'Redireiciones dobles',
 'doubleredirectstext' => 'Esta páxina llista páxines que redireicionen a otres páxines de redireición.
@@ -3883,7 +3885,7 @@ D\'otra miente, pues usar el formulariu cenciellu d\'abaxo. El to comentariu apa
 'duration-centuries' => '$1 {{PLURAL:$1|sieglu|sieglos}}',
 'duration-millennia' => '$1 {{PLURAL:$1|mileniu|milenios}}',
 
-# Unknown messages
-'pageswithprop-legend' => 'Páxines con una propiedá de páxina',
-'pageswithprop-submit' => 'Dir',
+# Image rotation
+'rotate-comment' => 'Imaxe xirada $1 {{PLURAL:$1|grau|graos}} en sentíu horariu',
+
 );
index 86f18f1..cdfa9b9 100644 (file)
@@ -2028,8 +2028,10 @@ $1',
 Старонка лічыцца шматзначнай, калі яна ўтрымлівае шаблён назва якога знаходзіцца на старонцы [[MediaWiki:Disambiguationspage]]",
 
 'pageswithprop' => 'Старонкі з уласьцівасьцямі старонак',
+'pageswithprop-legend' => 'Старонкі з уласьцівасьцямі старонак',
 'pageswithprop-text' => 'На гэтай старонцы адлюстроўваюцца старонкі, якія ўжываюць пэўныя ўласьцівасьці старонак',
 'pageswithprop-prop' => 'Імя ўласьцівасьці:',
+'pageswithprop-submit' => 'Паказаць',
 
 'doubleredirects' => 'Двайныя перанакіраваньні',
 'doubleredirectstext' => 'На гэтай старонцы пададзены сьпіс перанакіраваньняў на іншыя перанакіраваньні. Кожны радок утрымлівае спасылкі на першае і другое перанакіраваньне, а таксама мэтавую старонку другога перанакіраваньня, якая звычайна зьяўляецца «сапраўднай» мэтавай старонкай, куды павіннае спасылацца першае перанакіраваньне.
@@ -4014,7 +4016,7 @@ MediaWiki распаўсюджваецца з надзеяй, што будзе
 'duration-centuries' => '$1 {{PLURAL:$1|стагодзьдзе|стагодзьдзі|стагодзьдзяў}}',
 'duration-millennia' => '$1 {{PLURAL:$1|тысячагодзьдзе|тысячагодзьдзі|тысячагодзьдзяў}}',
 
-# Unknown messages
-'pageswithprop-legend' => 'Старонкі з уласьцівасьцямі старонак',
-'pageswithprop-submit' => 'Паказаць',
+# Image rotation
+'rotate-comment' => 'Выява павернутая на $1{{PLURAL:$1|°}} па гадзіньнікавай стрэлцы',
+
 );
index 6f30fdb..91a73c4 100644 (file)
@@ -696,6 +696,7 @@ Legend: '''({{int:cur}})''' = हाल के संशोधन के सा
 'tooltip-n-help' => 'जगह पता लगावे खातिर',
 'tooltip-t-whatlinkshere' => 'अहिजा लिंक होखे वाला सब विकि पन्ना के सूची',
 'tooltip-t-recentchangeslinked' => 'ई पन्ना से जुड़ल पन्नवन पर तुरंत भईल परिवर्तन',
+'tooltip-feed-atom' => 'ई पन्ना खातिर अणु फ़ीड',
 'tooltip-t-upload' => 'फाईल लादीं (अपलोड )',
 'tooltip-t-specialpages' => 'ख़ाश पन्नवन के सूची',
 'tooltip-t-print' => 'ई पन्ना के छापे लायक संस्करण।',
index 0d688cb..832d514 100644 (file)
@@ -1942,6 +1942,7 @@ Padal e tlefent kas war-eeun d'an danvez anezho.<br />
 Sellet e vez ouzh ur bajenn evel ouzh ur bajenn disheñvelout ma ra gant ur patrom liammet ouzh [[MediaWiki:Disambiguationspage]]",
 
 'pageswithprop-prop' => 'Anv ar perzh :',
+'pageswithprop-submit' => 'Mont',
 
 'doubleredirects' => 'Adkasoù doubl',
 'doubleredirectstext' => 'Rollañ a ra ar bajenn-mañ ar pajennoù a adkas da bajennoù adkas all.
@@ -3930,6 +3931,4 @@ A-hend-all e c'hallit ober gant ar furmskrid eeunaet dindan. Ouzhpennet e vo hoc
 'duration-centuries' => "$1 {{PLURAL:$1|c'hantved|kantved}}",
 'duration-millennia' => '$1 {{PLURAL:$1|milvloaz|milvoaz}}',
 
-# Unknown messages
-'pageswithprop-submit' => 'Mont',
 );
index 40d4a5c..52f41a0 100644 (file)
@@ -326,7 +326,7 @@ $messages = array(
 'searcharticle' => 'بڕۆ',
 'history' => 'مێژووی پەڕە',
 'history_short' => 'مێژووی پەڕە',
-'updatedmarker' => 'لە دوای دواسەردانم نوێکراوەتەوە',
+'updatedmarker' => 'لە دوایین سەردانمدا نوێ کراوەتەوە',
 'printableversion' => 'وەشانی ئامادەی چاپ',
 'permalink' => 'بەستەری ھەمیشەیی',
 'print' => 'چاپ',
@@ -365,7 +365,7 @@ $messages = array(
 'otherlanguages' => 'بە زمانەکانی تر',
 'redirectedfrom' => '(ڕەوانەکراوە لە $1 ەوە)',
 'redirectpagesub' => 'پەڕەی ڕەوانەکردن',
-'lastmodifiedat' => 'ئەم پەڕەیە دواجار لە $2ی $1 نوێکراوەتەوە.',
+'lastmodifiedat' => 'ئەم پەڕەیە دواجار لە $2ی $1 نوێ کراوەتەوە.',
 'viewcount' => 'ئەم پەڕەیە {{PLURAL:$1|یەکجار|$1 جار}} بینراوە.',
 'protectedpage' => 'پەڕەی پارێزراو',
 'jumpto' => 'باز بدە بۆ:',
index c39aa66..4897b6b 100644 (file)
@@ -611,7 +611,7 @@ Oedwch ychydig cyn mentro eto.',
 'loginlanguagelabel' => 'Iaith: $1',
 'suspicious-userlogout' => 'Gwrthodwyd eich cais i allgofnodi oherwydd ei fod yn ymddangos mai gweinydd wedi torri neu ddirprwy gelc a anfonodd y cais.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Gwall anhysbys yng ngweithrediad post() PHP',
 'user-mail-no-addy' => 'Wedi ceisio anfon e-bost heb gyfeiriad e-bost',
 'user-mail-no-body' => 'Ceisiwyd anfon e-bost gwag neu e-bost oedd a thestun rhy bwt iddo.',
@@ -1284,7 +1284,7 @@ Mae'r wybodaeth hon ar gael i'r cyhoedd.",
 'prefs-displaywatchlist' => 'Dewisiadau arddangos',
 'prefs-diffs' => "Cymharu golygiadau ('gwahan')",
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'Y cyfeiriad e-bost yn ymddangos yn un dilys',
 'email-address-validity-invalid' => 'Rhowch gyfeiriad e-bost dilys',
 
@@ -1867,6 +1867,12 @@ Cofiwch chwilio am gysylltiadau eraill at nodyn a'u hystyried cyn ei ddileu.",
 'disambiguations-text' => "Mae'r tudalennau canlynol yn cynnwys un neu ragor o gysylltau, sydd yn arwain at '''dudalennau gwahaniaethu'''. Hwyrach y byddai'n hwylusach petai'r cyswllt yn arwain yn syth at y dudalen briodol.<br />
 Diffinir tudalen yn dudalen gwahaniaethu pan mae'n cynnwys un o'r nodiadau '[[MediaWiki:Disambiguationspage|tudalen gwahaniaethu]]'.",
 
+'pageswithprop' => 'Tudalennau a chanddynt nodwedd arbennig',
+'pageswithprop-legend' => 'Tudalennau a chanddynt nodwedd arbennig',
+'pageswithprop-text' => "Mae'r dudalen hon yn rhestru tudalennau sydd yn defnyddio nodwedd arbennig yn y dudalen.",
+'pageswithprop-prop' => "Enw'r nodwedd:",
+'pageswithprop-submit' => 'Gwneler',
+
 'doubleredirects' => 'Ailgyfeiriadau dwbl',
 'doubleredirectstext' => "Mae pob rhes yn cynnwys cysylltiad i'r ddau ail-gyfeiriad cyntaf, ynghyd â chyrchfan yr ail ailgyfeiriad. Fel arfer bydd hyn yn rhoi'r gwir dudalen y dylai'r tudalennau cynt gyfeirio ati.
 Gosodwyd <del>llinell</del> drwy'r eitemau sydd eisoes wedi eu datrys.",
@@ -2056,7 +2062,7 @@ Mae angen parth lefel-uchaf o leiaf, er enghraifft "*.org".<br />
 'listgrouprights-addgroup-self-all' => "Yn gallu ychwanegu'r holl grwpiau at eich cyfrif eich hunan",
 'listgrouprights-removegroup-self-all' => "Yn gallu tynnu'r holl grwpiau oddi ar eich cyfrif eich hunan",
 
-# E-mail user
+# Email user
 'mailnologin' => "Does dim cyfeiriad i'w anfon iddo",
 'mailnologintext' => 'Rhaid eich bod wedi [[Special:UserLogin|mewngofnodi]]
 a bod cyfeiriad e-bost dilys yn eich [[Special:Preferences|dewisiadau]]
@@ -3427,7 +3433,7 @@ Cuddir y meysydd eraill trwy ragosodiad.
 'monthsall' => 'pob mis',
 'limitall' => 'oll',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => "Cadarnhau'r cyfeiriad e-bost",
 'confirmemail_noemail' => 'Does dim cyfeiriad e-bost dilys wedi ei osod yn eich [[Special:Preferences|dewisiadau defnyddiwr]].',
 'confirmemail_text' => "Cyn i chi allu defnyddio'r nodweddion e-bost, mae'n rhaid i {{SITENAME}} ddilysu'ch cyfeiriad e-bost. Pwyswch y botwm isod er mwyn anfon côd cadarnhau i'ch cyfeiriad e-bost. Bydd yr e-bost yn cynnwys cyswllt gyda chôd ynddi; llwythwch y cyswllt ar eich porwr er mwyn cadarnhau dilysrwydd eich cyfeiriad e-bost.",
index c6f969d..406cafb 100644 (file)
@@ -691,7 +691,7 @@ Vent venligst før du prøver igen.',
 'loginlanguagelabel' => 'Sprog: $1',
 'suspicious-userlogout' => 'Din anmodning om at logge ud blev nægtet, fordi det ser ud som den blev sendt af en ødelagt browser eller caching proxy.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => "Ukendt fejl i PHP's mail()-funtion",
 'user-mail-no-addy' => 'Forsøgte at sende email uden en email-adresse',
 'user-mail-no-body' => 'Forsøgte at sende en e-mail med tomt eller urimeligt kort indhold.',
@@ -1351,7 +1351,7 @@ Hvis du vælger at oplyse dit navn, vil det blive brugt til at tilskrive dig dit
 'prefs-info' => 'Grundlæggende information',
 'prefs-i18n' => 'Internationalisering:',
 'prefs-signature' => 'Signatur',
-'prefs-dateformat' => 'Dataformat',
+'prefs-dateformat' => 'Formatering af datoer',
 'prefs-timeoffset' => 'Tidsforskel',
 'prefs-advancedediting' => 'Avancerede indstillinger',
 'prefs-advancedrc' => 'Avancerede indstillinger',
@@ -1363,7 +1363,7 @@ Hvis du vælger at oplyse dit navn, vil det blive brugt til at tilskrive dig dit
 'prefs-displaywatchlist' => 'Visningsmuligheder',
 'prefs-diffs' => 'Forskelle',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'E-mailadressen ser ud til at være gyldig',
 'email-address-validity-invalid' => 'Indtast en gyldig e-mail adresse',
 
@@ -2144,7 +2144,7 @@ Der findes muligvis [[{{MediaWiki:Listgrouprights-helppage}}|yderligere informat
 'listgrouprights-addgroup-self-all' => 'Kan tilføje alle grupper til egen konto',
 'listgrouprights-removegroup-self-all' => 'Kan fjerne alle grupper fra egen konto',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Du er ikke logget på',
 'mailnologintext' => 'Du skal være [[Special:UserLogin|logget på]] og have en gyldig e-mailadresse sat i dine [[Special:Preferences|indstillinger]] for at sende e-mail til andre brugere.',
 'emailuser' => 'E-mail til denne bruger',
@@ -3510,7 +3510,7 @@ Kun indholdet af lister (linjer startende med *) bliver brugt. Den første henvi
 'monthsall' => 'alle',
 'limitall' => 'alle',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Bekræft e-mail-adressen',
 'confirmemail_noemail' => 'Du har ikke angivet en gyldig e-mail-adresse i din [[Special:Preferences|brugerprofil]].',
 'confirmemail_text' => '{{SITENAME}} kræver, at du bekræfter en e-mail-adresse (autentificering), før du kan bruge de udvidede e-mail-funktioner. Med et klik på kontrolfeltet forneden sendes en e-mail til dig. Denne e-mail indeholder et link med en bekræftelseskode. Med et klik på dette link bekræftes, at e-mail-adressen er gyldig.',
index f82bd3c..5f416ea 100644 (file)
@@ -2174,8 +2174,10 @@ Vielleicht möchtest du die Beschreibung auf der dortigen [$2 Dateibeschreibungs
 Eine Seite gilt als Begriffsklärungsseite, wenn sie mindestens eine der auf der Seite [[MediaWiki:Disambiguationspage|Disambiguationspage]] aufgeführten Vorlagen enthält.",
 
 'pageswithprop' => 'Seiten mit einer Seiteneigenschaft',
+'pageswithprop-legend' => 'Seiten mit einer Seiteneigenschaft',
 'pageswithprop-text' => 'Diese Spezialseite listet Seiten auf, die eine bestimmte Seiteneigenschaft verwenden.',
 'pageswithprop-prop' => 'Eigenschaftsname:',
+'pageswithprop-submit' => 'Los',
 
 'doubleredirects' => 'Doppelte Weiterleitungen',
 'doubleredirectstext' => 'Diese Liste enthält Weiterleitungen, die auf Weiterleitungen verlinken.
@@ -4178,7 +4180,7 @@ 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
-'pageswithprop-legend' => 'Seiten mit einer Seiteneigenschaft',
-'pageswithprop-submit' => 'Los',
+# Image rotation
+'rotate-comment' => 'Bild um $1 {{PLURAL:$1|Grad}} im Uhrzeigersinn gedreht',
+
 );
index 1647184..2bb5a0c 100644 (file)
@@ -1348,7 +1348,7 @@ It may have been moved or deleted while you were viewing the page.',
 'loginreqtitle'                    => 'Login required',
 'loginreqlink'                     => 'log in',
 'loginreqpagetext'                 => 'You must $1 to view other pages.',
-'accmailtitle'                     => 'Password sent.',
+'accmailtitle'                     => 'Password sent',
 'accmailtext'                      => "A randomly generated password for [[User talk:$1|$1]] has been sent to $2.
 
 The password for this new account can be changed on the ''[[Special:ChangePassword|change password]]'' page upon logging in.",
index 17889f9..301984d 100644 (file)
@@ -658,7 +658,7 @@ $1',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-main' => 'Página',
-'nstab-user' => 'Página de usuari{{gender:{{#titleparts:{{BASEPAGENAME}}|1}}|o|a|o}}',
+'nstab-user' => 'Página de usuario',
 'nstab-media' => 'Media',
 'nstab-special' => 'Página especial',
 'nstab-project' => 'Página del proyecto',
index c71bd89..70329a1 100644 (file)
@@ -1398,7 +1398,7 @@ $1 {{PLURAL:$1|karakteretik|karakteretik}} behera izan behar ditu.',
 'nchanges' => '{{PLURAL:$1|aldaketa 1|$1 aldaketa}}',
 'recentchanges' => 'Aldaketa berriak',
 'recentchanges-legend' => 'Azken aldaketen aukerak',
-'recentchanges-summary' => 'Orrialde honetan wiki honetan egindako azken aldaketak erakusten dira.',
+'recentchanges-summary' => 'Orri honetan ikuska ditzakezu wiki honetan egindako azken aldaketak.',
 'recentchanges-feed-description' => 'Sindikazio honetan wikian eginiko azkeneko aldaketak jarrai daitezke.',
 'recentchanges-label-newpage' => 'Aldaketa honek orrialde berri bat sortu du',
 'recentchanges-label-minor' => 'Hau aldaketa txikia da',
index 55b833d..423d9db 100644 (file)
@@ -2239,8 +2239,10 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization را ببینید.',
 یک صفحه هنگامی صفحهٔ ابهام‌زدایی در نظر گرفته می‌شود که در آن از الگویی که به [[MediaWiki:Disambiguationspage]] پیوند دارد استفاده شده باشد.",
 
 'pageswithprop' => 'صفحه‌های دارای خاصیت صفحه',
+'pageswithprop-legend' => 'صفحه‌های دارای خاصیت صفحه',
 'pageswithprop-text' => 'این صفحه فهرستی است از صفحه‌هایی که از یک خاصیت صفحهٔ خاص استفاده می‌کنند.',
 'pageswithprop-prop' => 'نام خاصیت:',
+'pageswithprop-submit' => 'برو',
 
 'doubleredirects' => 'تغییرمسیرهای دوتایی',
 'doubleredirectstext' => 'این صفحه فهرستی از صفحه‌های تغییرمسیری را ارائه می‌کند که به صفحهٔ تغییرمسیر دیگری اشاره می‌کنند.
@@ -4289,7 +4291,7 @@ $5
 'duration-centuries' => '$1 قرن',
 'duration-millennia' => '{{PLURAL:$1|هزار سال |$1 هزار سال}}',
 
-# Unknown messages
-'pageswithprop-legend' => 'صفحه‌های دارای خاصیت صفحه',
-'pageswithprop-submit' => 'برو',
+# Image rotation
+'rotate-comment' => 'تصویر به دست $1 {{PLURAL:$1|درجهٔ|درجهٔ}} ساعت‌گرد چرخانده شد',
+
 );
index 30577a3..42bbc9b 100644 (file)
@@ -2036,7 +2036,9 @@ Täsmennyssivun sijaan ne voisivat linkittää suoraan asianomaiseen aiheeseen.<
 Sivua kohdellaan täsmennyssivuna, jos se käyttää mallinetta, johon on linkki sivulta [[MediaWiki:Disambiguationspage]].",
 
 'pageswithprop' => 'Sivut sivun ominaisuuden mukaan',
+'pageswithprop-legend' => 'Sivut sivun ominaisuuden mukaan',
 'pageswithprop-text' => 'Tällä sivulla on lueteltu sivut, jotka käyttävät erityistä sivun ominaisuutta.',
+'pageswithprop-submit' => 'Siirry',
 
 'doubleredirects' => 'Kaksinkertaiset ohjaukset',
 'doubleredirectstext' => 'Tässä listassa on ohjaussivut, jotka ohjaavat toiseen ohjaussivuun.
@@ -3996,7 +3998,4 @@ Muussa tapauksessa voit käyttää alla olevaa helpompaa lomaketta. Kommenttisi
 'duration-centuries' => '$1 {{PLURAL:$1|vuosisata|vuosisataa}}',
 'duration-millennia' => '$1 {{PLURAL:$1|vuosituhat|vuosituhatta}}',
 
-# Unknown messages
-'pageswithprop-legend' => 'Sivut sivun ominaisuuden mukaan',
-'pageswithprop-submit' => 'Siirry',
 );
index ac3698a..228d04c 100644 (file)
@@ -2153,8 +2153,10 @@ Elles devraient plutôt pointer vers le bon article.<br />
 Une page est considérée comme une page d'homonymie si elle utilise un modèle lié à [[MediaWiki:Disambiguationspage]]",
 
 'pageswithprop' => 'Pages avec une propriété de page',
+'pageswithprop-legend' => 'Pages avec une propriété de page',
 'pageswithprop-text' => 'Cette page liste les pages qui utilisent une propriété de page particulière.',
 'pageswithprop-prop' => 'Nom de la propriété:',
+'pageswithprop-submit' => 'Aller',
 
 'doubleredirects' => 'Doubles redirections',
 'doubleredirectstext' => 'Voici une liste des pages qui redirigent vers des pages qui sont elles-mêmes des pages de redirection.
@@ -4239,7 +4241,7 @@ Sinon, vous pouvez utiliser le formulaire simplifié ci-dessous. Votre commentai
 'duration-centuries' => '$1 siècle{{PLURAL:$1||s}}',
 'duration-millennia' => '$1 millénaire{{PLURAL:$1||s}}',
 
-# Unknown messages
-'pageswithprop-legend' => 'Pages avec une propriété de page',
-'pageswithprop-submit' => 'Aller',
+# Image rotation
+'rotate-comment' => 'Image pivotée de $1 {{PLURAL:$1|degré|degrés}} dans le sens des aiguilles d’une montre',
+
 );
index c2ed6cc..85faf16 100644 (file)
@@ -2058,8 +2058,10 @@ No canto de ligar cos homónimos deben apuntar cara á páxina apropiada.<br />
 Unha páxina trátase como páxina de homónimos cando nela se usa un modelo que está ligado desde [[MediaWiki:Disambiguationspage]].",
 
 'pageswithprop' => 'Páxinas cunha propiedade de páxina',
+'pageswithprop-legend' => 'Páxinas cunha propiedade de páxina',
 'pageswithprop-text' => 'Esta páxina lista aquelas páxinas que utilizan unha propiedade de páxina determinada.',
 'pageswithprop-prop' => 'Nome da propiedade:',
+'pageswithprop-submit' => 'Mostrar',
 
 'doubleredirects' => 'Redireccións dobres',
 'doubleredirectstext' => 'Esta lista contén as páxinas que redirixen cara a outras páxinas de redirección.
@@ -4071,7 +4073,7 @@ En caso contrario, pode empregar o formulario sinxelo inferior. O seu comentario
 'duration-centuries' => '$1 {{PLURAL:$1|século|séculos}}',
 'duration-millennia' => '$1 {{PLURAL:$1|milenio|milenios}}',
 
-# Unknown messages
-'pageswithprop-legend' => 'Páxinas cunha propiedade de páxina',
-'pageswithprop-submit' => 'Mostrar',
+# Image rotation
+'rotate-comment' => 'Imaxe rotada $1 {{PLURAL:$1|grao|graos}} en sentido horario',
+
 );
index 2cf9aa1..5d9db96 100644 (file)
@@ -2150,8 +2150,10 @@ $1',
 דף נחשב לדף פירושונים אם הוא משתמש בתבנית המקושרת מהדף [[MediaWiki:Disambiguationspage]].",
 
 'pageswithprop' => 'דפים עם מאפיין דף',
+'pageswithprop-legend' => 'דפים עם מאפיין דף',
 'pageswithprop-text' => 'בדף זה מופיעה רשימת דפים שמשתמשים במאפיין דף מסוים.',
 'pageswithprop-prop' => 'שם המאפיין:',
+'pageswithprop-submit' => 'הצגה',
 
 'doubleredirects' => 'הפניות כפולות',
 'doubleredirectstext' => 'בדף הזה מופיעה רשימת דפי הפניה שמפנים לדפי הפניה אחרים.
@@ -4218,7 +4220,7 @@ $5
 'duration-centuries' => '{{PLURAL:$1|מאה שנה|מאתיים שנה|$1 מאות שנים}}',
 'duration-millennia' => '{{PLURAL:$1|אלף שנה|אלפיים שנה|$1 אלפי שנים}}',
 
-# Unknown messages
-'pageswithprop-legend' => 'דפים עם מאפיין דף',
-'pageswithprop-submit' => 'הצגה',
+# Image rotation
+'rotate-comment' => 'התמונה סובבה {{PLURAL:$1|במעלה אחת|ב֫־$1 מעלות}} בכיוון השעון',
+
 );
index 80d7d6b..11cb3fd 100644 (file)
@@ -425,7 +425,7 @@ $messages = array(
 # Vector skin
 'vector-action-addsection' => 'Ավելացնել քննարկում',
 'vector-action-delete' => 'Ջնջել',
-'vector-action-move' => 'Õ\8eÕ¥Ö\80Õ¡Õ¶Õ¾Õ¡Õ¶Õ¥Õ¬',
+'vector-action-move' => 'Õ\8fÕ¥Õ²Õ¡Ö\83Õ¸Õ­Õ¥Õ¬ Õ¡ÕµÕ½ Õ§Õ»Õ¨',
 'vector-action-protect' => 'Պաշտպանել',
 'vector-action-undelete' => 'Վերականգնել',
 'vector-action-unprotect' => 'Հանել պաշտպանումից',
@@ -502,7 +502,7 @@ $1',
 'pool-errorunknown' => 'Անհայտ սխալ',
 
 # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
-'aboutsite' => '{{grammar:genitive|{{SITENAME}}}}ի մասին',
+'aboutsite' => '{{grammar:genitive|{{SITENAME}}}} մասին',
 'aboutpage' => 'Project:Էությունը',
 'copyright' => 'Կայքի բովանդակությունը գտնվում է «$1» արտոնագրի տակ։',
 'copyrightpage' => '{{ns:project}}:Հեղինակային իրավունքներ',
@@ -672,7 +672,7 @@ $2',
 'welcomecreation-msg' => 'Ձեր հաշիվն ստեղծված է։
 Չմոռանաք փոփոխել ձեր [[Special:Preferences|նախընտրությունները]]։',
 'yourname' => 'Մասնակցի անուն՝',
-'yourpassword' => 'Գաղտնաբառ.',
+'yourpassword' => 'Գաղտնաբառ՝',
 'yourpasswordagain' => 'Կրկնեք գաղտնաբառը',
 'remembermypassword' => 'Հիշել իմ մուտքագրված տվյալները այս համակարգչում ($1 {{PLURAL:$1|օրից|օրից}} ոչ ավել ժամկետով)',
 'yourdomainname' => 'Ձեր դոմենը՝',
@@ -1007,6 +1007,7 @@ $2',
 
 # Content models
 'content-model-wikitext' => 'վիքիտեքստ',
+'content-model-javascript' => 'ՋավաՍկրիպտ',
 
 # "Undo" feature
 'undo-success' => 'Խմբագրումը կարող է հետ շրջվել։ Ստուգեք տարբերակների համեմատությունը ստորև, որպեսզի համոզվեք, որ դա է ձեզ հետաքրքրող փոփոխությունը և մատնահարեք «Հիշել էջը»՝ գործողությունն ավարտելու համար։',
@@ -1261,7 +1262,7 @@ $3 մասնակիցը տվել է հետևյալ պատճառը. ''$2''",
 'prefs-emailconfirm-label' => 'Էլ-փոստի վավերացում․',
 'prefs-textboxsize' => 'Խմբագրման պատուհանի չափը',
 'youremail' => 'Էլեկտրոնային փոստ.',
-'username' => 'Մասնակցի անուն.',
+'username' => '{{GENDER:$1|Մասնակցի անուն}}՝',
 'uid' => 'Մասնակցի իդենտիֆիկատոր.',
 'prefs-memberingroups' => 'Անդամակցության {{PLURAL:$1|խումբ|խմբեր}}.',
 'prefs-registration' => 'Գրանցման ամսաթիվը․',
@@ -1622,6 +1623,8 @@ $3 մասնակիցը տվել է հետևյալ պատճառը. ''$2''",
 Փոխարենը նրանք, հավանաբար, պետք է հղեն համապատասխան թեմային։<br />
 Էջը համարվում է երկիմաստության փարատման էջ, եթե այն պարունակում է [[MediaWiki:Disambiguationspage]] էջում ընդգրկված կաղապարներից որևէ մեկը։',
 
+'pageswithprop-submit' => 'Անցնել',
+
 'doubleredirects' => 'Կրկնակի վերահղումներ',
 'doubleredirectstext' => 'Այս էջում բերված են վերահղման էջերին վերահղող էջերը։ Յուրաքանչյուր տող պարունակում է հղումներ դեպի առաջին և երկրորդ վերահղումները, ինչպես նաև երկրորդ վերահղման նպատակային էջի առաջին տողը, որում սովորաբար նշված է էջի անվանումը, որին պետք է հղի նաև առաջին վերահղումը։',
 'double-redirect-fixed-move' => '«[[$1]]» էջը վերանվանված է և այժմ վերահղում է «[[$2]]» էջին։',
@@ -1644,7 +1647,7 @@ $3 մասնակիցը տվել է հետևյալ պատճառը. ''$2''",
 'ncategories' => '$1 {{PLURAL:$1|կատեգորիա|կատեգորիաներ}}',
 'ninterwikis' => '$1 {{PLURAL:$1|ինտերվիքի|ինտերվիքիներ}}',
 'nlinks' => '$1 {{PLURAL:$1|հղում|հղումներ}}',
-'nmembers' => '$1 {{PLURAL:$1|անդամ|անդամ}}',
+'nmembers' => '$1 {{PLURAL:$1|անդամ|անդամներ}}',
 'nrevisions' => '$1 {{PLURAL:$1|տարբերակ|տարբերակներ}}',
 'nviews' => '$1 {{PLURAL:$1|դիտում|դիտումներ}}',
 'nimagelinks' => 'օգտագործվում է $1 {{PLURAL:$1|էջ|էջեր}}',
@@ -1958,9 +1961,9 @@ $NEWPAGE
 
 # Restrictions (nouns)
 'restriction-edit' => 'Խմբագրում',
-'restriction-move' => 'Õ\8fÕ¥Õ²Õ¡Ö\83Õ¸Õ­Õ¸Ö\82Õ´',
+'restriction-move' => 'Õ\8fÕ¥Õ²Õ¡Ö\83Õ¸Õ­Õ¥Õ¬',
 'restriction-create' => 'Ստեղծում',
-'restriction-upload' => 'Ô²Õ¥Õ¼Õ¶Õ¸Ö\82Õ´',
+'restriction-upload' => 'Ô²Õ¥Õ¼Õ¶Õ¥Õ¬',
 
 # Restriction levels
 'restriction-level-sysop' => 'լրիվ պաշտպանված',
@@ -2324,13 +2327,13 @@ Please visit [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] and
 'tooltip-ca-protect' => 'Պաշտպանել այս էջը',
 'tooltip-ca-delete' => 'Ջնջել այս էջը',
 'tooltip-ca-undelete' => 'Վերականգնել այս էջի խմբագրումները՝ կատարված ջնջումից առաջ',
-'tooltip-ca-move' => 'Õ\8eÕ¥Ö\80Õ¡Õ¶Õ¾Õ¡Õ¶Õ¥Õ¬ էջը',
+'tooltip-ca-move' => 'Õ\8fÕ¥Õ²Õ¡Ö\83Õ¸Õ­Õ¥Õ¬ Õ¡ÕµÕ½ էջը',
 'tooltip-ca-watch' => 'Ավելացնել այս էջը ձեր հսկողության ցանկին',
 'tooltip-ca-unwatch' => 'Հանել այս էջը ձեր հսկողության ցանկից',
 'tooltip-search' => 'Որոնել {{SITENAME}} կայքում',
 'tooltip-search-go' => 'Անցնել այս ճշգրիտ անվանումով էջին',
 'tooltip-search-fulltext' => 'Գտնել այս տեքստով էջերը',
-'tooltip-p-logo' => 'Ô³Õ¬Õ­Õ¡Õ¾Õ¸Ö\80 Õ§Õ»',
+'tooltip-p-logo' => 'Ô±ÕµÖ\81Õ¥Õ¬Õ¥Ö\84 Ô³Õ¬Õ­Õ¡Õ¾Õ¸Ö\80 Ô·Õ»Õ¨',
 'tooltip-n-mainpage' => 'Այցելեք Գլխավոր Էջը',
 'tooltip-n-mainpage-description' => 'Անցնել գլխավոր էջ',
 'tooltip-n-portal' => 'Նախագծի մասին, որտեղ գտնել ինչը, ինչով կարող եք օգնել',
@@ -2550,6 +2553,8 @@ $1',
 'exif-componentsconfiguration-0' => 'գոյություն չունի',
 
 'exif-urgency-normal' => 'Նորմալ ($1)',
+'exif-urgency-low' => 'Թույլ ($1)',
+'exif-urgency-high' => 'Ուժեղ ($1)',
 
 # External editor support
 'edit-externally' => 'Խմբագրել այս նիշքը արտաքին խմբագրիչով',
index 7643f6c..2c71229 100644 (file)
@@ -1967,8 +1967,10 @@ Istes debe forsan ligar directemente al articulo sur le thema in question.<br />
 Un pagina se tracta como pagina de disambiguation si illo usa un patrono que es ligate ab [[MediaWiki:Disambiguationspage]].",
 
 'pageswithprop' => 'Paginas con un proprietate de pagina',
+'pageswithprop-legend' => 'Paginas con un proprietate de pagina',
 'pageswithprop-text' => 'Iste pagina lista le paginas que usa un certe proprietate de pagina.',
 'pageswithprop-prop' => 'Nomine del proprietate:',
+'pageswithprop-submit' => 'Va',
 
 'doubleredirects' => 'Redirectiones duple',
 'doubleredirectstext' => 'Iste pagina lista paginas de redirection verso altere paginas de redirection.
@@ -3988,7 +3990,7 @@ Si non, tu pote usar le formulario facile hic infra. Tu commento essera addite a
 'duration-centuries' => '$1 {{PLURAL:$1|seculo|seculos}}',
 'duration-millennia' => '$1 {{PLURAL:$1|millennio|millennios}}',
 
-# Unknown messages
-'pageswithprop-legend' => 'Paginas con un proprietate de pagina',
-'pageswithprop-submit' => 'Va',
+# Image rotation
+'rotate-comment' => 'Imagine rotate de $1 {{PLURAL:$1|grado|grados}} in senso horologic',
+
 );
index d03eb29..b8f27d7 100644 (file)
@@ -2113,6 +2113,12 @@ Cek dahulu pranala lain ke templat tersebut sebelum menghapusnya.',
 Halaman-halaman tersebut seharusnya berpaut ke topik-topik yang sesuai.<br />
 Suatu halaman dianggap sebagai halaman disambiguasi apabila halaman tersebut menggunakan templat yang terhubung ke [[MediaWiki:Disambiguationspage]].",
 
+'pageswithprop' => 'Halaman dengan halaman properti',
+'pageswithprop-legend' => 'Halaman dengan halaman properti',
+'pageswithprop-text' => 'Halaman ini berisi daftar halaman yang menggunakan properti halaman tertentu.',
+'pageswithprop-prop' => 'Nama properti:',
+'pageswithprop-submit' => 'Pergi',
+
 'doubleredirects' => 'Pengalihan ganda',
 'doubleredirectstext' => 'Halaman ini memuat daftar halaman yang dialihkan ke halaman pengalihan yang lain.
 Setiap baris memuat pranala ke pengalihan pertama dan pengalihan kedua serta target dari pengalihan kedua yang umumnya adalah halaman yang "sebenarnya". Halaman peralihan pertama seharusnya dialihkan ke halaman yang bukan merupakan halaman peralihan.
@@ -4239,4 +4245,7 @@ Jika tidak, Anda dapat menggunakan formulir mudah di bawah ini. Komentar Anda ak
 'duration-centuries' => '{{PLURAL:$1||}}$1 abad',
 'duration-millennia' => '{{PLURAL:$1||}}$1 milenium',
 
+# Image rotation
+'rotate-comment' => 'Gambar diputar $1 {{PLURAL:$1|derajat}} searah jarum jam',
+
 );
index 125f2c6..553bf8c 100644 (file)
@@ -1851,6 +1851,12 @@ Laglagipem ti agkita kadagiti sabsabali a panilpo ti plantilia sakbay nga ikkate
 Dagitoy ket embes a nasken a maisilpoda kadagiti maitutop a panid.<br />
 Ti panid ket matrato a kas panangilawlawag a panid no agusar ti plantilia a nakasilpo manipud idiay [[MediaWiki:Disambiguationspage]].",
 
+'pageswithprop' => 'Pampanid nga adda maysa a tagikua ti panid',
+'pageswithprop-legend' => 'Pampanid nga adda maysa a tagikua ti panid',
+'pageswithprop-text' => 'Daytoy a panid ket ilistana ti pampanid nga agus-usar ti naisangayan a tagikua ti panid.',
+'pageswithprop-prop' => 'Nagan ti tagikua:',
+'pageswithprop-submit' => 'Inkan',
+
 'doubleredirects' => 'Dagiti namindua a naibaw-ing',
 'doubleredirectstext' => 'Daytoy a panid ket ilistana dagiti panid nga agbaw-ing kadagiti sabsabali a baw-ing a pampanid.
 Iti tunggal maysa nga aray ket adda nagyanna kadagiti panilpo iti umuna ken maikadua a baw-ing, ken iti puntaan iti maikadua a baw-ing, nga isu ti "pudno" a puntaan ti panid, nga ti umuna a baw-ing ket isu ti ipatudona.
@@ -3819,4 +3825,7 @@ Nupay kasta, mau-sarmo ti nakabuklan dita baba. Ti komentario nga itedmo ket mai
 'duration-centuries' => '$1 {{PLURAL:$1|siglo|sig-siglo}}',
 'duration-millennia' => '$1 {{PLURAL:$1|milenio|mil-milenio}}',
 
+# Image rotation
+'rotate-comment' => 'Ti ladawan ket napusipos babaen ti $1 {{PLURAL:$1|a degrado|a degdegrado}} nga agpakanawan',
+
 );
index b10d7d7..8b883bd 100644 (file)
@@ -2025,8 +2025,10 @@ Esse potrebbero dover puntare a una pagina più appropriata.<br />
 Vengono considerate pagine di disambiguazione tutte quelle che contengono i template elencati in [[MediaWiki:Disambiguationspage]].",
 
 'pageswithprop' => 'Pagine con una pagina di proprietà',
+'pageswithprop-legend' => 'Pagine con una pagina di proprietà',
 'pageswithprop-text' => 'Questa pagina elenca le pagine che utilizzano una particolare pagina di proprietà.',
 'pageswithprop-prop' => 'Nome proprietà:',
+'pageswithprop-submit' => 'Vai',
 
 'doubleredirects' => 'Redirect doppi',
 'doubleredirectstext' => 'In questa pagina sono elencate pagine che reindirizzano ad altre pagine di redirect.
@@ -4006,7 +4008,7 @@ Le immagini vengono mostrate alla massima risoluzione disponibile, per gli altri
 'duration-centuries' => '$1 {{PLURAL:$1|secolo|secoli}}',
 'duration-millennia' => '$1 {{PLURAL:$1|millennio|millenni}}',
 
-# Unknown messages
-'pageswithprop-legend' => 'Pagine con una pagina di proprietà',
-'pageswithprop-submit' => 'Vai',
+# Image rotation
+'rotate-comment' => 'Immagine ruotata di $1 {{PLURAL:$1|grado|gradi}} in senso orario',
+
 );
index 2a3b8d9..3b89696 100644 (file)
@@ -1039,7 +1039,7 @@ $1または他の[[{{MediaWiki:Grouppage-sysop}}|管理者]]にこのブロッ
 'loginreqtitle' => 'ログインが必要',
 'loginreqlink' => 'ログイン',
 'loginreqpagetext' => '他のページを閲覧するには$1する必要があります。',
-'accmailtitle' => 'パスワードをお送りしました',
+'accmailtitle' => 'パスワードをお送りしました',
 'accmailtext' => "[[User talk:$1|$1]]のために無作為に生成したパスワードを、$2に送信しました。
 
 この新アカウントのパスワードは、ログインした際に''[[Special:ChangePassword|パスワード変更]]''ページで変更できます。",
@@ -1047,10 +1047,10 @@ $1または他の[[{{MediaWiki:Grouppage-sysop}}|管理者]]にこのブロッ
 'newarticletext' => "まだ存在しないページへのリンクをたどりました。
 このページを新規作成するには、ページの内容を以下のボックスに記入してください (詳しくは[[{{MediaWiki:Helppage}}|ヘルプページ]]を参照してください)。
 誤ってこのページにたどり着いた場合には、ブラウザーの'''戻る'''ボタンで前のページに戻ってください。",
-'anontalkpagetext' => "----''このページはアカウントをまだ作成していないか使用していない匿名利用者のための議論ページです。
-匿名利用者を識別するために、利用者名の代わりにIPアドレスが使用されています。
-IP アドレスは複数の利用者で共有されている場合があります。
-もし、あなたが匿名利用者であり、自分に関係のないコメントが寄せられている考えられる場合は、[[Special:UserLogin/signup|アカウントを作成する]]か[[Special:UserLogin|ログインして]]他の匿名利用者と間違えられないようにしてください。''",
+'anontalkpagetext' => "----
+''このページはアカウントをまだ作成していないか使用していない匿名利用者のための議論ページです。''
+
+匿名利用者を識別するために、利用者名の代わりにIPアドレスが使用されています。IP アドレスは複数の利用者で共有されている場合があります。もし、あなたが匿名利用者であり、自分に関係のないコメントが寄せられていると考えられる場合は、[[Special:UserLogin/signup|アカウントを作成する]]か[[Special:UserLogin|ログインして]]他の匿名利用者と間違えられないようにしてください。",
 'noarticletext' => '現在このページには内容がありません。
 他のページ内で[[Special:Search/{{PAGENAME}}|このページ名を検索]]、
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 関連する記録を検索]、
@@ -2209,8 +2209,10 @@ contenttype/subtypeの形式で入力してください (例: <code>image/jpeg</
 [[MediaWiki:Disambiguationspage]] にリンクがあるテンプレートを使用しているページを、曖昧さ回避ページと見なします。",
 
 'pageswithprop' => 'ページプロパティがあるページ',
+'pageswithprop-legend' => 'ページプロパティがあるページ',
 'pageswithprop-text' => 'このページでは、特定のページプロパティを持つページを列挙します。',
 'pageswithprop-prop' => 'プロパティ名:',
+'pageswithprop-submit' => '実行',
 
 'doubleredirects' => '二重転送',
 'doubleredirectstext' => 'このページでは、転送ページへの転送ページを列挙します。
@@ -4382,7 +4384,7 @@ MediaWikiは、有用であることを期待して配布されていますが
 'duration-centuries' => '$1 {{PLURAL:$1|世紀}}',
 'duration-millennia' => '$1{{PLURAL:$1|,000 年}}',
 
-# Unknown messages
-'pageswithprop-legend' => 'ページプロパティがあるページ',
-'pageswithprop-submit' => '実行',
+# Image rotation
+'rotate-comment' => '画像を時計回りに $1 {{PLURAL:$1|度}}回転',
+
 );
index ed04290..db53e86 100644 (file)
@@ -1962,6 +1962,7 @@ $1',
 გვერდი ითვლება მრავამნიშვნელოვნად, თუ მასში განთავსებულია თარგი, რომლის სახელიც მითითებულია გვერდზე [[MediaWiki:Disambiguationspage]].",
 
 'pageswithprop-prop' => 'თვისების სახელი:',
+'pageswithprop-submit' => 'მიდი',
 
 'doubleredirects' => 'ორმაგი გადამისამართება',
 'doubleredirectstext' => 'ამ გვერდზე ჩამოთვლილია გვერდები, რომლებიც გადამისამართებულია სხვა გადამისამართების გვერდებზე.
@@ -4028,6 +4029,4 @@ MediaWiki ვრცელდება იმ იმედით, რომ ი
 'duration-centuries' => '$1 {{PLURAL:$1|საუკუნე|საუკუნე}}',
 'duration-millennia' => '$1 {{PLURAL:$1|ათასწლეული|ათასწლეული}}',
 
-# Unknown messages
-'pageswithprop-submit' => 'მიდი',
 );
index 0c50dcf..9de6252 100644 (file)
@@ -624,8 +624,8 @@ $1',
 'toc' => '목차',
 'showtoc' => '보이기',
 'hidetoc' => '숨기기',
-'collapsible-collapse' => 'ì\88¨ê¸°기',
-'collapsible-expand' => '보이기',
+'collapsible-collapse' => 'ì \91기',
+'collapsible-expand' => '펼치기',
 'thisisdeleted' => '$1을 보거나 되살리겠습니까?',
 'viewdeleted' => '$1을 보겠습니까?',
 'restorelink' => '삭제된 편집 $1개',
@@ -2168,8 +2168,10 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 [[MediaWiki:Disambiguationspage]]에서 링크된 틀을 사용하는 문서를 동음이의 문서로 간주합니다.",
 
 'pageswithprop' => '문서 속성으로 된 문서',
+'pageswithprop-legend' => '문서 속성으로 된 문서',
 'pageswithprop-text' => '이 문서는 특정 문서 속성을 사용한 문서를 나타냅니다.',
 'pageswithprop-prop' => '속성 이름:',
+'pageswithprop-submit' => '가기',
 
 'doubleredirects' => '이중 넘겨주기 목록',
 'doubleredirectstext' => '이 문서는 다른 넘겨주기 문서로 넘겨주고 있는 문서의 목록입니다.
@@ -4210,7 +4212,7 @@ $5
 'duration-centuries' => '$1{{PLURAL:$1|세기}}',
 'duration-millennia' => '$1{{PLURAL:$1|천년}}',
 
-# Unknown messages
-'pageswithprop-legend' => '문서 속성으로 된 문서',
-'pageswithprop-submit' => '가기',
+# Image rotation
+'rotate-comment' => '그림을 시계 방향으로 $1{{PLURAL:$1|도}}로 회전함',
+
 );
index 7d21f9e..306ce1a 100644 (file)
@@ -1924,7 +1924,9 @@ Si sollte am beschten op déi eigentlech gemengte Säit verlinkt sinn.<br />
 Eng Säite gëtt als Homonymie-Säit behandelt, wa si eng Schabloun benotzt déi vu [[MediaWiki:Disambiguationspage]] verlinkt ass.",
 
 'pageswithprop' => 'Säite mat enger Säiten-Eegeschaft',
+'pageswithprop-legend' => 'Säite mat enger Säiten-Eegeschaft',
 'pageswithprop-prop' => 'Numm vun der Eegeschaft:',
+'pageswithprop-submit' => 'Lass',
 
 'doubleredirects' => 'Duebel Viruleedungen',
 'doubleredirectstext' => 'Op dëser Säit stinn déi Säiten déi op aner Viruleedungssäite viruleeden.
@@ -3865,7 +3867,4 @@ Soss kënnt Dir den einfache Formulär hei drënner benotzen. Är Bemierkung gë
 'duration-centuries' => '$1 {{PLURAL:$1|Joerhonnert|Joerhonnerten}}',
 'duration-millennia' => '$1 {{PLURAL:$1|Millenaire|Millenairen}}',
 
-# Unknown messages
-'pageswithprop-legend' => 'Säite mat enger Säiten-Eegeschaft',
-'pageswithprop-submit' => 'Lass',
 );
index b62520c..53ed722 100644 (file)
@@ -2167,8 +2167,10 @@ $1',
 Една страница се смета за страница за појаснување ако го користи шаблонот што води од [[MediaWiki:Disambiguationspage]]",
 
 'pageswithprop' => 'Страници со својство',
+'pageswithprop-legend' => 'Страници со својство',
 'pageswithprop-text' => 'На страницава се наведени страници што користат дадено својство.',
 'pageswithprop-prop' => 'Име на својството:',
+'pageswithprop-submit' => 'Оди',
 
 'doubleredirects' => 'Двојни пренасочувања',
 'doubleredirectstext' => 'Оваа страница ги прикажува пренасочувачките страници до други пренасочувачки страници.
@@ -4348,7 +4350,7 @@ $5
 'duration-centuries' => '$1 {{PLURAL:$1|век|века}}',
 'duration-millennia' => '$1 {{PLURAL:$1|милениум|милениуми}}',
 
-# Unknown messages
-'pageswithprop-legend' => 'Страници со својство',
-'pageswithprop-submit' => 'Оди',
+# Image rotation
+'rotate-comment' => 'Сликата е завртена за $1 {{PLURAL:$1|степен|степени}} вдесно',
+
 );
index 13280cc..ed747db 100644 (file)
@@ -2192,8 +2192,10 @@ Deze horen waarschijnlijk direct naar een meer toepasselijke pagina te verwijzen
 Een pagina wordt gezien als doorverwijspagina als er een sjabloon op staat dat opgenomen is op [[MediaWiki:Disambiguationspage]].",
 
 'pageswithprop' => "Pagina's met een pagina-eigenschap",
+'pageswithprop-legend' => "Pagina's met een pagina-eigenschap",
 'pageswithprop-text' => "Op deze pagina worden pagina's weergegeven met een bepaalde pagina-eigenschap.",
 'pageswithprop-prop' => 'Naam van de eigenschap:',
+'pageswithprop-submit' => 'OK',
 
 'doubleredirects' => 'Dubbele doorverwijzingen',
 'doubleredirectstext' => "Deze lijst bevat pagina's die doorverwijzen naar andere doorverwijspagina's.
@@ -4237,7 +4239,4 @@ Anders kunt u ook het eenvoudige formulier hieronder gebruiken. Uw reactie wordt
 'duration-centuries' => '$1 {{PLURAL:$1|eeuw|eeuwen}}',
 'duration-millennia' => '$1 {{PLURAL:$1|millennium|millennia}}',
 
-# Unknown messages
-'pageswithprop-legend' => "Pagina's met een pagina-eigenschap",
-'pageswithprop-submit' => 'OK',
 );
index ffdc7c6..62483f9 100644 (file)
@@ -2046,8 +2046,10 @@ Dei bør kan henda lenkja til ei meir passande side i staden.<br />
 Ei side vert handsama som ei fleirtydingsside om ho nyttar ein mal som er lenkja til frå [[MediaWiki:Disambiguationspage]].",
 
 'pageswithprop' => 'Sider med ein sideeigenskap',
+'pageswithprop-legend' => 'Sider med ein sideeigenskap',
 'pageswithprop-text' => 'Denne sida listar opp sider som nyttar ein viss sideeigenskap.',
 'pageswithprop-prop' => 'Namn på eigenskap:',
+'pageswithprop-submit' => 'Gå',
 
 'doubleredirects' => 'Doble omdirigeringar',
 'doubleredirectstext' => 'Kvar line inneheld lenkjer til den første og den andre omdirigeringa, og den første lina frå den andre omdirigeringsteksten. Det gjev som regel den «rette» målartikkelen, som den første omdirigeringa skulle ha peikt på. <del>Overstrykne</del> liner har vorte retta på.',
@@ -3993,7 +3995,4 @@ Om ikkje kan du nytta det enkle skjemaet under. Merknaden din vert lagd til på
 'duration-centuries' => '$1 {{PLURAL:$1|hundreår|hundreår}}',
 'duration-millennia' => '$1 {{PLURAL:$1|tusenår|tusenår}}',
 
-# Unknown messages
-'pageswithprop-legend' => 'Sider med ein sideeigenskap',
-'pageswithprop-submit' => 'Gå',
 );
index 2cea497..fad29ed 100644 (file)
@@ -808,7 +808,7 @@ Odczekaj chwilę zanim ponowisz próbę.',
 'loginlanguagelabel' => 'Język: $1',
 'suspicious-userlogout' => 'Żądanie wylogowania zostało odrzucone ponieważ wygląda na to, że zostało wysłane przez uszkodzoną przeglądarkę lub buforujący serwer proxy.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Wystąpił nieznany błąd w funkcji PHP mail()',
 'user-mail-no-addy' => 'Próba wysłania e‐maila bez adresu odbiorcy',
 'user-mail-no-body' => 'Próbowano wysłać e-mail o psutej lub krótkiej treści.',
@@ -1491,7 +1491,7 @@ Jeśli zdecydujesz się je podać, zostaną użyte, by udokumentować Twoje auto
 'prefs-displaywatchlist' => 'Opcje wyświetlania',
 'prefs-diffs' => 'Zmiany',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'Wygląda na prawidłowy',
 'email-address-validity-invalid' => 'Wymagany jest prawidłowy adres!',
 
@@ -2282,7 +2282,7 @@ Sprawdź stronę z [[{{MediaWiki:Listgrouprights-helppage}}|dodatkowymi informac
 'listgrouprights-addgroup-self-all' => 'Może dodać własne konto do wszystkich grup',
 'listgrouprights-removegroup-self-all' => 'Może usunąć własne konto ze wszystkich grup',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Brak adresu',
 'mailnologintext' => 'Musisz się [[Special:UserLogin|zalogować]] i mieć wpisany aktualny adres e‐mailowy w swoich [[Special:Preferences|preferencjach]], aby móc wysłać e‐mail do innego użytkownika.',
 'emailuser' => 'Wyślij e‐mail do tego użytkownika',
@@ -3136,6 +3136,7 @@ Najprawdopodobniej zostało to spowodowane przez link do zewnętrznej strony int
 'pageinfo-robot-noindex' => 'Nieindeksowalne',
 'pageinfo-views' => 'Odsłon',
 'pageinfo-watchers' => 'Liczba obserwujących',
+'pageinfo-few-watchers' => 'Mniej niż $1 {{PLURAL:$1|obserwujący|obserwujących}}',
 'pageinfo-redirects-name' => 'Liczba przekierowań do tej strony',
 'pageinfo-subpages-name' => 'Liczba podstron tej strony',
 'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|przekierowanie|przekierowania|przekierowań}}; $3 {{PLURAL:$3|bez przekierowania|bez przekierowań|bez przekierowań}})',
@@ -3691,7 +3692,7 @@ Pozostałe pola zostaną domyślnie ukryte.
 'monthsall' => 'wszystkie',
 'limitall' => 'wszystkie',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Potwierdzanie adresu e‐mail',
 'confirmemail_noemail' => 'Nie podał{{GENDER:|eś|aś|eś/aś}} prawidłowego adresu e‐mail w [[Special:Preferences|preferencjach]].',
 'confirmemail_text' => 'Projekt {{SITENAME}} wymaga weryfikacji adresu e‐mail przed użyciem funkcji korzystających z poczty.
@@ -4144,4 +4145,7 @@ W przeciwnym wypadku można użyć prostego formularza poniżej. Komentarz zosta
 'duration-centuries' => '$1 {{PLURAL:$1|stulecie|stulecia|stuleci}}',
 'duration-millennia' => '$1 {{PLURAL:$1|tysiąclecie|tysiąclecia|tysiącleci}}',
 
+# Image rotation
+'rotate-comment' => 'Obraz został odwrócony o $1 {{PLURAL:$1|stopień|stopnie|stopni}} (w kierunku zgodnym z ruchem wskazówek zegara)',
+
 );
index 7eff256..802f02b 100644 (file)
@@ -2115,8 +2115,10 @@ Talvez fosse melhor que possuissem links para uma página mais específica.</br>
 Uma página é considerada como de desambiguação se utilizar uma predefinição que esteja definida em [[MediaWiki:Disambiguationspage]].",
 
 'pageswithprop' => 'Páginas com uma propriedade de página',
+'pageswithprop-legend' => 'Páginas com uma propriedade de página',
 'pageswithprop-text' => 'Esta página lista as páginas que usam uma determinada propriedade de página.',
 'pageswithprop-prop' => 'Nome da propriedade:',
+'pageswithprop-submit' => 'Ir',
 
 'doubleredirects' => 'Redirecionamentos duplos',
 'doubleredirectstext' => 'Esta página lista as páginas que redirecionam para outros redirecionamentos.
@@ -4096,7 +4098,4 @@ Caso contrário, você poderá usar o formulário simplificado a seguir. Seu com
 'duration-centuries' => '$1 {{PLURAL:$1|século|séculos}}',
 'duration-millennia' => '$1 {{PLURAL:$1|milênio|milênios}}',
 
-# Unknown messages
-'pageswithprop-legend' => 'Páginas com uma propriedade de página',
-'pageswithprop-submit' => 'Ir',
 );
index 0cf597b..b29addc 100644 (file)
@@ -756,7 +756,8 @@ The format is: "{{int:youhavenewmessagesmulti| [[MediaWiki:Newmessageslink/{{SUB
 This is the link used to collapse a collapsible element. (used as plaintext. No wikitext or html is parsed.)
 
 See also:
-* {{msg-mw|Collapsible-expand}}',
+* {{msg-mw|Collapsible-expand}}
+{{Identical|Collapse}}',
 'collapsible-expand' => '{{Doc-actionlink}}
 This is the link used to expand a collapsible element (used as plaintext. No wikitext or html is parsed.)
 
@@ -814,8 +815,7 @@ See also:
 * {{msg-mw|Accesskey-ca-nstab-main}}
 * {{msg-mw|Tooltip-ca-nstab-main}}
 {{Identical|Page}}',
-'nstab-user' => 'The name for the tab of the user namespace. Example: [[User:Example]]. It is possible to use <nowiki>
-{{GENDER:{{#titleparts:{{BASEPAGENAME}}|1}}|male form|female form}}</nowiki> if needed.
+'nstab-user' => 'The name for the tab of the user namespace. Example: [[User:Example]]. It is possible to use <nowiki>{{GENDER:{{BASEPAGENAME}}|male form|female form}}</nowiki> if needed.
 
 See also:
 * {{msg-mw|Nstab-user}}
@@ -3877,9 +3877,13 @@ This block of text is shown on [[:Special:Disambiguations]].
 
 'pageswithprop' => 'Title for [[Special:PagesWithProp]].
 {{Identical|Page with page property}}',
+'pageswithprop-legend' => 'Legend for the input form on [[Special:PagesWithProp]].
+{{Identical|Page with page property}}',
 'pageswithprop-text' => 'Introductory text for the input form on [[Special:PagesWithProp]]',
 'pageswithprop-prop' => 'Label for the property name input field on [[Special:PagesWithProp]].
 {{Identical|Property name}}',
+'pageswithprop-submit' => 'Label for the submit button on [[Special:PagesWithProp]].
+{{Identical|Go}}',
 
 'doubleredirects' => 'Name of [[Special:DoubleRedirects]] displayed in [[Special:SpecialPages]]',
 'doubleredirectstext' => 'Shown on top of [[Special:Doubleredirects]]',
@@ -8782,12 +8786,7 @@ $4 is the gender of the target user.',
 'duration-centuries' => '{{Related|Duration}}',
 'duration-millennia' => '{{Related|Duration}}',
 
-# Rotation
-'rotation-comment' => 'comment set for new version uploaded after rotation',
+# Image rotation
+'rotate-comment' => 'Edit summary for the act of rotating an image.',
 
-# Unknown messages
-'pageswithprop-legend' => 'Legend for the input form on [[Special:PagesWithProp]].
-{{Identical|Page with page property}}',
-'pageswithprop-submit' => 'Label for the submit button on [[Special:PagesWithProp]].
-{{Identical|Go}}',
 );
index 0a58032..59c163e 100644 (file)
@@ -2086,8 +2086,10 @@ Acestea ar trebui să conțină legături către un articol mai potrivit.<br />
 O pagină este considerată o pagină de dezambiguizare dacă folosește formate care apar la [[MediaWiki:Disambiguationspage]].",
 
 'pageswithprop' => 'Pagini cu o proprietate de pagină',
+'pageswithprop-legend' => 'Pagini cu o proprietate de pagină',
 'pageswithprop-text' => 'Această pagină listează paginile care utilizează o anumită proprietate de pagină.',
 'pageswithprop-prop' => 'Numele proprietății:',
+'pageswithprop-submit' => 'Du-te',
 
 'doubleredirects' => 'Redirecționări duble',
 'doubleredirectstext' => 'Această listă conține pagini care redirecționează la alte pagini de redirecționare.
@@ -4064,7 +4066,7 @@ Imaginile sunt afișate la rezoluția lor maximă, în timp ce alte tipuri de fi
 'duration-centuries' => '$1 {{PLURAL:$1|secol|secole|de secole}}',
 'duration-millennia' => '$1 {{PLURAL:$1|mileniu|milenii|de milenii}}',
 
-# Unknown messages
-'pageswithprop-legend' => 'Pagini cu o proprietate de pagină',
-'pageswithprop-submit' => 'Du-te',
+# Image rotation
+'rotate-comment' => 'Imagine rotită în sensul acelor de ceasornic cu $1 {{PLURAL:$1|grad|grade|de grade}}',
+
 );
index 0157ad5..556ec83 100644 (file)
@@ -1864,8 +1864,10 @@ Arrecuèrdete de condrollà pe otre collegaminde a le template apprime de scange
 'Na pàgene jè trattate cumme pàgene de disambiguazione ce tu ause 'nu template ca è appundate da [[MediaWiki:Disambiguationspage]]",
 
 'pageswithprop' => "Pàggene cu 'na probbietà d'a pàgene",
+'pageswithprop-legend' => "Pàggene cu 'na probbietà d'a pàgene",
 'pageswithprop-text' => "Sta pàgene elenghe le pàggene ca ausane 'na particolare probbietà d'a pàgene.",
 'pageswithprop-prop' => "Nome d'a probbietà:",
+'pageswithprop-submit' => 'Véje',
 
 'doubleredirects' => 'Ridirezionaminde a doppie',
 'doubleredirectstext' => "Sta pàgene elenghe le pàggene ca se ridirezionane sus a otre pàggene de ridirezionaminde.
@@ -4093,7 +4095,7 @@ Ce nò, tu puè ausà 'u module facile aqquà sotte. 'U commende tune avène agg
 'duration-centuries' => '$1 {{PLURAL:$1|sechele|sechele}}',
 'duration-millennia' => '$1 {{PLURAL:$1|millennie|millennie}}',
 
-# Unknown messages
-'pageswithprop-legend' => "Pàggene cu 'na probbietà d'a pàgene",
-'pageswithprop-submit' => 'Véje',
+# Image rotation
+'rotate-comment' => 'Immaggine rotate de $1 {{PLURAL:$1|grade}} in sienze orarie',
+
 );
index ab57bb6..5de63cf 100644 (file)
@@ -2195,8 +2195,10 @@ $1',
 Страница считается многозначной, если на ней размещён шаблон, имя которого указано на странице [[MediaWiki:Disambiguationspage]].",
 
 'pageswithprop' => 'Страницы с переопределёнными свойствами',
+'pageswithprop-legend' => 'Страницы с переопределёнными свойствами',
 'pageswithprop-text' => 'Здесь перечислены страницы, у которых были вручную переопределены отдельные свойства.',
 'pageswithprop-prop' => 'Название свойства:',
+'pageswithprop-submit' => 'Найти',
 
 'doubleredirects' => 'Двойные перенаправления',
 'doubleredirectstext' => 'На этой странице представлен список перенаправлений на другие перенаправления.
@@ -4286,7 +4288,4 @@ MediaWiki распространяется в надежде, что она бу
 'duration-centuries' => '$1 {{PLURAL:$1|век|века|веков}}',
 'duration-millennia' => '$1 {{PLURAL:$1|тысячелетие|тысячелетия|тысячелетий}}',
 
-# Unknown messages
-'pageswithprop-legend' => 'Страницы с переопределёнными свойствами',
-'pageswithprop-submit' => 'Найти',
 );
index 4c28cab..a09a709 100644 (file)
@@ -13,6 +13,7 @@
  * @author Irena Plahuta
  * @author McDutchie
  * @author Smihael
+ * @author Vadgt
  * @author XJamRastafire
  * @author Yerpo
  * @author romanm
@@ -1998,8 +1999,10 @@ Namesto tega bi morda bilo bolje, da se povezujejo na primernejše strani.<br />
 Stran se obravnava kot razločitvena, če uporablja predloge, povezane z [[MediaWiki:Disambiguationspage]].",
 
 'pageswithprop' => 'Strani z lastnostmi strani',
+'pageswithprop-legend' => 'Strani z lastnostmi strani',
 'pageswithprop-text' => 'Stran navaja vse strani, ki uporabljajo določene lastnosti strani.',
 'pageswithprop-prop' => 'Ime lastnosti:',
+'pageswithprop-submit' => 'Pojdi',
 
 'doubleredirects' => 'Dvojne preusmeritve',
 'doubleredirectstext' => 'Ta stran navaja strani, ki se preusmerjajo na druge preusmeritvene strani.
@@ -3985,7 +3988,7 @@ V nasprotnem primeru lahko uporabite preprost obrazec spodaj. Vašo pripombo bom
 'duration-centuries' => '$1 {{PLURAL:$1|stoletje|stoletji|stoletja|stoletij}}',
 'duration-millennia' => '$1 {{PLURAL:$1|tisočletje|tisočletji|tisočletja|tisočletij}}',
 
-# Unknown messages
-'pageswithprop-legend' => 'Strani z lastnostmi strani',
-'pageswithprop-submit' => 'Pojdi',
+# Image rotation
+'rotate-comment' => 'Slika zavrti s  $1  {{PLURAL:$1| degree|degrees}} v smeri urinega kazalca',
+
 );
index 9a531b8..d0aec6b 100644 (file)
@@ -2098,8 +2098,10 @@ De bör troligtvis ändras så att de länkar till en mer passande sida iställe
 En sida anses vara en förgreningssida om den inkluderar en mall som länkas till från [[MediaWiki:Disambiguationspage]].",
 
 'pageswithprop' => 'Sidor med en sidegenskap',
+'pageswithprop-legend' => 'Sidor med en sidegenskap',
 'pageswithprop-text' => 'Denna sida listar sidor som använder en speciell sidegenskap.',
 'pageswithprop-prop' => 'Egenskapsnamn:',
+'pageswithprop-submit' => 'Gå',
 
 'doubleredirects' => 'Dubbla omdirigeringar',
 'doubleredirectstext' => 'Det här är en lista över sidor som dirigerar om till andra omdirigeringssidor. Varje rad innehåller länkar till den första och andra omdirigeringsidan, samt till målet för den andra omdirigeringen. Målet för den andra omdirigeringen är ofta den "riktiga" sidan, som den första omdirigeringen egentligen ska leda till.
@@ -4100,7 +4102,7 @@ Annars kan du använda det enkla formuläret nedan. Din kommentar kommer att lä
 'duration-centuries' => '$1 {{PLURAL:$1|sekel|sekel}}',
 'duration-millennia' => '$1 {{PLURAL:$1|millennium|millennier}}',
 
-# Unknown messages
-'pageswithprop-legend' => 'Sidor med en sidegenskap',
-'pageswithprop-submit' => 'Gå',
+# Image rotation
+'rotate-comment' => 'Bilden roteras $1 {{PLURAL:$1|grad|grader}} medurs',
+
 );
index 371a819..9a9c71f 100644 (file)
@@ -77,7 +77,7 @@ $messages = array(
 'tog-hidepatrolled' => 'Пинҳон кардани вироишҳои гаштхӯрда дар тағйироти охир',
 'tog-newpageshidepatrolled' => 'Пинҳони саҳифаҳои гаштхӯрда аз феҳристи саҳифаҳои нав',
 'tog-extendwatchlist' => 'Густариши феҳристи пайгириҳо барои нишон додани ҳамаи тағйиротҳо, на танҳо аз ҳама охирин',
-'tog-usenewrc' => 'Ð\90з Ñ\82аÒ\93йиÑ\80оÑ\82и Ð¾Ñ\85иÑ\80и Ð³Ñ\83Ñ\81Ñ\82аÑ\80иÑ\88Ñ\91Ñ\84Ñ\82а Ð¸Ñ\81Ñ\82иÑ\84ода Ð±Ð°Ñ\80ед(ҶаваСкÑ\80ипÑ\82 Ð»Ð¾Ð·Ð¸Ð¼ Ð°Ñ\81т)',
+'tog-usenewrc' => 'Ð\93Ñ\83Ñ\80ӯҳбандии Ñ\82аÒ\93ийÑ\80оÑ\82 Ð±Ð°Ñ\80 Ð¿Ð¾Ñ\8fи Ñ\81аÑ\84ҳа Ð´Ð°Ñ\80 Ñ\82аÒ\93ийÑ\80оÑ\82и Ð¾Ñ\85иÑ\80 Ð²Ð° Ñ\84еҳÑ\80иÑ\81Ñ\82и Ð¿Ð°Ð¹Ð³Ð¸Ñ\80иҳо (ниÑ\91зманди Ò¶Ð°Ð²Ð°Ð¡ÐºÑ\80ипт)',
 'tog-numberheadings' => 'шуморагузори~и худкори инвонҳо',
 'tog-showtoolbar' => 'Намоиши навори абзори вироиш (JavaScript)',
 'tog-editondblclick' => 'Вироиш намудани саҳифаҳо ҳангоми ду карат пахш намудани тугмаи мушак (JavaScript)',
@@ -85,17 +85,17 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Ба кор андохтани вироиши сарлавҳаҳои қисматҳо бо клики рост (ҶаваСкрипт)',
 'tog-showtoc' => 'Намоиши феҳристи мундариҷон (барои мақолаҳои бо беш аз 3 сарлавҳа)',
 'tog-rememberpassword' => 'Вуруди манро дар ин мурургар дар хотир нигоҳ дор (ҳадди аксар то $1 {{PLURAL:$1|рӯз|рӯз}})',
-'tog-watchcreations' => 'Ð\94оÑ\85ил Ð½Ð°Ð¼Ñ\83дани Ñ\81аҳиÑ\84аҳое, ÐºÐ¸ Ð¼Ð°Ð½ Ñ\81оÑ\85Ñ\82аам Ð±Ð° Ñ\84еҳÑ\80иÑ\81Ñ\82и Ð½Ð°Ð·Ð°Ñ\80оÑ\82и Ð¼Ð°Ð½',
-'tog-watchdefault' => 'Саҳифаҳои эҷодкардаамро ба феҳристи пайгириам илова кунед',
-'tog-watchmoves' => 'Саҳифаҳои кӯчонидаамро ба феҳристи пайгириҳоям илова кунед',
-'tog-watchdeletion' => 'Саҳифаҳои эҷодкардаи манро ба феҳристи пайгириҳоям илова кунед',
+'tog-watchcreations' => 'СаҳиÑ\84аҳое, ÐºÐ¸ Ð¼ÐµÑ\81озам Ð²Ð° Ð¿Ð°Ñ\80вандаҳое, ÐºÐ¸ Ð±Ð¾Ñ\80гÑ\83зоÑ\80Ó£ Ð¼ÐµÐºÑ\83нам Ð±Ð° Ñ\84еҳÑ\80иÑ\81Ñ\82и Ð¿Ð°Ð¹Ð³Ð¸Ñ\80иҳоÑ\8fм Ð°Ñ\84зÑ\83да Ñ\88авад.',
+'tog-watchdefault' => 'Саҳифаҳо ва парвандаҳое, ки вироиш мекунам ба феҳристи пайгириҳоям афзуда шавад',
+'tog-watchmoves' => 'Саҳифаҳо ва парвандаҳое, ки мунтақил мекунам ба феҳристи пайгириҳоям афзуда шавад',
+'tog-watchdeletion' => 'Саҳифаҳо ва парвандаҳое, ки ҳазф мекунам ба феҳристи пайгириҳоям афзуда шавад',
 'tog-minordefault' => 'Пешфарзи ҳамаи вироишҳоро ҷузъи ишора кунед',
 'tog-previewontop' => 'Намоиши пешнамоиши қаблӣ пеш аз қуттии вироиш ва на пас аз он',
 'tog-previewonfirst' => 'Нишон додани пешнамоиш дар нахустин вироиш',
 'tog-nocache' => 'Ҳофизаи ниҳонии саҳифа дар мурургар ғайрифаъол шавад',
-'tog-enotifwatchlistpages' => 'Агар саҳифае мавриди пайгирии ман тағйир карда шавад ба ман тариқи почтаи электронӣ пайём бифиристед.',
+'tog-enotifwatchlistpages' => 'Агар сафҳа ё парвандае аз феҳристи пайгириҳоям вироиш шуд ба ман номае фиристода шавад',
 'tog-enotifusertalkpages' => 'Ҳангоме ки дар саҳифаи корбариам тағйир дода мешавад ба ман тариқи почтаи электронӣ пайём бифиристед.',
-'tog-enotifminoredits' => 'Ð\91аÑ\80ои Ñ\82аÒ\93йиÑ\80оÑ\82и Ò·Ñ\83зÑ\8aи Ð±Ð° Ð¼Ð°Ð½ Ñ\82аÑ\80иÒ\9bи Ð¿Ð¾Ñ\87Ñ\82аи Ñ\8dлекÑ\82Ñ\80онӣ Ð¿Ð°Ð¹Ñ\91м Ð±Ð¸Ñ\84иÑ\80иÑ\81Ñ\82ед.',
+'tog-enotifminoredits' => 'Ð\91аÑ\80ои Ñ\82аÒ\93ийÑ\80оÑ\82и Ò·Ñ\83зÑ\8aÓ£ Ð´Ð°Ñ\80 Ñ\81аÑ\84ҳаҳо Ð²Ð° Ð¿Ð°Ñ\80вандаҳо Ò³Ð°Ð¼ Ð±Ð° Ð¼Ð°Ð½ Ð½Ð¾Ð¼Ð°Ðµ Ñ\84иÑ\80иÑ\81Ñ\82ода Ñ\88авад',
 'tog-enotifrevealaddr' => 'Нишонаи почтаи электронии ман дар номаҳои иттилорасонӣ қайд шавад',
 'tog-shownumberswatching' => 'Нишон додани шумораи корбарони пайгир',
 'tog-oldsig' => 'Пешнамоиши имзои вуҷуддошта:',
@@ -118,7 +118,7 @@ $messages = array(
 
 'underline-always' => 'Доимо',
 'underline-never' => 'Ҳеҷгоҳ',
-'underline-default' => 'Пешфарзи мурургар',
+'underline-default' => 'Пӯст ё мурургари пешфарз',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Сабки қалами ҷаъбаи вироиш:',
@@ -196,14 +196,15 @@ $messages = array(
 'listingcontinuesabbrev' => 'идома',
 'index-category' => 'Саҳифаҳои намояшуда',
 'noindex-category' => 'Саҳифаҳои намоиянашуда',
+'broken-file-category' => 'Саҳифаҳои дорои пайванди шикаста ба парванда',
 
 'about' => 'Дар бораи',
 'article' => 'Саҳифаи мӯҳтаво',
 'newwindow' => '(дар равзанаи ҷадид боз мешавад)',
 'cancel' => 'Лағв',
 'moredotdotdot' => 'Бештар...',
-'mypage' => 'Саҳифаи ман',
-'mytalk' => 'Ð\93Ñ\83Ñ\84Ñ\82Ñ\83гӯи Ð¼Ð°Ð½',
+'mypage' => 'Саҳифа',
+'mytalk' => 'Ð\91аҳÑ\81',
 'anontalk' => 'Баҳс бо ин IP',
 'navigation' => 'Гаштан',
 'and' => '&#32;ва',
@@ -424,7 +425,7 @@ $1',
 'viewsource' => 'Намоиши матни вики',
 'actionthrottled' => 'Ҷилави амали шумо гирифта шуд',
 'actionthrottledtext' => 'Ба манзури ҷилавгирӣ аз спам, шумо иҷоза надоред, ки чунин амалеро беш аз чанд бор дар як муддати замони кӯтоҳ анҷом бидиҳед. Лутфан пас аз чанд дақиқа дубора талош кунед.',
-'protectedpagetext' => 'Ин саҳифа барои ҷилавгирӣ аз вироиш қуфл шудааст.',
+'protectedpagetext' => 'Ин саҳифа барои ҷилавгирӣ аз вироиш ва дигар амалҳо қуфл шудааст.',
 'viewsourcetext' => 'Шумо метавонед матни викии ин саҳифаро назар кунед ё нусха бардоред:',
 'protectedinterface' => 'Ин саҳифа ороишдиҳандаи матни ин нармафзор аст, ва ба манзури пешгирӣ аз харобкорӣ қуфл шудааст.',
 'editinginterface' => "'''Огоҳӣ:''' Шумо саҳифаеро вироиш карда истодаед, ки матни интерфейси барнома мебошад. Тағйироти ин саҳифа барои намуди интерфейси дигар корбарон таъсир хоҳад расонид. Барои тарҷумаҳо, лутфан аз [//translatewiki.net/wiki/Main_Page?setlang=tg Бетавики], ки лоиҳаи маҳаликунонии МедиаВики мебошад, истифода кунед.",
@@ -464,6 +465,7 @@ $1',
 'createaccount' => 'Ҳисоби ҷадидеро созед',
 'gotaccount' => "Ҳисоби корбарӣ доред? '''$1'''.",
 'gotaccountlink' => 'Вуруд шавед',
+'userlogin-resetlink' => 'Ҷузъиёти вурудро фаромӯш кардаед?',
 'createaccountmail' => 'бо почтаи электронӣ',
 'createaccountreason' => 'Сабаб:',
 'badretype' => 'Калимаҳои убуре, ки ворид кардаед бо ҳамдигар мувофиқат намекунанд.',
@@ -529,12 +531,18 @@ $1',
 'resetpass_forbidden' => 'Дар {{SITENAME}} калимаҳои убурро наметавон тағйир дод',
 'resetpass-no-info' => 'Барои дастрасии мустақим ба ин саҳифа шумо бояд ба систем ворид шуда бошед.',
 'resetpass-submit-loggedin' => 'Тағйири гузарвожа',
+'resetpass-submit-cancel' => 'Лағв',
 'resetpass-wrong-oldpass' => 'Гузарвожаи мувақат ё охир номӯътабар.
 Мумкин аст, ки шумо аллакай гузарвожаатонро бо муваффақият тағйир дода бошед ё дархости як гузарвожаи мувақатӣ карда бошед.',
 'resetpass-temp-password' => 'Гузарвожаи муваққатӣ:',
 
 # Special:PasswordReset
-'passwordreset-username' => 'Номи корбарӣ',
+'passwordreset-username' => 'Номи корбарӣ:',
+'passwordreset-emailelement' => 'Номи корбарӣ: $1
+Гузарвожаи муваққатӣ: $2',
+
+# Special:ChangeEmail
+'changeemail-cancel' => 'Лағв',
 
 # Edit page toolbar
 'bold_sample' => 'Матни пурранг',
@@ -627,7 +635,8 @@ $1',
 'userinvalidcssjstitle' => "'''Ҳушдор:'''Пӯсте бо номи \"\$1\" вуҷуд надорад. Таваҷҷӯҳ кунед ки саҳифаҳои .css ва .js бо ҳарфҳои хурд навишта мешаванд, Намуна. {{ns:user}}:Фу/vector.css дар муқобили корбар {{ns:user}}:Фу/Vector.css.",
 'updated' => '(Ба рӯз шуда)',
 'note' => "'''Эзоҳ:'''",
-'previewnote' => "'''Ин фақат пешнамоиш аст; дигаргуниҳо ҳоло захира нашудаанд!'''",
+'previewnote' => "'''Ба ёд дошта бошед, ки ин фақат пешнамоиш аст.'''
+Тағийроти шумо ҳанӯз захира нашудааст!",
 'previewconflict' => 'Ин пешнамоиш аккоскунандаи матни ноҳияи вироиш дар боло аст ва агар онро захира кунед бо ҳамин шакл нишода дода хоҳад шуд.',
 'session_fail_preview' => "'''Бубахшед! Аз сабаби аз даст рафтани иттилооти нишасти корбарӣ, наметавонем вироишҳои шуморо пардозиш кунем.
 Лутфан дубора саъй кунед. Агар боз бо ҳамин паём рӯ ба рӯ шавед, аз систем хориҷ шавед ва муҷаддадан ворид шавед.'''",
@@ -681,6 +690,9 @@ $1',
 Шумо зарурияти вироиши ин саҳифаро дида баромаданатон лозим.
 Сабти ҳазфшавии ин саҳифа барои фароҳам овардани имкониятҳои қулай оварда шудааст:",
 
+# Parser/template warnings
+'post-expand-template-argument-category' => 'Саҳифаҳои ҳавои шаблонҳои бо параметрҳои нодида гирифташуда',
+
 # "Undo" feature
 'undo-success' => 'Ин вироиш метавонад ботил шавад. Лутфан муқоисаи зеринро барои таъйид кардани амалӣ худ, баррасӣ кунед, ва баъдан барои анҷом додани ботилкунии вироиш тағйироти зеринро захира кунед.',
 'undo-failure' => 'Ба иллати бархӯрдани вироишҳои дар миён омада, ин вироишро ботил наметавон кард.',
@@ -711,6 +723,7 @@ $1',
 Шарҳ: (феълӣ) тафовут бо нусхаи феълӣ
 (қаблӣ) = тафовут бо нусхаи феълӣ, ҷузъ = вироиши ҷузъӣ',
 'history-fieldset-title' => 'Мурури таърих',
+'history-show-deleted' => 'Фақат ҳазфшуда',
 'histfirst' => 'Аввалин',
 'histlast' => 'Охирин',
 'historysize' => '({{PLURAL:$1|1 байт|$1 байт}})',
@@ -754,6 +767,7 @@ $1',
 'revdelete-success' => "'''Тағйири намоёнии нусха бо муваффақият анҷом шуд.'''",
 'logdelete-success' => "'''Тағйири намоёнии маврид бо муваффақият анҷом шуд.'''",
 'revdel-restore' => 'Тағйири падидорӣ',
+'revdel-restore-deleted' => 'нусхаҳои ҳазфшуда',
 'revdel-restore-visible' => 'нусхаҳои намоён',
 'pagehist' => 'Таърихи саҳифа',
 'deletedhist' => 'Таърихи ҳазфшуда',
@@ -796,7 +810,7 @@ $1',
 'lineno' => 'Сатри $1:',
 'compareselectedversions' => 'Нусхаҳои интихобшударо муқоиса кунед',
 'editundo' => 'ботил',
-'diff-multi' => '({{PLURAL:$1|вироиши миёнӣ|$1 вироишоти миёнӣ}} нишон дода нашудааст.)',
+'diff-multi' => '({{PLURAL:$1|як|$1}} вироиш миёнӣ тавассути {{PLURAL:$2|як|$2}} корбар нишон дода нашудааст)',
 
 # Search results
 'searchresults' => 'Натиҷаҳои ҷустуҷӯ',
@@ -813,16 +827,19 @@ $1',
 'nextn' => 'баъдӣ {{PLURAL:$1|$1}}',
 'viewprevnext' => 'Намоиш ($1 {{int:pipe-separator}} $2) ($3)',
 'searchmenu-legend' => 'Гузинаҳои ҷустуҷӯ',
+'searchmenu-exists' => "'''Саҳифае бо номи \"[[:\$1]]\" дар ин вики вуҷуд дорад.'''",
 'searchmenu-new' => "'''Эҷоди саҳифаи \"[[:\$1]]\" дар ин вики!'''",
 'searchhelp-url' => 'Help:Мундариҷа',
-'searchprofile-articles' => 'Саҳифаҳои мӯҳтавоӣ',
-'searchprofile-project' => 'Саҳифаҳои лоиҳа',
-'searchprofile-images' => 'Парвандаҳо',
+'searchprofile-articles' => 'Саҳифаҳои мӯҳтаво',
+'searchprofile-project' => 'Саҳифаҳои роҳномо ва лоиҳа',
+'searchprofile-images' => 'Чандрасонаӣ',
+'searchprofile-everything' => 'Ҳамачиз',
 'searchprofile-advanced' => 'Пешрафта',
 'searchprofile-articles-tooltip' => 'Ҷустуҷӯ дар $1',
 'searchprofile-project-tooltip' => 'Ҷустуҷӯ дар $1',
 'searchprofile-images-tooltip' => 'Ҷустуҷӯи парвандаҳо',
 'searchprofile-everything-tooltip' => 'Ҷустуҷӯи ҳамаи мӯҳтаво (бо ҳисоби саҳифаҳои баҳс)',
+'searchprofile-advanced-tooltip' => 'Ҷустуҷӯ дар фазоҳои номи дилхоҳ',
 'search-result-size' => '$1 ({{PLURAL:$2|1 калима|$2 калимаҳо}})',
 'search-result-score' => 'Иртибот: $1%',
 'search-redirect' => '(тағйири масир $1)',
@@ -838,6 +855,7 @@ $1',
 'showingresultsnum' => "Намоиши {{PLURAL:$3|'''1''' натиҷа|'''$3''' натоиҷ}} оғоз аз #'''$2'''.",
 'nonefound' => "'''Эзоҳ''': Танҳо чанд фазоиномҳо аз рӯи пешфарш ҷустуҷӯ мешаванд.
 Ҷустуҷӯи худро бо пешванди ''ҳама:'' барои ҷустуҷӯи мӯҳтавои пурра (саҳифаҳои баҳс, шаблонҳо ва ғайраҳо) такрор кунед, ё фазои номи дилхоҳро чун пешванд истифода баред.",
+'search-nonefound' => 'Натиҷаи муносиб бо дархост пайдо нашуд.',
 'powersearch' => 'Ҷустуҷӯ',
 'powersearch-legend' => 'Ҷустуҷӯи пешрафта',
 'powersearch-ns' => 'Ҷустуҷӯ дар фазоҳои ном:',
@@ -856,7 +874,7 @@ $1',
 
 # Preferences page
 'preferences' => 'Тарҷиҳот',
-'mypreferences' => 'Тарҷиҳоти ман',
+'mypreferences' => 'Танзимот',
 'prefs-edits' => 'Шумораи вироишҳо:',
 'prefsnologin' => 'Ба систем ворид нашудаед',
 'prefsnologintext' => 'Барои танзими тарҷиҳоти корбарӣ бояд [[Special:UserLogin|вуруд ба систем шавед]].',
@@ -916,7 +934,7 @@ $1',
 'gender-female' => 'Зан',
 'email' => 'Почтаи электронӣ',
 'prefs-help-realname' => 'Номи ҳақиқӣ ихтиёрӣ ва агар шумо онро пешниҳод кунед онро ҳамчун муаллифи эҷодиётатон ёдоварӣ карда хоҳад шуд.',
-'prefs-help-email' => 'Нишонаи почтаи электронӣ (ихтиёрӣ); тамоси дигар корбарон бо шуморо ба василаи номаи электронӣ аз тариқи саҳифаи корбарӣ ё саҳифаи баҳси корбарӣ, бидуни ниёз ба фош кардани сомона ва нишонаи воқеъи почтаи электронии шумо мумкин месозад.',
+'prefs-help-email' => 'Нишонаи электронӣ ихтиёрист, аммо фиристодани гузарвожаи навро агар гузарвожаи худро фаромӯш кунед мумкин мегардад.',
 'prefs-help-email-required' => 'Нишони почтаи электрони лозим аст.',
 
 # User rights
@@ -1022,6 +1040,10 @@ $1',
 'recentchanges-legend' => 'Ихтиёроти тағйироти охирин',
 'recentchanges-summary' => 'Назорати тағйиротҳои навтарин дар Википедиа дар ҳамин саҳифа аст.',
 'recentchanges-feed-description' => 'Радёбии охирин тағйироти ин вики дар ин хурд.',
+'recentchanges-label-newpage' => 'Ин вироиш саҳифаи нав эҷод кард',
+'recentchanges-label-minor' => 'Ин вироиши ҷузъи аст',
+'recentchanges-label-bot' => 'Ин вироишро робот анҷом додааст',
+'recentchanges-label-unpatrolled' => 'Ин вироиш ҳанӯз гаштзанӣ нашудааст',
 'rcnote' => "Дар поён  {{PLURAL:$1|'''1''' тағйире аст|'''$1''' тағйирот мебошанд}}, ки дар давоми {{PLURAL:$2|рӯҳ|'''$2''' рӯзҳои}} охир, сар карда аз $5, $4.",
 'rcnotefrom' => 'Дар зер тағйиротҳои охирин аз <b>$2</b> (то <b>$1</b> нишон дода шудааст).',
 'rclistfrom' => 'Нишон додани тағйиротҳои нав сар карда аз $1',
@@ -1140,7 +1162,7 @@ $1',
 'upload-curl-error28-text' => 'Ин сомона беш аз андоза дар посух тӯл кард. Лутфан баррасӣ кунед, ки оё сомона фаъол ва бар хат аст ё на. Сипас лаҳзае интизор шавед ва дубора талош кунед. Шояд бад набошад дар вақти н он қадар банд дубора талош кунед.',
 
 'license' => 'Иҷозатнома:',
-'license-header' => 'Иҷозатнома:',
+'license-header' => 'Иҷозатнома',
 'nolicense' => 'Ҳеҷ яке интихоб нашудааст',
 'license-nopreview' => '(Пешнамоиш вуҷуд надорад)',
 'upload_source_url' => '(як нишони интернетии мӯътабар ва оммавӣ)',
@@ -1306,6 +1328,7 @@ $1',
 'protectedtitlestext' => 'Унвонҳои зерин аз эҷод муҳофизат шудаанд',
 'protectedtitlesempty' => 'Дар ҳоли ҳозир ҳеҷ унвоне бо ин параметрҳо муҳофизат нащудааст',
 'listusers' => 'Рӯйхати корбарон',
+'usercreated' => '{{GENDER:$3|Эҷодшуда}} дар таърихи $1 дар соати $2',
 'newpages' => 'Саҳифаҳои нав',
 'newpages-username' => 'Номи корбар:',
 'ancientpages' => 'Саҳифаҳои кӯҳнатарин',
@@ -1386,7 +1409,7 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'listgrouprights-helppage' => 'Help:Дастрасиҳои гурӯҳӣ',
 'listgrouprights-members' => '(феҳристи аъзоён)',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Нишонае аз фиристанда вуҷуд надорад',
 'mailnologintext' => 'Барои фиристодани почтаи электронӣ барои корбарони дигар бояд [[Special:UserLogin|ба систем ворид шавед]] ва нишонаи почтаи электронии мӯътабар дар [[Special:Preferences|тарҷиҳоти]] худ дошта бошед.',
 'emailuser' => 'Фиристодани email ба ин корбар',
@@ -1408,8 +1431,9 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'emailsenttext' => 'Номаи почтаи электронии шумо фиристода шуд.',
 
 # Watchlist
-'watchlist' => 'Феҳристи назароти ман',
-'mywatchlist' => 'Феҳристи назароти ман',
+'watchlist' => 'Феҳристи пайгирӣ',
+'mywatchlist' => 'Феҳристи пайгириҳо',
+'watchlistfor2' => 'Барои $1 $2',
 'nowatchlist' => 'Дар феҳристи пайгириҳои шумо ҳеҷ мавриде нест.',
 'watchlistanontext' => 'Лутфан барои мушоҳида ва вироиши феҳристи пайгириҳои худ аз $1 истифода кунед.',
 'watchnologin' => 'Вуруд нашуда',
@@ -1486,6 +1510,7 @@ $NEWPAGE
 'historywarning' => 'Ҳушдор: Саҳифае ки шумо ҳазф карданиед, таърих дорад:',
 'confirmdeletetext' => 'Шумо дар ҳоли ҳазф кардани як саҳифа ё аксе аз пойгоҳ дода ҳамроҳ бо тамоми таърихи он ҳастед. Лутфан ин амалро тасдиқ кунед ва итминон ҳосил кунед, ки оқибати ин корро медонед ва ин амалро мутобиқи [[{{MediaWiki:Policy-url}}|сиёсати ҳазф]] анҷом медиҳед.',
 'actioncomplete' => 'Амал иҷро шуд',
+'actionfailed' => 'Амал номуваффақ шуд',
 'deletedtext' => '"$1" ҳазф шудааст.
 Нигаред ба $2 барои гузориши ҳазфи охирин.',
 'dellogpage' => 'Гузоришҳои ҳазф',
@@ -1615,9 +1640,9 @@ $1',
 'blanknamespace' => '(Аслӣ)',
 
 # Contributions
-'contributions' => 'Ҳиссагузории корбар',
+'contributions' => 'Ҳиссагузориҳои {{GENDER:$1|корбар}}',
 'contributions-title' => 'Ҳиссагузориҳои корбар барои $1',
-'mycontris' => 'Хиссагузории ман',
+'mycontris' => 'Ҳиссагузориҳо',
 'contribsub2' => 'Барои $1 ($2)',
 'nocontribs' => 'Ҳеҷ тағйире бо ин мушаххасот пайдо нашуд.',
 'uctop' => '(боло)',
@@ -1628,7 +1653,9 @@ $1',
 'sp-contributions-newbies-sub' => 'Барои навкорон',
 'sp-contributions-blocklog' => 'Гузориши басташуданҳо',
 'sp-contributions-deleted' => 'Ҳиссагузориҳои ҳазфшудаи корбар',
-'sp-contributions-talk' => 'Баҳс',
+'sp-contributions-uploads' => 'боргузориҳо',
+'sp-contributions-logs' => 'гузоришҳо',
+'sp-contributions-talk' => 'баҳс',
 'sp-contributions-userrights' => 'Мудирияти ихтиёроти корбарӣ',
 'sp-contributions-search' => 'Ҷустуҷӯи ҳиссагузориҳо',
 'sp-contributions-username' => 'IP нишона ё номи корбар:',
@@ -1643,13 +1670,14 @@ $1',
 'nolinkshere-ns' => "Ҳеҷ саҳифа аз фазоиноми интихобшуда ба '''[[:$1]]''' пайванд надорад.",
 'isredirect' => 'саҳифаи тағйири масир',
 'istemplate' => 'истифодашуда дар саҳифа',
-'isimage' => 'пайванди акс',
+'isimage' => 'пайванд ба парванда',
 'whatlinkshere-prev' => '{{PLURAL:$1|қаблӣ|қаблӣ $1}}',
 'whatlinkshere-next' => '{{PLURAL:$1|баъдӣ|баъдӣ $1}}',
 'whatlinkshere-links' => '← пайвандҳо',
 'whatlinkshere-hideredirs' => '$1 тағйири масир',
 'whatlinkshere-hidetrans' => '$1 трансгунҷоишҳо',
 'whatlinkshere-hidelinks' => '$1 пайвандҳо',
+'whatlinkshere-hideimages' => '$1 пайвандҳои парванда',
 'whatlinkshere-filters' => 'Филтрҳо',
 
 # Block/unblock
@@ -1692,7 +1720,7 @@ $1',
 'ipusubmit' => 'Боз кардани дастрасӣ',
 'unblocked' => 'Дастрасии [[User:$1|$1]] боз карда шуд',
 'unblocked-id' => 'Қатъи дастрасии шумораи $1 хотима ёфт',
-'ipblocklist' => 'IP нишонаҳо ва номҳои корбарии баста шуда',
+'ipblocklist' => 'Корбарони басташуда',
 'ipblocklist-legend' => 'Ҷустуҷӯи корбари баста шуда',
 'ipblocklist-submit' => 'Ҷустуҷӯ',
 'infiniteblock' => 'бе поён',
@@ -1959,6 +1987,7 @@ $1',
 'tooltip-rollback' => '"Вогард" вироиш(ҳо)ро ба ин саҳифаи охирин ҳиссагузор бо як клик мегардонад',
 'tooltip-undo' => '"Ботил" ин вироишро ботил мекунад ва форми вироишро дар ҳолати пешнамоиш боз мекунад.
 Ин имкони илова кардани як сабаберо дар хулоса медиҳад.',
+'tooltip-summary' => 'Хулосаи кӯтоҳ ворид кунед',
 
 # Metadata
 'notacceptable' => 'Коргузори ин вики аз ирсоли дода ба шакле ки барномаи шумо битавонад намоиш диҳад, пешкаш карда наметавонад.',
@@ -2048,7 +2077,7 @@ $1',
 'metadata-help' => 'Ин парванда иттилооти иловагиро дар бар мегирад, эҳтимол аз аксбардораки рақамӣ ё сканер дар вақти сохтан ва рақамӣ кардан, илова шудааст. Агар парванда аз вазъияти ибтидоиаш тағйир дода бошад, мумкин аст, шарҳу тафсилоти мавҷуди иттилооти аксро тамоман бозтоб надиҳад.',
 'metadata-expand' => 'Намоиши ҷузъиёти тафсилӣ',
 'metadata-collapse' => 'Пинҳон кардани ҷузъиёти тафсилӣ',
-'metadata-fields' => 'EXIF фосилаҳои додаҳо, ки дар ин паём оварда шудаанд дар ҷадвали акс ҷамъ шуда бошанд ҳам, намоиш дода хоҳанд шуд. Бақия онҳо танҳо дар вақти боз кардани ҷадвал нишон дода хоҳанд шуд.
+'metadata-fields' => 'Фарододаҳои тасвир нишон додашуда дар ин пайғом вақти ҷадвал фарододаҳои тавсир ҷамъ шуда бошад ҳам намоиш дода мешавад. Бақияи маворид танҳо замоне нишон дода мешавад, ки ҷадвали ёдшуда боз шавад.
 * make
 * model
 * datetimeoriginal
@@ -2318,7 +2347,7 @@ $1',
 'monthsall' => 'ҳама',
 'limitall' => 'ҳама',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Тасдиқи нишонаи почтаи электронӣ',
 'confirmemail_noemail' => 'Шумо дар саҳифаи [[Special:Preferences|тарҷиҳоти корбарии]] худ нишонаи почтаи электронии мӯътабареро ворид накардаед.',
 'confirmemail_text' => '{{SITENAME}} таъйиди эътибои почтаи электронии шуморо пеш аз истифода хидмати электронӣ талаб мекунад. Тугмаи зеринро фаъол кунед то номаи таъйидӣ ба почтаи электронии шумо фиристода шавад. Ин нома пайвандеро дар бар мегирад, ки коде дорад; пайвандро дар мурургар боз кунед, то ки почтаи электрониатон  дар ҳақиқат таъйид шавад.',
@@ -2511,6 +2540,7 @@ $5
 'blankpage' => 'Саҳифаи холӣ',
 
 # Special:Tags
+'tag-filter' => 'Филтри [[Special:Tags|барчасбҳо]]:',
 'tags-edit' => 'вироиш',
 
 # Database error messages
index 30a3d36..be70c70 100644 (file)
@@ -1895,10 +1895,10 @@ $1',
 'doubleredirectstext' => 'หน้านี้แสดงรายการหน้าที่เปลี่ยนทางไปยังหน้าเปลี่ยนทางอื่น
 แต่ละแถวมีการเชื่อมโยงไปยังการเปลี่ยนทางครั้งแรกและครั้งที่สอง เช่นเดียวกับเป้าหมายของการเปลี่ยนทางครั้งที่สอง ซึ่งมักเป็นหน้าเป้าหมาย "ที่แท้จริง" ที่การเปลี่ยนแปลงครั้งแรกควรชี้ไป
 หน่วยที่<del>ขีดฆ่า</del> คือ รายการที่ได้แก้ไขแล้ว',
-'double-redirect-fixed-move' => '[[$1]] à¸\96ูà¸\81à¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อแล้ว 
+'double-redirect-fixed-move' => '[[$1]] à¹\84à¸\94à¹\89ยà¹\89ายแล้ว 
 ขณะนี้เปลี่ยนทางไปยัง [[$2]]',
 'double-redirect-fixed-maintenance' => 'การแก้ไขการเปลี่ยนทางซ้ำซ้อนจาก [[$1]] ไปยัง [[$2]]',
-'double-redirect-fixer' => 'à¸\9cูà¹\89ซ่อมหน้าเปลี่ยนทาง',
+'double-redirect-fixer' => 'à¸\95ัวซ่อมหน้าเปลี่ยนทาง',
 
 'brokenredirects' => 'หน้าเปลี่ยนทางเสีย',
 'brokenredirectstext' => 'หน้าเปลี่ยนทางต่อไปนี้เชื่อมโยงไปยังหน้าที่ยังไม่ถูกสร้าง:',
@@ -2356,7 +2356,7 @@ $1',
 'undelete-filename-mismatch' => 'ไม่สามารถกู้คืนรุ่นไฟล์ที่มีตราเวลา $1: ชื่อไฟล์ไม่ตรง',
 'undelete-bad-store-key' => 'ไม่สามารถกู้คืนรุ่นไฟล์ที่มีตราเวลา $1: ไฟล์สูญหายก่อนถูกลบ',
 'undelete-cleanup-error' => 'เกิดความผิดพลาดในการลบไฟล์กรุที่ไม่ใช้แล้ว "$1"',
-'undelete-missing-filearchive' => 'ไม่สามารถกู้คืนไฟล์เก่าหมายเลข $1 เพราะไม่มีในฐานข้อมูล 
+'undelete-missing-filearchive' => 'à¹\84มà¹\88สามารà¸\96à¸\81ูà¹\89à¸\84ืà¸\99à¹\84à¸\9fลà¹\8cà¹\80à¸\81à¹\88าหมายà¹\80ลà¸\82 $1 à¹\80à¸\9eราะà¹\84มà¹\88มีà¸\82à¹\89อมูลà¹\83à¸\99à¸\90าà¸\99à¸\82à¹\89อมูล 
 ไฟล์อาจถูกกู้คืนไปแล้ว',
 'undelete-error' => 'เกิดข้อผิดพลาดในการกู้คืนหน้า',
 'undelete-error-short' => 'เกิดข้อผิดพลาดในการกู้คืนไฟล์: $1',
@@ -2438,10 +2438,10 @@ $1',
 ** ใส่ข้อมูลเท็จ
 ** ลบเนื้อหาในหน้าออก
 ** ใส่ลิงก์สแปม
-** ใส่ข้อความขยะเข้ามา
-** à¸\84ุà¸\81à¸\84ามà¸\9cูà¹\89อืà¹\88
-** à¸\81à¹\88อà¸\81วà¸\99à¸\9cูà¹\89อืà¹\88à¸\99
-** à¸\8aืà¹\88อà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\97ีà¹\88à¹\84มà¹\88สุภาà¸\9eหรือà¹\84มà¹\88à¸\84วรà¹\83à¸\8a้',
+** à¹\83สà¹\88à¸\82à¹\89อà¸\84วามà¹\84รà¹\89สาระ/à¸\82ยะà¹\80à¸\82à¹\89ามา
+** à¸\9eฤà¸\95ิà¸\81รรมà¸\82à¹\88มà¸\82ูà¹\88/รัà¸\87à¸\84วา
+** à¹\83à¸\8aà¹\89หลายà¸\9aัà¸\8dà¸\8aีà¹\83à¸\99à¸\97าà¸\87à¸\97ีà¹\88à¸\9cิà¸\94
+** à¸\8aืà¹\88อà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\97ีà¹\88à¹\84มà¹\88อาà¸\88ยอมรัà¸\9aà¹\84à¸\94้',
 'ipb-hardblock' => 'ป้องกันไม่ให้ผู้ใช้ล็อกอินแก้ไขจากเลขที่อยู่ไอพีนี้',
 'ipbcreateaccount' => 'ป้องกันการสร้างบัญชี',
 'ipbemailban' => 'ป้องกันมิให้ผู้ใช้ส่งอีเมล',
@@ -2463,12 +2463,12 @@ $1',
 'ipb-blockingself' => 'คุณกำลังบล็อกตัวเอง! แน่ใจแล้วหรือว่าต้องการทำอย่างนั้น',
 'ipb-confirmhideuser' => 'คุณกำลังบล็อกผู้ใช้โดยเป็นผู้ใช้ "ซ่อนผู้ใช้" ซึ่งจะระงับชื่อผู้ใช้ในรายการและหน่วยปูมทั้งหมด คุณแน่ใจหรือว่าต้องการดำเนินการเช่นนั้น',
 'ipb-edit-dropdown' => 'แก้ไขสาเหตุการบล็อก',
-'ipb-unblock-addr' => 'à¹\80ลิà¸\81บล็อก $1',
-'ipb-unblock' => 'à¹\80ลิà¸\81บล็อกผู้ใช้หรือเลขที่อยู่ไอพี',
+'ipb-unblock-addr' => 'à¸\9bลà¸\94บล็อก $1',
+'ipb-unblock' => 'à¸\9bลà¸\94บล็อกผู้ใช้หรือเลขที่อยู่ไอพี',
 'ipb-blocklist' => 'ดูการบล็อกปัจจุบัน',
 'ipb-blocklist-contribs' => 'ผลงานเขียนโดย $1',
 'unblockip' => 'ปลดบล็อกผู้ใช้',
-'unblockiptext' => 'à¹\83à¸\8aà¹\89à¹\81à¸\9aà¸\9aà¸\94à¹\89าà¸\99ลà¹\88าà¸\87สำหรัà¸\9aคืนสิทธิการเข้าถึงการเขียนแก่เลขที่อยู่ไอพี หรือชื่อผู้ใช้ที่เคยถูกบล็อก',
+'unblockiptext' => 'à¹\83à¸\8aà¹\89à¹\81à¸\9aà¸\9aà¸\94à¹\89าà¸\99ลà¹\88าà¸\87à¹\80à¸\9eืà¹\88อคืนสิทธิการเข้าถึงการเขียนแก่เลขที่อยู่ไอพี หรือชื่อผู้ใช้ที่เคยถูกบล็อก',
 'ipusubmit' => 'ยกเลิกการบล็อกนี้',
 'unblocked' => '[[User:$1|$1]] ถูกบล็อก',
 'unblocked-range' => '$1 ถูกปลดบล็อกแล้ว',
@@ -2486,16 +2486,16 @@ $1',
 'blocklist-by' => 'ผู้ดูแลระบบที่บล็อก',
 'blocklist-params' => 'พารามิเตอร์การบล็อก',
 'blocklist-reason' => 'เหตุผล',
-'ipblocklist-submit' => 'สืà¸\9aà¸\84à¹\89à¸\99',
-'ipblocklist-localblock' => 'à¸\81ารสà¸\81ัà¸\94à¸\81ัà¹\89à¸\99ภายในวิกินี้',
-'ipblocklist-otherblocks' => '{{PLURAL:$1|à¸\81ารสà¸\81ัà¸\94à¸\81ัà¹\89à¸\99}}อืà¹\88à¸\99à¹\86',
+'ipblocklist-submit' => 'à¸\84à¹\89à¸\99หา',
+'ipblocklist-localblock' => 'à¸\81ารà¸\9aลà¹\87อà¸\81ในวิกินี้',
+'ipblocklist-otherblocks' => '{{PLURAL:$1|à¸\81ารà¸\9aลà¹\87อà¸\81}}อืà¹\88à¸\99',
 'infiniteblock' => 'ไม่มีกำหนด',
 'expiringblock' => 'หมดอายุ $1 เวลา $2',
 'anononlyblock' => 'ไม่ล็อกอินเท่านั้น',
 'noautoblockblock' => 'ยกเลิกการบล็อกอัตโนมัติ',
-'createaccountblock' => 'à¸\9aลà¹\87อà¸\81การสร้างบัญชีผู้ใช้ใหม่',
-'emailblock' => 'à¸\9aลà¹\87อà¸\81à¸\81ารสà¹\88à¸\87อีเมล',
-'blocklist-nousertalk' => 'à¹\84มà¹\88สามารà¸\96à¹\81à¸\81à¹\89à¹\84à¸\82หà¸\99à¹\89าอภิà¸\9bรายของตนเอง',
+'createaccountblock' => 'à¸\9bิà¸\94à¹\83à¸\8aà¹\89à¸\87าà¸\99การสร้างบัญชีผู้ใช้ใหม่',
+'emailblock' => 'à¸\9bิà¸\94à¹\83à¸\8aà¹\89à¸\87าà¸\99อีเมล',
+'blocklist-nousertalk' => 'à¹\84มà¹\88สามารà¸\96à¹\81à¸\81à¹\89à¹\84à¸\82หà¸\99à¹\89าà¸\84ุยà¸\81ัà¸\9aà¸\9cูà¹\89à¹\83à¸\8aà¹\89ของตนเอง',
 'ipblocklist-empty' => 'รายการบล็อกว่าง',
 'ipblocklist-no-results' => 'เลขที่อยู่ไอพีหรือชื่อผู้ใช้ที่ต้องการไม่ได้ถูกบล็อก',
 'blocklink' => 'บล็อก',
@@ -2694,7 +2694,7 @@ $1',
 
 # Thumbnails
 'thumbnail-more' => 'ขยาย',
-'filemissing' => 'à¹\84มà¹\88à¹\80à¸\88อà¹\84à¸\9fลà¹\8c',
+'filemissing' => 'à¹\84à¸\9fลà¹\8cสูà¸\8dหาย',
 'thumbnail_error' => 'เกิดปัญหาไม่สามารถทำรูปย่อได้: $1',
 'djvu_page_error' => 'หน้าเดจาวู (DjVu) เกินขนาด',
 'djvu_no_xml' => 'ไม่สามารถส่งเอกซ์เอ็มแอล (XML) สำหรับไฟล์เดจาวู (DjVu)',
@@ -2758,11 +2758,11 @@ $1',
 
 # Tooltip help for the actions
 'tooltip-pt-userpage' => 'หน้าผู้ใช้ของคุณ',
-'tooltip-pt-anonuserpage' => 'หà¸\99à¹\89าà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\82อà¸\87หมายà¹\80ลà¸\82à¹\84อà¸\9eีà¸\97ีà¹\88แก้ไข',
+'tooltip-pt-anonuserpage' => 'หà¸\99à¹\89าà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\82อà¸\87à¹\80ลà¸\82à¸\97ีà¹\88อยูà¹\88à¹\84อà¸\9eีà¸\97ีà¹\88à¸\84ุà¸\93à¸\81ำลัà¸\87à¹\83à¸\8aà¹\89แก้ไข',
 'tooltip-pt-mytalk' => 'หน้าอภิปรายของคุณ',
-'tooltip-pt-anontalk' => 'à¸\9eูà¸\94à¸\84ุยà¹\80à¸\81ีà¹\88ยวà¸\81ัà¸\9aà¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\88าà¸\81หมายà¹\80ลà¸\82à¹\84อà¸\9eี',
+'tooltip-pt-anontalk' => 'à¸\9eูà¸\94à¸\84ุยà¹\80à¸\81ีà¹\88ยวà¸\81ัà¸\9aà¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\88าà¸\81à¹\80ลà¸\82à¸\97ีà¹\88อยูà¹\88à¹\84อà¸\9eีà¸\99ีà¹\89',
 'tooltip-pt-preferences' => 'ตั้งค่าการใช้งานส่วนตัว',
-'tooltip-pt-watchlist' => 'รายà¸\81ารà¸\97ีà¹\88เฝ้าดูการแก้ไข',
+'tooltip-pt-watchlist' => 'รายà¸\81ารหà¸\99à¹\89าà¸\97ีà¹\88à¸\84ุà¸\93เฝ้าดูการแก้ไข',
 'tooltip-pt-mycontris' => 'รายการหน้าที่คุณเขียน',
 'tooltip-pt-login' => 'ไม่จำเป็นต้องล็อกอินในการแก้ไข แต่แนะนำอย่างยิ่งให้ล็อกอิน',
 'tooltip-pt-anonlogin' => 'ไม่จำเป็นต้องล็อกอินในการแก้ไข แต่แนะนำอย่างยิ่งให้ล็อกอิน',
@@ -2864,7 +2864,7 @@ $1',
 'notacceptable' => 'เซิร์ฟเวอร์ของวิกิไม่สามารถให้ข้อมูลในรูปแบบที่ไคลเอนต์สามารถอ่านได้',
 
 # Attribution
-'anonymous' => 'ผู้ใช้นิรนามของ{{SITENAME}}',
+'anonymous' => '{{PLURAL:$1|ผู้ใช้|ผู้ใช้}}นิรนามของ{{SITENAME}}',
 'siteuser' => 'ผู้ใช้ $1 จาก {{SITENAME}}',
 'anonuser' => 'ผู้ใช้นิรนามจาก {{SITENAME}} $1',
 'lastmodifiedatby' => 'แก้ไขล่าสุดเมื่อเวลา $2 $1 โดย $3',
@@ -2877,8 +2877,9 @@ $1',
 
 # Spam protection
 'spamprotectiontitle' => 'ตัวกรองป้องกันสแปม',
-'spamprotectiontext' => 'หน้าที่คุณต้องการบันทึกโดนบล็อกด้วยตัวกรองสแปม ซึ่งอาจเกิดจากมีลิงก์ไปยังเว็บไซต์ภายนอกที่อยู่ในบัญชีดำ',
-'spamprotectionmatch' => 'ข้อความต่อไปนี้ได้ทำให้ตัวกรองสแปมของเราทำงาน: $1',
+'spamprotectiontext' => 'ข้อความที่คุณต้องการบันทึกถูกตัวกรองสแปมบล็อก
+อาจเกิดจากลิงก์ไปยังเว็บไซต์ภายนอกที่ถูกขึ้นบัญชีดำ',
+'spamprotectionmatch' => 'ข้อความต่อไปนี้กระตุ้นให้ตัวกรองสแปมของเราทำงาน: $1',
 'spambot_username' => 'กวาดล้างมีเดียวิกิสแปม',
 'spam_reverting' => 'ย้อนกลับไปรุ่นก่อนหน้าที่ไม่มีลิงก์ไปยังเว็บ $1',
 'spam_blanking' => 'รุ่นการปรับปรุงทุกรุ่นประกอบไปด้วยลิงก์ไปยังเว็บ $1 (ทำหน้าว่าง)',
@@ -2899,6 +2900,7 @@ $1',
 'pageinfo-robot-policy' => 'สถานะเสิร์ชเอนจิน',
 'pageinfo-views' => 'จำนวนการเข้าดู',
 'pageinfo-watchers' => 'จำนวนผู้เข้าดูหน้า',
+'pageinfo-few-watchers' => '{{PLURAL:$1|ผู้เฝ้าดู|ผู้เฝ้าดู}}น้อยกว่า $1 คน',
 'pageinfo-redirects-name' => 'หน้าเปลี่ยนทางมายังหน้านี้',
 'pageinfo-subpages-name' => 'หน้าย่อยของหน้านี้',
 'pageinfo-subpages-value' => '$1 ($2 หน้าเปลี่ยนทาง; $3 หน้าไม่เปลี่ยนทาง)',
@@ -3336,21 +3338,27 @@ $1',
 # Email address confirmation
 'confirmemail' => 'ยืนยันอีเมล',
 'confirmemail_noemail' => 'ไม่ได้ใส่อีเมลในส่วน [[Special:Preferences|การตั้งค่าส่วนตัว]]',
-'confirmemail_text' => 'ถ้าต้องการใช้คำสั่งพิเศษในด้านอีเมสล จำเป็นต้องใส่ค่าอีเมลก่อน โดยกดที่ปุ่มด้านล่าง และทางระบบจะส่งไปที่อีเมลนี้ ในอีเมลจะมีลิงก์ซึ่งมีรหัสสำหรับยืนยันอีเมล',
-'confirmemail_pending' => 'รหัสยืนยันได้ถูกส่งไปที่อีเมลของคุณ ถ้าได้สร้างบัญชีเร็วนี้ ให้รอซักครู่ก่อนที่จะขอรหัสอีกครั้งหนึ่ง',
-'confirmemail_send' => 'ส่งรหัสยืนยันผ่านทางอีเมล',
-'confirmemail_sent' => 'อีเมลยืนยันได้ส่งเรียบร้อย',
-'confirmemail_oncreate' => 'รหัสยืนยันได้ถูกส่งไปที่อีเมล อย่างไรก็ตามรหัสนี้ไม่จำเป็นสำหรับการล็อกอิน เว้นเสียแต่ว่าต้องการใช้คำสั่งพิเศษในด้านอีเมลของวิกินี้',
-'confirmemail_sendfailed' => 'ขออภัย {{SITENAME}} ไม่สามารถส่งอีเมลให้คุณยืนยันการใช้งานได้
-กรุณาตรวจสอบอีเมลว่าถูกต้อง และไม่มีอักขระที่ไม่สามารถใช้ได้
+'confirmemail_text' => '{{SITENAME}} กำหนดให้คุณตรวจสอบความสมเหตุสมผลของที่อยู่อีเมลของคุณก่อนใช้คุณลักษณะอีเมล
+เปิดใช้งานปุ่มด้านล่างเพื่อส่งเมลยืนยันไปยังที่อยู่ของคุณ
+เมลจะรวมลิงก์ซึ่งมีรหัส
+โหลดลิงก์ในเบราว์เซอร์ของคุณเพื่อยืนยันว่าที่อยู่อีเมลของคุณสมเหตุสมผล',
+'confirmemail_pending' => 'รหัสยืนยันถูกอีเมลไปหาคุณแล้ว 
+ถ้าคุณเพิ่งสร้างบัญชี คุณอาจอยากรอสักครู่ให้ส่งไปถึงก่อนพยายามขอรหัสใหม่',
+'confirmemail_send' => 'ส่งรหัสยืนยันทางอีเมล',
+'confirmemail_sent' => 'ส่งอีเมลยืนยันแล้ว',
+'confirmemail_oncreate' => 'รหัสยืนยันถูกส่งไปยังที่อยู่อีเมลของคุณ
+รหัสนี้ไม่กำหนดให้ต้องล็อกอิน แต่คุณต้องระบุรหัสก่อนเปิดใช้งานคุณลักษณะที่อาศัยอีเมลทั้งหมดในวิกินี้',
+'confirmemail_sendfailed' => '{{SITENAME}} ไม่สามารถส่งเมลยืนยันได้
+โปรดตรวจสอบที่อยู่อีเมลว่าไม่มีอักขระที่ไม่สมเหตุสมผล
 
 ข้อความตีกลับ: $1',
-'confirmemail_invalid' => 'รหัสยืนยันไม่ถูกต้อง หรือรหัสหมดอายุ',
-'confirmemail_needlogin' => 'ต้องทำการ $1 เพื่อยืนยันอีเมลของคุณว่าถูกต้อง',
-'confirmemail_success' => 'อีเมลคุณได้รับการยืนยันแล้ว คุณอาจจะล็อกอินและมีความสุขกับวิกิ',
+'confirmemail_invalid' => 'รหัสยืนยันไม่ถูกต้อง 
+รหัสอาจหมดอายุแล้ว',
+'confirmemail_needlogin' => 'ต้อง $1 เพื่อยืนยันที่อยู่อีเมลของคุณ',
+'confirmemail_success' => 'อีเมลคุณได้รับการยืนยันแล้ว ขณะนี้คุณสามารถ[[Special:UserLogin|ล็อกอิน]]และมีความสุขกับวิกินี้',
 'confirmemail_loggedin' => 'อีเมลคุณได้รับการยืนยันแล้ว',
-'confirmemail_error' => 'มีà¸\9bัà¸\8dหาà¹\80à¸\81ิà¸\94à¸\82ึà¹\89à¸\99à¹\83à¸\99à¸\81ารยืà¸\99ยัà¸\99อีà¹\80มล',
-'confirmemail_subject' => '{{SITENAME}} ยืนยันการใช้งานอีเมล',
+'confirmemail_error' => 'à¹\80à¸\81ิà¸\94à¸\9bัà¸\8dหาà¸\82à¸\93ะà¸\9aัà¸\99à¸\97ึà¸\81à¸\81ารยืà¸\99ยัà¸\99à¸\82อà¸\87à¸\84ุà¸\93',
+'confirmemail_subject' => 'การยืนยันที่อยู่อีเมล {{SITENAME}}',
 'confirmemail_body' => 'ใครบางคน ซึ่งอาจจะเป็นคุณ จากหมายเลขไอพี $1 ได้ลงทะเบียนในชื่อ "$2" โดยใช้อีเมลนี้ที่ {{SITENAME}}
 
 เพื่อยืนยันว่าบัญชีผู้ใช้นี้เป็นของคุณอย่างแน่อน และใช้งานฟีเจอร์ส่งอีเมลหาผู้ใช้บน {{SITENAME}} กดลิงก์นี้ในเว็บเบราวเซอร์ของคุณ:
index e968177..3dca5c6 100644 (file)
@@ -607,6 +607,7 @@ $2',
 
 Сез {{SITENAME}} проектында аноним рәвештә кала яисә шул ук яки башка исем белән яңадан <span class='plainlinks'>[$1 керә]</span> аласыз.
 Кайбер битләр Сез кергән кебек күрсәтелергә мөмкин. Моны бетерү өчен браузер кэшын чистартыгыз.",
+'welcomeuser' => 'Хуш килдегез, $1!',
 'yourname' => 'Кулланучы исеме:',
 'yourpassword' => 'Серсүз:',
 'yourpasswordagain' => 'Серсүзне кабат кертү:',
@@ -754,6 +755,7 @@ $2
 'changeemail-oldemail' => 'Хәзерге электрон әрҗә адресы:',
 'changeemail-newemail' => 'Яңа электрон почта адресы:',
 'changeemail-none' => '(юк)',
+'changeemail-password' => '«{{SITENAME}}» проекты өчен серсүзегез:',
 'changeemail-submit' => 'E-mail адресын үзгәртү',
 'changeemail-cancel' => 'Баш тарту',
 
@@ -885,6 +887,7 @@ $2
 Мондый хаталар аноним web-проксилар кулланганда килеп чыгарга мөмкин.",
 'edit_form_incomplete' => "'''Төзәтү кырларының кайбер өлешләре серверга барып ирешмәде. Сезнең үзгәртүләр бозылмаганмы - игътибар белән тикшерегез һәм яңадан җибәреп карагыз.'''",
 'editing' => '«$1» битен үзгәртү',
+'creating' => '«$1» битен ясау',
 'editingsection' => '«$1» битендә бүлек үзгәртүе',
 'editingcomment' => '«$1» битен үзгәртү (яңа бүлек)',
 'editconflict' => 'Үзгәртү конфликты: $1',
@@ -1675,6 +1678,7 @@ PICT # төрле
 'allpagesnext' => 'Киләсе',
 'allpagessubmit' => 'Башкару',
 'allpagesprefix' => 'Алкушымчалы битләрне күрсәтү:',
+'allpages-hide-redirects' => 'Юнәлтүләрне яшер',
 
 # Special:Categories
 'categories' => 'Төркемнәр',
index ad530a5..e7c3b03 100644 (file)
@@ -2166,8 +2166,10 @@ $1',
 Сторінка вважається багатозначною, якщо на ній розміщений шаблон, назва якого є на сторінці [[MediaWiki:Disambiguationspage]].",
 
 'pageswithprop' => 'Сторінки з перевизначеними властивостями',
+'pageswithprop-legend' => 'Сторінки з перевизначеними властивостями',
 'pageswithprop-text' => 'Тут перераховані сторінки, у яких були вручну перевизначені окремі властивості.',
 'pageswithprop-prop' => 'Назва властивості:',
+'pageswithprop-submit' => 'Перейти',
 
 'doubleredirects' => 'Подвійні перенаправлення',
 'doubleredirectstext' => 'На цій сторінці наведено список перенаправлень на інші перенаправлення.
@@ -4349,7 +4351,4 @@ MediaWiki поширюється в надії, що вона буде кори
 'duration-centuries' => '$1 {{PLURAL:$1|століття|століття|століть}}',
 'duration-millennia' => '$1 {{PLURAL:$1|тисячоліття|тисячоліття|тисячоліть}}',
 
-# Unknown messages
-'pageswithprop-legend' => 'Сторінки з перевизначеними властивостями',
-'pageswithprop-submit' => 'Перейти',
 );
index 2a5bc47..9dd6a75 100644 (file)
@@ -128,23 +128,38 @@ $messages = array(
 'tog-nocache' => 'Brauzer sahifalarni kesh xotirasida saqlamasin',
 'tog-enotifwatchlistpages' => 'Kuzatuv roʻyxatimdagi sahifa yoki fayllar oʻzgartirilsa, e-pochtamga bu haqda xat yuborilsin',
 'tog-enotifusertalkpages' => 'Munozara sahifam oʻzgartirilsa, e-pochtamga bu haqda xat yuborilsin',
+'tog-enotifminoredits' => 'Kichik tahrir qilinsa ham e-pochtamga bu haqda xat yuborilsin',
+'tog-enotifrevealaddr' => 'Xabar beruvchi xatlarda e-pochta manzilim koʻrsatilsin',
+'tog-shownumberswatching' => 'Sahifani kuzatuv roʻyxatiga olgan foydalanuvchilar sonini koʻrsatish',
 'tog-oldsig' => 'Joriy imzo:',
 'tog-fancysig' => 'Imzoni viki-belgi qilib koʻrsatish (avtomatik ishoratsiz)',
+'tog-externaleditor' => 'Sukut boʻyicha tashqi tahrirlash dasturidan foydalanish (faqat mutaxassislar uchun, kompyuteringizda maxsus moslamalar boʻlishi zarur. [//www.mediawiki.org/wiki/Manual:External_editors More batafsil])',
+'tog-externaldiff' => 'Sukut boʻyicha tashqi taqqoslash dasturidan foydalanish (faqat mutaxassislar uchun, kompyuteringizda maxsus moslamalar boʻlishi zarur. [//www.mediawiki.org/wiki/Manual:External_editors More batafsil])',
 'tog-showjumplinks' => 'yordamchi "tez oʻtish" havolalarini yoqish',
+'tog-uselivepreview' => 'Tez koʻrib chiqish (JavaScript orqali) (sinovda)',
+'tog-forceeditsummary' => 'Qisqa tavsif oynasi toʻldirilmagani haqida ogohlantirish koʻrsatilsin',
+'tog-watchlisthideown' => 'Oʻz tahrirlarim kuzatuv roʻyxatimda koʻrsatilmasin',
+'tog-watchlisthidebots' => 'Botlar qilgan tahrirlar kuzatuv roʻyxatimda koʻrsatilmasin',
+'tog-watchlisthideminor' => 'Kichik tahrirlar kuzatuv roʻyxatimda koʻrsatilmasin',
+'tog-watchlisthideliu' => 'Tizimga kirgan foydalanuvchilar tahrirlari kuzatuv roʻyxatimda koʻrsatilmasin',
+'tog-watchlisthideanons' => 'Anonim foydalanuvchilar tahrirlari kuzatuv roʻyxatimda koʻrsatilmasin',
+'tog-watchlisthidepatrolled' => 'Tekshirilgan tahrirlar kuzatuv roʻyxatimda koʻrsatilmasin',
 'tog-ccmeonemails' => 'Boshqa ishtirokchilarga yozgan xatimning nusxasi oʻzimning e-pochtamga joʻnatilsin.',
+'tog-diffonly' => 'Versiyalar taqqoslanayotganda, pastda sahifa matni koʻrsatilmasin',
 'tog-showhiddencats' => 'Yashirin turkumlarni koʻrsatish',
 'tog-noconvertlink' => "Sarlavhaga aylantirish dastagini o'chirib qo'yish",
+'tog-norollbackdiff' => 'Tahrir qaytarilganda, versiyalar taqqosini koʻrsatish kerak emas',
 
 'underline-always' => 'Har doim',
 'underline-never' => 'Hech qachon',
 'underline-default' => 'Brauzer moslamari boʻyicha',
 
 # Font style option in Special:Preferences
-'editfont-style' => 'Tahrirlash maydoni bosma harflari turi',
+'editfont-style' => 'Tahrirlash maydonidagi shrift turi:',
 'editfont-default' => 'Brauzer moslamari boʻyicha',
-'editfont-monospace' => 'Monoenli bosma harflar',
-'editfont-sansserif' => 'Sans-serif bosma harflari',
-'editfont-serif' => 'Serif bosma harflari',
+'editfont-monospace' => 'Teng enli shrift (Monospaced)',
+'editfont-sansserif' => 'Kertiksiz shrift (Sans-serif)',
+'editfont-serif' => 'Kertikli shrift (Serif)',
 
 # Dates
 'sunday' => 'Yakshanba',
@@ -199,20 +214,23 @@ $messages = array(
 'dec' => 'dek',
 
 # Categories related messages
-'pagecategories' => '{{PLURAL:$1|Turkum|Turkumlar}}',
+'pagecategories' => '{{PLURAL:$1|Turkum}}',
 'category_header' => '"$1" turkumidagi maqolalar.',
 'subcategories' => 'Ostturkumlar',
 'category-media-header' => '"$1" turkumidagi fayllar',
 'category-empty' => "''Ushbu turkumda hozircha sahifa yoki fayllar yoʻq.''",
-'hidden-categories' => '{{PLURAL:$1|Yashirin turkum|Yashirin turkumlar}}',
+'hidden-categories' => '{{PLURAL:$1|Yashirin turkum}}',
 'hidden-category-category' => 'Yashirin turkumlar',
-'category-subcat-count' => '{{PLURAL:$2|Ushbu turkumda faqat bitta ostturkum mavjud.|Ushbu turkumda quyidagi {{PLURAL:$1|ostturkum|$1 ostturkumlar}}, hammasi boʻlib $2 ta ostturkum mavjud.}}',
-'category-article-count' => '{{PLURAL:$2|Ushbu turkumda faqat bitta sahifa mavjud.|Ushbu turkumda quyidagi {{PLURAL:$1|sahifa|$1 sahifalar}}, hammasi boʻlib $2 ta sahifa mavjud.}}',
-'category-file-count' => "{{PLURAL:$2|Ushbu turkum faqat bitta faylga ega.|Ushbu turkumdagi $2 ta fayldan quyidagi $1 tasi ko'rsatildi.}}",
+'category-subcat-count' => '{{PLURAL:$2|Ushbu turkumda faqat bitta ostturkum mavjud.|Quyida ushbu turkumga kiruvchi $2 ta ostturkumdan $1 tasi koʻrsatilgan.}}',
+'category-subcat-count-limited' => 'Ushbu turkumda $1 ta ostturkum mavjud.',
+'category-article-count' => '{{PLURAL:$2|Ushbu turkumda faqat bitta sahifa mavjud.|Quyida ushbu turkumga kiruvchi $2 ta sahifadan $1 tasi koʻrsatilgan.}}',
+'category-article-count-limited' => 'Ushbu turkumda $1 ta sahifa mavjud.',
+'category-file-count' => '{{PLURAL:$2|Ushbu turkumda faqat bitta fayl mavjud.|Quyida ushbu turkumga kiruvchi $2 ta fayldan $1 tasi koʻrsatilgan.}}',
+'category-file-count-limited' => 'Ushbu turkumda $1 ta fayl mavjud.',
 'listingcontinuesabbrev' => 'davomi',
 'index-category' => 'Indekslanadigan sahifalar',
 'noindex-category' => 'Indekslanmaydigan sahifalar',
-'broken-file-category' => 'Ishlamaydigan fayl havolalariga ega sahifalar',
+'broken-file-category' => 'Ishlamaydigan fayl havolalari bor sahifalar',
 
 'linkprefix' => '/^(.*?)([a-zA-Z\\x80-\\xffʻʼ«„]+)$/sDu',
 
@@ -221,18 +239,19 @@ $messages = array(
 'newwindow' => '(yangi oynada ochiladi)',
 'cancel' => 'Bekor qilish',
 'moredotdotdot' => 'Batafsil...',
+'morenotlisted' => 'Boshqa hech nima yoʻq...',
 'mypage' => 'Sahifa',
-'mytalk' => 'Munozaram',
-'anontalk' => 'Bu IP uchun suhbat',
+'mytalk' => 'Munozara',
+'anontalk' => 'Ushbu IP-manzil munozarasi',
 'navigation' => 'Saytda harakatlanish',
 'and' => '&#32;va',
 
 # Cologne Blue skin
 'qbfind' => 'Qidiruv',
-'qbbrowse' => "Ko'rish",
+'qbbrowse' => 'Koʻrish',
 'qbedit' => 'Tahrirlash',
-'qbpageoptions' => 'Ushbu sahifa',
-'qbmyoptions' => 'Mening sahifalarim',
+'qbpageoptions' => 'Ushbu sahifa moslamalari',
+'qbmyoptions' => 'Moslamalarim',
 'qbspecialpages' => 'Maxsus sahifalar',
 'faq' => 'TSS',
 'faqpage' => 'Project:TSS',
@@ -243,80 +262,86 @@ $messages = array(
 'vector-action-move' => 'Ko‘chirish',
 'vector-action-protect' => 'Himoyalash',
 'vector-action-undelete' => 'Tiklash',
-'vector-action-unprotect' => "Himoyani o'zgartirish",
-'vector-simplesearch-preference' => 'Soddalashtirilgan qidiruv uskunasini yoqish (faqat "Vektor" tashqi ko\'rinishi uchun)',
+'vector-action-unprotect' => 'Himoyalashni oʻzgartirish',
+'vector-simplesearch-preference' => 'Soddalashtirilgan qidiruv qatorini koʻrsat (faqat «Vektorli» tashqi koʻrinish uchun)',
 'vector-view-create' => 'Yaratish',
 'vector-view-edit' => 'Tahrirlash',
 'vector-view-history' => 'Tarix',
 'vector-view-view' => 'Mutolaa',
-'vector-view-viewsource' => "Manbasini ko'rish",
+'vector-view-viewsource' => 'Manbasini koʻrish',
 'actions' => 'Amallar',
 'namespaces' => 'Nomfazolar',
 'variants' => 'Variantlar',
 
+'navigation-heading' => 'Navigatsiya',
 'errorpagetitle' => 'Xato',
 'returnto' => '$1 sahifasiga qaytish.',
-'tagline' => '{{SITENAME}} dan',
+'tagline' => '{{SITENAME}} dan olingan',
 'help' => 'Yordam',
 'search' => 'Qidiruv',
 'searchbutton' => 'Qidirish',
-'go' => "O'tish",
+'go' => 'Oʻtish',
 'searcharticle' => 'O‘tish',
 'history' => 'Sahifa tarixi',
 'history_short' => 'Tarix',
-'updatedmarker' => 'mening oxirgi tashrifimdan keyin yangilandi',
+'updatedmarker' => 'oxirgi tashrifimdan keyingi oʻzgarishlar',
 'printableversion' => 'Bosma uchun versiya',
 'permalink' => 'Doimiy ishorat',
-'print' => 'Chop et',
+'print' => 'Chop etish',
 'view' => 'Koʻrish',
 'edit' => 'Tahrirlash',
 'create' => 'Yaratish',
-'editthispage' => 'Sahifani tahrirlash',
+'editthispage' => 'Ushbu sahifani tahrirlash',
 'create-this-page' => 'Ushbu sahifani yaratish',
 'delete' => 'O‘chirish',
 'deletethispage' => 'Ushbu sahifani o‘chirish',
-'undelete_short' => '{{PLURAL:$1|tahrir|$1 tahrirlar}}ni tiklash',
-'viewdeleted_short' => "{{PLURAL:$1|o'chirilgan tahrir|$1 ta o'chirilgan tahrirlar}}ni ko'rish",
+'undelete_short' => '$1 ta tahrirni tiklash',
+'viewdeleted_short' => '$1 ta oʻchirilgan tahrirni koʻrish',
 'protect' => 'Himoyalash',
-'protect_change' => 'o‘zgartirish',
+'protect_change' => 'zgartirish',
 'protectthispage' => 'Ushbu sahifani himoyalash',
 'unprotect' => 'Himoyadan chiqarish',
-'unprotectthispage' => "Ushbu sahifaning himoyasini o'zgaritish",
+'unprotectthispage' => 'Ushbu sahifaning himoyasini oʻzgaritish',
 'newpage' => 'Yangi sahifa',
 'talkpage' => 'Bu sahifa haqida munozara',
-'talkpagelinktext' => 'munozara',
+'talkpagelinktext' => 'Munozara',
 'specialpage' => 'Maxsus sahifa',
 'personaltools' => 'Shaxsiy uskunalar',
 'postcomment' => 'Yangi boʻlim',
-'articlepage' => 'Sahifani ko‘rish',
+'articlepage' => 'Maqolani koʻrib chiqish',
 'talk' => 'Munozara',
-'views' => 'Ko‘rinishlar',
+'views' => 'Qarashlar',
 'toolbox' => 'Asboblar',
-'userpage' => "Foydalanuvchi sahifasini ko'rish",
-'projectpage' => "Loyiha sahifasini ko'rish",
-'imagepage' => "Fayl sahifasini ko'rish",
-'mediawikipage' => "Xabar sahifasini ko'rsatish",
-'templatepage' => "Andoza sahifasini ko'rish",
+'userpage' => 'Foydalanuvchi sahifasini koʻrish',
+'projectpage' => 'Loyiha sahifasini koʻrish',
+'imagepage' => 'Fayl sahifasini koʻrish',
+'mediawikipage' => 'Xabar sahifasini koʻrsatish',
+'templatepage' => 'Andoza sahifasini koʻrish',
 'viewhelppage' => 'Yordam olish',
-'categorypage' => 'Turkum sahifasi',
+'categorypage' => 'Turkum sahifasini koʻrish',
 'viewtalkpage' => 'Munozarani koʻrish',
 'otherlanguages' => 'Boshqa tillarda',
 'redirectedfrom' => '($1dan yoʻnaltirildi)',
 'redirectpagesub' => 'Yoʻnaltiruvchi sahifa',
-'lastmodifiedat' => 'Bu sahifa oxirgi marta $2, $1 sanasida tahrirlangan.',
+'lastmodifiedat' => 'Bu sahifa oxirgi marta $1 soat $2 da tahrirlangan.',
 'viewcount' => 'Bu sahifaga {{PLURAL:$1|bir marta|$1 marta}} murojaat qilingan.',
 'protectedpage' => 'Himoyalangan sahifa',
 'jumpto' => 'Oʻtish:',
 'jumptonavigation' => 'saytda harakatlanish',
 'jumptosearch' => 'qidiruv',
-'pool-timeout' => "Muhosara (to'sish) ni kutish vaqti tugadi",
-'pool-queuefull' => "So'rovlar jamlanmasi to'ldi",
-'pool-errorunknown' => "Noma'lum xato",
+'view-pool-error' => 'Uzr, ayni paytda serverlarga ortiqcha yuk tushgan.
+Bu sahifaga birdaniga koʻpchilik kirmoqchi boʻldi.
+Iltimos, biroz kutib turing va keyin yangitdan kirishga urinib koʻring.
+
+$1',
+'pool-timeout' => 'Toʻsishni kutish vaqti tugadi',
+'pool-queuefull' => 'Soʻrovlar jamlanmasi toʻldi',
+'pool-errorunknown' => 'Nomaʼlum xato',
 
 # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
 'aboutsite' => '{{SITENAME}} haqida',
 'aboutpage' => 'Project:Haqida',
-'copyright' => 'Kontent $1 ostidadir.',
+'copyright' => 'Keltirilgan maʼlumotlar $1 orqali tarqatilmoqda.',
 'copyrightpage' => '{{ns:project}}:Mualliflik huquqlari',
 'currentevents' => 'Joriy hodisalar',
 'currentevents-url' => 'Project:Joriy hodisalar',
index 6605874..c90b0a5 100644 (file)
@@ -2070,8 +2070,10 @@ Hãy nhớ kiểm tra các liên kết khác đến bản mẫu trước khi xó
 'disambiguations-text' => "Các trang này có liên kết đến ít nhất một '''trang định hướng''', những trang này có thể có liên kết đến các trang đúng nghĩa hơn.<br />Các trang định hướng là trang sử dụng những bản mẫu được liệt kê ở [[MediaWiki:Disambiguationspage]].",
 
 'pageswithprop' => 'Trang có thuộc tính trang',
+'pageswithprop-legend' => 'Các trang có thuộc tính trang',
 'pageswithprop-text' => 'Trang này liệt kê các trang sử dụng một thuộc tính trang nào đó.',
 'pageswithprop-prop' => 'Tên thuộc tính:',
+'pageswithprop-submit' => 'Xem',
 
 'doubleredirects' => 'Đổi hướng kép',
 'doubleredirectstext' => 'Trang này liệt kê các trang đổi hướng đến một trang đổi hướng khác.
@@ -4183,7 +4185,7 @@ Nếu không thì bạn có thể điền biểu mẫu đơn giản ở dưới.
 'duration-centuries' => '$1 thế kỷ',
 'duration-millennia' => '$1 thiên niên kỷ',
 
-# Unknown messages
-'pageswithprop-legend' => 'Các trang có thuộc tính trang',
-'pageswithprop-submit' => 'Xem',
+# Image rotation
+'rotate-comment' => 'Đã quay hình $1 độ theo chiều kim đồng hồ',
+
 );
index 995cf1b..faf797b 100644 (file)
@@ -2021,6 +2021,7 @@ $1',
 'disambiguations-text' => "以下的页面都有到'''消歧义页'''的链接,但它们可能可以链接到更适当的页面。<br />一个页面如果使用了[[MediaWiki:Disambiguationspage]]内的模板,则会被视为消歧义页。",
 
 'pageswithprop-prop' => '属性名称:',
+'pageswithprop-submit' => '提交',
 
 'doubleredirects' => '双重重定向页',
 'doubleredirectstext' => '本页面列出重定向至其他重定向页的页面。每行含有第一及第二重定向的链接和第二重定向的目标(通常是第一重定向应该指向的“真实”目标页面)。<del>带删除线的</del>条目已被解决。',
@@ -4014,6 +4015,4 @@ MediaWiki发表时预期有用,但对此'''无任何保证''',亦无隐含
 'duration-centuries' => '$1个世纪',
 'duration-millennia' => '$1千年',
 
-# Unknown messages
-'pageswithprop-submit' => '提交',
 );
index 59a9283..d863b82 100644 (file)
@@ -1987,8 +1987,10 @@ Template:消除歧義',
 'disambiguations-text' => "以下的頁面都有至少一個連到'''消歧義頁'''的鏈接,但它們應鏈接到合適的頁面。<br />一個頁面如果使用了[[MediaWiki:Disambiguationspage]]內的模板,則會被視為消歧義頁。",
 
 'pageswithprop' => '有頁面屬性的頁面',
+'pageswithprop-legend' => '有頁面屬性的頁面',
 'pageswithprop-text' => '此頁列出所有頁面使用了特定的頁面屬性。',
 'pageswithprop-prop' => '屬性名稱:',
+'pageswithprop-submit' => '進入',
 
 'doubleredirects' => '雙重重定向頁面',
 'doubleredirectstext' => '這一頁列出所有重定向頁面重定向到另一個重定向頁的頁面。每一行都包含到第一和第二個重定向頁面的連結,以及第二個重定向頁面的目標,通常顯示的都會是"真正"的目標頁面,也就是第一個重定向頁面應該指向的頁面。
@@ -3994,7 +3996,7 @@ MediaWiki是基於使用目的而加以發佈,然而不負任何擔保責任
 'duration-centuries' => '$1個世紀',
 'duration-millennia' => '$1千年',
 
-# Unknown messages
-'pageswithprop-legend' => '有頁面屬性的頁面',
-'pageswithprop-submit' => '進入',
+# Image rotation
+'rotate-comment' => '順時針旋轉圖像$1{{PLURAL:$1|度|度}}',
+
 );
index 70c7fbe..7c16df6 100644 (file)
@@ -1640,9 +1640,10 @@ $wgMessageStructure = array(
        'pageswithprop' => array(
                'pageswithprop',
                'pageswithprop-summary',
+               'pageswithprop-legend',
                'pageswithprop-text',
                'pageswithprop-prop',
-               'pageswithprop-ok',
+               'pageswithprop-submit',
        ),
        'doubleredirects' => array(
                'doubleredirects',
@@ -3851,6 +3852,9 @@ $wgMessageStructure = array(
                'duration-centuries',
                'duration-millennia'
        ),
+       'rotation' => array(
+               'rotate-comment',
+       ),
 );
 
 /** Comments for each block */
@@ -4094,5 +4098,5 @@ Variants for Chinese language",
        'apierrors'             => 'API errors',
        'duration'              => 'Durations',
        'cachedspecial'         => 'SpecialCachedPage',
-       'rotation-comment'      => 'Image rotation message',
+       'rotation'              => 'Image rotation',
 );
index f067dc6..e21dd17 100644 (file)
@@ -52,21 +52,19 @@ class PurgeParserCache extends Maintenance {
                        global $wgParserCacheExpireTime;
                        $date = wfTimestamp( TS_MW, time() + $wgParserCacheExpireTime - intval( $inputAge ) );
                } else {
-                       echo "Must specify either --expiredate or --age\n";
-                       exit( 1 );
+                       $this->error( "Must specify either --expiredate or --age", 1 );
                }
 
                $english = Language::factory( 'en' );
-               echo "Deleting objects expiring before " . $english->timeanddate( $date ) . "\n";
+               $this->output( "Deleting objects expiring before " . $english->timeanddate( $date ) . "\n" );
 
                $pc = wfGetParserCacheStorage();
                $success = $pc->deleteObjectsExpiringBefore( $date, array( $this, 'showProgress' ) );
                if ( !$success ) {
-                       echo "\nCannot purge this kind of parser cache.\n";
-                       exit( 1 );
+                       $this->error( "\nCannot purge this kind of parser cache.", 1 );
                }
                $this->showProgress( 100 );
-               echo "\nDone\n";
+               $this->output( "\nDone\n" );
        }
 
        function showProgress( $percent ) {
@@ -77,8 +75,8 @@ class PurgeParserCache extends Maintenance {
                $this->lastProgress = $percentString;
 
                $stars = floor( $percent / 2 );
-               echo '[' . str_repeat( '*', $stars ), str_repeat( '.', 50 - $stars ) . '] ' .
-                       "$percentString%\r";
+               $this->output( '[' . str_repeat( '*', $stars ) . str_repeat( '.', 50 - $stars ) . '] ' .
+                       "$percentString%\r" );
 
        }
 }
index b64a54e..00eba30 100644 (file)
@@ -48,7 +48,7 @@ class EditPageTest extends MediaWikiTestCase {
                $dbw = wfGetDB( DB_MASTER );
 
                $dbw->update( 'revision',
-                       array( 'rev_timestamp' => $timestamp ),
+                       array( 'rev_timestamp' => $dbw->timestamp( $timestamp ) ),
                        array( 'rev_id' => $page->getLatest() ) );
 
                $page->clear();
index da5eb33..1efbaea 100644 (file)
@@ -344,7 +344,7 @@ class ApiEditPageTest extends ApiTestCase {
                $dbw = wfGetDB( DB_MASTER );
 
                $dbw->update( 'revision',
-                       array( 'rev_timestamp' => $timestamp ),
+                       array( 'rev_timestamp' => $dbw->timestamp( $timestamp ) ),
                        array( 'rev_id' => $page->getLatest() ) );
 
                $page->clear();
index 89021dd..4cc8bd2 100644 (file)
@@ -12,6 +12,12 @@ class MessageCacheTest extends MediaWikiLangTestCase {
        }
 
        function addDBData() {
+               // be sure english messages under $key, not $key/en
+               $this->setMwGlobals( array(
+                       'wgLanguageCode' => 'en',
+                       'wgContLang' => Language::factory( 'en' ),
+               ) );
+
                // Set up messages and fallbacks ab -> ru -> en
                $this->makePage( 'FallbackLanguageTest-Full', 'ab' );
                $this->makePage( 'FallbackLanguageTest-Full', 'ru' );