Merge "Convert JobQueueGroup::getCachedConfigVar to using WAN cache"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Fri, 6 Nov 2015 17:41:34 +0000 (17:41 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Fri, 6 Nov 2015 17:41:34 +0000 (17:41 +0000)
161 files changed:
RELEASE-NOTES-1.27
autoload.php
composer.json
docs/hooks.txt
includes/Defines.php
includes/GlobalFunctions.php
includes/Import.php
includes/Linker.php
includes/MediaWiki.php
includes/Title.php
includes/WebResponse.php
includes/api/ApiBase.php
includes/api/ApiDelete.php
includes/api/ApiEditPage.php
includes/api/ApiExpandTemplates.php
includes/api/ApiHelp.php
includes/api/ApiMove.php
includes/api/ApiParamInfo.php
includes/api/ApiParse.php
includes/api/ApiProtect.php
includes/api/ApiQueryCategoryMembers.php
includes/api/ApiQueryIWLinks.php
includes/api/ApiQueryInfo.php
includes/api/ApiQueryLangLinks.php
includes/api/ApiQueryRandom.php
includes/api/ApiQueryRevisionsBase.php
includes/api/ApiQueryStashImageInfo.php
includes/api/ApiQueryUserContributions.php
includes/api/ApiTokens.php
includes/api/ApiUpload.php
includes/api/ApiWatch.php
includes/api/i18n/de.json
includes/api/i18n/en.json
includes/api/i18n/fi.json
includes/api/i18n/gl.json
includes/api/i18n/he.json
includes/api/i18n/it.json
includes/api/i18n/ksh.json
includes/api/i18n/qqq.json
includes/api/i18n/ru.json
includes/api/i18n/sr-ec.json
includes/api/i18n/uk.json
includes/cache/LocalisationCache.php
includes/changes/ChangesList.php
includes/context/ContextSource.php
includes/context/DerivativeContext.php
includes/context/IContextSource.php
includes/context/RequestContext.php
includes/db/Database.php
includes/debug/logger/MonologSpi.php
includes/deferred/DeferredUpdates.php
includes/filerepo/file/LocalFile.php
includes/htmlform/HTMLForm.php
includes/htmlform/HTMLFormField.php
includes/htmlform/OOUIHTMLForm.php
includes/installer/i18n/gl.json
includes/installer/i18n/sr-ec.json
includes/libs/Timing.php [new file with mode: 0644]
includes/libs/objectcache/HashBagOStuff.php
includes/page/WikiPage.php
includes/resourceloader/ResourceLoaderModule.php
includes/search/SearchOracle.php
includes/search/SearchPostgres.php
includes/site/Site.php
includes/site/SiteList.php
includes/specials/SpecialBrokenRedirects.php
includes/specials/SpecialChangePassword.php
includes/specials/SpecialDoubleRedirects.php
includes/specials/SpecialTags.php
languages/i18n/af.json
languages/i18n/ar.json
languages/i18n/ast.json
languages/i18n/azb.json
languages/i18n/bcl.json
languages/i18n/be-tarask.json
languages/i18n/bn.json
languages/i18n/bs.json
languages/i18n/ca.json
languages/i18n/ckb.json
languages/i18n/cs.json
languages/i18n/de.json
languages/i18n/el.json
languages/i18n/en.json
languages/i18n/es.json
languages/i18n/et.json
languages/i18n/eu.json
languages/i18n/fa.json
languages/i18n/fi.json
languages/i18n/fr.json
languages/i18n/frr.json
languages/i18n/gl.json
languages/i18n/gom-deva.json
languages/i18n/gom-latn.json
languages/i18n/gsw.json
languages/i18n/he.json
languages/i18n/hu.json
languages/i18n/ia.json
languages/i18n/id.json
languages/i18n/ilo.json
languages/i18n/it.json
languages/i18n/ja.json
languages/i18n/ka.json
languages/i18n/kk-cyrl.json
languages/i18n/km.json
languages/i18n/kn.json
languages/i18n/ko.json
languages/i18n/ksh.json
languages/i18n/lb.json
languages/i18n/lt.json
languages/i18n/lzh.json
languages/i18n/mk.json
languages/i18n/ml.json
languages/i18n/mr.json
languages/i18n/ms.json
languages/i18n/nap.json
languages/i18n/nb.json
languages/i18n/nl.json
languages/i18n/olo.json
languages/i18n/pl.json
languages/i18n/ps.json
languages/i18n/pt-br.json
languages/i18n/pt.json
languages/i18n/ro.json
languages/i18n/roa-tara.json
languages/i18n/ru.json
languages/i18n/sah.json
languages/i18n/scn.json
languages/i18n/sd.json
languages/i18n/sl.json
languages/i18n/sr-ec.json
languages/i18n/sr-el.json
languages/i18n/sv.json
languages/i18n/tr.json
languages/i18n/tyv.json
languages/i18n/uk.json
languages/i18n/uz.json
languages/i18n/vi.json
languages/i18n/zh-hans.json
languages/i18n/zh-hant.json
maintenance/backupTextPass.inc
maintenance/findOrphanedFiles.php
resources/lib/oojs-ui/i18n/hy.json
resources/lib/oojs-ui/i18n/jv.json
resources/lib/oojs-ui/i18n/lb.json
resources/lib/oojs-ui/i18n/lt.json
resources/lib/oojs-ui/i18n/pt-br.json
resources/lib/oojs-ui/oojs-ui-apex-noimages.css
resources/lib/oojs-ui/oojs-ui-apex.js
resources/lib/oojs-ui/oojs-ui-mediawiki-noimages.css
resources/lib/oojs-ui/oojs-ui-mediawiki.js
resources/lib/oojs-ui/oojs-ui.js
resources/src/mediawiki.widgets/mw.widgets.ComplexTitleInputWidget.js
resources/src/mediawiki/mediawiki.ForeignStructuredUpload.BookletLayout.js
resources/src/mediawiki/mediawiki.ForeignStructuredUpload.js
resources/src/mediawiki/mediawiki.jqueryMsg.js
tests/phpunit/includes/libs/TimingTest.php [new file with mode: 0644]
tests/phpunit/includes/libs/objectcache/HashBagOStuffTest.php
tests/phpunit/includes/page/WikiPageTest.php
tests/phpunit/includes/site/SiteListTest.php
tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js
thumb.php

index f549620..13b9ba2 100644 (file)
@@ -64,6 +64,9 @@ production.
   setting in the relevant section of $wgLBFactoryConf.
 * User::newSystemUser() may be used to simplify the creation of passwordless
   "system" users for logged actions from scripts and extensions.
+* Extensions can now return detailed error information via the API when
+  preventing user actions using 'getUserPermissionsErrors' and similar hooks
+  by using ApiMessage instances instead of strings for the $result value.
 
 ==== External libraries ====
 
@@ -96,6 +99,8 @@ changes to languages because of Bugzilla reports.
 * Removed "loaderScripts" option from ResourceLoaderFileModule class.
 * Removed ORM-like wrapper added in 1.20.
 * LinkCache::getGoodLinks and LinkCache::getBadLinks were removed (deprecated in 1.26).
+* WikiPage::doQuickEdit() was removed (deprecated since 1.21).
+* Removed SiteObject and SiteArray classes (deprecated in 1.21).
 
 == Compatibility ==
 
index 6c792e2..b27ce46 100644 (file)
@@ -1104,13 +1104,11 @@ $wgAutoloadLocalClasses = array(
        'ShowJobs' => __DIR__ . '/maintenance/showJobs.php',
        'ShowSiteStats' => __DIR__ . '/maintenance/showSiteStats.php',
        'Site' => __DIR__ . '/includes/site/Site.php',
-       'SiteArray' => __DIR__ . '/includes/site/SiteList.php',
        'SiteConfiguration' => __DIR__ . '/includes/SiteConfiguration.php',
        'SiteExporter' => __DIR__ . '/includes/site/SiteExporter.php',
        'SiteImporter' => __DIR__ . '/includes/site/SiteImporter.php',
        'SiteList' => __DIR__ . '/includes/site/SiteList.php',
        'SiteLookup' => __DIR__ . '/includes/site/SiteLookup.php',
-       'SiteObject' => __DIR__ . '/includes/site/Site.php',
        'SiteSQLStore' => __DIR__ . '/includes/site/SiteSQLStore.php',
        'SiteStats' => __DIR__ . '/includes/SiteStats.php',
        'SiteStatsInit' => __DIR__ . '/includes/SiteStats.php',
@@ -1253,6 +1251,7 @@ $wgAutoloadLocalClasses = array(
        'TidyUpBug37714' => __DIR__ . '/maintenance/tidyUpBug37714.php',
        'TiffHandler' => __DIR__ . '/includes/media/Tiff.php',
        'TimestampException' => __DIR__ . '/includes/exception/TimestampException.php',
+       'Timing' => __DIR__ . '/includes/libs/Timing.php',
        'Title' => __DIR__ . '/includes/Title.php',
        'TitleArray' => __DIR__ . '/includes/TitleArray.php',
        'TitleArrayFromResult' => __DIR__ . '/includes/TitleArrayFromResult.php',
index 553ec44..78c23ce 100644 (file)
@@ -21,7 +21,7 @@
                "ext-iconv": "*",
                "liuggio/statsd-php-client": "1.0.16",
                "mediawiki/at-ease": "1.1.0",
-               "oojs/oojs-ui": "0.13.0",
+               "oojs/oojs-ui": "0.13.1",
                "oyejorge/less.php": "1.7.0.9",
                "php": ">=5.3.3",
                "psr/log": "1.0.0",
index 427f35e..41cf488 100644 (file)
@@ -10,8 +10,8 @@ event
      page is saved. A wiki page is deleted. Often there are two events
      associated with a single action: one before the code is run to make the
      event happen, and one after. Each event has a name, preferably in
-     CamelCase. For example, 'UserLogin', 'ArticleSave', 'ArticleSaveComplete',
-     'ArticleDelete'.
+     CamelCase. For example, 'UserLogin', 'PageContentSave',
+     'PageContentSaveComplete', 'ArticleDelete'.
 
 hook
      A clump of code and data that should be run when an event happens. This can
@@ -170,8 +170,8 @@ different: 'onArticleSave', 'onUserLogin', etc.
 The extra data is useful if we want to use the same function or object for
 different purposes. For example:
 
-       $wgHooks['ArticleSaveComplete'][] = array( 'ircNotify', 'TimStarling' );
-       $wgHooks['ArticleSaveComplete'][] = array( 'ircNotify', 'brion' );
+       $wgHooks['PageContentSaveComplete'][] = array( 'ircNotify', 'TimStarling' );
+       $wgHooks['PageContentSaveComplete'][] = array( 'ircNotify', 'brion' );
 
 This code would result in ircNotify being run twice when an article is saved:
 once for 'TimStarling', and once for 'brion'.
@@ -1521,7 +1521,9 @@ $lang: Language that will be used to render the timestamp
 'getUserPermissionsErrors': Add a permissions error when permissions errors are
 checked for. Use instead of userCan for most cases. Return false if the user
 can't do it, and populate $result with the reason in the form of
-array( messagename, param1, param2, ... ). For consistency, error messages
+array( messagename, param1, param2, ... ) or a MessageSpecifier instance (you
+might want to use ApiMessage to provide machine-readable details for the API).
+For consistency, error messages
 should be plain text with no special coloring, bolding, etc. to show that
 they're errors; presenting them properly to the user as errors is done by the
 caller.
@@ -1534,7 +1536,9 @@ $result: User permissions error to add. If none, return true.
 called only if expensive checks are enabled. Add a permissions error when
 permissions errors are checked for. Return false if the user can't do it, and
 populate $result with the reason in the form of array( messagename, param1,
-param2, ... ). For consistency, error messages should be plain text with no
+param2, ... ) or a MessageSpecifier instance (you might want to use ApiMessage
+to provide machine-readable details for the API). For consistency, error
+messages should be plain text with no
 special coloring, bolding, etc. to show that they're errors; presenting them
 properly to the user as errors is done by the caller.
 $title: Title object being checked against
index b8a0ec0..9a6950e 100644 (file)
@@ -181,7 +181,7 @@ define( 'EDIT_UPDATE', 2 );
 define( 'EDIT_MINOR', 4 );
 define( 'EDIT_SUPPRESS_RC', 8 );
 define( 'EDIT_FORCE_BOT', 16 );
-define( 'EDIT_DEFER_UPDATES', 32 );
+define( 'EDIT_DEFER_UPDATES', 32 ); // Unused since 1.27
 define( 'EDIT_AUTOSUMMARY', 64 );
 /**@}*/
 
index 3bc3a90..421cd90 100644 (file)
@@ -308,10 +308,15 @@ function wfMergeErrorArrays( /*...*/ ) {
        $out = array();
        foreach ( $args as $errors ) {
                foreach ( $errors as $params ) {
+                       $originalParams = $params;
+                       if ( $params[0] instanceof MessageSpecifier ) {
+                               $msg = $params[0];
+                               $params = array_merge( array( $msg->getKey() ), $msg->getParams() );
+                       }
                        # @todo FIXME: Sometimes get nested arrays for $params,
                        # which leads to E_NOTICEs
                        $spec = implode( "\t", $params );
-                       $out[$spec] = $params;
+                       $out[$spec] = $originalParams;
                }
        }
        return array_values( $out );
index 3d94c33..f0576d7 100644 (file)
@@ -1964,23 +1964,38 @@ class ImportStreamSource implements ImportSource {
                if ( $page == '' ) {
                        return Status::newFatal( 'import-noarticle' );
                }
-               $link = Title::newFromText( "$interwiki:Special:Export/$page" );
-               if ( is_null( $link ) || !$link->isExternal() ) {
+
+               # Look up the first interwiki prefix, and let the foreign site handle
+               # subsequent interwiki prefixes
+               $firstIwPrefix = strtok( $interwiki, ':' );
+               $firstIw = Interwiki::fetch( $firstIwPrefix );
+               if ( !$firstIw ) {
                        return Status::newFatal( 'importbadinterwiki' );
-               } else {
-                       $params = array();
-                       if ( $history ) {
-                               $params['history'] = 1;
-                       }
-                       if ( $templates ) {
-                               $params['templates'] = 1;
-                       }
-                       if ( $pageLinkDepth ) {
-                               $params['pagelink-depth'] = $pageLinkDepth;
-                       }
-                       $url = $link->getFullURL( $params );
-                       # For interwikis, use POST to avoid redirects.
-                       return ImportStreamSource::newFromURL( $url, "POST" );
                }
+
+               $additionalIwPrefixes = strtok( '' );
+               if ( $additionalIwPrefixes ) {
+                       $additionalIwPrefixes .= ':';
+               }
+               # Have to do a DB-key replacement ourselves; otherwise spaces get
+               # URL-encoded to +, which is wrong in this case. Similar to logic in
+               # Title::getLocalURL
+               $link = $firstIw->getURL( strtr( "${additionalIwPrefixes}Special:Export/$page",
+                       ' ', '_' ) );
+
+               $params = array();
+               if ( $history ) {
+                       $params['history'] = 1;
+               }
+               if ( $templates ) {
+                       $params['templates'] = 1;
+               }
+               if ( $pageLinkDepth ) {
+                       $params['pagelink-depth'] = $pageLinkDepth;
+               }
+
+               $url = wfAppendQuery( $link, $params );
+               # For interwikis, use POST to avoid redirects.
+               return ImportStreamSource::newFromURL( $url, "POST" );
        }
 }
index 842d276..b5e7e2f 100644 (file)
@@ -1464,17 +1464,19 @@ class Linker {
                                        $linkText = $text;
                                        $linkTarget = Linker::normalizeSubpageLink( $title, $match[1], $linkText );
 
-                                       $target = Title::newFromText( $linkTarget );
-                                       if ( $target ) {
-                                               if ( $target->getText() == '' && !$target->isExternal()
-                                                       && !$local && $title
-                                               ) {
-                                                       $newTarget = clone $title;
-                                                       $newTarget->setFragment( '#' . $target->getFragment() );
-                                                       $target = $newTarget;
-                                               }
+                                       if ( $linkTarget !== null ) {
+                                               $target = Title::newFromText( $linkTarget );
+                                               if ( $target ) {
+                                                       if ( $target->getText() == '' && !$target->isExternal()
+                                                               && !$local && $title
+                                                       ) {
+                                                               $newTarget = clone $title;
+                                                               $newTarget->setFragment( '#' . $target->getFragment() );
+                                                               $target = $newTarget;
+                                                       }
 
-                                               $thelink = Linker::makeCommentLink( $target, $linkText . $inside, $wikiId ) . $trail;
+                                                       $thelink = Linker::makeCommentLink( $target, $linkText . $inside, $wikiId ) . $trail;
+                                               }
                                        }
                                }
                                if ( $thelink ) {
index 676108c..d048b57 100644 (file)
@@ -531,6 +531,9 @@ class MediaWiki {
         * @since 1.26
         */
        public function doPostOutputShutdown( $mode = 'normal' ) {
+               $timing = $this->context->getTiming();
+               $timing->mark( 'requestShutdown' );
+
                // Show visible profiling data if enabled (which cannot be post-send)
                Profiler::instance()->logDataPageOutputOnly();
 
index 9ada4f3..1fdeca8 100644 (file)
@@ -252,7 +252,7 @@ class Title {
         * Create a new Title from text, such as what one would find in a link. De-
         * codes any HTML entities in the text.
         *
-        * @param string $text The link text; spaces, prefixes, and an
+        * @param string|null $text The link text; spaces, prefixes, and an
         *   initial ':' indicating the main namespace are accepted.
         * @param int $defaultNamespace The namespace to use if none is specified
         *   by a prefix.  If you want to force a specific namespace even if
@@ -264,13 +264,13 @@ class Title {
        public static function newFromText( $text, $defaultNamespace = NS_MAIN ) {
                if ( is_object( $text ) ) {
                        throw new InvalidArgumentException( '$text must be a string.' );
-               } elseif ( !is_string( $text ) ) {
+               }
+               if ( $text !== null && !is_string( $text ) ) {
                        wfDebugLog( 'T76305', wfGetAllCallers( 5 ) );
-                       wfWarn(
-                               __METHOD__ . ': $text must be a string. ' .
-                                       'This will throw an InvalidArgumentException in future.',
-                               2
-                       );
+                       return null;
+               }
+               if ( $text === null ) {
+                       return null;
                }
 
                try {
@@ -296,7 +296,7 @@ class Title {
         */
        public static function newFromTextThrow( $text, $defaultNamespace = NS_MAIN ) {
                if ( is_object( $text ) ) {
-                       throw new MWException( 'Title::newFromTextThrow given an object' );
+                       throw new MWException( '$text must be a string, given an object' );
                }
 
                $cache = self::getTitleCache();
@@ -1944,7 +1944,7 @@ class Title {
         *   - secure : does cheap and expensive checks, using the master as needed
         * @param array $ignoreErrors Array of Strings Set this to a list of message keys
         *   whose corresponding errors may be ignored.
-        * @return array Array of arguments to wfMessage to explain permissions problems.
+        * @return array Array of arrays of the arguments to wfMessage to explain permissions problems.
         */
        public function getUserPermissionsErrors(
                $action, $user, $rigor = 'secure', $ignoreErrors = array()
@@ -1953,9 +1953,12 @@ class Title {
 
                // Remove the errors being ignored.
                foreach ( $errors as $index => $error ) {
-                       $error_key = is_array( $error ) ? $error[0] : $error;
+                       $errKey = is_array( $error ) ? $error[0] : $error;
 
-                       if ( in_array( $error_key, $ignoreErrors ) ) {
+                       if ( in_array( $errKey, $ignoreErrors ) ) {
+                               unset( $errors[$index] );
+                       }
+                       if ( $errKey instanceof MessageSpecifier && in_array( $errKey->getKey(), $ignoreErrors ) ) {
                                unset( $errors[$index] );
                        }
                }
@@ -2054,6 +2057,9 @@ class Title {
                } elseif ( $result !== '' && is_string( $result ) ) {
                        // A string representing a message-id
                        $errors[] = array( $result );
+               } elseif ( $result instanceof MessageSpecifier ) {
+                       // A message specifier representing an error
+                       $errors[] = array( $result );
                } elseif ( $result === false ) {
                        // a generic "We don't want them to do that"
                        $errors[] = array( 'badaccess-group0' );
index bb7682d..26fb20f 100644 (file)
@@ -136,6 +136,19 @@ class WebResponse {
                                $options['httpOnly'] );
                }
        }
+
+       /**
+        * Unset a browser cookie.
+        * This sets the cookie with an empty value and an expiry set to a time in the past,
+        * which will cause the browser to remove any cookie with the given name, domain and
+        * path from its cookie store. Options other than these (and prefix) have no effect.
+        * @param string $name Cookie name
+        * @param array $options Cookie options, see {@link setCookie()}
+        * @since 1.27
+        */
+       public function clearCookie( $name, $options = array() ) {
+               $this->setCookie( $name, '', time() - 31536000 /* 1 year */, $options );
+       }
 }
 
 /**
index 1465543..1227899 100644 (file)
@@ -986,6 +986,17 @@ abstract class ApiBase extends ContextSource {
                        // Set a warning if a deprecated parameter has been passed
                        if ( $deprecated && $value !== false ) {
                                $this->setWarning( "The $encParamName parameter has been deprecated." );
+
+                               $feature = $encParamName;
+                               $m = $this;
+                               while ( !$m->isMain() ) {
+                                       $p = $m->getParent();
+                                       $name = $m->getModuleName();
+                                       $param = $p->encodeParamName( $p->getModuleManager()->getModuleGroup( $name ) );
+                                       $feature = "{$param}={$name}&{$feature}";
+                                       $m = $p;
+                               }
+                               $this->logFeatureUsage( $feature );
                        }
                } elseif ( $required ) {
                        $this->dieUsageMsg( array( 'missingparam', $paramName ) );
@@ -1375,10 +1386,11 @@ abstract class ApiBase extends ContextSource {
         *
         * @since 1.23
         * @param Status $status
+        * @param array|null &$extraData Set if extra data from IApiMessage is available (since 1.27)
         * @return array Array of code and error string
         * @throws MWException
         */
-       public function getErrorFromStatus( $status ) {
+       public function getErrorFromStatus( $status, &$extraData = null ) {
                if ( $status->isGood() ) {
                        throw new MWException( 'Successful status passed to ApiBase::dieStatus' );
                }
@@ -1397,7 +1409,12 @@ abstract class ApiBase extends ContextSource {
                // error messages.
                if ( $errors[0] instanceof Message ) {
                        $msg = $errors[0];
-                       $code = $msg->getKey();
+                       if ( $msg instanceof IApiMessage ) {
+                               $extraData = $msg->getApiData();
+                               $code = $msg->getApiCode();
+                       } else {
+                               $code = $msg->getKey();
+                       }
                } else {
                        $code = array_shift( $errors[0] );
                        $msg = wfMessage( $code, $errors[0] );
@@ -1418,8 +1435,9 @@ abstract class ApiBase extends ContextSource {
         * @throws UsageException always
         */
        public function dieStatus( $status ) {
-               list( $code, $msg ) = $this->getErrorFromStatus( $status );
-               $this->dieUsage( $msg, $code );
+               $extraData = null;
+               list( $code, $msg ) = $this->getErrorFromStatus( $status, $extraData );
+               $this->dieUsage( $msg, $code, 0, $extraData );
        }
 
        // @codingStandardsIgnoreStart Allow long lines. Cannot split these.
@@ -1952,7 +1970,8 @@ abstract class ApiBase extends ContextSource {
                        $error = array( $error );
                }
                $parsed = $this->parseMsg( $error );
-               $this->dieUsage( $parsed['info'], $parsed['code'] );
+               $extraData = isset( $parsed['data'] ) ? $parsed['data'] : null;
+               $this->dieUsage( $parsed['info'], $parsed['code'], 0, $extraData );
        }
 
        /**
@@ -2005,6 +2024,14 @@ abstract class ApiBase extends ContextSource {
                        $key = array_shift( $error );
                }
 
+               if ( $key instanceof IApiMessage ) {
+                       return array(
+                               'code' => $key->getApiCode(),
+                               'info' => $key->inLanguage( 'en' )->useDatabase( false )->text(),
+                               'data' => $key->getApiData()
+                       );
+               }
+
                if ( isset( self::$messageMap[$key] ) ) {
                        return array(
                                'code' => wfMsgReplaceArgs( self::$messageMap[$key]['code'], $error ),
index bfd841f..edcee86 100644 (file)
@@ -88,10 +88,8 @@ class ApiDelete extends ApiBase {
 
                // Deprecated parameters
                if ( $params['watch'] ) {
-                       $this->logFeatureUsage( 'action=delete&watch' );
                        $watch = 'watch';
                } elseif ( $params['unwatch'] ) {
-                       $this->logFeatureUsage( 'action=delete&unwatch' );
                        $watch = 'unwatch';
                } else {
                        $watch = $params['watchlist'];
index 2f1c01c..90d976a 100644 (file)
@@ -349,10 +349,8 @@ class ApiEditPage extends ApiBase {
 
                // Deprecated parameters
                if ( $params['watch'] ) {
-                       $this->logFeatureUsage( 'action=edit&watch' );
                        $watch = true;
                } elseif ( $params['unwatch'] ) {
-                       $this->logFeatureUsage( 'action=edit&unwatch' );
                        $watch = false;
                }
 
index 6112534..8a63070 100644 (file)
@@ -80,10 +80,6 @@ class ApiExpandTemplates extends ApiBase {
                $retval = array();
 
                if ( isset( $prop['parsetree'] ) || $params['generatexml'] ) {
-                       if ( !isset( $prop['parsetree'] ) ) {
-                               $this->logFeatureUsage( 'action=expandtemplates&generatexml' );
-                       }
-
                        $wgParser->startExternalParse( $title_obj, $options, Parser::OT_PREPROCESS );
                        $dom = $wgParser->preprocessToDom( $params['text'] );
                        if ( is_callable( array( $dom, 'saveXML' ) ) ) {
index c33b27b..db7c149 100644 (file)
@@ -759,6 +759,8 @@ class ApiHelp extends ApiBase {
                return array(
                        'action=help'
                                => 'apihelp-help-example-main',
+                       'action=help&modules=query&submodules=1'
+                               => 'apihelp-help-example-submodules',
                        'action=help&recursivesubmodules=1'
                                => 'apihelp-help-example-recursive',
                        'action=help&modules=help'
index 60fd426..c38457e 100644 (file)
@@ -130,10 +130,8 @@ class ApiMove extends ApiBase {
                        $watch = $params['watchlist'];
                } elseif ( $params['watch'] ) {
                        $watch = 'watch';
-                       $this->logFeatureUsage( 'action=move&watch' );
                } elseif ( $params['unwatch'] ) {
                        $watch = 'unwatch';
-                       $this->logFeatureUsage( 'action=move&unwatch' );
                }
 
                // Watch pages
index 2ab37ad..a9ddc6b 100644 (file)
@@ -52,7 +52,6 @@ class ApiParamInfo extends ApiBase {
                }
 
                if ( is_array( $params['querymodules'] ) ) {
-                       $this->logFeatureUsage( 'action=paraminfo&querymodules' );
                        $queryModules = $params['querymodules'];
                        foreach ( $queryModules as $m ) {
                                $modules[] = 'query+' . $m;
@@ -62,7 +61,6 @@ class ApiParamInfo extends ApiBase {
                }
 
                if ( is_array( $params['formatmodules'] ) ) {
-                       $this->logFeatureUsage( 'action=paraminfo&formatmodules' );
                        $formatModules = $params['formatmodules'];
                        foreach ( $formatModules as $m ) {
                                $modules[] = $m;
@@ -109,12 +107,10 @@ class ApiParamInfo extends ApiBase {
                }
 
                if ( $params['mainmodule'] ) {
-                       $this->logFeatureUsage( 'action=paraminfo&mainmodule' );
                        $res['mainmodule'] = $this->getModuleInfo( $this->getMain() );
                }
 
                if ( $params['pagesetmodule'] ) {
-                       $this->logFeatureUsage( 'action=paraminfo&pagesetmodule' );
                        $pageSet = new ApiPageSet( $this->getMain()->getModuleManager()->getModule( 'query' ) );
                        $res['pagesetmodule'] = $this->getModuleInfo( $pageSet );
                        unset( $res['pagesetmodule']['name'] );
index fcab9be..1b2efa5 100644 (file)
@@ -427,9 +427,6 @@ class ApiParse extends ApiBase {
                }
 
                if ( isset( $prop['parsetree'] ) || $params['generatexml'] ) {
-                       if ( !isset( $prop['parsetree'] ) ) {
-                               $this->logFeatureUsage( 'action=parse&generatexml' );
-                       }
                        if ( $this->content->getModel() != CONTENT_MODEL_WIKITEXT ) {
                                $this->dieUsage( "parsetree is only supported for wikitext content", "notwikitext" );
                        }
index c07aaca..22bd29c 100644 (file)
@@ -101,9 +101,6 @@ class ApiProtect extends ApiBase {
 
                $cascade = $params['cascade'];
 
-               if ( $params['watch'] ) {
-                       $this->logFeatureUsage( 'action=protect&watch' );
-               }
                $watch = $params['watch'] ? 'watch' : $params['watchlist'];
                $this->setWatch( $watch, $titleObj, 'watchdefault' );
 
index 6dcfe0e..af40423 100644 (file)
@@ -158,9 +158,6 @@ class ApiQueryCategoryMembers extends ApiQueryGeneratorBase {
                                        }
                                        $startsortkey = pack( 'H*', $params['starthexsortkey'] );
                                } else {
-                                       if ( $params['startsortkey'] !== null ) {
-                                               $this->logFeatureUsage( 'list=categorymembers&cmstartsortkey' );
-                                       }
                                        $startsortkey = $params['startsortkey'];
                                }
                                if ( $params['endsortkeyprefix'] !== null ) {
@@ -171,9 +168,6 @@ class ApiQueryCategoryMembers extends ApiQueryGeneratorBase {
                                        }
                                        $endsortkey = pack( 'H*', $params['endhexsortkey'] );
                                } else {
-                                       if ( $params['endsortkey'] !== null ) {
-                                               $this->logFeatureUsage( 'list=categorymembers&cmendsortkey' );
-                                       }
                                        $endsortkey = $params['endsortkey'];
                                }
 
index 82619cc..7123138 100644 (file)
@@ -51,7 +51,6 @@ class ApiQueryIWLinks extends ApiQueryBase {
                // Handle deprecated param
                $this->requireMaxOneParameter( $params, 'url', 'prop' );
                if ( $params['url'] ) {
-                       $this->logFeatureUsage( 'prop=iwlinks&iwurl' );
                        $prop = array( 'url' => 1 );
                }
 
index 7967826..7dcf23a 100644 (file)
@@ -387,7 +387,11 @@ class ApiQueryInfo extends ApiQueryBase {
                $dbkey = $title->getDBkey();
 
                $pageInfo['contentmodel'] = $title->getContentModel();
-               $pageInfo['pagelanguage'] = $title->getPageLanguage()->getCode();
+
+               $pageLanguage = $title->getPageLanguage();
+               $pageInfo['pagelanguage'] = $pageLanguage->getCode();
+               $pageInfo['pagelanguagehtmlcode'] = $pageLanguage->getHtmlCode();
+               $pageInfo['pagelanguagedir'] = $pageLanguage->getDir();
 
                if ( $titleExists ) {
                        $pageInfo['touched'] = wfTimestamp( TS_ISO_8601, $this->pageTouched[$pageid] );
index 899a382..f964c7a 100644 (file)
@@ -50,7 +50,6 @@ class ApiQueryLangLinks extends ApiQueryBase {
                // Handle deprecated param
                $this->requireMaxOneParameter( $params, 'url', 'prop' );
                if ( $params['url'] ) {
-                       $this->logFeatureUsage( 'prop=langlinks&llurl' );
                        $prop = array( 'url' => 1 );
                }
 
index e553d12..c7dbfb8 100644 (file)
@@ -130,10 +130,6 @@ class ApiQueryRandom extends ApiQueryGeneratorBase {
                        $this->requireMaxOneParameter( $params, 'filterredir', 'redirect' );
                }
 
-               if ( $params['redirect'] ) {
-                       $this->logFeatureUsage( "list=random&rnredirect=" );
-               }
-
                if ( isset( $params['continue'] ) ) {
                        $cont = explode( '|', $params['continue'] );
                        $this->dieContinueUsageIf( count( $cont ) != 4 );
index ebc5c2e..0c5d5f3 100644 (file)
@@ -276,9 +276,6 @@ abstract class ApiQueryRevisionsBase extends ApiQueryGeneratorBase {
                        }
                }
                if ( $this->fld_parsetree || ( $this->fld_content && $this->generateXML ) ) {
-                       if ( !$this->fld_parsetree ) {
-                               $this->logFeatureUsage( 'action=query&prop=revisions+base&generatexml' );
-                       }
                        if ( $content ) {
                                if ( $content->getModel() === CONTENT_MODEL_WIKITEXT ) {
                                        $t = $content->getNativeData(); # note: don't set $text
index 0a75961..229e158 100644 (file)
@@ -47,7 +47,6 @@ class ApiQueryStashImageInfo extends ApiQueryImageInfo {
 
                // Alias sessionkey to filekey, but give an existing filekey precedence.
                if ( !$params['filekey'] && $params['sessionkey'] ) {
-                       $this->logFeatureUsage( 'prop=stashimageinfo&siisessionkey' );
                        $params['filekey'] = $params['sessionkey'];
                }
 
index e303094..1ef0f35 100644 (file)
@@ -224,7 +224,6 @@ class ApiQueryContributions extends ApiQueryBase {
 
                $show = $this->params['show'];
                if ( $this->params['toponly'] ) { // deprecated/old param
-                       $this->logFeatureUsage( 'list=usercontribs&uctoponly' );
                        $show[] = 'top';
                }
                if ( !is_null( $show ) ) {
index 4d7fc5a..f92526d 100644 (file)
@@ -73,6 +73,19 @@ class ApiTokens extends ApiBase {
                        $types[$name] = array( 'ApiQueryInfo', 'get' . ucfirst( $name ) . 'Token' );
                }
                Hooks::run( 'ApiTokensGetTokenTypes', array( &$types ) );
+
+               // For forwards-compat, copy any token types from ApiQueryTokens that
+               // we don't already have something for.
+               $user = $this->getUser();
+               $request = $this->getRequest();
+               foreach ( ApiQueryTokens::getTokenTypeSalts() as $name => $salt ) {
+                       if ( !isset( $types[$name] ) ) {
+                               $types[$name] = function () use ( $salt, $user, $request ) {
+                                       return $user->getEditToken( $salt, $request );
+                               };
+                       }
+               }
+
                ksort( $types );
 
                return $types;
index 5e13e98..f51b389 100644 (file)
@@ -53,7 +53,6 @@ class ApiUpload extends ApiBase {
 
                // Copy the session key to the file key, for backward compatibility.
                if ( !$this->mParams['filekey'] && $this->mParams['sessionkey'] ) {
-                       $this->logFeatureUsage( 'action=upload&sessionkey' );
                        $this->mParams['filekey'] = $this->mParams['sessionkey'];
                }
 
@@ -363,6 +362,10 @@ class ApiUpload extends ApiBase {
                $data['invalidparameter'] = $parameter;
 
                $parsed = $this->parseMsg( $error );
+               if ( isset( $parsed['data'] ) ) {
+                       $data = array_merge( $data, $parsed['data'] );
+               }
+
                $this->dieUsage( $parsed['info'], $parsed['code'], 0, $data );
        }
 
@@ -730,7 +733,6 @@ class ApiUpload extends ApiBase {
 
                // Deprecated parameters
                if ( $this->mParams['watch'] ) {
-                       $this->logFeatureUsage( 'action=upload&watch' );
                        $watch = true;
                }
 
index 85d051d..9eb5f2a 100644 (file)
@@ -85,7 +85,6 @@ class ApiWatch extends ApiBase {
                                );
                        }
 
-                       $this->logFeatureUsage( 'action=watch&title' );
                        $title = Title::newFromText( $params['title'] );
                        if ( !$title || !$title->isWatchable() ) {
                                $this->dieUsageMsg( array( 'invalidtitle', $params['title'] ) );
index 35f296c..279e640 100644 (file)
@@ -88,6 +88,7 @@
        "apihelp-edit-param-sectiontitle": "Die Überschrift für einen neuen Abschnitt.",
        "apihelp-edit-param-text": "Seiteninhalt.",
        "apihelp-edit-param-summary": "Bearbeitungszusammenfassung. Auch Abschnittsüberschrift, wenn $1section=new und $1sectiontitle nicht festgelegt ist.",
+       "apihelp-edit-param-tags": "Auf die Version anzuwendende Änderungsmarkierungen.",
        "apihelp-edit-param-minor": "Kleine Bearbeitung.",
        "apihelp-edit-param-notminor": "Nicht-kleine Bearbeitung.",
        "apihelp-edit-param-bot": "Diese Bearbeitung als Bot-Bearbeitung markieren.",
        "apihelp-query+usercontribs-param-start": "Der zurückzugebende Start-Zeitstempel.",
        "apihelp-query+usercontribs-param-end": "Der zurückzugebende End-Zeitstempel.",
        "apihelp-query+usercontribs-param-user": "Die Benutzer, für die Beiträge abgerufen werden sollen.",
-       "apihelp-query+usercontribs-paramvalue-prop-ids": "Ergänzt die Seiten- und Versionskennung.",
+       "apihelp-query+usercontribs-paramvalue-prop-ids": "Fügt die Seiten- und Versionskennung hinzu.",
        "apihelp-query+usercontribs-paramvalue-prop-timestamp": "Ergänzt den Zeitstempel der Bearbeitung.",
-       "apihelp-query+usercontribs-paramvalue-prop-comment": "Ergänzt den Kommentar der Bearbeitung.",
+       "apihelp-query+usercontribs-paramvalue-prop-comment": "Fügt den Kommentar der Bearbeitung hinzu.",
        "apihelp-query+userinfo-paramvalue-prop-editcount": "Ergänzt den Bearbeitungszähler des aktuellen Benutzers.",
        "apihelp-query+userinfo-paramvalue-prop-realname": "Fügt den bürgerlichen Namen des Benutzers hinzu.",
        "apihelp-query+userinfo-example-simple": "Informationen über den aktuellen Benutzer abrufen",
index 450d83a..d4e5303 100644 (file)
        "apihelp-help-param-wrap": "Wrap the output in a standard API response structure.",
        "apihelp-help-param-toc": "Include a table of contents in the HTML output.",
        "apihelp-help-example-main": "Help for the main module.",
+       "apihelp-help-example-submodules": "Help for <kbd>action=query</kbd> and all its submodules.",
        "apihelp-help-example-recursive": "All help in one page.",
        "apihelp-help-example-help": "Help for the help module itself.",
        "apihelp-help-example-query": "Help for two query submodules.",
index ac46637..42b86d8 100644 (file)
@@ -9,6 +9,7 @@
        },
        "apihelp-block-description": "Estä käyttäjä.",
        "apihelp-block-param-reason": "Eston syy.",
+       "apihelp-delete-description": "Poista sivu.",
        "apihelp-emailuser-example-email": "Lähetä käyttäjälle <kbd>WikiSysop</kbd> sähköposti, jossa lukee <kbd>Content</kbd>.",
        "apihelp-query+linkshere-param-show": "Näytä vain kohteet, jotka täyttävät nämä kriteerit:\n;redirect:Näytä vain uudelleenohjaukset.\n;!redirect:Näytä vain ei-uudelleenohjaukset",
        "apihelp-tag-example-rev": "Lisää tunniste <kbd>vandalism</kbd> versioon 123 antamatta perustelua.",
index 074593f..fd561d9 100644 (file)
        "apihelp-query+watchlist-paramvalue-prop-loginfo": "Engade información do rexistro cando sexa axeitado.",
        "apihelp-query+watchlist-param-show": "Só mostrar elementos que cumpran esos criterios. Por exemplo, para ver só edicións menores feitas por usuarios conectados, activar $1show=minor|!anon.",
        "apihelp-query+watchlist-param-type": "Que tipos de cambios mostrar:",
+       "apihelp-query+watchlist-paramvalue-type-edit": "Edicións comúns a páxinas.",
+       "apihelp-query+watchlist-paramvalue-type-external": "Cambios externos.",
+       "apihelp-query+watchlist-paramvalue-type-new": "Creacións de páxinas.",
+       "apihelp-query+watchlist-paramvalue-type-log": "Entradas do rexistro",
        "apihelp-query+watchlist-param-owner": "Usado con $1token para acceder á lista de páxinas de vixiancia doutro usuario.",
        "apihelp-query+watchlist-param-token": "Identificador de seguridade (dispoñible nas [[Special:Preferences#mw-prefsection-watchlist|preferencias]] de usuario) para permitir o acceso a outros á súa páxina de vixiancia.",
        "apihelp-query+watchlist-example-simple": "Listar a última revisión das páxinas recentemente modificadas da lista de vixiancia do usuario actual.",
index 37243af..310e2d0 100644 (file)
        "apihelp-help-param-wrap": "לעטוף את הפלט במבנה תשובת API תקני.",
        "apihelp-help-param-toc": "לכלול תוכן עניינים בפלט HTML.",
        "apihelp-help-example-main": "עזרה ליחידה הראשית.",
+       "apihelp-help-example-submodules": "עזרה עבור <kbd>action=query</kbd> וכל התת־מודולים שלו.",
        "apihelp-help-example-recursive": "כל העזרה בדף אחד.",
        "apihelp-help-example-help": "עזרה ליחידת העזרה עצמה.",
        "apihelp-help-example-query": "עזרה לשתי תת־יחידות של שאילתה.",
index c1123d2..780d161 100644 (file)
        "apihelp-feedrecentchanges-param-hidebots": "Nascondi le modifiche apportate da bot.",
        "apihelp-feedrecentchanges-param-hideanons": "Nascondi le modifiche fatte da utenti anonimi.",
        "apihelp-feedrecentchanges-param-hideliu": "Nascondi le modifiche apportate dagli utenti registrati.",
+       "apihelp-feedrecentchanges-param-hidepatrolled": "Nascondi modifiche verificate.",
        "apihelp-feedrecentchanges-param-hidemyself": "Nasconde le modifiche effettuate dall'utente attuale.",
+       "apihelp-feedrecentchanges-param-tagfilter": "Filtra per etichetta.",
+       "apihelp-feedrecentchanges-param-target": "Mostra solo le modifiche alle pagine collegate da questa pagina.",
        "apihelp-feedrecentchanges-param-showlinkedto": "Mostra solo le modifiche alle pagine collegate a quella specificata.",
        "apihelp-feedrecentchanges-example-simple": "Mostra le ultime modifiche.",
        "apihelp-feedrecentchanges-example-30days": "Mostra le modifiche degli ultimi 30 giorni.",
+       "apihelp-feedwatchlist-param-linktosections": "Collega direttamente alla sezione modificata, se possibile.",
+       "apihelp-filerevert-description": "Ripristina un file ad una versione precedente.",
+       "apihelp-filerevert-param-filename": "Nome del file di destinazione, senza il prefisso 'File:'.",
+       "apihelp-filerevert-example-revert": "Ripristina <kbd>Wiki.png</kbd> alla versione del <kbd>2011-03-05T15:27:40Z</kbd>.",
+       "apihelp-imagerotate-description": "Ruota una o più immagini.",
+       "apihelp-imagerotate-param-rotation": "Gradi di rotazione dell'immagine in senso orario.",
+       "apihelp-imagerotate-example-simple": "Ruota <kbd>File:Example.png</kbd> di <kbd>90</kbd> gradi.",
+       "apihelp-imagerotate-example-generator": "Ruota tutte le immagini in <kbd>Category:Flip</kbd> di <kbd>180</kbd> gradi.",
+       "apihelp-import-param-summary": "Oggetto dell'importazione.",
+       "apihelp-import-param-xml": "File XML caricato.",
+       "apihelp-import-param-interwikisource": "Per importazioni interwiki: wiki da cui importare.",
+       "apihelp-import-param-interwikipage": "Per importazioni interwiki: pagina da importare.",
+       "apihelp-import-param-fullhistory": "Per importazioni interwiki: importa l'intera cronologia, non solo la versione attuale.",
+       "apihelp-import-param-templates": "Per importazioni interwiki: importa anche tutti i template inclusi.",
+       "apihelp-import-example-import": "Importa [[meta:Help:ParserFunctions]] nel namespace 100 con cronologia completa.",
        "apihelp-login-param-name": "Nome utente.",
        "apihelp-login-param-password": "Password.",
        "apihelp-login-param-domain": "Dominio (opzionale).",
        "apihelp-userrights-param-userid": "ID utente.",
        "apihelp-watch-description": "Aggiunge o rimuove pagine dagli osservati speciali dell'utente attuale.",
        "api-pageset-param-titles": "Un elenco di titoli su cui lavorare.",
+       "api-pageset-param-pageids": "Un elenco di ID pagina su cui lavorare.",
        "api-pageset-param-revids": "Un elenco di ID versioni su cui lavorare.",
        "api-pageset-param-redirects-generator": "Risolvi automaticamente redirect in <var>$1titles</var>, <var>$1pageids</var>, e <var>$1revids</var>, e nelle pagine restituite da <var>$1generator</var>.",
        "api-pageset-param-converttitles": "Converte i titoli in altre varianti, se necessario. Funziona solo se la lingua del contenuto del wiki supporta la conversione in varianti. Le lingue che supportano la conversione in varianti includono $1",
index d307fa7..c3197f8 100644 (file)
        "apihelp-help-param-wrap": "Donn de Ußjahbe en dem <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Application Programming Interface\">API</i> sing schtandattmähßejje Schtruktuhr vun de Antwood enschlehße.",
        "apihelp-help-param-toc": "Donn en Enhhaldserzeijschensß en de Ußjahbe vum <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"HyperText Markup Language\">HTML</i> ennschlehße.",
        "apihelp-help-example-main": "Hölp för et Houpmoduhl.",
+       "apihelp-help-example-submodules": "Hölp för „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">action=query</kbd>“ un alle Ongermoduhle.",
        "apihelp-help-example-recursive": "Alle Hölp en eine Sigg.",
        "apihelp-help-example-help": "Alle Hölp övver de Hölp säälver.",
        "apihelp-help-example-query": "Hölp för zwei Ongermoduhle för Frohre.",
        "apihelp-query+fileusage-param-prop": "Wat för en Eijeschaffte holle:",
        "apihelp-query+fileusage-paramvalue-prop-pageid": "De Kännong för jehde Sigg.",
        "apihelp-query+fileusage-paramvalue-prop-title": "De Övverschreff för jehde Sigg.",
-       "apihelp-query+fileusage-paramvalue-prop-redirect": "Zeijsch aan, wann di Sigge en Ömleijdong es.",
+       "apihelp-query+fileusage-paramvalue-prop-redirect": "Zeijsch aan, wann di Sigg en Ömleijdong es.",
        "apihelp-query+fileusage-param-namespace": "Donn blohß Sigge en heh dä Appachtemangs metnämme.",
        "apihelp-query+fileusage-param-limit": "Wi vill holle?",
        "apihelp-query+fileusage-example-simple": "Holl Aanjahbe övver Sigge, di de Dattei „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[[:File:Example.jpg]].</code>“ bruche.",
        "apihelp-query+recentchanges-param-user": "Donn blohß Änderonge vun heh däm Metmaacher opleßte.",
        "apihelp-query+recentchanges-param-excludeuser": "Donn kein Änderonge vun heh däm Metmaacher opleßte.",
        "apihelp-query+recentchanges-param-tag": "Donn blohß Änderonge met heh dä Makkehrong opleßte.",
+       "apihelp-query+recentchanges-paramvalue-prop-tags": "Donn de Makkehronge för dä Enndraach opleßte.",
+       "apihelp-query+recentchanges-paramvalue-prop-sha1": "Donn de Pröhvsom för di Enndrähsch oplesßte, di met enne Väsjohn zesamme hange.",
+       "apihelp-query+recentchanges-param-token": "Nemm „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>“ schtatt dämm.",
        "apihelp-query+recentchanges-param-limit": "Wi vill Änderonge ensjesammp zem aanzeije?",
        "apihelp-query+recentchanges-param-type": "Wat för en Zoot Änneronge aanzeije?",
        "apihelp-query+recentchanges-param-toponly": "Bloß Änderonge aanzeije, woh de neußte Väsjohn beij eruß kohm.",
        "apihelp-query+templates-example-generator": "Holl Ennfommazjuhneövver di Sigge met di Schablohne, di en dä Sigg „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Main Page</kbd>“ jebruch wähde.",
        "apihelp-query+templates-example-namespaces": "Holl Sigge uß de {{ns:user}} un {{ns:template}} Appachtemangs, di en di Sigg „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Main Page</kbd>“ enjeschloße wähde.",
        "apihelp-query+transcludedin-description": "Fengk alle Sigge, di di aanjejovve Sigge enneschlehße.",
+       "apihelp-query+transcludedin-param-prop": "Wat för en Eijeschaffte holle:",
+       "apihelp-query+transcludedin-paramvalue-prop-pageid": "De Kännong för jehde Sigg.",
+       "apihelp-query+transcludedin-paramvalue-prop-title": "De Övverschreff för jehde Sigg.",
+       "apihelp-query+transcludedin-paramvalue-prop-redirect": "Zeijsch aan, wann di Sigg en Ömleijdong es.",
        "apihelp-query+transcludedin-param-namespace": "Donn blohß Sigge en heh dä Appachtemangs ennschlehße.",
        "apihelp-query+transcludedin-param-limit": "Wi vill ußjävve.",
        "apihelp-query+transcludedin-example-simple": "Holl en Leß met Sigge, di en dä Sigg „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Main Page</kbd>“ ennjeschloße wähde.",
        "apihelp-query+usercontribs-param-userprefix": "Holl beijdrähsch för alle Metmaacher, dänne ier Nahme met heh däm Wääd aanfange. Övverschriehv „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1user</code>“.",
        "apihelp-query+usercontribs-param-namespace": "Donn blohß Beijdrähsch en heh dä Appachtemangs opleßte.",
        "apihelp-query+usercontribs-param-prop": "Donn zohsäzlejje Aanjahbe ennschlehße:",
+       "apihelp-query+usercontribs-paramvalue-prop-ids": "Donn de Kännong för jehde Sigg un jehe Väsjohn derbei.",
+       "apihelp-query+usercontribs-paramvalue-prop-title": "Donn de Övverschrevv un de Kännong för et Appachtemang derbei.",
+       "apihelp-query+usercontribs-paramvalue-prop-timestamp": "Deihd et Dattom un de Uhrzigg vun dä Änderong derbei.",
+       "apihelp-query+usercontribs-paramvalue-prop-size": "Deihd de neuje Jrühße noh dä Änderong derbei.",
+       "apihelp-query+usercontribs-paramvalue-prop-sizediff": "Deihd de Änderong vun dä Jrühße vun dä Änderong derbei.",
+       "apihelp-query+usercontribs-paramvalue-prop-flags": "Deihd de Makkehronge vun dä Änderong derbei.",
+       "apihelp-query+usercontribs-paramvalue-prop-tags": "Donn de Makkehronge vun dä Änderong opleßte.",
        "apihelp-query+usercontribs-param-tag": "Donn blohß Väsjohne met heh dä Makehrong opleßte.",
        "apihelp-query+usercontribs-param-toponly": "Bloß Änderonge aanzeije, woh de neußte Väsjohn beij eruß kohm.",
        "apihelp-query+usercontribs-example-user": "Zeijsch dem Metmaacher „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Example</kbd>“ sing Beijdrähsch.",
        "apihelp-query+usercontribs-example-ipprefix": "Zeijsch de Beijdrähsch vun alle <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Internet Protocol\">IP</i>-Adräße, di met „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">192.0.2.</kbd>“ bejenne.",
        "apihelp-query+userinfo-description": "Holl Aanjahbe övver dä aktoälle Metmaacher.",
        "apihelp-query+userinfo-param-prop": "Wat för en Aanjahbe med enzschlehße:",
+       "apihelp-query+userinfo-paramvalue-prop-groups": "Donn alle Jroppe opleßte, woh dä heh Metmaacher dren es.",
+       "apihelp-query+userinfo-paramvalue-prop-implicitgroups": "Donn alle Jroppe opleßte, woh dä heh Metmaacher aotomattesch dren es.",
+       "apihelp-query+userinfo-paramvalue-prop-rights": "Donn alle Rääschte opleßte, di dä Metmaacher hät.",
+       "apihelp-query+userinfo-paramvalue-prop-changeablegroups": "Donn alle Jroppe opleßte, woh dä heh Metmaacher eine bei donn udder eruß nämme kann.",
+       "apihelp-query+userinfo-paramvalue-prop-options": "Donn alle Enschtällonge opleßte, di dä heh Metmaacher jesaz hät.",
+       "apihelp-query+userinfo-paramvalue-prop-editcount": "Donn heh däm Metmaacher sing Aanzahl Ännderonge derbeij.",
+       "apihelp-query+userinfo-paramvalue-prop-ratelimits": "Donn alle Mängebeschrängkonge opleßte, di heh dä Metmaacer hät.",
        "apihelp-query+userinfo-paramvalue-prop-realname": "Deiht däm Metmaacher singe reeschtejje Nahme derbei.",
+       "apihelp-query+userinfo-paramvalue-prop-email": "Donn de <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"„de eläktrohnesche Poß“\">e-mail</i>-Adräß vun heh däm Metmaacer opleßte, un et Dattom, wann di et läz beschtähtesch woode es.",
        "apihelp-query+userinfo-paramvalue-prop-registrationdate": "Donn et Dattom vun dämm Metmaacher singe eetze Aanmäldong derbei.",
        "apihelp-query+userinfo-example-simple": "Holl Aanjahbe övver dä aktoälle Metmaacher.",
        "apihelp-query+userinfo-example-data": "Holl zohsäzlejje Aanjahbe övver dä aktoälle Metmaacher.",
        "apihelp-query+users-description": "Holl Aanjahbe övver en Leß vun Metmaacher.",
+       "apihelp-query+users-param-prop": "Wat för en Aanjahbe med enzschlehße:",
+       "apihelp-query+users-paramvalue-prop-rights": "Donn alle Rääschte opleßte, di alle Metmaacher han.",
+       "apihelp-query+users-paramvalue-prop-editcount": "Donn däm Metmaacher sing Aanzahl Ännderonge derbeij.",
+       "apihelp-query+users-paramvalue-prop-registration": "Donn et Dattom vun dämm Metmaacher singe eetze Aanmäldong derbei.",
        "apihelp-query+users-param-users": "En Leß vun Metmaacher för Aanjahbe drövver ze holle.",
+       "apihelp-query+users-param-token": "Nemm „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>“ schtatt dämm.",
        "apihelp-query+users-example-simple": "Holl Aanjahbe för dä Metmaacher <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Example</kbd>.",
        "apihelp-query+watchlist-param-start": "Et Dattom un de Zigg vun woh aff opjezallt wähde sull.",
        "apihelp-query+watchlist-param-end": "Et Dattum un Uhrzigg, bes wann opzälle.",
        "apihelp-query+watchlist-param-prop": "Wat för en zohsäzlejje Eijeschaffte holle:",
        "apihelp-query+watchlist-paramvalue-prop-ids": "Donn de Kännong vun de Väsohne un de Sigge derbei,",
        "apihelp-query+watchlist-paramvalue-prop-title": "Mähd en Övverschhreff övver di Sigg.",
+       "apihelp-query+watchlist-paramvalue-prop-flags": "Deihd de Makkehronge vun dä Änderong derbei.",
        "apihelp-query+watchlist-paramvalue-prop-user": "Deiht dä Metmaacher derbei, dä di Änderong jemaat hät.",
        "apihelp-query+watchlist-paramvalue-prop-userid": "Deiht de kännong vn äm Metmaacher derbei, dä di Änderong jemaat hät.",
        "apihelp-query+watchlist-paramvalue-prop-timestamp": "Deihd et Dattom un de Uhrzigg vun dä Änderong derbei.",
        "apihelp-query+watchlist-paramvalue-type-categorize": "Änderonge aan de Zohjehüreshkeit zoh Saachjroppe.",
        "apihelp-query+watchlistraw-description": "Donn alle Sigge uß dem aktälle Metmaacher sing Oppaßleß holle.",
        "apihelp-query+watchlistraw-param-namespace": "Donn blohß Sigge en heh däm Appachtemang opleßte.",
+       "apihelp-query+watchlistraw-param-limit": "Wi vell Äjehbneße ennsjesammp pro Oprohv ußjejovve wähde sulle.",
+       "apihelp-query+watchlistraw-param-prop": "Wat för en zohsäzlejje Eijeschaffte holle:",
        "apihelp-query+watchlistraw-example-simple": "Donn alle Sigge uß dem aktälle Metmaacher sing Oppaßleß opleßte.",
        "apihelp-revisiondelete-description": "Versione fottschmieße un widder zeröck holle.",
        "apihelp-revisiondelete-param-hide": "Wat för jehde Väsjohn ze veschteijsche.",
+       "apihelp-revisiondelete-param-show": "Wat för jehde Väsjohn zerökzeholle.",
        "apihelp-revisiondelete-param-suppress": "Ov dat och för de Wiki-Köbesse verschtoche wähde sull, wie för jede Andere.",
        "apihelp-rollback-param-title": "De Övverschreff vun dä Sigg för di_j_en vörrejje Väsjohn zeröckzeholle es. Kam_mer nit zersamme met „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1pageid</var>“ bruche.",
        "apihelp-rollback-param-pageid": "De Kännong vun dä Sigg för di_j_en vörrejje Väsjohn zeröckzeholle es. Kam_mer nit zersamme met „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1title</var>“ bruche.",
+       "apihelp-rollback-param-watchlist": "Donn di Sigg op däm aktoälle Metmaacher sing Oppaßleß udder nemm se druß fott, donn de Enschtällonge nämme, udder donn de Oppaßleß jaa nit verändere.",
        "apihelp-setnotificationtimestamp-param-entirewatchlist": "Donn alle Sigge beärbeide, di en Oppaßleßte dren sin.",
        "apihelp-stashedit-param-section": "Däm Affschnett sing Nommer. „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr>0</kbd>“ brängk der eezde Affschnett, dä keijn Övverschreff hät, „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr>new</kbd>“ brängg_ene neuje Affschnett.",
        "apihelp-stashedit-param-sectiontitle": "De Övverschreff för ene neuje Afschnett",
        "apihelp-stashedit-param-text": "Dä Sigg ehre Ennhalld.",
+       "apihelp-stashedit-param-contentmodel": "Et Enhalltsmodäll för dä neue Ennhalld.",
        "apihelp-tag-description": "Donn Makkehronge vun einzel Väsjohne udder Enndraähsch em Logbohch fott nämme udder se verjävve.",
        "apihelp-tag-param-rcid": "Ein udder mih Kännonge uß de neuste Ännderonge, woh di Makkehrong derbei jedonn udder fott jenumme wähde sull.",
        "apihelp-tag-param-revid": "Ein Kännong udder mih, woh di Makkehrong derbei jedonn udder fott jenumme wähde sull.",
        "apihelp-watch-description": "Donn di Sigg en däm aktoälle Metmaacher singe Oppaßless eren udder schmihß se erus.",
        "apihelp-watch-example-watch": "Don di Sigg „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Main Page</kbd>“ en de Oppaßleß.",
        "apihelp-watch-example-unwatch": "Schmiiß di Sigg „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Main Page</kbd>“ uß dä Oppaßleß erus.",
+       "apihelp-watch-example-generator": "Donn op de eezte paa Sigge em Schtanndadd_Appachtemang oppaße.",
        "apihelp-format-example-generic": "Jiff wadd_erus kohm em Fommaht $1 us.",
+       "apihelp-json-description": "Donn de Dahte em <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Extensible Markup Language\">XML</i>-Fommahd ußjävve.",
        "apihelp-json-param-ascii": "Wann aanjejovve, deiht alle nit-<i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"American Standard Code for Information Interchange\">ASCII</i>-Zeijsche met hexadezimahle !escape-Sequänze koddehre. Dadd es der Schtandatt, wann „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">formatversion</var>“ <kbd>1</kbd> es.",
        "apihelp-jsonfm-description": "Dahte em <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"JavaScript Object Notation\">JSON</i>-Fommaht ußjävve un för schöhn en et <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"HyperText Markup Language\">HTML</i> wandele.",
        "apihelp-none-description": "Donn nix ußjävve.",
        "apihelp-php-description": "Dahte em hengernader jeschrevve <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"PHP Hypertext Preprocessor\">PHP</i>-Fommaht ußjävve.",
+       "apihelp-phpfm-description": "Dahte em hengernannder jeschrevve <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"PHP Hypertext Preprocessor\">PHP</i>-Fommaht ußjävve un för schöhn en et <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"HyperText Markup Language\">HTML</i> wandele.",
+       "apihelp-rawfm-description": "Dahte, met de Aandeijle för et Fählersöhke, em <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"JavaScript Object Notation\">JSON</i>-Fommaht ußjävve un för schöhn en et <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"HyperText Markup Language\">HTML</i> wandele.",
        "apihelp-xml-description": "Donn de Dahte em <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Extensible Markup Language\">XML</i>-Fommahd ußjävve.",
        "apihelp-xml-param-includexmlnamespace": "Wann aanjejovve, deihd en <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Extensible Markup Language\">XML</i>-Appachtemand derbei.",
+       "apihelp-xmlfm-description": "Donn de Dahte em <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Extensible Markup Language\">XML</i>-Fommahd schöhn jemaht met <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"HyperText Markup Language\">HTML</i> ußjävve.",
        "apihelp-yaml-description": "Donn de Dahte em <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"YAML Ain't Markup Language\">YAML</i>-Fommahd ußjävve.",
        "apihelp-yamlfm-description": "Donn de Dahte em <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"YAML Ain't Markup Language\">YAML</i>-Fommahd schöhn met <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"HyperText Markup Language\">HTML</i> ußjävve.",
        "api-format-title": "Wat et <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Application Programming Interface\">API</i> ußjohv.",
index 947c89b..05b19f1 100644 (file)
        "apihelp-help-param-wrap": "{{doc-apihelp-param|help|wrap}}",
        "apihelp-help-param-toc": "{{doc-apihelp-param|help|toc}}",
        "apihelp-help-example-main": "{{doc-apihelp-example|help}}",
+       "apihelp-help-example-submodules": "{{doc-apihelp-example|help}}",
        "apihelp-help-example-recursive": "{{doc-apihelp-example|help}}",
        "apihelp-help-example-help": "{{doc-apihelp-example|help}}",
        "apihelp-help-example-query": "{{doc-apihelp-example|help}}",
index 134ca2c..766da01 100644 (file)
@@ -79,6 +79,8 @@
        "apihelp-edit-param-redirect": "Автоматически разрешать редиректы.",
        "apihelp-edit-param-contentformat": "Формат сериализации содержимого, используемый для ввода текста.",
        "apihelp-edit-example-edit": "Редактировать страницу",
+       "apihelp-edit-example-prepend": "Добавить магическое слово <kbd>_&#95;NOTOC_&#95;</kbd> в начало страницы.",
+       "apihelp-edit-example-undo": "Отменить изменения с 13579 по 13585 с добавлением автоматического описания правки.",
        "apihelp-emailuser-description": "Письмо участнику",
        "apihelp-emailuser-param-target": "Адресат электронного письма",
        "apihelp-emailuser-param-subject": "Заголовок темы.",
index 3f4aa61..28e90de 100644 (file)
@@ -13,8 +13,8 @@
        "apihelp-edit-param-text": "Страница са садржајем.",
        "apihelp-edit-param-minor": "Мања измена.",
        "apihelp-edit-example-edit": "Уређивање странице.",
-       "apihelp-emailuser-description": "СлаÑ\9aе Ðµ-поÑ\80Ñ\83ке ÐºÐ¾Ñ\80иÑ\81никÑ\83",
-       "apihelp-emailuser-param-target": "Ð\9aоÑ\80иÑ\81ник Ñ\98е Ð¿Ð¾Ñ\81лао Ðµ-поÑ\80Ñ\83кÑ\83.",
+       "apihelp-emailuser-description": "СлаÑ\9aе Ð¸Ð¼ÐµÑ\98ла ÐºÐ¾Ñ\80иÑ\81никÑ\83.",
+       "apihelp-emailuser-param-target": "Ð\9aоÑ\80иÑ\81ник Ñ\98е Ð¿Ð¾Ñ\81лао Ð¸Ð¼ÐµÑ\98л.",
        "apihelp-feedcontributions-param-year": "Од године (и раније).",
        "apihelp-filerevert-description": "Вратити датотеку у ранију верзију.",
        "apihelp-help-example-recursive": "Сва помоћ у једној страници.",
index e195520..9068582 100644 (file)
@@ -7,7 +7,8 @@
                        "Base",
                        "Dars",
                        "Umherirrender",
-                       "Macofe"
+                       "Macofe",
+                       "Mix Gerder"
                ]
        },
        "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Документація]]\n* [[mw:API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Список розсилки]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Оголошення API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Баґи і запити]\n</div>\n<strong>Статус:</strong> Усі функції, вказані на цій сторінці, мають працювати, але API далі перебуває в активній розробці і може змінитися у будь-який момент. Підпишіться на [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ список розсилки mediawiki-api-announce], щоб помічати оновлення.\n\n<strong>Хибні запити:</strong> Коли до API надсилаються хибні запити, буде відіслано HTTP-шапку з ключем «MediaWiki-API-Error», а тоді і значення шапки, і код помилки, надіслані назад, будуть встановлені з тим же значенням. Більше інформації див. на [[mw:API:Errors_and_warnings|API: Errors and warnings]].",
        "apihelp-feedrecentchanges-param-hideliu": "Приховати редагування зареєстрованих користувачів.",
        "apihelp-feedrecentchanges-param-hidepatrolled": "Приховати відпатрульовані редагування.",
        "apihelp-feedrecentchanges-param-hidemyself": "Приховати редагування поточного користувача.",
+       "apihelp-feedrecentchanges-param-hidecategorization": "Приховати зміни в членстві в категорії.",
        "apihelp-feedrecentchanges-param-tagfilter": "Фільтрувати за теґом.",
        "apihelp-feedrecentchanges-param-target": "Показати лише зміни на сторінках, на які посилається ця сторінка.",
        "apihelp-feedrecentchanges-param-showlinkedto": "Показати натомість лише зміни на сторінках, які посилаються на цю сторінку.",
        "apihelp-query+watchlist-paramvalue-prop-loginfo": "Додає інформацію журналу, де це доречно.",
        "apihelp-query+watchlist-param-show": "Показати лише елементи, що задовільняють ці критерії. Наприклад, для перегляду лише незначних змін, здійснених користувачами, що увійшли до системи, вкажіть $1show=minor|!anon.",
        "apihelp-query+watchlist-param-type": "Які типи змін показувати:\n;edit:Звичайні редагування сторінки.\n;external:Зовнішні зміни.\n;new:Створення сторінок.\n;log:Записи журналу.",
+       "apihelp-query+watchlist-paramvalue-type-edit": "Регулярні сторінки правок.",
+       "apihelp-query+watchlist-paramvalue-type-external": "Зовнішні зміни.",
+       "apihelp-query+watchlist-paramvalue-type-new": "Сторінка створена.",
+       "apihelp-query+watchlist-paramvalue-type-log": "Записи в журналі.",
        "apihelp-query+watchlist-param-owner": "Використовується разом з $1token для доступу до списку спостереження різних користувачів.",
        "apihelp-query+watchlist-param-token": "Токен безпеки (доступний у [[Special:Preferences#mw-prefsection-watchlist|налаштуваннях]] користувача) для отримання доступу до списку спостереження іншого користувача.",
        "apihelp-query+watchlist-example-simple": "Перелічити верхні версії для нещодавно змінених сторінок у списку спостереження поточного користувача.",
index fa5e288..03841d6 100644 (file)
@@ -209,7 +209,17 @@ class LocalisationCache {
                                        $storeClass = 'LCStoreStaticArray';
                                        break;
                                case 'detect':
-                                       $storeClass = $wgCacheDirectory ? 'LCStoreCDB' : 'LCStoreDB';
+                                       if ( !empty( $conf['storeDirectory'] ) ) {
+                                               $storeClass = 'LCStoreCDB';
+                                       } else {
+                                               $cacheDir = $wgCacheDirectory ?: wfTempDir();
+                                               if ( $cacheDir ) {
+                                                       $storeConf['directory'] = $cacheDir;
+                                                       $storeClass = 'LCStoreCDB';
+                                               } else {
+                                                       $storeClass = 'LCStoreDB';
+                                               }
+                                       }
                                        break;
                                default:
                                        throw new MWException(
index 9ac6c32..2494ef1 100644 (file)
@@ -36,8 +36,8 @@ class ChangesList extends ContextSource {
        protected $rclistOpen;
        protected $rcMoveIndex;
 
-       /** @var MapCacheLRU */
-       protected $watchingCache;
+       /** @var BagOStuff */
+       protected $watchMsgCache;
 
        /**
         * Changeslist constructor
@@ -53,7 +53,7 @@ class ChangesList extends ContextSource {
                        $this->skin = $obj;
                }
                $this->preCacheMessages();
-               $this->watchingCache = new MapCacheLRU( 50 );
+               $this->watchMsgCache = new HashBagOStuff( array( 'maxKeys' => 50 ) );
        }
 
        /**
@@ -500,17 +500,17 @@ class ChangesList extends ContextSource {
         * @return string
         */
        protected function numberofWatchingusers( $count ) {
-               $cache = $this->watchingCache;
-               if ( $count > 0 ) {
-                       if ( !$cache->has( $count ) ) {
-                               $cache->set( $count, $this->msg( 'number_of_watching_users_RCview' )
-                                       ->numParams( $count )->escaped() );
-                       }
-
-                       return $cache->get( $count );
-               } else {
+               if ( $count <= 0 ) {
                        return '';
                }
+               $cache = $this->watchMsgCache;
+               $that = $this;
+               return $cache->getWithSetCallback( $count, $cache::TTL_INDEFINITE,
+                       function () use ( $that, $count ) {
+                               return $that->msg( 'number_of_watching_users_RCview' )
+                                       ->numParams( $count )->escaped();
+                       }
+               );
        }
 
        /**
index caf5afa..a8850fc 100644 (file)
@@ -152,6 +152,16 @@ abstract class ContextSource implements IContextSource {
                return $this->getContext()->getSkin();
        }
 
+       /**
+        * Get the Timing object
+        *
+        * @since 1.27
+        * @return Timing
+        */
+       public function getTiming() {
+               return $this->getContext()->getTiming();
+       }
+
        /**
         * Get the Stats object
         *
index 09c3939..1b881e4 100644 (file)
@@ -72,6 +72,11 @@ class DerivativeContext extends ContextSource implements MutableContext {
         */
        private $stats;
 
+       /**
+        * @var Timing
+        */
+       private $timing;
+
        /**
         * Constructor
         * @param IContextSource $context Context to inherit from
@@ -115,6 +120,19 @@ class DerivativeContext extends ContextSource implements MutableContext {
                }
        }
 
+       /**
+        * Get the timing object
+        *
+        * @return Timing
+        */
+       public function getTiming() {
+               if ( !is_null( $this->timing ) ) {
+                       return $this->timing;
+               } else {
+                       return $this->getContext()->getTiming();
+               }
+       }
+
        /**
         * Set the WebRequest object
         *
index 58bf5d9..750389d 100644 (file)
@@ -131,6 +131,14 @@ interface IContextSource {
         */
        public function getStats();
 
+       /**
+        * Get the timing object
+        *
+        * @since 1.27
+        * @return Timing
+        */
+       public function getTiming();
+
        /**
         * Get a Message object with context set.  See wfMessage for parameters.
         *
index 42a2aee..4f8e65d 100644 (file)
@@ -66,6 +66,11 @@ class RequestContext implements IContextSource, MutableContext {
         */
        private $stats;
 
+       /**
+        * @var Timing
+        */
+       private $timing;
+
        /**
         * @var Config
         */
@@ -139,6 +144,18 @@ class RequestContext implements IContextSource, MutableContext {
                return $this->stats;
        }
 
+       /**
+        * Get the timing object
+        *
+        * @return Timing
+        */
+       public function getTiming() {
+               if ( $this->timing === null ) {
+                       $this->timing = new Timing();
+               }
+               return $this->timing;
+       }
+
        /**
         * Set the Title object
         *
index 531086b..60cf0ec 100644 (file)
@@ -3438,7 +3438,7 @@ abstract class DatabaseBase implements IDatabase {
                                $levels = implode( ', ', $this->mTrxAtomicLevels );
                                throw new DBUnexpectedError(
                                        $this,
-                                       "Got explicit BEGIN while atomic sections $levels are still open."
+                                       "Got explicit BEGIN from $fname while atomic section(s) $levels are open."
                                );
                        } elseif ( !$this->mTrxAutomatic ) {
                                // We want to warn about inadvertently nested begin/commit pairs, but not about
index 274e18e..685abe0 100644 (file)
@@ -205,6 +205,12 @@ class MonologSpi implements Spi {
        protected function createLogger( $channel, $spec ) {
                $obj = new Logger( $channel );
 
+               if ( isset( $spec['calls'] ) ) {
+                       foreach ( $spec['calls'] as $method => $margs ) {
+                               call_user_func_array( array( $obj, $method ), $margs );
+                       }
+               }
+
                if ( isset( $spec['processors'] ) ) {
                        foreach ( $spec['processors'] as $processor ) {
                                $obj->pushProcessor( $this->getProcessor( $processor ) );
index 0194a61..8eec202 100644 (file)
@@ -130,11 +130,13 @@ class DeferredUpdates {
                                        wfGetLBFactory()->commitMasterChanges();
                                } catch ( Exception $e ) {
                                        // We don't want exceptions thrown during deferred updates to
-                                       // be reported to the user since the output is already sent.
-                                       // Instead we just log them.
+                                       // be reported to the user since the output is already sent
                                        if ( !$e instanceof ErrorPageError ) {
                                                MWExceptionHandler::logException( $e );
                                        }
+                                       // Make sure incomplete transactions are not committed and end any
+                                       // open atomic sections so that other DB updates have a chance to run
+                                       wfGetLBFactory()->rollbackMasterChanges();
                                }
                        }
 
index 390b7fe..cd64f0d 100644 (file)
@@ -316,7 +316,7 @@ class LocalFile extends File {
        /**
         * Purge the file object/metadata cache
         */
-       function invalidateCache() {
+       public function invalidateCache() {
                $key = $this->getCacheKey();
                if ( !$key ) {
                        return;
@@ -1209,21 +1209,15 @@ class LocalFile extends File {
         * @param null|User $user
         * @return bool
         */
-       function recordUpload2( $oldver, $comment, $pageText, $props = false, $timestamp = false,
-               $user = null
+       function recordUpload2(
+               $oldver, $comment, $pageText, $props = false, $timestamp = false, $user = null
        ) {
-
                if ( is_null( $user ) ) {
                        global $wgUser;
                        $user = $wgUser;
                }
 
                $dbw = $this->repo->getMasterDB();
-               $dbw->begin( __METHOD__ );
-
-               if ( !$props ) {
-                       $props = $this->repo->getFileProps( $this->getVirtualUrl() );
-               }
 
                # Imports or such might force a certain timestamp; otherwise we generate
                # it and can fudge it slightly to keep (name,timestamp) unique on re-upload.
@@ -1234,6 +1228,7 @@ class LocalFile extends File {
                        $allowTimeKludge = false;
                }
 
+               $props = $props ?: $this->repo->getFileProps( $this->getVirtualUrl() );
                $props['description'] = $comment;
                $props['user'] = $user->getId();
                $props['user_text'] = $user->getName();
@@ -1243,12 +1238,11 @@ class LocalFile extends File {
                # Fail now if the file isn't there
                if ( !$this->fileExists ) {
                        wfDebug( __METHOD__ . ": File " . $this->getRel() . " went missing!\n" );
-                       $dbw->rollback( __METHOD__ );
 
                        return false;
                }
 
-               $reupload = false;
+               $dbw->startAtomic( __METHOD__ );
 
                # Test to see if the row exists using INSERT IGNORE
                # This avoids race conditions by locking the row until the commit, and also
@@ -1273,13 +1267,18 @@ class LocalFile extends File {
                        __METHOD__,
                        'IGNORE'
                );
-               if ( $dbw->affectedRows() == 0 ) {
+
+               $reupload = ( $dbw->affectedRows() == 0 );
+               if ( $reupload ) {
                        if ( $allowTimeKludge ) {
                                # Use LOCK IN SHARE MODE to ignore any transaction snapshotting
-                               $ltimestamp = $dbw->selectField( 'image', 'img_timestamp',
+                               $ltimestamp = $dbw->selectField(
+                                       'image',
+                                       'img_timestamp',
                                        array( 'img_name' => $this->getName() ),
                                        __METHOD__,
-                                       array( 'LOCK IN SHARE MODE' ) );
+                                       array( 'LOCK IN SHARE MODE' )
+                               );
                                $lUnixtime = $ltimestamp ? wfTimestamp( TS_UNIX, $ltimestamp ) : false;
                                # Avoid a timestamp that is not newer than the last version
                                # TODO: the image/oldimage tables should be like page/revision with an ID field
@@ -1294,8 +1293,6 @@ class LocalFile extends File {
                        # version of the file was broken. Allow registration of the new
                        # version to continue anyway, because that's better than having
                        # an image that's not fixable by user operations.
-
-                       $reupload = true;
                        # Collision, this is an update of a file
                        # Insert previous contents into oldimage
                        $dbw->insertSelect( 'oldimage', 'image',
@@ -1322,7 +1319,7 @@ class LocalFile extends File {
 
                        # Update the current image row
                        $dbw->update( 'image',
-                               array( /* SET */
+                               array(
                                        'img_size' => $this->size,
                                        'img_width' => intval( $this->width ),
                                        'img_height' => intval( $this->height ),
@@ -1340,23 +1337,17 @@ class LocalFile extends File {
                                array( 'img_name' => $this->getName() ),
                                __METHOD__
                        );
-               } else {
-                       # This is a new file, so update the image count
-                       DeferredUpdates::addUpdate( SiteStatsUpdate::factory( array( 'images' => 1 ) ) );
                }
 
                $descTitle = $this->getTitle();
                $wikiPage = new WikiFilePage( $descTitle );
                $wikiPage->setFile( $this );
 
-               # Add the log entry
-               $action = $reupload ? 'overwrite' : 'upload';
-
-               $logEntry = new ManualLogEntry( 'upload', $action );
+               // Add the log entry...
+               $logEntry = new ManualLogEntry( 'upload', $reupload ? 'overwrite' : 'upload' );
                $logEntry->setPerformer( $user );
                $logEntry->setComment( $comment );
                $logEntry->setTarget( $descTitle );
-
                // Allow people using the api to associate log entries with the upload.
                // Log has a timestamp, but sometimes different from upload timestamp.
                $logEntry->setParameters(
@@ -1373,15 +1364,9 @@ class LocalFile extends File {
                // now and wait until the page exists.
                $logId = $logEntry->insert();
 
-               $exists = $descTitle->exists();
-               if ( $exists ) {
-                       // Page exists, do RC entry now (otherwise we wait for later).
+               if ( $descTitle->exists() ) {
+                       // Page exists, do RC entry now (otherwise we wait for later)
                        $logEntry->publish( $logId );
-               }
-
-               if ( $exists ) {
-                       # Create a null revision
-                       $latest = $descTitle->getLatestRevID();
                        // Use own context to get the action text in content language
                        $formatter = LogFormatter::newFromEntry( $logEntry );
                        $formatter->setContext( RequestContext::newExtraneousContext( $descTitle ) );
@@ -1394,60 +1379,69 @@ class LocalFile extends File {
                                false,
                                $user
                        );
-                       if ( !is_null( $nullRevision ) ) {
+                       if ( $nullRevision ) {
                                $nullRevision->insertOn( $dbw );
-
-                               Hooks::run( 'NewRevisionFromEditComplete', array( $wikiPage, $nullRevision, $latest, $user ) );
+                               Hooks::run(
+                                       'NewRevisionFromEditComplete',
+                                       array( $wikiPage, $nullRevision, $nullRevision->getParentId(), $user )
+                               );
                                $wikiPage->updateRevisionOn( $dbw, $nullRevision );
                        }
-               }
-
-               # Commit the transaction now, in case something goes wrong later
-               # The most important thing is that files don't get lost, especially archives
-               # NOTE: once we have support for nested transactions, the commit may be moved
-               #       to after $wikiPage->doEdit has been called.
-               $dbw->commit( __METHOD__ );
-
-               # Update memcache after the commit
-               $this->invalidateCache();
 
-               if ( $exists ) {
-                       # Invalidate the cache for the description page
-                       $descTitle->invalidateCache();
-                       $descTitle->purgeSquid();
+                       $newPageContent = null;
                } else {
-                       # New file; create the description page.
-                       # There's already a log entry, so don't make a second RC entry
-                       # Squid and file cache for the description page are purged by doEditContent.
-                       $content = ContentHandler::makeContent( $pageText, $descTitle );
-                       $status = $wikiPage->doEditContent(
-                               $content,
-                               $comment,
-                               EDIT_NEW | EDIT_SUPPRESS_RC,
-                               false,
-                               $user
-                       );
-
-                       // Now that the page exists, make an RC entry.
-                       // This relies on the resetArticleID() call in WikiPage::insertOn(),
-                       // which is triggered on $descTitle by doEditContent() above.
-                       $logEntry->publish( $logId );
-                       if ( isset( $status->value['revision'] ) ) {
-                               $dbw->update( 'logging',
-                                       array( 'log_page' => $status->value['revision']->getPage() ),
-                                       array( 'log_id' => $logId ),
-                                       __METHOD__
-                               );
-                       }
+                       // Make the description page and RC log entry post-commit
+                       $newPageContent = ContentHandler::makeContent( $pageText, $descTitle );
                }
 
+               # Defer purges, page creation, and link updates in case they error out.
+               # The most important thing is that files and the DB registry stay synced.
+               $dbw->endAtomic( __METHOD__ );
+
                # Do some cache purges after final commit so that:
                # a) Changes are more likely to be seen post-purge
                # b) They won't cause rollback of the log publish/update above
                $that = $this;
-               $dbw->onTransactionIdle( function () use ( $that, $reupload, $descTitle ) {
+               $dbw->onTransactionIdle( function () use (
+                       $that, $reupload, $wikiPage, $newPageContent, $comment, $user, $logEntry, $logId
+               ) {
+                       # Update memcache after the commit
+                       $that->invalidateCache();
+
+                       if ( $newPageContent ) {
+                               # New file page; create the description page.
+                               # There's already a log entry, so don't make a second RC entry
+                               # Squid and file cache for the description page are purged by doEditContent.
+                               $status = $wikiPage->doEditContent(
+                                       $newPageContent,
+                                       $comment,
+                                       EDIT_NEW | EDIT_SUPPRESS_RC,
+                                       false,
+                                       $user
+                               );
+
+                               // Now that the page exists, make an RC entry.
+                               // This relies on the resetArticleID() call in WikiPage::insertOn(),
+                               // which is triggered on $descTitle by doEditContent() above.
+                               $logEntry->publish( $logId );
+                               if ( isset( $status->value['revision'] ) ) {
+                                       /** @var $rev Revision */
+                                       $rev = $status->value['revision'];
+                                       $that->getRepo()->getMasterDB()->update(
+                                               'logging',
+                                               array( 'log_page' => $rev->getPage() ),
+                                               array( 'log_id' => $logId ),
+                                               __METHOD__
+                                       );
+                               }
+                       } else {
+                               # Existing file page: invalidate description page cache
+                               $wikiPage->getTitle()->invalidateCache();
+                               $wikiPage->getTitle()->purgeSquid();
+                       }
+
                        # Run hook for other updates (typically more cache purging)
-                       Hooks::run( 'FileUpload', array( $that, $reupload, $descTitle->exists() ) );
+                       Hooks::run( 'FileUpload', array( $that, $reupload, !$newPageContent ) );
 
                        if ( $reupload ) {
                                # Delete old thumbnails
@@ -1460,6 +1454,11 @@ class LocalFile extends File {
                        }
                } );
 
+               if ( !$reupload ) {
+                       # This is a new file, so update the image count
+                       DeferredUpdates::addUpdate( SiteStatsUpdate::factory( array( 'images' => 1 ) ) );
+               }
+
                # Invalidate cache for all pages using this file
                DeferredUpdates::addUpdate( new HTMLCacheUpdate( $this->getTitle(), 'imagelinks' ) );
 
index e51620f..2b9a49a 100644 (file)
@@ -1359,6 +1359,18 @@ class HTMLForm extends ContextSource {
                return $this->mMethod;
        }
 
+       /**
+        * Wraps the given $section into an user-visible fieldset.
+        *
+        * @param string $legend Legend text for the fieldset
+        * @param string $section The section content in plain Html
+        * @param array $attributes Additional attributes for the fieldset
+        * @return string The fieldset's Html
+        */
+       protected function wrapFieldSetSection( $legend, $section, $attributes ) {
+               return Xml::fieldset( $legend, $section, $attributes ) . "\n";
+       }
+
        /**
         * @todo Document
         *
@@ -1425,7 +1437,7 @@ class HTMLForm extends ContextSource {
                                        if ( $fieldsetIDPrefix ) {
                                                $attributes['id'] = Sanitizer::escapeId( "$fieldsetIDPrefix$key" );
                                        }
-                                       $subsectionHtml .= Xml::fieldset( $legend, $section, $attributes ) . "\n";
+                                       $subsectionHtml .= $this->wrapFieldSetSection( $legend, $section, $attributes );
                                } else {
                                        // Just return the inputs, nothing fancy.
                                        $subsectionHtml .= $section;
index 20d7250..2e3fdb0 100644 (file)
@@ -11,7 +11,7 @@ abstract class HTMLFormField {
        protected $mFilterCallback;
        protected $mName;
        protected $mDir;
-       protected $mLabel; # String label.  Set on construction
+       protected $mLabel; # String label, as HTML. Set on construction.
        protected $mID;
        protected $mClass = '';
        protected $mVFormClass = '';
@@ -601,7 +601,7 @@ abstract class HTMLFormField {
                $config = array(
                        'classes' => array( "mw-htmlform-field-$fieldType", $this->mClass ),
                        'align' => $this->getLabelAlignOOUI(),
-                       'label' => $this->getLabel(),
+                       'label' => new OOUI\HtmlSnippet( $this->getLabel() ),
                        'help' => $helpText !== null ? new OOUI\HtmlSnippet( $helpText ) : null,
                        'errors' => $errors,
                        'infusable' => $infusable,
@@ -837,7 +837,7 @@ abstract class HTMLFormField {
        }
 
        /**
-        * @return string
+        * @return string HTML
         */
        function getLabel() {
                return is_null( $this->mLabel ) ? '' : $this->mLabel;
index 60f02a1..3238c2c 100644 (file)
@@ -108,6 +108,29 @@ class OOUIHTMLForm extends HTMLForm {
                return $html;
        }
 
+       protected function wrapFieldSetSection( $legend, $section, $attributes ) {
+               // to get a user visible effect, wrap the fieldset into a framed panel layout
+               $layout = new OOUI\PanelLayout( array(
+                       'expanded' => false,
+                       'padded' => true,
+                       'framed' => true,
+                       'infusable' => false,
+               ) );
+
+               $layout->appendContent(
+                       new OOUI\FieldsetLayout( array(
+                               'label' => $legend,
+                               'infusable' => false,
+                               'items' => array(
+                                       new OOUI\Widget( array(
+                                               'content' => new OOUI\HtmlSnippet( $section )
+                                       ) ),
+                               ),
+                       ) + $attributes )
+               );
+               return $layout;
+       }
+
        /**
         * Put a form section together from the individual fields' HTML, merging it and wrapping.
         * @param OOUI\\FieldLayout[] $fieldsHtml
@@ -160,7 +183,12 @@ class OOUIHTMLForm extends HTMLForm {
                                $msg = $error;
                                $error = array();
                        }
-                       $error = $this->msg( $msg, $error )->parse();
+                       // if the error is already a message object, don't use it as a message key
+                       if ( !$msg instanceof Message ) {
+                               $error = $this->msg( $msg, $error )->parse();
+                       } else {
+                               $error = $msg->parse();
+                       }
                        $error = new OOUI\HtmlSnippet( $error );
                }
 
index 544b852..643a370 100644 (file)
        "config-nofile": "Non se puido atopar o ficheiro \"$1\". Se cadra, foi borrado.",
        "config-extension-link": "Sabía que o seu wiki soporta [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions extensións]?\n\nPode explorar as [//www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category extensións por categoría] ou a [//www.mediawiki.org/wiki/Extension_Matrix matriz de extensións] para ollar a lista completa de extensións.",
        "mainpagetext": "<strong>MediaWiki instalouse correctamente.</strong>",
-       "mainpagedocfooter": "Consulte a [//meta.wikimedia.org/wiki/Help:Contents guía de usuario] para obter máis información sobre como usar o software wiki.\n\n== Primeiros pasos ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Lista das opcións de configuración]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Preguntas máis frecuentes sobre MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista de correo dos lanzamentos de MediaWiki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localice MediaWiki á súa lingua]"
+       "mainpagedocfooter": "Consulte a [//meta.wikimedia.org/wiki/Help:Contents guía de usuario] para obter máis información sobre como usar o software wiki.\n\n== Primeiros pasos ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Lista das opcións de configuración]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Preguntas máis frecuentes sobre MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista de correo dos lanzamentos de MediaWiki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localice MediaWiki á súa lingua]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Aprenda como combater a publicidade na súa wiki]"
 }
index 95dad25..5ba505e 100644 (file)
@@ -64,7 +64,7 @@
        "config-site-name": "Име викија:",
        "config-admin-name": "Корисничко име:",
        "config-admin-password": "Лозинка:",
-       "config-admin-email": "Ð\90дÑ\80еÑ\81а Ðµ-поÑ\88Ñ\82е:",
+       "config-admin-email": "Ð\98меÑ\98л Ð°Ð´Ñ\80еÑ\81а:",
        "config-optional-skip": "Досадно ми је, хајде да инсталирамо вики.",
        "config-profile-no-anon": "Неопходно је отворити налог",
        "config-profile-fishbowl": "Само овлашћени корисници",
@@ -77,7 +77,7 @@
        "config-license-cc-0": "Creative Commons Zero (јавно власништво)",
        "config-license-gfdl": "ГНУ-ова лиценца за слободну документацију верзија 1.3 или новија верзија",
        "config-license-pd": "Јавно власништво",
-       "config-email-settings": "Ð\9fодеÑ\88аваÑ\9aа Ðµ-поÑ\88Ñ\82е",
+       "config-email-settings": "Ð\9fодеÑ\88аваÑ\9aа Ð¸Ð¼ÐµÑ\98ла",
        "config-cc-not-chosen": "Одаберите која Кријејтив комонс лиценца вам одговара и потврдите.",
        "config-skins": "Теме",
        "config-install-step-done": "готово",
@@ -85,5 +85,5 @@
        "config-help": "помоћ",
        "config-help-tooltip": "кликните да проширите",
        "mainpagetext": "'''Медијавики је успешно инсталиран.'''",
-       "mainpagedocfooter": "Погледајте [//meta.wikimedia.org/wiki/Help:Contents кориснички водич] за коришћење програма.\n\n== Увод ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Помоћ у вези са подешавањима]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Често постављена питања]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Дописна листа о издањима Медијавикија]"
+       "mainpagedocfooter": "Погледајте [//meta.wikimedia.org/wiki/Help:Contents кориснички водич] за коришћење програма.\n\n== Увод ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Помоћ у вези са подешавањима]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Често постављена питања]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Дописна листа о издањима Медијавикија]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Научите како да се борете против спама на Вашој вики]"
 }
diff --git a/includes/libs/Timing.php b/includes/libs/Timing.php
new file mode 100644 (file)
index 0000000..653227e
--- /dev/null
@@ -0,0 +1,168 @@
+<?php
+/**
+ * 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
+ */
+
+/**
+ * An interface to help developers measure the performance of their applications.
+ * This interface closely matches the W3C's User Timing specification.
+ * The key differences are:
+ *
+ * - The reference point for all measurements which do not explicitly specify
+ *   a start time is $_SERVER['REQUEST_TIME_FLOAT'], not navigationStart.
+ * - Successive calls to mark() and measure() with the same entry name cause
+ *   the previous entry to be overwritten. This ensures that there is a 1:1
+ *   mapping between names and entries.
+ * - Because there is a 1:1 mapping, instead of getEntriesByName(), we have
+ *   getEntryByName().
+ *
+ * The in-line documentation incorporates content from the User Timing Specification
+ * http://www.w3.org/TR/user-timing/
+ * Copyright © 2013 World Wide Web Consortium, (MIT, ERCIM, Keio, Beihang).
+ * http://www.w3.org/Consortium/Legal/2015/doc-license
+ *
+ * @since 1.27
+ */
+class Timing {
+
+       /** @var array[] */
+       private $entries = array();
+
+       public function __construct() {
+               $this->clearMarks();
+       }
+
+       /**
+        * Store a timestamp with the associated name (a "mark")
+        *
+        * @param string $markName The name associated with the timestamp.
+        *  If there already exists an entry by that name, it is overwritten.
+        * @return array The mark that has been created.
+        */
+       public function mark( $markName ) {
+               $this->entries[$markName] = array(
+                       'name'      => $markName,
+                       'entryType' => 'mark',
+                       'startTime' => microtime( true ),
+                       'duration'  => 0,
+               );
+               return $this->entries[$markName];
+       }
+
+       /**
+        * @param string $markName The name of the mark that should
+        *  be cleared. If not specified, all marks will be cleared.
+        */
+       public function clearMarks( $markName = null ) {
+               if ( $markName !== null ) {
+                       unset( $this->entries[$markName] );
+               } else {
+                       $this->entries = array(
+                               'requestStart' => array(
+                                       'name'      => 'requestStart',
+                                       'entryType' => 'mark',
+                                       'startTime' => isset( $_SERVER['REQUEST_TIME_FLOAT'] )
+                                               ? $_SERVER['REQUEST_TIME_FLOAT']
+                                               : $_SERVER['REQUEST_TIME'],
+                                       'duration'  => 0,
+                               ),
+                       );
+               }
+       }
+
+       /**
+        * This method stores the duration between two marks along with
+        * the associated name (a "measure").
+        *
+        * If neither the startMark nor the endMark argument is specified,
+        * measure() will store the duration from $_SERVER['REQUEST_TIME_FLOAT'] to
+        * the current time.
+        * If the startMark argument is specified, but the endMark argument is not
+        * specified, measure() will store the duration from the most recent
+        * occurrence of the start mark to the current time.
+        * If both the startMark and endMark arguments are specified, measure()
+        * will store the duration from the most recent occurrence of the start
+        * mark to the most recent occurrence of the end mark.
+        *
+        * @param string $measureName
+        * @param string $startMark
+        * @param string $endMark
+        * @return array The measure that has been created.
+        */
+       public function measure( $measureName, $startMark = 'requestStart', $endMark = null ) {
+               $start = $this->getEntryByName( $startMark );
+               $startTime = $start['startTime'];
+
+               if ( $endMark ) {
+                       $end = $this->getEntryByName( $endMark );
+                       $endTime = $end['startTime'];
+               } else {
+                       $endTime = microtime( true );
+               }
+
+               $this->entries[$measureName] = array(
+                       'name'      => $measureName,
+                       'entryType' => 'measure',
+                       'startTime' => $startTime,
+                       'duration'  => $endTime - $startTime,
+               );
+
+               return $this->entries[$measureName];
+       }
+
+       /**
+        * Sort entries in chronological order with respect to startTime.
+        */
+       private function sortEntries() {
+               uasort( $this->entries, function ( $a, $b ) {
+                       return 10000 * ( $a['startTime'] - $b['startTime'] );
+               } );
+       }
+
+       /**
+        * @return array[] All entries in chronological order.
+        */
+       public function getEntries() {
+               $this->sortEntries();
+               return $this->entries;
+       }
+
+       /**
+        * @param string $entryType
+        * @return array[] Entries (in chronological order) that have the same value
+        *  for the entryType attribute as the $entryType parameter.
+        */
+       public function getEntriesByType( $entryType ) {
+               $this->sortEntries();
+               $entries = array();
+               foreach ( $this->entries as $entry ) {
+                       if ( $entry['entryType'] === $entryType ) {
+                               $entries[] = $entry;
+                       }
+               }
+               return $entries;
+       }
+
+       /**
+        * @param string $name
+        * @return array|null Entry named $name or null if it does not exist.
+        */
+       public function getEntryByName( $name ) {
+               return isset( $this->entries[$name] ) ? $this->entries[$name] : null;
+       }
+}
index c1ee065..7b85d92 100644 (file)
@@ -69,6 +69,11 @@ class HashBagOStuff extends BagOStuff {
                        return false;
                }
 
+               // Refresh key position for maxCacheKeys eviction
+               $temp = $this->bag[$key];
+               unset( $this->bag[$key] );
+               $this->bag[$key] = $temp;
+
                return $this->bag[$key][self::KEY_VAL];
        }
 
index e71c0ec..ff8050b 100644 (file)
@@ -1242,7 +1242,7 @@ class WikiPage implements Page, IDBAccessObject {
         *   Giving 0 indicates the new page flag should be set on.
         * @param bool $lastRevIsRedirect If given, will optimize adding and
         *   removing rows in redirect table.
-        * @return bool True on success, false on failure
+        * @return bool Success; false if the page row was missing or page_latest changed
         */
        public function updateRevisionOn( $dbw, $revision, $lastRevision = null,
                $lastRevIsRedirect = null
@@ -1804,29 +1804,37 @@ class WikiPage implements Page, IDBAccessObject {
                        $changed = !$content->equals( $old_content );
 
                        if ( $changed ) {
-                               $dbw->begin( __METHOD__ );
-
                                $prepStatus = $content->prepareSave( $this, $flags, $oldid, $user );
                                $status->merge( $prepStatus );
 
                                if ( !$status->isOK() ) {
-                                       $dbw->rollback( __METHOD__ );
+                                       return $status;
+                               }
+
+                               $dbw->begin( __METHOD__ );
+                               // Get the latest page_latest value while locking it.
+                               // Do a CAS style check to see if it's the same as when this method
+                               // started. If it changed then bail out before touching the DB.
+                               $latestNow = $this->lock();
+                               if ( $latestNow != $oldid ) {
+                                       $dbw->commit( __METHOD__ );
+                                       // Page updated or deleted in the mean time
+                                       $status->fatal( 'edit-conflict' );
 
                                        return $status;
                                }
-                               $revisionId = $revision->insertOn( $dbw );
 
-                               // Update page.
-                               // We check for conflicts by comparing $oldid with the current latest revision ID.
-                               $ok = $this->updateRevisionOn( $dbw, $revision, $oldid, $oldIsRedirect );
+                               // At this point we are now comitted to returning an OK
+                               // status unless some DB query error or other exception comes up.
+                               // This way callers don't have to call rollback() if $status is bad
+                               // unless they actually try to catch exceptions (which is rare).
 
-                               if ( !$ok ) {
-                                       // Belated edit conflict! Run away!!
-                                       $status->fatal( 'edit-conflict' );
+                               $revisionId = $revision->insertOn( $dbw );
 
+                               // Update page_latest and friends to reflect the new revision
+                               if ( !$this->updateRevisionOn( $dbw, $revision, null, $oldIsRedirect ) ) {
                                        $dbw->rollback( __METHOD__ );
-
-                                       return $status;
+                                       throw new MWException( "Failed to update page row to use new revision." );
                                }
 
                                Hooks::run( 'NewRevisionFromEditComplete',
@@ -1876,30 +1884,28 @@ class WikiPage implements Page, IDBAccessObject {
                        // Create new article
                        $status->value['new'] = true;
 
-                       $dbw->begin( __METHOD__ );
-
                        $prepStatus = $content->prepareSave( $this, $flags, $oldid, $user );
                        $status->merge( $prepStatus );
-
                        if ( !$status->isOK() ) {
-                               $dbw->rollback( __METHOD__ );
-
                                return $status;
                        }
 
-                       $status->merge( $prepStatus );
+                       $dbw->begin( __METHOD__ );
 
-                       // Add the page record; stake our claim on this title!
-                       // This will return false if the article already exists
+                       // Add the page record unless one already exists for the title
                        $newid = $this->insertOn( $dbw );
-
                        if ( $newid === false ) {
-                               $dbw->rollback( __METHOD__ );
+                               $dbw->commit( __METHOD__ ); // nothing inserted
                                $status->fatal( 'edit-already-exists' );
 
-                               return $status;
+                               return $status; // nothing done
                        }
 
+                       // At this point we are now comitted to returning an OK
+                       // status unless some DB query error or other exception comes up.
+                       // This way callers don't have to call rollback() if $status is bad
+                       // unless they actually try to catch exceptions (which is rare).
+
                        // Save the revision text...
                        $revision = new Revision( array(
                                'page'       => $newid,
@@ -1924,7 +1930,10 @@ class WikiPage implements Page, IDBAccessObject {
                        }
 
                        // Update the page record with revision data
-                       $this->updateRevisionOn( $dbw, $revision, 0 );
+                       if ( !$this->updateRevisionOn( $dbw, $revision, 0 ) ) {
+                               $dbw->rollback( __METHOD__ );
+                               throw new MWException( "Failed to update page row to use new revision." );
+                       }
 
                        Hooks::run( 'NewRevisionFromEditComplete', array( $this, $revision, false, $user ) );
 
@@ -2270,25 +2279,6 @@ class WikiPage implements Page, IDBAccessObject {
                }
        }
 
-       /**
-        * Edit an article without doing all that other stuff
-        * The article must already exist; link tables etc
-        * are not updated, caches are not flushed.
-        *
-        * @param string $text Text submitted
-        * @param User $user The relevant user
-        * @param string $comment Comment submitted
-        * @param bool $minor Whereas it's a minor modification
-        *
-        * @deprecated since 1.21, use doEditContent() instead.
-        */
-       public function doQuickEdit( $text, User $user, $comment = '', $minor = 0 ) {
-               ContentHandler::deprecated( __METHOD__, "1.21" );
-
-               $content = ContentHandler::makeContent( $text, $this->getTitle() );
-               $this->doQuickEditContent( $content, $user, $comment, $minor );
-       }
-
        /**
         * Edit an article without doing all that other stuff
         * The article must already exist; link tables etc
index 63ba5c1..fcda87b 100644 (file)
@@ -844,7 +844,7 @@ abstract class ResourceLoaderModule {
        protected function validateScriptFile( $fileName, $contents ) {
                if ( $this->getConfig()->get( 'ResourceLoaderValidateJS' ) ) {
                        // Try for cache hit
-                       $cache = ObjectCache::getLocalClusterInstance();
+                       $cache = ObjectCache::getMainWANInstance();
                        $key = $cache->makeKey(
                                'resourceloader',
                                'jsparse',
index 5821148..6dad342 100644 (file)
@@ -191,8 +191,7 @@ class SearchOracle extends SearchDatabase {
                                        foreach ( $temp_terms as $t ) {
                                                $searchon .= ( $terms[1] == '-' ? ' ~' : ' & ' ) . $this->escapeTerm( $t );
                                        }
-                               }
-                               else {
+                               } else {
                                        $searchon .= ( $terms[1] == '-' ? ' ~' : ' & ' ) . $this->escapeTerm( $terms[2] );
                                }
                                if ( !empty( $terms[3] ) ) {
index 60c4249..649ef4f 100644 (file)
@@ -84,14 +84,11 @@ class SearchPostgres extends SearchDatabase {
                                }
                                if ( strtolower( $terms[2] ) === 'and' ) {
                                        $searchstring .= ' & ';
-                               }
-                               elseif ( strtolower( $terms[2] ) === 'or' || $terms[2] === '|' ) {
+                               } elseif ( strtolower( $terms[2] ) === 'or' || $terms[2] === '|' ) {
                                        $searchstring .= ' | ';
-                               }
-                               elseif ( strtolower( $terms[2] ) === 'not' ) {
+                               } elseif ( strtolower( $terms[2] ) === 'not' ) {
                                        $searchstring .= ' & !';
-                               }
-                               else {
+                               } else {
                                        $searchstring .= " & $terms[2]";
                                }
                        }
@@ -147,8 +144,7 @@ class SearchPostgres extends SearchDatabase {
                        $query = "SELECT page_id, page_namespace, page_title, 0 AS score " .
                                "FROM page p, revision r, pagecontent c WHERE p.page_latest = r.rev_id " .
                                "AND r.rev_text_id = c.old_id AND 1=0";
-               }
-               else {
+               } else {
                        $m = array();
                        if ( preg_match_all( "/'([^']+)'/", $top, $m, PREG_SET_ORDER ) ) {
                                foreach ( $m as $terms ) {
@@ -157,9 +153,9 @@ class SearchPostgres extends SearchDatabase {
                        }
 
                        $query = "SELECT page_id, page_namespace, page_title, " .
-                       "ts_rank($fulltext, to_tsquery($searchstring), 5) AS score " .
-                       "FROM page p, revision r, pagecontent c WHERE p.page_latest = r.rev_id " .
-                       "AND r.rev_text_id = c.old_id AND $fulltext @@ to_tsquery($searchstring)";
+                               "ts_rank($fulltext, to_tsquery($searchstring), 5) AS score " .
+                               "FROM page p, revision r, pagecontent c WHERE p.page_latest = r.rev_id " .
+                               "AND r.rev_text_id = c.old_id AND $fulltext @@ to_tsquery($searchstring)";
                }
 
                # # Namespaces - defaults to 0
index 5aa39c7..c0246bc 100644 (file)
@@ -698,9 +698,3 @@ class Site implements Serializable {
                $this->setInternalId( $fields['internalid'] );
        }
 }
-
-/**
- * @deprecated since 1.21
- */
-class SiteObject extends Site {
-}
index da883d9..691e24b 100644 (file)
@@ -350,9 +350,3 @@ class SiteList extends GenericArrayObject {
                return $serializationData;
        }
 }
-
-/**
- * @deprecated since 1.21
- */
-class SiteArray extends SiteList {
-}
index 701f75f..9ea18da 100644 (file)
@@ -121,12 +121,20 @@ class BrokenRedirectsPage extends QueryPage {
                        array( 'redirect' => 'no' )
                );
                $links = array();
-               $links[] = Linker::linkKnown(
-                       $fromObj,
-                       $this->msg( 'brokenredirects-edit' )->escaped(),
-                       array(),
-                       array( 'action' => 'edit' )
-               );
+               // if the page is editable, add an edit link
+               if (
+                       // check user permissions
+                       $this->getUser()->isAllowed( 'edit' ) &&
+                       // check, if the content model is editable through action=edit
+                       ContentHandler::getForTitle( $fromObj )->supportsDirectEditing()
+               ) {
+                       $links[] = Linker::linkKnown(
+                               $fromObj,
+                               $this->msg( 'brokenredirects-edit' )->escaped(),
+                               array(),
+                               array( 'action' => 'edit' )
+                       );
+               }
                $to = Linker::link(
                        $toObj,
                        null,
@@ -147,13 +155,37 @@ class BrokenRedirectsPage extends QueryPage {
                        );
                }
 
-               $out .= $this->msg( 'parentheses' )->rawParams( $this->getLanguage()
-                       ->pipeList( $links ) )->escaped();
+               if ( $links ) {
+                       $out .= $this->msg( 'parentheses' )->rawParams( $this->getLanguage()
+                               ->pipeList( $links ) )->escaped();
+               }
                $out .= " {$arr} {$to}";
 
                return $out;
        }
 
+
+       /**
+        * Cache page content model for performance
+        *
+        * @param IDatabase $db
+        * @param ResultWrapper $res
+        */
+       function preprocessResults( $db, $res ) {
+               if ( !$res->numRows() ) {
+                       return;
+               }
+
+               $batch = new LinkBatch;
+               foreach ( $res as $row ) {
+                       $batch->add( $row->namespace, $row->title );
+               }
+               $batch->execute();
+
+               // Back to start for display
+               $res->seek( 0 );
+       }
+
        protected function getGroupName() {
                return 'maintenance';
        }
index df68b12..91ac4e0 100644 (file)
@@ -190,20 +190,16 @@ class SpecialChangePassword extends FormSpecialPage {
                        return true;
                }
 
-               try {
-                       $this->mUserName = $request->getVal( 'wpName', $this->getUser()->getName() );
-                       $this->mDomain = $wgAuth->getDomain();
+               $this->mUserName = $request->getVal( 'wpName', $this->getUser()->getName() );
+               $this->mDomain = $wgAuth->getDomain();
 
-                       if ( !$wgAuth->allowPasswordChange() ) {
-                               throw new ErrorPageError( 'changepassword', 'resetpass_forbidden' );
-                       }
+               if ( !$wgAuth->allowPasswordChange() ) {
+                       throw new ErrorPageError( 'changepassword', 'resetpass_forbidden' );
+               }
 
-                       $this->attemptReset( $data['Password'], $data['NewPassword'], $data['Retype'] );
+               $status = $this->attemptReset( $data['Password'], $data['NewPassword'], $data['Retype'] );
 
-                       return true;
-               } catch ( PasswordError $e ) {
-                       return $e->getMessage();
-               }
+               return $status;
        }
 
        public function onSuccess() {
@@ -231,10 +227,14 @@ class SpecialChangePassword extends FormSpecialPage {
        }
 
        /**
-        * @param string $oldpass
-        * @param string $newpass
-        * @param string $retype
-        * @throws PasswordError When cannot set the new password because requirements not met.
+        * Checks the new password if it meets the requirements for passwords and set
+        * it as a current password, otherwise set the passed Status object to fatal
+        * and doesn't change anything
+        *
+        * @param string $oldpass The current (temporary) password.
+        * @param string $newpass The password to set.
+        * @param string $retype The string of the retype password field to check with newpass
+        * @return Status
         */
        protected function attemptReset( $oldpass, $newpass, $retype ) {
                $isSelf = ( $this->mUserName === $this->getUser()->getName() );
@@ -245,33 +245,32 @@ class SpecialChangePassword extends FormSpecialPage {
                }
 
                if ( !$user || $user->isAnon() ) {
-                       throw new PasswordError( $this->msg( 'nosuchusershort', $this->mUserName )->text() );
+                       return Status::newFatal( $this->msg( 'nosuchusershort', $this->mUserName ) );
                }
 
                if ( $newpass !== $retype ) {
                        Hooks::run( 'PrefsPasswordAudit', array( $user, $newpass, 'badretype' ) );
-                       throw new PasswordError( $this->msg( 'badretype' )->text() );
+                       return Status::newFatal( $this->msg( 'badretype' ) );
                }
 
                $throttleCount = LoginForm::incLoginThrottle( $this->mUserName );
                if ( $throttleCount === true ) {
                        $lang = $this->getLanguage();
                        $throttleInfo = $this->getConfig()->get( 'PasswordAttemptThrottle' );
-                       throw new PasswordError( $this->msg( 'changepassword-throttled' )
+                       return Status::newFatal( $this->msg( 'changepassword-throttled' )
                                ->params( $lang->formatDuration( $throttleInfo['seconds'] ) )
-                               ->text()
                        );
                }
 
                // @todo Make these separate messages, since the message is written for both cases
                if ( !$user->checkTemporaryPassword( $oldpass ) && !$user->checkPassword( $oldpass ) ) {
                        Hooks::run( 'PrefsPasswordAudit', array( $user, $newpass, 'wrongpassword' ) );
-                       throw new PasswordError( $this->msg( 'resetpass-wrong-oldpass' )->text() );
+                       return Status::newFatal( $this->msg( 'resetpass-wrong-oldpass' ) );
                }
 
                // User is resetting their password to their old password
                if ( $oldpass === $newpass ) {
-                       throw new PasswordError( $this->msg( 'resetpass-recycled' )->text() );
+                       return Status::newFatal( $this->msg( 'resetpass-recycled' ) );
                }
 
                // Do AbortChangePassword after checking mOldpass, so we don't leak information
@@ -279,7 +278,7 @@ class SpecialChangePassword extends FormSpecialPage {
                $abortMsg = 'resetpass-abort-generic';
                if ( !Hooks::run( 'AbortChangePassword', array( $user, $oldpass, $newpass, &$abortMsg ) ) ) {
                        Hooks::run( 'PrefsPasswordAudit', array( $user, $newpass, 'abortreset' ) );
-                       throw new PasswordError( $this->msg( $abortMsg )->text() );
+                       return Status::newFatal( $this->msg( $abortMsg ) );
                }
 
                // Please reset throttle for successful logins, thanks!
@@ -292,7 +291,7 @@ class SpecialChangePassword extends FormSpecialPage {
                        Hooks::run( 'PrefsPasswordAudit', array( $user, $newpass, 'success' ) );
                } catch ( PasswordError $e ) {
                        Hooks::run( 'PrefsPasswordAudit', array( $user, $newpass, 'error' ) );
-                       throw new PasswordError( $e->getMessage() );
+                       return Status::newFatal( new RawMessage( $e->getMessage() ) );
                }
 
                if ( $isSelf ) {
@@ -303,6 +302,7 @@ class SpecialChangePassword extends FormSpecialPage {
                }
                $user->saveSettings();
                $this->resetPasswordExpiration( $user );
+               return Status::newGood();
        }
 
        public function requiresUnblock() {
@@ -336,4 +336,8 @@ class SpecialChangePassword extends FormSpecialPage {
                        __METHOD__
                );
        }
+
+       protected function getDisplayFormat() {
+               return 'ooui';
+       }
 }
index 6d40985..c04582e 100644 (file)
@@ -151,14 +151,24 @@ class DoubleRedirectsPage extends QueryPage {
                        array( 'redirect' => 'no' )
                );
 
-               $edit = Linker::linkKnown(
-                       $titleA,
-                       $this->msg( 'parentheses', $this->msg( 'editlink' )->text() )->escaped(),
-                       array(),
-                       array(
-                               'action' => 'edit'
-                       )
-               );
+               // if the page is editable, add an edit link
+               if (
+                       // check user permissions
+                       $this->getUser()->isAllowed( 'edit' ) &&
+                       // check, if the content model is editable through action=edit
+                       ContentHandler::getForTitle( $titleA )->supportsDirectEditing()
+               ) {
+                       $edit = Linker::linkKnown(
+                               $titleA,
+                               $this->msg( 'parentheses', $this->msg( 'editlink' )->text() )->escaped(),
+                               array(),
+                               array(
+                                       'action' => 'edit'
+                               )
+                       );
+               } else {
+                       $edit = '';
+               }
 
                $linkB = Linker::linkKnown(
                        $titleB,
@@ -175,6 +185,35 @@ class DoubleRedirectsPage extends QueryPage {
                return ( "{$linkA} {$edit} {$arr} {$linkB} {$arr} {$linkC}" );
        }
 
+       /**
+        * Cache page content model and gender distinction for performance
+        *
+        * @param IDatabase $db
+        * @param ResultWrapper $res
+        */
+       function preprocessResults( $db, $res ) {
+               if ( !$res->numRows() ) {
+                       return;
+               }
+
+               $batch = new LinkBatch;
+               foreach ( $res as $row ) {
+                       $batch->add( $row->namespace, $row->title );
+                       if ( isset( $row->nsb ) ) {
+                               // lazy loaded when using cached results
+                               $batch->add( $row->nsb, $row->tb );
+                       }
+                       if ( isset( $row->iwc ) && !$row->iwc ) {
+                               // lazy loaded when using cached result, not added when interwiki link
+                               $batch->add( $row->nsc, $row->tc );
+                       }
+               }
+               $batch->execute();
+
+               // Back to start for display
+               $res->seek( 0 );
+       }
+
        protected function getGroupName() {
                return 'maintenance';
        }
index 70eee9f..71f387b 100644 (file)
@@ -100,7 +100,7 @@ class SpecialTags extends SpecialPage {
                        $form = new HTMLForm( $fields, $this->getContext() );
                        $form->setAction( $this->getPageTitle( 'create' )->getLocalURL() );
                        $form->setWrapperLegendMsg( 'tags-create-heading' );
-                       $form->setHeaderText( $this->msg( 'tags-create-explanation' )->plain() );
+                       $form->setHeaderText( $this->msg( 'tags-create-explanation' )->parseAsBlock() );
                        $form->setSubmitCallback( array( $this, 'processCreateTagForm' ) );
                        $form->setSubmitTextMsg( 'tags-create-submit' );
                        $form->show();
index 2499aee..dfa17aa 100644 (file)
        "createaccountreason": "Rede:",
        "createacct-reason": "Rede",
        "createacct-reason-ph": "Hoekom u nog 'n rekening skep",
-       "createacct-captcha": "Veiligheidskontrole",
-       "createacct-imgcaptcha-ph": "Sleutel die teks hierbo in",
        "createacct-submit": "Skep u rekening",
        "createacct-another-submit": "Skep nog 'n rekening",
        "createacct-benefit-heading": "{{SITENAME}} word deur mense soos u geskep.",
        "htmlform-cloner-required": "Ten minste één waarde verwag.",
        "htmlform-title-badnamespace": "[[:$1]] is nie in die \"{{ns:$2}}\" naamspasie nie.",
        "htmlform-title-not-creatable": "\"$1\" is nie 'n aanvaarbare blad titel nie",
-       "htmlform-title-not-exists": "[[:$1]] bestaan nie.",
+       "htmlform-title-not-exists": "$1 bestaan nie.",
        "sqlite-has-fts": "Weergawe $1 met ondersteuning vir vol-teks soektogte (\"full-text search\")",
        "sqlite-no-fts": "Weergawe $1 sonder ondersteuning vir vol-teks soektogte (\"full-text search\")",
        "logentry-delete-delete": "$1 {{GENDER:$2|het}} bladsy $3 verwyder",
index 9f50058..0f80cd1 100644 (file)
        "htmlform-cloner-required": "مطلوب قيمة واحدة على الأقل.",
        "htmlform-title-badnamespace": "[[:$1]] ليس في نطاق \"{{ns:$2}}\".",
        "htmlform-title-not-creatable": "\"$1\" ليس عنوان صفحة يمكن إنشاؤه",
-       "htmlform-title-not-exists": "[[:$1]] غير موجود.",
+       "htmlform-title-not-exists": "$1 غير موجود.",
        "htmlform-user-not-exists": "<strong>$1</strong> غير موجود",
        "htmlform-user-not-valid": "اسم المستخدم <strong>$1</strong> غير صالح.",
        "sqlite-has-fts": "$1 بدعم البحث في كامل النص",
index 9374954..09cdc9c 100644 (file)
        "htmlform-cloner-required": "Necesítase polo menos un valor.",
        "htmlform-title-badnamespace": "[[:$1]] nun ta nel espaciu de nomes \"{{ns:$2}}\".",
        "htmlform-title-not-creatable": "«$1» nun ye un títulu de páxina que pueda crease",
-       "htmlform-title-not-exists": "[[:$1]] nun esiste.",
+       "htmlform-title-not-exists": "$1 nun esiste.",
        "htmlform-user-not-exists": "<strong>$1</strong> nun esiste.",
        "htmlform-user-not-valid": "<strong>$1</strong> nun ye un nome d'usuariu válidu.",
        "sqlite-has-fts": "$1 con sofitu pa busca de testu completu",
index 72f5377..27b2b69 100644 (file)
        "htmlform-cloner-required": "ان آزی بیر دیَر گرکلیدیر.",
        "htmlform-title-badnamespace": "[[:$1]]، «{{ns:$2}}» آدفضاسیندا دئییل.",
        "htmlform-title-not-creatable": "«$1» بیر یارانا بیلن صفحه آدی دئییل",
-       "htmlform-title-not-exists": "[[:$1]] یوخدور.",
+       "htmlform-title-not-exists": "$1 یوخدور.",
        "htmlform-user-not-exists": "<strong>$1</strong> یوخدور.",
        "htmlform-user-not-valid": "<strong>$1</strong> بیر دوزگون ایشلدن آدی دئییل.",
        "sqlite-has-fts": "$1 بوتون یازی آختارما دستگی‌له",
index 9a1c8fb..8d1abd7 100644 (file)
        "createaccountreason": "Rason:",
        "createacct-reason": "Rason",
        "createacct-reason-ph": "Tadaw ta ika magmumukna nin ibang panindog",
-       "createacct-captcha": "Rikisang panseguridad",
-       "createacct-imgcaptcha-ph": "Pakikaag an tekstong nahihiling mo sa ibabaw",
        "createacct-submit": "Muknaon an saimong panindog",
        "createacct-another-submit": "Magmukna nin ibang panindog",
        "createacct-benefit-heading": "{{SITENAME}} pinaghimo kan mga tawong siring mo.",
        "htmlform-yes": "Iyo",
        "htmlform-chosen-placeholder": "Magpili nin sarong opsyon",
        "htmlform-title-not-creatable": "\"$1\" bako sarong maimumuknang titulo kan pahina",
-       "htmlform-title-not-exists": "[[:$1]] bakong eksistido.",
+       "htmlform-title-not-exists": "$1 bakong eksistido.",
        "sqlite-has-fts": "$1 na igwang suporta sa kabilogang-teksto nin paghahanap",
        "sqlite-no-fts": "$1 na mayong suporta sa kabilogang-teksto nin paghahanap",
        "logentry-delete-delete": "$1 {{GENDER:$2|pinagpura na}} pahina $3",
index 6368e8f..f69020b 100644 (file)
        "htmlform-cloner-delete": "Выдаліць",
        "htmlform-cloner-required": "Патрабуецца як мінімум яшчэ адно значэньне.",
        "htmlform-title-badnamespace": "[[:$1]] знаходзіцца не ў прасторы назваў «{{ns:$2}}».",
+       "htmlform-title-not-creatable": "«$1» — немагчымы загаловак для старонкі",
+       "htmlform-title-not-exists": "$1 не існуе.",
        "htmlform-user-not-exists": "<strong>$1</strong> не існуе.",
        "htmlform-user-not-valid": "<strong>$1</strong> — некарэктнае імя карыстальніка.",
        "sqlite-has-fts": "$1 з падтрымкай поўнатэкстнага пошуку",
        "revdelete-unrestricted": "зьнятыя абмежаваньні для адміністратараў",
        "logentry-block-block": "$1 {{GENDER:$2|заблякаваў|заблякавала}} {{GENDER:$4|$3}} на тэрмін $5 $6",
        "logentry-block-unblock": "$1 {{GENDER:$2|разблякаваў|разблякавала}} {{GENDER:$4|$3}}",
+       "logentry-block-reblock": "$1 {{GENDER:$2|зьмяніў|зьмяніла}} тэрмін блякаваньня {{GENDER:$4|$3}} на пэрыяд $5 $6",
        "logentry-suppress-block": "$1 {{GENDER:$2|заблякаваў|заблякавала}} {{GENDER:$4|$3}} на тэрмін $5 $6",
        "logentry-merge-merge": "$1 {{GENDER:$2|аб’яднаў|аб’яднала}} $3 у $4 (вэрсіі да $5)",
        "logentry-move-move": "$1 {{GENDER:$2|перанёс|перанесла}} старонку $3 у $4",
index 96cc12c..ecf26db 100644 (file)
        "htmlform-cloner-required": "অন্তত একটি মূল্য আবশ্যক।",
        "htmlform-title-badnamespace": "[[:$1]] \"{{ns:$2}}\" নামস্থানে খুঁজে পাওয়া যায়নি।",
        "htmlform-title-not-creatable": "\"$1\" সৃষ্টিযোগ্য পাতার শিরোনাম নয়",
-       "htmlform-title-not-exists": "[[:$1]]-এর অস্তিত্ব নেই।",
+       "htmlform-title-not-exists": "$1-এর অস্তিত্ব নেই।",
        "htmlform-user-not-exists": "<strong>$1</strong>-এর অস্তিত্ব নেই।",
        "htmlform-user-not-valid": "<strong>$1</strong> একটি বৈধ ব্যবহারকারীর নাম নয়।",
        "sqlite-has-fts": "$1 সহ পূর্ণ টেক্সট সার্চ সমর্থন",
index ad4463b..5efe4df 100644 (file)
        "viewsourceold": "pogledaj izvor",
        "editlink": "uredi",
        "viewsourcelink": "pogledaj izvor",
-       "editsectionhint": "Uredi sekciju: $1",
+       "editsectionhint": "Uredi odlomak \"$1\"",
        "toc": "Sadržaj",
        "showtoc": "prikaži",
        "hidetoc": "sakrij",
        "cantcreateaccount-range-text": "Pravljenje računa sa IP adresa u rasponu '''$1''', koji uključuje i vašu IP adresu ('''$4'''), je blokirao korisnik [[User:$3|$3]].\n\nNavedeni razlog korisnika $3 je ''$2''",
        "viewpagelogs": "Pogledaj zapisnike ove stranice",
        "nohistory": "Ne postoji historija izmjena za ovu stranicu.",
-       "currentrev": "Trenutna revizija",
-       "currentrev-asof": "Trenutna revizija na dan $1",
+       "currentrev": "Trenutna verzija",
+       "currentrev-asof": "Trenutna verzija na dan $1",
        "revisionasof": "Verzija od $1",
        "revision-info": "Izmjena od $1 od {{GENDER:$6|$2}}$7",
        "previousrevision": "← Starija izmjena",
        "revdel-restore": "Promijeni dostupnost",
        "pagehist": "Historija stranice",
        "deletedhist": "Izbrisana historija",
-       "revdelete-hide-current": "Greška pri sakrivanju stavke od $2, $1: ovo je trenutna revizija.\nNe može biti sakrivena.",
+       "revdelete-hide-current": "Greška pri sakrivanju stavke od $2, $1: ovo je trenutna verzija.\nNe može biti sakrivena.",
        "revdelete-show-no-access": "Greška pri prikazivanju stavke od $2, $1: ova stavka je označena kao \"zaštićena\".\nNemate pristup do ove stavke.",
        "revdelete-modify-no-access": "Greška pri izmjeni stavke od $2, $1: ova stavka je označena kao \"zaštićena\".\nNemate pristup ovoj stavci.",
        "revdelete-modify-missing": "Greška pri mijenjanju stavke ID $1: nedostaje u bazi podataka!",
        "rc_categories": "Ograniči na kategorije (razdvoji sa \"|\"):",
        "rc_categories_any": "Bilo koju odabranu",
        "rc-change-size-new": "$1 {{PLURAL:$1|bajt|bajta|bajtova}} poslije izmjene",
-       "newsectionsummary": "/* $1 */ novi odjeljak",
+       "newsectionsummary": "/* $1 */ novi odlomak",
        "rc-enhanced-expand": "Pokaži detalje",
        "rc-enhanced-hide": "Sakrij detalje",
        "rc-old-title": "prvobitno kreirano kao \"$1\"",
        "filehist-deleteone": "obriši",
        "filehist-revert": "vrati",
        "filehist-current": "trenutno",
-       "filehist-datetime": "Datum/Vrijeme",
+       "filehist-datetime": "Datum/vrijeme",
        "filehist-thumb": "Smanjeni pregled",
        "filehist-thumbtext": "Smanjeni pregled verzije na dan $1",
        "filehist-nothumb": "Bez smanjenog pregleda",
        "nopagetitle": "Ne postoji takva stranica",
        "nopagetext": "Ciljna stranica koju ste naveli ne postoji.",
        "pager-newer-n": "{{PLURAL:$1|novija 1|novije $1}}",
-       "pager-older-n": "{{PLURAL:$1|starija 1|starije $1}}",
+       "pager-older-n": "{{PLURAL:$1|starija $1|starijih $1}}",
        "suppress": "Sakrij",
        "querypage-disabled": "Ova posebna stranica je onemogućena jer smanjuje performanse.",
        "apihelp": "API pomoć",
        "watch": "Prati članak",
        "watchthispage": "Prati ovu stranicu",
        "unwatch": "Prestani pratiti",
-       "unwatchthispage": "Ukinite praćenje",
+       "unwatchthispage": "Prestani pratiti",
        "notanarticle": "Nije članak",
        "notvisiblerev": "Revizija je obrisana",
        "watchlist-details": "{{PLURAL:$1|$1 stranica|$1 stranice|$1 stranica }} na vašem spisku praćenja, ne računajući posebno stranice za razgovor.",
        "undelete-show-file-confirm": "Da li ste sigurni da želite pogledati obrisanu reviziju datoteke \"<nowiki>$1</nowiki>\" od $2 u $3?",
        "undelete-show-file-submit": "Da",
        "namespace": "Imenski prostor:",
-       "invert": "Sve osim odabranog",
+       "invert": "Obrni izbor",
        "tooltip-invert": "Označite ovu kutiju za sakrivanje promjena na stranicama u odabranom imenskom prostoru (i povezanim imenskim prostorima ako je označeno)",
        "tooltip-whatlinkshere-invert": "Označite ovu kutiju za sakrivanje linkova sa stranica u izabranom imenskom prostoru.",
        "namespace_association": "Povezan imenski prostor",
        "intentionallyblankpage": "Ova stranica je namjerno ostavljena prazna",
        "external_image_whitelist": " #Ostavite ovu liniju onakva kakva je<pre>\n#Stavite obične fragmente opisa (samo dio koji ide između //) ispod\n#Ovi će biti spojeni sa URLovima sa vanjskih (eksternih) slika\n#One koji se spoje biće prikazane kao slike, u suprotnom će se prikazati samo link\n#Linije koje počinju sa # se tretiraju kao komentari\n#Ovo ne razlikuje velika i mala slova\n\n#Stavite sve regex fragmente iznad ove linije. Ostavite ovu liniju onakvu kakva je</pre>",
        "tags": "Oznake valjane izmjene",
-       "tag-filter": "Filter [[Special:Tags|oznaka]]:",
+       "tag-filter": "Filter za [[Special:Tags|oznake]]:",
        "tag-filter-submit": "Filter",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Oznaka|Oznake}}]]: $2)",
        "tags-title": "Oznake",
        "tags-intro": "Ova stranica prikazuje spisak oznaka koje softver može staviti na svaku izmjenu i njihovo značenje.",
        "tags-tag": "Naziv oznake",
-       "tags-display-header": "Vidljivost na spisku izmjena",
+       "tags-display-header": "Izgled na spiskovima izmjena",
        "tags-description-header": "Puni opis značenja",
        "tags-source-header": "Izvor",
        "tags-active-header": "Aktivna?",
        "htmlform-cloner-required": "Potrebna je barem jedna vrijednost.",
        "htmlform-title-badnamespace": "[[:$1]] nije u imenskom prostoru \"{{ns:$2}}\".",
        "htmlform-title-not-creatable": "Stranica \"$1\" se ne može napraviti",
-       "htmlform-title-not-exists": "[[:$1]] ne postoji.",
+       "htmlform-title-not-exists": "$1 ne postoji.",
        "htmlform-user-not-exists": "<strong>$1</strong> ne postoji.",
        "htmlform-user-not-valid": "<strong>$1</strong> nije ispravno korisničko ime.",
        "sqlite-has-fts": "$1 sa podrškom pretrage cijelog teksta",
        "json-error-inf-or-nan": "Jedna ili više NAN ili INF vrijednosti u iznosu koga treba enkodirati",
        "json-error-unsupported-type": "Data je vrijednost vrste koja se ne može enkodirati",
        "headline-anchor-title": "Veza do ovog odjeljka",
-       "special-characters-group-latin": "Latinica",
-       "special-characters-group-latinextended": "Prošireni latinski",
+       "special-characters-group-latin": "latinica",
+       "special-characters-group-latinextended": "proširena latinica",
        "special-characters-group-ipa": "IPA",
-       "special-characters-group-symbols": "Simboli",
-       "special-characters-group-greek": "Grčki",
-       "special-characters-group-cyrillic": "Ä\86irilica",
-       "special-characters-group-arabic": "Arapski",
-       "special-characters-group-arabicextended": "Prošireni arapski",
+       "special-characters-group-symbols": "simboli",
+       "special-characters-group-greek": "grčki",
+       "special-characters-group-cyrillic": "Ä\87irilica",
+       "special-characters-group-arabic": "arapski",
+       "special-characters-group-arabicextended": "prošireni arapski",
        "special-characters-group-persian": "Perzijski",
-       "special-characters-group-hebrew": "Hebrejski",
-       "special-characters-group-bangla": "Bangladeški",
-       "special-characters-group-tamil": "Tamilski",
-       "special-characters-group-telugu": "Telugu",
-       "special-characters-group-sinhala": "Sinhala",
-       "special-characters-group-gujarati": "Gujarati",
-       "special-characters-group-devanagari": "Devanagari",
-       "special-characters-group-thai": "Tajlandski",
-       "special-characters-group-lao": "Laoški",
-       "special-characters-group-khmer": "Kmerski",
+       "special-characters-group-hebrew": "hebrejski",
+       "special-characters-group-bangla": "bangladeški",
+       "special-characters-group-tamil": "tamilski",
+       "special-characters-group-telugu": "telugu",
+       "special-characters-group-sinhala": "sinhalski",
+       "special-characters-group-gujarati": "gujarati",
+       "special-characters-group-devanagari": "devanagari",
+       "special-characters-group-thai": "tajlandski",
+       "special-characters-group-lao": "laoski",
+       "special-characters-group-khmer": "kmerski",
        "special-characters-title-endash": "crtica",
        "special-characters-title-emdash": "duga crta",
        "special-characters-title-minus": "minus",
index 5bb73f2..bac086c 100644 (file)
        "htmlform-cloner-required": "Cal com a mínim un valor.",
        "htmlform-title-badnamespace": "[[:$1]] no es troba en l'espai de noms \"{{ns:$2}}\".",
        "htmlform-title-not-creatable": "\"$1\" és un títol de pàgina no editable",
-       "htmlform-title-not-exists": "[[:$1]] no existeix.",
+       "htmlform-title-not-exists": "$1 no existeix.",
        "htmlform-user-not-exists": "<strong>$1</strong> no existeix.",
        "htmlform-user-not-valid": "<strong>$1</strong> no és nom d'usuari vàlid.",
        "sqlite-has-fts": "$1, amb suport de búsqueda de text íntegre",
index ccf161b..7c97514 100644 (file)
        "nstab-template": "داڕێژە",
        "nstab-help": "پەڕەی یارمەتی",
        "nstab-category": "پۆل",
+       "mainpage-nstab": "دەستپێک",
        "nosuchaction": "کردارێک بەم شێوە نییە",
        "nosuchactiontext": "ئەو چالاکییەی لە لایەن بەستەرەوە دیاریکراوە ناتەواوە.\nلەوانەیە بە هەڵە بەستەرەکەت نووسیبێت، یان بەستەرێکی هەڵەی بە دواوە بێت.\nلەوانەیە ئەمە نیشانەی هەڵەیەک بێت لەو نەرمەکاڵایەی کە بەکاردێت لە لایەن {{SITENAME}}.",
        "nosuchspecialpage": "پەڕەی تایبەتی ئاوا بوونی نییە",
        "htmlform-no": "نا",
        "htmlform-yes": "بەڵێ",
        "htmlform-title-not-creatable": "پەڕە بە سەردێڕی \"$1\" دروست ناکرێت",
-       "htmlform-title-not-exists": "[[$1]] بوونی نیە.",
+       "htmlform-title-not-exists": "$1 بوونی نیە.",
        "logentry-delete-delete": "$1 پەڕەی $3ی {{GENDER:$2|سڕییەوە}}",
        "logentry-delete-restore": "$1 پەڕەی $3ی {{GENDER:$2|ھێنایەوە}}",
        "logentry-delete-revision": "$1 دەرکەوتنی {{PLURAL:$5|پێداچوونەوەیەکی|$5 پێداچوونەوەی}} پەڕەی $3ی {{GENDER:$2|گۆڕیی}}: $4",
index 845338e..5f82e89 100644 (file)
        "showingresultsinrange": "Níže zobrazuji nejvýše <strong>$1</strong> {{PLURAL:$1|výsledek|výsledky|výsledků}} v rozsahu #<strong>$2</strong>–#<strong>$3</strong>.",
        "search-showingresults": "{{PLURAL:$4|Výsledek <strong>$1</strong> z <strong>$3</strong>|Výsledky <strong>$1–$2</strong> z <strong>$3</strong>}}",
        "search-nonefound": "Na váš dotaz nebyly nalezeny žádné výsledky.",
+       "search-nonefound-thiswiki": "Pro tento dotaz nebyly nalezeny žádné odpovídající výsledky na této wiki.",
        "powersearch-legend": "Rozšířené vyhledávání",
        "powersearch-ns": "Hledat ve jmenných prostorech:",
        "powersearch-togglelabel": "Zaškrtnout:",
        "htmlform-cloner-required": "Je povinná nejméně jedna hodnota.",
        "htmlform-title-badnamespace": "Stránka [[:$1]] není ve jmenném prostoru „{{ns:$2}}“.",
        "htmlform-title-not-creatable": "Pod názvem „$1“ nelze vytvořit stránku",
-       "htmlform-title-not-exists": "Stránka [[:$1]] neexistuje.",
+       "htmlform-title-not-exists": "Stránka $1 neexistuje.",
        "htmlform-user-not-exists": "Uživatel <strong>$1</strong> neexistuje.",
        "htmlform-user-not-valid": "<strong>$1</strong> není platné uživatelské jméno.",
        "sqlite-has-fts": "$1 s podporou plnotextového vyhledávání",
index 99fc15b..1f60fa1 100644 (file)
        "htmlform-cloner-required": "Es ist mindestens ein Wert erforderlich.",
        "htmlform-title-badnamespace": "[[:$1]] ist nicht im Namensraum „{{ns:$2}}“.",
        "htmlform-title-not-creatable": "„$1“ ist kein erstellbarer Seitentitel",
-       "htmlform-title-not-exists": "[[:$1]] ist nicht vorhanden.",
+       "htmlform-title-not-exists": "$1 ist nicht vorhanden.",
        "htmlform-user-not-exists": "<strong>$1</strong> ist nicht vorhanden.",
        "htmlform-user-not-valid": "<strong>$1</strong> ist kein gültiger Benutzername.",
        "sqlite-has-fts": "Version $1 mit Unterstützung für die Volltextsuche",
index 41bea49..06f82ad 100644 (file)
        "htmlform-cloner-create": "Προσθήκη περισσοτέρων",
        "htmlform-cloner-delete": "Αφαίρεση",
        "htmlform-cloner-required": "Απαιτείται τουλάχιστον μία τιμή.",
-       "htmlform-title-not-exists": "Ο τίτλος [[:$1]] δεν υπάρχει.",
+       "htmlform-title-not-exists": "Ο τίτλος $1 δεν υπάρχει.",
        "htmlform-user-not-exists": "Δεν υπάρχει χρήστης με όνομα <strong>$1</strong>.",
        "htmlform-user-not-valid": "Το <strong>$1</strong> δεν είναι έγκυρο όνομα χρήστη.",
        "sqlite-has-fts": "$1 με υποστήριξη αναζήτησης πλήρους κειμένου",
index c97b08e..d62913a 100644 (file)
        "htmlform-cloner-required": "At least one value is required.",
        "htmlform-title-badnamespace": "[[:$1]] is not in the \"{{ns:$2}}\" namespace.",
        "htmlform-title-not-creatable": "\"$1\" is not a creatable page title",
-       "htmlform-title-not-exists": "[[:$1]] does not exist.",
+       "htmlform-title-not-exists": "$1 does not exist.",
        "htmlform-user-not-exists": "<strong>$1</strong> does not exist.",
        "htmlform-user-not-valid": "<strong>$1</strong> isn't a valid username.",
        "rawmessage": "$1",
index 2fce30d..b8992af 100644 (file)
        "htmlform-cloner-required": "Se requiere al menos un valor.",
        "htmlform-title-badnamespace": "[[:$1]] no está en el espacio de nombres \"{{ns:$2}}\".",
        "htmlform-title-not-creatable": "\"$1\" no es un título de página que se pueda crear",
-       "htmlform-title-not-exists": "[[:$1]] no existe.",
+       "htmlform-title-not-exists": "$1 no existe.",
        "htmlform-user-not-exists": "<strong>$1</strong> no existe.",
        "htmlform-user-not-valid": "<strong>$1</strong> no es un nombre de usuario válido.",
        "sqlite-has-fts": "$1 con soporte para búsqueda de texto completo",
index ba42a7f..93f58c0 100644 (file)
        "htmlform-cloner-required": "Vähemalt üks väärtus on nõutav.",
        "htmlform-title-badnamespace": "[[:$1]] pole nimeruumis \"{{ns:$2}}\".",
        "htmlform-title-not-creatable": "Pealkirja \"$1\" all ei saa lehekülge alustada.",
-       "htmlform-title-not-exists": "Lehekülge [[:$1]] pole olemas.",
+       "htmlform-title-not-exists": "Lehekülge $1 pole olemas.",
        "htmlform-user-not-exists": "Kasutajat <strong>$1</strong> pole olemas.",
        "htmlform-user-not-valid": "<strong>$1</strong> pole sobiv kasutajanimi.",
        "sqlite-has-fts": "$1 koos täistekstiotsingu toega",
index 630bea2..7661675 100644 (file)
        "createaccountreason": "Arrazoia:",
        "createacct-reason": "Arrazoia",
        "createacct-reason-ph": "Zergatik ari zaren beste erabiltzaile kontu bat",
-       "createacct-captcha": "Segurtasun froga",
-       "createacct-imgcaptcha-ph": "Sartu gainean ikusten duzun testua",
        "createacct-submit": "Kontua sortu",
        "createacct-another-submit": "Kontu bat sortu",
        "createacct-benefit-heading": "{{SITENAME}} zu bezalako pertsonek egiten dute.",
        "htmlform-chosen-placeholder": "Aukeratu",
        "htmlform-cloner-create": "Gehitu gehiago",
        "htmlform-cloner-delete": "Kendu",
-       "htmlform-title-not-exists": "[[:$1]] ez da existitzen.",
+       "htmlform-title-not-exists": "$1 ez da existitzen.",
        "sqlite-has-fts": "$1 testu osoan bilatzeko laguntzarekin",
        "sqlite-no-fts": "$1 testu osoan bilatzeko laguntzarik gabe",
        "logentry-delete-delete": "$1 {{GENDER:$2|wikilariak}} «$3» orria ezabatu du",
index 4313261..39bdce7 100644 (file)
        "right-editmywatchlist": "فهرست پیگیری‌های خود را ویرایش کنید. توجه داشته باشید برخی از اقدامات حتی بدون این دسترسی هم صفحات را اضافه می‌کنند.",
        "right-viewmyprivateinfo": "داده‌های خصوصی خود را ببینید (مانند آدرس ایمیل و نام واقعی)",
        "right-editmyprivateinfo": "داده‌های خصوصی خود را ویرایش کنید (مانند آدرس ایمیل و نام واقعی)",
-       "right-editmyoptions": "ترجیحات خود را ویرایش",
+       "right-editmyoptions": "ویرایش ترجیحات خود",
        "right-rollback": "واگردانی سریع ویرایش‌های آخرین کاربری که یک صفحه را ویرایش کرده‌است",
        "right-markbotedits": "علامت زدن ویرایش‌های واگردانی‌شده به عنوان ویرایش ربات",
        "right-noratelimit": "تاثیر نپذیرفتن از محدودیت سرعت",
        "htmlform-cloner-required": "حداقل یک مقدار مورد نیاز است.",
        "htmlform-title-badnamespace": "[[:$1]] در فضای نام \"{{ns:$2}}\"  موجود نیست.",
        "htmlform-title-not-creatable": "\"$1\" عنوان قابل ایجاد نیست",
-       "htmlform-title-not-exists": "[[:$1]] وجود ندارد.",
+       "htmlform-title-not-exists": "$1 وجود ندارد.",
        "htmlform-user-not-exists": "<strong>$1</strong> وجود ندارد.",
        "htmlform-user-not-valid": "حساب کاربری <strong>$1</strong> معتبر نیست.",
        "sqlite-has-fts": "$1 با پشتیبانی از جستجو در متن کامل",
index de13ad1..e4348b6 100644 (file)
        "mergehistory-into": "Kohdesivu:",
        "mergehistory-list": "Sivuhistoria, joka voidaan yhdistää",
        "mergehistory-merge": "Seuraavat versiot sivusta [[:$1]] voidaan yhdistää sivuun [[:$2]]. \n\nValintamerkin sijoituksella voit yhdistää vain ne versiot, jotka on luotu valittuna ajankohtana tai sitä ennen (listassa alaspäin). \nOta huomioon, että jos käytät navigaatiolinkkejä, tekemäsi valinta poistuu.",
-       "mergehistory-go": "Etsi muokkaukset, jotka voidaan yhdistää",
+       "mergehistory-go": "Näytä muokkaukset, jotka voidaan yhdistää",
        "mergehistory-submit": "Yhdistä versiot",
        "mergehistory-empty": "Mitään versioita ei voida yhdistää.",
        "mergehistory-done": "$3 {{PLURAL:$3|versio|versiota}} sivusta $1 yhdistettiin onnistuneesti sivuun [[:$2]].",
        "htmlform-cloner-required": "Vähintään yksi arvo on pakollinen.",
        "htmlform-title-badnamespace": "Sivu [[:$1]] ei ole nimiavaruudessa ”{{ns:$2}}”.",
        "htmlform-title-not-creatable": "”$1” ei kelpaa sivun nimeksi.",
-       "htmlform-title-not-exists": "Sivua [[:$1]] ei ole olemassa.",
+       "htmlform-title-not-exists": "Sivua $1 ei ole olemassa.",
        "htmlform-user-not-exists": "Käyttäjää <strong>$1</strong> ei ole olemassa.",
        "htmlform-user-not-valid": "<strong>$1</strong> ei ole kelvollinen käyttäjänimi.",
        "sqlite-has-fts": "$1, jossa on tuki kokotekstihaulle",
index 3890845..3bc0344 100644 (file)
        "nstab-category": "Catégorie",
        "mainpage-nstab": "Accueil",
        "nosuchaction": "Action inconnue",
-       "nosuchactiontext": "L'action spécifiée dans l'URL est invalide.\nVous avez peut-être mal entré l'URL ou suivi un lien erroné.\nIl peut également s'agir d'un bug dans le logiciel utilisé par {{SITENAME}}.",
+       "nosuchactiontext": "L’action spécifiée dans l’URL est invalide.\nVous avez peut-être mal entré l’URL ou suivi un lien erroné.\nIl peut également s’agir d’un bogue dans le logiciel utilisé par {{SITENAME}}.",
        "nosuchspecialpage": "Page spéciale inexistante",
        "nospecialpagetext": "<strong>Vous avez demandé une page spéciale qui n'existe pas.</strong>\n\nUne liste des pages spéciales valides se trouve sur [[Special:SpecialPages|{{int:specialpages}}]].",
        "error": "Erreur",
        "search-category": "(catégorie $1)",
        "search-file-match": "(correspond au contenu du fichier)",
        "search-suggest": "Essayez avec cette orthographe : $1",
-       "search-rewritten": "Affiche les résultats pour $1. Recherchez à sa place pour $2.",
+       "search-rewritten": "Résultats affichés pour $1. Rechercher $2 à la place.",
        "search-interwiki-caption": "Projets frères",
        "search-interwiki-default": "Résultats de $1 :",
        "search-interwiki-more": "(plus)",
        "htmlform-cloner-required": "Une valeur au moins est obligatoire.",
        "htmlform-title-badnamespace": "[[:$1]] n'est pas dans l'espace de noms \"{{ns:$2}}\" .",
        "htmlform-title-not-creatable": "\"$1\" n'est pas un titre de page réalisable",
-       "htmlform-title-not-exists": "[[:$1]] n’existe pas",
+       "htmlform-title-not-exists": "$1 n’existe pas",
        "htmlform-user-not-exists": "<strong>$1</strong> n’existe pas.",
        "htmlform-user-not-valid": "<strong>$1</strong> n’est pas un nom d’utilisateur valide.",
        "sqlite-has-fts": "$1 avec recherche en texte intégral supportée",
        "feedback-bugornote": "Si vous êtes prêt à décrire un problème technique en détail, veuillez [$1 signaler un bogue].\nSinon, vous pouvez utiliser le formulaire simplifié ci-dessous. Votre commentaire sera ajouté à la page « [$3 $2] », avec votre nom d'utilisateur.",
        "feedback-cancel": "Annuler",
        "feedback-close": "Fait",
-       "feedback-external-bug-report-button": "Signaler un bug technique",
+       "feedback-external-bug-report-button": "Signaler un bogue technique",
        "feedback-dialog-title": "Soumettre un commentaire",
        "feedback-dialog-intro": "Vous pouvez utiliser le simple formulaire ci-dessous pour faire parvenir vos commentaires. Votre commentaire sera ajouté à la page « $1 », ainsi que votre nom d’utilisateur.",
        "feedback-error-title": "Erreur",
index 1bf2083..598e5d4 100644 (file)
@@ -17,6 +17,7 @@
        "tog-hideminor": "Letj anrangen fersteeg",
        "tog-hidepatrolled": "Letj anrangen fersteeg",
        "tog-newpageshidepatrolled": "Kontroliaret sidjen bi a \"Nei sidjen\" fersteeg",
+       "tog-hidecategorization": "Kategorisiarang faan sidjen fersteeg",
        "tog-extendwatchlist": "Ütjwidjet list faan sidjen, diar dü uun't uug behual wel",
        "tog-usenewrc": "Ütjwidjet uunwisin faan a ''Leetst feranrangen'' an bi a sidjen, diar dü ''Uun't uug behual'' wel",
        "tog-numberheadings": "Auerskraften automaatisk numeriare",
@@ -46,6 +47,7 @@
        "tog-watchlisthideliu": "Feranrangen faan uunmeldet brükern bi sidjen, diar ik uun't uug behual wal, fersteeg",
        "tog-watchlisthideanons": "Feranrangen faan anonüüm brükern (IPs) bi sidjen, diar ik uun't uug behual wal, fersteeg",
        "tog-watchlisthidepatrolled": "Kontroliaret feranrangen bi a sidjen, diar ik uun't uug behual wal, fersteeg",
+       "tog-watchlisthidecategorization": "Kategorisiarang faan sidjen fersteeg",
        "tog-ccmeonemails": "Schüür mi kopiin faan e-mails, diar ik tu ööder brükern schüür",
        "tog-diffonly": "Bi en werjuunsferglik bluas di ferskeel uunwise, ei det hialer sidj",
        "tog-showhiddencats": "Ferbürgen kategoriin uunwise",
        "createaccountreason": "Grünj:",
        "createacct-reason": "Grünj",
        "createacct-reason-ph": "Huaram dü en ööder brükerkonto iinrachtst",
-       "createacct-captcha": "Seekerhaidspreew",
-       "createacct-imgcaptcha-ph": "Skriiw di tekst, diar dü boowen schochst",
        "createacct-submit": "Din brükerkonto iinracht",
        "createacct-another-submit": "En ööder brükerkonto iinracht",
        "createacct-benefit-heading": "{{SITENAME}} woort faan lidj üs di maaget.",
        "rcshowhidemine": "$1 min bidracher",
        "rcshowhidemine-show": "Wise",
        "rcshowhidemine-hide": "Fersteeg",
+       "rcshowhidecategorization": "$1 kategorisiarang faan sidjen",
+       "rcshowhidecategorization-show": "Wise",
+       "rcshowhidecategorization-hide": "Fersteeg",
        "rclinks": "Wise a leetst $1 feranrangen faan a leetst $2 daar.<br />$3",
        "diff": "ferskeel",
        "hist": "werjuunen",
        "upload-dialog-button-done": "Klaar",
        "upload-dialog-button-save": "Seekre",
        "upload-dialog-button-upload": "Huuchschüür",
-       "upload-process-error": "Diar as wat skiaf gingen",
-       "upload-process-warning": "Diar as en wäärnang kimen",
        "upload-form-label-select-file": "Datei ütjschük",
        "upload-form-label-infoform-title": "Enkelthaiden",
        "upload-form-label-infoform-name": "Nööm",
        "htmlform-cloner-create": "Muar diartudu",
        "htmlform-cloner-delete": "Wechnem",
        "htmlform-cloner-required": "Dü skel tumanst ään wäärs uundu.",
-       "htmlform-title-not-exists": "[[:$1]] jaft at ei.",
+       "htmlform-title-not-exists": "$1 jaft at ei.",
        "htmlform-user-not-exists": "<strong>$1</strong> jaft at ei.",
        "htmlform-user-not-valid": "<strong>$1</strong> as nään tuläät brükernööm",
        "sqlite-has-fts": "Werjuun $1 mä halep för't schüken uun di hialer tekst.",
index 26d1d26..68cd9f6 100644 (file)
        "createaccountreason": "Motivo:",
        "createacct-reason": "Motivo",
        "createacct-reason-ph": "Por que crea outra conta?",
-       "createacct-captcha": "Comprobación de seguridade",
-       "createacct-imgcaptcha-ph": "Insira o texto que ve enriba",
        "createacct-submit": "Crear a conta",
        "createacct-another-submit": "Crear conta",
        "createacct-benefit-heading": "Xente coma vostede elabora {{SITENAME}}.",
        "showingresultsinrange": "{{PLURAL:$1|Móstrase <strong>1</strong> resultado|Móstranse <strong>$1</strong> resultados}}, comezando polo número <strong>$2</strong> e rematando polo número <strong>$3</strong>.",
        "search-showingresults": "{{PLURAL:$4|Resultado <strong>$1</strong> de <strong>$3</strong>|Resultados do <strong>$1</strong> ao <strong>$2</strong>, dun total de <strong>$3</strong>}}",
        "search-nonefound": "Non se atopou ningún resultado que coincidise coa procura.",
+       "search-nonefound-thiswiki": "Non hai resultados que cumpran os criterios de busca neste sitio.",
        "powersearch-legend": "Busca avanzada",
        "powersearch-ns": "Procurar nos espazos de nomes:",
        "powersearch-togglelabel": "Seleccionar:",
        "htmlform-cloner-required": "Necesítase, polo menos, un valor.",
        "htmlform-title-badnamespace": "\"[[:$1]]\" non está no espazo de nomes \"{{ns:$2}}\".",
        "htmlform-title-not-creatable": "\"$1\" non é un título de páxina que se poida crear",
-       "htmlform-title-not-exists": "\"[[:$1]]\" non existe.",
+       "htmlform-title-not-exists": "\"$1\" non existe.",
        "htmlform-user-not-exists": "\"<strong>$1</strong>\" non existe.",
        "htmlform-user-not-valid": "\"<strong>$1</strong>\" non é un nome de usuario válido.",
        "sqlite-has-fts": "$1 con soporte para procuras de texto completo",
index 15b9156..25bab2f 100644 (file)
        "createaccountreason": "कारण:",
        "createacct-reason": "कारण",
        "createacct-reason-ph": "तूं दुसरें खातें कित्याक उगडटात",
-       "createacct-captcha": "सुरक्षा तपासणी",
-       "createacct-imgcaptcha-ph": "वयर दिसता तो मजकूर बरय",
        "createacct-submit": "तुमचे खातें रोचात",
        "createacct-another-submit": "दुसरें खातें तयार कर",
        "createacct-benefit-heading": "{{SITENAME}} तुमच्या सारख्या लोकांनी केल्लो",
        "specialpages": "खाशेलीं पानां",
        "tag-filter": "[[Special:Tags|कुर्वेचीट]] गाळणो:",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|कुरवेचीट|कुरवेचीटी}}]]: $2)",
-       "htmlform-title-not-exists": "[[:$1]] अस्तित्वांत ना.",
+       "htmlform-title-not-exists": "$1 अस्तित्वांत ना.",
        "logentry-delete-delete": "$1 {{GENDER:$2|काडून उडयल्ले पान}} $3",
        "logentry-move-move": "$1 हाणें $3 पानाक $4 {{GENDER:$2|हालयला}}",
        "logentry-newusers-create": "उपयोगकत्याचें $1 {{GENDER:$2|तयार केलें}}",
index b30c69e..0b7417d 100644 (file)
        "createaccountreason": "Karonn:",
        "createacct-reason": "Karonn",
        "createacct-reason-ph": "Tum dusrem khatem kiteak rochtai",
-       "createacct-captcha": "Suraksha topasni",
-       "createacct-imgcaptcha-ph": "Voir dixta to mozkur boroi",
        "createacct-submit": "Tujem khatem roch",
        "createacct-another-submit": "Dusrem khatem roch",
        "createacct-benefit-heading": "{{SITENAME}} tujea bhaxen lokani kel'la",
        "external_image_whitelist": " #Hi voll asa toxich dovor<pre>\n#Khala sodpache sache (''regular expressions'') ghal (fokot // modem voita poi tem bhag)\n#Hanche borobor bhaile zodlele murt comparar kel'le zatele\n#Mell khatat tim murt koxeo distele, na zalear fokot mortek ek zodd distele\n#Jeo voll #-an suru zatele tem vivek mhunn manlele zatele\n#Hanga vhodle and dhakte okxora modem forok podona\n\n#Soglle sodpache sache hea volla voir ghal. Hi voll asa toxich dovor</pre>",
        "tag-filter": "[[Special:Tags|Kurvechit]] challni:",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Kurvechit|Kurvechiti}}]]: $2)",
-       "htmlform-title-not-exists": "[[:$1]] ostitvant na.",
+       "htmlform-title-not-exists": "$1 ostitvant na.",
        "logentry-delete-delete": "$1-an {{GENDER:$2|kadun udoile}} pan $3",
        "logentry-move-move": "$1-an $3 panak $4 {{GENDER:$2|haloilea}}",
        "logentry-newusers-create": "Vapurpeacho kont $1 {{GENDER:$2|rochlam}}",
index 1e6f40f..2b137a1 100644 (file)
        "htmlform-cloner-required": "Es bruucht mindistens ei Wärt.",
        "htmlform-title-badnamespace": "[[:$1]] isch nid im Namensruum «{{ns:$2}}».",
        "htmlform-title-not-creatable": "«$1» isch kei Sytename, wo sech lat la alege",
-       "htmlform-title-not-exists": "[[:$1]] git’s nid.",
+       "htmlform-title-not-exists": "$1 git’s nid.",
        "htmlform-user-not-exists": "<strong>$1</strong> git’s nid.",
        "htmlform-user-not-valid": "<strong>$1</strong> isch ke gültige Name.",
        "sqlite-has-fts": "$1 mit Unterstitzig vu dr Volltextsuechi",
index c6aa30b..1e3a3ef 100644 (file)
        "htmlform-cloner-required": "דרוש לפחות ערך אחד.",
        "htmlform-title-badnamespace": "[[:$1]] אינו במרחב השם \"{{ns:$2}}\".",
        "htmlform-title-not-creatable": "\"$1\" אינו שם של דף שאפשר ליצור",
-       "htmlform-title-not-exists": "[[:$1]] אינו קיים.",
+       "htmlform-title-not-exists": "$1 אינו קיים.",
        "htmlform-user-not-exists": "<strong>$1</strong> אינו קיים.",
        "htmlform-user-not-valid": "<strong>$1</strong> אינו שם משתמש תקין.",
        "sqlite-has-fts": "$1 עם תמיכה בחיפוש בטקסט מלא",
index 2b42a24..66fddb0 100644 (file)
        "htmlform-cloner-required": "Legalább egy érték szükséges.",
        "htmlform-title-badnamespace": "[[:$1]] nem a(z) „{{ns:$2}}” névtérben található.",
        "htmlform-title-not-creatable": "„$1” nem egy létrehozható lapcím",
-       "htmlform-title-not-exists": "[[:$1]] nem létezik.",
+       "htmlform-title-not-exists": "$1 nem létezik.",
        "htmlform-user-not-exists": "<strong>$1</strong> nem létezik.",
        "htmlform-user-not-valid": "<strong>$1</strong> nem egy érvényes felhasználónév.",
        "sqlite-has-fts": "$1 teljes szöveges keresés támogatással",
index 4effd6e..32d7733 100644 (file)
        "htmlform-cloner-required": "Al minus un valor es requirite.",
        "htmlform-title-badnamespace": "[[:$1]] non es in le spatio de nomines \"{{ns:$2}}\".",
        "htmlform-title-not-creatable": "\"$1\" non es un titulo de pagina creabile",
-       "htmlform-title-not-exists": "[[:$1]] non existe.",
+       "htmlform-title-not-exists": "$1 non existe.",
        "htmlform-user-not-exists": "<strong>$1</strong> non existe.",
        "htmlform-user-not-valid": "<strong>$1</strong> non es un nomine de usator valide.",
        "sqlite-has-fts": "$1 con supporto de recerca de texto integre",
index 67c616b..d7f6b86 100644 (file)
        "htmlform-cloner-create": "Tambahkan lebih banyak",
        "htmlform-cloner-delete": "Hapus",
        "htmlform-cloner-required": "Paling sedikit satu nilai diperlukan.",
-       "htmlform-title-not-exists": "[[:$1]] tidak ada.",
+       "htmlform-title-not-exists": "$1 tidak ada.",
        "sqlite-has-fts": "$1 dengan dukungan pencarian teks lengkap",
        "sqlite-no-fts": "$1 tanpa dukungan pencarian teks lengkap",
        "logentry-delete-delete": "$1 {{GENDER:$2|menghapus}} halaman $3",
index 68b8cd6..73cfdb4 100644 (file)
@@ -15,6 +15,7 @@
        "tog-hideminor": "Ilemmeng dagiti bassit nga inurnos manipud iti kaudian a balbaliw",
        "tog-hidepatrolled": "Ilemmeng dagiti napatruliaan nga inurnos manipud iti kaudian a balbaliw",
        "tog-newpageshidepatrolled": "Ilemmeng dagiti napatruliaan a panid manipud iti baro a listaan ti panid",
+       "tog-hidecategorization": "Ilemmeng ti pannakaikategoria dagiti panid",
        "tog-extendwatchlist": "Ipalawa ti listaan ti bambantayan tapno maipakita amin a nasukatan, saan laeng a ti kabiitan",
        "tog-usenewrc": "Dagiti grupo a panagbaliw babaen ti panid ti kaudian a balbaliw ken listaan ti bambantayan",
        "tog-numberheadings": "Automatiko a pabilangan dagiti paulo",
@@ -44,6 +45,7 @@
        "tog-watchlisthideliu": "Ilemmeng dagiti inurnos babaen dagiti nakastrek nga agar-aramat manipud iti listaan ti bambantayan",
        "tog-watchlisthideanons": "Ilemmeng dagiti inurnos babaen dagiti di ammo nga agar-aramat manipud iti listaan ti bambantayan",
        "tog-watchlisthidepatrolled": "Ilemmeng dagiti napatruliaan nga inurnos manipud iti listaan ti bambantayan",
+       "tog-watchlisthidecategorization": "Ilemmeng ti pannakaikategoria dagiti panid",
        "tog-ccmeonemails": "Patulodandak kadagiti kopia ti esurat nga ipatulodko kadagiti sabali nga agar-aramat",
        "tog-diffonly": "Saan nga iparang ti linaon ti panid dita baba dagiti pagiddiatan",
        "tog-showhiddencats": "Ipakita dagiti nailemmeng a kategoria",
        "createaccountreason": "Rason:",
        "createacct-reason": "Rason",
        "createacct-reason-ph": "Apay nga agparpartuatka manen iti sabali a pakabilangan",
-       "createacct-captcha": "Panagpatalged ti seguridad",
-       "createacct-imgcaptcha-ph": "Ikabil ti teksto a makitam dita ngato",
        "createacct-submit": "Partuatem ti pakabilangam",
        "createacct-another-submit": "Agpartuat iti pakabilangan",
        "createacct-benefit-heading": "Ti {{SITENAME}} ket inar-aramid babaen ti tattao a kasla kenka.",
        "rcshowhidemine": "$1 dagiti inurnosko",
        "rcshowhidemine-show": "Ipakita",
        "rcshowhidemine-hide": "Ilemmeng",
+       "rcshowhidecategorization": "$1 a pannakaikategoria ti panid",
+       "rcshowhidecategorization-show": "Ipakita",
+       "rcshowhidecategorization-hide": "Ilemmeng",
        "rclinks": "Ipakita dagiti naudi a $1 a sinukatan iti kallabes a $2 nga al-aldaw<br />$3",
        "diff": "dip",
        "hist": "hist",
        "htmlform-cloner-required": "Saan a basbassit ngem maysa a pateg ti masapul.",
        "htmlform-title-badnamespace": "Ti [[:$1]] ket awan iti nagan ti espasio ti \"{{ns:$2}}\".",
        "htmlform-title-not-creatable": "Saan a mabalin a mapartuat a titulo ti panid ti \"$1\"",
-       "htmlform-title-not-exists": "Awan ti [[:$1]].",
+       "htmlform-title-not-exists": "Awan ti $1.",
        "htmlform-user-not-exists": "Awan ti <strong>$1</strong>.",
        "htmlform-user-not-valid": "Saan nga umiso a nagan ti agar-aramat ti <strong>$1</strong>.",
        "sqlite-has-fts": "Ti $1 nga addaan iti suporta ti panagbiruk ti napno a teksto",
index f3cab6b..6e882aa 100644 (file)
@@ -91,7 +91,8 @@
                        "Statix64",
                        "CassiodoroVicinetti",
                        "Bultro",
-                       "Oggioniale"
+                       "Oggioniale",
+                       "Wim b"
                ]
        },
        "tog-underline": "Sottolinea i collegamenti:",
        "passwordreset-capture-help": "Se si seleziona questa casella, l'indirizzo e-mail (con la password temporanea), verrà mostrato a voi, oltre ad essere inviato all'utente.",
        "passwordreset-email": "Indirizzo email:",
        "passwordreset-emailtitle": "Dettagli dell'utente su {{SITENAME}}",
-       "passwordreset-emailtext-ip": "Qualcuno (probabilmente tu, con indirizzo IP $1) ha richiesto l'invio di una nuova password per l'accesso a {{SITENAME}} ($4). {{PLURAL:$3|L'utente associato|Gli utenti associati}} a questo indirizzo email sono:\n\n$2\n\n{{PLURAL:$3|Questa password temporanea scadrà|Queste password temporanee scadranno}} dopo {{PLURAL:$5|un giorno|$5 giorni}}.\nDovresti accedere e scegliere una nuova password ora. \n\nSe non sei stato tu a fare la richiesta, o se ti sei ricordato la password originale e non vuoi più cambiarla, puoi ignorare questo messaggio e continuare al utilizzare la tua vecchia password.",
+       "passwordreset-emailtext-ip": "Qualcuno (probabilmente tu, con indirizzo IP $1) ha richiesto l'invio di una nuova password per l'accesso a {{SITENAME}} ($4). {{PLURAL:$3|L'utente associato|Gli utenti associati}} a questo indirizzo email sono:\n\n$2\n\n{{PLURAL:$3|Questa password temporanea scadrà|Queste password temporanee scadranno}} dopo {{PLURAL:$5|un giorno|$5 giorni}}.\nDovresti accedere e scegliere una nuova password ora. \n\nSe non sei stato tu a fare la richiesta, o se ti sei ricordato la password originale e non vuoi più cambiarla, puoi ignorare questo messaggio e continuare ad utilizzare la tua vecchia password.",
        "passwordreset-emailtext-user": "L'utente $1 di {{SITENAME}} ha richiesto l'invio di una nuova password per l'accesso a {{SITENAME}} ($4). {{PLURAL:$3|L'utente associato|Gli utenti associati}} a questo indirizzo email sono:\n\n$2\n\n{{PLURAL:$3|Questa password temporanea scadrà|Queste password temporanee scadranno}} dopo {{PLURAL:$5|un giorno|$5 giorni}}.\nDovresti accedere e scegliere una nuova password ora. \n\nSe non sei stato tu a fare la richiesta, o se ti sei ricordato la password originale e non vuoi più cambiarla, puoi ignorare questo messaggio e continuare al utilizzare la tua vecchia password.",
        "passwordreset-emailelement": "Nome utente: \n$1\n\nPassword temporanea: \n$2",
        "passwordreset-emailsent": "Se questo è un indirizzo di posta elettronica registrato per la tua utenza, allora verrà inviata una email per reimpostare la password.",
        "htmlform-cloner-required": "È necessario almeno un valore.",
        "htmlform-title-badnamespace": "[[:$1]] non si trova nel namespace \"{{ns:$2}}\".",
        "htmlform-title-not-creatable": "\"$1\" è il titolo di una pagina non creabile",
-       "htmlform-title-not-exists": "[[:$1]] non esiste.",
+       "htmlform-title-not-exists": "$1 non esiste.",
        "htmlform-user-not-exists": "<strong>$1</strong> non esiste.",
        "htmlform-user-not-valid": "<strong>$1</strong> non è un nome utente valido.",
        "sqlite-has-fts": "$1 con la possibilità di ricerca completa nel testo",
index f209c00..dc72199 100644 (file)
        "htmlform-cloner-required": "少なくとも 1 つの値が必要です。",
        "htmlform-title-badnamespace": "[[:$1]]は、\"{{ns:$2}}\"名前空間にありません。",
        "htmlform-title-not-creatable": "\"$1\" は、作成可能なページ名では、ありません。",
-       "htmlform-title-not-exists": "[[:$1]] は存在しません。",
+       "htmlform-title-not-exists": "$1 は存在しません。",
        "htmlform-user-not-exists": "<strong>$1</strong>は存在しません。",
        "htmlform-user-not-valid": "<strong>$1</strong>は有効な利用者名ではありません。",
        "sqlite-has-fts": "$1 (全文検索あり)",
index c693f22..faf9205 100644 (file)
        "htmlform-cloner-create": "მეტის დამატება",
        "htmlform-cloner-delete": "წაშლა",
        "htmlform-cloner-required": "აუცილებელია სულ მცირე ერთი მნიშვნელობა.",
-       "htmlform-title-not-exists": "[[:$1]] არ არსებობს.",
+       "htmlform-title-not-exists": "$1 არ არსებობს.",
        "htmlform-user-not-exists": "<strong>$1</strong> არ არსებობს.",
        "htmlform-user-not-valid": "<strong>$1</strong> არ არის სწორი მომხმარებლის სახელი.",
        "sqlite-has-fts": "$1 სრული ტექსტის ძიების მხარდაჭერით",
index 610c9c2..95f90f5 100644 (file)
        "htmlform-cloner-required": "Кемінде бір мән қажет етеді.",
        "htmlform-title-badnamespace": "[[:$1]] беті «{{ns:$2}}» есім кеңістігінде емес.",
        "htmlform-title-not-creatable": "«$1» беті бастауға болатын бет атауы емес",
-       "htmlform-title-not-exists": "[[:$1]] беті жоқ.",
+       "htmlform-title-not-exists": "$1 беті жоқ.",
        "htmlform-user-not-exists": "<strong>$1</strong> есімді қатысушы жоқ.",
        "htmlform-user-not-valid": "<strong>$1</strong> жарамды қатысушы есімі емес.",
        "sqlite-has-fts": "$1 дегенмен барлық мәтінде іздеуді қолдайды",
index af5b715..2a957a0 100644 (file)
        "viewsource": "មើល​កូដ",
        "viewsource-title": "មើលកូដរបស់ $1",
        "actionthrottled": "សកម្មភាពត្រូវបានកម្រិត",
-       "actionthrottledtext": "ក្រោមវិធានការប្រឆាំងស្ប៉ាម​ អ្នកត្រូវបាន​គេកំហិតមិនឱ្យ​ធ្វើសកម្មភាពនេះ​ច្រើនដងពេកទេ​ក្នុងរយៈពេលខ្លីមួយ។\n\nសូមព្យាយាមម្ដងទៀតក្នុងរយៈពេលប៉ុន្មាននាទីទៀត។",
+       "actionthrottledtext": "ក្រោមវិធានការប្រឆាំងស្ប៉ាម​ អ្នកត្រូវបាន​គេកំហិតមិនឱ្យ​ធ្វើសកម្មភាពនេះ​ច្រើនដងពេកទេ​ក្នុងរយៈពេលខ្លីមួយ តែអ្នកបានធ្វើលើសចំនួនកំហិត។\n\nសូមព្យាយាមម្ដងទៀតក្នុងរយៈពេលប៉ុន្មាននាទីទៀត។",
        "protectedpagetext": "ទំព័រនេះបានត្រូវការពារមិនឱ្យកែប្រែ​ឬធ្វើសកម្មភាពផ្សេងទៀតលើវា។",
        "viewsourcetext": "អ្នកអាចមើលនិងចម្លងកូដរបស់ទំព័រនេះ។",
        "viewyourtext": "អ្នកអាចមើលនិងចម្លងកូដរបស់<strong>ការកែប្រែរបស់អ្នក</strong>មកកាន់ទំព័រនេះ។",
        "passwordreset-emailtext-ip": "មាននរណាម្នាក់ (ប្រហែលជាខ្លួនអ្នកផ្ទាល់, មកពីអាស័យដ្ឋាន IP $1) បានស្នើសុំស្ដារពាក្យសម្ងាត់របស់អ្នកសម្រាប់ {{SITENAME}} ($4)។ {{PLURAL:$3|គណនី|គណនី}}អ្នកប្រើប្រាស់ដូចតទៅនេះ\nមានជាប់ទាក់ទិននឹងអាសយដ្ឋានអ៊ីមែលនេះ៖\n\n$2\n\n{{PLURAL:$3|ពាក្យសម្ងាត់បណ្ដោះអាសន្ននេះ|ពាក្យសម្ងាត់បណ្ដោះអាសន្នទាំងនេះ}} និងហួសសុពលភាពក្នុងរយៈពេល {{PLURAL:$5|មួយថ្ងៃ|$5 ថ្ងៃ}}។\nយកល្អអ្នកគួរតែកត់ឈ្មោះចូលរួចជ្រើសរើសពាក្យសម្ងាត់ថ្មីមួយ។ ប្រសិនបើមាននរណាម្នាក់ផ្សេងធ្វើការស្នើសុំនេះ \nឬប្រសិនបើអ្នកនឹកឃើញពាក្យសម្ងាត់ដើមរបស់អ្នក ហើយអ្នកមិនប្រាថ្នាផ្លាស់ប្ដូរវាទៀតទេនោះ អ្នកគ្រាន់តែ\nបំភ្លេចអំពីសារមួយនេះ ហើយបន្តប្រើប្រាស់ពាក្យសម្ងាត់ចាស់របស់អ្នកទៅបានហើយ។",
        "passwordreset-emailtext-user": "អ្នកប្រើប្រាស់ $1 នៅក្នុង {{SITENAME}} បានស្នើសុំស្ដារពាក្យសម្ងាត់របស់អ្នកនៅក្នុង {{SITENAME}} ($4)។\n {{PLURAL:$3|គណនី|គណនី}}អ្នកប្រើប្រាស់ដូចតទៅនេះមានជាប់ទាក់ទិននឹងអាសយដ្ឋានអ៊ីមែលនេះ៖\n\n$2\n\n{{PLURAL:$3|ពាក្យសម្ងាត់បណ្ដោះអាសន្ននេះ|ពាក្យសម្ងាត់បណ្ដោះអាសន្នទាំងនេះ}} និងហួសសុពលភាពក្នុងរយៈពេល {{PLURAL:$5|មួយថ្ងៃ|$5 ថ្ងៃ}}។\nយកល្អអ្នកគួរតែកត់ឈ្មោះចូលរួចជ្រើសរើសពាក្យសម្ងាត់ថ្មីមួយ។ ប្រសិនបើមាននរណាម្នាក់ផ្សេងធ្វើការស្នើសុំនេះ \nឬប្រសិនបើអ្នកនឹកឃើញពាក្យសម្ងាត់ដើមរបស់អ្នក ហើយអ្នកមិនប្រាថ្នាផ្លាស់ប្ដូរវាទៀតទេនោះ អ្នកគ្រាន់តែ\nបំភ្លេចអំពីសារមួយនេះ ហើយបន្តប្រើប្រាស់ពាក្យសម្ងាត់ចាស់របស់អ្នកទៅបានហើយ។",
        "passwordreset-emailelement": "អត្តនាម៖ \n$1\n\nពាក្យសម្ងាត់បណ្ដោះអាសន្ន៖ \n$2",
-       "passwordreset-emailsent": "á\9e¢á\9f\8aá\9e¸á\9e\98á\9f\82á\9e\9bá\9e\9fá\9f\92á\9e\8aá\9e¶á\9e\9aá\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9e\98á\9f\92á\9e\84á\9e¶á\9e\8fá\9f\8bá\9e\98á\9e½á\9e\99á\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\94á\9e¶á\9e\93á\9e\95á\9f\92á\9e\89á\9e¾á\9e\91á\9f\85á\9e á\9e¾á\9e\99។",
+       "passwordreset-emailsent": "á\9e\94á\9e¾á\9e\9fá\9e·á\9e\93á\9e\87á\9e¶á\9e\93á\9f\81á\9f\87á\9e¢á\9e¶á\9e\9fá\9e\99á\9e\8aá\9f\92á\9e\8bá\9e¶á\9e\93á\9e¢á\9f\8aá\9e¸á\9e\98á\9f\82á\9e\9bá\9e\8aá\9f\82á\9e\9bá\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\94á\9e¶á\9e\93á\9e\85á\9e»á\9f\87á\9e\88á\9f\92á\9e\98á\9f\84á\9f\87á\9e\9fá\9e\98á\9f\92á\9e\9aá\9e¶á\9e\94á\9f\8bá\9e\82á\9e\8eá\9e\93á\9e¸á\9e\9aá\9e\94á\9e\9fá\9f\8bá\9e¢á\9f\92á\9e\93á\9e\80 á\9e\93á\9f\84á\9f\87á\9e¢á\9f\8aá\9e¸á\9e\98á\9f\82á\9e\9bá\9e\9fá\9e\98á\9f\92á\9e\9aá\9e¶á\9e\94á\9f\8bá\9e\9fá\9f\92á\9e\8aá\9e¶á\9e\9aá\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9e\98á\9f\92á\9e\84á\9e¶á\9e\8fá\9f\8bá\9e\98á\9e½á\9e\99á\9e\93á\9e¹á\9e\84á\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\94á\9e¶á\9e\93á\9e\95á\9f\92á\9e\89á\9e¾á\9e\91á\9f\85។",
        "passwordreset-emailsent-capture": "អ៊ីមែលស្ដារពាក្យសម្ងាត់មួយដូចបង្ហាញខាងក្រោមត្រូវបានផ្ញើទៅហើយ។",
        "passwordreset-emailerror-capture": "អ៊ីមែលស្ដារពាក្យសម្ងាត់មួយដូចបង្ហាញខាងក្រោមត្រូវបានបង្កើតហើយ ប៉ុន្តែការផ្ញើទៅកាន់ {{GENDER:$2|អ្នកប្រើប្រាស់}}មិនបានសំរេចទេ៖ $1",
-       "changeemail": "ផ្លាស់ប្ដូរអាសយដ្ឋានអ៊ីមែល",
-       "changeemail-header": "á\9e\95á\9f\92á\9e\9bá\9e¶á\9e\9fá\9f\8bá\9e\94á\9f\92á\9e\8aá\9e¼á\9e\9aá\9e¢á\9e¶á\9e\9fá\9e\99á\9e\8aá\9f\92á\9e\8bá\9e¶á\9e\93á\9e¢á\9f\8aá\9e¸á\9e\98á\9f\82á\9e\9bá\9e\9fá\9f\86á\9e\9aá\9e¶á\9e\94á\9f\8bá\9e\82á\9e\8eá\9e\93á\9e¸á\9e\93á\9f\81á\9f\87",
+       "changeemail": "á\9e\95á\9f\92á\9e\9bá\9e¶á\9e\9fá\9f\8bá\9e\94á\9f\92á\9e\8aá\9e¼á\9e\9aá\9e¬á\9e\9bá\9e»á\9e\94á\9e¢á\9e¶á\9e\9fá\9e\99á\9e\8aá\9f\92á\9e\8bá\9e¶á\9e\93á\9e¢á\9f\8aá\9e¸á\9e\98á\9f\82á\9e\9b",
+       "changeemail-header": "á\9e\9fá\9e¼á\9e\98á\9e\94á\9f\86á\9e\96á\9f\81á\9e\89á\9e\9fá\9f\86á\9e\8eá\9e»á\9f\86á\9e\94á\9f\82á\9e\94á\9e\94á\9e\91á\9e\93á\9f\81á\9f\87á\9e\8aá\9e¾á\9e\98á\9f\92á\9e\94á\9e¸á\9e\95á\9f\92á\9e\9bá\9e¶á\9e\9fá\9f\8bá\9e\94á\9f\92á\9e\8aá\9e¼á\9e\9aá\9e¢á\9e¶á\9e\9fá\9e\99á\9e\8aá\9f\92á\9e\8bá\9e¶á\9e\93á\9e¢á\9f\8aá\9e¸á\9e\98á\9f\82á\9e\9bá\9f\94 á\9e\94á\9e¾á\9e\9fá\9e·á\9e\93á\9e\87á\9e¶á\9e¢á\9f\92á\9e\93á\9e\80á\9e\85á\9e\84á\9f\8bá\9e\9bá\9e»á\9e\94á\9e\80á\9e¶á\9e\9aá\9e\8fá\9e\97á\9f\92á\9e\87á\9e¶á\9e\94á\9f\8bá\9e¢á\9e¶á\9e\9fá\9e\99á\9e\8aá\9f\92á\9e\8bá\9e¶á\9e\93á\9e¢á\9f\8aá\9e¸á\9e\98á\9f\82á\9e\9bá\9e\96á\9e¸á\9e\82á\9e\8eá\9e\93á\9e¸á\9e\9aá\9e\94á\9e\9fá\9f\8bá\9e¢á\9f\92á\9e\93á\9e\80 á\9e\9fá\9e¼á\9e\98á\9e\8aá\9e¶á\9e\80á\9f\8bá\9e\94á\9f\92á\9e\9aá\9e¡á\9f\84á\9f\87á\9e¢á\9e¶á\9e\9fá\9e\99á\9e\8aá\9f\92á\9e\8bá\9e¶á\9e\93á\9e\90á\9f\92á\9e\98á\9e¸á\9e¢á\9f\84á\9e\99á\9e\93á\9f\85á\9e\91á\9f\86á\9e\93á\9f\81á\9e\9aá\9e\96á\9f\81á\9e\9bá\9e\9fá\9e\98á\9f\92á\9e\9aá\9f\81á\9e\85á\9e\8aá\9e¶á\9e\80á\9f\8bá\9e\9fá\9f\86á\9e\8eá\9e»á\9f\86á\9e\94á\9f\82á\9e\94á\9e\94á\9e\91á\9f\94",
        "changeemail-no-info": "អ្នក​ចាំបាច់​ត្រូវតែ​កត់ឈ្មោះចូល ដើម្បី​ចូលទៅកាន់​ទំព័រ​នេះ​ដោយផ្ទាល់​។",
        "changeemail-oldemail": "អាសយដ្ឋានអ៊ីមែលបច្ចុប្បន្ន៖",
        "changeemail-newemail": "អាសយដ្ឋានអ៊ីមែលថ្មី៖",
        "upload-form-label-infoform-description": "ការ​ពិពណ៌នា",
        "upload-form-label-usage-title": "បម្រើបម្រាស់",
        "upload-form-label-usage-filename": "ឈ្មោះឯកសារ",
+       "foreign-structured-upload-form-label-own-work": "នេះជាការងារផ្ទាល់ខ្លួនរបស់ខ្ញុំ",
+       "foreign-structured-upload-form-label-infoform-categories": "ចំណាត់ថ្នាក់ក្រុម",
+       "foreign-structured-upload-form-label-infoform-date": "កាលបរិច្ឆេទ",
        "backend-fail-notexists": "គ្មានឯកសារ \"$1\" ទេ។",
        "backend-fail-notsame": "ឯកសារដែលមិនដូចគ្នាបេះបិទមួយមានរួចហើយនៅ \"$1\"។",
        "backend-fail-delete": "មិនអាចលុបឯកសារ \"$1\" បានទេ។",
        "cant-move-to-user-page": "អ្នកគ្មានការអនុញ្ញាតអោយប្ដូរទីតាំងទំព័រមួយទៅកាន់ទំព័រអ្នកប្រើប្រាស់មួយទេ (លើកលែងតែទៅកាន់ទំព័ររងមួយ)។",
        "cant-move-category-page": "អ្នកមិនត្រូវបាន​អនុញ្ញាត​ឱ្យ​ប្តូរទីតាំងទំព័រចំណាត់ថ្នាក់ក្រុម​ទេ។",
        "cant-move-to-category-page": "អ្នកគ្មានការអនុញ្ញាតអោយប្ដូរទីតាំងទំព័រមួយទៅកាន់ទំព័រចំណាត់ថ្នាក់ក្រុមមួយទេ។",
-       "newtitle": "á\9e\91á\9f\85á\9e\85á\9f\86á\9e\8eá\9e\84á\9e\87á\9e¾á\9e\84á\9e\90á\9f\92á\9e\98á\9e¸á\9f\96",
+       "newtitle": "ចំណងជើងថ្មី៖",
        "move-watch": "តាមដានទំព័រនេះ",
        "movepagebtn": "ប្ដូរទីតាំង",
        "pagemovedsub": "ប្ដូរទីតាំងដោយជោគជ័យ",
        "tooltip-ca-nstab-main": "មើលទំព័រមាតិកា",
        "tooltip-ca-nstab-user": "មើលទំព័រអ្នកប្រើប្រាស់",
        "tooltip-ca-nstab-media": "មើលទំព័រមេឌា",
-       "tooltip-ca-nstab-special": "á\9e\93á\9f\81á\9f\87á\9e\87á\9e¶á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\96á\9e·á\9e\9fá\9f\81á\9e\9fâ\80\8bá\9f\94 á\9e¢á\9f\92á\9e\93á\9e\80á\9e\98á\9e·á\9e\93á\9e¢á\9e¶á\9e\85á\9e\80á\9f\82á\9e\94á\9f\92á\9e\9aá\9f\82á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\93á\9f\81á\9f\87បានទេ។",
+       "tooltip-ca-nstab-special": "á\9e\93á\9f\81á\9f\87á\9e\87á\9e¶á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\96á\9e·á\9e\9fá\9f\81á\9e\9fâ\80\8bá\9e\8aá\9f\82á\9e\9bá\9e\98á\9e·á\9e\93á\9e¢á\9e¶á\9e\85á\9e\80á\9f\82á\9e\94á\9f\92á\9e\9aá\9f\82បានទេ។",
        "tooltip-ca-nstab-project": "មើលទំព័រគម្រោង",
        "tooltip-ca-nstab-image": "មើលទំព័រ​ឯកសារ",
        "tooltip-ca-nstab-mediawiki": "មើលសាររបស់ប្រព័ន្ធ",
index f809817..6c3687f 100644 (file)
        "createaccountreason": "ಕಾರಣ:",
        "createacct-reason": "ಕಾರಣ",
        "createacct-reason-ph": "ನೀವು ಯಾಕೆ ಇನ್ನು ಒಂದು ಖಾತ ಮಾಡುತ ಇದ್ದೀರಿ ?",
-       "createacct-captcha": "ಸುರಕ್ಷೆ ನಿಗ್ರಹಿಸು.",
-       "createacct-imgcaptcha-ph": "ಮೇಲೆ ಕಾಣುವಂತ ಶಬ್ದಗಳು ಮತ್ತು ಅಂಕಗಳನ್ನು ಬರೆಯಿರಿ.",
        "createacct-submit": "ಖಾತೆಯನ್ನು ಸೃಷ್ಟಿಸಿ",
        "createacct-another-submit": "ಇನ್ನು ಒಂದು ಖಾತ ಮಾಡಿ",
        "createacct-benefit-heading": "{{SITENAME}} ನಿಮ್ಮನ್ತವೆ ಜನರಿಂದ ಮಾಡಿದು",
        "htmlform-selectorother-other": "ಇತರ",
        "htmlform-no": "ಇಲ್ಲ",
        "htmlform-yes": "ಹೌದು",
-       "htmlform-title-not-exists": "[[:$1]] ಅಸ್ತಿತ್ವದಲ್ಲಿಲ್ಲ.",
+       "htmlform-title-not-exists": "$1 ಅಸ್ತಿತ್ವದಲ್ಲಿಲ್ಲ.",
        "logentry-delete-delete": "$1 {{GENDER:$2|ಅಳಿಸಲಾಯಿತು}} ಪುಟ $3",
        "revdelete-restricted": "ನಿರ್ವಾಹಕರಿಗೆ ನಿಬಂಧನೆಗಳನ್ನು ಅನ್ವಯಿಸಲಾಯಿತು",
        "revdelete-unrestricted": "ನಿರ್ವಾಹಕರ ನಿಬಂಧನೆಗಳನ್ನು ತೆಗೆಯಲಾಯಿತು",
index 042f8c6..405a255 100644 (file)
        "htmlform-cloner-required": "적어도 하나의 값이 필요합니다.",
        "htmlform-title-badnamespace": "[[:$1]] 문서는 \"{{ns:$2}}\" 이름공간에 없습니다.",
        "htmlform-title-not-creatable": "\"$1\"은 만들 수 없는 문서 제목입니다.",
-       "htmlform-title-not-exists": "[[:$1]] 문서는 존재하지 않습니다.",
+       "htmlform-title-not-exists": "$1 문서는 존재하지 않습니다.",
        "htmlform-user-not-exists": "<strong>$1</strong> 문서는 존재하지 않습니다.",
        "htmlform-user-not-valid": "<strong>$1</strong>은 올바른 사용자 이름이 아닙니다.",
        "sqlite-has-fts": "$1 (본문 전체 검색 지원)",
index 7fbbd03..5cd1b63 100644 (file)
        "yourdiff": "Ungerscheide",
        "copyrightwarning": "Ding Beijdrähsch schtonn onger de $2, süch $1. Wann De nit han wells, dat Dinge Täx ömjemohdelt weed, un söns wohin verdeilt, dun en heh nit schpeischere. Mem Avspeischere sähs De och zo, dat et vun Dir selvs es, un/udder Do dat Rääch häs, en heh zo verbreide. Wann et nit schtemmp, udder Do kanns et nit nohwiese, kann Desch dat en dr Bau bränge!",
        "copyrightwarning2": "De Beijdrähsch {{GRAMMAR:en|{{SITENAME}}}} künne vun andere Metmaacher ömjemodelt\nudder fottjeschmeße wähde. Wann Der dat nit rääch es, schriiv nix. Et es och nühdesch, dat et vun Der selvs es, oder dat Do dat Rääsch häs, et heh öffentlich wigger ze jävve. Süch $1. Wann et nit schtemmp, oder Do kanns et nit nohwihse, künnt Desch dat en der Bou bränge!",
+       "editpage-cannot-use-custom-model": "Et Ennhalldsmodäll för heh di Sigg km_mer nit veränndere.",
        "longpageerror": "'''Janz schlemme Fähler:'''\nDä Tex, dä De heh jescheck häs, dä es {{PLURAL:$1|ein|$1|kei}} Kilobyte jruuß.\nDat {{PLURAL:$2|es mieh wie ei|sin mieh wie $2|es kei}} Kilobyte. Dat künne mer nit speichere!",
        "readonlywarning": "<strong>Opjepass:<strong>\nDe Daatebank es jesperrt woode, wo Do ald am Ändere wohs.\nDä.\nJetz kanns De Ding Änderunge nit mih faßhallde lohße.\nDun se bei Dir om Rechner faßhalde un versöhg et schpäder noch ens.\n\nNävvebei, dä Datenbank-Köbes hät för et Sperre och ene Jrund aanjejovve: $1",
        "protectedpagewarning": "<strong>Opjepass: Di Sigg heh es jähje Veränderonge jeschöz. Blohß de Wikki-Köbeße künne se änndere.</strong>\nHeh kütt der neuste Enndraach em Logbohch för di Sigg:",
        "showingresultsinrange": "{{PLURAL:$1|<strong>Ein</strong> Saachjropp|<strong>$1</strong> Saachjroppe|Kein Saachjropp}}, vun Nommer <strong>$2</strong> bes Nommer <strong>$3</strong> {{PLURAL:$1|weed|wääde|weed}} heh opjeleß.",
        "search-showingresults": "{{PLURAL:$4|Heh es dä <strong>$1</strong>-te vun <strong>$3</strong> Träffere.|Träffer Nommero <strong>$1 bes $2</strong> vun <strong>$3</strong> Träffer.|Jevonge woodt woodt nix.}}",
        "search-nonefound": "Mer han nix zopaß jefonge för Ding Aanfrohch.",
+       "search-nonefound-thiswiki": "Mer han en heh dä ẞait nix zopaß jefonge för Ding Aanfrohch.",
        "powersearch-legend": "Extra Söhke",
        "powersearch-ns": "Söök en de Apachtemangs:",
        "powersearch-togglelabel": "&nbsp;",
        "rcshowhidemine": "ming eije Änderonge $1",
        "rcshowhidemine-show": "aanzeije",
        "rcshowhidemine-hide": "verschteihsche",
+       "rcshowhidecategorization-show": "Aanzeije!",
+       "rcshowhidecategorization-hide": "Verschteische!",
        "rclinks": "Zeisch de läzde {{int:pipe-separator}}$1{{int:pipe-separator}} Änderonge us de läzde {{int:pipe-separator}}$2{{int:pipe-separator}} Däch, un dun {{int:pipe-separator}} $3.",
        "diff": "Ongerscheid",
        "hist": "Väsjohne",
        "foreign-structured-upload-form-label-own-work": "dat es ming eije Wärk",
        "foreign-structured-upload-form-label-infoform-categories": "Saachjroppe",
        "foreign-structured-upload-form-label-infoform-date": "Dattum",
+       "foreign-structured-upload-form-label-not-own-work-message-local": "Wann De di Dattei nit en de jemeinsamme Sammlong vun Datteule huh lahde kanns un derbei de Rähjelle {{ucfirst:{{GRAMMAR:vun|{{ucfirst:{{SITENAME}}}}}}}} ennhalde, dann maach heh nit wigger, un probehr ene anndere Wähsch.",
        "foreign-structured-upload-form-label-not-own-work-local-local": "Do künnts edd och ens met dä [[Special:Upload|Schtandatt-Sigg zom Huhlahde]] versöhke welle.",
        "foreign-structured-upload-form-label-own-work-message-default": "Esch verschtonn, dadd esch en en jemeinsamme Sammlong huh aam lahde ben un dadd sesch dat met dä Bedengonge un de Lezänzbedengonge heh verdräht.",
        "foreign-structured-upload-form-label-not-own-work-message-default": "Wann De di Dattei nit en de jemeinsamme Sammlong vun Datteule huh lahde kanns un derbei de Rähjelle ennhalde, dann maach heh nit wigger, un probehr ene anndere Wähsch.",
        "rollback-success": "De Änderungen vum $1 zeröckjenumme, un dobei de letzte Version vum $2 widder jehollt.",
        "sessionfailure-title": "Fähler met dä Daate vum Enlogge",
        "sessionfailure": "Et jov wall e täschnesch Problehm met Dingem Login. Dröm ham_mer dat us Vörseesch jäz nix jemaht, domet mer nit velleich Ding Änderong däm verkihrte Metmaacher ongerjubele. Jangk zeröck un versöhk et noch ens.",
+       "changecontentmodel": "Et Modäll vum Ennhald vun ene Sigg verändere",
+       "changecontentmodel-legend": "Et Modäll vum Ennhald",
        "changecontentmodel-title-label": "Dä Sigg ier Övverschreff",
+       "changecontentmodel-model-label": "Et neuje Modäll för der Enhalld",
        "changecontentmodel-reason-label": "Der Jrond:",
+       "changecontentmodel-success-title": "Et Modäll för der Enhalld wohd veränndert",
+       "changecontentmodel-success-text": "Et Modäll för der Enhalld vun dä Sigg „[[:$1]]“ wohd veränndert",
        "logentry-contentmodel-change-revertlink": "retuhr_nämme",
        "logentry-contentmodel-change-revert": "retuhr_nämme",
        "protectlogpage": "Logbohch vum Sigge Schötze",
        "htmlform-cloner-required": "Winnischsdens eine Wääd es nühdesch.",
        "htmlform-title-badnamespace": "[[:$1]] es nit em Appachetmang „{{ns:$2}}“.",
        "htmlform-title-not-creatable": "„$1“ en kein Övverschreff, för di me en Sigg aanlähje künnt",
-       "htmlform-title-not-exists": "[[:$1]] jidd_et nit.",
+       "htmlform-title-not-exists": "$1 jidd_et nit.",
        "htmlform-user-not-exists": "<strong>$1</strong> jidd_et nit.",
        "htmlform-user-not-valid": "<strong>$1</strong> es keine jöltejje Nahme för ene Metmaacher.",
        "sqlite-has-fts": "Version $1 (un kann en janze Täxte söhke)",
index 48526c8..c78b721 100644 (file)
        "htmlform-cloner-delete": "Ewechhuelen",
        "htmlform-cloner-required": "Mindestens ee Wäert ass obligatoresch.",
        "htmlform-title-badnamespace": "[[:$1]] ass net am Nummraum \"{{ns:$2}}\".",
-       "htmlform-title-not-exists": "[[:$1]] gëtt et net.",
+       "htmlform-title-not-exists": "$1 gëtt et net.",
        "htmlform-user-not-exists": "<strong>$1</strong> gëtt et net.",
        "htmlform-user-not-valid": "<strong>$1</strong> ass kee valabele Benotzernumm.",
        "sqlite-has-fts": "$1 ënnerstëtzt d'Volltextsich",
index a64e379..e66b3f6 100644 (file)
        "htmlform-cloner-required": "Bent viena reikšmė būtina.",
        "htmlform-title-badnamespace": "[[:$1]] nėra \"{{ns:$2}}\" vardų srityje.",
        "htmlform-title-not-creatable": "\"$1\" nėra tinkamas sukūrimui puslapio pavadinimas",
-       "htmlform-title-not-exists": "[[:$1]] neegzistuoja.",
+       "htmlform-title-not-exists": "$1 neegzistuoja.",
        "htmlform-user-not-exists": "<strong>$1</strong> neegzistuoja.",
        "htmlform-user-not-valid": "<strong>$1</strong> nėra tinkamas naudotojo vardas.",
        "sqlite-has-fts": "$1 su visatekstės paieškos palaikymu",
index d1e3010..623ab53 100644 (file)
        "nstab-template": "模",
        "nstab-help": "助",
        "nstab-category": "類",
+       "mainpage-nstab": "卷首",
        "nosuchaction": "無可為",
        "nosuchactiontext": "此址也無",
        "nosuchspecialpage": "無此特查",
        "createaccountreason": "因:",
        "createacct-reason": "因:",
        "createacct-reason-ph": "汝另立一簿者何哉?",
-       "createacct-captcha": "安檢",
-       "createacct-imgcaptcha-ph": "輸上方文字",
        "createacct-submit": "增簿",
        "createacct-another-submit": "復立一簿",
        "createacct-benefit-heading": "吾等立{{SITENAME}}者,或黔首,或專戶。",
index 4dd3759..b0bdfa1 100644 (file)
        "htmlform-cloner-required": "Се бара барем една вредност.",
        "htmlform-title-badnamespace": "[[:$1]] не се наоѓа во именскиот простор „{{ns:$2}}“.",
        "htmlform-title-not-creatable": "Насловот „$1“ не може да се создава",
-       "htmlform-title-not-exists": "[[:$1]] не постои.",
+       "htmlform-title-not-exists": "$1 не постои.",
        "htmlform-user-not-exists": "<strong>$1</strong> не постои.",
        "htmlform-user-not-valid": "<strong>$1</strong> не претставува важечко корисничко име.",
        "sqlite-has-fts": "$1 со поддршка за пребарување по цели текстови",
index dfdcc75..e39477f 100644 (file)
        "showingresultsinrange": "#<strong>$2</strong> മുതൽ #<strong>$3</strong> വരെയുള്ള പരിധിയിലെ {{PLURAL:$1|<strong>ഒരു</strong> ഫലം|<strong>$1</strong> ഫലങ്ങൾ}} താഴെ പ്രദർശിപിക്കുന്നു.",
        "search-showingresults": "{{PLURAL:$4|<strong>$3</strong> ഫലത്തിൽ<strong>$1</strong>|<strong>$3</strong> ഫലത്തിൽ <strong>$1 മുതൽ $2</strong> വരെയുള്ളവ}}",
        "search-nonefound": "താങ്കൾ തിരഞ്ഞ പദത്തിനു യോജിച്ച ഫലങ്ങളൊന്നും ലഭിച്ചില്ല.",
+       "search-nonefound-thiswiki": "ഈ അന്വേഷണത്തിനു യോജിച്ച ഫലങ്ങളൊന്നും ഈ സൈറ്റിൽ നിന്നും ലഭിച്ചില്ല.",
        "powersearch-legend": "വിപുലീകൃത തിരച്ചിൽ",
        "powersearch-ns": "തിരയേണ്ട നാമമേഖലകൾ",
        "powersearch-togglelabel": "അടയാളപ്പെടുത്തുക:",
        "htmlform-cloner-required": "കുറഞ്ഞത് ഒരു വിലയെങ്കിലും നൽകിയിരിക്കണം.",
        "htmlform-title-badnamespace": "[[:$1]] ഉള്ളത് \"{{ns:$2}}\" നാമമേഖലയിലല്ല.",
        "htmlform-title-not-creatable": "\"$1\" സൃഷ്ടിക്കാനാവുന്ന തലക്കെട്ടല്ല.",
-       "htmlform-title-not-exists": "[[:$1]] നിലവിലില്ല.",
+       "htmlform-title-not-exists": "$1 നിലവിലില്ല.",
        "htmlform-user-not-exists": "<strong>$1</strong> നിലവിലില്ല.",
        "htmlform-user-not-valid": "<strong>$1</strong> സാധുതയുള്ള ഉപയോക്തൃനാമമല്ല.",
        "sqlite-has-fts": "പൂർണ്ണ-എഴുത്ത് തിരച്ചിൽ പിന്തുണയുള്ള $1",
        "logentry-newusers-byemail": "$3 എന്ന ഉപയോക്തൃ അംഗത്വം $1 {{GENDER:$2|സൃഷ്ടിച്ചിരിക്കുന്നു}}, രഹസ്യവാക്ക് ഇമെയിൽ വഴി അയച്ചു",
        "logentry-newusers-autocreate": "$1 എന്ന ഉപയോക്തൃ അംഗത്വം സ്വയം {{GENDER:$2|സൃഷ്ടിക്കപ്പെട്ടിരിക്കുന്നു}}",
        "logentry-protect-move_prot": "സംരക്ഷണ സജ്ജീകരണങ്ങൾ $4  എന്നതിൽ നിന്ന് $3 എന്നതിലേക്ക് $1 {{GENDER:$2|മാറ്റി}}",
+       "logentry-protect-unprotect": "$3 താളിലെ സംരക്ഷണം $1 {{GENDER:$2|നീക്കി}}",
+       "logentry-protect-protect": "$3 താൾ $1 {{GENDER:$2|സംരക്ഷിച്ചു}} $4",
+       "logentry-protect-protect-cascade": "$3 താൾ $1 {{GENDER:$2|സംരക്ഷിച്ചു}} $4 [നിർഝരിതം]",
        "logentry-rights-rights": "$3 എന്ന ഉപയോക്താവിന്റെ സംഘ അംഗത്വം, $4 എന്നതിൽ നിന്നു $5 എന്നതിലേക്ക്, $1 {{GENDER:$2|മാറ്റിയിരിക്കുന്നു}}",
        "logentry-rights-rights-legacy": "$3 എന്ന ഉപയോക്താവിന്റെ സംഘ അംഗത്വം $1 {{GENDER:$2|മാറ്റിയിരിക്കുന്നു}}",
        "logentry-rights-autopromote": "$1 എന്ന ഉപയോക്താവ് $4 എന്നതിൽ നിന്നും $5 എന്നതിലേയ്ക്ക് സ്വയമേവ {{GENDER:$2|ഉയർത്തപ്പെട്ടിരിക്കുന്നു}}",
index e5f6352..55c298b 100644 (file)
        "site-atom-feed": "$1 ऍटम रसद (Atom Feed)",
        "page-rss-feed": "\"$1\" आर.एस.एस.रसद (RSS Feed)",
        "page-atom-feed": "\"$1\" ऍटम रसद (Atom Feed)",
-       "feed-atom": "ॲटम",
+       "feed-atom": "à¤\85à¥\85टम",
        "feed-rss": "आर.एस.एस.",
        "red-link-title": "$1 (पान अस्तित्वात नाही)",
        "sort-descending": "उतरत्या क्रमाने लावा",
        "resettokens-no-tokens": "पुनर्स्थापित करण्यासाठी कोणतीही ओळखचिन्हे नाहीत.",
        "resettokens-tokens": "ओळखचिन्हे:",
        "resettokens-token-label": "$1 (सद्य मुल्य: $2)",
-       "resettokens-watchlist-token": "[[Special:Watchlist|à¤\86पलà¥\8dया à¤¨à¤¿à¤°à¥\80à¤\95à¥\8dषणसà¥\82à¤\9aà¥\80तà¥\80ल à¤ªà¤¾à¤¨à¤¾à¤\82मधà¥\80ल à¤¬à¤¦à¤²à¤¾à¤\9aा]] à¤µà¥\87ब à¤°à¤¸à¤¦ à¤¬à¤¿à¤²à¥\8dला (ॲटम/आरएसएस)",
+       "resettokens-watchlist-token": "[[Special:Watchlist|à¤\86पलà¥\8dया à¤¨à¤¿à¤°à¥\80à¤\95à¥\8dषणसà¥\82à¤\9aà¥\80तà¥\80ल à¤ªà¤¾à¤¨à¤¾à¤\82मधà¥\80ल à¤¬à¤¦à¤²à¤¾à¤\9aा]] à¤µà¥\87ब à¤°à¤¸à¤¦ à¤¬à¤¿à¤²à¥\8dला (à¤\85à¥\85टम/आरएसएस)",
        "resettokens-done": "ओळखचिन्हे पुनर्स्थापन.",
        "resettokens-resetbutton": "निवडलेली ओळखचिन्हे पुनर्स्थापित करा",
        "bold_sample": "ठळक मजकूर",
        "accmailtitle": "परवलीचा शब्द पाठविण्यात आलेला आहे.",
        "accmailtext": "[[User talk:$1|$1]] यांसाठी अनियतक्रमाने निर्मित केलेला परवलीचा शब्द $2 यांना पाठवण्यात आला आहे.\n\nया नवीन खात्यासाठीचा परवलीचा शब्द,सनोंद-प्रवेश घेतल्यावर [[Special:ChangePassword|परवलीचा शब्द बदला]] येथे बदलता येईल.",
        "newarticle": "(नवीन लेख)",
-       "newarticletext": "à¤\86पण à¤¸à¤§à¥\8dया à¤\85सà¥\8dतितà¥\8dवात à¤¨à¤¸à¤²à¥\87लà¥\8dया à¤ªà¤¾à¤¨à¤¾à¤\9aà¥\8dया à¤¦à¥\81वà¥\8dयाà¤\9aा à¤®à¤¾à¤\97à¥\8bवा à¤\98à¥\87त à¤\86ला à¤\86हात.\nहà¥\87 à¤ªà¤¾à¤¨ à¤¤à¤¯à¤¾à¤° à¤\95रणà¥\8dयासाठà¥\80,खालील पेटीत टंकन करणे सुरु करा(अधिक माहितीसाठी [$1 साहाय्य पान] बघा).\n\nजर आपण येथे चुकून आला असाल तर ब्राउझरच्या  <strong>परत</strong>(बॅक) कळीवर टिचकी द्या.",
+       "newarticletext": "à¤\86पण à¤¸à¤§à¥\8dया à¤\85सà¥\8dतितà¥\8dतà¥\8dवात à¤¨à¤¸à¤²à¥\87लà¥\8dया à¤ªà¤¾à¤¨à¤¾à¤\9aà¥\8dया à¤¦à¥\81वà¥\8dयाà¤\9aा à¤®à¤¾à¤\97à¥\8bवा à¤\98à¥\87त à¤\86ला à¤\86हात.\nहà¥\87 à¤ªà¤¾à¤¨ à¤¨à¤µà¥\8dयानà¥\87 à¤¤à¤¯à¤¾à¤° à¤\95रणà¥\8dयासाठà¥\80 खालील पेटीत टंकन करणे सुरु करा(अधिक माहितीसाठी [$1 साहाय्य पान] बघा).\n\nजर आपण येथे चुकून आला असाल तर ब्राउझरच्या  <strong>परत</strong>(बॅक) कळीवर टिचकी द्या.",
        "anontalkpagetext": "---- ''हे चर्चापान अशा अज्ञात सदस्यासाठी आहे, ज्यांनी खाते तयार केलेले नाही किंवा त्याचा वापर करत नाहीत. त्यांच्या ओळखीसाठी आम्ही आंतरजाल अंकपत्ता वापरतो आहोत. असा अंकपत्ता बऱ्याच लोकांचा एकच असू शकतो. जर आपण अज्ञात सदस्य असाल आणि आपल्याला काही अप्रासंगिक संदेश मिळाला असेल तर कृपया [[Special:UserLogin| खाते तयार करा]] किंवा [[Special:UserLogin/signup|सनोंद-प्रवेश करा]] ज्यामुळे, पुढे असे गैरसमज होणार नाहीत.''",
        "noarticletext": "या लेखात सध्या काहीही मजकूर नाही.\nतुम्ही विकिपीडियावरील इतर लेखांमध्ये या [[Special:Search/{{PAGENAME}}| मथळ्याचा शोध घेऊ शकता]], <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} इतर नोंदी शोधा],\nकिंवा हा लेख [{{fullurl:{{FULLPAGENAME}}|action=edit}} लिहू शकता]</span>.",
        "noarticletext-nopermission": "सध्या या लेखात  काहीही मजकूर नाही.\nतुम्ही विकिपीडियावरील इतर लेखांमध्ये [[Special:Search/{{PAGENAME}}| या मथळ्याचा शोध घेऊ शकता]], <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAME}}}}आपण या लेखाच्या इतर नोंदी शोधा]</span>,परंतु, आपणास हा लेख लिहीण्याची परवानगी देण्यात येउ शकत नाही.",
        "showingresultsinrange": "खाली #<strong>$2</strong> ते #<strong>$3</strong> पर्यंतच्या कक्षेतील {{PLURAL:$1|<strong>१</strong> निकाल दाखविला आहे|<strong>$1</strong> निकाल दाखविले आहेत}}.",
        "search-showingresults": "{{PLURAL:$4|Result <strong>$1</strong> of <strong>$3</strong>|निकाल <strong>$3</strong> चे<strong>$1 - $2</strong>}}",
        "search-nonefound": "दिलेल्या पृच्छेशी जुळणारे निकाल नाहीत.",
+       "search-nonefound-thiswiki": "या संकेतस्थळावर,दिलेल्या पृच्छेशी जुळणारे निकाल मिळाले नाही.",
        "powersearch-legend": "प्रगत शोध",
        "powersearch-ns": "नामविश्वांमध्ये शोधा:",
        "powersearch-togglelabel": "तपासा:",
        "htmlform-cloner-create": "अधिक जोडा",
        "htmlform-cloner-delete": "हटवा",
        "htmlform-cloner-required": "किमान एक किंमत हवी",
-       "htmlform-title-not-exists": "[[:$1]] अस्तीत्वात नाही.",
+       "htmlform-title-not-exists": "$1 अस्तीत्वात नाही.",
        "htmlform-user-not-exists": "<strong>$1</strong> अस्तीत्वात नाही.",
        "htmlform-user-not-valid": "<strong>$1</strong> हे वैध सदस्यनाम नाही.",
        "sqlite-has-fts": "पूर्ण-मजकूर शोध समर्थनासहित $1",
        "logentry-rights-rights-legacy": "$1 ने $3 साठी गट सदस्यता {{GENDER:$2|बदलली}}",
        "logentry-rights-autopromote": "$1 ला स्वयंचलितरित्या $4 वरुन $5 ला {{GENDER:$2|बढती दिल्या गेली}}",
        "logentry-upload-upload": "$1 {{GENDER:$2|अपभारीत केली}} $3",
+       "logentry-upload-overwrite": "$1 ने  $3 ची एक नविन आवृत्ती {{GENDER:$2|अपभारीत केली}}",
+       "log-name-tag": "खूणपताका नोंदी",
        "rightsnone": "(काहीही नाही)",
        "revdelete-summary": "संपादन माहिती",
        "feedback-adding": "आपला पश्चप्रदाय (फिडबॅक)  जोडत आहोत या पानास.......",
index 8847169..05fb355 100644 (file)
@@ -27,6 +27,7 @@
        "tog-hideminor": "Sembunyikan suntingan kecil daripada perubahan terkini",
        "tog-hidepatrolled": "Sembunyikan suntingan yang telah dironda daripada perubahan terkini",
        "tog-newpageshidepatrolled": "Sorokkan laman yang telah dironda daripada senarai laman baru",
+       "tog-hidecategorization": "Sorokkan pengkategorian laman",
        "tog-extendwatchlist": "Kembangkan senarai pantau untuk memaparkan semua perubahan, bukan hanya yang terkini",
        "tog-usenewrc": "Kumpulkan perubahan mengikut laman dalam perubahan terkini dan senarai pantau",
        "tog-numberheadings": "Nomborkan tajuk secara automatik",
@@ -56,6 +57,7 @@
        "tog-watchlisthideliu": "Sembunyikan suntingan oleh pengguna yang telah log masuk daripada senarai pantau",
        "tog-watchlisthideanons": "Sembunyikan suntingan oleh pengguna tanpa nama daripada senarai pantau",
        "tog-watchlisthidepatrolled": "Sembunyikan suntingan yang telah dironda daripada senarai pantau",
+       "tog-watchlisthidecategorization": "Sorokkan pengkategorian laman",
        "tog-ccmeonemails": "Kirimkan saya salinan e-mel yang saya hantar kepada pengguna lain",
        "tog-diffonly": "Jangan tunjukkan kandungan laman di bawah perbezaan",
        "tog-showhiddencats": "Tunjukkan kategori tersembunyi",
        "nstab-template": "Templat",
        "nstab-help": "Laman bantuan",
        "nstab-category": "Kategori",
+       "mainpage-nstab": "Laman utama",
        "nosuchaction": "Tindakan tidak dikenali",
        "nosuchactiontext": "Tindakan yang dinyatakan dalam URL ini tidak sah. Anda mungkin telah menaip URL yang salah atau mengikuti pautan yang tidak sah. Ini juga mungkin bererti terdapat pepijat dalam perisian yang digunakan oleh {{SITENAME}}.",
        "nosuchspecialpage": "Laman khas tidak wujud",
        "viewsource": "Lihat sumber",
        "viewsource-title": "Lihat sumber bagi $1",
        "actionthrottled": "Tindakan didikitkan",
-       "actionthrottledtext": "Untuk mencegah spam, anda dihadkan daripada melakukan tindakan ini berulang kali dalam ruang waktu yang singkat, dan anda telah melebihi had tersebut. Sila cuba lagi selepas beberapa minit.",
+       "actionthrottledtext": "Untuk mencegah penyalahgunaan, anda dihadkan daripada melakukan tindakan ini berulang kali dalam ruang waktu yang singkat, dan anda telah melebihi had tersebut. Sila cuba lagi selepas beberapa minit.",
        "protectedpagetext": "Laman ini telah dikunci untuk melarang penyuntingan atau sebarang tindakan yang lain.",
-       "viewsourcetext": "Anda boleh melihat dan menyalin sumber bagi laman ini:",
-       "viewyourtext": "Anda boleh melihat dan menyalin sumber '''suntingan anda''' kepada laman ini:",
+       "viewsourcetext": "Anda boleh melihat dan menyalin sumber bagi laman ini.",
+       "viewyourtext": "Anda boleh melihat dan menyalin sumber <strong>suntingan anda</strong> pada laman ini.",
        "protectedinterface": "Laman ini menyediakan teks antara muka bagi perisian ini, akan tetapi dikunci untuk menghalang penyalahgunaan.\nUntuk menambah atau menyunting terjemahan untuk semua wiki, sila gunakan projek penyetempatan MediaWiki, [//translatewiki.net/ translatewiki.net].",
        "editinginterface": "<strong>Amaran:</strong> Anda sedang menyunting halaman yang digunakan untuk menyediakan teks antaramuka untuk perisian berkenaan.\nSebarang suntingan ke atas halaman ini akan memberikan kesan kepada penampilan antaramuka pengguna bagi pengguna-pengguna lain wiki ini.",
        "translateinterface": "Untuk menambah atau menyunting terjemahan untuk kesemua wiki, sila gunakan [//translatewiki.net/ translatewiki.net], iaitu projek penyetempatan MediaWiki.",
-       "cascadeprotected": "Laman ini telah dilindungi daripada penyuntingan oleh pengguna selain penyelia, kerana ia termasuk dalam {{PLURAL:$1|laman|laman-laman}} berikut, yang dilindungi dengan secara \"melata\": $2",
+       "cascadeprotected": "Laman ini telah dilindungi daripada disunting kerana ia termasuk dalam {{PLURAL:$1|laman|laman-laman}} berikut, yang dilindungi dengan opsyen \"melata\" dipasang:\n$2",
        "namespaceprotected": "Anda tidak mempunyai keizinan untuk menyunting laman dalam ruang nama '''$1'''.",
        "customcssprotected": "Anda tidak dibenarkan menyunting laman JavaScript ini kerana ia mengandungi tetapan peribadi pengguna lain.",
        "customjsprotected": "Anda tidak dibenarkan menyunting laman JavaScript ini kerana ia mengandungi tetapan peribadi pengguna lain.",
        "createaccountreason": "Sebab:",
        "createacct-reason": "Sebab",
        "createacct-reason-ph": "Mengapa anda membuka satu lagi akaun",
-       "createacct-captcha": "Pemeriksaan sekuriti",
-       "createacct-imgcaptcha-ph": "Isikan teks yang anda lihat di atas",
        "createacct-submit": "Wujudkan akaun anda",
-       "createacct-another-submit": "Buka akaun baru",
+       "createacct-another-submit": "Buka akaun",
        "createacct-benefit-heading": "{{SITENAME}} dijayakan oleh orang ramai seperti anda.",
        "createacct-benefit-body1": "{{PLURAL:$1|suntingan}}",
        "createacct-benefit-body2": "{{PLURAL:$1|halaman}}",
        "createacct-benefit-body3": "{{PLURAL:$1|penyumbang}} terkini",
        "badretype": "Sila ulangi kata laluan dengan betul.",
+       "usernameinprogress": "Pembukaan akaun untuk nama pengguna ini sudah sedang dijalankan. Sila tunggu.",
        "userexists": "Nama pengguna yang diisikan telah pun digunakan.\nSila pilih nama yang lain.",
        "loginerror": "Ralat log masuk",
        "createacct-error": "Ralat pembukaan akaun",
        "passwordreset-emailtext-ip": "Seseorang (mungkin anda, dari alamat IP $1) telah memohon supaya kata laluan diset semula untuk {{SITENAME}} anda ($4). {{PLURAL:$3|Akaun|Akaun-akaun}} pengguna yang berikut\ndikaitkan dengan alamat e-mel ini:\n\n$2\n\n{{PLURAL:$3|Kata|Kata-kata}} laluan sementara ini akan luput dalam masa $5 hari. Anda harus log masuk dan membuat kata laluan yang baru sekarang. Jika permohonan ini dibuat oleh orang lain, atau jika anda teringat kembali kata laluan asal anda dan anda tidak lagi berhasrat untuk mengubahnya, anda boleh mengabaikan pesanan ini dan terus menggunakan kata laluan lama anda.",
        "passwordreset-emailtext-user": "Pengguna $1 telah memohon supaya kata laluan diset semula untuk {{SITENAME}} anda ($4). {{PLURAL:$3|Akaun|Akaun-akaun}} pengguna yang berikut\ndikaitkan dengan alamat e-mel ini:\n\n$2\n\n{{PLURAL:$3|Kata|Kata-kata}} laluan sementara ini akan luput dalam masa $5 hari. Anda harus log masuk dan membuat kata laluan yang baru sekarang. Jika permohonan ini dibuat oleh orang lain, atau jika anda teringat kembali kata laluan asal anda dan anda tidak lagi berhasrat untuk mengubahnya, anda boleh mengabaikan pesanan ini dan terus menggunakan kata laluan lama anda.",
        "passwordreset-emailelement": "Nama pengguna: \n$1\n\nKata laluan sementara: \n$2",
-       "passwordreset-emailsent": "E-mel set semula kata laluan telah dihantar.",
+       "passwordreset-emailsent": "Jika ini ialah alamat e-mel yang terdaftar untuk akaun anda, maka e-mel set semula kata laluan akan dihantar.",
        "passwordreset-emailsent-capture": "E-mel set semula kata laluan telah dihantar, seperti yang dipaparkan di bawah.",
        "passwordreset-emailerror-capture": "E-mel set semula kata laluan telah dihasilkan, seperti yang dipaparkan di bawah, tetapi tidak berjaya dihantar kepada {{GENDER:$2|pengguna}} berkenaan: $1",
-       "changeemail": "Tukar alamat e-mel",
-       "changeemail-header": "Tukar alamat e-mel akaun",
+       "changeemail": "Tukar atau padamkan alamat e-mel",
+       "changeemail-header": "Lengkapkan borang ini untuk menukar alamat e-mel anda. Jika anda ingin memutuskan sebarang hubungan alamat e-mel daripada akaun anda, biarkan ruangan alamat e-mel kosong ketika menghantar borang.",
+       "changeemail-passwordrequired": "Anda akan dikehendaki memasukkan kata laluan untuk mengesahkan perubahan ini.",
        "changeemail-no-info": "Anda hendaklah log masuk terlebih dahulu untuk mencapai laman ini secara terus.",
        "changeemail-oldemail": "Alamat e-mel sekarang:",
        "changeemail-newemail": "Alamat e-mel baru:",
+       "changeemail-newemail-help": "Ruangan ini harus dibiarkan kosong jika anda mahu menggugurkan alamat e-mel anda. Anda tidak akan dapat mengeset semula kata laluan yang terlupa, bahkan tidak akan menerima e-mel daripada wiki ini jika alamat e-mel itu dipadamkan.",
        "changeemail-none": "(tiada)",
        "changeemail-password": "Kata laluan anda di {{SITENAME}}:",
        "changeemail-submit": "Tukar E-mel",
        "changeemail-throttled": "Anda telah melakukan terlalu banyak cubaan log masuk.\nSila tunggu $1 dan cuba lagi.",
+       "changeemail-nochange": "Sila taipkan alamat e-mel baru yang lain.",
        "resettokens": "Set semula token",
        "resettokens-text": "Anda boleh mengeset semula token yang membolehkan akses kepada data peribadi tertentu yang berkaitan dengan akaun anda di sini.\n\nAnda harus melakukannya jika anda tanpa sengaja mengongsinya dengan sesiapa ataupun akaun anda telah dikompromi.",
        "resettokens-no-tokens": "Tiada token untuk diset semula.",
        "sig_tip": "Tandatangan dengan cap waktu",
        "hr_tip": "Garis melintang (gunakan dengan hemat)",
        "summary": "Ringkasan:",
-       "subject": "Tajuk:",
+       "subject": "Perkara:",
        "minoredit": "Ini adalah suntingan kecil",
        "watchthis": "Pantau laman ini",
        "savearticle": "Simpan",
        "missingsummary": "'''Peringatan:''' Anda tidak menyatakan ringkasan suntingan. Klik '''Simpan''' sekali lagi untuk menyimpan suntingan ini tanpa ringkasan.",
        "selfredirect": "<strong>Amaran:</strong> Anda sedang melencongkan laman ini kepada dirinya sendiri.\nMungkin anda telah menyatakan sasaran yang salah untuk lencongan ini ataupun sedang tersalah menyunting halaman.\nJika anda mengklik \"{{int:savearticle}}\" semula, maka lencongan tetap akan dihasilkan.",
        "missingcommenttext": "Sila masukkan komen dalam ruangan di bawah.",
-       "missingcommentheader": "'''Peringatan:''' Anda tidak menyatakan tajuk bagi komen ini. Klik '''{{int:savearticle}}''' sekali lagi untuk menyimpan suntingan ini tanpa tajuk.",
+       "missingcommentheader": "<strong>Peringatan:</strong> Anda belum menyatakan tajuk perkara bagi komen ini.\nJika anda klik '''{{int:savearticle}}''' sekali lagi, suntingan anda akan tersimpan tanpa tajuk.",
        "summary-preview": "Pralihat ringkasan:",
-       "subject-preview": "Pralihat tajuk:",
+       "subject-preview": "Pralihat perkara:",
        "previewerrortext": "Ralat berlaku ketika cuba mempratayangkan hasil suntingan anda.",
        "blockedtitle": "Pengguna disekat",
        "blockedtext": "<strong>Nama pengguna atau alamat IP anda telah disekat.</strong>\n\nSekatan ini dilakukan oleh $1.\nSebab yang telah diberikan ialah <em>$2</em>.\n\n* Sekatan mula: $8\n* Sekatan tamat: $6\n* Pengguna sasaran: $7\n\nAnda boleh hubungi $1 atau [[{{MediaWiki:Grouppage-sysop}}|penyelia]] yang lain untuk membincangkan sekatan ini.\n\nSila ambil perhatian bahawa anda tidak boleh menggunakan ciri \"kirim e-mel kepada pengguna ini\" kecuali sekiranya anda telah menetapkan alamat e-mel yang sah dalam [[Special:Preferences|keutamaan pengguna]] anda dan anda tidak disekat daripada menggunakannya.\n\nAlamat IP semasa anda ialah $3, dan ID sekatan ialah #$5.\nSila sertakan maklumat-maklumat di atas dalam sebarang pertanyaan yang anda membuat.",
        "yourdiff": "Perbezaan",
        "copyrightwarning": "Sila ambil perhatian bahawa semua sumbangan kepada {{SITENAME}} akan dikeluarkan di bawah $2 (lihat $1 untuk butiran lanjut). Jika anda tidak mahu tulisan anda disunting sewenang-wenangnya oleh orang lain dan diedarkan secara bebas, maka jangan kirim di sini.<br />\nAnda juga berjanji bahawa ini adalah hasil kerja tangan anda sendiri, atau disalin daripada domain awam atau mana-mana sumber bebas lain.\n'''JANGAN KIRIM KARYA HAK CIPTA ORANG LAIN TANPA KEBENARAN!'''",
        "copyrightwarning2": "Sila ambil perhatian bahawa semua sumbangan terhadap {{SITENAME}} boleh disunting, diubah, atau dipadam oleh penyumbang lain. Jika anda tidak mahu tulisan anda disunting sewenang-wenangnya, maka jangan kirim di sini.<br />\nAnda juga berjanji bahawa ini adalah hasil kerja tangan anda sendiri, atau\ndisalin daripada domain awam atau mana-mana sumber bebas lain (lihat $1 untuk butiran lanjut).\n'''JANGAN KIRIM KARYA HAK CIPTA ORANG LAIN TANPA KEBENARAN!'''",
+       "editpage-cannot-use-custom-model": "Model kandungan laman ini tidak boleh diubah.",
        "longpageerror": "'''Ralat: Teks yang anda serahkan itu panjangnya {{PLURAL:$1|1|$1}} kilobait, iaitu lebih panjang daripada had maksimum {{PLURAL:$2|1|$2}} kilobait.'''\nOleh itu, ia tidak boleh disimpan.",
        "readonlywarning": "'''Amaran: Pangkalan data ini dikunci untuk tujuan penyelenggaraan , maka anda tidak akan dapat menyimpan suntingan anda buat sekarang.'''\nAnda boleh menyalin tampal teks anda pada fail teks dan menyimpannya untuk lain kali.\n\nPenyelia yang menguncinya memberikan penjelasan ini: $1",
        "protectedpagewarning": "'''Amaran: Laman ini telah dikunci supaya hanya mereka yang mempunyai keistimewaan penyelia boleh menyuntingnya.'''\nMasukan log terakhir ditunjukkan di bawah untuk rujukan:",
        "semiprotectedpagewarning": "'''Nota:''' Laman ini telah dikunci agar hanya pengguna berdaftar sahaja boleh menyuntingnya.\nMasukan log terakhir ditunjukkan di bawah untuk rujukan:",
-       "cascadeprotectedwarning": "'''Amaran:''' Laman ini telah dikunci, oleh itu hanya penyelia boleh menyuntingnya. Ini kerana ia termasuk dalam {{PLURAL:$1|laman|laman-laman}} berikut yang dilindungi secara melata:",
+       "cascadeprotectedwarning": "<strong>Amaran:</strong> Laman ini telah dikunci supaya hanya pengguna bertaraf penyelia boleh menyuntingnya kerana ia termasuk dalam {{PLURAL:$1|laman|laman-laman}} berikut yang dilindungi secara melata:",
        "titleprotectedwarning": "'''Amaran: Laman ini telah dikunci hingga [[Special:ListGroupRights|hak-hak tertentu]] diperlukan untuk menciptanya.'''\nMasukan log terakhir ditunjukkan di bawah untuk rujukan:",
        "templatesused": "{{PLURAL:$1|Templat|Templat}} yang digunakan dalam laman ini:",
        "templatesusedpreview": "{{PLURAL:$1|Templat|Templat}} yang digunakan dalam pralihat ini:",
        "permissionserrors": "Ralat kebenaran",
        "permissionserrorstext": "Anda tidak mempunyai keizinan untuk berbuat demikian atas {{PLURAL:$1|sebab|sebab-sebab}} berikut:",
        "permissionserrorstext-withaction": "Anda tidak mempunyai keizinan untuk $2, atas {{PLURAL:$1|sebab|sebab-sebab}} berikut:",
+       "contentmodelediterror": "Anda tidak boleh menyunting semakan ini kerana model kandungannya ialah <code>$1</code> padahal model kandungan semasa laman ini ialah <code>$2</code>.",
        "recreate-moveddeleted-warn": "'''Amaran: Anda sedang mencipta semula sebuah laman yang pernah dihapuskan.'''\n\nAnda harus mempertimbangkan perlunya menyunting laman ini.\nUntuk rujukan, yang berikut ialah log penghapusan bagi laman ini:",
        "moveddeleted-notice": "Laman ini telah dihapuskan.\nLog penghapusan bagi laman ini dilampirkan di bawah untuk rujukan.",
+       "moveddeleted-notice-recent": "Maaf, laman ini baru-baru sahaja dihapuskan (dalam 24 jam yang lepas).\nLog penghapusan dan pemindahan untuk laman ini dinyatakan di bawah sebagai rujukan.",
        "log-fulllog": "Lihat log lengkap",
        "edit-hook-aborted": "Suntingan anda telah dibatalkan oleh penyangkuk. Tiada sebab diberikan.",
        "edit-gone-missing": "Laman tersebut telah dihapuskan dan tidak dapat dikemaskinikan.",
        "content-model-css": "CSS",
        "content-json-empty-object": "Objek kosong",
        "content-json-empty-array": "Tatasusunan kosong",
+       "duplicate-args-warning": "<strong>Amaran:</strong> [[:$1]] sedang memanggil [[:$2]] dengan lebih daripada satu nilai untuk parameter \"$3\". Hanya nilai terakhir yang diberikan akan digunakan.",
        "duplicate-args-category": "Laman yang menggunakan argumen pendua dalam panggilan templat",
        "duplicate-args-category-desc": "Laman ini mengandungi panggilan templat yang menggunakan pendua argumen seperti <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> atau <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "Amaran: Laman ini mengandungi terlalu banyak panggilan fungsi penghurai yang intensif.\n\nHad panggilan ialah $2, sekarang terdapat $1 panggilan.",
        "search-category": "(kategori $1)",
        "search-file-match": "(sepadan dengan kandungan fail)",
        "search-suggest": "Maksud anda, $1?",
+       "search-rewritten": "Memaparkan hasil untuk $1. Cari $2 pula.",
        "search-interwiki-caption": "Projek-projek lain",
        "search-interwiki-default": "Hasil dari $1:",
        "search-interwiki-more": "(lagi)",
        "showingresultsinrange": "Yang berikut adalah {{PLURAL:$1|<strong>satu</strong> hasil|sebanyak <strong>$1</strong> hasil}} dalam julat #<strong>$2</strong> hingga #<strong>$3</strong>.",
        "search-showingresults": "{{PLURAL:$4|Hasil <strong>$1</strong> / <strong>$3</strong>|Hasil <strong>$1 - $2</strong> / <strong>$3</strong>}}",
        "search-nonefound": "Tiada hasil yang sepadan dengan pertanyaan.",
+       "search-nonefound-thiswiki": "Tiada hasil yang sepadan dengan pertanyaan di tapak ini.",
        "powersearch-legend": "Carian lanjutan",
        "powersearch-ns": "Cari dalam ruang nama:",
        "powersearch-togglelabel": "Pilih:",
        "prefs-watchlist-token": "Token senarai pantau:",
        "prefs-misc": "Pelbagai",
        "prefs-resetpass": "Tukar kata laluan",
-       "prefs-changeemail": "Tukar E-mel",
+       "prefs-changeemail": "Tukar atau padamkan alamat e-mel",
        "prefs-setemail": "Tetapkan alamat e-mel",
        "prefs-email": "Pilihan e-mel",
        "prefs-rendering": "Penampilan",
        "rows": "Baris:",
        "columns": "Lajur:",
        "searchresultshead": "Cari",
-       "stub-threshold": "Ambang bagi pemformatan <a href=\"#\" class=\"stub\">pautan ke rencana ringkas</a> (bait):",
+       "stub-threshold": "Ambang untuk pemformatan pautan tunas ($1):",
+       "stub-threshold-sample-link": "contoh",
        "stub-threshold-disabled": "Dimatikan",
        "recentchangesdays": "Bilangan hari dalam perubahan terkini:",
        "recentchangesdays-max": "(had $1 hari)",
        "prefs-help-recentchangescount": "Ini termasuklah perubahan terkini, sejarah laman dan log.",
        "prefs-help-watchlist-token2": "Inilah kunci rahsia kepada suapan web senarai pantau anda.\nSesiapa yang mengetahuinya akan boleh membaca senarai pantau anda, jadi jangan kongsinya.\n[[Special:ResetTokens|Klik di sini jika anda perlu mengesetnya semula]].",
        "savedprefs": "Keutamaan anda disimpan.",
+       "savedrights": "Hak pengguna {{GENDER:$1|$1}} telah disimpan.",
        "timezonelegend": "Zon waktu:",
        "localtime": "Waktu tempatan:",
        "timezoneuseserverdefault": "Gunakan tetapan sediaan wiki ($1)",
        "badsig": "Tandatangan mentah tidak sah; sila semak tag HTML.",
        "badsiglength": "Tandatangan anda tidak boleh melebihi $1 aksara.",
        "yourgender": "Jantina anda?",
-       "gender-unknown": "Tidak dinyatakan",
+       "gender-unknown": "Apabila menyebut anda, perisian anakn menggunakan kata-kata yang neutral jantina seboleh-bolehnya",
        "gender-male": "Lelaki",
        "gender-female": "Perempuan",
        "prefs-help-gender": "Pilihan: Digunakan oleh perisian ini untuk merujuk jantina anda dengan betul. Maklumat ini akan didedahkan kepada awam.",
        "rcshowhidemine": "$1 suntingan saya",
        "rcshowhidemine-show": "Paparkan",
        "rcshowhidemine-hide": "Sorokkan",
+       "rcshowhidecategorization": "$1 pengkategorian laman",
+       "rcshowhidecategorization-show": "Paparkan",
+       "rcshowhidecategorization-hide": "Sorokkan",
        "rclinks": "Paparkan $1 perubahan terakhir sejak $2 hari yang lalu<br />$3",
        "diff": "beza",
        "hist": "sej",
        "unpatrolledletter": "!",
        "number_of_watching_users_pageview": "[$1 pemantau]",
        "rc_categories": "Hadkan kepada kategori (asingkan dengan \"|\")",
-       "rc_categories_any": "Semua",
+       "rc_categories_any": "Mana-mana yang terpilih",
        "rc-change-size": "$1",
        "rc-change-size-new": "$1 bait selepas perubahan",
        "newsectionsummary": "/* $1 */ bahagian baru",
        "recentchangeslinked-summary": "Laman khas ini menyenaraikan perubahan terkini bagi laman-laman yang dipaut. Laman-laman yang terdapat dalam senarai pantau anda ditandakan dengan '''teks tebal'''.",
        "recentchangeslinked-page": "Nama laman:",
        "recentchangeslinked-to": "Paparkan perubahan pada laman yang mengandungi pautan ke laman yang diberikan",
+       "recentchanges-page-added-to-category": "[[:$1]] ditambahkan kepada kategori",
+       "recentchanges-page-added-to-category-bundled": "[[:$1]] dan {{PLURAL:$2|satu|$2}} lagi halaman ditambahkan kepada kategori",
+       "recentchanges-page-removed-from-category": "[[:$1]] digugurkan dari kategori",
+       "recentchanges-page-removed-from-category-bundled": "[[:$1]] dan {{PLURAL:$2|satu|$2}} lagi halaman digugurkan dari kategori",
+       "autochange-username": "Perubahan automatik MediaWiki",
        "upload": "Muat naik fail",
        "uploadbtn": "Muat naik fail",
        "reuploaddesc": "Kembali ke borang muat naik",
        "uploaddisabledtext": "Ciri muat naik fail dimatikan.",
        "php-uploaddisabledtext": "Pemuatnaikan fail PHP dilumpuhkan. Sila semak tetapan file_uploads.",
        "uploadscripted": "Fail ini mengandungi kod HTML atau skrip yang boleh disalahtafsirkan oleh pelayar web.",
-       "upload-scripted-pi-callback": "Tidak dapat memuat naik fail yang mengandungi arahan pemprosesan hamparan xml.",
+       "upload-scripted-pi-callback": "Tidak dapat memuat naik fail yang mengandungi arahan pemprosesan hamparan XML.",
        "uploaded-script-svg": "Terdapat elemen terskrip \"$1\" dalam fail SVG yang dimuat naik.",
        "uploaded-hostile-svg": "Terdapat CSS yang tidak selamat dalam elemen stail fail SVG yang dimuat naik.",
        "uploaded-event-handler-on-svg": "Penetapan atribut <i>event-handler</i> <code>$1=\"$2\"</code> tidak dibenarkan dalam fail SVG.",
        "uploaded-setting-event-handler-svg": "Dilarang menetapkan atribut <i>event-handler</i>, terdapat <code>&lt;$1 $2=\"$3\"&gt;</code> dalam fail SVG yang dimuat naik.",
        "uploaded-setting-href-svg": "Dilarang menggunakan teg \"set\" untuk menambahkan atribut \"href\" kepada elemen induk.",
        "uploaded-wrong-setting-svg": "Dilarang menggunakan teg \"set\" untuk menambah sasaran jauh/data/skrip ke sebarang atribut. Terdapat <code>&lt;set to=\"$1\"&gt;</code> dalam fail SVG yang dimuat naik.",
+       "uploaded-setting-handler-svg": "SVG yang menentukan atribut \"handler\" dengan remote/data/script disekat. Terdapat <code>$1=\"$2\"</code> dalam fail SVG yang dimuat naik.",
        "uploaded-image-filter-svg": "Terdapat penapis imej dengan URL: <code>&lt;$1 $2=\"$3\"&gt;</code> dalam fail SVG yang dimuat naik.",
        "uploadscriptednamespace": "Fail SVG ini mengandungi ruang nama terlarang \"$1\"",
        "uploadinvalidxml": "XML dalam fail yang dimuat naik ini tidak dapat dihuraikan.",
        "upload-too-many-redirects": "URL ini mengandungi terlalu banyak lencongan",
        "upload-http-error": "Berlaku ralat HTTP: $1",
        "upload-copy-upload-invalid-domain": "Muat naik salin tidak terdapat dari domain ini.",
+       "upload-dialog-title": "Muat naik fail",
+       "upload-dialog-button-cancel": "Batalkan",
+       "upload-dialog-button-done": "Siap",
+       "upload-dialog-button-save": "Simpan",
+       "upload-dialog-button-upload": "Muat naik",
+       "upload-form-label-select-file": "Pilih fail",
+       "upload-form-label-infoform-title": "Butiran",
+       "upload-form-label-infoform-name": "Nama",
+       "upload-form-label-infoform-description": "Keterangan",
+       "upload-form-label-usage-title": "Penggunaan",
+       "upload-form-label-usage-filename": "Nama fail",
+       "foreign-structured-upload-form-label-own-work": "Ini ialah karya saya sendiri",
+       "foreign-structured-upload-form-label-infoform-categories": "Kategori",
+       "foreign-structured-upload-form-label-infoform-date": "Tarikh",
+       "foreign-structured-upload-form-label-not-own-work-local-local": "Anda mungkin juga mahu mencuba [[Special:Upload|laman muat naik yang asal]].",
        "backend-fail-stream": "Fail $1 tidak dapat distrimkan.",
        "backend-fail-backup": "Fail $1 tidak dapat disandarkan.",
        "backend-fail-notexists": "Fail $1 tidak wujud.",
        "cant-move-to-user-page": "Anda tidak mempunyai keizinan untuk memindahkan sesebuah laman ke mana-mana laman pengguna (kecuali sebagai sublamannya sahaja).",
        "cant-move-category-page": "Anda tidak mempunyai kebenaran untuk memindah laman-laman kategori.",
        "cant-move-to-category-page": "Anda tidak mempunyai kebenaran untuk memindah sebuah laman ke sebuah laman kategori.",
-       "newtitle": "Ke tajuk baru:",
+       "newtitle": "Tajuk baru:",
        "move-watch": "Pantau laman ini",
        "movepagebtn": "Pindahkan laman",
        "pagemovedsub": "Pemindahan berjaya",
        "tooltip-ca-nstab-main": "Lihat laman kandungan",
        "tooltip-ca-nstab-user": "Lihat laman pengguna",
        "tooltip-ca-nstab-media": "Lihat laman media",
-       "tooltip-ca-nstab-special": "Ini adalah sebuah laman khas, anda tidak boleh menyunting laman ini secara terus.",
+       "tooltip-ca-nstab-special": "Ini adalah laman khas yang tidak boleh disunting.",
        "tooltip-ca-nstab-project": "Lihat laman projek",
        "tooltip-ca-nstab-image": "Lihat laman imej",
        "tooltip-ca-nstab-mediawiki": "Lihat pesanan sistem",
        "spam_reverting": "Membalikkan kepada versi terakhir yang tidak mengandungi pautan ke $1",
        "spam_blanking": "Mengosongkan semua semakan yang mengandungi pautan ke $1",
        "spam_deleting": "Menghapuskan semua semakan yang mengandungi pautan ke $1",
-       "simpleantispam-label": "Pemeriksaan anti-spam.\n'''JANGAN''' isi ruangan ini!",
+       "simpleantispam-label": "Pemeriksaan anti-spam.\n<strong>Jangan</strong> isi ruangan ini!",
        "pageinfo-title": "Maklumat untuk \"$1\"",
        "pageinfo-not-current": "Maaf, maklumat ini tidak dapat disediakan untuk semakan lama.",
        "pageinfo-header-basic": "Maklumat asas",
        "pageinfo-robot-index": "Dibenarkan",
        "pageinfo-robot-noindex": "Tidak dibenarkan",
        "pageinfo-watchers": "Bilangan pemantau halaman",
+       "pageinfo-visiting-watchers": "Bilangan penonton laman yang melawat suntingan terkini",
        "pageinfo-few-watchers": "Kurang daripada $1 orang pemantau",
        "pageinfo-redirects-name": "Jumlah lencongan ke laman ini",
        "pageinfo-subpages-name": "Subhalaman untuk halaman ini",
        "version-libraries": "Perpustakaan terpasang",
        "version-libraries-library": "Perpustakaan",
        "version-libraries-version": "Versi",
+       "version-libraries-license": "Lesen",
+       "version-libraries-description": "Keterangan",
+       "version-libraries-authors": "Pengarang",
        "redirect": "Lencongkan mengikut ID fail, pengguna, halaman atau semakan",
        "redirect-legend": "Lencongkan ke fail atau halaman",
        "redirect-summary": "Halaman khas ini melencong kepada fail (dengan nama fail), halaman (dengan ID semakan atau ID halaman) atau halaman pengguna (dengan ID pengguna berangka). Penggunaan: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], atau [[{{#Special:Redirect}}/user/101]].",
        "special-characters-title-endash": "sengkang en",
        "special-characters-title-emdash": "sengkang em",
        "special-characters-title-minus": "tanda tolak",
+       "mw-widgets-dateinput-no-date": "Tarik belum dipilih",
+       "mw-widgets-titleinput-description-new-page": "laman belum wujud",
+       "mw-widgets-titleinput-description-redirect": "melencong ke $1",
        "api-error-blacklisted": "Sila pilih tajuk yang berbeza dan deskriptif."
 }
index 266cbb1..58255f3 100644 (file)
        "htmlform-cloner-required": "Servesse al minimo nu valore.",
        "htmlform-title-badnamespace": "[[:$1]] nun è dint'a lu namespace \"{{ns:$2}}\".",
        "htmlform-title-not-creatable": "\"$1\" nun è nu titolo criabbele 'e paggena",
-       "htmlform-title-not-exists": "[[:$1]] nun esiste.",
+       "htmlform-title-not-exists": "$1 nun esiste.",
        "htmlform-user-not-exists": "<strong>$1</strong> nun esiste.",
        "htmlform-user-not-valid": "<strong>$1</strong> nun è nu nomme buono.",
        "sqlite-has-fts": "$1 cu supporto 'e ricerche full-text",
index 4adc0c0..fcfd56d 100644 (file)
        "htmlform-cloner-required": "Minst én verdi kreves.",
        "htmlform-title-badnamespace": "[[:$1]] er ikke i «{{ns:$2}}»-navnerommet",
        "htmlform-title-not-creatable": "«$1» er ikke en opprettbar sidetittel",
-       "htmlform-title-not-exists": "[[:$1]] forefinnes ikke.",
+       "htmlform-title-not-exists": "$1 forefinnes ikke.",
        "htmlform-user-not-exists": "<strong>$1</strong> eksisterer ikke.",
        "htmlform-user-not-valid": "<strong>$1</strong> er ikke et gyldig brukernavn.",
        "sqlite-has-fts": "$1 med støtte for fulltekstsøk",
index df18827..ba141d5 100644 (file)
        "htmlform-cloner-required": "Ten minste één waarde is vereist.",
        "htmlform-title-badnamespace": "[[:$1]] bevindt zich niet in de naamruimte \"{{ns:$2}}\".",
        "htmlform-title-not-creatable": "\"$1\" is geen paginanaam die aangemaakt kan worden",
-       "htmlform-title-not-exists": "[[:$1]] bestaat niet.",
+       "htmlform-title-not-exists": "$1 bestaat niet.",
        "htmlform-user-not-exists": "<strong>$1</strong> bestaat niet.",
        "htmlform-user-not-valid": "<strong>$1</strong> is geen geldige gebruikersnaam.",
        "sqlite-has-fts": "Versie $1 met ondersteuning voor \"full-text\" zoeken",
index 8df9450..67d007d 100644 (file)
@@ -26,7 +26,7 @@
        "tog-previewonfirst": "Ozuta ezikačondu kerras, ku edituičendu zavoditah",
        "tog-enotifwatchlistpages": "Työnnä minule sähköpoštu minun valvondulistal olijoin sivuloin kohenduksis",
        "tog-enotifusertalkpages": "Työnnä minule sähköpoštu minun paginsivun muutoksis",
-       "tog-enotifminoredits": "Ilmoita minule pienisgi korjavuksis sähköpoštale",
+       "tog-enotifminoredits": "Ilmoita minule pienisgi kohenduksis sähköpoštale",
        "tog-enotifrevealaddr": "Näytä minun sähköpoštuadressii muile lähetettylöis ilmoituksis",
        "tog-shownumberswatching": "Ozuta tädä sivuu tarkailevien käyttäjien miäriä",
        "tog-oldsig": "Nygöine allekirjutus:",
        "and": "&#32;da",
        "qbfind": "Eči",
        "qbbrowse": "Livua",
-       "qbedit": "Korjata",
+       "qbedit": "Kohendele",
        "qbpageoptions": "Tämä sivu",
        "qbmyoptions": "Minun sivut",
        "faq": "PKK",
        "view": "Kačo",
        "view-foreign": "Kačo saital $1",
        "edit": "Kohendele",
-       "edit-local": "Edituiče paikallistu kuvavustu",
+       "edit-local": "Kohendele paikallistu kuvavustu",
        "create": "Luaji",
        "create-local": "Ližiä paikalline kuvavus",
        "editthispage": "Kohendele tädä sivuu",
        "currentevents-url": "Project:Aijankohtazet tapahtumat",
        "disclaimers": "Kieldävymine vastuos",
        "disclaimerpage": "Project:Vastuos kieldävymine",
-       "edithelp": "Abu korjuamizeh",
+       "edithelp": "Abu kohendelemizeh",
        "helppage-top-gethelp": "Kyzy abuu",
        "mainpage": "Piäsivu",
        "mainpage-description": "Piäsivu",
        "userpage-userdoesnotexist-view": "Käyttäitunnustu ”$1” ei ole registruittu.",
        "updated": "(Päivitetty)",
        "continue-editing": "Mene edituičendualovehele",
-       "editing": "Edituijah sivuu $1",
+       "editing": "Kohendellah sivuu $1",
        "creating": "Luajitah sivuu \"$1\"",
-       "editingsection": "Korjuandu $1 (alalugu)",
+       "editingsection": "Kohendellah $1 (alalugu)",
        "editingcomment": "Edituijah $1 (uuzi sektsii)",
        "yourtext": "Sinun tekstu",
        "yourdiff": "Erot",
        "powersearch-toggleall": "Kai",
        "powersearch-togglenone": "Nimidä",
        "mypreferences": "Azetukset",
-       "prefs-edits": "Edituičendoi kaikkiedah:",
+       "prefs-edits": "Kohenduksii kaikkiedah:",
        "prefs-skin": "Kettu",
        "prefs-user-pages": "Käyttäisivut",
        "prefs-watchlist": "Valvondulistu",
        "group-user": "Käyttäjät",
        "group-all": "(kai)",
        "right-read": "Lugie sivuloi",
-       "right-edit": "Edituija sivuloi",
+       "right-edit": "Kohendella sivuloi",
        "right-createpage": "Luadie sivuloi (kudamat ei olla paginsivuloi)",
        "right-createtalk": "Luadie paginsivuloi",
        "right-createaccount": "Luadie uuzii käyttäitunnuksii",
        "recentchanges": "Uvvet kohendukset",
        "recentchanges-legend": "Tuorehien muutoksien azetukset",
        "recentchanges-summary": "Jällitä kaikkii jälgimäzet muutokset wikih täl sivul.",
-       "recentchanges-label-newpage": "Tämä korjavus on johtanuh uvven sivun luadimizeh",
+       "recentchanges-label-newpage": "Tämä kohendus on johtanuh uvven sivun luadimizeh",
        "recentchanges-label-minor": "Tämä on pieni kohendus",
-       "recentchanges-label-bot": "Tämän muutoksen on luadinuh bot",
+       "recentchanges-label-bot": "Tämän kohenduksen on luadinuh bot",
        "recentchanges-label-unpatrolled": "Tädä korjuandua vie ei ole tarkistettu",
        "recentchanges-label-plusminus": "Sivu on kazvanuh [] baital",
        "recentchanges-legend-heading": "'''Legendu:'''",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (kačo sežo [[Special:NewPages|uuzien sivuloin listu]])",
        "rclistfrom": "Ozuta jälgimäzet muutokset algajen $2, $3",
-       "rcshowhideminor": "$1 pienet muutokset",
+       "rcshowhideminor": "$1 pienet kohendukset",
        "rcshowhideminor-show": "Ozuta",
        "rcshowhideminor-hide": "Peitä",
        "rcshowhidebots": "$1 botat",
        "tooltip-t-permalink": "Pyzyi linki tämän sivun versieh",
        "tooltip-ca-nstab-main": "Kačo piäsivun sizäldö",
        "tooltip-ca-nstab-user": "Ozuta käyttäisivu",
-       "tooltip-ca-nstab-special": "Tämä on erikoine sivu, sidä ei voi korjata",
+       "tooltip-ca-nstab-special": "Tämä on erikoine sivu, sidä ei voi kohendella",
        "tooltip-ca-nstab-project": "Ozuta projektusivu",
        "tooltip-ca-nstab-image": "Kačo failan sivu",
        "tooltip-ca-nstab-template": "Ozuta šablon",
index f1c204c..f960f6c 100644 (file)
        "title-invalid-talk-namespace": "Żądany tytuł strony dotyczy strony dyskusji, która nie istnieje.",
        "title-invalid-characters": "Żądany tytuł strony zawiera błędne znaki: „$1”.",
        "title-invalid-magic-tilde": "Żądany tytuł strony zawiera błędną, magiczną sekwencję tyld (<nowiki>~~~</nowiki>)",
-       "title-invalid-too-long": "Podany tytuł strony jest zbyt długi. Nie może mieć więcej niż  {{PLURAL:$1|bajt|bajty|bajtów}} w kodowaniu UTF-8.",
+       "title-invalid-too-long": "Podany tytuł strony jest zbyt długi. Nie może mieć więcej niż $1 {{PLURAL:$1|bajt|bajty|bajtów}} w kodowaniu UTF-8.",
        "title-invalid-leading-colon": "Podany tytuł strony zawiera na początku nieprawidłowy dwukropek.",
        "perfcached": "Poniższe dane są kopią z pamięci podręcznej i mogą być nieaktualne. W pamięci podręcznej {{PLURAL:$1|znajduje|znajdują|znajduje}} się maksymalnie {{PLURAL:$1|jeden wynik|$1 wyniki|$1 wyników}}.",
        "perfcachedts": "Poniższe dane są kopią z pamięci podręcznej. Ostatnia aktualizacja odbyła się $1. W pamięci podręcznej {{PLURAL:$4|znajduje|znajdują|znajduje}} się maksymalnie {{PLURAL:$4|jeden wynik|$4 wyniki|$4 wyników}}.",
        "allpages": "Wszystkie strony",
        "nextpage": "Następna strona ($1)",
        "prevpage": "Poprzednia strona ($1)",
-       "allpagesfrom": "Strony o tytułach rozpoczynających się od:",
-       "allpagesto": "Strony o tytułach kończących się na:",
+       "allpagesfrom": "Wyświetl strony, zaczynając od:",
+       "allpagesto": "Wyświetl strony, kończąc na:",
        "allarticles": "Wszystkie artykuły",
        "allinnamespace": "Wszystkie strony (w przestrzeni nazw $1)",
        "allpagessubmit": "Pokaż",
        "htmlform-cloner-required": "Wymagana jest co najmniej jedna wartość.",
        "htmlform-title-badnamespace": "[[:$1]] nie znajduje się w przestrzeni nazw „{{ns:$2}}”.",
        "htmlform-title-not-creatable": "Nie można użyć „$1” do utworzenia tytułu strony",
-       "htmlform-title-not-exists": "[[:$1]] nie istnieje.",
+       "htmlform-title-not-exists": "$1 nie istnieje.",
        "htmlform-user-not-exists": "<strong>$1</strong> nie istnieje.",
        "htmlform-user-not-valid": "<strong>$1</strong> nie jest prawidłową nazwą użytkownika.",
        "sqlite-has-fts": "$1 z obsługą pełnotekstowego wyszukiwania",
index 51ebe45..2b1ba0e 100644 (file)
        "htmlform-cloner-create": "نور ورگډول",
        "htmlform-cloner-delete": "غورځول",
        "htmlform-cloner-required": "لږ تر لږه يو ارزښت ته اړتيا شته.",
-       "htmlform-title-not-exists": "[[:$1]] نشته.",
+       "htmlform-title-not-exists": "$1 نشته.",
        "htmlform-user-not-exists": "<strong>$1</strong> نشته.",
        "logentry-delete-delete": "$1 د $3 مخ {{GENDER:$2|ړنگ کړ}}",
        "revdelete-content-hid": "مېنځپانگه پټېدلې",
index 192b927..6b83c4b 100644 (file)
        "htmlform-cloner-delete": "Remover",
        "htmlform-cloner-required": "Pelo menos um valor é requerido",
        "htmlform-title-not-creatable": "\"$1\" não é um título que possa ser atribuído a uma página",
-       "htmlform-title-not-exists": "[[:$1]] não existe.",
+       "htmlform-title-not-exists": "$1 não existe.",
        "htmlform-user-not-exists": "<strong>$1</strong> não existe.",
        "htmlform-user-not-valid": "<strong>$1</strong> não é um nome de usuário válido.",
        "sqlite-has-fts": "$1 com suporte de pesquisa de texto completo",
index 486ad66..5a908d0 100644 (file)
        "htmlform-cloner-required": "Pelo menos um valor é necessário.",
        "htmlform-title-badnamespace": "[[:$1]] não se encontra no domínio \"{{ns:$2}}\".",
        "htmlform-title-not-creatable": "\"$1\" não é um título que possa ser atribuído a uma página",
-       "htmlform-title-not-exists": "[[:$1]] não existe.",
+       "htmlform-title-not-exists": "$1 não existe.",
        "htmlform-user-not-exists": "<strong>$1</strong> não existe.",
        "htmlform-user-not-valid": "<strong>$1</strong> não é um nome de utilizador válido.",
        "sqlite-has-fts": "$1 com suporte de pesquisa de texto completo",
index 6703c51..14da08c 100644 (file)
        "htmlform-cloner-required": "Este necesară cel puțin o valoare.",
        "htmlform-title-badnamespace": "[[:$1]] nu se află în spațiul de nume „{{ns:$2}}”.",
        "htmlform-title-not-creatable": "„$1” este un titlu de pagină inutilizabil",
-       "htmlform-title-not-exists": "[[:$1]] nu există.",
+       "htmlform-title-not-exists": "$1 nu există.",
        "htmlform-user-not-exists": "<strong>$1</strong> nu există.",
        "htmlform-user-not-valid": "<strong>$1</strong> nu este un nume de utilizator valid.",
        "sqlite-has-fts": "$1 cu suport de căutare în tot textul",
index 38f16df..343052f 100644 (file)
        "htmlform-cloner-delete": "Live",
        "htmlform-cloner-required": "Almene 'nu valore l'a mettere.",
        "htmlform-title-badnamespace": "[[:$1]] non ge stè jndr'à 'u namespace \"{{ns:$2}}\".",
-       "htmlform-title-not-exists": "[[:$1]] non g'esiste.",
+       "htmlform-title-not-exists": "$1 non g'esiste.",
        "htmlform-user-not-exists": "<strong>$1</strong> non g'esiste.",
        "htmlform-user-not-valid": "<strong>$1</strong> non g'è 'nu nome utende valide.",
        "sqlite-has-fts": "$1 cu 'u supporte d'a ricerche full-text",
index 183c3cb..101ac64 100644 (file)
        "eauthentsent": "На указанный адрес электронной почты отправлено письмо. \nЧтобы получать письма в дальнейшем, следуйте изложенным там инструкциям для подтверждения, что этот адрес действительно принадлежит вам.",
        "throttled-mailpassword": "Функция напоминания пароля уже использовалась в течение {{PLURAL:$1|1=последнего часа|последних $1 часов}}.\nДля предотвращения злоупотреблений, разрешено запрашивать не более одного напоминания {{PLURAL:$1|за $1 час|за $1 часов|за $1 часа|1=в час}}.",
        "mailerror": "Ошибка при отправке почты: $1",
-       "acct_creation_throttle_hit": "За сутки с вашего IP-адреса {{PLURAL:$1|была создана $1 учётная запись участника|было создано $1 учётных записей участников|1=уже была создана учётная запись участника}}, что является пределом для данного отрезка времени.\nТаким образом, пользователи, обладающие данным IP-адресом, в данный момент больше не могут создавать новых учётных записей.",
+       "acct_creation_throttle_hit": "За сутки с вашего IP-адреса {{PLURAL:$1|была создана $1 учётная запись|было создано $1 учётных записей|были созданы $1 учётных записи|1=уже была создана учётная запись}} — это предельное количество для данного отрезка времени.\nВ результате, пользователи с этим IP-адресом в данный момент больше не могут создавать новых учётных записей.",
        "emailauthenticated": "Ваш адрес электронной почты подтверждён $2 в $3.",
        "emailnotauthenticated": "Ваш адрес электронной почты ещё не был подтверждён.\nПисьма не будут отправляться ни для одной из следующий функций.",
        "noemailprefs": "Адрес электронной почты не был указан, функции вики-движка по работе с эл. почтой отключены.",
        "resetpass-abort-generic": "Изменение пароля было прервано расширением.",
        "resetpass-expired": "Срок действия вашего пароля истёк. Пожалуйста, установите новый пароль для входа в систему.",
        "resetpass-expired-soft": "Срок действия вашего пароля истёк, и теперь он должен быть изменён. Пожалуйста, выберите новый пароль или нажмите «{{int:resetpass-submit-cancel}}», чтобы изменить его позже.",
-       "resetpass-validity-soft": "Ð\92аÑ\88 Ð¿Ð°Ñ\80олÑ\8c Ñ\8fвлÑ\8fеÑ\82Ñ\81Ñ\8f Ð½ÐµÐºÐ¾Ñ\80Ñ\80екÑ\82нÑ\8bм: $1\n\nПожалуйста, выберите новый пароль или нажмите «{{int:resetpass-submit-cancel}}», чтобы сбросить его позже.",
+       "resetpass-validity-soft": "Ð\97адан Ð½ÐµÐºÐ¾Ñ\80Ñ\80екÑ\82нÑ\8bй Ð¿Ð°Ñ\80олÑ\8c: $1\n\nПожалуйста, выберите новый пароль или нажмите «{{int:resetpass-submit-cancel}}», чтобы сбросить его позже.",
        "passwordreset": "Сброс пароля",
        "passwordreset-text-one": "Заполните эту форму, чтобы сбросить свой пароль.",
        "passwordreset-text-many": "{{PLURAL:$1|Заполните одно из полей для получения временного пароля по электронной почте.}}",
        "permissionserrors": "Ошибка прав доступа",
        "permissionserrorstext": "У вас нет прав на выполнение этой операции по {{PLURAL:$1|1=следующей причине|следующим причинам}}:",
        "permissionserrorstext-withaction": "У вас нет прав на $2 по {{PLURAL:$1|1=следующей причине|следующим причинам}}:",
-       "contentmodelediterror": "Ð\92Ñ\8b Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ\82е Ñ\80едакÑ\82иÑ\80оваÑ\82Ñ\8c Ñ\8dÑ\82Ñ\83 Ð²ÐµÑ\80Ñ\81иÑ\8e, Ð¿Ð¾Ñ\81колÑ\8cкÑ\83 ÐµÑ\91 Ð¼Ð¾Ð´ÐµÐ»Ñ\8cÑ\8e Ñ\81одеÑ\80жимого Ñ\8fвлÑ\8fеÑ\82Ñ\81Ñ\8f <code>$1</code>, Ð° Ñ\82екÑ\83Ñ\89аÑ\8f Ð¼Ð¾Ð´ÐµÐ»Ñ\8c Ñ\81одеÑ\80жимого страницы — <code>$2</code>.",
+       "contentmodelediterror": "Ð\92Ñ\8b Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ\82е Ñ\80едакÑ\82иÑ\80оваÑ\82Ñ\8c Ñ\8dÑ\82Ñ\83 Ð²ÐµÑ\80Ñ\81иÑ\8e, Ð¿Ð¾Ñ\81колÑ\8cкÑ\83 Ð¼Ð¾Ð´ÐµÐ»Ñ\8c ÐµÑ\91 Ñ\81одеÑ\80жаниÑ\8f â\80\94 <code>$1</code>, Ð° Ñ\82екÑ\83Ñ\89аÑ\8f Ð¼Ð¾Ð´ÐµÐ»Ñ\8c Ñ\81одеÑ\80жаниÑ\8f страницы — <code>$2</code>.",
        "recreate-moveddeleted-warn": "'''Внимание. Вы пытаетесь воссоздать страницу, которая ранее удалялась.'''\n\nПроверьте, действительно ли вам нужно воссоздавать эту страницу.\nНиже приведены журналы удалений и переименований этой страницы.",
        "moveddeleted-notice": "Эта страница была удалена.\nДля справки ниже показаны соответствующие записи из журналов удалений и переименований.",
        "moveddeleted-notice-recent": "К сожалению, эта страница была недавно удалена (в течение последних 24 часов).\nНиже для справки приведены журналы удаления и перемещения для этой страницы.",
        "htmlform-cloner-required": "Требуется по крайней мере одно значение.",
        "htmlform-title-badnamespace": "[[:$1]] находится не в пространстве имён «{{ns:$2}}».",
        "htmlform-title-not-creatable": "«$1» — заголовок страницы, которая не может быть создана",
-       "htmlform-title-not-exists": "[[:$1]] не существует.",
+       "htmlform-title-not-exists": "$1 не существует.",
        "htmlform-user-not-exists": "<strong>$1</strong> не существует.",
        "htmlform-user-not-valid": "<strong>$1</strong> — недопустимое имя учётной записи.",
        "sqlite-has-fts": "$1 с поддержкой полнотекстового поиска",
index c65111a..347e5cb 100644 (file)
        "svg-long-error": "Алҕастаах SVG-билэ: $1",
        "show-big-image": "Билэ бэйэтэ",
        "show-big-image-preview": "Бигэргэтиэх иннинэ көрүү улахана: $1.",
+       "show-big-image-preview-differ": "Бу $3-превью $2-билэҕэ анаммыт кээмэйэ: $1.",
        "show-big-image-other": "Атын {{PLURAL:$2|түмүк|түмүктэр}}: $1.",
        "show-big-image-size": "$1 × $2 пииксэл",
        "file-info-gif-looped": "хатаммыт (бобуллубут)",
        "tags-create-warnings-below": "Тиэги салгыы оҥоруоххун баҕараҕын дуо?",
        "tags-delete-title": "Тиэги сот",
        "tags-delete-explanation-initial": "«$1» тиэги билии олоҕуттан сотон эрэҕин.",
+       "tags-delete-explanation-in-use": "Кини билигин туттуллар {{PLURAL:$2|$2 барылыттан биитэр сурунаалыттан|бары $2 барылларыттан уонна/биитэр сурунаалга суруллубуттартан}} сотуллуо.",
+       "tags-delete-explanation-warning": "Бу дьайыыны <strong>төннөрөр кыаҕыҥ суох</strong> буолуо, оннооҕор дьаһабыл <strong>төннөрөр кыаҕа суох</strong> буолуо. Сөпкө сотобун диэн эрэллээх буолуохтааххын.",
+       "tags-delete-explanation-active": "<strong>«$1» тиэк билигин да туттуллар.</strong> Ону хааччахтыыр туһуттан тиэк туттуллар сиригэр тиийэн онно бэйэтигэр араарыахтааххын.",
        "tags-delete-reason": "Төрүөтэ:",
        "tags-delete-submit": "Бу тиэги букатыннаахтык сот",
+       "tags-delete-not-allowed": "Кэҥэтии (расширение) бэлиэтээбит тикэтэрин сотор кыах суох, арай кэҥэтии бэйэтэ көҥүллүүр эрэ буоллаҕына ол сатаныа.",
        "tags-delete-not-found": "Маннык $1 бэлиэ суох эбит.",
        "tags-delete-too-many-uses": "«$1» тиэк $2 торумтан ордукка туттуллар, ол аата сотуллар кыаҕа суох.",
        "tags-delete-warnings-after-delete": "«$1» тиэк сотулунна, ол эрээри {{PLURAL:$2|маннык сэрэтии|маннык сэрэтиилэр}} көһүннүлэр:",
        "tags-apply-no-permission": "Бэйэҥ уларытыыгар уларытыы тиэгин туруорар кыаҕыҥ суох эбит.",
        "tags-apply-not-allowed-one": "«$1» тиэги илииннэн туруорар табыллыбат эбит.",
        "tags-apply-not-allowed-multi": "Маннык {{PLURAL:$2|тиэк илиинэн угуллубат|тиэктэр илиинэн угуллубаттар}}: $1",
+       "tags-update-no-permission": "Сурунаал тус-туспа торумнарын уонна суруктарын тиэгин эбэр уонна уларытар кыаҕыҥ суох эбит.",
        "tags-update-add-not-allowed-one": "«$1» тиэги илииннэн туруорар табыллыбат эбит.",
        "tags-update-add-not-allowed-multi": "Маннык {{PLURAL:$2|тиэк илиинэн угуллубат|тиэктэр илиинэн угуллубаттар}}: $1",
        "tags-update-remove-not-allowed-one": "«$1» тиэги сотор табыллыбат эбит.",
        "htmlform-cloner-create": "Өссө эп",
        "htmlform-cloner-delete": "Сот",
        "htmlform-cloner-required": "Саатар биирин толоруохтаах эбиккин.",
+       "htmlform-title-badnamespace": "[[:$1]] бу аат далыгар киирбэт эбит «{{ns:$2}}».",
        "htmlform-title-not-creatable": "«$1» оҥоһуллар сирэй аата буолбатах",
-       "htmlform-title-not-exists": "[[:$1]] суох.",
+       "htmlform-title-not-exists": "$1 суох.",
        "htmlform-user-not-exists": "<strong>$1</strong> суох.",
+       "htmlform-user-not-valid": "<strong>$1</strong> — маннык аат сатаммат.",
        "sqlite-has-fts": "$1 толору тиэкистээх көрдөөһүнү өйүүр",
        "sqlite-no-fts": "$1 толору тиэкистээх көрдөөһүнү өйөөбөт",
        "logentry-delete-delete": "$3 сирэйи $1 соппут",
        "revdelete-uname-unhid": "кыттааччы аата көстөр буолбут",
        "revdelete-restricted": "хааччахтааһын администраатардарга сыһыаннаах",
        "revdelete-unrestricted": "хааччахтааһын админстраатардартан уһулунна",
+       "logentry-block-block": "$1 маннык болдьоххо $5 $6 {{GENDER:$4|$3}} {{GENDER:$2|хааччахтаабыт}}",
        "logentry-block-unblock": "$1 {{GENDER:$2|хааччаҕын суох гыммыт}} {{GENDER:$4|$3}}",
        "logentry-block-reblock": "$1 хааччах болдьоҕун {{GENDER:$4|$3}} манныкка $5 $6 {{GENDER:$2|уларыппыт}}",
        "logentry-suppress-block": "$1 маннык болдьоххо $5 $6 {{GENDER:$4|$3}} {{GENDER:$2|хааччаҕын суох гыммыт}}",
        "logentry-suppress-reblock": "$1 хааччах болдьоҕун {{GENDER:$4|$3}} манныкка $5 $6 {{GENDER:$2|уларыппыт}}",
+       "logentry-import-upload": "$1 {{GENDER:$2|киллэрбит}} $3 билэни хачайдыыр ньыманнан",
+       "logentry-import-interwiki": "$1 {{GENDER:$2|киллэрбит}} $3 атын биикиттэн",
+       "logentry-merge-merge": "$1 {{GENDER:$2|холбообут}} мантан $3 манна $4 ($5 диэри торумнара)",
        "logentry-move-move": "$1 $3 сирэй аатын маннык $4 уларыппыт",
        "logentry-move-move-noredirect": "$3 сирэй аатын $1 маннык $4 уларыппыт, утаарыы-сирэй хаалларбатах",
        "logentry-move-move_redir": "$3 сирэйи $1 диэн кыттааччы манныкка $4  уларыппыт (утаарыы үрдүнэн)",
        "logentry-newusers-create2": "$3 кыттааччы аатын $1 бэлиэтээтэ",
        "logentry-newusers-byemail": "$3 бэлиэ-ааты $1 оҥорбут, киирии тыла электрон почтанан ыытыллыбыт",
        "logentry-newusers-autocreate": "$1 бэлиэ-аат аптамаатынан бэлиэтэннэ",
+       "logentry-protect-move_prot": "$1 көмүскэл нарылааһынан мантан $4 манна $3 {{GENDER:$2|көһөрбүт}}",
+       "logentry-protect-unprotect": "$1 мантан $3 көмүскэли {{GENDER:$2|суох гыммыт}}",
        "logentry-protect-protect": "$1 {{GENDER:$2|көмүскээтэ}} $3 $4",
        "logentry-protect-protect-cascade": "$1 {{GENDER:$2|көмүскээбит}} $3 $4 [каскаадынан]",
        "logentry-protect-modify": "$1 {{GENDER:$2|уларыппыт}}: $3 $4 көмүскэлин таһымын",
        "api-error-stashfailed": "Ис алҕас: сиэрбэр быстах кэмҥэ оҥоһуллубут билэни кыайан бигэргэппэтэх.",
        "api-error-publishfailed": "Ис алҕас: сиэрбэр быстах билэни кыайан бигэргэппэтэх.",
        "api-error-stasherror": "Билэни угарга алҕас таҕыста.",
+       "api-error-stashedfilenotfound": "Хачайданыахтаах билэ быстах уурар сиргэ көстүбэтэ.",
+       "api-error-stashpathinvalid": "Билэ сытыахтаах быстах уурар сирин суола алҕастаах.",
+       "api-error-stashfilestorage": "Билэни быстах угар сиргэ угарга алҕас таҕыста.",
+       "api-error-stashzerolength": "Сиэрбэр билэни быстах угар сиргэ харайар кыаҕа суох, тоҕо диэтэххэ уһуна нуул.",
+       "api-error-stashnotloggedin": "Билэни быстах сиргэ харайарга бастаан ааккынан киириэхтээххин.",
+       "api-error-stashwrongowner": "Арыйа сатаабыт билэҥ эйиэнэ буолбатах эбит.",
+       "api-error-stashnosuchfilekey": "Быстах уурар сиргэ сытар билэҕэ киирэ сатаабыт күлүүһүҥ суох эбит.",
        "api-error-timeout": "Сиэрбэр кэтэһэр кэмҥэ хоруйдаабата.",
        "api-error-unclassified": "Биллибэт алҕас таҕыста",
        "api-error-unknown-code": "Биллибэт алҕас: «$1»",
        "limitreport-title": "Анализатор дааннайдара:",
        "limitreport-cputime": "Процессору туһаныы",
        "limitreport-cputime-value": "$1 сөкүүндэ",
+       "limitreport-walltime": "Тута көрдөрөр эрэсиим",
        "limitreport-walltime-value": "$1 {{PLURAL:$1|сөкүүндэ|сөкүүндэ}}",
        "limitreport-ppvisitednodes": "Препроцессор көрбүт сирдэрин ахсаана",
        "limitreport-ppgeneratednodes": "Препроцессор оҥорбут түмүктэрин (node) ахсаана",
        "expand_templates_generate_xml": "XML-ы мас курдук көрдөр",
        "expand_templates_generate_rawhtml": "HTML-ы көрдөр",
        "expand_templates_preview": "Холоон көрүү",
+       "expand_templates_preview_fail_html": "<em>raw HTML холбоно сылдьар {{SITENAME}} ситим-сир сиэссийэтин сүтэрэн кэбиспит буолан, эрдэ көрүү сатаммат, бу JavaScript-атаакаттан көмүскэнэр ньыма.</em>\n\n<strong>Эрдэ көрөрүҥ буортуну аҕалбат буоллаҕына хатылаан көр.</strong>\nСин биир сатамматаҕына [[Special:UserLogout|үлэҕин түмүктээ]] уонна хат киирэн көр.",
+       "pagelanguage": "Сирэй тылын талыы",
        "pagelang-name": "Сирэй",
        "pagelang-language": "Омугун тыла",
        "pagelang-use-default": "Сүрүн тылы тутун",
        "right-pagelang": "Сирэй тылын уларыт",
        "action-pagelang": "сирэй тылын уларытар буол",
        "log-name-pagelang": "Тылы уларытыы сурунаала",
+       "log-description-pagelang": "Сирэй тылын талыы сурунаала.",
+       "logentry-pagelang-pagelang": "$1 кыттааччы $3 сирэй тылын мантан $4 манныкка $5 {{GENDER:$2|уларыппыт}}.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (холбоммут)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''арахсыбыт''')",
        "mediastatistics": "Миэдьийэ ыстатыыстыката",
+       "mediastatistics-summary": "Киирбит билэ көрүҥүн ыстатыыстыката. Билэ тиһэх эрэ торумун көрдөрөр. Урукку уонна сотуллубут билэлэр ааҕыллыбаттар.",
        "mediastatistics-nbytes": "$1 баайт ($2; $3%)",
        "mediastatistics-table-mimetype": "MIME көрүҥэ",
        "mediastatistics-table-extensions": "Туһаныллыан сөптөөх кэҥэтиилэр",
        "special-characters-title-minus": "минус бэлиэтэ",
        "mw-widgets-dateinput-no-date": "Күнэ-дьыла ыйыллыбатах",
        "mw-widgets-titleinput-description-new-page": "сирэй суох эбит",
-       "mw-widgets-titleinput-description-redirect": "манна $1 утаарыы"
+       "mw-widgets-titleinput-description-redirect": "манна $1 утаарыы",
+       "api-error-blacklisted": "Бука диэн өйдөнөр аатта тал дуу."
 }
index cc47cc0..f31c4c6 100644 (file)
        "createaccountreason": "Mutivu:",
        "createacct-reason": "Mutivu",
        "createacct-reason-ph": "Pirchì stai criannu n'àutru cuntu",
-       "createacct-captcha": "Cuntrollu di sicurizza",
-       "createacct-imgcaptcha-ph": "Nzirìsci lu testu ca vidi ccassupra",
        "createacct-submit": "Crea lu tò cuntu",
        "createacct-another-submit": "Crea un cuntu",
        "createacct-benefit-heading": "{{SITENAME}} è fatta di pirsuni comu a tìa.",
        "passwordreset-emailsent-capture": "Nu missaggiu di posta elittrònica d'azziramentu dâ password fu mannatu, cû cuntinutu chi si pò taliari ccassutta.",
        "passwordreset-emailerror-capture": "Nu missaggiu di posta elittrònica d'azziramentu dâ password fu cumpilatu, cû cuntinutu chi si pò taliari ccassutta, pirò la sò spidizzioni a l'utenti {{GENDER:$2|user}} nun arriniscìu: $1",
        "changeemail": "Canciu dû nnirizzu di posta elittrònica",
-       "changeemail-text": "Jinchi stu mòdulu pi canciari lu tò nnirizzu di posta elittrònica. Hai a nziriri la tò password pi cunfirmari stu canciamentu.",
+       "changeemail-header": "Jinchi stu mòdulu pi canciari lu tò nnirizzu di posta elittrònica. Hai a nziriri la tò password pi cunfirmari stu canciamentu.",
        "changeemail-no-info": "Hai a aviri trasutu p'aviri accessu direttu a sta pàggina.",
        "changeemail-oldemail": "Nnirizzu di posta elittrònica attuali:",
        "changeemail-newemail": "Nnirizzu di posta elittrònica novu:",
        "upload-dialog-button-done": "Finutu",
        "upload-dialog-button-save": "Sarva",
        "upload-dialog-button-upload": "Càrrica",
-       "upload-process-error": "Ammattìu n'erruri",
-       "upload-process-warning": "Ammattìu n'avvisu",
        "upload-form-label-select-file": "Scegghi lu file",
        "upload-form-label-infoform-title": "Dittagghî",
        "upload-form-label-infoform-name": "Nomu",
        "htmlform-cloner-required": "Ci voli armenu nu valuri.",
        "htmlform-title-badnamespace": "[[:$1]] nun sta ntô namespace «{{ns:$2}}».",
        "htmlform-title-not-creatable": "«$1» nun è lu tìtulu di na pàggina ca si pò criari",
-       "htmlform-title-not-exists": "[[:$1]] nun esisti.",
+       "htmlform-title-not-exists": "$1 nun esisti.",
        "htmlform-user-not-exists": "<strong>$1</strong> nun esisti.",
        "htmlform-user-not-valid": "<strong>$1</strong> nun è vàlidu comu nomu utenti.",
        "sqlite-has-fts": "$1 cu capacità d'arricerca a tuttu testu",
index 76fbc93..ad674a7 100644 (file)
        "noname": "توهان جو ڄاڻايل يُوزرنانءُ ناقابل ڪار آهي.",
        "loginsuccesstitle": "لاگ اِن ڪامياب",
        "loginsuccess": "'''هاڻي توهان {{SITENAME}} تي بطور \"$1\" لاگ اِن ٿيل آهيو.'''",
-       "nosuchuser": "\"$1\" نالي سان ڪو بہ يوزر نہ آهي. يُوزرنانءُ، ننڍن وڏن اکرن ۾ امتياز ڪري ٿو. هِجي چڪاسيو، يا نئون کاتو کوليو.",
+       "nosuchuser": "\"$1\" نالي سان ڪو بہ يوزر نہ آهي.  \"$1\".\n ننڍن وڏن اکرن ۾ امتياز ڪرڻ لازمي آهي. \nهِجي چڪاسيو،يا [[Special:UserLogin/signup|نئون کاتو تخليق ڪريو]]",
        "nosuchusershort": "\"$1\" نالي ڪو بہ يُوزر ناهي.\nهِجي جي پڪ ڪندا.",
        "nouserspecified": "توهان کي ڪو يوزرنانءُ ڄاڻائڻو پوندو.",
        "login-userblocked": "هيءُ يُوزر بندشيل آهي. لاگ اِن جي اجازت نہ ٿي ڏجي.",
        "passwordtooshort": "ڳجھي لفظ گھٽ ۾ گھٽ  {{PLURAL:$1|1 اکر|$1 اکرَن}} تي ٻڌل هوڻ گھرجي.",
        "passwordtoolong": "ڳجھو لفظ {{PLURAL:$1|1 اکر|$1 اکرن}} کان وڏو نہ ٿو ٿي سگھي.",
        "password-name-match": "توهان جو ڳجھو لفظ توهان جي يوزرنانءُ کان مختلف هجڻ گھرجي.",
-       "mailmypassword": "ڳجھو لفظ برق ٽپاليو",
+       "mailmypassword": "ڳجھو لفظ ٻيهر ترتيب ڪريو",
        "passwordremindertitle": "{{SITENAME}} لاءِ نئون عارضي ڳجھو لفظ",
        "passwordremindertext": "ڪنهن (شايد توهان آءِ پي پتي $1 تان) اسان کي {{SITENAME}} ($4) لاءِ نئون ڳجھو لفظ اماڻڻ جي گھُرَ ڪئي.\n\nهاڻي يوزر \"$2\" لاءِ ڳجھو لفظ \"$3\" آهي. توهان کي هينئر ئي لاگ اِن ٿي پنهنجو ڳجھو لفظ تبديل ڪرڻ گھرجي.\n\nجيڪڏهن اها گھُرَ اوهان نه ڪئي هئي، يا هاڻي اوهان کي پنهنجو ڳجھو لفظ ياد اچي ويو آهي ۽ توهان ان کي تبديل ڪرڻ نه ٿا چاهيو، ته توهان هن نياپي کي نظر انداز ڪندي پنهنجو پراڻو ڳجھو لفظ ئي استعمال ڪري سگھو ٿا.",
        "noemail": "يُوزر \"$1\" جي ڪو به برق ٽپال پتو درج ٿيل ناهي.",
        "cannotchangeemail": "هن وڪيءَ تي کاتيدار جو برق ٽپال پتو بدلائي نہ ٿو سگھجي.",
        "emaildisabled": "هيءَ سرزمين برق ٽپال اماڻي نہ ٿي سگھي.",
        "accountcreated": "کاتو کلي چڪو",
-       "accountcreatedtext": "$1 نالي يوزر کاتو کلي چڪو آھي.",
+       "accountcreatedtext": "يوزر کاتو [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|talk]]) جي لاءِ تخليق ٿي چڪو آهي.",
        "createaccount-title": "{{SITENAME}} تي کاتو کولڻ",
        "login-throttled": "توهان تازو ئي لاگ اِن ٿيڻ جون هيڪانديون گھڻيون ڪوششون ڪيون آهن. مهرباني ڪري $1 لاءِ ترسي پوءِ وري ڪوشش ڪريو.",
        "login-abort-generic": "توهان جو لاگ اِن ناڪام ويو.",
index 51d00dc..5b4393f 100644 (file)
        "htmlform-cloner-required": "Zahtevana je vsaj ena vrednost.",
        "htmlform-title-badnamespace": "[[:$1]] ni v imenskem prostoru »{{ns:$2}}«.",
        "htmlform-title-not-creatable": "»$1« je naslov strani, ki ga ni mogoče ustvariti",
-       "htmlform-title-not-exists": "[[:$1]] ne obstaja.",
+       "htmlform-title-not-exists": "$1 ne obstaja.",
        "htmlform-user-not-exists": "<strong>$1</strong> ne obstaja.",
        "htmlform-user-not-valid": "<strong>$1</strong> ni veljavno uporabniško ime.",
        "sqlite-has-fts": "$1 s podporo iskanju polnih besedil",
index 578e39f..62cf97e 100644 (file)
@@ -28,7 +28,8 @@
                        "Nemo bis",
                        "Aktron",
                        "Srdjan m",
-                       "Macofe"
+                       "Macofe",
+                       "Сербијана"
                ]
        },
        "tog-underline": "Подвлачење веза:",
        "tog-minordefault": "Означавај све измене као мање",
        "tog-previewontop": "Прикажи преглед пре оквира за уређивање",
        "tog-previewonfirst": "Прикажи преглед на првој измени",
-       "tog-enotifwatchlistpages": "Ð\9fоÑ\88аÑ\99и Ð¼Ð¸ Ðµ-поÑ\80Ñ\83кÑ\83 када се промени страница или датотека коју надгледам",
-       "tog-enotifusertalkpages": "Ð\9fоÑ\88аÑ\99и Ð¼Ð¸ Ðµ-поÑ\80Ñ\83кÑ\83 када се промени моја страница за разговор",
-       "tog-enotifminoredits": "Ð\9fоÑ\88аÑ\99и Ð¼Ð¸ Ðµ-поÑ\80Ñ\83кÑ\83 и за мање измене у страницама и датотекама",
-       "tog-enotifrevealaddr": "Ð\9fÑ\80икажи Ð¼Ð¾Ñ\98Ñ\83 Ðµ-адресу у порукама обавештења",
+       "tog-enotifwatchlistpages": "Ð\9fоÑ\88аÑ\99и Ð¼Ð¸ Ð¸Ð¼ÐµÑ\98л када се промени страница или датотека коју надгледам",
+       "tog-enotifusertalkpages": "Ð\9fоÑ\88аÑ\99и Ð¼Ð¸ Ð¸Ð¼ÐµÑ\98л када се промени моја страница за разговор",
+       "tog-enotifminoredits": "Ð\9fоÑ\88аÑ\99и Ð¼Ð¸ Ð¸Ð¼ÐµÑ\98л и за мање измене у страницама и датотекама",
+       "tog-enotifrevealaddr": "Ð\9fÑ\80икажи Ð¼Ð¾Ñ\98Ñ\83 Ð¸Ð¼ÐµÑ\98л адресу у порукама обавештења",
        "tog-shownumberswatching": "Прикажи број корисника који надгледају",
        "tog-oldsig": "Текући потпис:",
        "tog-fancysig": "Сматрај потпис као викитекст (без самоповезивања)",
-       "tog-uselivepreview": "Ð\9aоÑ\80иÑ\81Ñ\82и Ñ\82Ñ\80енÑ\83Ñ\82ан преглед",
+       "tog-uselivepreview": "Ð\9aоÑ\80иÑ\81Ñ\82и Ñ\82Ñ\80енÑ\83Ñ\82ни преглед",
        "tog-forceeditsummary": "Упозори ме када не унесем опис измене",
        "tog-watchlisthideown": "Сакриј моје измене са списка надгледања",
        "tog-watchlisthidebots": "Сакриј измене ботова са списка надгледања",
@@ -66,7 +67,7 @@
        "tog-watchlisthideanons": "Сакриј измене анонимних корисника са списка надгледања",
        "tog-watchlisthidepatrolled": "Сакриј патролиране измене са списка надгледања",
        "tog-watchlisthidecategorization": "Сакриј категоризацију страница",
-       "tog-ccmeonemails": "Ð\9fоÑ\88аÑ\99и Ð¼Ð¸ ÐºÐ¾Ð¿Ð¸Ñ\98е Ðµ-поÑ\80Ñ\83ка које пошаљем другим корисницима",
+       "tog-ccmeonemails": "Ð\9fоÑ\88аÑ\99и Ð¼Ð¸ ÐºÐ¾Ð¿Ð¸Ñ\98е Ð¸Ð¼ÐµÑ\98лова које пошаљем другим корисницима",
        "tog-diffonly": "Не приказуј садржај странице испод разлика",
        "tog-showhiddencats": "Прикажи скривене категорије",
        "tog-norollbackdiff": "Изостави разлику након извршеног враћања",
        "category-media-header": "Датотеке у категорији „$1“",
        "category-empty": "<div style=\"margin:2em 1em 0 1em; padding:0.5em; border:1px solid #AAA; text-align:center;\">''Ова категорија тренутно не садржи странице или датотеке.''</div>",
        "hidden-categories": "{{PLURAL:$1|Сакривена категорија|Сакривене категорије}}",
-       "hidden-category-category": "СакÑ\80ивене ÐºÐ°Ñ\82егоÑ\80иÑ\98е",
+       "hidden-category-category": "Скривене категорије",
        "category-subcat-count": "{{PLURAL:$2|1=Ова категорија садржи само следећу поткатегорију.|Ова категорија има {{PLURAL:$1|1=следећу поткатегорију|следеће $1 поткатегорије|следећих $1 поткатегорија}}, од укупно $2.}}",
        "category-subcat-count-limited": "Ова категорија садржи {{PLURAL:$1|следећу поткатегорију|следеће $1 поткатегорије|следећих $1 поткатегорија}}.",
        "category-article-count": "{{PLURAL:$2|1=Ова категорија садржи само следећу страницу.|{{PLURAL:$1|Следећа страница је|Следеће $1 странице су|Следећих $1 страница је}} у овој категорији, од укупно $2.}}",
        "viewhelppage": "Погледај страницу помоћи",
        "categorypage": "Погледај страницу категорија",
        "viewtalkpage": "Погледај разговор",
-       "otherlanguages": "Ð\94Ñ\80Ñ\83ги Ñ\98езиÑ\86и",
+       "otherlanguages": "Ð\9dа Ð¾Ñ\81Ñ\82алим Ñ\98езиÑ\86има",
        "redirectedfrom": "(преусмерено са $1)",
        "redirectpagesub": "Преусмерење",
        "redirectto": "Преусмерава на:",
        "userlogin-helplink2": "Помоћ при пријављивању",
        "userlogin-loggedin": "Већ сте пријављени као {{GENDER:$1|$1}}.\nКористите доњи образац да бисте се пријавили као други корисник.",
        "userlogin-createanother": "Отвори још један налог",
-       "createacct-emailrequired": "Ð\90дÑ\80еÑ\81а Ðµ-поÑ\88Ñ\82е",
-       "createacct-emailoptional": "Ð\90дÑ\80еÑ\81а Ðµ-поÑ\88Ñ\82е (опционо)",
-       "createacct-email-ph": "УнеÑ\81иÑ\82е Ð²Ð°Ñ\88Ñ\83 Ð°Ð´Ñ\80еÑ\81Ñ\83 Ðµ-поÑ\88Ñ\82е",
-       "createacct-another-email-ph": "УнеÑ\81иÑ\82е Ð°Ð´Ñ\80еÑ\81Ñ\83 Ðµ-поÑ\88Ñ\82е",
-       "createaccountmail": "Ð\9aоÑ\80иÑ\81Ñ\82иÑ\82е Ð¿Ñ\80ивÑ\80еменÑ\83, Ñ\81лÑ\83Ñ\87аÑ\98но Ñ\81Ñ\82воÑ\80енÑ\83 Ð»Ð¾Ð·Ð¸Ð½ÐºÑ\83 Ð¸ Ð¿Ð¾Ñ\88аÑ\99иÑ\82е Ð½Ð° Ð½Ð°Ð²ÐµÐ´ÐµÐ½Ñ\83 Ð°Ð´Ñ\80еÑ\81Ñ\83 ÐµÐ»ÐµÐºÑ\82Ñ\80онÑ\81ке Ð¿Ð¾Ñ\88Ñ\82е",
+       "createacct-emailrequired": "Ð\98меÑ\98л Ð°Ð´Ñ\80еÑ\81а",
+       "createacct-emailoptional": "Ð\98меÑ\98л Ð°Ð´Ñ\80еÑ\81а (опционо)",
+       "createacct-email-ph": "УнеÑ\81иÑ\82е Ð\92аÑ\88Ñ\83 Ð¸Ð¼ÐµÑ\98л Ð°Ð´Ñ\80еÑ\81Ñ\83",
+       "createacct-another-email-ph": "УнеÑ\81иÑ\82е Ð¸Ð¼ÐµÑ\98л Ð°Ð´Ñ\80еÑ\81Ñ\83",
+       "createaccountmail": "Ð\9aоÑ\80иÑ\81Ñ\82иÑ\82е Ð¿Ñ\80ивÑ\80еменÑ\83, Ñ\81лÑ\83Ñ\87аÑ\98но Ñ\81Ñ\82воÑ\80енÑ\83 Ð»Ð¾Ð·Ð¸Ð½ÐºÑ\83 Ð¸ Ð¿Ð¾Ñ\88аÑ\99иÑ\82е Ð½Ð° Ð½Ð°Ð²ÐµÐ´ÐµÐ½Ñ\83 Ð¸Ð¼ÐµÑ\98л Ð°Ð´Ñ\80еÑ\81Ñ\83",
        "createacct-realname": "Право име (опционо)",
        "createaccountreason": "Разлог:",
        "createacct-reason": "Разлог",
        "mailmypassword": "Ресетуј лозинку",
        "passwordremindertitle": "{{SITENAME}} — привремена лозинка",
        "passwordremindertext": "Неко, вероватно ви, са ИП адресе $1 је затражио нову лозинку на викију {{SITENAME}} ($4).\nСтворена је привремена лозинка за {{GENDER:$2|корисника|корисницу|корисника}} $2 која гласи $3.\nУколико је ово ваш захтев, сада се пријавите и поставите нову лозинку.\nПривремена лозинка истиче за {{PLURAL:$5|један дан|$5 дана|$5 дана}}.\n\nАко је неко други затражио промену лозинке, или сте се сетили ваше лозинке и не желите да је мењате, занемарите ову поруку.",
-       "noemail": "Ð\9dе Ð¿Ð¾Ñ\81Ñ\82оÑ\98и Ðµ-адреса за {{GENDER:$1|корисника|корисницу}} $1.",
-       "noemailcreate": "Ð\9cоÑ\80аÑ\82е Ð½Ð°Ð²ÐµÑ\81Ñ\82и Ð¸Ñ\81пÑ\80авнÑ\83 Ðµ-адÑ\80еÑ\81Ñ\83",
-       "passwordsent": "Ð\9dова Ð»Ð¾Ð·Ð¸Ð½ÐºÐ° Ñ\98е Ð¿Ð¾Ñ\81лаÑ\82а Ð½Ð° Ðµ-адресу {{GENDER:$1|корисника|кориснице|корисника}} $1.\nПријавите се пошто је примите.",
+       "noemail": "Ð\9dе Ð¿Ð¾Ñ\81Ñ\82оÑ\98и Ð¸Ð¼ÐµÑ\98л адреса за {{GENDER:$1|корисника|корисницу}} $1.",
+       "noemailcreate": "Ð\9cоÑ\80аÑ\82е Ð½Ð°Ð²ÐµÑ\81Ñ\82и Ð¸Ñ\81пÑ\80авнÑ\83 Ð¸Ð¼ÐµÑ\98л Ð°Ð´Ñ\80еÑ\81Ñ\83.",
+       "passwordsent": "Ð\9dова Ð»Ð¾Ð·Ð¸Ð½ÐºÐ° Ñ\98е Ð¿Ð¾Ñ\81лаÑ\82а Ð½Ð° Ð¸Ð¼ÐµÑ\98л адресу {{GENDER:$1|корисника|кориснице|корисника}} $1.\nПријавите се пошто је примите.",
        "blocked-mailpassword": "Вашој ИП адреси је онемогућено уређивање страница, као и могућност захтевања нове лозинке.",
-       "eauthentsent": "Ð\9dа Ð½Ð°Ð²ÐµÐ´ÐµÐ½Ñ\83 Ðµ-адÑ\80еÑ\81Ñ\83 Ñ\98е Ð¿Ð¾Ñ\81лаÑ\82 Ð¿Ð¾Ñ\82вÑ\80дни ÐºÐ¾Ð´.\nÐ\9fÑ\80е Ð½ÐµÐ³Ð¾ Ñ\88Ñ\82о Ð¿Ð¾Ñ\88аÑ\99емо Ð´Ð°Ñ\99Ñ\9aе Ð¿Ð¾Ñ\80Ñ\83ке, Ð¿Ñ\80аÑ\82иÑ\82е Ñ\83пÑ\83Ñ\82Ñ\81Ñ\82ва Ñ\81 Ðµ-поÑ\88Ñ\82е да бисте потврдили да сте ви отворили налог.",
+       "eauthentsent": "Ð\9dа Ð½Ð°Ð²ÐµÐ´ÐµÐ½Ñ\83 Ð¸Ð¼ÐµÑ\98л Ð°Ð´Ñ\80еÑ\81Ñ\83 Ñ\98е Ð¿Ð¾Ñ\81лаÑ\82 Ð¿Ð¾Ñ\82вÑ\80дни ÐºÐ¾Ð´.\nÐ\9fÑ\80е Ð½ÐµÐ³Ð¾ Ñ\88Ñ\82о Ð¿Ð¾Ñ\88аÑ\99емо Ð´Ð°Ñ\99Ñ\9aе Ð¿Ð¾Ñ\80Ñ\83ке, Ð¿Ñ\80аÑ\82иÑ\82е Ñ\83пÑ\83Ñ\82Ñ\81Ñ\82ва Ñ\81 Ð¸Ð¼ÐµÑ\98ла да бисте потврдили да сте ви отворили налог.",
        "throttled-mailpassword": "Порука за промену лозинке је послата у {{PLURAL:$1|1=последњих сат времена|последња $1 сата|последњих $1 сати}}.\nДа бисмо спречили злоупотребу, подсетник шаљемо само једном у року од {{PLURAL:$1|1=сат времена|$1 сата|$1 сати}}.",
        "mailerror": "Грешка при слању поруке: $1",
        "acct_creation_throttle_hit": "Посетиоци овог викија који користе вашу ИП адресу су већ отворили {{PLURAL:$1|1=један налог|$1 налога|$1 налога}} претходни дан, што је највећи дозвољени број у том временском периоду.\nЗбог тога посетиоци с ове ИП адресе тренутно не могу отворити више налога.",
-       "emailauthenticated": "Ð\92аÑ\88а Ðµ-адреса је потврђена $2 у $3.",
-       "emailnotauthenticated": "Ð\92аÑ\88а Ðµ-адреса још није потврђена.\nПоруке неће бити послате ни у једном од следећих случајева.",
-       "noemailprefs": "УнеÑ\81иÑ\82е Ðµ-адресу како би ове могућности радиле.",
-       "emailconfirmlink": "Ð\9fоÑ\82вÑ\80диÑ\82е Ñ\81воÑ\98Ñ\83 Ðµ-адресу",
-       "invalidemailaddress": "Ð\95-адреса не може бити прихваћена јер је неисправног облика.\nУнесите исправну адресу или оставите празно поље.",
-       "cannotchangeemail": "Ð\9dа Ð¾Ð²Ð¾Ð¼ Ð²Ð¸ÐºÐ¸Ñ\98Ñ\83 Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ\82е Ð¿Ñ\80омениÑ\82и Ðµ-адресу налога.",
-       "emaildisabled": "Ð\9eваÑ\98 Ñ\81аÑ\98Ñ\82 Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ñ\88аÑ\99е Ðµ-поÑ\80Ñ\83ке.",
+       "emailauthenticated": "Ð\92аÑ\88а Ð¸Ð¼ÐµÑ\98л адреса је потврђена $2 у $3.",
+       "emailnotauthenticated": "Ð\92аÑ\88а Ð¸Ð¼ÐµÑ\98л адреса још није потврђена.\nПоруке неће бити послате ни у једном од следећих случајева.",
+       "noemailprefs": "УнеÑ\81иÑ\82е Ð¸Ð¼ÐµÑ\98л адресу како би ове могућности радиле.",
+       "emailconfirmlink": "Ð\9fоÑ\82вÑ\80диÑ\82е Ñ\81воÑ\98Ñ\83 Ð¸Ð¼ÐµÑ\98л адресу",
+       "invalidemailaddress": "Ð\98меÑ\98л адреса не може бити прихваћена јер је неисправног облика.\nУнесите исправну адресу или оставите празно поље.",
+       "cannotchangeemail": "Ð\9dа Ð¾Ð²Ð¾Ð¼ Ð²Ð¸ÐºÐ¸Ñ\98Ñ\83 Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ\82е Ð¿Ñ\80омениÑ\82и Ð¸Ð¼ÐµÑ\98л адресу налога.",
+       "emaildisabled": "Ð\9eваÑ\98 Ñ\81аÑ\98Ñ\82 Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ñ\88аÑ\99е Ð¸Ð¼ÐµÑ\98лове.",
        "accountcreated": "Налог је отворен",
        "accountcreatedtext": "Кориснички налог [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|talk]]) је отворен.",
        "createaccount-title": "Отварање корисничког налога за {{SITENAME}}",
-       "createaccount-text": "Ð\9dеко Ñ\98е Ð¾Ñ\82воÑ\80ио Ð½Ð°Ð»Ð¾Ð³ Ñ\81 Ð²Ð°Ñ\88ом Ðµ-адресом на {{SITENAME}} ($4) под именом $2 и лозинком $3.\nПријавите се и промените своју лозинку.\n\nАко је ово грешка, занемарите ову поруку.",
+       "createaccount-text": "Ð\9dеко Ñ\98е Ð¾Ñ\82воÑ\80ио Ð½Ð°Ð»Ð¾Ð³ Ñ\81 Ð²Ð°Ñ\88ом Ð¸Ð¼ÐµÑ\98л адресом на {{SITENAME}} ($4) под именом $2 и лозинком $3.\nПријавите се и промените своју лозинку.\n\nАко је ово грешка, занемарите ову поруку.",
        "login-throttled": "Превише пута сте покушали да се пријавите.\nМолимо вас да сачекате $1 пре него што покушате поново.",
        "login-abort-generic": "Неуспешна пријава – прекинуто",
        "login-migrated-generic": "Ваш налог је мигриран и ваше корисничко више не постоји на овом викију.",
        "pt-createaccount": "Отвори налог",
        "pt-userlogout": "Одјави ме",
        "php-mail-error-unknown": "Непозната грешка у функцији PHP mail().",
-       "user-mail-no-addy": "Ð\9fокÑ\83Ñ\88али Ñ\81Ñ\82е Ð´Ð° Ð¿Ð¾Ñ\88аÑ\99еÑ\82е Ð¿Ð¾Ñ\80Ñ\83кÑ\83 Ð±ÐµÐ· Ðµ-адресе.",
-       "user-mail-no-body": "Ð\9fокÑ\83Ñ\88ано Ñ\81лаÑ\9aе ÐµÐ»ÐµÐºÑ\82Ñ\80онÑ\81ке Ð¿Ð¾Ñ\80Ñ\83ке с празним или неразумно кратким садржајем.",
+       "user-mail-no-addy": "Ð\9fокÑ\83Ñ\88али Ñ\81Ñ\82е Ð´Ð° Ð¿Ð¾Ñ\88аÑ\99еÑ\82е Ð¿Ð¾Ñ\80Ñ\83кÑ\83 Ð±ÐµÐ· Ð¸Ð¼ÐµÑ\98л адресе.",
+       "user-mail-no-body": "Ð\9fокÑ\83Ñ\88ано Ñ\81лаÑ\9aе Ð¸Ð¼ÐµÑ\98ла с празним или неразумно кратким садржајем.",
        "changepassword": "Промени лозинку",
        "resetpass_announce": "Да бисте завршили пријаву, подесите нову лозинку овде.",
        "resetpass_text": "<!-- Овде унесите текст -->",
        "resetpass-expired-soft": "Ваша лозинка је истекла и морате поставити нову. Поставите нову лозинку или кликните „{{int:resetpass-submit-cancel}}“ да је поставите касније.",
        "resetpass-validity-soft": "Ваша лозинка није ваљана: $1\n\nМолимо изаберите нову или кликните „{{int:resetpass-submit-cancel}}“ да ресетујете касније.",
        "passwordreset": "Обнављање лозинке",
-       "passwordreset-text-one": "Ð\9fопÑ\83ниÑ\82е Ð¾Ð²Ð°Ñ\98 Ð¾Ð±Ñ\80азаÑ\86 Ð´Ð° Ð±Ð¸Ñ\81Ñ\82е Ð´Ð¾Ð±Ð¸Ð»Ð¸ Ð¿Ñ\80ивÑ\80еменÑ\83 Ð»Ð¾Ð·Ð¸Ð½ÐºÑ\83 Ð½Ð° Ðµ-поÑ\88Ñ\82Ñ\83.",
-       "passwordreset-text-many": "{{PLURAL:$1|Ð\98Ñ\81пÑ\83ниÑ\82е Ñ\98едно Ð¾Ð´ Ð¿Ð¾Ñ\99а ÐºÐ°ÐºÐ¾ Ð±Ð¸Ñ\81Ñ\82е Ð´Ð¾Ð±Ð¸Ð»Ð¸ Ð¿Ñ\80ивÑ\80еменÑ\83 Ð»Ð¾Ð·Ð¸Ð½ÐºÑ\83 Ð½Ð° Ðµ-поÑ\88Ñ\82Ñ\83.}}",
+       "passwordreset-text-one": "Ð\9fопÑ\83ниÑ\82е Ð¾Ð²Ð°Ñ\98 Ð¾Ð±Ñ\80азаÑ\86 Ð´Ð° Ð±Ð¸Ñ\81Ñ\82е Ð´Ð¾Ð±Ð¸Ð»Ð¸ Ð¿Ñ\80ивÑ\80еменÑ\83 Ð»Ð¾Ð·Ð¸Ð½ÐºÑ\83 Ð½Ð° Ð¸Ð¼ÐµÑ\98л.",
+       "passwordreset-text-many": "{{PLURAL:$1|Ð\98Ñ\81пÑ\83ниÑ\82е Ñ\98едно Ð¾Ð´ Ð¿Ð¾Ñ\99а ÐºÐ°ÐºÐ¾ Ð±Ð¸Ñ\81Ñ\82е Ð´Ð¾Ð±Ð¸Ð»Ð¸ Ð¿Ñ\80ивÑ\80еменÑ\83 Ð»Ð¾Ð·Ð¸Ð½ÐºÑ\83 Ð½Ð° Ð¸Ð¼ÐµÑ\98л.}}",
        "passwordreset-disabled": "Обнављање лозинке је онемогућено на овом викију.",
-       "passwordreset-emaildisabled": "Ð\95-поÑ\88Ñ\82а Ñ\98е Ð¾Ð½ÐµÐ¼Ð¾Ð³Ñ\83Ñ\9bена на овом викију.",
+       "passwordreset-emaildisabled": "Ð\98меÑ\98л Ñ\98е Ð¾Ð½ÐµÐ¼Ð¾Ð³Ñ\83Ñ\9bен на овом викију.",
        "passwordreset-username": "Корисничко име:",
        "passwordreset-domain": "Домен:",
        "passwordreset-capture": "Погледати крајњу поруку?",
-       "passwordreset-capture-help": "Ð\90ко Ð¾Ð·Ð½Ð°Ñ\87иÑ\82е Ð¾Ð²Ñ\83 ÐºÑ\83Ñ\9bиÑ\86Ñ\83, Ðµ-поÑ\80Ñ\83ка Ñ\81 Ð¿Ñ\80ивÑ\80еменом Ð»Ð¾Ð·Ð¸Ð½ÐºÐ¾Ð¼ Ñ\9bе Ð±Ð¸Ñ\82и Ð¿Ñ\80иказана Ð¸ Ð¿Ð¾Ñ\81лаÑ\82а кориснику.",
-       "passwordreset-email": "Ð\95-адреса:",
+       "passwordreset-capture-help": "Ð\90ко Ð¾Ð·Ð½Ð°Ñ\87иÑ\82е Ð¾Ð²Ñ\83 ÐºÑ\83Ñ\9bиÑ\86Ñ\83, Ð¸Ð¼ÐµÑ\98л Ñ\81 Ð¿Ñ\80ивÑ\80еменом Ð»Ð¾Ð·Ð¸Ð½ÐºÐ¾Ð¼ Ñ\9bе Ð±Ð¸Ñ\82и Ð¿Ñ\80иказан Ð¸ Ð¿Ð¾Ñ\81лаÑ\82 кориснику.",
+       "passwordreset-email": "Ð\98меÑ\98л адреса:",
        "passwordreset-emailtitle": "Детаљи налога на викију {{SITENAME}}",
-       "passwordreset-emailtext-ip": "Неко, вероватно Ви, са ИП адресе $1 је затражио нову лозинку на викију {{SITENAME}} ($4).\nСледећи {{PLURAL:$3|кориснички налог је повезан|кориснички налози су повезани}} с овом е-адресом:\n\n$2\n\n{{PLURAL:$3|Привремена лозинка истиче|Привремене лозинке истичу}} за {{PLURAL:$5|један дан|$5 дана}}.\nПријавите се и изаберите нову лозинку. Ако је неко други захтевао ову радњу или сте се сетили лозинке и не желите да је мењате, занемарите ову поруку и наставите користити стару лозинку.",
-       "passwordreset-emailtext-user": "{{GENDER:$1|Ð\9aоÑ\80иÑ\81ник Ñ\98е Ð·Ð°Ñ\82Ñ\80ажио|Ð\9aоÑ\80иÑ\81ниÑ\86а Ñ\98е Ð·Ð°Ñ\82Ñ\80ажила}} Ð¿Ð¾Ð´Ñ\81еÑ\82ник Ð¾ Ð¿Ð¾Ð´Ð°Ñ\86има Ð·Ð° Ð¿Ñ\80иÑ\98авÑ\83 Ð½Ð° Ð²Ð¸ÐºÐ¸Ñ\98Ñ\83 {{SITENAME}} ($4).\nСледеÑ\9bи {{PLURAL:$3|коÑ\80иÑ\81ниÑ\87ки Ð½Ð°Ð»Ð¾Ð³ Ñ\98е Ð¿Ð¾Ð²ÐµÐ·Ð°Ð½|коÑ\80иÑ\81ниÑ\87ки Ð½Ð°Ð»Ð¾Ð·Ð¸ Ñ\81Ñ\83 Ð¿Ð¾Ð²ÐµÐ·Ð°Ð½Ð¸}} Ñ\81 Ð¾Ð²Ð¾Ð¼ Ðµ-адресом:\n\n$2\n\n{{PLURAL:$3|Привремена лозинка истиче|Привремене лозинке истичу}} за {{PLURAL:$5|један дан|$5 дана}}.\nПријавите се и изаберите нову лозинку. Ако је неко други захтевао ову радњу или сте се сетили лозинке и не желите да је мењате, занемарите ову поруку.",
+       "passwordreset-emailtext-ip": "Неко (вероватно Ви, са ИП адресе $1) је затражио нову лозинку на викију {{SITENAME}} ($4).\nСледећи {{PLURAL:$3|кориснички налог је повезан|кориснички налози су повезани}} с овом имејл адресом:\n\n$2\n\n{{PLURAL:$3|Привремена лозинка истиче|Привремене лозинке истичу}} за {{PLURAL:$5|један дан|$5 дана}}.\nПријавите се и изаберите нову лозинку. Ако је неко други захтевао ову радњу или сте се сетили лозинке и не желите да је мењате, занемарите ову поруку и наставите користити стару лозинку.",
+       "passwordreset-emailtext-user": "{{GENDER:$1|Ð\9aоÑ\80иÑ\81ник Ñ\98е Ð·Ð°Ñ\82Ñ\80ажио|Ð\9aоÑ\80иÑ\81ниÑ\86а Ñ\98е Ð·Ð°Ñ\82Ñ\80ажила}} Ð¿Ð¾Ð´Ñ\81еÑ\82ник Ð¾ Ð¿Ð¾Ð´Ð°Ñ\86има Ð·Ð° Ð¿Ñ\80иÑ\98авÑ\83 Ð½Ð° Ð²Ð¸ÐºÐ¸Ñ\98Ñ\83 {{SITENAME}} ($4).\nСледеÑ\9bи {{PLURAL:$3|коÑ\80иÑ\81ниÑ\87ки Ð½Ð°Ð»Ð¾Ð³ Ñ\98е Ð¿Ð¾Ð²ÐµÐ·Ð°Ð½|коÑ\80иÑ\81ниÑ\87ки Ð½Ð°Ð»Ð¾Ð·Ð¸ Ñ\81Ñ\83 Ð¿Ð¾Ð²ÐµÐ·Ð°Ð½Ð¸}} Ñ\81 Ð¾Ð²Ð¾Ð¼ Ð¸Ð¼ÐµÑ\98л адресом:\n\n$2\n\n{{PLURAL:$3|Привремена лозинка истиче|Привремене лозинке истичу}} за {{PLURAL:$5|један дан|$5 дана}}.\nПријавите се и изаберите нову лозинку. Ако је неко други захтевао ову радњу или сте се сетили лозинке и не желите да је мењате, занемарите ову поруку.",
        "passwordreset-emailelement": "Корисничко име: \n$1\n\nПривремена лозинка: \n$2",
-       "passwordreset-emailsent": "Ð\9fодÑ\81еÑ\82ник Ð¾ Ð»Ð¾Ð·Ð¸Ð½Ñ\86и Ñ\98е Ð¿Ð¾Ñ\81лаÑ\82 Ð½Ð° Ð²Ð°Ñ\88Ñ\83 Ð°Ð´Ñ\80еÑ\81Ñ\83.",
-       "passwordreset-emailsent-capture": "Ð\9fоÑ\81лаÑ\82 Ñ\98е Ð¿Ð¾Ð´Ñ\81еÑ\82ник Ð¿Ñ\80еко Ðµ-поÑ\88Ñ\82е (пÑ\80иказан Ð´Ð¾Ð»Ðµ).",
-       "passwordreset-emailerror-capture": "Ð\95-поÑ\80Ñ\83ка Ð·Ð° Ñ\80еÑ\81еÑ\82оваÑ\9aе Ð»Ð¾Ð·Ð¸Ð½ÐºÐµ, Ð¿Ñ\80иказана Ð¸Ñ\81под Ñ\98е Ð¿Ð¾Ñ\81лаÑ\82а, али слање {{GENDER:$2|кориснику|корисници}} није успело: $1",
-       "changeemail": "Ð\9fÑ\80омени Ð¸Ð»Ð¸ Ñ\83клони Ðµ-адресу",
-       "changeemail-header": "Промените е-адресу налога",
+       "passwordreset-emailsent": "Ð\90ко Ñ\98е Ð¾Ð²Ð¾ Ð¸Ð¼ÐµÑ\98л Ð°Ð´Ñ\80еÑ\81а Ñ\80егиÑ\81Ñ\82ована Ð½Ð° Ð\92аÑ\88ем Ð½Ð°Ð»Ð¾Ð³Ñ\83, Ð¿Ð¾Ð´Ñ\81еÑ\82ник Ð¾ Ð»Ð¾Ð·Ð¸Ð½Ñ\86и Ñ\9bе Ð±Ð¸Ñ\82и Ð¿Ð¾Ñ\81лаÑ\82 Ð½Ð° Ð¸Ð¼ÐµÑ\98л.",
+       "passwordreset-emailsent-capture": "Ð\9fоÑ\81лаÑ\82 Ñ\98е Ð¿Ð¾Ð´Ñ\81еÑ\82ник Ð¿Ñ\80еко Ð¸Ð¼ÐµÑ\98ла, ÐºÐ¾Ñ\98и Ñ\98е Ð¿Ñ\80иказан Ð´Ð¾Ð»Ðµ.",
+       "passwordreset-emailerror-capture": "Ð\98меÑ\98л Ð·Ð° Ñ\80еÑ\81еÑ\82оваÑ\9aе Ð»Ð¾Ð·Ð¸Ð½ÐºÐµ, Ð¿Ñ\80иказан Ð¸Ñ\81под Ñ\98е Ð¿Ð¾Ñ\81лаÑ\82, али слање {{GENDER:$2|кориснику|корисници}} није успело: $1",
+       "changeemail": "Ð\9fÑ\80омени Ð¸Ð»Ð¸ Ñ\83клони Ð¸Ð¼ÐµÑ\98л адресу",
+       "changeemail-header": "Попуните овај образац да би сте променили Вашу имејл адресу. Ако жели да ускратите приступ било којој имејл адреси Вашем налогу, оставите празно поље за нову имејл адресу приликом попуњавање обрасца.",
        "changeemail-passwordrequired": "Морате унети лозинку да би потврдили ову измену.",
        "changeemail-no-info": "Морате бити пријављени да бисте приступили овој страници.",
-       "changeemail-oldemail": "ТÑ\80енÑ\83Ñ\82на Ðµ-адреса:",
-       "changeemail-newemail": "Ð\9dова Ðµ-адреса:",
+       "changeemail-oldemail": "ТÑ\80енÑ\83Ñ\82на Ð¸Ð¼ÐµÑ\98л адреса:",
+       "changeemail-newemail": "Ð\9dова Ð¸Ð¼ÐµÑ\98л адреса:",
        "changeemail-none": "(ништа)",
        "changeemail-password": "Ваша лозинка:",
        "changeemail-submit": "Промени",
        "nowiki_sample": "Убаците необликован текст овде",
        "nowiki_tip": "Занемари вики обликовање",
        "image_sample": "Пример.jpg",
-       "image_tip": "УгÑ\80аÑ\92ена Ð´Ð°Ñ\82оÑ\82ека",
+       "image_tip": "УбаÑ\86иваÑ\9aе Ð´Ð°Ñ\82оÑ\82еке",
        "media_sample": "Пример.ogg",
        "media_tip": "Веза",
        "sig_tip": "Ваш потпис са тренутним временом",
        "subject-preview": "Преглед теме:",
        "previewerrortext": "Догодила се грешка приликом приказивања ваших измена.",
        "blockedtitle": "Корисник је блокиран",
-       "blockedtext": "<strong>Ð\92аÑ\88е ÐºÐ¾Ñ\80иÑ\81ниÑ\87ко Ð¸Ð¼Ðµ Ð¸Ð»Ð¸ Ð\98Ð\9f Ð°Ð´Ñ\80еÑ\81а Ñ\98е Ð±Ð»Ð¾ÐºÐ¸Ñ\80ана.</strong>\n\nÐ\91локиÑ\80аÑ\9aе Ñ\98е {{GENDER:$4|извÑ\80Ñ\88ио|извÑ\80Ñ\88ила}} $1.\nРазлог: <em>$2</em>.\n\n* Ð\94аÑ\82Ñ\83м Ð±Ð»Ð¾ÐºÐ¸Ñ\80аÑ\9aа: $8\n* Ð\91локиÑ\80аÑ\9aе Ð¸Ñ\81Ñ\82иÑ\87е: $6\n* Ð\98ме ÐºÐ¾Ñ\80иÑ\81ника: $7\n\nÐ\9eбÑ\80аÑ\82иÑ\82е Ñ\81е {{GENDER:$4|коÑ\80иÑ\81никÑ\83|коÑ\80иÑ\81ниÑ\86и}} $1 Ð¸Ð»Ð¸ [[{{MediaWiki:Grouppage-sysop}}|админиÑ\81Ñ\82Ñ\80аÑ\82оÑ\80Ñ\83]] Ð´Ð° Ñ\80азÑ\98аÑ\81ниÑ\82е Ñ\81Ñ\82ваÑ\80.\nÐ\9dе Ð¼Ð¾Ð¶ÐµÑ\82е ÐºÐ¾Ñ\80иÑ\81Ñ\82иÑ\82и Ð¼Ð¾Ð³Ñ\83Ñ\9bноÑ\81Ñ\82 â\80\9eÐ\9fоÑ\88аÑ\99и Ð¿Ð¾Ñ\80Ñ\83кÑ\83 Ð¾Ð²Ð¾Ð¼ ÐºÐ¾Ñ\80иÑ\81никÑ\83â\80\9c Ð°ÐºÐ¾ Ð½Ð¸Ñ\81Ñ\82е Ñ\83нели Ð¸Ñ\81пÑ\80авнÑ\83 Ðµ-адресу у [[Special:Preferences|подешавањима]].\nВаша блокирана ИП адреса је $3, а ID блокирања $5.\nНаведите све податке изнад при стварању било каквих упита.",
-       "autoblockedtext": "Ð\92аÑ\88а Ð\98Ð\9f Ð°Ð´Ñ\80еÑ\81а Ñ\98е Ð±Ð»Ð¾ÐºÐ¸Ñ\80ана Ñ\98еÑ\80 Ñ\98Ñ\83 Ñ\98е Ñ\83поÑ\82Ñ\80ебÑ\99авао Ð´Ñ\80Ñ\83ги ÐºÐ¾Ñ\80иÑ\81ник, ÐºÐ¾Ð³Ð° Ñ\98е {{GENDER:$4|блокиÑ\80ао|блокиÑ\80ала}} $1.\nРазлог:\n\n:<em>$2</em>\n\n* Ð\94аÑ\82Ñ\83м Ð±Ð»Ð¾ÐºÐ¸Ñ\80аÑ\9aа: $8\n* Ð\91локиÑ\80аÑ\9aе Ð¸Ñ\81Ñ\82иÑ\87е: $6\n* Ð\98ме ÐºÐ¾Ñ\80иÑ\81ника: $7\n\nÐ\9eбÑ\80аÑ\82иÑ\82е Ñ\81е {{GENDER:$4|коÑ\80иÑ\81никÑ\83|коÑ\80иÑ\81ниÑ\86и}} $1 Ð¸Ð»Ð¸ [[{{MediaWiki:Grouppage-sysop}}|админиÑ\81Ñ\82Ñ\80аÑ\82оÑ\80Ñ\83]] Ð´Ð° Ñ\80азÑ\98аÑ\81ниÑ\82е Ñ\81Ñ\82ваÑ\80.\n\nÐ\9dе Ð¼Ð¾Ð¶ÐµÑ\82е ÐºÐ¾Ñ\80иÑ\81Ñ\82иÑ\82и Ð¼Ð¾Ð³Ñ\83Ñ\9bноÑ\81Ñ\82 â\80\9eÐ\9fоÑ\88аÑ\99и Ð¿Ð¾Ñ\80Ñ\83кÑ\83 Ð¾Ð²Ð¾Ð¼ ÐºÐ¾Ñ\80иÑ\81никÑ\83â\80\9c Ð°ÐºÐ¾ Ð½Ð¸Ñ\81Ñ\82е Ñ\83нели Ð¸Ñ\81пÑ\80авнÑ\83 Ðµ-адресу у [[Special:Preferences|подешавањима]].\n\nВаша блокирана ИП адреса је $3, а ID $5.\nНаведите све податке изнад при стварању било каквих упита.",
+       "blockedtext": "<strong>Ð\92аÑ\88е ÐºÐ¾Ñ\80иÑ\81ниÑ\87ко Ð¸Ð¼Ðµ Ð¸Ð»Ð¸ Ð\98Ð\9f Ð°Ð´Ñ\80еÑ\81а Ñ\98е Ð±Ð»Ð¾ÐºÐ¸Ñ\80ана.</strong>\n\nÐ\91локиÑ\80аÑ\9aе Ñ\98е {{GENDER:$4|извÑ\80Ñ\88ио|извÑ\80Ñ\88ила}} $1.\nРазлог: <em>$2</em>.\n\n* Ð\94аÑ\82Ñ\83м Ð±Ð»Ð¾ÐºÐ¸Ñ\80аÑ\9aа: $8\n* Ð\91локиÑ\80аÑ\9aе Ð¸Ñ\81Ñ\82иÑ\87е: $6\n* Ð\98ме ÐºÐ¾Ñ\80иÑ\81ника: $7\n\nÐ\9eбÑ\80аÑ\82иÑ\82е Ñ\81е {{GENDER:$4|коÑ\80иÑ\81никÑ\83|коÑ\80иÑ\81ниÑ\86и}} $1 Ð¸Ð»Ð¸ [[{{MediaWiki:Grouppage-sysop}}|админиÑ\81Ñ\82Ñ\80аÑ\82оÑ\80Ñ\83]] Ð´Ð° Ñ\80азÑ\98аÑ\81ниÑ\82е Ñ\81Ñ\82ваÑ\80.\nÐ\9dе Ð¼Ð¾Ð¶ÐµÑ\82е ÐºÐ¾Ñ\80иÑ\81Ñ\82иÑ\82и Ð¼Ð¾Ð³Ñ\83Ñ\9bноÑ\81Ñ\82 â\80\9eÐ\9fоÑ\88аÑ\99и Ð¸Ð¼ÐµÑ\98л Ð¾Ð²Ð¾Ð¼ ÐºÐ¾Ñ\80иÑ\81никÑ\83â\80\9c Ð°ÐºÐ¾ Ð½Ð¸Ñ\81Ñ\82е Ñ\83нели Ð¸Ñ\81пÑ\80авнÑ\83 Ð¸Ð¼ÐµÑ\98л адресу у [[Special:Preferences|подешавањима]].\nВаша блокирана ИП адреса је $3, а ID блокирања $5.\nНаведите све податке изнад при стварању било каквих упита.",
+       "autoblockedtext": "Ð\92аÑ\88а Ð\98Ð\9f Ð°Ð´Ñ\80еÑ\81а Ñ\98е Ð±Ð»Ð¾ÐºÐ¸Ñ\80ана Ñ\98еÑ\80 Ñ\98Ñ\83 Ñ\98е Ñ\83поÑ\82Ñ\80ебÑ\99авао Ð´Ñ\80Ñ\83ги ÐºÐ¾Ñ\80иÑ\81ник, ÐºÐ¾Ð³Ð° Ñ\98е {{GENDER:$4|блокиÑ\80ао|блокиÑ\80ала}} $1.\nРазлог:\n\n:<em>$2</em>\n\n* Ð\94аÑ\82Ñ\83м Ð±Ð»Ð¾ÐºÐ¸Ñ\80аÑ\9aа: $8\n* Ð\91локиÑ\80аÑ\9aе Ð¸Ñ\81Ñ\82иÑ\87е: $6\n* Ð\98ме ÐºÐ¾Ñ\80иÑ\81ника: $7\n\nÐ\9eбÑ\80аÑ\82иÑ\82е Ñ\81е {{GENDER:$4|коÑ\80иÑ\81никÑ\83|коÑ\80иÑ\81ниÑ\86и}} $1 Ð¸Ð»Ð¸ [[{{MediaWiki:Grouppage-sysop}}|админиÑ\81Ñ\82Ñ\80аÑ\82оÑ\80Ñ\83]] Ð´Ð° Ñ\80азÑ\98аÑ\81ниÑ\82е Ñ\81Ñ\82ваÑ\80.\n\nÐ\9dе Ð¼Ð¾Ð¶ÐµÑ\82е ÐºÐ¾Ñ\80иÑ\81Ñ\82иÑ\82и Ð¼Ð¾Ð³Ñ\83Ñ\9bноÑ\81Ñ\82 â\80\9eÐ\9fоÑ\88аÑ\99и Ð¸Ð¼ÐµÑ\98л Ð¾Ð²Ð¾Ð¼ ÐºÐ¾Ñ\80иÑ\81никÑ\83â\80\9c Ð°ÐºÐ¾ Ð½Ð¸Ñ\81Ñ\82е Ñ\83нели Ð¸Ñ\81пÑ\80авнÑ\83 Ð¸Ð¼ÐµÑ\98л адресу у [[Special:Preferences|подешавањима]].\n\nВаша блокирана ИП адреса је $3, а ID $5.\nНаведите све податке изнад при стварању било каквих упита.",
        "blockednoreason": "разлог није наведен",
        "whitelistedittext": "За уређивање странице је потребно да будете $1.",
-       "confirmedittext": "Ð\9cоÑ\80аÑ\82е Ð´Ð° Ð¿Ð¾Ñ\82вÑ\80диÑ\82е Ñ\81воÑ\98Ñ\83 Ðµ-адÑ\80еÑ\81Ñ\83 Ð¿Ñ\80е Ñ\83Ñ\80еÑ\92иваÑ\9aа Ñ\81Ñ\82Ñ\80аниÑ\86а.\nÐ\9fоÑ\81Ñ\82авиÑ\82е Ð¸ Ð¿Ð¾Ñ\82вÑ\80диÑ\82е адресу преко [[Special:Preferences|подешавања]].",
+       "confirmedittext": "Ð\9cоÑ\80аÑ\82е Ð´Ð° Ð¿Ð¾Ñ\82вÑ\80диÑ\82е Ñ\81воÑ\98Ñ\83 Ð¸Ð¼ÐµÑ\98л Ð°Ð´Ñ\80еÑ\81Ñ\83 Ð¿Ñ\80е Ñ\83Ñ\80еÑ\92иваÑ\9aа Ñ\81Ñ\82Ñ\80аниÑ\86а.\nÐ\9fоÑ\81Ñ\82авиÑ\82е Ð¸ Ð¿Ð¾Ñ\82вÑ\80диÑ\82е Ð¸Ð¼ÐµÑ\98л адресу преко [[Special:Preferences|подешавања]].",
        "nosuchsectiontitle": "Не могу да пронађем одељак",
        "nosuchsectiontext": "Покушали сте да уредите одељак који не постоји.\nМожда је премештен или обрисан док сте прегледали страницу.",
        "loginreqtitle": "Потребна је пријава",
        "protectedpagewarning": "<strong>Упозорење: ова страница је заштићена, тако да само администратори могу да је мењају.</strong>\nПоследњи запис у дневнику је приказан испод:",
        "semiprotectedpagewarning": "'''Напомена:''' ова страница је заштићена, тако да само регистровани корисници могу да је уређују.\nПоследњи запис у дневнику је приказан испод:",
        "cascadeprotectedwarning": "<strong>Упозорење:</strong> ова страница је заштићена тако да је могу уређивати само администратори, јер је она укључена у {{PLURAL:$1|следећу страницу која је|следеће странице које су}} заштићене „преносивом“ заштитом:",
-       "titleprotectedwarning": "'''Упозорење: ова страница је заштићена тако да је могу направити само корисници [[Special:ListGroupRights|с одређеним правима]].'''",
+       "titleprotectedwarning": "<strong>Упозорење: ову страницу могу направити само корисници [[Special:ListGroupRights|с одређеним правима]].</strong>\nИспод су наведени последњи записи у дневнику:",
        "templatesused": "{{PLURAL:$1|Шаблон|Шаблони}} на овој страници:",
        "templatesusedpreview": "{{PLURAL:$1|Шаблон|Шаблони}} у овом прегледу:",
        "templatesusedsection": "{{PLURAL:$1|Шаблон|Шаблони}} у овом одељку:",
        "permissionserrors": "Грешка у дозволи",
        "permissionserrorstext": "Немате овлашћење за ову радњу из {{PLURAL:$1|1=следећег|следећих}} разлога:",
        "permissionserrorstext-withaction": "Немате дозволу за $2 из {{PLURAL:$1|следећег|следећих}} разлога:",
-       "recreate-moveddeleted-warn": "'''Упозорење: поново правите страницу која је претходно обрисана.'''\n\nРазмотрите да ли је прикладно да наставите с уређивањем ове странице.\nОвде је наведена историја брисања и премештања с образложењем:",
+       "recreate-moveddeleted-warn": "<strong>Упозорење: поново правите страницу која је претходно обрисана.</strong>\n\nРазмотрите да ли је прикладно да наставите с уређивањем ове странице.\nОвде је наведена историја брисања и премештања с образложењем:",
        "moveddeleted-notice": "Ова страница је обрисана.\nИсторија њеног брисања и премештања налази се испод:",
        "moveddeleted-notice-recent": "Жао нам је, ова страница је недавно обрисана (у последњих 24 сата).\nОвде је наведена историја брисања и премештања с образложењем.",
        "log-fulllog": "Погледај целу историју",
        "revdelete-selected-text": "{{PLURAL:$1|Изабрана измена|Изабране измене}} [[:$2]]:",
        "revdelete-selected-file": "{{PLURAL:$1|Изабрана верзија датотеке|Изабране верзије датотеке}} [[:$2]]:",
        "logdelete-selected": "{{PLURAL:$1|Изабрана ставка у историји|Изабране ставке у историји}}:",
-       "revdelete-text-text": "Избрисане измене ће и даље бити видљиве у историји странице, али делови њиховог садржаја неће бити јавно доступну.",
-       "revdelete-text-file": "Избрисане верзије датотеке ће и даље бити видљиве у историји датотеке, али делови њиховог садржаја неће бити јавно доступну.",
-       "logdelete-text": "Избрисани уноси у дневницима ће и даље бити видљиви у дневницима, али делови њиховог садржаја неће бити јавно доступну.",
+       "revdelete-text-text": "Избрисане измене ће и даље бити видљиве у историји странице, али делови њиховог садржаја неће бити јавно доступни.",
+       "revdelete-text-file": "Избрисане верзије датотеке ће и даље бити видљиве у историји датотеке, али делови њиховог садржаја неће бити јавно доступни.",
+       "logdelete-text": "Избрисани уноси у дневницима ће и даље бити видљиви у дневницима, али делови њиховог садржаја неће бити јавно доступни.",
        "revdelete-text-others": "Остали администратори ће и даље моћи да приступе скривеном садржају и врате га, осим ако се поставе додатна ограничења.",
        "revdelete-confirm": "Потврдите да намеравате ово урадити, да разумете последице и да то чините у складу с [[{{MediaWiki:Policy-url}}|правилима]].",
        "revdelete-suppress-text": "Сакривање измена би требало користити <strong>само</strong> у следећим случајевима:\n* злонамерни или погрдни подаци\n* неприкладни лични подаци\n*: <em>кућна адреса и број телефона, број кредитне картице, ЈМБГ итд.</em>",
        "prefs-watchlist-token": "Жетон списка надгледања:",
        "prefs-misc": "Друга подешавања",
        "prefs-resetpass": "Промени лозинку",
-       "prefs-changeemail": "Ð\9fÑ\80омени Ð¸Ð»Ð¸ Ñ\83клони Ðµ-адресу",
-       "prefs-setemail": "Ð\9fоÑ\81Ñ\82ави Ðµ-адресу",
-       "prefs-email": "Ð\9fоÑ\81Ñ\82авке Ðµ-поÑ\88Ñ\82е",
+       "prefs-changeemail": "Ð\9fÑ\80омени Ð¸Ð»Ð¸ Ñ\83клони Ð¸Ð¼ÐµÑ\98л адресу",
+       "prefs-setemail": "Ð\9fоÑ\81Ñ\82ави Ð¸Ð¼ÐµÑ\98л адресу",
+       "prefs-email": "Ð\9fоÑ\81Ñ\82авке Ð¸Ð¼ÐµÑ\98ла",
        "prefs-rendering": "Изглед",
        "saveprefs": "Сачувај",
        "restoreprefs": "Врати све на подразумевано (у свим одељцима)",
        "timezoneregion-europe": "Европа",
        "timezoneregion-indian": "Индијски океан",
        "timezoneregion-pacific": "Тихи океан",
-       "allowemail": "Ð\9eмогÑ\83Ñ\9bи Ð¿Ñ\80имаÑ\9aе Ðµ-поÑ\80Ñ\83ка од других корисника",
+       "allowemail": "Ð\9eмогÑ\83Ñ\9bи Ð¿Ñ\80имаÑ\9aе Ð¸Ð¼ÐµÑ\98ла од других корисника",
        "prefs-searchoptions": "Претрага",
        "prefs-namespaces": "Именски простори",
        "default": "подразумевано",
        "prefs-files": "Датотеке",
        "prefs-custom-css": "Прилагођени CSS",
        "prefs-custom-js": "Прилагођени јаваскрипт",
-       "prefs-common-css-js": "Дељени CSS/јаваскрипт за све теме:",
+       "prefs-common-css-js": "Дељени CSS/Јаваскрипт за све теме:",
        "prefs-reset-intro": "Можете користити ову страницу да поништите своје поставке на подразумеване вредности.\nОва радња се не може вратити.",
-       "prefs-emailconfirm-label": "Ð\9fоÑ\82вÑ\80да Ðµ-адÑ\80еÑ\81е:",
-       "youremail": "Ð\95-адÑ\80еÑ\81а:",
+       "prefs-emailconfirm-label": "Ð\9fоÑ\82вÑ\80да Ð¸Ð¼ÐµÑ\98ла:",
+       "youremail": "Ð\98меÑ\98л:",
        "username": "{{GENDER:$1|Корисничко име}}:",
        "prefs-memberingroups": "{{PLURAL:$1|Група|Групе}}:",
        "prefs-memberingroups-type": "$1",
-       "prefs-registration": "Ð\92Ñ\80еме Ñ\83пиÑ\81а:",
+       "prefs-registration": "Ð\92Ñ\80еме Ñ\80егиÑ\81Ñ\82Ñ\80аÑ\86иÑ\98е:",
        "prefs-registration-date-time": "$1",
        "yourrealname": "Право име:",
        "yourlanguage": "Језик:",
        "gender-male": "Он уређује вики странице",
        "gender-female": "Она уређује вики странице",
        "prefs-help-gender": "Необавезно: користи се за исправно обраћање софтвера корисницима, зависно од њиховог пола.\nОвај податак ће бити јаван.",
-       "email": "Ð\95-адÑ\80еÑ\81а",
+       "email": "Ð\98меÑ\98л",
        "prefs-help-realname": "Право име није обавезно.\nАко изаберете да га унесете, оно ће бити коришћено за приписивање вашег рада.",
-       "prefs-help-email": "Ð\95-адреса није обавезна, али је потребна у случају да заборавите лозинку.",
+       "prefs-help-email": "Ð\98меÑ\98л адреса није обавезна, али је потребна у случају да заборавите лозинку.",
        "prefs-help-email-others": "Можете је користити и да омогућите другима да вас контактирају преко корисничке странице или странице за разговор, без откривања свог идентитета.",
-       "prefs-help-email-required": "Ð\9fоÑ\82Ñ\80ебна Ñ\98е Ðµ-адреса.",
+       "prefs-help-email-required": "Ð\9fоÑ\82Ñ\80ебна Ñ\98е Ð¸Ð¼ÐµÑ\98л адреса.",
        "prefs-info": "Основни подаци",
        "prefs-i18n": "Интернационализација",
        "prefs-signature": "Потпис",
        "prefs-help-prefershttps": "Ова подешавања ће ступити на снагу при следећој пријави.",
        "prefswarning-warning": "Променили сте ваша подешавања али нисте их још сачували.\nАко не притиснете „$1“ ваша подешавања ће бити изгубљена.",
        "prefs-tabs-navigation-hint": "Савет: можете користити типке са левом и десном стрелицом за кретање кроз картице.",
-       "email-address-validity-valid": "Ð\95-адреса је исправна",
-       "email-address-validity-invalid": "УнеÑ\81иÑ\82е Ð¸Ñ\81пÑ\80авнÑ\83 Ðµ-адресу",
+       "email-address-validity-valid": "Ð\98меÑ\98л адреса је исправна",
+       "email-address-validity-invalid": "УнеÑ\81иÑ\82е Ð¸Ñ\81пÑ\80авнÑ\83 Ð¸Ð¼ÐµÑ\98л адресу",
        "userrights": "Управљање корисничким правима",
        "userrights-lookup-user": "Управљање корисничким групама",
        "userrights-user-editname": "Корисничко име:",
        "right-viewsuppressed": "прегледање измена скривених од свих корисника",
        "right-suppressionlog": "прегледање приватних дневника",
        "right-block": "блокирање даљих измена других корисника",
-       "right-blockemail": "онемогÑ\83Ñ\9bаваÑ\9aе ÐºÐ¾Ñ\80иÑ\81ниÑ\86има Ð´Ð° Ñ\88аÑ\99Ñ\83 Ðµ-поÑ\80Ñ\83ке",
+       "right-blockemail": "онемогÑ\83Ñ\9bаваÑ\9aе ÐºÐ¾Ñ\80иÑ\81ниÑ\86има Ð´Ð° Ñ\88аÑ\99Ñ\83 Ð¸Ð¼ÐµÑ\98лове",
        "right-hideuser": "блокирање корисничког имена и његово сакривање од јавности",
        "right-ipblock-exempt": "заобилажење блокирања ИП адресе, аутоматска блокирања и блокирања опсега",
        "right-proxyunbannable": "заобилажење аутоматских блокирања посредника",
        "right-viewmywatchlist": "види сопствени списак надгледања",
        "right-editmywatchlist": "уређивање сопственог списка надгледања; неке предузете радње ће свеједно додати странице на списак и без овог права",
        "right-viewmyprivateinfo": "видите своје личне податке (нпр. адресу е-поште, право име)",
-       "right-editmyprivateinfo": "Ñ\83Ñ\80еÑ\92иваÑ\9aе Ñ\81опÑ\81Ñ\82вениÑ\85 Ð»Ð¸Ñ\87ниÑ\85 Ð¿Ð¾Ð´Ð°Ñ\82ака (нпÑ\80. Ð°Ð´Ñ\80еÑ\81Ñ\83 Ðµ-поÑ\88Ñ\82е, право име)",
+       "right-editmyprivateinfo": "Ñ\83Ñ\80еÑ\92иваÑ\9aе Ñ\81опÑ\81Ñ\82вениÑ\85 Ð»Ð¸Ñ\87ниÑ\85 Ð¿Ð¾Ð´Ð°Ñ\82ака (нпÑ\80. Ð¸Ð¼ÐµÑ\98л Ð°Ð´Ñ\80еÑ\81а, право име)",
        "right-editmyoptions": "уређивање сопствених подешавања",
        "right-rollback": "брзо враћање измена последњег корисника који је мењао одређену страницу",
        "right-markbotedits": "означавање враћених измена као измене бота",
        "right-userrights-interwiki": "уређивање корисничких права на другим викијима",
        "right-siteadmin": "закључавање и откључавање базе података",
        "right-override-export-depth": "извоз страница укључујући и повазене странице до дубине од пет веза",
-       "right-sendemail": "Ñ\81лаÑ\9aе Ðµ-поÑ\80Ñ\83ка другим корисницима",
+       "right-sendemail": "Ñ\81лаÑ\9aе Ð¸Ð¼ÐµÑ\98ла другим корисницима",
        "right-passwordreset": "прегледање порука за обнављање лозинке",
        "right-managechangetags": "прављење и/или брисање [[Special:Tags|ознака]] из базе података",
        "right-applychangetags": "примењивање [[Special:Tags|ознака]] на нечије измене",
        "action-userrights": "уређивање свих корисничких права",
        "action-userrights-interwiki": "уређивање корисничких права на другим викијима",
        "action-siteadmin": "закључавање или откључавање базе података",
-       "action-sendemail": "Ñ\81лаÑ\9aе Ðµ-поÑ\80Ñ\83ка",
+       "action-sendemail": "Ñ\81лаÑ\9aе Ð¸Ð¼ÐµÑ\98лова",
        "action-editmywatchlist": "измену сопственог списак надгледања",
        "action-viewmywatchlist": "преглед вашег списак надгледања",
        "action-viewmyprivateinfo": "прегледање ваших личних података",
        "unpatrolledletter": "!",
        "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|корисник надгледа|корисника надгледају|корисника надгледају}}]",
        "rc_categories": "Ограничи на категорије (раздвоји с усправном цртом):",
-       "rc_categories_any": "Све",
+       "rc_categories_any": "Сви Ð¸Ð·Ð°Ð±Ñ\80ани",
        "rc-change-size": "$1",
        "rc-change-size-new": "$1 {{PLURAL:$1|бајт|бајта|бајтова}} после измене",
        "newsectionsummary": "/* $1 */ нови одељак",
        "nopagetext": "Тражена страница не постоји.",
        "pager-newer-n": "{{PLURAL:$1|новији 1|новија $1|новијих $1}}",
        "pager-older-n": "{{PLURAL:$1|старији 1|старијих $1}}",
-       "suppress": "Ð\9dадзоÑ\80",
+       "suppress": "РевизиÑ\98а",
        "querypage-disabled": "Ова посебна страница је онемогућена ради побољшања перформанси.",
        "apihelp": "API помоћ",
        "apihelp-no-such-module": "Модул „$1“ није пронађен.",
        "trackingcategories-nodesc": "Опис није доступан.",
        "trackingcategories-disabled": "Категорија је онемогућена",
        "mailnologin": "Нема адресе за слање",
-       "mailnologintext": "Ð\9cоÑ\80аÑ\82е Ð±Ð¸Ñ\82и [[Special:UserLogin|пÑ\80иÑ\98авÑ\99ени]] Ð¸ Ð¸Ð¼Ð°Ñ\82и Ð¸Ñ\81пÑ\80авнÑ\83 Ðµ-адÑ\80еÑ\81Ñ\83 Ñ\83 [[Special:Preferences|подеÑ\88аваÑ\9aима]] Ð´Ð° Ð±Ð¸Ñ\81Ñ\82е Ñ\81лали Ðµ-поÑ\80Ñ\83ке другим корисницима.",
-       "emailuser": "Ð\9fоÑ\88аÑ\99и Ðµ-поÑ\80Ñ\83кÑ\83",
-       "emailuser-title-target": "СлаÑ\9aе Ðµ-поÑ\80Ñ\83ке {{GENDER:$1|коÑ\80иÑ\81никÑ\83|коÑ\80иÑ\81ниÑ\86и|коÑ\80иÑ\81никÑ\83}}",
-       "emailuser-title-notarget": "СлаÑ\9aе Ðµ-поÑ\80Ñ\83ке кориснику",
-       "emailpagetext": "Ð\9cожеÑ\82е Ð´Ð° ÐºÐ¾Ñ\80иÑ\81Ñ\82иÑ\82е Ð´Ð¾Ñ\9aи Ð¾Ð±Ñ\80азаÑ\86 Ð´Ð° Ð¿Ð¾Ñ\88аÑ\99еÑ\82е Ðµ-поÑ\80Ñ\83кÑ\83 {{GENDER:$1|овом ÐºÐ¾Ñ\80иÑ\81никÑ\83|овоÑ\98 ÐºÐ¾Ñ\80иÑ\81ниÑ\86и}}.\nÐ\95-адÑ\80еÑ\81а ÐºÐ¾Ñ\98Ñ\83 сте унели у вашим [[Special:Preferences|подешавањима]] ће се приказати у пољу „Од“, тако да ће прималац моћи да вам одговори директно.",
-       "defemailsubject": "{{SITENAME}} â\80\94 Ð\95-поÑ\88Ñ\82а од {{GENDER:$1|корисника|кориснице}} $1",
+       "mailnologintext": "Ð\9cоÑ\80аÑ\82е Ð±Ð¸Ñ\82и [[Special:UserLogin|пÑ\80иÑ\98авÑ\99ени]] Ð¸ Ð¸Ð¼Ð°Ñ\82и Ð¸Ñ\81пÑ\80аван Ð¸Ð¼ÐµÑ\98л Ñ\83 [[Special:Preferences|подеÑ\88аваÑ\9aима]] Ð´Ð° Ð±Ð¸Ñ\81Ñ\82е Ñ\81лали Ð¸Ð¼ÐµÑ\98лове другим корисницима.",
+       "emailuser": "Ð\9fоÑ\88аÑ\99и Ð¸Ð¼ÐµÑ\98л",
+       "emailuser-title-target": "СлаÑ\9aе Ð¸Ð¼ÐµÑ\98ла {{GENDER:$1|коÑ\80иÑ\81никÑ\83|коÑ\80иÑ\81ниÑ\86и}}",
+       "emailuser-title-notarget": "СлаÑ\9aе Ð¸Ð¼ÐµÑ\98ла кориснику",
+       "emailpagetext": "Ð\9cожеÑ\82е Ð´Ð° ÐºÐ¾Ñ\80иÑ\81Ñ\82иÑ\82е Ð´Ð¾Ñ\9aи Ð¾Ð±Ñ\80азаÑ\86 Ð´Ð° Ð¿Ð¾Ñ\88аÑ\99еÑ\82е Ð¸Ð¼ÐµÑ\98л {{GENDER:$1|овом ÐºÐ¾Ñ\80иÑ\81никÑ\83|овоÑ\98 ÐºÐ¾Ñ\80иÑ\81ниÑ\86и}}.\nÐ\98меÑ\98л ÐºÐ¾Ñ\98и сте унели у вашим [[Special:Preferences|подешавањима]] ће се приказати у пољу „Од“, тако да ће прималац моћи да вам одговори директно.",
+       "defemailsubject": "{{SITENAME}} â\80\94 Ð\98меÑ\98л од {{GENDER:$1|корисника|кориснице}} $1",
        "usermaildisabled": "Корисничка е-пошта је онемогућена",
-       "usermaildisabledtext": "Ð\9dе Ð¼Ð¾Ð¶ÐµÑ\82е Ð´Ð° Ñ\88аÑ\99еÑ\82е Ðµ-поÑ\80Ñ\83ке другим корисницима на овом викију",
-       "noemailtitle": "Ð\9dема Ðµ-адресе",
-       "noemailtext": "Ð\9eваÑ\98 ÐºÐ¾Ñ\80иÑ\81ник Ð½Ð¸Ñ\98е Ð½Ð°Ð²ÐµÐ¾ Ð¸Ñ\81пÑ\80авнÑ\83 Ðµ-адресу.",
-       "nowikiemailtext": "Ð\9eваÑ\98 ÐºÐ¾Ñ\80иÑ\81ник Ñ\98е Ð¾Ð´Ð»Ñ\83Ñ\87ио Ð´Ð° Ð½Ðµ Ð¿Ñ\80има Ðµ-поÑ\80Ñ\83ке од других корисника.",
+       "usermaildisabledtext": "Ð\9dе Ð¼Ð¾Ð¶ÐµÑ\82е Ð´Ð° Ñ\88аÑ\99еÑ\82е Ð¸Ð¼ÐµÑ\98лове другим корисницима на овом викију",
+       "noemailtitle": "Ð\9dема Ð¸Ð¼ÐµÑ\98л адресе",
+       "noemailtext": "Ð\9eваÑ\98 ÐºÐ¾Ñ\80иÑ\81ник Ð½Ð¸Ñ\98е Ð½Ð°Ð²ÐµÐ¾ Ð¸Ñ\81пÑ\80авнÑ\83 Ð¸Ð¼ÐµÑ\98л адресу.",
+       "nowikiemailtext": "Ð\9eваÑ\98 ÐºÐ¾Ñ\80иÑ\81ник Ñ\98е Ð¾Ð´Ð»Ñ\83Ñ\87ио Ð´Ð° Ð½Ðµ Ð¿Ñ\80има Ð¸Ð¼ÐµÑ\98лове од других корисника.",
        "emailnotarget": "Непостојеће или неисправно корисничко име примаоца.",
        "emailtarget": "Унос корисничког имена примаоца",
        "emailusername": "Корисничко име:",
        "emailusernamesubmit": "Пошаљи",
-       "email-legend": "СлаÑ\9aе Ðµ-поÑ\80Ñ\83ка другом кориснику",
+       "email-legend": "СлаÑ\9aе Ð¸Ð¼ÐµÑ\98ла другом кориснику",
        "emailfrom": "Од:",
        "emailto": "За:",
        "emailsubject": "Наслов:",
        "emailmessage": "Порука:",
        "emailsend": "Пошаљи",
-       "emailccme": "Пошаљи ми копију поруке на моју е-пошту.",
+       "emailccme": "Пошаљи ми копију поруке на мој имејл.",
        "emailccsubject": "Копија ваше поруке кориснику $1: $2",
        "emailsent": "Порука је послата",
-       "emailsenttext": "Ваша е-порука је послата.",
-       "emailuserfooter": "Ову е-поруку је {{GENDER:$1|послао|послала}} $1 {{GENDER:$2|кориснику|корисници}} $2 помоћу „{{int:emailuser}}“ с викија {{SITENAME}}.",
+       "emailsenttext": "Ваш имејл је послат.",
+       "emailuserfooter": "Овај имејл је {{GENDER:$1|послао|послала}} $1 {{GENDER:$2|кориснику|корисници}} $2 помоћу „{{int:emailuser}}“ с викија {{SITENAME}}.",
        "usermessage-summary": "Слање системске поруке.",
        "usermessage-editor": "Уређивач системских порука",
        "usermessage-template": "MediaWiki:UserMessage",
        "notanarticle": "Није страница са садржајем",
        "notvisiblerev": "Измена је обрисана",
        "watchlist-details": "Имате {{PLURAL:$1|$1 страница|$1 странице|$1 страница}} на вашем списку надгледања, не рачунајући странице за разговор.",
-       "wlheader-enotif": "Ð\9eбавеÑ\88Ñ\82еÑ\9aе Ðµ-поÑ\80Ñ\83ком је омогућено.",
+       "wlheader-enotif": "Ð\9eбавеÑ\88Ñ\82еÑ\9aе Ð¸Ð¼ÐµÑ\98лом је омогућено.",
        "wlheader-showupdated": "Странице које су измењене откад сте их последњи пут посетили су '''подебљане'''.",
        "wlnote": "Испод {{PLURAL:$1|је последња измена|су последње <strong>$1</strong> измене|је последњих <strong>$1</strong> измена}} у {{PLURAL:$2|претходном сату|претходна <strong>$2</strong> сата|претходних <strong>$2</strong> сати}}, закључно са $3, $4.",
        "wlshowlast": "Прикажи последњих $1 сати, $2 дана",
        "ipbreason-dropdown": "*Најчешћи разлози за блокирање\n** Уношење лажних информација\n** Уклањање садржаја са страница\n** Постављање веза до спољашњих сајтова\n** Уношење бесмислица у странице\n** Непристојно понашање\n** Употреба више налога\n** Неприхватљиво корисничко име",
        "ipb-hardblock": "Онемогући пријављеним корисницима да уређују с ове ИП адресе",
        "ipbcreateaccount": "Онемогући отварање налога",
-       "ipbemailban": "Ð\9eнемогÑ\83Ñ\9bи ÐºÐ¾Ñ\80иÑ\81никÑ\83 Ð´Ð° Ñ\88аÑ\99е Ðµ-поÑ\80Ñ\83ке",
+       "ipbemailban": "Ð\9eнемогÑ\83Ñ\9bи ÐºÐ¾Ñ\80иÑ\81никÑ\83 Ð´Ð° Ñ\88аÑ\99е Ð¸Ð¼ÐµÑ\98лове",
        "ipbenableautoblock": "Аутоматски блокирај последњу ИП адресу овог корисника и све даљње адресе с којих покуша да уређује",
        "ipbsubmit": "Блокирај овог корисника",
        "ipbother": "Друго време:",
        "unblocklink": "деблокирај",
        "change-blocklink": "промени блокирање",
        "contribslink": "доприноси",
-       "emaillink": "поÑ\88аÑ\99и Ðµ-поÑ\80Ñ\83кÑ\83",
+       "emaillink": "поÑ\88аÑ\99и Ð¸Ð¼ÐµÑ\98л",
        "autoblocker": "Аутоматски сте блокирани јер делите ИП адресу с корисником/цом [[User:$1|$1]].\nРазлог блокирања: „$2“",
        "blocklogpage": "Дневник блокирања",
        "blocklog-showlog": "{{GENDER:$1|Овај корисник је раније блокиран|Ова корисница је раније блокирана}}.\nИсторија блокирања се налази испод:",
        "move-page-legend": "Премештање странице",
        "movepagetext": "Доњи образац ће преименовати страницу, премештајући целу историју на ново име.\nСтари наслов постаће преусмерење на нови наслов.\nМожете аутоматски изменити преусмерење до изворног наслова.\nПогледајте [[Special:DoubleRedirects|двострука]] или [[Special:BrokenRedirects|покварена]] преусмерења.\nНа вама је одговорност да везе и даље иду тамо где би требало да иду.\n\nСтраница '''неће''' бити премештена ако већ постоји страница с тим именом, осим ако је она празна, садржи преусмерење или нема историју измена.\nТо значи да можете вратити страницу на претходно место ако погрешите, али не можете заменити постојећу страницу.\n\n'''Пажња!'''\nОво може представљати драстичну и неочекивану измену за популарну страницу;\nдобро размислите о последицама пре него што наставите.",
        "movepagetext-noredirectfixer": "Доњи образац ће преименовати страницу, премештајући целу историју на ново име.\nСтари наслов постаће преусмерење на нови наслов.\nПогледајте [[Special:DoubleRedirects|двострука]] или [[Special:BrokenRedirects|покварена]] преусмерења.\nНа вама је одговорност да везе и даље иду тамо где би требало да иду.\n\nСтраница '''неће''' бити премештена ако већ постоји страница с тим именом, осим ако је она празна, садржи преусмерење или нема историју измена.\nТо значи да можете вратити страницу на претходно место ако погрешите, али не можете заменити постојећу страницу.\n\n'''Пажња!'''\nОво може представљати драстичну и неочекивану измену за популарну страницу;\nдобро размислите о последицама пре него што наставите.",
-       "movepagetalktext": "Ð\9eдговаÑ\80аÑ\98Ñ\83Ñ\9bа Ñ\81Ñ\82Ñ\80аниÑ\86а Ð·Ð° Ñ\80азговоÑ\80, Ð°ÐºÐ¾ Ð¿Ð¾Ñ\81Ñ\82оÑ\98и, Ð±Ð¸Ñ\9bе Ð°Ñ\83Ñ\82омаÑ\82Ñ\81ки Ð¿Ñ\80емеÑ\88Ñ\82ена Ð·Ð°Ñ\98едно Ñ\81 Ñ\9aом, Ð¾Ñ\81им Ð°ÐºÐ¾:\n*Ð\92еÑ\9b Ð¿Ð¾Ñ\81Ñ\82оÑ\98и Ñ\81Ñ\82Ñ\80аниÑ\86а Ð·Ð° Ñ\80азговоÑ\80 Ñ\81 Ð½Ð¾Ð²Ð¸Ð¼ Ð½Ð°Ñ\81ловом, Ð¸Ð»Ð¸\n*Ð\90ко Ñ\98е Ð¾Ð·Ð½Ð°Ñ\87ено Ð´Ð¾Ð»ÐµÐ½Ð°Ð²ÐµÐ´ÐµÐ½Ð¾ Ð¿Ð¾Ñ\99е.\n\nУ Ð¾Ð²Ð¾Ð¼ Ñ\81лÑ\83Ñ\87аÑ\98Ñ\83 мора ручно да се премести или споји, ако има потребе за тим.",
+       "movepagetalktext": "Ð\90ко Ñ\81Ñ\82е Ð¿Ñ\80овеÑ\80или Ð¾Ð²Ñ\83 ÐºÑ\83Ñ\82иÑ\98Ñ\83, Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ\80аÑ\98Ñ\83Ñ\9bа Ñ\81Ñ\82Ñ\80аниÑ\86а Ð·Ð° Ñ\80азговоÑ\80 Ð±Ð¸Ñ\9bе Ð°Ñ\83Ñ\82омаÑ\82Ñ\81ки Ð¿Ñ\80емеÑ\88Ñ\82ена Ð½Ð° Ð½Ð¾Ð²Ð¸ Ð½Ð°Ñ\81лов, Ð¾Ñ\81им Ð°ÐºÐ¾ Ð²ÐµÑ\9b Ð¿Ð¾Ñ\81Ñ\82оÑ\98и Ñ\81Ñ\82Ñ\80аниÑ\86а Ð·Ð° Ñ\80азговоÑ\80.\n\nУ Ñ\82ом Ñ\81лÑ\83Ñ\87аÑ\98Ñ\83, мора ручно да се премести или споји, ако има потребе за тим.",
        "moveuserpage-warning": "'''Упозорење:''' на путу сте да преместите корисничку страницу. Имајте у виду да ће само страница бити премештена, а сам корисник ''неће'' бити преименован.",
        "movecategorypage-warning": "<strong>Упозорење:</strong> премештате страницу категорије. Имајте на уму да ће само страница бити премештена и да све странице у старој категорији <em>неће</em> бити рекатегорисане у нову категорију.",
        "movenologintext": "Морате да будете регистровани и [[Special:UserLogin|пријављени]] да бисте премештали странице.",
        "tooltip-feed-rss": "RSS довод ове странице",
        "tooltip-feed-atom": "Атом довод ове странице",
        "tooltip-t-contributions": "Погледајте списак доприноса овог корисника",
-       "tooltip-t-emailuser": "Ð\9fоÑ\88аÑ\99иÑ\82е Ðµ-поÑ\80Ñ\83кÑ\83 овом кориснику",
+       "tooltip-t-emailuser": "Ð\9fоÑ\88аÑ\99иÑ\82е Ð¸Ð¼ÐµÑ\98л овом кориснику",
        "tooltip-t-info": "Више информација о овој страници",
        "tooltip-t-upload": "Пошаљите датотеке",
        "tooltip-t-specialpages": "Списак свих посебних страница",
        "exif-urgency-other": "Прилагођени приоритет ($1)",
        "namespacesall": "сви",
        "monthsall": "све",
-       "confirmemail": "Ð\9fоÑ\82вÑ\80да Ðµ-адресе",
-       "confirmemail_noemail": "Ð\9dиÑ\81Ñ\82е Ñ\83нели Ð¸Ñ\81пÑ\80авнÑ\83 Ðµ-адресу у [[Special:Preferences|подешавањима]].",
-       "confirmemail_text": "{{SITENAME}} Ð·Ð°Ñ\85Ñ\82ева Ð´Ð° Ð¿Ð¾Ñ\82вÑ\80диÑ\82е Ðµ-адÑ\80еÑ\81Ñ\83 Ð¿Ñ\80е Ð½ÐµÐ³Ð¾ Ñ\88Ñ\82о Ð¿Ð¾Ñ\87неÑ\82е Ð´Ð° ÐºÐ¾Ñ\80иÑ\81Ñ\82иÑ\82е Ð¼Ð¾Ð³Ñ\83Ñ\9bноÑ\81Ñ\82и Ðµ-поÑ\88Ñ\82е.\nÐ\9aликниÑ\82е Ð½Ð° Ð´Ñ\83гме Ð¸Ñ\81под Ð·Ð° Ñ\81лаÑ\9aе Ð¿Ð¾Ñ\80Ñ\83ке Ð½Ð° Ð²Ð°Ñ\88Ñ\83 Ðµ-адÑ\80еÑ\81Ñ\83.\nУ Ð¿Ð¾Ñ\80Ñ\83Ñ\86и Ñ\9bе Ñ\81е Ð½Ð°Ð»Ð°Ð·Ð¸Ñ\82и Ð²ÐµÐ·Ð° Ñ\81 Ð¿Ð¾Ñ\82вÑ\80дним ÐºÐ¾Ð´Ð¾Ð¼;\nÑ\83неÑ\81иÑ\82е Ñ\98е Ñ\83 Ð¿Ñ\80егледаÑ\87 Ð´Ð° Ð±Ð¸Ñ\81Ñ\82е Ð¿Ð¾Ñ\82вÑ\80дили Ð´Ð° Ñ\98е Ð²Ð°Ñ\88а Ðµ-адреса исправна.",
+       "confirmemail": "Ð\9fоÑ\82вÑ\80да Ð¸Ð¼ÐµÑ\98л адресе",
+       "confirmemail_noemail": "Ð\9dиÑ\81Ñ\82е Ñ\83нели Ð¸Ñ\81пÑ\80авнÑ\83 Ð¸Ð¼ÐµÑ\98л адресу у [[Special:Preferences|подешавањима]].",
+       "confirmemail_text": "{{SITENAME}} Ð·Ð°Ñ\85Ñ\82ева Ð´Ð° Ð¿Ð¾Ñ\82вÑ\80диÑ\82е Ð¸Ð¼ÐµÑ\98л Ð°Ð´Ñ\80еÑ\81Ñ\83 Ð¿Ñ\80е Ð½ÐµÐ³Ð¾ Ñ\88Ñ\82о Ð¿Ð¾Ñ\87неÑ\82е Ð´Ð° ÐºÐ¾Ñ\80иÑ\81Ñ\82иÑ\82е Ð¼Ð¾Ð³Ñ\83Ñ\9bноÑ\81Ñ\82и Ð¸Ð¼ÐµÑ\98ла.\nÐ\9aликниÑ\82е Ð½Ð° Ð´Ñ\83гме Ð¸Ñ\81под Ð·Ð° Ñ\81лаÑ\9aе Ð¿Ð¾Ñ\80Ñ\83ке Ð½Ð° Ð²Ð°Ñ\88Ñ\83 Ð°Ð´Ñ\80еÑ\81Ñ\83.\nУ Ð¿Ð¾Ñ\80Ñ\83Ñ\86и Ñ\9bе Ñ\81е Ð½Ð°Ð»Ð°Ð·Ð¸Ñ\82и Ð²ÐµÐ·Ð° Ñ\81 Ð¿Ð¾Ñ\82вÑ\80дним ÐºÐ¾Ð´Ð¾Ð¼;\nÑ\83неÑ\81иÑ\82е Ñ\98е Ñ\83 Ð¿Ñ\80егледаÑ\87 Ð´Ð° Ð±Ð¸Ñ\81Ñ\82е Ð¿Ð¾Ñ\82вÑ\80дили Ð´Ð° Ñ\98е Ð²Ð°Ñ\88а Ð¸Ð¼ÐµÑ\98л адреса исправна.",
        "confirmemail_pending": "Потврдни код вам је већ послат. Ако сте управо отворили налог, онда вероватно треба да сачекате неколико минута да пристигне, пре него што поново затражите нови код.",
        "confirmemail_send": "Пошаљи потврдни код",
        "confirmemail_sent": "Потврдна порука је послата.",
-       "confirmemail_oncreate": "Ð\9fоÑ\81лаÑ\82 Ñ\98е Ð¿Ð¾Ñ\82вÑ\80дни ÐºÐ¾Ð´ Ð½Ð° Ð²Ð°Ñ\88Ñ\83 Ðµ-адÑ\80еÑ\81Ñ\83.\nÐ\9eваÑ\98 ÐºÐ¾Ð´ Ð½Ð¸Ñ\98е Ð¿Ð¾Ñ\82Ñ\80ебан Ð·Ð° Ð¿Ñ\80иÑ\98авÑ\99иваÑ\9aе, Ð°Ð»Ð¸ Ð²Ð°Ð¼ Ñ\82Ñ\80еба Ð´Ð° Ð±Ð¸Ñ\81Ñ\82е Ñ\83кÑ\99Ñ\83Ñ\87или Ð¼Ð¾Ð³Ñ\83Ñ\9bноÑ\81Ñ\82и Ðµ-поÑ\88Ñ\82е на викију.",
-       "confirmemail_sendfailed": "{{SITENAME}} Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ð¿Ð¾Ñ\88аÑ\99е Ð¿Ð¾Ñ\80Ñ\83кÑ\83.\nÐ\9fÑ\80овеÑ\80иÑ\82е Ð´Ð° Ð»Ð¸ Ñ\98е Ðµ-адреса правилно написана.\n\nГрешка: $1",
+       "confirmemail_oncreate": "Ð\9fоÑ\81лаÑ\82 Ñ\98е Ð¿Ð¾Ñ\82вÑ\80дни ÐºÐ¾Ð´ Ð½Ð° Ð²Ð°Ñ\88Ñ\83 Ð¸Ð¼ÐµÑ\98л Ð°Ð´Ñ\80еÑ\81Ñ\83.\nÐ\9eваÑ\98 ÐºÐ¾Ð´ Ð½Ð¸Ñ\98е Ð¿Ð¾Ñ\82Ñ\80ебан Ð·Ð° Ð¿Ñ\80иÑ\98авÑ\99иваÑ\9aе, Ð°Ð»Ð¸ Ð²Ð°Ð¼ Ñ\82Ñ\80еба Ð´Ð° Ð±Ð¸Ñ\81Ñ\82е Ñ\83кÑ\99Ñ\83Ñ\87или Ð¼Ð¾Ð³Ñ\83Ñ\9bноÑ\81Ñ\82и Ð¸Ð¼ÐµÑ\98ла на викију.",
+       "confirmemail_sendfailed": "{{SITENAME}} Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ð¿Ð¾Ñ\88аÑ\99е Ð¸Ð¼ÐµÑ\98л Ð¿Ð¾Ñ\82вÑ\80дÑ\83.\nÐ\9fÑ\80овеÑ\80иÑ\82е Ð´Ð° Ð»Ð¸ Ñ\98е Ð¸Ð¼ÐµÑ\98л адреса правилно написана.\n\nГрешка: $1",
        "confirmemail_invalid": "Потврдни код је неисправан. Вероватно је истекао.",
-       "confirmemail_needlogin": "Ð\9cоÑ\80аÑ\82е Ð±Ð¸Ñ\82и $1 Ð´Ð° Ð±Ð¸Ñ\81Ñ\82е Ð¿Ð¾Ñ\82вÑ\80дили Ðµ-адресу.",
-       "confirmemail_success": "Ð\92аÑ\88а Ðµ-адреса је потврђена.\nСада можете да се [[Special:UserLogin|пријавите]]. Желимо вам пријатан боравак на викију.",
-       "confirmemail_loggedin": "Ð\92аÑ\88а Ðµ-адреса је сада потврђена.",
-       "confirmemail_subject": "{{SITENAME}} â\80\93 Ð¿Ð¾Ñ\82вÑ\80да Ðµ-адресе",
-       "confirmemail_body": "Неко, вероватно ви, са ИП адресе $1 је отворио налог „$2“ на викију {{SITENAME}}, наводећи ову е-адресу.\n\nДа потврдите да овај налог стварно припада вама, као и да\nомогућите могућности е-поште, отворите ову везу у прегледачу:\n\n$3\n\nУколико нисте отворили налог, пратите везу\nиспод како бисте прекинули поступак уписа:\n\n$5\n\nОвај потврдни код истиче $6 у $5.",
-       "confirmemail_body_changed": "Ð\9dеко, Ð²ÐµÑ\80оваÑ\82но Ð²Ð¸, Ñ\81а Ð\98Ð\9f Ð°Ð´Ñ\80еÑ\81е $1 Ñ\98е Ð¿Ñ\80оменио Ðµ-адÑ\80еÑ\81Ñ\83 Ð½Ð°Ð»Ð¾Ð³Ð° â\80\9e$2â\80\9c Ñ\83 Ð¾Ð²Ñ\83 Ð°Ð´Ñ\80еÑ\81Ñ\83 Ð½Ð° Ð²Ð¸ÐºÐ¸Ñ\98Ñ\83 {{SITENAME}}.\n\nÐ\94а Ð±Ð¸Ñ\81Ñ\82е Ð¿Ð¾Ñ\82вÑ\80дили Ð´Ð° Ð¾Ð²Ð°Ñ\98 Ð½Ð°Ð»Ð¾Ð³ Ñ\81Ñ\82ваÑ\80но Ð¿Ñ\80ипада Ð²Ð°Ð¼Ð° Ð¸ Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð°ÐºÑ\82ивиÑ\80али Ð¼Ð¾Ð³Ñ\83Ñ\9bноÑ\81Ñ\82и Ðµ-поÑ\88Ñ\82е, Ð¾Ñ\82воÑ\80иÑ\82е Ñ\81ледеÑ\9bÑ\83 Ð²ÐµÐ·Ñ\83 Ñ\83 Ð¿Ñ\80егледаÑ\87Ñ\83:\n\n$3\n\nÐ\90ко Ð½Ð°Ð»Ð¾Ð³ *не* Ð¿Ñ\80ипада Ð²Ð°Ð¼Ð°, Ð¿Ñ\80аÑ\82иÑ\82е Ñ\81ледеÑ\9bÑ\83 Ð²ÐµÐ·Ñ\83 Ð´Ð° Ð¾Ñ\82кажеÑ\82е Ð¿Ð¾Ñ\82вÑ\80дÑ\83 Ðµ-адресе:\n\n$5\n\nОвај потврдни код истиче $6 у $7",
-       "confirmemail_body_set": "Ð\9dеко, Ð²ÐµÑ\80оваÑ\82но Ð²Ð¸, Ñ\81а Ð\98Ð\9f Ð°Ð´Ñ\80еÑ\81е $1 \nÑ\98е Ð¿Ñ\80оменио Ðµ-адÑ\80еÑ\81Ñ\83 Ð½Ð°Ð»Ð¾Ð³Ð° â\80\9e$2â\80\9c Ñ\83 Ð¾Ð²Ñ\83 Ð°Ð´Ñ\80еÑ\81Ñ\83 Ð½Ð° {{SITENAME}}.\n\nÐ\94а Ð±Ð¸Ñ\81мо Ð¿Ð¾Ñ\82вÑ\80дили Ð´Ð° Ð¾Ð²Ð°Ñ\98 Ð½Ð°Ð»Ð¾Ð³ Ñ\81Ñ\82ваÑ\80но Ð¿Ñ\80ипада Ð²Ð°Ð¼Ð° Ð¸ Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð°ÐºÑ\82ивиÑ\80али Ð¼Ð¾Ð³Ñ\83Ñ\9bноÑ\81Ñ\82и Ðµ-поÑ\88Ñ\82е Ð½Ð° {{SITENAME}}, Ð¾Ñ\82воÑ\80иÑ\82е Ñ\81ледеÑ\9bÑ\83 Ð²ÐµÐ·Ñ\83 Ñ\83 Ð¿Ñ\80егледаÑ\87Ñ\83:\n\n$3\n\nÐ\90ко Ð½Ð°Ð»Ð¾Ð³ *не* Ð¿Ñ\80ипада Ð²Ð°Ð¼Ð°, Ð¿Ñ\80аÑ\82иÑ\82е Ñ\81ледеÑ\9bÑ\83 Ð²ÐµÐ·Ñ\83 Ð´Ð° Ð¾Ñ\82кажеÑ\82е Ð¿Ð¾Ñ\82вÑ\80дÑ\83 Ðµ-адресе:\n\n$5\n\nОвај потврдни код истиче $4.",
-       "confirmemail_invalidated": "Ð\9fоÑ\82вÑ\80да Ðµ-поÑ\88Ñ\82е је отказана",
-       "invalidateemail": "Ð\9eÑ\82казиваÑ\9aе Ð¿Ð¾Ñ\82вÑ\80де Ðµ-поÑ\88Ñ\82е",
+       "confirmemail_needlogin": "Ð\9cоÑ\80аÑ\82е Ð±Ð¸Ñ\82и $1 Ð´Ð° Ð±Ð¸Ñ\81Ñ\82е Ð¿Ð¾Ñ\82вÑ\80дили Ð¸Ð¼ÐµÑ\98л адресу.",
+       "confirmemail_success": "Ð\92аÑ\88а Ð¸Ð¼ÐµÑ\98л адреса је потврђена.\nСада можете да се [[Special:UserLogin|пријавите]]. Желимо вам пријатан боравак на викију.",
+       "confirmemail_loggedin": "Ð\92аÑ\88а Ð¸Ð¼ÐµÑ\98л адреса је сада потврђена.",
+       "confirmemail_subject": "{{SITENAME}} â\80\93 Ð¿Ð¾Ñ\82вÑ\80да Ð¸Ð¼ÐµÑ\98л адресе",
+       "confirmemail_body": "Неко, вероватно ви, са ИП адресе $1 \nје променио имејл адресу налога „$2“ у ову адресу на {{SITENAME}}.\n\nДа бисмо потврдили да овај налог стварно припада вама и поново активирали могућности имејла на {{SITENAME}}, отворите следећу везу у прегледачу:\n\n$3\n\nАко налог *не* припада вама, пратите следећу везу да откажете потврду имејл адресе:\n\n$5\n\nОвај потврдни код истиче $4.",
+       "confirmemail_body_changed": "Ð\9dеко, Ð²ÐµÑ\80оваÑ\82но Ð²Ð¸, Ñ\81а Ð\98Ð\9f Ð°Ð´Ñ\80еÑ\81е $1 Ñ\98е Ð¿Ñ\80оменио Ð¸Ð¼ÐµÑ\98л Ð°Ð´Ñ\80еÑ\81Ñ\83 Ð½Ð°Ð»Ð¾Ð³Ð° â\80\9e$2â\80\9c Ñ\83 Ð¾Ð²Ñ\83 Ð°Ð´Ñ\80еÑ\81Ñ\83 Ð½Ð° Ð²Ð¸ÐºÐ¸Ñ\98Ñ\83 {{SITENAME}}.\n\nÐ\94а Ð±Ð¸Ñ\81Ñ\82е Ð¿Ð¾Ñ\82вÑ\80дили Ð´Ð° Ð¾Ð²Ð°Ñ\98 Ð½Ð°Ð»Ð¾Ð³ Ñ\81Ñ\82ваÑ\80но Ð¿Ñ\80ипада Ð²Ð°Ð¼Ð° Ð¸ Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð°ÐºÑ\82ивиÑ\80али Ð¼Ð¾Ð³Ñ\83Ñ\9bноÑ\81Ñ\82и Ð¸Ð¼ÐµÑ\98ла, Ð¾Ñ\82воÑ\80иÑ\82е Ñ\81ледеÑ\9bÑ\83 Ð²ÐµÐ·Ñ\83 Ñ\83 Ð¿Ñ\80егледаÑ\87Ñ\83:\n\n$3\n\nÐ\90ко Ð½Ð°Ð»Ð¾Ð³ *не* Ð¿Ñ\80ипада Ð²Ð°Ð¼Ð°, Ð¿Ñ\80аÑ\82иÑ\82е Ñ\81ледеÑ\9bÑ\83 Ð²ÐµÐ·Ñ\83 Ð´Ð° Ð¾Ñ\82кажеÑ\82е Ð¿Ð¾Ñ\82вÑ\80дÑ\83 Ð¸Ð¼ÐµÑ\98л адресе:\n\n$5\n\nОвај потврдни код истиче $6 у $7",
+       "confirmemail_body_set": "Ð\9dеко, Ð²ÐµÑ\80оваÑ\82но Ð²Ð¸, Ñ\81а Ð\98Ð\9f Ð°Ð´Ñ\80еÑ\81е $1 \nÑ\98е Ð¿Ñ\80оменио Ð¸Ð¼ÐµÑ\98л Ð°Ð´Ñ\80еÑ\81Ñ\83 Ð½Ð°Ð»Ð¾Ð³Ð° â\80\9e$2â\80\9c Ñ\83 Ð¾Ð²Ñ\83 Ð°Ð´Ñ\80еÑ\81Ñ\83 Ð½Ð° {{SITENAME}}.\n\nÐ\94а Ð±Ð¸Ñ\81мо Ð¿Ð¾Ñ\82вÑ\80дили Ð´Ð° Ð¾Ð²Ð°Ñ\98 Ð½Ð°Ð»Ð¾Ð³ Ñ\81Ñ\82ваÑ\80но Ð¿Ñ\80ипада Ð²Ð°Ð¼Ð° Ð¸ Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð°ÐºÑ\82ивиÑ\80али Ð¼Ð¾Ð³Ñ\83Ñ\9bноÑ\81Ñ\82и Ð¸Ð¼ÐµÑ\98ла Ð½Ð° {{SITENAME}}, Ð¾Ñ\82воÑ\80иÑ\82е Ñ\81ледеÑ\9bÑ\83 Ð²ÐµÐ·Ñ\83 Ñ\83 Ð¿Ñ\80егледаÑ\87Ñ\83:\n\n$3\n\nÐ\90ко Ð½Ð°Ð»Ð¾Ð³ *не* Ð¿Ñ\80ипада Ð²Ð°Ð¼Ð°, Ð¿Ñ\80аÑ\82иÑ\82е Ñ\81ледеÑ\9bÑ\83 Ð²ÐµÐ·Ñ\83 Ð´Ð° Ð¾Ñ\82кажеÑ\82е Ð¿Ð¾Ñ\82вÑ\80дÑ\83 Ð¸Ð¼ÐµÑ\98л адресе:\n\n$5\n\nОвај потврдни код истиче $4.",
+       "confirmemail_invalidated": "Ð\9fоÑ\82вÑ\80да Ð¸Ð¼ÐµÑ\98л Ð°Ð´Ñ\80еÑ\81е је отказана",
+       "invalidateemail": "Ð\9eÑ\82казиваÑ\9aе Ð¿Ð¾Ñ\82вÑ\80де Ð¸Ð¼ÐµÑ\98ла",
        "scarytranscludedisabled": "[Међувики укључивање шаблона је онемогућено]",
        "scarytranscludefailed": "[Добављање шаблона за $1 није успело]",
        "scarytranscludefailed-httpstatus": "[Не могу да преузмем шаблон $1: HTTP $2]",
        "htmlform-cloner-create": "Додај још",
        "htmlform-cloner-delete": "Уклони",
        "htmlform-cloner-required": "Бар једна вредност је потребна.",
-       "htmlform-title-not-exists": "[[:$1]] не постоји.",
+       "htmlform-title-not-exists": "$1 не постоји.",
        "htmlform-user-not-exists": "<strong>$1</strong> не постоји.",
        "htmlform-user-not-valid": "<strong>$1</strong> није исправно корисничко име.",
        "sqlite-has-fts": "$1 с подршком претраге целог текста",
        "logentry-newusers-newusers": "$1 је {{GENDER:$2|отворио|отворила}} кориснички налог",
        "logentry-newusers-create": "$1 је {{GENDER:$2|отворио|отворила}} кориснички налог",
        "logentry-newusers-create2": "$1 је {{GENDER:$2|отворио|отворила}} кориснички налог $3",
-       "logentry-newusers-byemail": "$1 Ñ\98е {{GENDER:$2|оÑ\82воÑ\80ио|оÑ\82воÑ\80ила}} ÐºÐ¾Ñ\80иÑ\81ниÑ\87ки Ð½Ð°Ð»Ð¾Ð³ $3 Ð¸ Ð»Ð¾Ð·Ð¸Ð½ÐºÐ° Ñ\98е Ð¿Ð¾Ñ\81лаÑ\82а Ð½Ð° Ðµ-поÑ\88Ñ\82Ñ\83",
+       "logentry-newusers-byemail": "$1 Ñ\98е {{GENDER:$2|оÑ\82воÑ\80ио|оÑ\82воÑ\80ила}} ÐºÐ¾Ñ\80иÑ\81ниÑ\87ки Ð½Ð°Ð»Ð¾Ð³ $3 Ð¸ Ð»Ð¾Ð·Ð¸Ð½ÐºÐ° Ñ\98е Ð¿Ð¾Ñ\81лаÑ\82а Ð½Ð° Ð¸Ð¼ÐµÑ\98л",
        "logentry-newusers-autocreate": "Кориснички налог $1 је аутоматски {{GENDER:$2|отворен}}",
        "logentry-protect-move_prot": "$1 је {{GENDER:$2|преместио|преместила}} поставке заштите са $4 на $3",
        "logentry-protect-unprotect": "$1 je {{GENDER:$2|скинуо|скинула}} заштиту са странице $3",
index 6890e79..9c3bc40 100644 (file)
@@ -19,7 +19,8 @@
                        "아라",
                        "Nemo bis",
                        "Srdjan m",
-                       "Macofe"
+                       "Macofe",
+                       "Сербијана"
                ]
        },
        "tog-underline": "Podvlačenje veza:",
        "category-media-header": "Datoteke u kategoriji „$1“",
        "category-empty": "<div style=\"margin:2em 1em 0 1em; padding:0.5em; border:1px solid #AAA; text-align:center;\">''Ova kategorija trenutno ne sadrži stranice ili datoteke.''</div>",
        "hidden-categories": "{{PLURAL:$1|Sakrivena kategorija|Sakrivene kategorije}}",
-       "hidden-category-category": "Sakrivene kategorije",
+       "hidden-category-category": "Skrivene kategorije",
        "category-subcat-count": "{{PLURAL:$2|1=Ova kategorija sadrži samo sledeću potkategoriju.|Ova kategorija ima {{PLURAL:$1|1=sledeću potkategoriju|sledeće $1 potkategorije|sledećih $1 potkategorija}}, od ukupno $2.}}",
        "category-subcat-count-limited": "Ova kategorija sadrži {{PLURAL:$1|sledeću potkategoriju|sledeće $1 potkategorije|sledećih $1 potkategorija}}.",
        "category-article-count": "{{PLURAL:$2|1=Ova kategorija sadrži samo sledeću stranicu.|{{PLURAL:$1|Sledeća stranica je|Sledeće $1 stranice su|Sledećih $1 stranica je}} u ovoj kategoriji, od ukupno $2.}}",
        "protectedpagewarning": "<strong>Upozorenje: ova stranica je zaštićena, tako da samo administratori mogu da je menjaju.</strong>\nPoslednji zapis u dnevniku je prikazan ispod:",
        "semiprotectedpagewarning": "'''Napomena:''' ova stranica je zaštićena, tako da samo registrovani korisnici mogu da je uređuju.\nPoslednji zapis u dnevniku je prikazan ispod:",
        "cascadeprotectedwarning": "<strong>Upozorenje:</strong> ova stranica je zaštićena tako da je mogu uređivati samo administratori, jer je ona uključena u {{PLURAL:$1|sledeću stranicu koja je|sledeće stranice koje su}} zaštićene „prenosivom“ zaštitom:",
-       "titleprotectedwarning": "'''Upozorenje: ova stranica je zaštićena tako da je mogu napraviti samo korisnici [[Special:ListGroupRights|s određenim pravima]].'''",
+       "titleprotectedwarning": "<strong>Upozorenje: ovu stranicu mogu napraviti samo korisnici [[Special:ListGroupRights|s određenim pravima]].</strong>\nIspod su navedeni poslednji zapisi u dnevniku:",
        "templatesused": "{{PLURAL:$1|Šablon|Šabloni}} na ovoj stranici:",
        "templatesusedpreview": "{{PLURAL:$1|Šablon|Šabloni}} u ovom pregledu:",
        "templatesusedsection": "{{PLURAL:$1|Šablon|Šabloni}} u ovom odeljku:",
        "revdelete-selected-text": "{{PLURAL:$1|Izabrana izmena|Izabrane izmene}} [[:$2]]:",
        "revdelete-selected-file": "{{PLURAL:$1|Izabrana verzija datoteke|Izabrane verzije datoteke}} [[:$2]]:",
        "logdelete-selected": "{{PLURAL:$1|Izabrana stavka u istoriji|Izabrane stavke u istoriji}}:",
-       "revdelete-text-text": "Izbrisane izmene će i dalje biti vidljive u istoriji stranice, ali delovi njihovog sadržaja neće biti javno dostupnu.",
-       "revdelete-text-file": "Izbrisane verzije datoteke će i dalje biti vidljive u istoriji datoteke, ali delovi njihovog sadržaja neće biti javno dostupnu.",
-       "logdelete-text": "Izbrisani unosi u dnevnicima će i dalje biti vidljivi u dnevnicima, ali delovi njihovog sadržaja neće biti javno dostupnu.",
+       "revdelete-text-text": "Izbrisane izmene će i dalje biti vidljive u istoriji stranice, ali delovi njihovog sadržaja neće biti javno dostupni.",
+       "revdelete-text-file": "Izbrisane verzije datoteke će i dalje biti vidljive u istoriji datoteke, ali delovi njihovog sadržaja neće biti javno dostupni.",
+       "logdelete-text": "Izbrisani unosi u dnevnicima će i dalje biti vidljivi u dnevnicima, ali delovi njihovog sadržaja neće biti javno dostupni.",
        "revdelete-text-others": "Ostali administratori će i dalje moći da pristupe skrivenom sadržaju i vrate ga, osim ako se postave dodatna ograničenja.",
        "revdelete-confirm": "Potvrdite da nameravate ovo uraditi, da razumete posledice i da to činite u skladu s [[{{MediaWiki:Policy-url}}|pravilima]].",
        "revdelete-suppress-text": "Sakrivanje izmena bi trebalo koristiti <strong>samo</strong> u sledećim slučajevima:\n* zlonamerni ili pogrdni podaci\n* neprikladni lični podaci\n*: <em>kućna adresa i broj telefona, broj kreditne kartice, JMBG itd.</em>",
        "pageinfo-recent-edits": "Broj skorašnjih izmena (u poslednjih $1)",
        "pageinfo-recent-authors": "Broj skorašnjih zasebnih autora",
        "pageinfo-magic-words": "{{PLURAL:$1|Magična reč|Magične reči}} ($1)",
-       "pageinfo-hidden-categories": "{{PLURAL:$1|Sakrivena kategorija|Sakrivene kategorije}} ($1)",
+       "pageinfo-hidden-categories": "{{PLURAL:$1|Skrivena kategorija|Skrivene kategorije}} ($1)",
        "pageinfo-templates": "{{PLURAL:$1|Uključeni šablon|Uključeni šabloni}} ($1)",
        "pageinfo-transclusions": "{{PLURAL:$1|Stranica|Stranice}} uključene u ($1)",
        "pageinfo-toolboxlink": "Podaci o stranici",
index 033a66c..9fc9329 100644 (file)
        "htmlform-cloner-required": "Det krävs minst ett värde.",
        "htmlform-title-badnamespace": "[[:$1]] är inte i \"{{ns:$2}}\"-namnrymden.",
        "htmlform-title-not-creatable": "\"$1\" är inte en sidtitel som kan skapas",
-       "htmlform-title-not-exists": "[[:$1]] finns inte.",
+       "htmlform-title-not-exists": "$1 finns inte.",
        "htmlform-user-not-exists": "<strong>$1</strong> finns inte.",
        "htmlform-user-not-valid": "<strong>$1</strong> är inte ett giltigt användarnamn.",
        "sqlite-has-fts": "$1 med stöd för fulltextsökning",
index 44d65fb..20a6f01 100644 (file)
        "htmlform-cloner-delete": "Sil",
        "htmlform-cloner-required": "En az bir değer gereklidir.",
        "htmlform-title-not-creatable": "\"$1\"oluşturulabilir bir sayfa ismi değil.",
-       "htmlform-title-not-exists": "[[:$1]] mevcut değil",
+       "htmlform-title-not-exists": "$1 mevcut değil",
        "htmlform-user-not-exists": "<strong>$1</strong> mevcut değil.",
        "htmlform-user-not-valid": "<strong>$1</strong> geçerli bir kullanıcı ismi değildir.",
        "sqlite-has-fts": "$1 tam-metin arama desteği ile",
index 4f12c93..57ac62a 100644 (file)
@@ -8,7 +8,8 @@
                        "Sborsody",
                        "friends at tyvawiki.org",
                        "לערי ריינהארט",
-                       "아라"
+                       "아라",
+                       "Монгуш Салим"
                ]
        },
        "tog-underline": "Холбааны шыяры:",
        "underline-never": "Кажан-даа",
        "underline-default": "Кештиң азы веб-браузерниң ниити үнези",
        "editfont-default": "Веб-браузерниң ниити үнези",
-       "sunday": "Улуг хүн",
+       "sunday": "Улуг-хүн",
        "monday": "Бир дугаар хүн",
        "tuesday": "Ийи дугаар хүн",
        "wednesday": "Үш дугаар хүн",
        "thursday": "Дөрт дугаар хүн",
        "friday": "Беш дугаар хүн",
-       "saturday": "ЧаÑ\80Ñ\82Ñ\8bк Ñ\83лÑ\83г хүн",
+       "saturday": "Ð\90лдÑ\8b Ð´Ñ\83гааÑ\80 хүн",
        "sun": "Улуг-хүн",
        "mon": "Пн",
        "tue": "Вт",
        "thu": "Чт",
        "fri": "Пт",
        "sat": "Сб",
-       "january": "Бир ай",
-       "february": "ийи ай",
-       "march": "Үш ай",
-       "april": "Ð\94Ó©Ñ\80Ñ\82 Ð°Ð¹",
-       "may_long": "Ð\91еÑ\88 ай",
-       "june": "Ð\90лдÑ\8b Ð°Ð¹",
-       "july": "Чеди Ð°Ð¹",
-       "august": "СеÑ\81 Ð°Ð¹",
-       "september": "Тос ай",
-       "october": "Ð\9eн Ð°Ð¹",
-       "november": "Ð\9eн Ð±Ð¸Ñ\80 Ð°Ð¹",
-       "december": "Ð\9eн Ð¸Ð¹Ð¸ Ð°Ð¹",
+       "january": "январь",
+       "february": "февраль",
+       "march": "март",
+       "april": "апÑ\80елÑ\8c",
+       "may_long": "май",
+       "june": "иÑ\8eнÑ\8c",
+       "july": "иÑ\8eлÑ\8c",
+       "august": "авгÑ\83Ñ\81Ñ\82",
+       "september": "сентябрь",
+       "october": "окÑ\82Ñ\8fбÑ\80Ñ\8c",
+       "november": "ноÑ\8fбÑ\80Ñ\8c",
+       "december": "декабÑ\80Ñ\8c",
        "january-gen": "Бир айның",
-       "february-gen": "Ð\98йи Ð°Ð¹Ð½Ñ\8bÒ£",
+       "february-gen": "ФевÑ\80алÑ\8c",
        "march-gen": "Үш айның",
        "april-gen": "Дөрт айның",
        "may-gen": "Беш айның",
        "october-gen": "Он айның",
        "november-gen": "Он бир айның",
        "december-gen": "Он ийи айның",
-       "jan": "1 ай",
-       "feb": "2 ай",
-       "mar": "3 ай",
-       "apr": "4 ай",
-       "may": "ай",
-       "jun": "6 ай",
-       "jul": "7 ай",
-       "aug": "8 ай",
-       "sep": "9 ай",
-       "oct": "10 ай",
-       "nov": "11 ай",
-       "dec": "12 ай",
-       "pagecategories": "{{PLURAL:$1|Ð\90ңгÑ\8bлал}}",
-       "category_header": "«$1» Ð´ÐµÐ¿ Ð±Ó©Ð»Ò¯ÐºÑ\82Ò¯ң арыннары",
+       "jan": "январь",
+       "feb": "фев",
+       "mar": "март",
+       "apr": "апрель",
+       "may": "май",
+       "jun": "июнь",
+       "jul": "июль",
+       "aug": "август",
+       "sep": "сентябрь",
+       "oct": "октябрь",
+       "nov": "ноябрь",
+       "dec": "декабрь",
+       "pagecategories": "{{PLURAL:$1|Ð\9aаÑ\82егоÑ\80иÑ\8f\9aаÑ\82егоÑ\80иÑ\8fлаÑ\80}}",
+       "category_header": "«$1» ÐºÐ°Ñ\82егоÑ\80иÑ\8fнÑ\8bң арыннары",
        "subcategories": "Адаккы бөлүктер",
        "category-media-header": "«$1» деп бөлүкте файлдар",
        "category-empty": "''Амгы бо бөлүкте медиа база арыннар чок.''",
-       "hidden-categories": "{{PLURAL:$1|1=ЧажÑ\8bÑ\82 Ð°Ò£Ð³Ñ\8bлал|ЧажÑ\8bÑ\82 Ð°Ò£Ð³Ñ\8bлалдар}}",
+       "hidden-categories": "{{PLURAL:$1|1=Ð\9aөзүлбеÑ\81 ÐºÐ°Ñ\82егоÑ\80иÑ\8f\9aөзүлбеÑ\81 ÐºÐ°Ñ\82егоÑ\80иÑ\8fлар}}",
        "hidden-category-category": "Чажыт бөлүктер",
-       "category-subcat-count": "{{PLURAL:$2|1=Ð\91о Ð°Ò£Ð³Ñ\8bлал Ñ\87үгле Ð´Ð°Ñ\80аазÑ\8bнда Ð°Ò£Ð³Ñ\8bламнÑ\8bг.|Ð\91о Ð°Ò£Ð³Ñ\8bлалдÑ\8bÒ£ Ñ\88Ñ\83пÑ\82Ñ\83 $2 Ð°Ò£Ð³Ñ\8bламнаÑ\80нÑ\8bÒ£ Ð°Ñ\80азÑ\8bндан Ð´Ð°Ñ\80аазÑ\8bнда $1 Ð°Ò£Ð³Ñ\8bламнÑ\8b ÐºÓ©Ñ\80гүÑ\81кен.}}",
+       "category-subcat-count": "{{PLURAL:$2|1=Ð\91о ÐºÐ°Ñ\82егоÑ\80иÑ\8f Ñ\87үгле Ð´Ð°Ñ\80аазÑ\8bнда Ð¸Ñ\88Ñ\82ики ÐºÐ°Ñ\82егоÑ\80иÑ\8fлÑ\8bг.|Ð\91о ÐºÐ°Ñ\82егоÑ\80иÑ\8fда Ð±Ð°Ñ\80-ла $2 Ð¸Ñ\88Ñ\82ики ÐºÐ°Ñ\82егоÑ\80иÑ\8fлаÑ\80нÑ\8bÒ£ $1 Ð´ÐµÐ¿ Ð¸Ñ\88Ñ\82ики ÐºÐ°Ñ\82егоÑ\80иÑ\8fзÑ\8b ÐºÓ©Ñ\81Ñ\82үп Ñ\82Ñ\83Ñ\80аÑ\80.}}",
        "category-subcat-count-limited": "Бо аңгылал {{PLURAL:$1|1=бир|$1}} аңгыламныг.",
-       "category-article-count": "{{PLURAL:$2|1=Ð\91о Ð°Ò£Ð³Ñ\8bлал Ñ\87үгле Ð´Ð°Ñ\80аазÑ\8bнда Ð°Ñ\80Ñ\8bннаÑ\80лÑ\8bг.|Ð\91о Ð°Ò£Ð³Ñ\8bлалдÑ\8bÒ£ Ñ\88Ñ\83пÑ\82Ñ\83 $2 Ð°Ñ\80Ñ\8bннаÑ\80Ñ\8bнÑ\8bÒ£ Ð°Ñ\80азÑ\8bндан Ð´Ð°Ñ\80аазÑ\8bнда $1 Ð°Ñ\80Ñ\8bнÑ\8bн көргүскен.}}",
-       "category-file-count": "{{PLURAL:$2|1=Ð\91о Ð±Ó©Ð»Ò¯Ðº Ñ\87үгле Ñ\87аңгÑ\8bÑ\81 Ñ\84айлдÑ\8bг.|Ð\91о Ð±Ó©Ð»Ò¯ÐºÑ\82Ò¯Ò£ Ð½Ð¸Ð¸Ñ\82и $2 файлының $1 файлын көргүскен.}}",
+       "category-article-count": "{{PLURAL:$2|1=Ð\91о ÐºÐ°Ñ\82егоÑ\80иÑ\8fда Ñ\87үгле Ñ\87аңгÑ\8bÑ\81 Ð°Ñ\80Ñ\8bн Ð±Ð°Ñ\80.|Ук ÐºÐ°Ñ\82егоÑ\80иÑ\8fда Ð±Ð°Ñ\80 $2 Ð°Ñ\80Ñ\8bннаÑ\80Ñ\8bнÑ\8bÒ£ Ð°Ñ\80азÑ\8bндан}} |{{PLURAL:$1 Ð°Ñ\80Ñ\8bннÑ\8b ÐºÓ©Ñ\80гүÑ\81кен| $1 Ð°Ñ\80Ñ\8bннаÑ\80нÑ\8b көргүскен.}}",
+       "category-file-count": "{{PLURAL:$2|1=Ð\91о ÐºÐ°Ñ\82егоÑ\80иÑ\8f Ñ\87үгле Ñ\87аңгÑ\8bÑ\81 Ñ\84айлдÑ\8bг.|Ð\91о ÐºÐ°Ñ\82егоÑ\80иÑ\8fнÑ\8bÒ£ Ñ\88Ñ\83пÑ\82Ñ\83 $2 файлының $1 файлын көргүскен.}}",
        "listingcontinuesabbrev": "(уланчы)",
        "noindex-category": "Индекстелбес арынар",
        "broken-file-category": "Ажылдавайн турар файл-шөлүлгелиг арыннар",
        "about": "Дугайында",
        "article": "Допчу арын",
-       "newwindow": "(чаа көзенээ ажыытынар)",
-       "cancel": "СокÑ\81ааÑ\80Ñ\8b",
+       "newwindow": "(чаа көзенекке)",
+       "cancel": "ЫнÑ\87анмаÑ\81",
        "moredotdotdot": "Артык...",
        "mypage": "Арын",
        "mytalk": "Чугаа",
        "faqpage": "Project:БлСА",
        "actions": "Кылыглар",
        "namespaces": "Аттар делгемнери",
-       "variants": "Бир янзы",
+       "variants": "Янзы-хевирлери",
+       "navigation-heading": "Навигация менюзу",
        "errorpagetitle": "Алдаг",
        "returnto": "«$1» деп арынже эглири.",
-       "tagline": "{{SITENAME}} деп веб-сайттан",
+       "tagline": "{{SITENAME}} сайттан",
        "help": "Дуза",
-       "search": "Диле",
+       "search": "Дилээр",
        "searchbutton": "Дилээр",
        "go": "Баары",
-       "searcharticle": "Ð\9aÒ¯Ò¯cедиÑ\80и",
+       "searcharticle": "Че-ве",
        "history": "Арынның төөгүзү",
        "history_short": "Төөгү",
-       "printableversion": "СаазÑ\8bнга Ò¯Ð½Ð´Ò¯Ñ\80еÑ\80ин ÐºÓ©Ó©Ñ\80Ò¯",
-       "permalink": "ТÑ\83Ñ\80Ñ\83м Ð°Ð¹Ñ\82Ñ\8bг",
+       "printableversion": "Ð\9fаÑ\80лап Ò¯Ð½Ð´Ò¯Ñ\80еÑ\80 Ñ\8fнзÑ\8bзÑ\8b",
+       "permalink": "Ð\94окÑ\82аамал Ñ\88өлүлге",
        "print": "Саазынга үндүрер",
-       "view": "Көөрү",
+       "view": "Көөр",
+       "view-foreign": "$1 сайттан көөр",
        "edit": "Эдер",
        "create": "Чогаадыры",
+       "create-local": "Кызыы тайылбыр немээр",
        "editthispage": "Бо арынны өскертири",
        "create-this-page": "Бо арынны чогаадыры",
        "delete": "Ыраары",
        "unprotectthispage": "Бо арынның камгалалын өскертири",
        "newpage": "Чаа арын",
        "talkpage": "Бо арын дугайында чугаалажыры",
-       "talkpagelinktext": "Чугаа",
+       "talkpagelinktext": "Чугаалажып сайгарар",
        "specialpage": "Тускай арын",
        "personaltools": "Хууда херекселдер",
        "articlepage": "Допчу арынны көөрү",
-       "talk": "ЧÑ\83гаа",
-       "views": "Көрүүшкүннери",
+       "talk": "СайгаÑ\80Ñ\8bлга",
+       "views": "Көрүлделер",
        "toolbox": "Херекселдер",
        "userpage": "Ажыглакчының арынын көөрү",
        "projectpage": "Төлевилелдиң арынын көөрү",
        "categorypage": "Бөлүктүң арынын көөрү",
        "viewtalkpage": "Чугааны көөрү",
        "otherlanguages": "Өске дылдарга",
-       "redirectedfrom": "($1 шигленген)",
+       "redirectedfrom": "($1 катап чоруткан)",
        "redirectpagesub": "шигледир арын",
-       "lastmodifiedat": "Бо арын сөөлгү катап $1, $2 өскерилген.",
+       "lastmodifiedat": "Бо арын сөөлгү катап $1-ның хүнүнде, $2 турда өскерилген.",
        "protectedpage": "Камгалаган арын",
        "jumpto": "Шилчиир:",
        "jumptonavigation": "навигация",
-       "jumptosearch": "дилээри",
+       "jumptosearch": "дилээр",
        "pool-errorunknown": "Билбес алдаг",
        "aboutsite": "{{SITENAME}} дугайында",
        "aboutpage": "Project:Дугайында",
-       "copyrightpage": "{{ns:project}}:ЧогаалÑ\87Ñ\8bнÑ\8bң эргелери",
+       "copyrightpage": "{{ns:project}}:авÑ\82оÑ\80нÑ\83ң эргелери",
        "currentevents": "Амгы үеде болуушкуннар",
        "currentevents-url": "Project:Амгы үеде болуушкуннар",
-       "disclaimers": "Ð\90жÑ\8bглааÑ\80 Ñ\85аÑ\80Ñ\8bÑ\81аалгазÑ\8bн Ñ\87Ó©Ñ\80Ñ\87Ò¯Ò¯Ñ\80Ò¯ (ойÑ\82алааÑ\80Ñ\8b)",
-       "disclaimerpage": "Project:Ð\90жÑ\8bглааÑ\80 Ñ\85аÑ\80Ñ\8bÑ\81аалгазÑ\8bн Ð¾Ð¹Ñ\82алааÑ\80Ñ\8b",
+       "disclaimers": "ХаÑ\80Ñ\8bÑ\8bÑ\81алгадан Ð¾Ð¹Ñ\82алал",
+       "disclaimerpage": "Project:ХаÑ\80Ñ\8bÑ\8bÑ\81алгадан Ð¾Ð¹Ñ\82алааÑ\88кÑ\8bн",
        "edithelp": "Эдеринге дуза",
-       "mainpage": "Ð\9aол Ð\90рын",
-       "mainpage-description": "Ð\9aол Ð\90рын",
+       "mainpage": "Ð\9aол Ð°рын",
+       "mainpage-description": "Ð\9aол Ð°рын",
        "policy-url": "Project:Чурум",
-       "portal": "Ниитилел хаалгазы",
-       "portal-url": "Project:Ниитилел хаалгазы",
-       "privacy": "Ð\90кÑ\82Ñ\8bг Ð±үзүрел дугуржулгазы",
-       "privacypage": "Project:Ð\90кÑ\82Ñ\8bг Ð±үзүрел дугуржулгазы",
+       "portal": "Ниитилелдиң порталы",
+       "portal-url": "Project:Ниитилелдиң порталы",
+       "privacy": "Ð\91үзүрел дугуржулгазы",
+       "privacypage": "Project:Ð\91үзүрел дугуржулгазы",
        "badaccess": "Алдаг:Эргеңер чок.",
        "versionrequired": "МедиаВикиниң $1 үндүреризи херек",
        "ok": "Чөп",
-       "retrievedfrom": "«$1» деп адрестен парлаттынган",
+       "retrievedfrom": "Дөзү - «$1»",
        "youhavenewmessages": "Силерде $1 ($2) бар.",
        "youhavenewmessagesmulti": "«$1» деп арында силерге чаа чагаалар бар.",
        "editsection": "эдер",
        "editold": "эдер",
        "viewsourceold": "дөзү кодун көөрү",
        "editlink": "эдер",
-       "viewsourcelink": "дөзү кодун көөрү",
-       "editsectionhint": "«$1» деп салбырны эдер",
+       "viewsourcelink": "Үндезин кодту көөр",
+       "editsectionhint": "«$1» салбырны эдер",
        "toc": "Допчузу",
        "showtoc": "көргүзери",
        "hidetoc": "чажырары",
        "feedlinks": "Агым:",
        "feed-invalid": "Бижидилгениң агым хевири багай-дыр.",
        "site-rss-feed": "$1 RSS Медээ Агымы",
-       "site-atom-feed": "$1 Atom Медээ Агымы",
+       "site-atom-feed": "$1 Atom-лента",
        "page-rss-feed": "«$1» RSS Медээ Агымы",
        "page-atom-feed": "«$1» Atom Медээ Агымы",
-       "red-link-title": "$1 (арны чок)",
+       "red-link-title": "$1 (арын чок)",
        "nstab-main": "Арын",
        "nstab-user": "Ажыглакчының арыны",
        "nstab-media": "Медиа арыны",
-       "nstab-special": "ТÑ\83Ñ\81кай арын",
+       "nstab-special": "Ð\90лбан-Ñ\85аакÑ\87Ñ\8bÑ\82 арын",
        "nstab-project": "Төлевилел дугайында",
        "nstab-image": "Файл",
        "nstab-mediawiki": "Чагаа",
        "nstab-template": "Майык",
        "nstab-help": "Дуза",
-       "nstab-category": "Аңгылал",
+       "nstab-category": "Категория",
+       "mainpage-nstab": "Кол арын",
        "nosuchaction": "Ындыг кылыг чок",
        "nosuchspecialpage": "Ындыг тускай арын чок",
        "error": "Алдаг",
        "internalerror_info": "Иштики алдаг: $1",
        "badtitle": "Багай ат",
        "badtitletext": "Негеттинип турар арын ады меге, куруг, чок болза өске дылда азы интервикиде ады шын эвес айыттынган.\n\nАттарга ажыглавас ужурлуг демдектер, үжүктер бары чадапчок.",
-       "viewsource": "Ð\94өзүн ÐºÓ©Ó©Ñ\80Ò¯",
+       "viewsource": "Ð\9aÓ©Ñ\80үлде",
        "actionthrottled": "Шеглээн дүрген",
        "exception-nologin": "Кирбес",
        "welcomeuser": "Кирип моорлаңар, %s!",
        "yourname": "Aжыглакчының ады",
+       "userlogin-yourname": "Бүрүткел ат",
+       "userlogin-yourname-ph": "Бүрүткедир адыңар киириңер",
        "yourpassword": "Чажыт сөс",
+       "userlogin-yourpassword": "Пароль",
        "yourpasswordagain": "Чажыт сөзүңерни катап бижиңер:",
        "remembermypassword": "Мени бо компьютерде сактып алыры ($1 {{PLURAL:$1|1=хүн|хүн}}ге чедир)",
        "login": "Кирери",
        "accountcreatedtext": "«$1» деп ажыглакчының бүрүткел бижиини бүдүрген.",
        "login-abort-generic": "Системаже таптыг эвес кирип тур силер",
        "loginlanguagelabel": "Дыл: $1",
+       "pt-login": "Кирер",
+       "pt-createaccount": "Бүрүткел бижик кылыр",
        "pt-userlogout": "Үнер",
        "php-mail-error-unknown": "PHP-ниң mail() ажыл-чорудулгазында билбес алдаг бар.",
        "changepassword": "Чажыт сөстү өскертири",
        "passwordreset-email": "Э-чагааның адреси:",
        "passwordreset-emailelement": "Ажыглакчы ады: \n$1\n\nТүр чажыт сөс: \n$2",
        "changeemail": "Э-чагааның адресин өскертири",
+       "changeemail-header": "Бүрүткел бижиктиң э-чагааның адресин өскертири",
        "changeemail-oldemail": "Амгы э-чагааның адреси:",
        "changeemail-newemail": "Чаа э-чагааның адреси:",
        "changeemail-none": "(чок)",
        "changeemail-submit": "Э-чагааны өскертири",
-       "bold_sample": "Кара сөзүглел",
-       "bold_tip": "Кара сөзүглел",
-       "italic_sample": "Ð\98йлендиÑ\80еÑ\80 Ñ\81өзүглел",
-       "italic_tip": "Курсив бижик",
-       "link_sample": "ХолбаанÑ\8bң ады",
-       "link_tip": "Ð\98Ñ\88Ñ\82ики Ñ\85олбаа",
+       "bold_sample": "семис үжүк",
+       "bold_tip": "семис үжүк",
+       "italic_sample": "кÑ\83Ñ\80Ñ\81ив Ñ\85евиÑ\80",
+       "italic_tip": "Курсив хевир",
+       "link_sample": "Шөлүлгениң ады",
+       "link_tip": "Ð\98Ñ\88Ñ\82ики Ñ\88өлүлге",
        "extlink_sample": "http://www.example.com холбааның ады",
-       "extlink_tip": "Ð\94аÑ\88Ñ\82Ñ\8bкÑ\8b Ñ\85олбаа (\"http://\" Ñ\87үве Ñ\81акÑ\82Ñ\8bп Ð°Ð»Ñ\8bр)",
-       "headline_sample": "Ð\9aÑ\8bÑ\80Ñ\8bкÑ\8b сөзүглели",
-       "headline_tip": "2-ги деңнелдиг кырыкы ады",
-       "nowiki_sample": "Форматтаваан сөзүглелини бээр салыры",
-       "nowiki_tip": "Вики форматтаарын херекке албас",
+       "extlink_tip": "Ð\94аÑ\88Ñ\82Ñ\8bкÑ\8b Ñ\88өлүлге (\"http://\" Ð¿Ñ\80еÑ\84икÑ\81 Ð´Ñ\83гайÑ\8bнда Ñ\83Ñ\82паңар)",
+       "headline_sample": "Эге Ð°Ñ\82Ñ\82Ñ\8bÒ£ сөзүглели",
+       "headline_tip": "2-ги деңнелдиң эге ады",
+       "nowiki_sample": "Форматтавас сөзүглелди бээр салыңар",
+       "nowiki_tip": "Вики-форматтаашкын кылбас",
        "image_sample": "Чижек.jpg",
-       "image_tip": "Киир туткан файл",
+       "image_tip": "Киирген файл",
        "media_sample": "Чижек.ogg",
-       "media_tip": "Файлдың холбаазы",
-       "sig_tip": "Шак-биле Ñ\85ол Ò¯Ð¶Ò¯Ò£ÐµÑ\80",
+       "media_tip": "Файлче шөлүлге",
+       "sig_tip": "ХолÑ\83ңаÑ\80 Ò¯Ð¶Ò¯Ò¯, Ò¯Ðµ-Ñ\88агÑ\8b",
        "hr_tip": "Доора шугум (көвей ажыглаваңар)",
        "summary": "Түңнел:",
        "subject": "Кол сөс:",
        "minoredit": "Бо эдилге бичии-дир",
-       "watchthis": "Бо арынны хайгаараары",
-       "savearticle": "Арын шыгжаар",
+       "watchthis": "Бо арынны хайгаараар",
+       "savearticle": "Арынны шыгжаар",
        "preview": "Чижеглей көөрү",
-       "showpreview": "Чижеглей ÐºÓ©Ó©Ñ\80Ò¯",
-       "showdiff": "Өскерлиишкиннерни көргүзери",
-       "anoneditwarning": "<strong>Кичээңгейлиг!</strong> Силер сайтче кирип албаан силер. Чаартылгалар киирер болзуңарза, Силерниң IP-адрезиңер чүүлдүң төөгүзүнге көстүп кээр. Кажан сайтче <strong>[$1 шолаңар-биле кире бээриңерге]</strong> азы <strong>[$2 чаа шола чаяап алырыңарга]</strong>, эдилгеңерни шолаңар-биле холбаап каар база Силерге ажыктыг тускай херекселдер тыптып келир.",
+       "showpreview": "Чижек ÐºÓ©Ñ\80үлде",
+       "showdiff": "Кииртинген эдилгелер",
+       "anoneditwarning": "<strong> Кичээңгейлиг! </strong> Сайтта бүрүткеттинмээн-дир силер. Кандыг-даа бол эдилгелер киирер болзуңарза, IP-адрезиңер хөйге көскү болур. Сайтче <strong>[$1 кире бээр азы]</strong> азы <strong>[$2 бүрүткеттинип алыр] болзуңарза, эдилгелер силерниң адыңар-биле холбаалыг апаар, силерге өске-даа эптиг аргаларлыг тыптып кээр.",
        "missingcommenttext": "Тайылбырни адаанда чогаадыңар.",
        "summary-preview": "Түңнелдү чижеглей көөрү:",
        "subject-preview": "Кол сөс чижеглей көөрү:",
        "blockednoreason": "чылдагаан чок",
        "nosuchsectiontitle": "Бо салбыр чок",
-       "loginreqlink": "кирери",
+       "loginreqlink": "кирер",
        "accmailtitle": "Чажыт сөс чоргустунган.",
        "accmailtext": "A randomly generated password for [[User talk:$1|$1]] has been sent to $2.\n\nThe password for this new account can be changed on the ''[[Special:ChangePassword|change password]]'' page upon logging in.",
        "newarticle": "(Чаа)",
        "newarticletext": "Амдыызында чаяатынмаан арынче шөлүглеп шилчий бердиңер.\nОну чаяарда адакы көзенекке сөзүглелден таналап киириңер ([$1 тайылбыр арынын] тода көрүңер).. \nМаңаа алдаг аайы-биле шилчий берген болзуңарза, браузериңерниң \"дедир\"  деп таназын базыптыңар.",
        "noarticletext": "Амдыызында ук арында сөзүглел чок.\nОл дилеп турар [[Special:Search/{{PAGENAME}}|арыныңар дугайында өске чүүлдерге бижээнин тып аап]] болур силер,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} журналдар аразынга айытканын көрүп болур силер] азы '''[{{fullurl:{{FULLPAGENAME}}|action=edit}} шак ындыг аттыг арын чаяап болур силер]'''</span>.,",
-       "noarticletext-nopermission": "Ð\90мдÑ\8bÑ\8bзÑ\8bнда Ñ\83к Ð°Ñ\80Ñ\8bнда Ñ\81өзүглел Ñ\87ок.\nÐ\9eл Ð´Ð¸Ð»ÐµÐ¿ Ñ\82Ñ\83Ñ\80аÑ\80 [[Special:Search/{{PAGENAME}}|аÑ\80Ñ\8bнÑ\8bңаÑ\80 Ð´Ñ\83гайÑ\8bнда Ó©Ñ\81ке Ñ\87үүлдеÑ\80ге Ð±Ð¸Ð¶Ñ\8dÑ\8dнин Ñ\82Ñ\8bп Ð°Ð°Ð¿]] Ð±Ð¾Ð»Ñ\83Ñ\80 Ñ\81илеÑ\80, Ð°Ð·Ñ\8b\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} Ð¶Ñ\83Ñ\80налдаÑ\80 Ð°Ñ\80азÑ\8bнга Ð°Ð¹Ñ\8bÑ\82канÑ\8bн ÐºÓ©Ñ\80үп Ð±Ð¾Ð»Ñ\83Ñ\80 Ñ\81илеÑ\80]. Ð¨Ð°Ðº Ñ\8bндÑ\8bг Ñ\83к Ð°Ñ\80Ñ\8bн Ñ\87аÑ\8fаÑ\80 Ñ\87Ó©Ñ\88пÑ\8dÑ\8dÑ\80елиңеÑ\80 чок.",
+       "noarticletext-nopermission": "Ð\90мгÑ\8b Ò¯ÐµÐ´Ðµ Ð±Ð¾ Ð°Ñ\80Ñ\8bнда Ñ\81өзүглел Ñ\87ок. Ð£Ðº Ð°Ñ\82Ñ\82Ñ\8b Ó©Ñ\81ке Ð°Ñ\80Ñ\8bннаÑ\80дан Ñ\82Ñ\8bп Ð°Ð¿, Ð°Ð·Ñ\8b [[Special:Search/{{PAGENAME}}|аÑ\80Ñ\8bнÑ\8bңаÑ\80 Ð´Ñ\83гайÑ\8bнда Ó©Ñ\81ке Ñ\87үүлдеÑ\80ге Ð±Ð¸Ð¶Ñ\8dÑ\8dнин Ñ\82Ñ\8bп Ð°Ð¿]] Ð±Ð¾Ð»Ñ\83Ñ\80 Ñ\81илеÑ\80, Ð°Ð·Ñ\8b\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} Ð´ÐµÐ¿Ñ\82еÑ\80леÑ\80де Ñ\87огÑ\83Ñ\83Ñ\80 Ð±Ð¸Ð¶Ð¸ÐºÑ\82еÑ\80ни Ñ\82Ñ\8bп Ð°Ð¿ Ð±Ð¾Ð»Ñ\83Ñ\80 Ñ\81илеÑ\80]. Ð£Ðº Ð°Ñ\80Ñ\8bннÑ\8b ÐºÑ\8bлÑ\8bÑ\80 Ñ\87өпÑ\88Ñ\8dÑ\8dÑ\80ел Ñ\81илеÑ\80де чок.",
        "userpage-userdoesnotexist": "«<nowiki>$1</nowiki>» деп ажыглакчы is not registered.\nPlease check if you want to create/edit this page.",
        "userpage-userdoesnotexist-view": "«$1» деп ажыглакчы not registered.",
        "note": "'''Тайылбыр:'''",
        "editingcomment": "«$1» деп арынны өскертип турар (чаа салбыр)",
        "yourtext": "Силерниң сөзүглелиңер",
        "yourdiff": "Ылгалдар",
-       "templatesused": "Ð\91о Ð°Ñ\80Ñ\8bнда Ð°Ð¶Ñ\8bглаан {{PLURAL:$1|1=Ð\9cайÑ\8bк|Ð\9cайыктар}}:",
+       "templatesused": "Ð\91о Ð°Ñ\80Ñ\8bнда Ð°Ð¶Ñ\8bглап Ñ\82Ñ\83Ñ\80аÑ\80{{PLURAL:$1|1=майÑ\8bк|майыктар}}:",
        "template-protected": "(камгалаан)",
-       "template-semiprotected": "(Ñ\87еÑ\82пеÑ\81 ÐºÐ°Ð¼Ð³Ð°Ð»Ð°Ð°Ð½)",
-       "hiddencategories": "Бо арын {{PLURAL:$1|$1 чажыт бөлүкке}} хамааржыр:",
-       "permissionserrorstext-withaction": "Мында «'''$2'''» силерниң эргеңер чок, {{PLURAL:$1|1=чылдагааны|чылдагааннары}}:",
+       "template-semiprotected": "(Ñ\87аÑ\80Ñ\82Ñ\8bк-Ñ\87амдÑ\8bÑ\8bзÑ\8b ÐºÐ°Ð¼Ð³Ð°Ð»Ð°Ð»Ð´Ñ\8bг)",
+       "hiddencategories": "Бо арын{{PLURAL:$1|$1 көзүлбес категорияга|$1 көзүлбес категорияларга|1=бир көзүлбес категорияга}} хамааржыр:",
+       "permissionserrorstext-withaction": "{{PLURAL:$1|1=дараазында чылдагаан-биле|дараазында чылдагааннар-биле}} $2-ни ажыглаар эрге силерде чок:",
        "recreate-moveddeleted-warn": "'''Кичээңейлиг. Ооң мурнунда казыттынган арынны катап тургузар деп тур Силер.'''\n\nОл арынны катап тургузары шынап-ла чугула бе, боданыңар.\nБо адаанда ол арынның казыышкыннар болгаш өскээр адалгалар журналдарын көргүскен.",
        "moveddeleted-notice": "Бо арын ап каавыткан.\nАдаанда ап каавыткан биле өскээр адаан бижиктер шынзылгазын көргүскен.",
        "post-expand-template-inclusion-warning": "Сагындырыг: Кошкан майыктарның ниити хемчээли дендии улуг.\nЧамдык майыктар коштунмаан боор.",
        "currentrev-asof": "Амгы $1 үениң бижээни",
        "revisionasof": "$1 версиязы",
        "revision-info": "$2 киржикчиниң $1 хүнүнде киирилдези",
-       "previousrevision": "←Артык эрги үндүрери",
+       "previousrevision": "←Амдыы арын",
        "nextrevision": "Артык чаа үндүрери→",
        "currentrevisionlink": "Амгы үе үндүрери",
        "cur": "амгы",
        "next": "дараазында",
-       "last": "эрткен",
+       "last": "амдыы",
        "page_first": "бирги",
        "page_last": "сөөлгү",
        "histlegend": "Версиялар шилиири: деңнээр дээн арыныңар версияларын имнеңеш, бээр базыптыңар '''{{int:compare-submit}}'''.<br />\nТайылбыр: '''({{int:cur}})''' — амгы версиядан ылгавыр; '''({{int:last}})''' — эрткен версиядан ылгавыр;  '''{{int:minoreditletter}}''' — биче өскерилгелер.",
        "history-title": "«$1» деп арынның эдилге төөгүзү",
        "lineno": "Одуруг $1:",
        "compareselectedversions": "Шилип алган хевирлери деңнээри",
-       "editundo": "чөрчүүрү",
-       "searchresults": "ТүңнелдеÑ\80",
-       "searchresults-title": "«$1» Ð´ÐµÐ¿ Ð´Ð¸Ð»Ðµ",
-       "prevn": "эрткен {{PLURAL:$1|$1}}",
+       "editundo": "ойталаар",
+       "searchresults": "Ð\94илÑ\8dÑ\8dÑ\88кинниң Ñ\82үңнелдеÑ\80и",
+       "searchresults-title": "«$1» Ð´Ð¸Ð»Ñ\8dÑ\8dÑ\80",
+       "prevn": "амдыы {{PLURAL:$1|$1}}",
        "nextn": "дараазында {{PLURAL:$1|$1}}",
        "prevn-title": "Эрткен $1 {{PLURAL:$1|1=бижик|бижик}}",
        "nextn-title": "Дараазында $1 {{PLURAL:$1|1=бижик|бижик}}",
-       "shown-title": "Арынга $1 {{PLURAL:$1|түңнел}} көргүзер",
-       "viewprevnext": "($1 {{int:pipe-separator}} $2) ($3) көөрү",
+       "shown-title": "Арынга $1 {{PLURAL:$1|бижикти, бижиктерни, бижиктерин}} көргүзер",
+       "viewprevnext": "($1 {{int:pipe-separator}} $2) ($3) көөр",
        "searchmenu-exists": "'''Бо викиде \"[[:$1]]\" деп арын бар.'''",
-       "searchmenu-new": "'''Бо викиде «[[:$1]]» арынны чогаадыры'''",
+       "searchmenu-new": "Бо вики-төлевилелге «[[:$1]]» деп арынны кылыр.{{PLURAL:$2|0=|Ол ышкаш дилээшкиниңерниң түңнелинде тывылган арынны база көрүңер.|Ол ышкаш дилээшкиниңерниң түңнелдерин база көрүңер.}}",
        "searchprofile-articles": "үндезин арыннар",
        "searchprofile-images": "Мультимедиа",
-       "searchprofile-everything": "Ð\91үгүде",
-       "searchprofile-advanced": "Ð\9aалбайÑ\82Ñ\8bÑ\80",
+       "searchprofile-everything": "каÑ\8fа-даа",
+       "searchprofile-advanced": "Ð\94елгеÑ\80еңгей",
        "searchprofile-articles-tooltip": "$1 иштинден дилээри",
        "searchprofile-images-tooltip": "Файлдар дилээри",
-       "searchprofile-everything-tooltip": "Шупту арыннардан дилээри (сумележиишкиннерден база)",
+       "searchprofile-everything-tooltip": "Шупту арыннардан дилээр (сайгаржылга арыннарындан база)",
        "searchprofile-advanced-tooltip": "Айыткан аттар делгемнеринден дилээри",
-       "search-result-size": "$1 ({{PLURAL:$2|$2 сөс}})",
+       "search-result-size": "$1 ({{PLURAL:$2|$2 сөс|$2 сөстер|$2}})",
        "search-result-category-size": "{{PLURAL:$1|1=1 кежигүүн|$1 кежигүүн}} ({{PLURAL:$2|1=1 аңгылам|$2 аңгылам}}, {{PLURAL:$3|1=1 файл|$3 файл}})",
-       "search-redirect": "($1-н Ñ\88иглелге)",
+       "search-redirect": "($1-ден Ñ\8dде Ñ\87оÑ\80Ñ\83дÑ\83г)",
        "search-section": "(«$1» деп салбыр)",
        "search-suggest": "Силер «$1» деп бодадыңар чадавас",
        "search-interwiki-more": "(артык)",
        "searchrelated": "холбаалыг",
        "searchall": "шупту",
-       "search-nonefound": "Ð\90йÑ\8bÑ\82кан Ð½ÐµÐ³ÐµÐ»Ð´ÐµÐ½Ð¸Ò£ Ñ\82үңнели Ñ\87ок",
+       "search-nonefound": "Ð\90йÑ\8bÑ\82кан Ð½ÐµÐ³ÐµÐ»Ð´ÐµÐ³Ðµ Ð´Ò¯Ð³Ð¶Ò¯Ñ\80 Ñ\87Ò¯Ò¯-даа Ñ\82Ñ\8bвÑ\8bлбаан.",
        "powersearch-ns": "Аттар делгемнеринден дилээри:",
        "powersearch-toggleall": "Шупту",
        "preferences": "Шилилгелер",
        "right-createaccount": "Чаа бүрүткел бижиктерин бүдүрери",
        "right-move": "Арыннарны шимчээри",
        "right-movefile": "Файлдарны шимчээри",
+       "right-writeapi": "API-ни бижикке ажыглаары",
        "right-editusercssjs": "Өске ажыглакчыларның CSS база Javascript файлдарын өскертири.",
        "right-editusercss": "Өске ажыглакчыларның CSS файлдарын өскертири.",
        "right-edituserjs": "Өске ажыглакчыларның JavaScript файлдарын өскертири.",
-       "newuserlogpage": "Чаа Ð°Ð¶Ñ\8bглакÑ\87Ñ\8b ÐºÑ\8bÑ\80Ñ\8bнда Ð¶Ñ\83Ñ\80нал",
+       "newuserlogpage": "Ð\9aиÑ\80жикÑ\87илеÑ\80 Ð±Ò¯Ñ\80Ò¯Ñ\82кÑ\8dÑ\8dÑ\80 Ð´ÐµÐ¿Ñ\82еÑ\80",
        "action-read": "бо арынны номчууру",
        "action-edit": "бо арынның эдилгези",
        "action-createpage": "арыннарны чогаадыры",
        "action-movefile": "бо файлды шимчээри",
        "action-sendemail": "э-чагаалар чорудары",
        "nchanges": "$1 {{PLURAL:$1|өскерлиишкин}}",
-       "recentchanges": "Ð\90мгÑ\8b Ó©Ñ\81кеÑ\80лииÑ\88киннер",
-       "recentchanges-legend": "Ð\90мгÑ\8b Ó©Ñ\81кеÑ\80лииÑ\88киннеÑ\80ниң Ñ\8dдиглеÑ\80и",
-       "recentchanges-summary": "Ð\91о Ð°Ð³Ñ\8bмда Ð²Ð¸ÐºÐ¸Ð½Ð¸Ò£ Ñ\81өөлгү Ó©Ñ\81кеÑ\80лииÑ\88киннеÑ\80ин ÐºÓ©Ó©Ñ\80Ò¯.",
+       "recentchanges": "Чаа Ñ\8dдилгелер",
+       "recentchanges-legend": "Чаа Ñ\8dдилгелеÑ\80ни Ð°Ð°Ð¹Ð»Ð°Ð°Ñ\80",
+       "recentchanges-summary": "Ð\9cооң Ð°Ð´Ð°Ð°Ð½Ð´Ð° Ð°Ñ\80Ñ\8bннаÑ\80да Ñ\81өөлгү Ó©Ñ\81кеÑ\80илгелеÑ\80ни Ò¯Ðµ-Ñ\88ак Ð°Ð°Ð¹Ñ\8b-биле Ñ\87изелеп Ñ\87Ñ\8bÑ\81кааган.",
        "recentchanges-feed-description": "Бо агымда викиниң сөөлгү өскерлиишкиннерин көөрү.",
-       "recentchanges-label-newpage": "Бо өскерлиишкин чаа арынны чогааткан.",
-       "recentchanges-label-minor": "Ð\91о Ó©Ñ\81кеÑ\80лииÑ\88кин Ð±Ð¸Ñ\87ии",
+       "recentchanges-label-newpage": "Бо эдилге-биле чаа арын кылдынган.",
+       "recentchanges-label-minor": "УлÑ\83г Ñ\8dвеÑ\81 Ó©Ñ\81кеÑ\80Ñ\82илге-диÑ\80",
        "recentchanges-label-bot": "Бо эдилгени робот күүсеткен.",
-       "recentchanges-label-unpatrolled": "Бо өскертилге истетинмээн (патрульдаттынмаан)",
+       "recentchanges-label-unpatrolled": "Бо эдилгени кым-даа хайгаараваан",
        "recentchanges-label-plusminus": "Арынның сөзүглели бердинген түң байт-биле өскерилген",
-       "recentchanges-legend-newpage": "$1 — чаа арын",
+       "recentchanges-legend-newpage": " $1 — чаа арыннар даңзызы",
        "rcnotefrom": "<strong>$2</strong> үеде <strong>$1</strong> чедир өскертилгелерни санаан.",
-       "rclistfrom": "$3 $2 тура чаа өскерилгелерни көргүзер",
-       "rcshowhideminor": "Бичии өскерлиишкиннерни $1",
+       "rclistfrom": "$3 $2 тура өскерилгелерни көргүзер",
+       "rcshowhideminor": "$1 биче эдилгелер",
        "rcshowhideminor-show": "көргүзер",
        "rcshowhideminor-hide": "чажырар",
        "rcshowhidebots": "Роботтарны $1",
-       "rcshowhideliu": "Кирген киржикчилерни $1",
+       "rcshowhidebots-show": "Көргүзер",
+       "rcshowhideliu": "бүрүткеттинген киржикчилер $1",
        "rcshowhideliu-show": "көргүзер",
-       "rcshowhideliu-hide": "чажырар",
-       "rcshowhideanons": "Адыжок киржикчилерни $1",
+       "rcshowhideliu-hide": "Чажырар",
+       "rcshowhideanons": "Ады билдинмес киржикчилер $1",
        "rcshowhideanons-show": "көргүзер",
        "rcshowhideanons-hide": "чажырар",
        "rcshowhidepatr": "истээн өскерлиишкиннерни $1",
        "rcshowhidepatr-show": "көргүзер",
        "rcshowhidepatr-hide": "чажырар",
-       "rcshowhidemine": "Эдиглеримни $1",
+       "rcshowhidemine": "$1 боттуң эдилгелери",
        "rcshowhidemine-show": "көргүзер",
        "rcshowhidemine-hide": "чажырар",
-       "rclinks": "Сөөлгү $2 Ñ\85үн Ð¸Ñ\88Ñ\82инде Ð±Ð¾Ð»Ð³Ð°Ð½ $1 өскерлиишкиннерни көргүзер<br />$3",
+       "rclinks": "ЧооккÑ\83 $2 Ñ\85үн Ð¸Ñ\88Ñ\82инде Ñ\81өөлгү $1 өскерлиишкиннерни көргүзер<br />$3",
        "diff": "ылгал",
        "hist": "төөгү",
        "hide": "Чажырар",
        "newpageletter": "Ч",
        "boteditletter": "р",
        "number_of_watching_users_pageview": "[$1 хайгаараар {{PLURAL:$1|ажыглакчы}}]",
+       "rc-change-size-new": "Өскертилге соонда хемчээли:$1 {{PLURAL:$1|байт}}",
        "newsectionsummary": "/* $1 */ чаа салбыр",
        "rc-enhanced-expand": "Тодаларны көргүзери (JavaScript херек)",
        "rc-enhanced-hide": "Тодаларны чажырары",
-       "recentchangeslinked": "ХамааÑ\80Ñ\8bÑ\88кан өскерилгелер",
-       "recentchangeslinked-toolbox": "ХамааÑ\80Ñ\8bÑ\88кан өскерилгелер",
-       "recentchangeslinked-title": "«$1» деп арынга хамаарыштырган өскерлиишкиннер",
+       "recentchangeslinked": "ТÑ\83дÑ\83Ñ\88 өскерилгелер",
+       "recentchangeslinked-toolbox": "ТÑ\83дÑ\83Ñ\88 өскерилгелер",
+       "recentchangeslinked-title": "«$1» деп арынга кошкан эдилгелер",
        "recentchangeslinked-summary": "Айыткан арынның (азы айыткан аңгылалга хамаарышкан) шөлүлүглериниң чедер арыннарнының чаа өскерилгер даңзызы.\n[[Special:Watchlist|Силерниң хайгаарал даңзызынче]] кирип турар арыннарны '''ылгап каан'''.",
        "recentchangeslinked-page": "Арынның ады:",
-       "recentchangeslinked-to": "Ð\90йÑ\8bÑ\82кан Ð°Ñ\80Ñ\8bнÑ\87е Ñ\88өлүп Ñ\82Ñ\83Ñ\80аÑ\80 Ð°Ñ\80Ñ\8bннаÑ\80га өскерилгелерни көргүзер",
-       "upload": "Файл чүдүрер",
+       "recentchangeslinked-to": "Ð\90йÑ\8bÑ\82кан Ð°Ñ\80Ñ\8bнÑ\87е Ñ\88өлүп Ñ\82Ñ\83Ñ\80аÑ\80 Ð°Ñ\80Ñ\8bннаÑ\80да өскерилгелерни көргүзер",
+       "upload": "Файлды киир чүдүрер",
        "uploadbtn": "Файлды салыры",
        "uploadnologin": "Кирбес",
        "uploaderror": "Кииреринге алдаг",
        "upload-misc-error": "Билбес кииреринге алдаг",
        "http-read-error": "HTTP-биле номчуур алдаг.",
        "license": "Хоойлужудары:",
-       "license-header": "ХоойлÑ\83жÑ\83дары",
+       "license-header": "Ð\9bиÑ\86ензиÑ\8fлаары",
        "imgfile": "файл",
        "listfiles": "Файл даңзызы",
        "listfiles_name": "Ат",
        "listfiles_count": "Үндүрерилер",
        "file-anchor-link": "Файл",
        "filehist": "Файлдың төөгүзү",
-       "filehist-help": "Ð\9eл Ò¯ÐµÐ´Ðµ Ñ\84айлдÑ\8bÒ£ ÐºÓ©Ñ\81Ñ\82Ò¯Ñ\80үн ÐºÓ©Ó©Ñ\80де, Ð´Ð°Ñ\82а/үеже Ð±Ð°Ð·Ñ\8bпÑ\82Ñ\8bңар.",
+       "filehist-help": "Ð\90й-Ñ\85үн/үе-Ñ\88акÑ\87е Ð±Ð°Ð·Ñ\8bпкаÑ\88, Ñ\84айлдÑ\8bÒ£ Ñ\8bнÑ\87ан ÐºÐ°Ð½Ð´Ñ\8bг Ñ\82Ñ\83Ñ\80ганÑ\8bн ÐºÓ©Ñ\80үңер.",
        "filehist-deleteall": "шуптуну ырадыры",
        "filehist-deleteone": "ырадыры",
        "filehist-revert": "эгидип тургузары",
        "filehist-current": "амгы",
-       "filehist-datetime": "Ай, Хүн/Шак",
-       "filehist-thumb": "Ð\91иÑ\87ии Ñ\87Ñ\83Ñ\80Ñ\83мал",
-       "filehist-thumbtext": "$1 Ñ\85амааÑ\80жÑ\8bÑ\80 Ñ\85евиÑ\80иниң Ð±Ð¸Ñ\87е Ñ\87Ñ\83Ñ\80Ñ\83малÑ\8b (миниаÑ\82Ñ\8eÑ\80азÑ\8b)",
-       "filehist-user": "Ð\90жÑ\8bглакÑ\87Ñ\8b",
+       "filehist-datetime": "Ай-хүн/Үе-шак",
+       "filehist-thumb": "Ынай Ñ\87Ñ\83Ñ\80Ñ\83к",
+       "filehist-thumbtext": "$1 Ñ\8fнзÑ\8bзÑ\8bнга Ñ\8bнай Ñ\87Ñ\83Ñ\80Ñ\83к",
+       "filehist-user": "Ð\9aиÑ\80жикÑ\87и",
        "filehist-dimensions": "Хемчээлдери",
        "filehist-filesize": "Файл хемчээли",
        "filehist-comment": "Тайылбыр",
        "imagelinks": "Файлдың ажыглаашкыны",
-       "linkstoimage": "Ð\91еÑ\80динген Ñ\84айлÑ\87е Ð´Ð°Ñ\80аазÑ\8bнда {{PLURAL:$1|1=аÑ\80Ñ\8bн Ñ\88өлүдүп Ñ\82Ñ\83Ñ\80|$1 Ð°Ñ\80Ñ\8bн Ñ\88өлүдүп Ñ\82Ñ\83Ñ\80}}:",
+       "linkstoimage": "Ð\94аÑ\80аазÑ\8bнда {{PLURAL:$1|1=аÑ\80Ñ\8bн|$1 Ð°Ñ\80Ñ\8bннаÑ\80нÑ\8bÒ£ Ñ\88өлүлгези Ñ\84айл}}:",
        "nolinkstoimage": "Бердинген файлче шөлүп турар арыннар чок.",
-       "sharedupload-desc-here": "Моон $1 алган файл өске төлевилелдерге ажыглаттынып болур.\nОоң [$2 допчу тайылбыр арынындан] медеглели адаанда бердинген.",
+       "sharedupload-desc-here": "Моон $1 алган файл өске төлевилелдерге база ажыглаттынып болур.\nОоң [$2 тайылбыр арнындан] медээни адаанда киирген.",
+       "upload-disallowed-here": "Бо файлды эде бижидип шыдавас силер.",
        "filerevert": "$1 эгидип тургузары",
        "filerevert-legend": "Файлды эгидип тургузары",
        "filerevert-comment": "Чылдагаан:",
        "unwatchedpages": "Хайгаарабас арыннар",
        "unusedtemplates": "Ажыглаан эвес майыктар",
        "unusedtemplateswlh": "өске холбаалар",
-       "randompage": "Душ арын",
+       "randompage": "Дужа-келби таварышкан арын",
        "statistics": "Статистика",
        "statistics-pages": "Арыннар",
        "brokenredirects-edit": "өскертири",
        "nbytes": "$1 {{PLURAL:$1|байт}}",
        "ncategories": "$1 {{PLURAL:$1|аңгылал}}",
        "nlinks": "$1 {{PLURAL:$1|холбаа}}",
-       "nmembers": "$1 {{PLURAL:$1|кежигүн}}",
+       "nmembers": "$1 {{PLURAL:$1|кежигүн|кежигүннер}}",
        "nrevisions": "$1 {{PLURAL:$1|үндүрери}}",
        "specialpage-empty": "Бо илеткелдиң түңнели чок.",
        "lonelypages": "Чааскаан арыннар",
        "move": "Шимчээри",
        "movethispage": "Бо арынны шимчээри",
        "pager-newer-n": "{{PLURAL:$1|артык чаа}}",
-       "pager-older-n": "{{PLURAL:$1|аÑ\80Ñ\82Ñ\8bк Ñ\8dÑ\81ки}}",
+       "pager-older-n": "{{PLURAL:$1|аÑ\80Ñ\82Ñ\8bк Ñ\8dÑ\80ги}}",
        "booksources": "Номнарның үнген дөзү",
        "booksources-search-legend": "Номнуң медээлерин дилээри",
        "specialloguserlabel": "Күүседикчи:",
        "speciallogtitlelabel": "Target (aтка азы ажыглакчыга):",
-       "log": "Ð\96Ñ\83Ñ\80налдар",
+       "log": "Ð\94епÑ\82еÑ\80лер",
        "allpages": "Шупту арыннар",
        "nextpage": "Дараазында арын ($1)",
        "prevpage": "Эрткен арын ($1)",
        "allarticles": "Шупту арыннар",
-       "allpagessubmit": "Ð\9aÒ¯Ò¯cедиÑ\80и",
+       "allpagessubmit": "Че-ве",
        "categories": "Аңгылалдар",
        "sp-deletedcontributions-contribs": "дадывыр",
        "linksearch": "Даштыкы холбааларга дилээри",
        "namespace": "Аттар делгеми:",
        "invert": "Шилээнин аңдарар. (Обратить выбранное)",
        "blanknamespace": "(Кол)",
-       "contributions": "{{GENDER:$1|Ð\90жÑ\8bглакÑ\87Ñ\8bнÑ\8bÒ£}} Ñ\81алÑ\8bÑ\8bÑ\88кÑ\8bннаÑ\80Ñ\8b",
+       "contributions": "{{GENDER:$1|киÑ\80жикÑ\87иниң}} Ò¯Ð»Ò¯Ò¯",
        "contributions-title": "«$1» деп ажыглакчының салыышкыннары",
        "mycontris": "Дадывыр",
        "contribsub2": "$1 ($2)",
        "isredirect": "шиглидер арын",
        "istemplate": "киирткен арыннар",
        "isimage": "файлдың холбаазы",
-       "whatlinkshere-prev": "{{PLURAL:$1|1=эрткен|эрткен $1}}",
+       "whatlinkshere-prev": "{{PLURAL:$1|1= амдыы|амдыы $1}}",
        "whatlinkshere-next": "{{PLURAL:$1|1=дараазында|дараазында $1}}",
        "whatlinkshere-links": "← холбаалар",
        "whatlinkshere-hideredirs": "$1-че шиглиглер",
        "blocklist-reason": "Чылдагаан",
        "ipblocklist-submit": "Дилээр",
        "infiniteblock": "кезээ-мөңгеде",
-       "blocklink": "кÑ\8bзÑ\8bгааÑ\80лааÑ\80Ñ\8b",
+       "blocklink": "доÑ\81Ñ\82Ñ\83Ñ\80аÑ\80",
        "unblocklink": "ажыдып хостаар",
        "change-blocklink": "кызыгаарлаашкынны өскертири",
-       "contribslink": "дадывыр",
+       "contribslink": "үлүг",
        "blocklogpage": "Кызыгаарлаашкынның журналы",
        "blocklogentry": ", [[$1]] $2 дургузунда кызыгаарлаттынган: $3",
        "block-log-flags-anononly": "чүгле адыжок киржикчилер",
        "unlockbtn": "Медээ шыгжамырын ажыттынар",
        "move-page": "«$1» деп арынны шимчээри",
        "move-page-legend": "Арынны шимчээр",
-       "movearticle": "Бо арынны шимчээри:",
        "newtitle": "Чаа ат:",
        "move-watch": "Бо арынны хайгаараары",
        "movepagebtn": "Арынны шимчээри",
        "tooltip-pt-preferences": "Силерниң шилилгеңер",
        "tooltip-pt-watchlist": "Карактап (хынап) турар өскертилгелерге хамааржыр арыннарның даңзызы",
        "tooltip-pt-mycontris": "Силерниң салыышкыннарыңарның даңзызы",
-       "tooltip-pt-login": "Ð\9cаңаа Ñ\81иÑ\81Ñ\82емаже ÐºÐ¸Ð¸Ñ\80 Ð±Ò¯Ñ\80Ò¯Ñ\82кенип Ð±Ð¾Ð»Ñ\83Ñ\80, Ñ\8bнÑ\87алза-даа Ð¾Ð» албан эвес.",
+       "tooltip-pt-login": "Ð\9cаңаа Ñ\81иÑ\81Ñ\82емага Ð±Ò¯Ñ\80Ò¯Ñ\82кедип Ð°Ð¿ Ð±Ð¾Ð»Ñ\83Ñ\80, Ñ\87огÑ\83м албан эвес.",
        "tooltip-pt-logout": "Үнери",
-       "tooltip-ca-talk": "Бо арын дугайында чыгаалажыры",
-       "tooltip-ca-edit": "Ук арынны эдип болур силер. Эдилгеңер бижидерин бертинде чижеглей көөрүн утпаңар.",
-       "tooltip-ca-addsection": "Чаа салбыр чаяар",
-       "tooltip-ca-viewsource": "Бо арын камгалаттырган.\nДөзү кодун көрүп болур силер.",
-       "tooltip-ca-history": "Арынның мурнуку өскерлиишкиннери",
+       "tooltip-pt-createaccount": "Албан эвес-даа болза, бүрүткел бижикти кылгаш, системаже кирерин силерге саналдап тур бис.",
+       "tooltip-ca-talk": "Кол арынны сайгарары",
+       "tooltip-ca-edit": "Бо арынны эдер",
+       "tooltip-ca-addsection": "Чаа салбыр кылыр",
+       "tooltip-ca-viewsource": "Бо арынны өскертилгелерден камгалап каан, чогум ону көрүп, ооң үндезин кодун хоолгалап ап болур силер.",
+       "tooltip-ca-history": "Арынның өскерлиишкиннериниң дептери",
        "tooltip-ca-protect": "Бо арынны камгалаары",
        "tooltip-ca-delete": "Бо арынны ырадыры",
        "tooltip-ca-move": "Бо арынны шимчээри",
-       "tooltip-ca-watch": "СилеÑ\80ниң Ñ\85айгааÑ\80ал Ð´Ð°Ò£Ð·Ñ\8bзÑ\8bнга Ð±Ð¾ Ð°Ñ\80Ñ\8bннÑ\8b Ð½ÐµÐ¼ÐµÑ\80елÑ\8dÑ\8dÑ\80и",
+       "tooltip-ca-watch": "Ð\91о Ð°Ñ\80Ñ\8bннÑ\8b Ñ\85айгааÑ\80алÑ\8bңаÑ\80 Ð´Ð°Ò£Ð·Ñ\8bзÑ\8bнÑ\87е Ð½ÐµÐ¼Ñ\8dÑ\8dÑ\80",
        "tooltip-ca-unwatch": "Силерниң хайгаарал даңзызындан бо арынны ырадыры",
-       "tooltip-search": "{{grammar:locative|{{SITENAME}}}} дилээри",
-       "tooltip-search-go": "Шак Ñ\8bндÑ\8bг Ð°Ñ\82Ñ\82Ñ\8bг Ð°Ñ\80Ñ\8bнÑ\87е Ñ\89илчиир",
-       "tooltip-search-fulltext": "Ð\91о Ð±Ð¸Ð¶Ð¸ÐºÐµ Ð°Ñ\80Ñ\8bннаÑ\80дан Ð´Ð¸Ð»Ñ\8dÑ\8dÑ\80и",
-       "tooltip-p-logo": "Ð\9aол Ð\90Ñ\80Ñ\8bн",
-       "tooltip-n-mainpage": "Ð\9aол Ð\90рынче шилчиир",
-       "tooltip-n-mainpage-description": "Ð\9aол Ð\90Ñ\80Ñ\8bнÑ\87е ÐºÐ¸Ñ\80еÑ\80и",
-       "tooltip-n-portal": "Төлевилел Ð´Ñ\8bгайÑ\8bнда, Ñ\87үнү ÐºÑ\8bлÑ\8bп Ð±Ð¾Ð»Ñ\83Ñ\80 Ñ\81илеÑ\80, ÐºÐ°Ð¹Ð´Ð° Ñ\87Ò¯Ò¯ Ñ\87Ñ\8bдарыл",
-       "tooltip-n-currentevents": "Ам болуп турар таварылгалар даңзызы",
-       "tooltip-n-recentchanges": "Ð\92икиниң Ñ\8dниÑ\80 Ó©Ñ\81кеÑ\80лииÑ\88киннеÑ\80и",
-       "tooltip-n-randompage": "Душ арынны көөрү",
-       "tooltip-n-help": "Төлевилелдиң Ñ\82айÑ\8bлбÑ\8bÑ\80Ñ\8b Â«{{SITENAME}}»",
-       "tooltip-t-whatlinkshere": "Ð\91үгү Ð¼Ð°Ò£Ð°Ð° Ñ\88өлүÑ\82ген Ð²Ð¸ÐºÐ¸ арыннарның даңзызы",
-       "tooltip-t-recentchangeslinked": "Бо арындан шөлүткен өске арыннарның сөөлгү өскерлиишкиннери",
+       "tooltip-search": "{{grammar:locative|{{SITENAME}}}} дилээр",
+       "tooltip-search-go": "Шак Ñ\8bндÑ\8bг Ð°Ñ\82Ñ\82Ñ\8bг Ð°Ñ\80Ñ\8bнÑ\87е Ñ\88илчиир",
+       "tooltip-search-fulltext": "Ð\90йÑ\8bÑ\82Ñ\82Ñ\8bнган Ñ\81өзүглелдиг Ð°Ñ\80Ñ\8bннаÑ\80нÑ\8b Ð´Ð¸Ð»Ñ\8dÑ\8dÑ\80",
+       "tooltip-p-logo": "Ð\9aол Ð°Ñ\80Ñ\8bнÑ\87е ÐºÐ¸Ñ\80еÑ\80",
+       "tooltip-n-mainpage": "Ð\9aол Ð°рынче шилчиир",
+       "tooltip-n-mainpage-description": "Ð\9aол Ð°Ñ\80Ñ\8bнÑ\87е ÐºÐ¸Ñ\80еÑ\80",
+       "tooltip-n-portal": "Төлевилел Ð´Ñ\83гайÑ\8bнда, Ð¼Ð°Ò£Ð°Ð°  Ñ\87үнү ÐºÑ\8bлÑ\8bп Ð±Ð¾Ð»Ñ\83Ñ\80Ñ\83л, Ð¾Ð» Ñ\8bÑ\88каÑ\88 ÐºÐ°Ð¹Ð´Ð° Ñ\87Ò¯Ò¯ Ð±арыл",
+       "tooltip-n-currentevents": "Амгы болуушкуннар дугайында медээ",
+       "tooltip-n-recentchanges": "Ð\92икиниң Ñ\81өөлгү Ó©Ñ\81кеÑ\80лииÑ\88киннеÑ\80 Ð´Ð°Ò£Ð·Ñ\8bзÑ\8b",
+       "tooltip-n-randompage": "Дужа-келби таварышкан арынны көөр",
+       "tooltip-n-help": "ШÑ\8bнзÑ\8bлга Ð°Ð¿ Ð±Ð¾Ð»Ñ\83Ñ\80 Ñ\87еÑ\80",
+       "tooltip-t-whatlinkshere": "Ук Ð°Ñ\80Ñ\8bнÑ\87е Ñ\88өлүлгелиг Ñ\88Ñ\83пÑ\82Ñ\83 арыннарның даңзызы",
+       "tooltip-t-recentchangeslinked": "Бо арындан шөлүлгелиг арыннарында сөөлгү өскерилгелер",
        "tooltip-feed-rss": "Бо арының РСС медээ агымы",
        "tooltip-feed-atom": "Бо арының Атом медээ агымы",
        "tooltip-t-contributions": "Бо ажыглакчының салыышкыннарының даңзазын көөрү.",
        "tooltip-t-emailuser": "Бо ажыглакчыга э-чагааны чорудаары",
-       "tooltip-t-upload": "Файлдарны киирери",
-       "tooltip-t-specialpages": "ШÑ\83пÑ\82Ñ\83 Ñ\82Ñ\83Ñ\81кай арыннар даңзызы",
-       "tooltip-t-print": "Бо арынның парлаттынар хевири",
-       "tooltip-t-permalink": "Ук арынның амгы янзызының турум айтыы",
-       "tooltip-ca-nstab-main": "Ð\94опÑ\87Ñ\8b Ð°Ñ\80Ñ\8bнÑ\8bн ÐºÓ©Ó©Ñ\80Ò¯",
+       "tooltip-t-upload": "Файлдарны киир чүдүрери",
+       "tooltip-t-specialpages": "Ð\90лбан-Ñ\85аакÑ\87Ñ\8bÑ\82 арыннар даңзызы",
+       "tooltip-t-print": "Бо арынның парлап үндүрер янзызы",
+       "tooltip-t-permalink": "Ук арынның амгы янзызының доктаамал шөлүлгези",
+       "tooltip-ca-nstab-main": "Ð\9aол Ð°Ñ\80Ñ\8bннÑ\8b ÐºÓ©Ó©Ñ\80",
        "tooltip-ca-nstab-user": "Ажыглакчының арынын көөрү",
        "tooltip-ca-nstab-media": "Медиа арынын көөрү",
-       "tooltip-ca-nstab-special": "Ð\91о Ð±Ó©Ð»Ð³Ñ\8dÑ\8dÑ\82 Ð°Ñ\80Ñ\8bн-дÑ\8bÑ\80 (Ñ\81лÑ\83жебнаÑ\8f Ñ\81Ñ\82Ñ\80аниÑ\86а), Ð¾Ð¾Ò£ эдери болдунмас.",
+       "tooltip-ca-nstab-special": "Ð\91о Ð°Ð»Ð±Ð°Ð½-Ñ\85аакÑ\87Ñ\8bÑ\82 Ð°Ñ\80Ñ\8bн-дÑ\8bÑ\80, Ð¾Ð½Ñ\83 эдери болдунмас.",
        "tooltip-ca-nstab-project": "Төлевилелдиң арынын көөрү",
-       "tooltip-ca-nstab-image": "Файлдың арынын көөрү",
+       "tooltip-ca-nstab-image": "Файлдың арны",
        "tooltip-ca-nstab-template": "Майыкты көөрү",
        "tooltip-ca-nstab-help": "Дуза арынын көөрү",
-       "tooltip-ca-nstab-category": "Ð\90ңгÑ\8bлалдÑ\8bÒ£ Ð°Ñ\80Ñ\8bнÑ\8bн ÐºÓ©Ó©Ñ\80Ò¯",
+       "tooltip-ca-nstab-category": "Ð\9aаÑ\82егоÑ\80иÑ\8f Ð°Ñ\80нÑ\8b",
        "tooltip-minoredit": "Бо өскертилгени \"биче\" деп демдеглээр",
-       "tooltip-save": "СилеÑ\80ниң Ó©Ñ\81кеÑ\80лииÑ\88киннеÑ\80иңеÑ\80ни Ñ\88Ñ\8bгжааÑ\80Ñ\8b",
-       "tooltip-preview": "ШÑ\8bгжааÑ\80 Ð¼Ñ\83Ñ\80нÑ\83нда Ñ\81илеÑ\80ниң Ó©Ñ\81кеÑ\80лииÑ\88киннеÑ\80ин Ñ\87ижеглеп ÐºÓ©Ñ\80ем!",
-       "tooltip-diff": "Бо сөзүглелге хамаарыштыр кандыг өскертилгелерни кылган Силер - ону көргүзер.",
+       "tooltip-save": "ЭдилгелеÑ\80иңеÑ\80ни Ñ\88Ñ\8bгжап Ð°Ñ\80Ñ\82Ñ\82Ñ\8bÑ\80аÑ\80",
+       "tooltip-preview": "Ð\90Ñ\80Ñ\8bннÑ\8bÒ£ Ñ\87ижек ÐºÓ©Ñ\80үлдези: Ñ\88Ñ\8bгжааÑ\80 Ð±ÐµÑ\82инде Ð¾Ð½Ñ\83 Ð°Ð¶Ñ\8bглааÑ\80 Ñ\81илеÑ\80!",
+       "tooltip-diff": "Үндезин сөзүглелге хамаарыштыр кылдынган өскерлиишкиннерни көргүзер.",
        "tooltip-compareselectedversions": "Бо арынның шилиттинген ийи хевиринниң ылгалын көөр.",
        "tooltip-watch": "Силерниң хайгаарал даңзызынга бо арынны немерелээри",
        "tooltip-rollback": "Сөөлгү киржикчиниң өскерилгелерин чаңгыс баскаш, ойталаар",
        "tooltip-undo": "Киирген эдигни казааш, ойталалдың чылдагаанын айтыр аргалыг мурнай көргүзүүн көргүзер.",
-       "tooltip-summary": "Кысказы-биле бижиңер",
+       "tooltip-summary": "Кыска тайылбырны киириңер",
        "anonymous": "{{grammar:genitive|{{SITENAME}}}} адыжок {{PLURAL:$1|киржикчизи}}",
+       "simpleantispam-label": "Спам-га удур хыналда.\nМону <strong>долдуруңар </strong>долдурбаңар",
        "pageinfo-title": "«$1» дугайында",
        "pageinfo-header-basic": "Кол медээлел",
        "pageinfo-toolboxlink": "Арын дугайында",
        "file-info-size-pages": "$1 × $2 пикcелдер, файл хемчээли: $3, MIME хевири: $4, $5 {{PLURAL:$5|1=арын|арын}}",
        "file-nohires": "Оон улуг хевири чок",
        "svg-long-desc": "SVG файл, $1 x $2 пиксел, файл хемчээли: $3",
-       "show-big-image": "Улуг чурумал",
+       "show-big-image": "Үндезин файл",
        "show-big-image-size": "$1 × $2 пиксел",
        "newimages-legend": "Шүүрү",
        "noimages": "Nothing to see.",
        "ago": "$1 бурунгаар",
        "bad_image_list": "Формады мындыг боор ужурлуг:\n\nЧүгле даңзының идегеттери (элементилери) санатынар боор (* деп демдектен эгелээн одуруглар).\nОдуругнуң бирги шөлүдүү салдынмас чурумалче шөлүдүг болуру албан.\nОл-ла одуругнуң арткан шөлүдүглери онзагай кылдыр азы чурумал капсырып болур чүүлдер кылдыр санаттынар.",
        "metadata": "Чурумал дугайында медээлер",
-       "metadata-help": "Бо файл немелде данныйларлыг:санныг камералар азы сканнерлер дугайында медеглел. Файл чаяанының соонда эдидип турган болза, чамдык параметрлери амгы чурумалга меге кылдыр хамааржып болур.",
+       "metadata-help": "Бо файлда цифралыг камераларның болгаш сканерлерниң немеп каары немелде медээлер бар. Файлды кылган соонда эдип турган болза, ооң чамдык параметрлери ооң амгы чуруунга дүүшпес бооп болур.",
        "metadata-fields": "Бо даңзыда айыткан чурумалдар метаданныйларның кезектери чурумалдың арынынга көстүп кээр, метаданныйлар таблицазын дүрүп каан болур. \nАрткан кезектер аайлаан ёзугаар чажыт көстүр.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
        "exif-imagewidth": "Калбаа",
        "exif-imagelength": "Бедик",
+       "exif-orientation": "Кадрның ориентациязы",
+       "exif-xresolution": "доора разрешение",
+       "exif-yresolution": "узун дургаар разрешение",
+       "exif-datetime": "Файлды өскерткен ай-хүн, үе-шак",
        "exif-imagedescription": "Чурумалдың ады",
+       "exif-make": "Камераның бүдүрүкчүзү",
+       "exif-model": "Камераның модели",
        "exif-artist": "Чогаадыкчы",
+       "exif-colorspace": "Өңнер девискээри",
        "exif-usercomment": "Ажыглакчының тайылбырлары",
+       "exif-datetimeoriginal": "Шын ай-хүн болгаш үе-шак",
        "exif-jpegfilecomment": "JPEG фалй тайылбыры",
        "exif-headline": "Баш ат",
        "exif-languagecode": "Дыл",
        "compare-submit": "Дөмейлээри",
        "htmlform-submit": "Күүcедири",
        "htmlform-selectorother-other": "Өске",
+       "logentry-delete-delete": "$1 {{GENDER:$2|арынны баладып каапкан}} $3",
        "rightsnone": "(чок)",
        "feedback-cancel": "Соксаары",
        "feedback-message": "Чагаа:",
        "feedback-subject": "Кол сөс:",
-       "searchsuggest-search": "Ð\94илÑ\8dÑ\8dÑ\88кин",
+       "searchsuggest-search": "Ð\94илÑ\8dÑ\8dÑ\80",
        "duration-seconds": "$1 {{PLURAL:$1|секунда|секунда}}",
        "duration-minutes": "$1 {{PLURAL:$1|минут|минут}}",
        "duration-hours": "$1 {{PLURAL:$1|шак|шак}}",
index a623dcb..fd25872 100644 (file)
                        "Lxlalexlxl",
                        "Капитан Джон Шепард",
                        "Translatemyname",
-                       "Dars"
+                       "Dars",
+                       "Mix Gerder"
                ]
        },
        "tog-underline": "Підкреслювання посилань:",
        "tog-hideminor": "Приховати незначні редагування у списку останніх змін",
        "tog-hidepatrolled": "Приховувати патрульовані редагування у списку нових редагувань",
        "tog-newpageshidepatrolled": "Приховувати патрульовані сторінки у списку нових сторінок",
+       "tog-hidecategorization": "Приховати категоризацію сторінок",
        "tog-extendwatchlist": "Розгорнути список спостереження, щоб показати всі зміни, а не лише останні",
        "tog-usenewrc": "Групувати редагування на сторінках останніх змін та списку спостереження",
        "tog-numberheadings": "Автоматично нумерувати заголовки",
        "tog-watchlisthideliu": "Приховати редагування зареєстрованих дописувачів у списку спостереження",
        "tog-watchlisthideanons": "Приховати редагування анонімних користувачів у списку спостереження",
        "tog-watchlisthidepatrolled": "Приховати відпатрульовані редагування у списку спостереження",
+       "tog-watchlisthidecategorization": "Приховати категоризацію сторінок",
        "tog-ccmeonemails": "Надсилати мені копії листів, які я надсилаю іншим користувачам",
        "tog-diffonly": "Не показувати вміст сторінки під різницею версій",
        "tog-showhiddencats": "Показувати приховані категорії",
        "createaccountreason": "Причина:",
        "createacct-reason": "Причина",
        "createacct-reason-ph": "Чому ви створюєте інший обліковий запис",
-       "createacct-captcha": "Перевірка безпеки",
-       "createacct-imgcaptcha-ph": "Введіть текст, який ви бачите вище",
        "createacct-submit": "Створіть ваш обліковий запис",
        "createacct-another-submit": "Створити обліковий запис",
        "createacct-benefit-heading": "{{SITENAME}} створюється такими самими людьми, як і ви.",
        "permissionserrors": "Помилка доступу",
        "permissionserrorstext": "У вас нема прав на виконання цієї операції з {{PLURAL:$1|1=наступної причини|наступних причин}}:",
        "permissionserrorstext-withaction": "У вас нема дозволу на $2 з {{PLURAL:$1|1=такої причини|таких причин}}:",
+       "contentmodelediterror": "Ви не можете редагувати це доопрацювання, оскільки його зміст моделі становить <code>$1</code>, і в поточній моделі вмісту сторінки становить <code>$2</code>.",
        "recreate-moveddeleted-warn": "'''Попередження: ви намагаєтеся створити сторінку, яка раніше вже була вилучена.'''\n\nПеревірте, чи справді вам справді потрібно створювати цю сторінку.\nНижче, для зручності, наведений журнал вилучень і перейменувань:",
        "moveddeleted-notice": "Ця сторінка була вилучена.\nДля довідки нижче наведені відповідні записи з журналів вилучень і перейменувань.",
        "moveddeleted-notice-recent": "На жаль, ця сторінка нещодавно була вилучена (протягом останніх 24 годин). Для довідки нижче наведені відповідні записи з журналів вилучень і перейменувань.",
        "showingresultsinrange": "Нижче показано до {{PLURAL:$1|<strong>1</strong> результату|<strong>$1</strong> результатів}} у діапазоні від #<strong>$2</strong> до #<strong>$3</strong>.",
        "search-showingresults": "{{PLURAL:$4|Результат <strong>$1</strong> із <strong>$3</strong>|Результати <strong>$1 — $2</strong> із <strong>$3</strong>}}",
        "search-nonefound": "Не знайдено результатів, що відповідають запиту.",
+       "search-nonefound-thiswiki": "Немає результатів, що відповідають запиту на цьому сайті.",
        "powersearch-legend": "Розширений пошук",
        "powersearch-ns": "Пошук у просторах назв:",
        "powersearch-togglelabel": "Позначити:",
        "prefs-help-recentchangescount": "Це стосується нових редагувань, історій сторінок і журналів.",
        "prefs-help-watchlist-token2": "Це секретний ключ до веб-каналу вашого списку спостереження.\nБудь-хто, хто його знає, матиме можливість читати ваш список спостереження, тому не поширюйте його.\n[[Special:ResetTokens|Натисніть тут, якщо вам потрібно скинути його]].",
        "savedprefs": "Ваші налаштування збережено.",
+       "savedrights": "Права користувача {{GENDER:$1|$1}} були збережені.",
        "timezonelegend": "Часовий пояс:",
        "localtime": "Місцевий час:",
        "timezoneuseserverdefault": "Використовувати стандартне налаштування вікі ($1)",
        "rcshowhidemine": "$1 мої редагування",
        "rcshowhidemine-show": "показати",
        "rcshowhidemine-hide": "приховати",
+       "rcshowhidecategorization": "$1 категоризацію сторінок",
+       "rcshowhidecategorization-show": "Показати",
+       "rcshowhidecategorization-hide": "Приховати",
        "rclinks": "Показати останні $1 редагувань за $2 днів<br />$3",
        "diff": "різн.",
        "hist": "історія",
        "svg-long-error": "неправильний SVG-файл: $1",
        "show-big-image": "Повна роздільність",
        "show-big-image-preview": "Розмір при попередньому перегляді: $1.",
+       "show-big-image-preview-differ": "Розмір цього $3-превью для вихідного $2-файлу: $1.",
        "show-big-image-other": "{{PLURAL:$2|1=Інша роздільність|Інші роздільності}}: $1.",
        "show-big-image-size": "$1 × $2 пікселів",
        "file-info-gif-looped": "кільцеве",
        "htmlform-cloner-required": "Необхідно принаймні одне значення.",
        "htmlform-title-badnamespace": "[[:$1]] не в просторі назв «{{ns:$2}}».",
        "htmlform-title-not-creatable": "«$1» — назва сторінки, яку не можна створити",
-       "htmlform-title-not-exists": "[[:$1]] не існує.",
+       "htmlform-title-not-exists": "$1 не існує.",
        "htmlform-user-not-exists": "<strong>$1</strong> не існує.",
        "htmlform-user-not-valid": "<strong>$1</strong> не є дійсним іменем користувача.",
        "sqlite-has-fts": "$1 з підтримкою повнотекстового пошуку",
index 0592cb5..7d705e2 100644 (file)
        "enhancedrc-history": "tarix",
        "recentchanges": "Yangi oʻzgarishlar",
        "recentchanges-legend": "Yangi oʻzgarishlar moslamalari",
-       "recentchanges-summary": "Bu sahifada siz {{SITENAME}}da sodir boʻlgan soʻnggi oʻzgarishlarni koʻrishingiz mumkin.",
+       "recentchanges-summary": "Bu sahifada {{SITENAME}} loyihasida sodir boʻlgan soʻnggi oʻzgarishlarni koʻrishingiz mumkin.",
        "recentchanges-noresult": "Koʻrsatilgan muddatga va shartlarga oid oʻzgarishlar topilmadi.",
        "recentchanges-feed-description": "Vikida mazkur oqimdagi oxirgi oʻzgarishlarni kuzatish",
        "recentchanges-label-newpage": "Bu tahrir orqali yangi sahifa yaratilgan",
        "undeleteinvert": "Tanlash tartibini almashtirish",
        "undeletecomment": "Sababi:",
        "undeletedrevisions": "{{PLURAL:$1|1 ta oʻzgarish|$1 ta tahrirlar}} tiklandi",
-       "undeletedfiles": "$1 ta fayl tiklandi",
+       "undeletedfiles": "{{PLURAL:$1|Bitta fayl|$1 ta fayl}} tiklandi",
        "undelete-search-title": "O'chirilgan sahifalarni qidirish",
        "undelete-search-box": "O'chirilgan sahifalarni qidirish",
        "undelete-search-prefix": "Bundan boshlangan sahifalarni koʻrsatish:",
index 8703ea8..21cb4b2 100644 (file)
@@ -39,6 +39,7 @@
        "tog-hideminor": "Ẩn sửa đổi nhỏ trong thay đổi gần đây",
        "tog-hidepatrolled": "Ẩn sửa đổi đã tuần tra trong trang thay đổi gần đây",
        "tog-newpageshidepatrolled": "Ẩn trang đã tuần tra trong danh sách các trang mới",
+       "tog-hidecategorization": "Ẩn việc xếp thể loại",
        "tog-extendwatchlist": "Mở rộng danh sách theo dõi để hiển thị tất cả các thay đổi, chứ không chỉ các thay đổi gần đây",
        "tog-usenewrc": "Thu gọn các thay đổi theo trang trong thay đổi gần đây và danh sách theo dõi",
        "tog-numberheadings": "Tự động đánh số các đề mục",
@@ -68,6 +69,7 @@
        "tog-watchlisthideliu": "Ẩn sửa đổi của thành viên đã đăng nhập khỏi danh sách theo dõi",
        "tog-watchlisthideanons": "Ẩn sửa đổi của người dùng vô danh khỏi danh sách theo dõi",
        "tog-watchlisthidepatrolled": "Ẩn sửa đổi đã tuần tra trong danh sách theo dõi",
+       "tog-watchlisthidecategorization": "Ẩn việc xếp thể loại",
        "tog-ccmeonemails": "Gửi bản sao cho tôi khi gửi thư điện tử cho người khác",
        "tog-diffonly": "Không hiển thị nội dung trang dưới phần so sánh phiên bản",
        "tog-showhiddencats": "Hiển thị thể loại ẩn",
        "createaccountreason": "Lý do:",
        "createacct-reason": "Lý do",
        "createacct-reason-ph": "Nhập lý do tạo một tài khoản khác",
-       "createacct-captcha": "Kiểm tra an toàn",
-       "createacct-imgcaptcha-ph": "Nhập dòng chữ bạn thấy bên dưới",
        "createacct-submit": "Tạo tài khoản",
        "createacct-another-submit": "Mở tài khoản",
        "createacct-benefit-heading": "{{SITENAME}} được xây dựng bởi những người như bạn.",
        "rcshowhidemine": "$1 sửa đổi của tôi",
        "rcshowhidemine-show": "Hiện",
        "rcshowhidemine-hide": "Ẩn",
+       "rcshowhidecategorization": "$1 việc xếp thể loại",
+       "rcshowhidecategorization-show": "Hiện",
+       "rcshowhidecategorization-hide": "Ẩn",
        "rclinks": "Xem $1 sửa đổi gần đây nhất trong $2 ngày qua; $3.",
        "diff": "khác",
        "hist": "sử",
        "htmlform-cloner-required": "Cần ít nhất một giá trị.",
        "htmlform-title-badnamespace": "[[:$1]] không phải trong không gian tên “{{ns:$2}}”.",
        "htmlform-title-not-creatable": "Không cho phép tạo ra trang với tên “$1”",
-       "htmlform-title-not-exists": "[[:$1]] không tồn tại.",
+       "htmlform-title-not-exists": "$1 không tồn tại.",
        "htmlform-user-not-exists": "<strong>$1</strong> không tồn tại.",
        "htmlform-user-not-valid": "<strong>$1</strong> không phải là tên người dùng.",
        "sqlite-has-fts": "$1 với sự hỗ trợ tìm kiếm toàn văn",
index 8ef6803..2a5a3c9 100644 (file)
        "htmlform-cloner-required": "至少一个值是必需的。",
        "htmlform-title-badnamespace": "[[:$1]]不在“{{ns:$2}}”名字空间中。",
        "htmlform-title-not-creatable": "“$1”不是一个可创建的页面标题",
-       "htmlform-title-not-exists": "[[:$1]]不存在",
+       "htmlform-title-not-exists": "$1不存在",
        "htmlform-user-not-exists": "<strong>$1</strong>不存在。",
        "htmlform-user-not-valid": "<strong>$1</strong>不是一个有效的用户名。",
        "sqlite-has-fts": "带全文搜索的版本$1",
index fa14510..bf54690 100644 (file)
        "htmlform-cloner-required": "至少必須填寫一筆資料。",
        "htmlform-title-badnamespace": "[[:$1]] 不在 \"{{ns:$2}}\" 命名空間中。",
        "htmlform-title-not-creatable": "\"$1\" 並非可用來建立頁面的標題",
-       "htmlform-title-not-exists": "[[:$1]] 並不存在。",
+       "htmlform-title-not-exists": "$1 並不存在。",
        "htmlform-user-not-exists": "<strong>$1</strong> 並不存在。",
        "htmlform-user-not-valid": "<strong>$1</strong> 不是有效的使用者名稱。",
        "sqlite-has-fts": "$1 且支援全文搜索",
index 0ed584c..0562333 100644 (file)
@@ -899,11 +899,9 @@ class TextPassDumper extends BackupDumper {
                        } elseif ( $this->state == "page" ) {
                                $this->thisPage .= $data;
                        }
-               }
-               elseif ( $this->lastName == "model" ) {
+               } elseif ( $this->lastName == "model" ) {
                        $this->thisRevModel .= $data;
-               }
-               elseif ( $this->lastName == "format" ) {
+               } elseif ( $this->lastName == "format" ) {
                        $this->thisRevFormat .= $data;
                }
 
index 2ee406f..eac277a 100644 (file)
@@ -105,12 +105,12 @@ class FindOrphanedFiles extends Maintenance {
                                        $dbr->selectSQLText(
                                                'image',
                                                array( 'name' => 'img_name' ),
-                                               array( 'img_name' => $imgIN )
+                                               $imgIN ? array( 'img_name' => $imgIN ) : '1=0'
                                        ),
                                        $dbr->selectSQLText(
                                                'oldimage',
                                                array( 'name' => 'oi_archive_name' ),
-                                               $dbr->makeList( $oiWheres, LIST_OR )
+                                               $oiWheres ? $dbr->makeList( $oiWheres, LIST_OR ) : '1=0'
                                        )
                                ),
                                true // UNION ALL (performance)
@@ -132,7 +132,7 @@ class FindOrphanedFiles extends Maintenance {
                        } else {
                                $file = $repo->newFile( $name );
                        }
-                       $this->output( $name . "\n" . $file->getUrl() . "\n\n" );
+                       $this->output( $name . "\n" . $file->getCanonicalUrl() . "\n\n" );
                }
        }
 }
index c2b45a8..2cd688e 100644 (file)
@@ -19,6 +19,8 @@
        "ooui-dialog-process-dismiss": "Փակել",
        "ooui-dialog-process-retry": "Կրկին փորձել",
        "ooui-dialog-process-continue": "Շարունակել",
+       "ooui-selectfile-button-select": "Ընտրել նիշք",
        "ooui-selectfile-not-supported": "Ֆայլի ընտրությունը չի պաշտպանվում",
-       "ooui-selectfile-placeholder": "Ֆայլն ընտրված չէ"
+       "ooui-selectfile-placeholder": "Ֆայլն ընտրված չէ",
+       "ooui-selectfile-dragdrop-placeholder": "Ֆայլը գցել այստե"
 }
index 677b1c3..1024d2a 100644 (file)
@@ -4,14 +4,15 @@
                        "Gleki",
                        "NoiX180",
                        "Pras",
-                       "Jadinegara"
+                       "Jadinegara",
+                       "Meursault2004"
                ]
        },
        "ooui-outline-control-move-down": "Pindhahaken butir mangandhap",
-       "ooui-outline-control-move-up": "Pindhah kara mêndhuwur",
+       "ooui-outline-control-move-up": "Pindhah kara menyang dhuwur",
        "ooui-outline-control-remove": "Busak kara",
-       "ooui-toolbar-more": "Mênèh",
-       "ooui-toolgroup-expand": "Mênèh",
+       "ooui-toolbar-more": "Manèh",
+       "ooui-toolgroup-expand": "Manèh",
        "ooui-toolgroup-collapse": "Suda",
        "ooui-dialog-message-accept": "Oké",
        "ooui-dialog-message-reject": "Batal",
@@ -19,6 +20,6 @@
        "ooui-dialog-process-dismiss": "Tutup",
        "ooui-dialog-process-retry": "Jajal manèh",
        "ooui-dialog-process-continue": "Tutug",
-       "ooui-selectfile-not-supported": "Pilihan bêrkas ora disokong",
-       "ooui-selectfile-placeholder": "Ora ana bêrkas sing kapilih"
+       "ooui-selectfile-not-supported": "Pilihan berkas ora disokong",
+       "ooui-selectfile-placeholder": "Ora ana berkas sing kapilih"
 }
index 39bc670..fad4c1c 100644 (file)
@@ -23,6 +23,7 @@
        "ooui-dialog-process-retry": "Nach eng Kéier probéieren",
        "ooui-dialog-process-continue": "Virufueren",
        "ooui-selectfile-button-select": "E Fichier eraussichen",
+       "ooui-selectfile-not-supported": "D'Eraussiche vu Fichiere gëtt net ënnerstëtzt.",
        "ooui-selectfile-placeholder": "Et ass kee Fichier erausgesicht",
        "ooui-selectfile-dragdrop-placeholder": "Fichier hei ofleeën"
 }
index fbd22d0..86c6d64 100644 (file)
@@ -9,7 +9,7 @@
        },
        "ooui-outline-control-move-down": "Perkelti elementą žemyn",
        "ooui-outline-control-move-up": "Perkelti elementą aukštyn",
-       "ooui-outline-control-remove": "Šalinti elementus",
+       "ooui-outline-control-remove": "Šalinti įrašą",
        "ooui-toolbar-more": "Daugiau",
        "ooui-toolgroup-expand": "Daugiau",
        "ooui-toolgroup-collapse": "Mažiau",
index bcc31e0..fc29962 100644 (file)
@@ -26,6 +26,8 @@
        "ooui-dialog-process-dismiss": "Dispensar",
        "ooui-dialog-process-retry": "Tentar novamente",
        "ooui-dialog-process-continue": "Continuar",
+       "ooui-selectfile-button-select": "Selecionar um arquivo",
        "ooui-selectfile-not-supported": "O selecionamento de arquivos não é suportado",
-       "ooui-selectfile-placeholder": "Nenhum arquivo selecionado"
+       "ooui-selectfile-placeholder": "Nenhum arquivo selecionado",
+       "ooui-selectfile-dragdrop-placeholder": "Arraste o arquivo para cá"
 }
index 131413e..9abc847 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.13.0
+ * OOjs UI v0.13.1
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2015 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2015-10-27T17:53:00Z
+ * Date: 2015-11-03T21:42:28Z
  */
 @-webkit-keyframes oo-ui-progressBarWidget-slide {
        from {
 .oo-ui-textInputWidget textarea.oo-ui-pendingElement-pending {
        background-color: transparent;
 }
-.oo-ui-textInputWidget-icon {
-       width: 2em;
-}
 .oo-ui-textInputWidget.oo-ui-widget-enabled input:focus,
 .oo-ui-textInputWidget.oo-ui-widget-enabled textarea:focus {
        outline: none;
 }
 .oo-ui-textInputWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
        width: 1.875em;
+       max-height: 2.375em;
        margin-left: 0.3em;
 }
 .oo-ui-textInputWidget.oo-ui-indicatorElement input,
 }
 .oo-ui-textInputWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
        width: 0.9375em;
+       max-height: 2.375em;
        margin-right: 0.775em;
 }
 .oo-ui-textInputWidget > .oo-ui-labelElement-label {
index 3158bfe..00a0966 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.13.0
+ * OOjs UI v0.13.1
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2015 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2015-10-27T17:52:51Z
+ * Date: 2015-11-03T21:42:20Z
  */
 /**
  * @class
index 96ba45c..fdb06e5 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.13.0
+ * OOjs UI v0.13.1
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2015 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2015-10-27T17:53:00Z
+ * Date: 2015-11-03T21:42:28Z
  */
 @-webkit-keyframes oo-ui-progressBarWidget-slide {
        from {
 .oo-ui-textInputWidget textarea.oo-ui-pendingElement-pending {
        background-color: transparent;
 }
-.oo-ui-textInputWidget-icon {
-       width: 2em;
-}
 .oo-ui-textInputWidget.oo-ui-widget-enabled input,
 .oo-ui-textInputWidget.oo-ui-widget-enabled textarea {
        -webkit-transition: border 200ms cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 200ms cubic-bezier(0.39, 0.575, 0.565, 1);
 .oo-ui-textInputWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
        left: 0;
        width: 1.875em;
+       max-height: 2.375em;
        margin-left: 0.5em;
        height: 100%;
        background-position: right center;
 }
 .oo-ui-textInputWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
        width: 0.9375em;
+       max-height: 2.375em;
        margin: 0 0.775em;
        height: 100%;
 }
        margin-right: 2.0875em;
 }
 .oo-ui-textInputWidget-labelPosition-before.oo-ui-iconElement > .oo-ui-labelElement-label {
-       margin-right: 2.475em;
+       margin-left: 2.475em;
 }
 .oo-ui-menuSelectWidget {
        position: absolute;
index 95e8b47..d9a17a2 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.13.0
+ * OOjs UI v0.13.1
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2015 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2015-10-27T17:52:51Z
+ * Date: 2015-11-03T21:42:20Z
  */
 /**
  * @class
index fbffe09..b4dc48c 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.13.0
+ * OOjs UI v0.13.1
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2015 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2015-10-27T17:52:51Z
+ * Date: 2015-11-03T21:42:20Z
  */
 ( function ( OO ) {
 
@@ -1289,17 +1289,25 @@ OO.ui.Element.static.unsafeInfuse = function ( idOrNode, domPromise ) {
                        }
                }
        } );
+       // allow widgets to reuse parts of the DOM
+       data = cls.static.reusePreInfuseDOM( $elem[ 0 ], data );
        // pick up dynamic state, like focus, value of form inputs, scroll position, etc.
-       state = cls.static.gatherPreInfuseState( $elem, data );
+       state = cls.static.gatherPreInfuseState( $elem[ 0 ], data );
+       // rebuild widget
        // jscs:disable requireCapitalizedConstructors
-       obj = new cls( data ); // rebuild widget
+       obj = new cls( data );
+       // jscs:enable requireCapitalizedConstructors
        // now replace old DOM with this new DOM.
        if ( top ) {
-               $elem.replaceWith( obj.$element );
-               // This element is now gone from the DOM, but if anyone is holding a reference to it,
-               // let's allow them to OO.ui.infuse() it and do what they expect (T105828).
-               // Do not use jQuery.data(), as using it on detached nodes leaks memory in 1.x line by design.
-               $elem[ 0 ].oouiInfused = obj;
+               // An efficient constructor might be able to reuse the entire DOM tree of the original element,
+               // so only mutate the DOM if we need to.
+               if ( $elem[ 0 ] !== obj.$element[ 0 ] ) {
+                       $elem.replaceWith( obj.$element );
+                       // This element is now gone from the DOM, but if anyone is holding a reference to it,
+                       // let's allow them to OO.ui.infuse() it and do what they expect (T105828).
+                       // Do not use jQuery.data(), as using it on detached nodes leaks memory in 1.x line by design.
+                       $elem[ 0 ].oouiInfused = obj;
+               }
                top.resolve();
        }
        obj.$element.data( 'ooui-infused', obj );
@@ -1310,6 +1318,22 @@ OO.ui.Element.static.unsafeInfuse = function ( idOrNode, domPromise ) {
        return obj;
 };
 
+/**
+ * Pick out parts of `node`'s DOM to be reused when infusing a widget.
+ *
+ * This method **must not** make any changes to the DOM, only find interesting pieces and add them
+ * to `config` (which should then be returned). Actual DOM juggling should then be done by the
+ * constructor, which will be given the enhanced config.
+ *
+ * @protected
+ * @param {HTMLElement} node
+ * @param {Object} config
+ * @return {Object}
+ */
+OO.ui.Element.static.reusePreInfuseDOM = function ( node, config ) {
+       return config;
+};
+
 /**
  * Gather the dynamic state (focus, value of form inputs, scroll position, etc.) of a HTML DOM node
  * (and its children) that represent an Element of the same class and the given configuration,
@@ -9021,7 +9045,7 @@ OO.ui.ProcessDialog.prototype.getTeardownProcess = function ( data ) {
  * @throws {Error} An error is thrown if no widget is specified
  */
 OO.ui.FieldLayout = function OoUiFieldLayout( fieldWidget, config ) {
-       var hasInputWidget, div, i;
+       var hasInputWidget, div;
 
        // Allow passing positional parameters inside the config object
        if ( OO.isPlainObject( fieldWidget ) && config === undefined ) {
@@ -9048,8 +9072,8 @@ OO.ui.FieldLayout = function OoUiFieldLayout( fieldWidget, config ) {
 
        // Properties
        this.fieldWidget = fieldWidget;
-       this.errors = config.errors || [];
-       this.notices = config.notices || [];
+       this.errors = [];
+       this.notices = [];
        this.$field = $( '<div>' );
        this.$messages = $( '<ul>' );
        this.$body = $( '<' + ( hasInputWidget ? 'label' : 'div' ) + '>' );
@@ -9085,9 +9109,6 @@ OO.ui.FieldLayout = function OoUiFieldLayout( fieldWidget, config ) {
        this.$element
                .addClass( 'oo-ui-fieldLayout' )
                .append( this.$help, this.$body );
-       if ( this.errors.length || this.notices.length ) {
-               this.$element.append( this.$messages );
-       }
        this.$body.addClass( 'oo-ui-fieldLayout-body' );
        this.$messages.addClass( 'oo-ui-fieldLayout-messages' );
        this.$field
@@ -9095,13 +9116,8 @@ OO.ui.FieldLayout = function OoUiFieldLayout( fieldWidget, config ) {
                .toggleClass( 'oo-ui-fieldLayout-disable', this.fieldWidget.isDisabled() )
                .append( this.fieldWidget.$element );
 
-       for ( i = 0; i < this.notices.length; i++ ) {
-               this.$messages.append( this.makeMessage( 'notice', this.notices[ i ] ) );
-       }
-       for ( i = 0; i < this.errors.length; i++ ) {
-               this.$messages.append( this.makeMessage( 'error', this.errors[ i ] ) );
-       }
-
+       this.setErrors( config.errors || [] );
+       this.setNotices( config.notices || [] );
        this.setAlignment( config.align );
 };
 
@@ -9144,6 +9160,7 @@ OO.ui.FieldLayout.prototype.getField = function () {
 };
 
 /**
+ * @protected
  * @param {string} kind 'error' or 'notice'
  * @param {string|OO.ui.HtmlSnippet} text
  * @return {jQuery}
@@ -9199,6 +9216,56 @@ OO.ui.FieldLayout.prototype.setAlignment = function ( value ) {
        return this;
 };
 
+/**
+ * Set the list of error messages.
+ *
+ * @param {Array} errors Error messages about the widget, which will be displayed below the widget.
+ *  The array may contain strings or OO.ui.HtmlSnippet instances.
+ * @chainable
+ */
+OO.ui.FieldLayout.prototype.setErrors = function ( errors ) {
+       this.errors = errors.slice();
+       this.updateMessages();
+       return this;
+};
+
+/**
+ * Set the list of notice messages.
+ *
+ * @param {Array} notices Notices about the widget, which will be displayed below the widget.
+ *  The array may contain strings or OO.ui.HtmlSnippet instances.
+ * @chainable
+ */
+OO.ui.FieldLayout.prototype.setNotices = function ( notices ) {
+       this.notices = notices.slice();
+       this.updateMessages();
+       return this;
+};
+
+/**
+ * Update the rendering of error and notice messages.
+ *
+ * @private
+ */
+OO.ui.FieldLayout.prototype.updateMessages = function () {
+       var i;
+       this.$messages.empty();
+
+       if ( this.errors.length || this.notices.length ) {
+               this.$body.after( this.$messages );
+       } else {
+               this.$messages.remove();
+               return;
+       }
+
+       for ( i = 0; i < this.notices.length; i++ ) {
+               this.$messages.append( this.makeMessage( 'notice', this.notices[ i ] ) );
+       }
+       for ( i = 0; i < this.errors.length; i++ ) {
+               this.$messages.append( this.makeMessage( 'error', this.errors[ i ] ) );
+       }
+};
+
 /**
  * ActionFieldLayouts are used with OO.ui.FieldsetLayout. The layout consists of a field-widget, a button,
  * and an optional label and/or help text. The field-widget (e.g., a {@link OO.ui.TextInputWidget TextInputWidget}),
@@ -14569,7 +14636,7 @@ OO.ui.IndicatorWidget.static.tagName = 'span';
  * @param {Object} [config] Configuration options
  * @cfg {string} [name=''] The value of the input’s HTML `name` attribute.
  * @cfg {string} [value=''] The value of the input.
- * @cfg {string} [accessKey=''] The access key of the input.
+ * @cfg {string} [dir] The directionality of the input (ltr/rtl).
  * @cfg {Function} [inputFilter] The name of an input filter function. Input filters modify the value of an input
  *  before it is accepted.
  */
@@ -14604,6 +14671,9 @@ OO.ui.InputWidget = function OoUiInputWidget( config ) {
                .append( this.$input );
        this.setValue( config.value );
        this.setAccessKey( config.accessKey );
+       if ( config.dir ) {
+               this.setDir( config.dir );
+       }
 };
 
 /* Setup */
@@ -14620,16 +14690,24 @@ OO.ui.InputWidget.static.supportsSimpleLabel = true;
 
 /* Static Methods */
 
+/**
+ * @inheritdoc
+ */
+OO.ui.InputWidget.static.reusePreInfuseDOM = function ( node, config ) {
+       config = OO.ui.InputWidget.parent.static.reusePreInfuseDOM( node, config );
+       // Reusing $input lets browsers preserve inputted values across page reloads (T114134)
+       config.$input = $( node ).find( '.oo-ui-inputWidget-input' );
+       return config;
+};
+
 /**
  * @inheritdoc
  */
 OO.ui.InputWidget.static.gatherPreInfuseState = function ( node, config ) {
-       var
-               state = OO.ui.InputWidget.parent.static.gatherPreInfuseState( node, config ),
-               $input = state.$input || $( node ).find( '.oo-ui-inputWidget-input' );
-       state.value = $input.val();
+       var state = OO.ui.InputWidget.parent.static.gatherPreInfuseState( node, config );
+       state.value = config.$input.val();
        // Might be better in TabIndexedElement, but it's awkward to do there because mixins are awkward
-       state.focus = $input.is( ':focus' );
+       state.focus = config.$input.is( ':focus' );
        return state;
 };
 
@@ -14655,8 +14733,9 @@ OO.ui.InputWidget.static.gatherPreInfuseState = function ( node, config ) {
  * @param {Object} config Configuration options
  * @return {jQuery} Input element
  */
-OO.ui.InputWidget.prototype.getInputElement = function () {
-       return $( '<input>' );
+OO.ui.InputWidget.prototype.getInputElement = function ( config ) {
+       // See #reusePreInfuseDOM about config.$input
+       return config.$input || $( '<input>' );
 };
 
 /**
@@ -14691,13 +14770,26 @@ OO.ui.InputWidget.prototype.getValue = function () {
 };
 
 /**
- * Set the direction of the input, either RTL (right-to-left) or LTR (left-to-right).
+ * Set the directionality of the input, either RTL (right-to-left) or LTR (left-to-right).
  *
- * @param {boolean} isRTL
- * Direction is right-to-left
+ * @deprecated since v0.13.1, use #setDir directly
+ * @param {boolean} isRTL Directionality is right-to-left
+ * @chainable
  */
 OO.ui.InputWidget.prototype.setRTL = function ( isRTL ) {
-       this.$input.prop( 'dir', isRTL ? 'rtl' : 'ltr' );
+       this.setDir( isRTL ? 'rtl' : 'ltr' );
+       return this;
+};
+
+/**
+ * Set the directionality of the input.
+ *
+ * @param {string} dir Text directionality: 'ltr', 'rtl' or 'auto'
+ * @chainable
+ */
+OO.ui.InputWidget.prototype.setDir = function ( dir ) {
+       this.$input.prop( 'dir', dir );
+       return this;
 };
 
 /**
@@ -14906,9 +14998,12 @@ OO.ui.ButtonInputWidget.static.supportsSimpleLabel = false;
  * @protected
  */
 OO.ui.ButtonInputWidget.prototype.getInputElement = function ( config ) {
-       var type = [ 'button', 'submit', 'reset' ].indexOf( config.type ) !== -1 ?
-               config.type :
-               'button';
+       var type;
+       // See InputWidget#reusePreInfuseDOM about config.$input
+       if ( config.$input ) {
+               return config.$input.empty();
+       }
+       type = [ 'button', 'submit', 'reset' ].indexOf( config.type ) !== -1 ? config.type : 'button';
        return $( '<' + ( config.useInputTag ? 'input' : 'button' ) + ' type="' + type + '">' );
 };
 
@@ -15022,11 +15117,8 @@ OO.inheritClass( OO.ui.CheckboxInputWidget, OO.ui.InputWidget );
  * @inheritdoc
  */
 OO.ui.CheckboxInputWidget.static.gatherPreInfuseState = function ( node, config ) {
-       var
-               state = OO.ui.CheckboxInputWidget.parent.static.gatherPreInfuseState( node, config ),
-               $input = $( node ).find( '.oo-ui-inputWidget-input' );
-       state.$input = $input; // shortcut for performance, used in InputWidget
-       state.checked = $input.prop( 'checked' );
+       var state = OO.ui.CheckboxInputWidget.parent.static.gatherPreInfuseState( node, config );
+       state.checked = config.$input.prop( 'checked' );
        return state;
 };
 
@@ -15162,7 +15254,11 @@ OO.mixinClass( OO.ui.DropdownInputWidget, OO.ui.mixin.TitledElement );
  * @inheritdoc
  * @protected
  */
-OO.ui.DropdownInputWidget.prototype.getInputElement = function () {
+OO.ui.DropdownInputWidget.prototype.getInputElement = function ( config ) {
+       // See InputWidget#reusePreInfuseDOM about config.$input
+       if ( config.$input ) {
+               return config.$input.addClass( 'oo-ui-element-hidden' );
+       }
        return $( '<input type="hidden">' );
 };
 
@@ -15313,11 +15409,8 @@ OO.inheritClass( OO.ui.RadioInputWidget, OO.ui.InputWidget );
  * @inheritdoc
  */
 OO.ui.RadioInputWidget.static.gatherPreInfuseState = function ( node, config ) {
-       var
-               state = OO.ui.RadioInputWidget.parent.static.gatherPreInfuseState( node, config ),
-               $input = $( node ).find( '.oo-ui-inputWidget-input' );
-       state.$input = $input; // shortcut for performance, used in InputWidget
-       state.checked = $input.prop( 'checked' );
+       var state = OO.ui.RadioInputWidget.parent.static.gatherPreInfuseState( node, config );
+       state.checked = config.$input.prop( 'checked' );
        return state;
 };
 
@@ -15604,6 +15697,7 @@ OO.ui.TextInputWidget = function OoUiTextInputWidget( config ) {
        this.maxRows = config.maxRows || Math.max( 2 * ( this.minRows || 0 ), 10 );
        this.validate = null;
        this.styleHeight = null;
+       this.scrollWidth = null;
 
        // Clone for resizing
        if ( this.autosize ) {
@@ -15696,12 +15790,9 @@ OO.ui.TextInputWidget.static.validationPatterns = {
  * @inheritdoc
  */
 OO.ui.TextInputWidget.static.gatherPreInfuseState = function ( node, config ) {
-       var
-               state = OO.ui.TextInputWidget.parent.static.gatherPreInfuseState( node, config ),
-               $input = $( node ).find( '.oo-ui-inputWidget-input' );
-       state.$input = $input; // shortcut for performance, used in InputWidget
+       var state = OO.ui.TextInputWidget.parent.static.gatherPreInfuseState( node, config );
        if ( config.multiline ) {
-               state.scrollTop = $input.scrollTop();
+               state.scrollTop = config.$input.scrollTop();
        }
        return state;
 };
@@ -15914,47 +16005,67 @@ OO.ui.TextInputWidget.prototype.installParentChangeDetector = function () {
  * @fires resize
  */
 OO.ui.TextInputWidget.prototype.adjustSize = function () {
-       var scrollHeight, innerHeight, outerHeight, maxInnerHeight, measurementError, idealHeight, newHeight;
-
-       if ( this.multiline && this.autosize && this.$input.val() !== this.valCache ) {
-               this.$clone
-                       .val( this.$input.val() )
-                       .attr( 'rows', this.minRows )
-                       // Set inline height property to 0 to measure scroll height
-                       .css( 'height', 0 );
-
-               this.$clone.removeClass( 'oo-ui-element-hidden' );
-
-               this.valCache = this.$input.val();
-
-               scrollHeight = this.$clone[ 0 ].scrollHeight;
-
-               // Remove inline height property to measure natural heights
-               this.$clone.css( 'height', '' );
-               innerHeight = this.$clone.innerHeight();
-               outerHeight = this.$clone.outerHeight();
-
-               // Measure max rows height
-               this.$clone
-                       .attr( 'rows', this.maxRows )
-                       .css( 'height', 'auto' )
-                       .val( '' );
-               maxInnerHeight = this.$clone.innerHeight();
-
-               // Difference between reported innerHeight and scrollHeight with no scrollbars present
-               // Equals 1 on Blink-based browsers and 0 everywhere else
-               measurementError = maxInnerHeight - this.$clone[ 0 ].scrollHeight;
-               idealHeight = Math.min( maxInnerHeight, scrollHeight + measurementError );
-
-               this.$clone.addClass( 'oo-ui-element-hidden' );
-
-               // Only apply inline height when expansion beyond natural height is needed
-               // Use the difference between the inner and outer height as a buffer
-               newHeight = idealHeight > innerHeight ? idealHeight + ( outerHeight - innerHeight ) : '';
-               if ( newHeight !== this.styleHeight ) {
-                       this.$input.css( 'height', newHeight );
-                       this.styleHeight = newHeight;
-                       this.emit( 'resize' );
+       var scrollHeight, innerHeight, outerHeight, maxInnerHeight, measurementError,
+               idealHeight, newHeight, scrollWidth, property;
+
+       if ( this.multiline && this.$input.val() !== this.valCache ) {
+               if ( this.autosize ) {
+                       this.$clone
+                               .val( this.$input.val() )
+                               .attr( 'rows', this.minRows )
+                               // Set inline height property to 0 to measure scroll height
+                               .css( 'height', 0 );
+
+                       this.$clone.removeClass( 'oo-ui-element-hidden' );
+
+                       this.valCache = this.$input.val();
+
+                       scrollHeight = this.$clone[ 0 ].scrollHeight;
+
+                       // Remove inline height property to measure natural heights
+                       this.$clone.css( 'height', '' );
+                       innerHeight = this.$clone.innerHeight();
+                       outerHeight = this.$clone.outerHeight();
+
+                       // Measure max rows height
+                       this.$clone
+                               .attr( 'rows', this.maxRows )
+                               .css( 'height', 'auto' )
+                               .val( '' );
+                       maxInnerHeight = this.$clone.innerHeight();
+
+                       // Difference between reported innerHeight and scrollHeight with no scrollbars present
+                       // Equals 1 on Blink-based browsers and 0 everywhere else
+                       measurementError = maxInnerHeight - this.$clone[ 0 ].scrollHeight;
+                       idealHeight = Math.min( maxInnerHeight, scrollHeight + measurementError );
+
+                       this.$clone.addClass( 'oo-ui-element-hidden' );
+
+                       // Only apply inline height when expansion beyond natural height is needed
+                       // Use the difference between the inner and outer height as a buffer
+                       newHeight = idealHeight > innerHeight ? idealHeight + ( outerHeight - innerHeight ) : '';
+                       if ( newHeight !== this.styleHeight ) {
+                               this.$input.css( 'height', newHeight );
+                               this.styleHeight = newHeight;
+                               this.emit( 'resize' );
+                       }
+               }
+               scrollWidth = this.$input[ 0 ].offsetWidth - this.$input[ 0 ].clientWidth;
+               if ( scrollWidth !== this.scrollWidth ) {
+                       property = this.$element.css( 'direction' ) === 'rtl' ? 'left' : 'right';
+                       // Reset
+                       this.$label.css( { right: '', left: '' } );
+                       this.$indicator.css( { right: '', left: '' } );
+
+                       if ( scrollWidth ) {
+                               this.$indicator.css( property, scrollWidth );
+                               if ( this.labelPosition === 'after' ) {
+                                       this.$label.css( property, scrollWidth );
+                               }
+                       }
+
+                       this.scrollWidth = scrollWidth;
+                       this.positionLabel();
                }
        }
        return this;
@@ -16221,6 +16332,9 @@ OO.ui.TextInputWidget.prototype.updatePosition = function () {
                .toggleClass( 'oo-ui-textInputWidget-labelPosition-after', !!this.label && after )
                .toggleClass( 'oo-ui-textInputWidget-labelPosition-before', !!this.label && !after );
 
+       this.valCache = null;
+       this.scrollWidth = null;
+       this.adjustSize();
        this.positionLabel();
 
        return this;
@@ -16267,7 +16381,7 @@ OO.ui.TextInputWidget.prototype.positionLabel = function () {
        rtl = this.$element.css( 'direction' ) === 'rtl';
        property = after === rtl ? 'padding-left' : 'padding-right';
 
-       this.$input.css( property, this.$label.outerWidth( true ) );
+       this.$input.css( property, this.$label.outerWidth( true ) + ( after ? this.scrollWidth : 0 ) );
 
        return this;
 };
index 0c6c15e..ddae9b1 100644 (file)
 
        OO.inheritClass( mw.widgets.ComplexTitleInputWidget, OO.ui.Widget );
 
+       /* Static Methods */
+       /*jshint -W024*/
+
+       /**
+        * @inheritdoc
+        */
+       mw.widgets.ComplexTitleInputWidget.static.reusePreInfuseDOM = function ( node, config ) {
+               config = mw.widgets.ComplexTitleInputWidget.parent.static.reusePreInfuseDOM( node, config );
+               config.namespace = mw.widgets.NamespaceInputWidget.static.reusePreInfuseDOM(
+                       $( node ).find( '.mw-widget-namespaceInputWidget' ),
+                       config.namespace
+               );
+               config.title = mw.widgets.TitleInputWidget.static.reusePreInfuseDOM(
+                       $( node ).find( '.mw-widget-titleInputWidget' ),
+                       config.title
+               );
+               return config;
+       };
+
+       /**
+        * @inheritdoc
+        */
+       mw.widgets.ComplexTitleInputWidget.static.gatherPreInfuseState = function ( node, config ) {
+               var state = mw.widgets.ComplexTitleInputWidget.parent.static.gatherPreInfuseState( node, config );
+               state.namespace = mw.widgets.NamespaceInputWidget.static.gatherPreInfuseState(
+                       $( node ).find( '.mw-widget-namespaceInputWidget' ),
+                       config.namespace
+               );
+               state.title = mw.widgets.TitleInputWidget.static.gatherPreInfuseState(
+                       $( node ).find( '.mw-widget-titleInputWidget' ),
+                       config.title
+               );
+               return state;
+       };
+
+       /*jshint +W024*/
+
        /* Methods */
 
        /**
                this.title.setNamespace( Number( this.namespace.getValue() ) );
        };
 
+       /**
+        * @inheritdoc
+        */
+       mw.widgets.ComplexTitleInputWidget.prototype.restorePreInfuseState = function ( state ) {
+               mw.widgets.ComplexTitleInputWidget.parent.prototype.restorePreInfuseState.call( this, state );
+               this.namespace.restorePreInfuseState( state.namespace );
+               this.title.restorePreInfuseState( state.title );
+       };
+
 }( jQuery, mediaWiki ) );
index 717e2ec..8595386 100644 (file)
         */
        mw.ForeignStructuredUpload.BookletLayout.prototype.getText = function () {
                var language = mw.config.get( 'wgContentLanguage' );
+               this.upload.clearDescriptions();
                this.upload.addDescription( language, this.descriptionWidget.getValue() );
                this.upload.setDate( this.dateWidget.getValue() );
+               this.upload.clearCategories();
                this.upload.addCategories( this.categoriesWidget.getItemsData() );
                return this.upload.getText();
        };
index dd28ddd..c336676 100644 (file)
                }
        };
 
+       /**
+        * Empty the list of categories for the upload.
+        */
+       ForeignStructuredUpload.prototype.clearCategories = function () {
+               this.categories = [];
+       };
+
        /**
         * Add a description to the upload.
         *
                } );
        };
 
+       /**
+        * Empty the list of descriptions for the upload.
+        */
+       ForeignStructuredUpload.prototype.clearDescriptions = function () {
+               this.descriptions = [];
+       };
+
        /**
         * Set the date of creation for the upload.
         *
@@ -70,6 +84,7 @@
         */
        ForeignStructuredUpload.prototype.getText = function () {
                return (
+                       '== {{int:filedesc}} ==\n' +
                        '{{' +
                        this.getTemplateName() +
                        '\n|description=' +
@@ -81,6 +96,7 @@
                        '\n|author=' +
                        this.getUser() +
                        '\n}}\n\n' +
+                       '== {{int:license-header}} ==\n' +
                        this.getLicense() +
                        '\n\n' +
                        this.getCategories()
         * @return {string}
         */
        ForeignStructuredUpload.prototype.getUser = function () {
-               return mw.config.get( 'wgUserName' );
+               var username = mw.config.get( 'wgUserName' );
+               // Do not localise 'User:', we don't know the language of target wiki
+               return '[[User:' + username + '|' + username + ']]';
        };
 
        mw.ForeignStructuredUpload = ForeignStructuredUpload;
index 2e89f6b..bf0884b 100644 (file)
                                        $el.attr( 'href', textify( arg ) );
                                }
                        }
-                       return appendWithoutParsing( $el, contents );
+                       return appendWithoutParsing( $el.empty(), contents );
                },
 
                /**
diff --git a/tests/phpunit/includes/libs/TimingTest.php b/tests/phpunit/includes/libs/TimingTest.php
new file mode 100644 (file)
index 0000000..93e9d6b
--- /dev/null
@@ -0,0 +1,111 @@
+<?php
+/**
+ * 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 Ori Livneh <ori@wikimedia.org>
+ */
+
+class TimingTest extends PHPUnit_Framework_TestCase {
+
+       /**
+        * @covers Timing::clearMarks
+        * @covers Timing::getEntries
+        */
+       public function testClearMarks() {
+               $timing = new Timing;
+               $this->assertCount( 1, $timing->getEntries() );
+
+               $timing->mark( 'a' );
+               $timing->mark( 'b' );
+               $this->assertCount( 3, $timing->getEntries() );
+
+               $timing->clearMarks( 'a' );
+               $this->assertNull( $timing->getEntryByName( 'a' ) );
+               $this->assertNotNull( $timing->getEntryByName( 'b' ) );
+
+               $timing->clearMarks();
+               $this->assertCount( 1, $timing->getEntries() );
+       }
+
+       /**
+        * @covers Timing::mark
+        * @covers Timing::getEntryByName
+        */
+       public function testMark() {
+               $timing = new Timing;
+               $timing->mark( 'a' );
+
+               $entry = $timing->getEntryByName( 'a' );
+               $this->assertEquals( 'a', $entry['name'] );
+               $this->assertEquals( 'mark', $entry['entryType'] );
+               $this->assertArrayHasKey( 'startTime', $entry );
+               $this->assertEquals( 0, $entry['duration'] );
+
+               $timing->mark( 'a' );
+               $newEntry = $timing->getEntryByName( 'a' );
+               $this->assertGreaterThan( $entry['startTime'], $newEntry['startTime'] );
+       }
+
+       /**
+        * @covers Timing::measure
+        */
+       public function testMeasure() {
+               $timing = new Timing;
+
+               $timing->mark( 'a' );
+               $a = $timing->getEntryByName( 'a' );
+
+               $timing->mark( 'b' );
+               $b = $timing->getEntryByName( 'b' );
+
+               $timing->measure( 'a_to_b', 'a', 'b' );
+
+               $entry = $timing->getEntryByName( 'a_to_b' );
+               $this->assertEquals( 'a_to_b', $entry['name'] );
+               $this->assertEquals( 'measure', $entry['entryType'] );
+               $this->assertEquals( $a['startTime'], $entry['startTime'] );
+               $this->assertEquals( $b['startTime'] - $a['startTime'], $entry['duration'] );
+       }
+
+       /**
+        * @covers Timing::getEntriesByType
+        */
+       public function testGetEntriesByType() {
+               $timing = new Timing;
+
+               $timing->mark( 'mark_a' );
+               usleep( 100 );
+               $timing->mark( 'mark_b' );
+               usleep( 100 );
+               $timing->mark( 'mark_c' );
+
+               $timing->measure( 'measure_a', 'mark_a', 'mark_b' );
+               $timing->measure( 'measure_b', 'mark_b', 'mark_c' );
+
+               $marks = array_map( function ( $entry ) {
+                       return $entry['name'];
+               }, $timing->getEntriesByType( 'mark' ) );
+
+               $this->assertEquals( array( 'requestStart', 'mark_a', 'mark_b', 'mark_c' ), $marks );
+
+               $measures = array_map( function ( $entry ) {
+                       return $entry['name'];
+               }, $timing->getEntriesByType( 'measure' ) );
+
+               $this->assertEquals( array( 'measure_a', 'measure_b' ), $measures );
+       }
+}
index 39b84e1..5194e8d 100644 (file)
@@ -27,19 +27,6 @@ class HashBagOStuffTest extends PHPUnit_Framework_TestCase {
                }
        }
 
-       public function testEvictionOrder() {
-               $cache = new HashBagOStuff( array( 'maxKeys' => 10 ) );
-               for ( $i = 0; $i < 10; $i++ ) {
-                       $cache->set( "key$i", 1 );
-                       $this->assertEquals( 1, $cache->get( "key$i" ) );
-               }
-               for ( $i = 10; $i < 20; $i++ ) {
-                       $cache->set( "key$i", 1 );
-                       $this->assertEquals( 1, $cache->get( "key$i" ) );
-                       $this->assertEquals( false, $cache->get( "key" . $i - 10 ) );
-               }
-       }
-
        public function testExpire() {
                $cache = new HashBagOStuff();
                $cacheInternal = TestingAccessWrapper::newFromObject( $cache );
@@ -56,7 +43,27 @@ class HashBagOStuffTest extends PHPUnit_Framework_TestCase {
                $this->assertEquals( false, $cache->get( 'baz' ), 'Key expired' );
        }
 
-       public function testKeyOrder() {
+       /**
+        * Ensure maxKeys eviction prefers keeping new keys.
+        */
+       public function testEvictionAdd() {
+               $cache = new HashBagOStuff( array( 'maxKeys' => 10 ) );
+               for ( $i = 0; $i < 10; $i++ ) {
+                       $cache->set( "key$i", 1 );
+                       $this->assertEquals( 1, $cache->get( "key$i" ) );
+               }
+               for ( $i = 10; $i < 20; $i++ ) {
+                       $cache->set( "key$i", 1 );
+                       $this->assertEquals( 1, $cache->get( "key$i" ) );
+                       $this->assertEquals( false, $cache->get( "key" . $i - 10 ) );
+               }
+       }
+
+       /**
+        * Ensure maxKeys eviction prefers recently set keys
+        * even if the keys pre-exist.
+        */
+       public function testEvictionSet() {
                $cache = new HashBagOStuff( array( 'maxKeys' => 3 ) );
 
                foreach ( array( 'foo', 'bar', 'baz' ) as $key ) {
@@ -75,4 +82,27 @@ class HashBagOStuffTest extends PHPUnit_Framework_TestCase {
                }
                $this->assertEquals( false, $cache->get( 'bar' ), 'Evicted bar' );
        }
+
+       /**
+        * Ensure maxKeys eviction prefers recently retrieved keys (LRU).
+        */
+       public function testEvictionGet() {
+               $cache = new HashBagOStuff( array( 'maxKeys' => 3 ) );
+
+               foreach ( array( 'foo', 'bar', 'baz' ) as $key ) {
+                       $cache->set( $key, 1 );
+               }
+
+               // Get existing key
+               $cache->get( 'foo', 1 );
+
+               // Add a 4th key (beyond the allowed maximum)
+               $cache->set( 'quux', 1 );
+
+               // Foo's life should have been extended over Bar
+               foreach ( array( 'foo', 'baz', 'quux' ) as $key ) {
+                       $this->assertEquals( 1, $cache->get( $key ), "Kept $key" );
+               }
+               $this->assertEquals( false, $cache->get( 'bar' ), 'Evicted bar' );
+       }
 }
index a21fc8a..0a46f8a 100644 (file)
@@ -212,25 +212,6 @@ class WikiPageTest extends MediaWikiLangTestCase {
                $this->assertEquals( 2, $n, 'pagelinks should contain two links from the page' );
        }
 
-       /**
-        * @covers WikiPage::doQuickEdit
-        */
-       public function testDoQuickEdit() {
-               global $wgUser;
-
-               $this->hideDeprecated( "WikiPage::doQuickEdit" );
-
-               // NOTE: assume help namespace will default to wikitext
-               $page = $this->createPage( "Help:WikiPageTest_testDoQuickEdit", "original text" );
-
-               $text = "quick text";
-               $page->doQuickEdit( $text, $wgUser, "testing q" );
-
-               # ---------------------
-               $page = new WikiPage( $page->getTitle() );
-               $this->assertEquals( $text, $page->getText() );
-       }
-
        /**
         * @covers WikiPage::doQuickEditContent
         */
index d6c58cf..c7562f5 100644 (file)
@@ -216,7 +216,7 @@ class SiteListTest extends MediaWikiTestCase {
        public function testSerialization( SiteList $list ) {
                $serialization = serialize( $list );
                /**
-                * @var SiteArray $copy
+                * @var SiteList $copy
                 */
                $copy = unserialize( $serialization );
 
index 24528bb..f65ff16 100644 (file)
                assert.equal( logSpy.callCount, 2, 'mw.log.warn calls' );
        } );
 
-       QUnit.test( 'Integration', 4, function ( assert ) {
-               var expected, logSpy;
+       QUnit.test( 'Integration', 5, function ( assert ) {
+               var expected, logSpy, msg;
 
                expected = '<b><a title="Bold" href="/wiki/Bold">Bold</a>!</b>';
                mw.messages.set( 'integration-test', '<b>[[Bold]]!</b>' );
                        expected,
                        'jQuery plugin $.fn.msg() works correctly'
                );
+
+               mw.messages.set( 'integration-test-extlink', '[$1 Link]' );
+               msg = mw.message(
+                       'integration-test-extlink',
+                       $( '<a>' ).attr( 'href', 'http://example.com/' )
+               );
+               msg.parse(); // Not a no-op
+               assert.equal(
+                       msg.parse(),
+                       '<a href="http://example.com/">Link</a>',
+                       'Calling .parse() multiple times does not duplicate link contents'
+               );
        } );
 
 }( mediaWiki, jQuery ) );
index c699bb1..34f641d 100644 (file)
--- a/thumb.php
+++ b/thumb.php
@@ -420,18 +420,15 @@ function wfGenerateThumbnail( File $file, array $params, $thumbName, $thumbPath
                                'doWork' => function () use ( $file, $params ) {
                                        return $file->transform( $params, File::RENDER_NOW );
                                },
-                               'getCachedWork' => function () use ( $file, $params, $thumbPath ) {
+                               'doCachedWork' => function () use ( $file, $params, $thumbPath ) {
                                        // If the worker that finished made this thumbnail then use it.
                                        // Otherwise, it probably made a different thumbnail for this file.
                                        return $file->getRepo()->fileExists( $thumbPath )
                                                ? $file->transform( $params, File::RENDER_NOW )
                                                : false; // retry once more in exclusive mode
                                },
-                               'fallback' => function () {
-                                       return wfMessage( 'generic-pool-error' )->parse();
-                               },
                                'error' => function ( Status $status ) {
-                                       return $status->getHTML();
+                                       return wfMessage( 'generic-pool-error' )->parse() . '<hr>' . $status->getHTML();
                                }
                        )
                );