Merge "Fix FOUC for floated collapsible elements outside the content area"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Tue, 21 Aug 2018 00:37:00 +0000 (00:37 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Tue, 21 Aug 2018 00:37:00 +0000 (00:37 +0000)
179 files changed:
.eslintrc.json
RELEASE-NOTES-1.32
autoload.php
docs/scripts.txt
includes/DefaultSettings.php
includes/GlobalFunctions.php
includes/Html.php
includes/Linker.php
includes/MediaWiki.php
includes/MediaWikiServices.php
includes/Message.php
includes/OutputPage.php
includes/Preferences.php
includes/PrefixSearch.php
includes/ServiceWiring.php
includes/Setup.php
includes/Title.php
includes/actions/InfoAction.php
includes/actions/SpecialPageAction.php
includes/api/ApiPageSet.php
includes/api/ApiQuerySearch.php
includes/api/ApiQuerySiteinfo.php
includes/api/i18n/ko.json
includes/api/i18n/pt.json
includes/api/i18n/zh-hant.json
includes/cache/LinkBatch.php
includes/cache/MessageCache.php
includes/changes/OldChangesList.php
includes/deferred/LinksUpdate.php
includes/deferred/SearchUpdate.php
includes/editpage/TextConflictHelper.php
includes/filerepo/LocalRepo.php
includes/filerepo/file/ForeignAPIFile.php
includes/htmlform/HTMLForm.php
includes/htmlform/HTMLFormField.php
includes/installer/MssqlUpdater.php
includes/installer/MysqlUpdater.php
includes/installer/OracleUpdater.php
includes/installer/PostgresUpdater.php
includes/installer/SqliteUpdater.php
includes/libs/JavaScriptMinifier.php
includes/libs/StaticArrayWriter.php [new file with mode: 0644]
includes/libs/rdbms/loadbalancer/LoadBalancer.php
includes/libs/stats/PrefixingStatsdDataFactoryProxy.php [new file with mode: 0644]
includes/logging/LogPage.php
includes/logging/ProtectLogFormatter.php
includes/page/WikiPage.php
includes/pager/RangeChronologicalPager.php
includes/parser/CoreParserFunctions.php
includes/parser/Parser.php
includes/parser/ParserFactory.php
includes/resourceloader/ResourceLoader.php
includes/resourceloader/ResourceLoaderFileModule.php
includes/resourceloader/ResourceLoaderJqueryMsgModule.php
includes/search/SearchEngine.php
includes/skins/Skin.php
includes/skins/SkinTemplate.php
includes/specialpage/SpecialPage.php
includes/specialpage/SpecialPageFactory.php
includes/specialpage/SpecialPageFactory_deprecated.php [new file with mode: 0644]
includes/specials/SpecialEditWatchlist.php
includes/specials/SpecialExport.php
includes/specials/SpecialJavaScriptTest.php
includes/specials/SpecialListgrouprights.php
includes/specials/SpecialLog.php
includes/specials/SpecialSearch.php
includes/specials/SpecialSpecialpages.php
includes/specials/SpecialWatchlist.php
includes/title/MediaWikiTitleCodec.php
includes/title/TitleFormatter.php
includes/title/TitleValue.php
includes/widget/search/InterwikiSearchResultSetWidget.php
includes/widget/search/SearchFormWidget.php
jsduck.json
languages/Language.php
languages/classes/LanguageAr.php
languages/classes/LanguageMl.php
languages/i18n/ast.json
languages/i18n/be-tarask.json
languages/i18n/ca.json
languages/i18n/ce.json
languages/i18n/cs.json
languages/i18n/cv.json
languages/i18n/de.json
languages/i18n/el.json
languages/i18n/frr.json
languages/i18n/hy.json
languages/i18n/ia.json
languages/i18n/it.json
languages/i18n/ja.json
languages/i18n/jv.json
languages/i18n/kum.json
languages/i18n/mni.json
languages/i18n/mnw.json
languages/i18n/my.json
languages/i18n/nap.json
languages/i18n/nb.json
languages/i18n/nn.json
languages/i18n/or.json
languages/i18n/pl.json
languages/i18n/pt.json
languages/i18n/ro.json
languages/i18n/sco.json
languages/i18n/sk.json
languages/i18n/sq.json
languages/i18n/sr-ec.json
languages/i18n/sr-el.json
languages/i18n/sv.json
languages/i18n/ta.json
languages/i18n/te.json
languages/i18n/tt-cyrl.json
languages/i18n/zgh.json
languages/i18n/zh-hant.json
languages/i18n/zh-hk.json
maintenance/archives/patch-recentchanges-rc_this_oldid-index.sql [new file with mode: 0644]
maintenance/benchmarks/Benchmarker.php
maintenance/categoryChangesAsRdf.php
maintenance/language/generateCollationData.php
maintenance/language/generateNormalizerDataAr.php
maintenance/language/generateNormalizerDataMl.php
maintenance/mssql/tables.sql
maintenance/oracle/tables.sql
maintenance/orphans.php
maintenance/postgres/tables.sql
maintenance/tables.sql
maintenance/updateSpecialPages.php
profileinfo.php
resources/Resources.php
resources/src/jquery/jquery.expandableField.js [deleted file]
resources/src/jquery/jquery.lengthLimit.js
resources/src/jquery/jquery.suggestions.js
resources/src/mediawiki.ForeignStructuredUpload.BookletLayout/BookletLayout.js
resources/src/mediawiki.ForeignStructuredUpload.BookletLayout/BookletLayout.less [deleted file]
resources/src/mediawiki.confirmCloseWindow.js
resources/src/mediawiki.htmlform/autocomplete.js
resources/src/mediawiki.inspect.js
resources/src/mediawiki.jqueryMsg/mediawiki.jqueryMsg.js
resources/src/mediawiki.legacy/protect.js
resources/src/mediawiki.searchSuggest/searchSuggest.js
resources/src/mediawiki.special.apisandbox/apisandbox.js
resources/src/mediawiki.userSuggest.js
resources/src/mediawiki.util.js
resources/src/mediawiki.widgets.datetime/DateTimeFormatter.js
resources/src/mediawiki.widgets.datetime/DiscordianDateTimeFormatter.js
resources/src/mediawiki.widgets.datetime/ProlepticGregorianDateTimeFormatter.js
resources/src/mediawiki.widgets/mw.widgets.NamespaceInputWidget.js
resources/src/mediawiki.widgets/mw.widgets.TitleWidget.js
resources/src/startup/startup.js
tests/phpunit/MediaWikiTestCase.php
tests/phpunit/data/categoriesrdf/change.sparql [deleted file]
tests/phpunit/data/categoriesrdf/edit.sparql [new file with mode: 0644]
tests/phpunit/includes/BlockTest.php
tests/phpunit/includes/ContentSecurityPolicyTest.php
tests/phpunit/includes/GlobalFunctions/wfShellExecTest.php
tests/phpunit/includes/HtmlTest.php
tests/phpunit/includes/PrefixSearchTest.php
tests/phpunit/includes/TitlePermissionTest.php
tests/phpunit/includes/api/ApiEditPageTest.php
tests/phpunit/includes/api/ApiQuerySiteinfoTest.php
tests/phpunit/includes/api/PrefixUniquenessTest.php [deleted file]
tests/phpunit/includes/libs/JavaScriptMinifierTest.php
tests/phpunit/includes/libs/StaticArrayWriterTest.php [new file with mode: 0644]
tests/phpunit/includes/libs/stats/PrefixingStatsdDataFactoryProxyTest.php [new file with mode: 0644]
tests/phpunit/includes/search/SearchEnginePrefixTest.php
tests/phpunit/includes/specialpage/SpecialPageFactoryTest.php
tests/phpunit/includes/specials/QueryAllSpecialPagesTest.php
tests/phpunit/includes/specials/SpecialPreferencesTest.php
tests/phpunit/includes/specials/SpecialSearchTest.php
tests/phpunit/includes/upload/UploadStashTest.php
tests/phpunit/languages/classes/LanguageArTest.php
tests/phpunit/languages/classes/LanguageMlTest.php
tests/phpunit/maintenance/categoryChangesRdfTest.php
tests/phpunit/structure/ApiPrefixUniquenessTest.php [new file with mode: 0644]
tests/phpunit/structure/SpecialPageFatalTest.php
tests/phpunit/suite.xml
tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.user.test.js
tests/selenium/pageobjects/undo.page.js [new file with mode: 0644]
tests/selenium/specs/page.js

index 844895d..da5d409 100644 (file)
                "OO": false
        },
        "rules": {
+               "no-restricted-properties": [
+                       2,
+                       {
+                               "object": "$",
+                               "property": "map",
+                               "message": "Please use Array.prototype.map instead"
+                       },
+                       {
+                               "object": "$",
+                               "property": "isArray",
+                               "message": "Please use Array.isArray instead"
+                       },
+                       {
+                               "object": "$",
+                               "property": "isFunction",
+                               "message": "Please use typeof (e.g. typeof e === 'function') instead"
+                       },
+                       {
+                               "object": "$",
+                               "property": "grep",
+                               "message": "Please use Array.prototype.filter instead"
+                       },
+                       {
+                               "object": "$",
+                               "property": "trim",
+                               "message": "Please use String.prototype.trim instead"
+                       }
+               ],
                "dot-notation": 0,
                "max-len": 0
        }
index 0ed2631..cc75699 100644 (file)
@@ -37,6 +37,9 @@ production.
   sitewide CSS/JS (and editing other users' CSS/JS). No other group has
   'editsitecss', 'editusercss', 'editsitejs' or 'edituserjs' by default.
 * A new grant group, 'editsiteconfig', is added for granting the above rights.
+* The $wgPasswordSenderName setting, ignored since 1.23 by MediaWiki and almost
+  all extensions, is no longer set at all. Instead, you can modify the system
+  message `emailsender`.
 
 === New features in 1.32 ===
 * (T112474) Generalized the ResourceLoader mechanism for overriding modules
@@ -194,6 +197,7 @@ because of Phabricator reports.
 * The mediawiki.widgets.visibleByteLimit module alias, deprecated in 1.32, was
   removed. Use mediawiki.widgets.visibleLengthLimit instead.
 * The jquery.farbtastic module, unused since 1.18, was removed.
+* The 'jquery.expandableField' module, unused since 1.22, was removed.
 * (T181318) The $wgStyleVersion setting and its appendage to various script and
   style URLs in OutputPage, deprecated in 1.31, was removed.
 * The hooks 'PreferencesFormPreSave' and 'PreferencesGetLegend' may provide
@@ -249,6 +253,8 @@ because of Phabricator reports.
   resetServiceForTesting( 'MagicWordFactory' ) on a MediaWikiServices.
 * mw.util.init() has been removed. This function is not needed anymore and was
   a no-op function since 1.30.
+* SpecialPageFactory::resetList() is a no-op.  Call overrideMwServices()
+  instead.
 
 === Deprecations in 1.32 ===
 * Use of a StartProfiler.php file is deprecated in favour of placing
@@ -348,11 +354,23 @@ because of Phabricator reports.
   methods instead.
 * PasswordFactory::init is deprecated. To get a password factory with the
   standard configuration, use MediaWikiServices::getPasswordFactory.
+* $wgContLang is deprecated, use MediaWikiServices::getContentLanguage()
+  instead.
+* $wgParser is deprecated, use MediaWikiServices::getParser() instead.
+* wfGetMainCache() is deprecated, use ObjectCache::getLocalClusterInstance()
+  instead.
+* wfGetCache() is deprecated, use ObjectCache::getInstance() instead.
+* All SpecialPageFactory static methods are deprecated. Instead, call the
+  methods on a SpecialPageFactory instance, which may be obtained from
+  MediaWikiServices.
 
 === Other changes in 1.32 ===
 * (T198811) The following tables have had their UNIQUE indexes turned into
   proper PRIMARY KEYs for increased maintainability: interwiki, page_props,
   protected_titles and site_identifiers.
+* OOUI HTMLForm will now display help text inline after the input field,
+  rather than in a popup. Previous behavior can be restored by using
+  `'help-inline' => false`.
 * …
 
 == Compatibility ==
index 1c1eeef..a372dd1 100644 (file)
@@ -930,6 +930,7 @@ $wgAutoloadLocalClasses = [
        'MediaWiki\\Search\\ParserOutputSearchDataExtractor' => __DIR__ . '/includes/search/ParserOutputSearchDataExtractor.php',
        'MediaWiki\\ShellDisabledError' => __DIR__ . '/includes/exception/ShellDisabledError.php',
        'MediaWiki\\Site\\MediaWikiPageNameNormalizer' => __DIR__ . '/includes/site/MediaWikiPageNameNormalizer.php',
+       'MediaWiki\\Special\\SpecialPageFactory' => __DIR__ . '/includes/specialpage/SpecialPageFactory.php',
        'MediaWiki\\User\\UserIdentity' => __DIR__ . '/includes/user/UserIdentity.php',
        'MediaWiki\\User\\UserIdentityValue' => __DIR__ . '/includes/user/UserIdentityValue.php',
        'MediaWiki\\Widget\\ComplexNamespaceInputWidget' => __DIR__ . '/includes/widget/ComplexNamespaceInputWidget.php',
@@ -1131,6 +1132,7 @@ $wgAutoloadLocalClasses = [
        'PreferencesFormLegacy' => __DIR__ . '/includes/specials/forms/PreferencesFormLegacy.php',
        'PreferencesFormOOUI' => __DIR__ . '/includes/specials/forms/PreferencesFormOOUI.php',
        'PrefixSearch' => __DIR__ . '/includes/PrefixSearch.php',
+       'PrefixingStatsdDataFactoryProxy' => __DIR__ . '/includes/libs/stats/PrefixingStatsdDataFactoryProxy.php',
        'PreprocessDump' => __DIR__ . '/maintenance/preprocessDump.php',
        'Preprocessor' => __DIR__ . '/includes/parser/Preprocessor.php',
        'Preprocessor_DOM' => __DIR__ . '/includes/parser/Preprocessor_DOM.php',
@@ -1392,7 +1394,7 @@ $wgAutoloadLocalClasses = [
        'SpecialPage' => __DIR__ . '/includes/specialpage/SpecialPage.php',
        'SpecialPageAction' => __DIR__ . '/includes/actions/SpecialPageAction.php',
        'SpecialPageData' => __DIR__ . '/includes/specials/SpecialPageData.php',
-       'SpecialPageFactory' => __DIR__ . '/includes/specialpage/SpecialPageFactory.php',
+       'SpecialPageFactory' => __DIR__ . '/includes/specialpage/SpecialPageFactory_deprecated.php',
        'SpecialPageLanguage' => __DIR__ . '/includes/specials/SpecialPageLanguage.php',
        'SpecialPagesWithProp' => __DIR__ . '/includes/specials/SpecialPagesWithProp.php',
        'SpecialPasswordPolicies' => __DIR__ . '/includes/specials/SpecialPasswordPolicies.php',
@@ -1681,6 +1683,7 @@ $wgAutoloadLocalClasses = [
        'Wikimedia\\Rdbms\\SessionConsistentConnectionManager' => __DIR__ . '/includes/libs/rdbms/connectionmanager/SessionConsistentConnectionManager.php',
        'Wikimedia\\Rdbms\\Subquery' => __DIR__ . '/includes/libs/rdbms/encasing/Subquery.php',
        'Wikimedia\\Rdbms\\TransactionProfiler' => __DIR__ . '/includes/libs/rdbms/TransactionProfiler.php',
+       'Wikimedia\\StaticArrayWriter' => __DIR__ . '/includes/libs/StaticArrayWriter.php',
        'WikitextContent' => __DIR__ . '/includes/content/WikitextContent.php',
        'WikitextContentHandler' => __DIR__ . '/includes/content/WikitextContentHandler.php',
        'WikitextLogFormatter' => __DIR__ . '/includes/logging/WikitextLogFormatter.php',
index dff428c..b2501d4 100644 (file)
@@ -28,19 +28,9 @@ Primary scripts:
     that points to the search engines of the wiki.
 
   profileinfo.php
-    Allow users to see the profiling information that are stored in the
-    database.
-
-    To save the profiling information in the database (required to use this
-    script), you have to modify StartProfiler.php to use the Profiler class and
-    not the stub profiler which is enabled by default.
-    You will also need to set $wgProfiler['output'] to 'db' in LocalSettings.php
-    to force the profiler to save the informations in the database and apply the
-    maintenance/archives/patch-profiling.sql patch to the database.
-
-    To enable the profileinfo.php itself, you'll need to set $wgDBadminuser
-    and $wgDBadminpassword in your LocalSettings.php, as well as $wgEnableProfileInfo
-    See also https://www.mediawiki.org/wiki/Manual:Profiling .
+    Simple interface for displaying request profiles that were stored in the
+    database. For more information, see the documentation in that file, and at
+    https://www.mediawiki.org/wiki/Manual:Profiling.
 
   thumb.php
     Script used to resize images if it is configured to be done when the web
index e81909a..fdac10a 100644 (file)
@@ -1646,13 +1646,6 @@ $wgEmergencyContact = false;
  */
 $wgPasswordSender = false;
 
-/**
- * Sender name for e-mail notifications.
- *
- * @deprecated since 1.23; use the system message 'emailsender' instead.
- */
-$wgPasswordSenderName = 'MediaWiki Mail';
-
 /**
  * Reply-To address for e-mail notifications.
  *
@@ -3799,16 +3792,6 @@ $wgResourceLoaderMaxQueryLength = false;
  */
 $wgResourceLoaderValidateJS = true;
 
-/**
- * If set to true, statically-sourced (file-backed) JavaScript resources will
- * be parsed for validity before being bundled up into ResourceLoader modules.
- *
- * This can be helpful for development by providing better error messages in
- * default (non-debug) mode, but JavaScript parsing is slow and memory hungry
- * and may fail on large pre-bundled frameworks.
- */
-$wgResourceLoaderValidateStaticJS = false;
-
 /**
  * Whether ResourceLoader should attempt to persist modules in localStorage on
  * browsers that support the Web Storage API.
@@ -6411,6 +6394,13 @@ $wgDeprecationReleaseLimit = false;
  */
 $wgProfiler = [];
 
+/**
+ * Allow the profileinfo.php entrypoint to be used.
+ *
+ * @since 1.5.0
+ */
+$wgEnableProfileInfo = false;
+
 /**
  * Only record profiling info for pages that took longer than this
  * @deprecated since 1.25: set $wgProfiler['threshold'] instead.
index 567db85..d215e9f 100644 (file)
@@ -2674,28 +2674,6 @@ function wfGetPrecompiledData( $name ) {
        return false;
 }
 
-/**
- * @since 1.32
- * @param string[] $data Array with string keys/values to export
- * @param string $header
- * @return string PHP code
- */
-function wfMakeStaticArrayFile( array $data, $header = 'Automatically generated' ) {
-       $format = "\t%s => %s,\n";
-       $code = "<?php\n"
-               . "// " . implode( "\n// ", explode( "\n", $header ) ) . "\n"
-               . "return [\n";
-       foreach ( $data as $key => $value ) {
-               $code .= sprintf(
-                       $format,
-                       var_export( $key, true ),
-                       var_export( $value, true )
-               );
-       }
-       $code .= "];\n";
-       return $code;
-}
-
 /**
  * Make a cache key for the local wiki.
  *
@@ -3119,6 +3097,7 @@ function wfBCP47( $code ) {
 /**
  * Get a specific cache object.
  *
+ * @deprecated since 1.32, use ObjectCache::getInstance() instead
  * @param int|string $cacheType A CACHE_* constants, or other key in $wgObjectCaches
  * @return BagOStuff
  */
@@ -3129,11 +3108,11 @@ function wfGetCache( $cacheType ) {
 /**
  * Get the main cache object
  *
+ * @deprecated since 1.32, use ObjectCache::getLocalClusterInstance() instead
  * @return BagOStuff
  */
 function wfGetMainCache() {
-       global $wgMainCacheType;
-       return ObjectCache::getInstance( $wgMainCacheType );
+       return ObjectCache::getLocalClusterInstance();
 }
 
 /**
index 32375c1..dba4c67 100644 (file)
@@ -704,7 +704,7 @@ class Html {
         * @return string of HTML representing a box.
         */
        private static function messageBox( $html, $className, $heading = '' ) {
-               if ( $heading ) {
+               if ( $heading !== '' ) {
                        $html = self::element( 'h2', [], $heading ) . $html;
                }
                return self::rawElement( 'div', [ 'class' => $className ], $html );
index 56e377d..08a5724 100644 (file)
@@ -205,7 +205,8 @@ class Linker {
         */
        public static function normaliseSpecialPage( LinkTarget $target ) {
                if ( $target->getNamespace() == NS_SPECIAL && !$target->isExternal() ) {
-                       list( $name, $subpage ) = SpecialPageFactory::resolveAlias( $target->getDBkey() );
+                       list( $name, $subpage ) = MediaWikiServices::getInstance()->getSpecialPageFactory()->
+                               resolveAlias( $target->getDBkey() );
                        if ( !$name ) {
                                return $target;
                        }
index 2a84556..4636ba3 100644 (file)
@@ -250,14 +250,15 @@ class MediaWiki {
                // Redirect loops, titleless URL, $wgUsePathInfo URLs, and URLs with a variant
                } elseif ( !$this->tryNormaliseRedirect( $title ) ) {
                        // Prevent information leak via Special:MyPage et al (T109724)
+                       $spFactory = MediaWikiServices::getInstance()->getSpecialPageFactory();
                        if ( $title->isSpecialPage() ) {
-                               $specialPage = SpecialPageFactory::getPage( $title->getDBkey() );
+                               $specialPage = $spFactory->getPage( $title->getDBkey() );
                                if ( $specialPage instanceof RedirectSpecialPage ) {
                                        $specialPage->setContext( $this->context );
                                        if ( $this->config->get( 'HideIdentifiableRedirects' )
                                                && $specialPage->personallyIdentifiableTarget()
                                        ) {
-                                               list( , $subpage ) = SpecialPageFactory::resolveAlias( $title->getDBkey() );
+                                               list( , $subpage ) = $spFactory->resolveAlias( $title->getDBkey() );
                                                $target = $specialPage->getRedirect( $subpage );
                                                // target can also be true. We let that case fall through to normal processing.
                                                if ( $target instanceof Title ) {
@@ -284,7 +285,7 @@ class MediaWiki {
                        // Special pages ($title may have changed since if statement above)
                        if ( $title->isSpecialPage() ) {
                                // Actions that need to be made when we have a special pages
-                               SpecialPageFactory::executePath( $title, $this->context );
+                               $spFactory->executePath( $title, $this->context );
                        } else {
                                // ...otherwise treat it as an article view. The article
                                // may still be a wikipage redirect to another article or URL.
@@ -338,7 +339,8 @@ class MediaWiki {
                }
 
                if ( $title->isSpecialPage() ) {
-                       list( $name, $subpage ) = SpecialPageFactory::resolveAlias( $title->getDBkey() );
+                       list( $name, $subpage ) = MediaWikiServices::getInstance()->getSpecialPageFactory()->
+                               resolveAlias( $title->getDBkey() );
                        if ( $name ) {
                                $title = SpecialPage::getTitleFor( $name, $subpage );
                        }
@@ -1055,7 +1057,8 @@ class MediaWiki {
 
                $invokedWithSuccess = true;
                if ( $sock ) {
-                       $special = SpecialPageFactory::getPage( 'RunJobs' );
+                       $special = MediaWikiServices::getInstance()->getSpecialPageFactory()->
+                               getPage( 'RunJobs' );
                        $url = $special->getPageTitle()->getCanonicalURL( $query );
                        $req = (
                                "POST $url HTTP/1.1\r\n" .
index 326c12c..4a6046d 100644 (file)
@@ -12,9 +12,11 @@ use GenderCache;
 use GlobalVarConfig;
 use Hooks;
 use IBufferingStatsdDataFactory;
+use Liuggio\StatsdClient\Factory\StatsdDataFactoryInterface;
 use MediaWiki\Http\HttpRequestFactory;
 use MediaWiki\Preferences\PreferencesFactory;
 use MediaWiki\Shell\CommandFactory;
+use MediaWiki\Special\SpecialPageFactory;
 use MediaWiki\Storage\BlobStore;
 use MediaWiki\Storage\BlobStoreFactory;
 use MediaWiki\Storage\NameTableStore;
@@ -701,7 +703,7 @@ class MediaWikiServices extends ServiceContainer {
 
        /**
         * @since 1.32
-        * @return IBufferingStatsdDataFactory
+        * @return StatsdDataFactoryInterface
         */
        public function getPerDbNameStatsdDataFactory() {
                return $this->getService( 'PerDbNameStatsdDataFactory' );
@@ -828,6 +830,14 @@ class MediaWikiServices extends ServiceContainer {
                return $this->getService( 'SlotRoleStore' );
        }
 
+       /**
+        * @since 1.32
+        * @return SpecialPageFactory
+        */
+       public function getSpecialPageFactory() : SpecialPageFactory {
+               return $this->getService( 'SpecialPageFactory' );
+       }
+
        /**
         * @since 1.27
         * @return IBufferingStatsdDataFactory
index e2fe254..3bd7755 100644 (file)
@@ -473,13 +473,13 @@ class Message implements MessageSpecifier, Serializable {
                global $wgForceUIMsgAsContentMsg;
 
                $contLang = MediaWikiServices::getInstance()->getContentLanguage();
+               $lang = $this->getLanguage();
                $title = $this->key;
                if (
-                       !$this->language->equals( $contLang )
+                       !$lang->equals( $contLang )
                        && in_array( $this->key, (array)$wgForceUIMsgAsContentMsg )
                ) {
-                       $code = $this->language->getCode();
-                       $title .= '/' . $code;
+                       $title .= '/' . $lang->getCode();
                }
 
                return Title::makeTitle(
index f6d5dc9..c8e18e0 100644 (file)
@@ -3060,6 +3060,7 @@ class OutputPage extends ContextSource {
                $curRevisionId = 0;
                $articleId = 0;
                $canonicalSpecialPageName = false; # T23115
+               $services = MediaWikiServices::getInstance();
 
                $title = $this->getTitle();
                $ns = $title->getNamespace();
@@ -3075,7 +3076,8 @@ class OutputPage extends ContextSource {
 
                if ( $ns == NS_SPECIAL ) {
                        list( $canonicalSpecialPageName, /*...*/ ) =
-                               SpecialPageFactory::resolveAlias( $title->getDBkey() );
+                               $services->getSpecialPageFactory()->
+                                       resolveAlias( $title->getDBkey() );
                } elseif ( $this->canUseWikiPage() ) {
                        $wikiPage = $this->getWikiPage();
                        $curRevisionId = $wikiPage->getLatest();
@@ -3140,7 +3142,7 @@ class OutputPage extends ContextSource {
                        $vars['wgUserNewMsgRevisionId'] = $user->getNewMessageRevisionId();
                }
 
-               $contLang = MediaWikiServices::getInstance()->getContentLanguage();
+               $contLang = $services->getContentLanguage();
                if ( $contLang->hasVariants() ) {
                        $vars['wgUserVariant'] = $contLang->getPreferredVariant();
                }
index d66da93..6d379dc 100644 (file)
@@ -35,11 +35,12 @@ class Preferences {
         * @return DefaultPreferencesFactory
         */
        protected static function getDefaultPreferencesFactory() {
+               $services = MediaWikiServices::getInstance();
                $authManager = AuthManager::singleton();
-               $linkRenderer = MediaWikiServices::getInstance()->getLinkRenderer();
-               $config = MediaWikiServices::getInstance()->getMainConfig();
+               $linkRenderer = $services->getLinkRenderer();
+               $config = $services->getMainConfig();
                $preferencesFactory = new DefaultPreferencesFactory(
-                       $config, MediaWikiServices::getInstance()->getContentLanguage(), $authManager,
+                       $config, $services->getContentLanguage(), $authManager,
                        $linkRenderer
                );
                return $preferencesFactory;
index e32b439..7bc7a08 100644 (file)
@@ -173,13 +173,14 @@ abstract class PrefixSearch {
                $subpageSearch = $searchParts[1] ?? null;
 
                // Handle subpage search separately.
+               $spFactory = MediaWikiServices::getInstance()->getSpecialPageFactory();
                if ( $subpageSearch !== null ) {
                        // Try matching the full search string as a page name
                        $specialTitle = Title::makeTitleSafe( NS_SPECIAL, $searchKey );
                        if ( !$specialTitle ) {
                                return [];
                        }
-                       $special = SpecialPageFactory::getPage( $specialTitle->getText() );
+                       $special = $spFactory->getPage( $specialTitle->getText() );
                        if ( $special ) {
                                $subpages = $special->prefixSearchSubpages( $subpageSearch, $limit, $offset );
                                return array_map( function ( $sub ) use ( $specialTitle ) {
@@ -198,12 +199,12 @@ abstract class PrefixSearch {
                // Unlike SpecialPage itself, we want the canonical forms of both
                // canonical and alias title forms...
                $keys = [];
-               foreach ( SpecialPageFactory::getNames() as $page ) {
+               foreach ( $spFactory->getNames() as $page ) {
                        $keys[$contLang->caseFold( $page )] = [ 'page' => $page, 'rank' => 0 ];
                }
 
                foreach ( $contLang->getSpecialPageAliases() as $page => $aliases ) {
-                       if ( !in_array( $page, SpecialPageFactory::getNames() ) ) {# T22885
+                       if ( !in_array( $page, $spFactory->getNames() ) ) {# T22885
                                continue;
                        }
 
index 344c31d..1a19465 100644 (file)
@@ -37,6 +37,7 @@
  *      MediaWiki code base.
  */
 
+use Liuggio\StatsdClient\Factory\StatsdDataFactoryInterface;
 use MediaWiki\Auth\AuthManager;
 use MediaWiki\Config\ConfigRepository;
 use MediaWiki\Interwiki\ClassicInterwikiLookup;
@@ -48,6 +49,7 @@ use MediaWiki\MediaWikiServices;
 use MediaWiki\Preferences\PreferencesFactory;
 use MediaWiki\Preferences\DefaultPreferencesFactory;
 use MediaWiki\Shell\CommandFactory;
+use MediaWiki\Special\SpecialPageFactory;
 use MediaWiki\Storage\BlobStore;
 use MediaWiki\Storage\BlobStoreFactory;
 use MediaWiki\Storage\NameTableStore;
@@ -385,7 +387,8 @@ return [
                        $services->getMainConfig()->get( 'ParserConf' ),
                        $services->getMagicWordFactory(),
                        $services->getContentLanguage(),
-                       wfUrlProtocols()
+                       wfUrlProtocols(),
+                       $services->getSpecialPageFactory()
                );
        },
 
@@ -398,11 +401,12 @@ return [
        },
 
        'PerDbNameStatsdDataFactory' =>
-       function ( MediaWikiServices $services ) : IBufferingStatsdDataFactory {
+       function ( MediaWikiServices $services ) : StatsdDataFactoryInterface {
                $config = $services->getMainConfig();
                $wiki = $config->get( 'DBname' );
-               return new BufferingStatsdDataFactory(
-                       rtrim( $services->getMainConfig()->get( 'StatsdMetricPrefix' ), '.' ) . '.' . $wiki
+               return new PrefixingStatsdDataFactoryProxy(
+                       $services->getStatsdDataFactory(),
+                       $wiki
                );
        },
 
@@ -545,6 +549,13 @@ return [
                );
        },
 
+       'SpecialPageFactory' => function ( MediaWikiServices $services ) : SpecialPageFactory {
+               return new SpecialPageFactory(
+                       $services->getMainConfig(),
+                       $services->getContentLanguage()
+               );
+       },
+
        'StatsdDataFactory' => function ( MediaWikiServices $services ) : IBufferingStatsdDataFactory {
                return new BufferingStatsdDataFactory(
                        rtrim( $services->getMainConfig()->get( 'StatsdMetricPrefix' ), '.' )
index 9923ae2..c015eac 100644 (file)
@@ -774,7 +774,7 @@ if ( $wgCommandLineMode ) {
        wfDebug( $debug );
 }
 
-$wgMemc = wfGetMainCache();
+$wgMemc = ObjectCache::getLocalClusterInstance();
 $messageMemc = wfGetMessageCacheStorage();
 
 wfDebugLog( 'caches',
@@ -898,6 +898,7 @@ $wgOut = RequestContext::getMain()->getOutput(); // BackCompat
 
 /**
  * @var Parser $wgParser
+ * @deprecated since 1.32, use MediaWikiServices::getParser() instead
  */
 $wgParser = new StubObject( 'wgParser', function () {
        return MediaWikiServices::getInstance()->getParser();
index 1218639..e74824c 100644 (file)
@@ -1119,7 +1119,9 @@ class Title implements LinkTarget {
         */
        public function isSpecial( $name ) {
                if ( $this->isSpecialPage() ) {
-                       list( $thisName, /* $subpage */ ) = SpecialPageFactory::resolveAlias( $this->mDbkeyform );
+                       list( $thisName, /* $subpage */ ) =
+                               MediaWikiServices::getInstance()->getSpecialPageFactory()->
+                                       resolveAlias( $this->mDbkeyform );
                        if ( $name == $thisName ) {
                                return true;
                        }
@@ -1135,9 +1137,10 @@ class Title implements LinkTarget {
         */
        public function fixSpecialName() {
                if ( $this->isSpecialPage() ) {
-                       list( $canonicalName, $par ) = SpecialPageFactory::resolveAlias( $this->mDbkeyform );
+                       $spFactory = MediaWikiServices::getInstance()->getSpecialPageFactory();
+                       list( $canonicalName, $par ) = $spFactory->resolveAlias( $this->mDbkeyform );
                        if ( $canonicalName ) {
-                               $localName = SpecialPageFactory::getLocalNameFor( $canonicalName, $par );
+                               $localName = $spFactory->getLocalNameFor( $canonicalName, $par );
                                if ( $localName != $this->mDbkeyform ) {
                                        return self::makeTitle( NS_SPECIAL, $localName );
                                }
@@ -2705,7 +2708,9 @@ class Title implements LinkTarget {
                        } elseif ( $this->isSpecialPage() ) {
                                # If it's a special page, ditch the subpage bit and check again
                                $name = $this->mDbkeyform;
-                               list( $name, /* $subpage */ ) = SpecialPageFactory::resolveAlias( $name );
+                               list( $name, /* $subpage */ ) =
+                                       MediaWikiServices::getInstance()->getSpecialPageFactory()->
+                                               resolveAlias( $name );
                                if ( $name ) {
                                        $pure = SpecialPage::getTitleFor( $name )->getPrefixedText();
                                        if ( in_array( $pure, $wgWhitelistRead, true ) ) {
@@ -4678,7 +4683,8 @@ class Title implements LinkTarget {
                                return (bool)wfFindFile( $this );
                        case NS_SPECIAL:
                                // valid special page
-                               return SpecialPageFactory::exists( $this->mDbkeyform );
+                               return MediaWikiServices::getInstance()->getSpecialPageFactory()->
+                                       exists( $this->mDbkeyform );
                        case NS_MAIN:
                                // selflink, possibly with fragment
                                return $this->mDbkeyform == '';
index dc661aa..11b8bad 100644 (file)
@@ -233,13 +233,14 @@ class InfoAction extends FormlessAction {
                ];
 
                // Is it a redirect? If so, where to?
-               if ( $title->isRedirect() ) {
+               $redirectTarget = $this->page->getRedirectTarget();
+               if ( $redirectTarget !== null ) {
                        $pageInfo['header-basic'][] = [
                                $this->msg( 'pageinfo-redirectsto' ),
-                               $linkRenderer->makeLink( $this->page->getRedirectTarget() ) .
+                               $linkRenderer->makeLink( $redirectTarget ) .
                                $this->msg( 'word-separator' )->escaped() .
                                $this->msg( 'parentheses' )->rawParams( $linkRenderer->makeLink(
-                                       $this->page->getRedirectTarget(),
+                                       $redirectTarget,
                                        $this->msg( 'pageinfo-redirectsto-info' )->text(),
                                        [],
                                        [ 'action' => 'info' ]
index e59b6d6..8a231cb 100644 (file)
@@ -18,6 +18,8 @@
  * @ingroup Actions
  */
 
+use MediaWiki\MediaWikiServices;
+
 /**
  * An action that just passes the request to the relevant special page
  *
@@ -92,6 +94,7 @@ class SpecialPageAction extends FormlessAction {
                }
 
                // map actions to (whitelisted) special pages
-               return SpecialPageFactory::getPage( self::$actionToSpecialPageMapping[$action] );
+               return MediaWikiServices::getInstance()->getSpecialPageFactory()->
+                       getPage( self::$actionToSpecialPageMapping[$action] );
        }
 }
index 3786e8d..26846f4 100644 (file)
@@ -1170,6 +1170,8 @@ class ApiPageSet extends ApiBase {
        private function processTitlesArray( $titles ) {
                $usernames = [];
                $linkBatch = new LinkBatch();
+               $services = MediaWikiServices::getInstance();
+               $contLang = $services->getContentLanguage();
 
                foreach ( $titles as $title ) {
                        if ( is_string( $title ) ) {
@@ -1197,7 +1199,6 @@ class ApiPageSet extends ApiBase {
                                $this->mInterwikiTitles[$unconvertedTitle] = $titleObj->getInterwiki();
                        } else {
                                // Variants checking
-                               $contLang = MediaWikiServices::getInstance()->getContentLanguage();
                                if (
                                        $this->mConvertTitles && $contLang->hasVariants() && !$titleObj->exists()
                                ) {
@@ -1217,7 +1218,8 @@ class ApiPageSet extends ApiBase {
                                                $this->mAllSpecials[$ns][$dbkey] = $this->mFakePageId;
                                                $target = null;
                                                if ( $ns === NS_SPECIAL && $this->mResolveRedirects ) {
-                                                       $special = SpecialPageFactory::getPage( $dbkey );
+                                                       $spFactory = $services->getSpecialPageFactory();
+                                                       $special = $spFactory->getPage( $dbkey );
                                                        if ( $special instanceof RedirectSpecialArticle ) {
                                                                // Only RedirectSpecialArticle is intended to redirect to an article, other kinds of
                                                                // RedirectSpecialPage are probably applying weird URL parameters we don't want to handle.
@@ -1225,7 +1227,7 @@ class ApiPageSet extends ApiBase {
                                                                $context->setTitle( $titleObj );
                                                                $context->setRequest( new FauxRequest );
                                                                $special->setContext( $context );
-                                                               list( /* $alias */, $subpage ) = SpecialPageFactory::resolveAlias( $dbkey );
+                                                               list( /* $alias */, $subpage ) = $spFactory->resolveAlias( $dbkey );
                                                                $target = $special->getRedirect( $subpage );
                                                        }
                                                }
@@ -1263,7 +1265,7 @@ class ApiPageSet extends ApiBase {
                        }
                }
                // Get gender information
-               $genderCache = MediaWikiServices::getInstance()->getGenderCache();
+               $genderCache = $services->getGenderCache();
                $genderCache->doQuery( $usernames, __METHOD__ );
 
                return $linkBatch;
index d4f0396..b90dd5d 100644 (file)
@@ -399,13 +399,14 @@ class ApiQuerySearch extends ApiQueryGeneratorBase {
 
                // If we have more than one engine the list of available sorts is
                // difficult to represent. For now don't expose it.
-               $alternatives = MediaWiki\MediaWikiServices::getInstance()
+               $services = MediaWiki\MediaWikiServices::getInstance();
+               $alternatives = $services
                        ->getSearchEngineConfig()
                        ->getSearchTypes();
                if ( count( $alternatives ) == 1 ) {
                        $this->allowedParams['sort'] = [
                                ApiBase::PARAM_DFLT => 'relevance',
-                               ApiBase::PARAM_TYPE => MediaWiki\MediaWikiServices::getInstance()
+                               ApiBase::PARAM_TYPE => $services
                                        ->newSearchEngine()
                                        ->getValidSorts(),
                        ];
index eaa3bc1..697eab6 100644 (file)
@@ -341,8 +341,9 @@ class ApiQuerySiteinfo extends ApiQueryBase {
 
        protected function appendSpecialPageAliases( $property ) {
                $data = [];
-               $aliases = MediaWikiServices::getInstance()->getContentLanguage()->getSpecialPageAliases();
-               foreach ( SpecialPageFactory::getNames() as $specialpage ) {
+               $services = MediaWikiServices::getInstance();
+               $aliases = $services->getContentLanguage()->getSpecialPageAliases();
+               foreach ( $services->getSpecialPageFactory()->getNames() as $specialpage ) {
                        if ( isset( $aliases[$specialpage] ) ) {
                                $arr = [ 'realname' => $specialpage, 'aliases' => $aliases[$specialpage] ];
                                ApiResult::setIndexedTagName( $arr['aliases'], 'alias' );
index 084dfac..e37bbbc 100644 (file)
        "apierror-readonly": "위키는 현재 읽기 전용 모드입니다.",
        "apierror-revisions-badid": "<var>$1</var> 변수에 대한 판을 발견하지 못했습니다.",
        "apierror-revwrongpage": "r$1은(는) $2의 판이 아닙니다.",
+       "apierror-siteinfo-includealldenied": "<var>$wgShowHostnames</var>가 참이 아닐 경우 모든 서버의 정보를 볼 수 없습니다.",
        "apierror-specialpage-cantexecute": "특수 문서의 결과를 볼 권한이 없습니다.",
        "apierror-stashwrongowner": "잘못된 소유자: $1",
        "apierror-systemblocked": "당신은 미디어위키에 의해서 자동으로 차단되었습니다.",
index aa040e3..0733a2a 100644 (file)
        "apihelp-query+search-paramvalue-prop-sectionsnippet": "Adiciona um fragmento de código com o título da secção correspondente, após análise sintática.",
        "apihelp-query+search-paramvalue-prop-sectiontitle": "Adiciona o título da secção correspondente.",
        "apihelp-query+search-paramvalue-prop-categorysnippet": "Adiciona um fragmento de código com a categoria correspondente, após análise sintática.",
-       "apihelp-query+search-paramvalue-prop-isfilematch": "Adiciona um valor booleano que indica se a pesquisa encontrou correspondência no conteúdo de ficheiros.",
+       "apihelp-query+search-paramvalue-prop-isfilematch": "Adiciona um valor booliano que indica se a pesquisa encontrou correspondência no conteúdo de ficheiros.",
        "apihelp-query+search-paramvalue-prop-extensiondata": "Acrescenta dados adicionais gerados por extensões.",
        "apihelp-query+search-paramvalue-prop-score": "Ignorado.",
        "apihelp-query+search-paramvalue-prop-hasrelated": "Ignorado.",
        "apihelp-json-param-callback": "Se especificado, envolve o resultado de saída na forma de uma chamada para uma função. Por segurança, todos os dados específicos do utilizador estarão restringidos.",
        "apihelp-json-param-utf8": "Se especificado, codifica a maioria dos caracteres não ASCII (mas não todos) em UTF-8, em vez de substitui-los por sequências de escape hexadecimais. É o comportamento padrão quando <var>formatversion</var> não tem o valor <kbd>1</kbd>.",
        "apihelp-json-param-ascii": "Se especificado, codifica todos caracteres não ASCII usando sequências de escape hexadecimais. É o comportamento padrão quando <var>formatversion</var> tem o valor <kbd>1</kbd>.",
-       "apihelp-json-param-formatversion": "Formatação do resultado de saída:\n;1:Formato compatível com versões anteriores (booleanos ao estilo XML, <samp>*</samp> chaves para nodos de conteúdo, etc.).\n;2:Formato moderno experimental. As especificações podem mudar!\n;latest:Usar o formato mais recente (atualmente <kbd>2</kbd>), mas pode ser alterado sem aviso prévio.",
+       "apihelp-json-param-formatversion": "Formatação do resultado de saída:\n;1:Formato compatível com versões anteriores (boolianos ao estilo XML, <samp>*</samp> chaves para nodos de conteúdo, etc.).\n;2:Formato moderno experimental. As especificações podem mudar!\n;latest:Usar o formato mais recente (atualmente <kbd>2</kbd>), mas pode ser alterado sem aviso prévio.",
        "apihelp-jsonfm-summary": "Produzir os dados de saída em formato JSON (realce sintático em HTML).",
        "apihelp-none-summary": "Não produzir nada.",
        "apihelp-php-summary": "Produzir os dados de saída em formato PHP seriado.",
-       "apihelp-php-param-formatversion": "Formatação do resultado de saída:\n;1:Formato compatível com versões anteriores (booleanos ao estilo XML, <samp>*</samp> chaves para nodos de conteúdo, etc.).\n;2:Formato moderno experimental. As especificações podem mudar!\n;latest:Usar o formato mais recente (atualmente <kbd>2</kbd>), mas pode ser alterado sem aviso prévio.",
+       "apihelp-php-param-formatversion": "Formatação do resultado de saída:\n;1:Formato compatível com versões anteriores (boolianos ao estilo XML, <samp>*</samp> chaves para nodos de conteúdo, etc.).\n;2:Formato moderno experimental. As especificações podem mudar!\n;latest:Usar o formato mais recente (atualmente <kbd>2</kbd>), mas pode ser alterado sem aviso prévio.",
        "apihelp-phpfm-summary": "Produzir os dados de saída em formato PHP seriado (realce sintático em HTML).",
        "apihelp-rawfm-summary": "Produzir os dados de saída, incluindo elementos para despiste de erros, em formato JSON (realce sintático em HTML).",
        "apihelp-xml-summary": "Produzir os dados de saída em formato XML.",
        "api-help-param-templated-var-first": "<var>&#x7B;$1&#x7D;</var> no nome do parâmetro deve ser substituído com os valores de <var>$2</var>",
        "api-help-param-templated-var": "<var>&#x7B;$1&#x7D;</var> com valores de <var>$2</var>",
        "api-help-datatypes-header": "Tipo de dados",
-       "api-help-datatypes": "O formato de entrada para o MediaWiki deve ser UTF-8, normalizado de acordo com a norma NFC. O MediaWiki pode converter outros tipos de entrada, mas esta conversão pode originar a falha de algumas operações (tais como as [[Special:ApiHelp/edit|edições]] com verificações MD5).\n\nAlguns tipos de parâmetros nos pedidos à API necessitam de mais explicações:\n;boolean\n:Os parâmetros booleanos funcionam como as caixas de seleção HTML: se o parâmetro for especificado, independentemente do seu valor, é considerado verdadeiro. Para um valor falso, omitir o parâmetro completo.\n;timestamp\n:As datas e horas podem ser especificadas em vários formatos. É recomendado o formato ISO 8601. Todas as horas estão em UTC, qualquer inclusão do fuso horário é ignorada.\n:* Data e hora ISO 8601, <kbd><var>2001</var>-<var>01</var>-<var>15</var>T<var>14</var>:<var>56</var>:<var>00</var>Z</kbd> (pontuação e <kbd>Z</kbd> são opcionais)\n:* Data e hora ISO 8601 com segundos fracionários (estes são ignorados), <kbd><var>2001</var>-<var>01</var>-<var>15</var>T<var>14</var>:<var>56</var>:<var>00</var>.<var>00001</var>Z</kbd> (traços, dois pontos e <kbd>Z</kbd> são opcionais)\n:* Formato do MediaWiki, <kbd><var>2001</var><var>01</var><var>15</var><var>14</var><var>56</var><var>00</var></kbd>\n:* Formato numérico genérico, <kbd><var>2001</var>-<var>01</var>-<var>15</var> <var>14</var>:<var>56</var>:<var>00</var></kbd> (fuso horário opcional <kbd>GMT</kbd>, <kbd>+<var>##</var></kbd>, ou <kbd>-<var>##</var></kbd> são ignorados)\n:* Formato EXIF, <kbd><var>2001</var>:<var>01</var>:<var>15</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:*Formato RFC 2822 (o fuso horário pode ser omitido), <kbd><var>Mon</var>, <var>15</var> <var>Jan</var> <var>2001</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* Formato RFC 850 (o fuso horário pode ser omitido), <kbd><var>Monday</var>, <var>15</var>-<var>Jan</var>-<var>2001</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* Formato C ctime, <kbd><var>Mon</var> <var>Jan</var> <var>15</var> <var>14</var>:<var>56</var>:<var>00</var> <var>2001</var></kbd>\n:* Segundos desde 1970-01-01T00:00:00Z como um inteiro de 1 a 13 algarismos (excluindo <kbd>0</kbd>)\n:* O texto <kbd>now</kbd>\n;separador alternativo de valores múltiplos\n:Os parâmetros que aceitam vários valores são normalmente fornecidos com os valores separados por uma barra vertical (''pipe''), por exemplo <kbd>parâmetro=valor1|valor2</kbd> ou <kbd>parâmetro=valor1%7Cvalor2</kbd>. Se um valor contém a barra vertical, use como separador o U+001F (Separador de Unidades) ''e'' prefixe o valor com U+001F, isto é, <kbd>parâmetro=%1Fvalor1%1Fvalor2</kbd>.",
+       "api-help-datatypes": "O formato de entrada para o MediaWiki deve ser UTF-8, normalizado de acordo com a norma NFC. O MediaWiki pode converter outros tipos de entrada, mas esta conversão pode originar a falha de algumas operações (tais como as [[Special:ApiHelp/edit|edições]] com verificações MD5).\n\nAlguns tipos de parâmetros nos pedidos à API necessitam de mais explicações:\n;boolean\n:Os parâmetros boolianos funcionam como as caixas de seleção HTML: se o parâmetro for especificado, independentemente do seu valor, é considerado verdadeiro. Para um valor falso, omitir o parâmetro completo.\n;timestamp\n:As datas e horas podem ser especificadas em vários formatos. É recomendado o formato ISO 8601. Todas as horas estão em UTC, qualquer inclusão do fuso horário é ignorada.\n:* Data e hora ISO 8601, <kbd><var>2001</var>-<var>01</var>-<var>15</var>T<var>14</var>:<var>56</var>:<var>00</var>Z</kbd> (pontuação e <kbd>Z</kbd> são opcionais)\n:* Data e hora ISO 8601 com segundos fracionários (estes são ignorados), <kbd><var>2001</var>-<var>01</var>-<var>15</var>T<var>14</var>:<var>56</var>:<var>00</var>.<var>00001</var>Z</kbd> (traços, dois pontos e <kbd>Z</kbd> são opcionais)\n:* Formato do MediaWiki, <kbd><var>2001</var><var>01</var><var>15</var><var>14</var><var>56</var><var>00</var></kbd>\n:* Formato numérico genérico, <kbd><var>2001</var>-<var>01</var>-<var>15</var> <var>14</var>:<var>56</var>:<var>00</var></kbd> (fuso horário opcional <kbd>GMT</kbd>, <kbd>+<var>##</var></kbd>, ou <kbd>-<var>##</var></kbd> são ignorados)\n:* Formato EXIF, <kbd><var>2001</var>:<var>01</var>:<var>15</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:*Formato RFC 2822 (o fuso horário pode ser omitido), <kbd><var>Mon</var>, <var>15</var> <var>Jan</var> <var>2001</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* Formato RFC 850 (o fuso horário pode ser omitido), <kbd><var>Monday</var>, <var>15</var>-<var>Jan</var>-<var>2001</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* Formato C ctime, <kbd><var>Mon</var> <var>Jan</var> <var>15</var> <var>14</var>:<var>56</var>:<var>00</var> <var>2001</var></kbd>\n:* Segundos desde 1970-01-01T00:00:00Z como um inteiro de 1 a 13 algarismos (excluindo <kbd>0</kbd>)\n:* O texto <kbd>now</kbd>\n;separador alternativo de valores múltiplos\n:Os parâmetros que aceitam vários valores são normalmente fornecidos com os valores separados por uma barra vertical (''pipe''), por exemplo <kbd>parâmetro=valor1|valor2</kbd> ou <kbd>parâmetro=valor1%7Cvalor2</kbd>. Se um valor contém a barra vertical, use como separador o U+001F (Separador de Unidades) ''e'' prefixe o valor com U+001F, isto é, <kbd>parâmetro=%1Fvalor1%1Fvalor2</kbd>.",
        "api-help-templatedparams-header": "Parâmetros modelados",
        "api-help-templatedparams": "Os parâmetros modelados usam-se nos casos em que um módulo da API necessita de um valor para cada valor de um outro parâmetro. Por exemplo, se existisse um módulo da API para encomendar fruta, poderia ter um parâmetro <var>frutas</var> para especificar as frutas que estão a ser encomendadas e um parâmetro modelado <var>quantidade-de-{fruta}</var> para especificar quanto de cada fruta. Um cliente da API que pretenda 1 maçã, 5 bananas e 20 morangos pode então fazer um pedido como <kbd>frutas=maçãs|bananas|morangos&quantidade-de-maçãs=1&quantidade-de-bananas=5&quantidade-de-morangos=20</kbd>.",
        "api-help-param-type-limit": "Tipo: inteiro ou <kbd>max</kbd>",
        "api-help-param-type-integer": "Tipo: {{PLURAL:$1|1=inteiro|2=lista de números inteiros}}",
-       "api-help-param-type-boolean": "Tipo: booleano ([[Special:ApiHelp/main#main/datatypes|detalhes]])",
+       "api-help-param-type-boolean": "Tipo: booliano ([[Special:ApiHelp/main#main/datatypes|detalhes]])",
        "api-help-param-type-timestamp": "Tipo: {{PLURAL:$1|1=data e hora|2=lista de datas e horas}} ([[Special:ApiHelp/main#main/datatypes|formatos permitidos]])",
        "api-help-param-type-user": "Tipo: {{PLURAL:$1|1=nome de utilizador|2=lista de nomes de utilizadores}}",
        "api-help-param-list": "{{PLURAL:$1|1=Um dos seguintes valores|2=Valores (separados com <kbd>{{!}}</kbd> ou [[Special:ApiHelp/main#main/datatypes|alternativas]])}}: $2",
index efabab7..1cced41 100644 (file)
        "apihelp-compare-param-totitle": "要比對的第二個標題。",
        "apihelp-compare-param-toid": "要比對的第二個頁面 ID。",
        "apihelp-compare-param-torev": "要比對的第二個修訂。",
+       "apihelp-compare-param-tocontentformat": "<var>totext</var> 的內容序列化格式。",
        "apihelp-compare-param-prop": "要取得的資訊部份。",
+       "apihelp-compare-paramvalue-prop-diff": "HTML 差異。",
+       "apihelp-compare-paramvalue-prop-diffsize": "以位元組為單位的 HTML 差異大小。",
        "apihelp-compare-example-1": "建立修訂 1 與 1 的差異檔",
        "apihelp-createaccount-summary": "建立新使用者帳號。",
        "apihelp-createaccount-param-name": "使用者名稱。",
        "apihelp-edit-param-nocreate": "若頁面不存在,則產生錯誤。",
        "apihelp-edit-param-watch": "加入目前頁面至您的監視清單。",
        "apihelp-edit-param-unwatch": "從您的監視清單中移除目前頁面。",
+       "apihelp-edit-param-redirect": "自動化解決重新導向。",
        "apihelp-edit-param-contentformat": "用於輸入文字的內容序列化格式。",
        "apihelp-edit-param-contentmodel": "新內容的內容模組。",
        "apihelp-edit-example-edit": "編輯頁面",
        "apihelp-feedrecentchanges-param-hideanons": "隱藏匿名使用者做的變更。",
        "apihelp-feedrecentchanges-param-hideliu": "隱藏已註冊使用者做的變更。",
        "apihelp-feedrecentchanges-param-hidepatrolled": "隱藏已巡查的變更。",
+       "apihelp-feedrecentchanges-param-hidemyself": "隱藏由目前使用者做出的更改。",
+       "apihelp-feedrecentchanges-param-hidecategorization": "隱藏分類成員更改。",
+       "apihelp-feedrecentchanges-param-tagfilter": "按標籤篩選。",
        "apihelp-feedrecentchanges-example-simple": "顯示近期變更。",
        "apihelp-feedrecentchanges-example-30days": "顯示近期30天內的變動",
        "apihelp-feedwatchlist-summary": "返回監視清單 feed。",
        "apihelp-feedwatchlist-param-feedformat": "Feed 的格式。",
        "apihelp-filerevert-param-comment": "上載意見。",
+       "apihelp-help-summary": "顯示指定模組的說明。",
        "apihelp-help-example-main": "主模組使用說明",
        "apihelp-help-example-recursive": "一個頁面中的所有說明。",
        "apihelp-help-example-help": "說明模組自身的說明。",
        "apihelp-options-example-reset": "重設所有偏好設定",
        "apihelp-options-example-change": "更改<kbd>skin</kbd>和<kbd>hideminor</kbd>偏好設定。",
        "apihelp-paraminfo-summary": "獲得有關 API 模組的資訊。",
+       "apihelp-paraminfo-param-helpformat": "說明字串的格式。",
        "apihelp-parse-param-summary": "解析摘要。",
        "apihelp-parse-param-pageid": "解析此頁面的內容。覆蓋 <var>$1page</var>。",
        "apihelp-parse-param-prop": "要取得的資訊部份:",
+       "apihelp-parse-paramvalue-prop-headhtml": "取得頁面已解析的 <code>&lt;head&gt;</code>。",
        "apihelp-parse-param-disablepp": "請改用<var>$1disablelimitreport</var>。",
        "apihelp-parse-param-preview": "在預覽模式下解析。",
        "apihelp-parse-example-page": "解析頁面。",
        "apihelp-query+allcategories-param-to": "終止列舉的分類。",
        "apihelp-query+allcategories-param-prefix": "搜尋以此值為開頭的所有分類標題。",
        "apihelp-query+allcategories-param-dir": "排序的方向。",
+       "apihelp-query+allcategories-param-min": "僅回傳至少有這樣多成員的分類。",
+       "apihelp-query+allcategories-param-max": "僅回傳最多有這樣多成員的分類。",
        "apihelp-query+allcategories-param-limit": "要回傳的分類數量。",
        "apihelp-query+allcategories-param-prop": "要取得的屬性。",
        "apihelp-query+allcategories-paramvalue-prop-size": "在分類裡添加頁面數。",
        "apihelp-query+alldeletedrevisions-summary": "依使用者或所在命名空間來列出所有已刪除的修訂。",
+       "apihelp-query+alldeletedrevisions-paraminfo-useronly": "僅與 <var>$3user</var> 一同使用。",
+       "apihelp-query+alldeletedrevisions-paraminfo-nonuseronly": "不能與 <var>$3user</var> 一同使用。",
        "apihelp-query+alldeletedrevisions-param-start": "起始列舉的時間戳記。",
+       "apihelp-query+alldeletedrevisions-param-end": "終止列舉的時間戳記。",
        "apihelp-query+alldeletedrevisions-param-from": "在此標題開始列出。",
        "apihelp-query+alldeletedrevisions-param-to": "在此標題停止列出。",
+       "apihelp-query+alldeletedrevisions-param-prefix": "搜尋以此值為開頭的所有頁面標題。",
        "apihelp-query+alldeletedrevisions-param-user": "此列出由該使用者作出的修訂。",
        "apihelp-query+alldeletedrevisions-param-excludeuser": "不要列出由該使用者作出的修訂。",
        "apihelp-query+alldeletedrevisions-param-namespace": "僅列出此命名空間的頁面。",
        "apihelp-query+allfileusages-param-limit": "要回傳的項目總數。",
        "apihelp-query+allfileusages-param-dir": "列出時所採用的方向。",
        "apihelp-query+allfileusages-example-unique": "列出唯一的檔案標題。",
+       "apihelp-query+allfileusages-example-unique-generator": "取得所有檔案標題,標記為遺失。",
        "apihelp-query+allfileusages-example-generator": "取得包含檔案的頁面。",
+       "apihelp-query+allimages-param-sort": "作為排序順序的屬性。",
        "apihelp-query+allimages-param-dir": "列出時所採用的方向。",
        "apihelp-query+allimages-param-minsize": "限制圖片至少要有這樣多的位元組。",
        "apihelp-query+allimages-param-maxsize": "限制圖片最多只能這樣多的位元組。",
        "apihelp-query+allmessages-param-lang": "以此語言來回傳訊息。",
        "apihelp-query+allmessages-param-from": "以此訊息來回傳訊息開頭。",
        "apihelp-query+allmessages-param-to": "以此訊息來回傳訊息結尾。",
+       "apihelp-query+allpages-param-from": "起始列舉的頁面標題。",
+       "apihelp-query+allpages-param-to": "終止列舉的頁面標題。",
+       "apihelp-query+allpages-param-prefix": "搜尋以此值為開頭的所有頁面標題。",
+       "apihelp-query+allpages-param-namespace": "要列舉的命名空間。",
        "apihelp-query+allpages-param-filterredir": "要列出的頁面。",
+       "apihelp-query+allpages-param-minsize": "限制頁面至少要有這樣多的位元組。",
+       "apihelp-query+allpages-param-maxsize": "限制頁面最多只能這樣多的位元組。",
+       "apihelp-query+allpages-param-prtype": "僅限受保護的頁面。",
        "apihelp-query+allpages-param-limit": "要回傳的頁面總數。",
+       "apihelp-query+allpages-param-dir": "列出時所採用的方向。",
        "apihelp-query+allredirects-summary": "列出至命名空間的所有重新導向。",
+       "apihelp-query+allredirects-param-from": "要起始列舉的重新導向標題。",
+       "apihelp-query+allredirects-param-to": "要終止列舉的重新導向標題。",
+       "apihelp-query+allredirects-param-prefix": "搜尋以此值為開頭的所有目標頁面。",
+       "apihelp-query+allredirects-param-prop": "要包含的資訊部份:",
+       "apihelp-query+allredirects-paramvalue-prop-title": "添加重新導向的標題。",
        "apihelp-query+allredirects-param-namespace": "要列舉的命名空間。",
        "apihelp-query+allredirects-param-limit": "要回傳的項目總數。",
+       "apihelp-query+allredirects-param-dir": "列出時所採用的方向。",
        "apihelp-query+allredirects-example-generator": "取得包含重新導向的頁面。",
        "apihelp-query+allrevisions-summary": "列出所有修訂版本。",
        "apihelp-query+allrevisions-param-start": "起始列舉的時間戳記。",
        "apihelp-query+allrevisions-param-user": "此列出由該使用者作出的修訂。",
        "apihelp-query+allrevisions-param-excludeuser": "不要列出由該使用者作出的修訂。",
        "apihelp-query+allrevisions-param-namespace": "僅列出此命名空間的頁面。",
+       "apihelp-query+mystashedfiles-param-prop": "要索取的檔案屬性。",
+       "apihelp-query+mystashedfiles-paramvalue-prop-size": "索取檔案大小與圖片尺寸。",
+       "apihelp-query+mystashedfiles-paramvalue-prop-type": "索取檔案的 MIME 類型以及媒體類型。",
        "apihelp-query+mystashedfiles-param-limit": "要取得的檔案數量。",
+       "apihelp-query+alltransclusions-param-namespace": "要列舉的命名空間。",
        "apihelp-query+alltransclusions-param-limit": "要回傳的項目總數。",
+       "apihelp-query+alltransclusions-param-dir": "列出時所採用的方向。",
+       "apihelp-query+allusers-summary": "列舉所有已註冊使用者。",
        "apihelp-query+allusers-param-from": "起始列舉的使用者名稱。",
+       "apihelp-query+allusers-param-to": "終止列舉的使用者名稱。",
+       "apihelp-query+allusers-param-prefix": "搜尋以此值為開頭的所有使用者。",
        "apihelp-query+allusers-param-dir": "排序的方向。",
+       "apihelp-query+allusers-param-group": "僅包含在指定群組的使用者。",
+       "apihelp-query+allusers-param-excludegroup": "排除指定群組中的使用者",
+       "apihelp-query+allusers-param-prop": "要包含的資訊部份:",
+       "apihelp-query+allusers-paramvalue-prop-rights": "列出使用者所擁有的權限。",
+       "apihelp-query+allusers-paramvalue-prop-editcount": "添加使用者的編輯次數。",
        "apihelp-query+allusers-example-Y": "列出以<kbd>Y</kbd>開頭的使用者。",
        "apihelp-query+authmanagerinfo-summary": "取得目前身分核對狀態的資訊。",
+       "apihelp-query+backlinks-summary": "找出連結至指定頁面的所有頁面。",
        "apihelp-query+backlinks-param-namespace": "要列舉的命名空間。",
+       "apihelp-query+backlinks-param-dir": "列出時所採用的方向。",
+       "apihelp-query+blocks-summary": "列出所有被封鎖使用者與 IP 位址。",
        "apihelp-query+blocks-param-start": "起始列舉的時間戳記。",
+       "apihelp-query+blocks-param-end": "終止列舉的時間戳記。",
        "apihelp-query+blocks-param-prop": "要取得的屬性。",
+       "apihelp-query+blocks-paramvalue-prop-id": "添加封鎖 ID。",
+       "apihelp-query+blocks-paramvalue-prop-user": "添加已封鎖使用者的使用者名稱。",
+       "apihelp-query+blocks-paramvalue-prop-userid": "添加已封鎖使用者的使用者 ID。",
+       "apihelp-query+blocks-paramvalue-prop-by": "添加進行封鎖中的使用者之使用者名稱。",
+       "apihelp-query+blocks-paramvalue-prop-byid": "添加進行封鎖中的使用者之使用者 ID。",
+       "apihelp-query+blocks-example-simple": "列出封鎖。",
+       "apihelp-query+blocks-example-users": "列出使用者 <kbd>Alice</kbd> 與 <kbd>Bob</kbd> 的封鎖。",
        "apihelp-query+categories-param-limit": "要回傳的分類數量。",
        "apihelp-query+categoryinfo-summary": "回傳有關指定分類的資訊。",
        "apihelp-query+categorymembers-summary": "在指定的分類中列出所有頁面。",
+       "apihelp-query+categorymembers-paramvalue-prop-ids": "添加頁面 ID。",
        "apihelp-query+categorymembers-param-limit": "回傳的頁面數量上限。",
        "apihelp-query+categorymembers-param-startsortkey": "請改用 $1starthexsortkey。",
        "apihelp-query+categorymembers-param-endsortkey": "請改用 $1endhexsortkey。",
+       "apihelp-query+categorymembers-example-simple": "取得在 <kbd>Category:Physics</kbd> 裡前 10 項的頁面。",
        "apihelp-query+contributors-param-limit": "要回傳的貢獻人員數量。",
        "apihelp-query+deletedrevisions-summary": "取得已刪除修訂的資訊。",
        "apihelp-query+deletedrevisions-param-user": "此列出由該使用者作出的修訂。",
        "apihelp-query+duplicatefiles-param-limit": "要回傳的重複檔案數量。",
        "apihelp-query+duplicatefiles-param-dir": "列出時所採用的方向。",
        "apihelp-query+duplicatefiles-example-generated": "查看全部有重複到的檔案。",
+       "apihelp-query+embeddedin-param-namespace": "要列舉的命名空間。",
        "apihelp-query+embeddedin-param-dir": "列出時所採用的方向。",
        "apihelp-query+embeddedin-param-filterredir": "如何過濾重新導向。",
        "apihelp-query+embeddedin-param-limit": "要回傳的頁面總數。",
        "apihelp-query+extlinks-summary": "回傳所有指定頁面的外部 URL (非 interwiki)。",
        "apihelp-query+extlinks-param-limit": "要回傳的連結數量。",
        "apihelp-query+exturlusage-paramvalue-prop-ids": "添加頁面 ID。",
+       "apihelp-query+exturlusage-paramvalue-prop-url": "添加用於頁面的 URL。",
        "apihelp-query+exturlusage-param-namespace": "要列舉的頁面命名空間。",
        "apihelp-query+exturlusage-param-limit": "要回傳的頁面數量。",
        "apihelp-query+filearchive-param-limit": "要回傳的圖片總數。",
        "apihelp-query+filearchive-param-dir": "列出時所採用的方向。",
+       "apihelp-query+filearchive-param-sha1": "圖片的 SHA1 雜湊值。覆蓋 $1sha1base36。",
        "apihelp-query+filearchive-param-prop": "要取得的圖片資訊:",
        "apihelp-query+filearchive-paramvalue-prop-sha1": "替圖片添加 SHA-1 雜湊值。",
        "apihelp-query+filearchive-paramvalue-prop-mime": "添加圖片的 MIME。",
-       "apihelp-query+filearchive-paramvalue-prop-mediatype": "æ·»å\8a å\9c\96ç\89\87ç\9a\84å¤\9aåª\92é«\94é¡\9eå\9e\8bã\80\82",
+       "apihelp-query+filearchive-paramvalue-prop-mediatype": "添加圖片的媒體類型。",
        "apihelp-query+fileusage-param-prop": "要取得的屬性。",
+       "apihelp-query+fileusage-paramvalue-prop-pageid": "各頁面的頁面 ID。",
+       "apihelp-query+fileusage-paramvalue-prop-title": "各頁面的標題。",
+       "apihelp-query+fileusage-paramvalue-prop-redirect": "若頁面為重新導向,則做出標記。",
+       "apihelp-query+fileusage-param-namespace": "僅包含這些命名空間的頁面。",
        "apihelp-query+fileusage-param-limit": "要回傳的數量。",
        "apihelp-query+imageinfo-summary": "回傳檔案資訊與上傳日誌。",
+       "apihelp-query+imageinfo-param-prop": "要取得的檔案資訊:",
+       "apihelp-query+imageinfo-paramvalue-prop-sha1": "替檔案添加 SHA-1 雜湊值。",
+       "apihelp-query+imageinfo-paramvalue-prop-mime": "替檔案添加 MIME 類型。",
+       "apihelp-query+imageinfo-paramvalue-prop-mediatype": "添加檔案的媒體類型。",
        "apihelp-query+imageinfo-param-limit": "每個檔案要回傳的檔案修訂數量。",
        "apihelp-query+images-summary": "回傳指定頁面中包含的所有檔案。",
        "apihelp-query+images-param-limit": "要回傳的檔案數量。",
+       "apihelp-query+images-param-dir": "列出時所採用的方向。",
+       "apihelp-query+images-example-simple": "取得使用在 [[Main Page]] 的檔案清單。",
+       "apihelp-query+imageusage-param-namespace": "要列舉的命名空間。",
+       "apihelp-query+imageusage-param-dir": "列出時所採用的方向。",
        "apihelp-query+info-summary": "取得基本頁面訊息。",
+       "apihelp-query+info-param-prop": "要取得的額外屬性:",
+       "apihelp-query+info-paramvalue-prop-readable": "使用者是否可閱讀此頁面。",
        "apihelp-query+iwbacklinks-param-prop": "要取得的屬性。",
        "apihelp-query+iwlinks-summary": "回傳指定頁面的所有 interwiki 連結。",
        "apihelp-query+iwlinks-paramvalue-prop-url": "添加完整的 URL。",
        "apihelp-query+prefixsearch-param-offset": "要略過的結果數量。",
        "apihelp-query+protectedtitles-param-limit": "要回傳的頁面總數。",
        "apihelp-query+protectedtitles-param-prop": "要取得的屬性。",
+       "apihelp-query+protectedtitles-example-simple": "列出已保護的標題。",
        "apihelp-query+querypage-param-limit": "回傳的結果數量。",
+       "apihelp-query+random-summary": "取得隨機頁面集合",
+       "apihelp-query+random-param-namespace": "僅回傳在這些命名空間的頁面。",
+       "apihelp-query+random-param-redirect": "請改用 <kbd>$1filterredir=redirects</kbd>。",
+       "apihelp-query+random-param-filterredir": "如何過濾重新導向。",
        "apihelp-query+recentchanges-summary": "列舉出最近變更。",
        "apihelp-query+recentchanges-param-start": "起始列舉的時間戳記。",
        "apihelp-query+recentchanges-param-end": "結束列舉的時間戳記。",
        "apihelp-query+recentchanges-param-user": "此列出由該使用者作出的更改。",
        "apihelp-query+recentchanges-param-excludeuser": "不要列出由該使用者作出的更改。",
+       "apihelp-query+recentchanges-paramvalue-prop-flags": "添加編輯的標籤。",
+       "apihelp-query+recentchanges-paramvalue-prop-timestamp": "添加編輯的時間戳記。",
+       "apihelp-query+recentchanges-paramvalue-prop-title": "添加編輯的頁面標題。",
+       "apihelp-query+recentchanges-paramvalue-prop-tags": "列出項目的標籤。",
        "apihelp-query+recentchanges-param-limit": "要回傳變更總數。",
+       "apihelp-query+recentchanges-param-type": "更改的顯示類型。",
        "apihelp-query+recentchanges-example-simple": "最近變更清單",
        "apihelp-query+redirects-summary": "回傳連結至指定頁面的所有重新導向。",
        "apihelp-query+redirects-param-prop": "要取得的屬性。",
        "apihelp-query+redirects-paramvalue-prop-title": "各重新導向的標題。",
        "apihelp-query+redirects-param-limit": "要回傳的重新導向數量。",
        "apihelp-query+revisions-summary": "取得修訂的資訊。",
+       "apihelp-query+revisions-example-content": "取得用於標題 <kbd>API</kbd> 與 <kbd>Main Page</kbd> 最新修訂內容的資料。",
+       "apihelp-query+revisions-example-last5": "取得 <kbd>Main Page</kbd> 的最近 5 筆修訂。",
+       "apihelp-query+revisions-example-first5": "取得 <kbd>Main Page</kbd> 的最早前 5 筆修訂。",
+       "apihelp-query+revisions-example-first5-after": "取得 <kbd>Main Page</kbd> 自 2006-05-01 後做的前 5 筆修訂。",
+       "apihelp-query+revisions-example-first5-not-localhost": "取得 <kbd>Main Page</kbd> 裡並非由匿名使用者 <kbd>127.0.0.1</kbd> 所做出的最早前 5 筆修訂。",
+       "apihelp-query+revisions-example-first5-user": "取得 <kbd>Main Page</kbd> 裡由使用者 <kbd>MediaWiki default</kbd> 所做出的最早前 5 筆修訂。",
        "apihelp-query+revisions+base-paramvalue-prop-ids": "修訂 ID。",
        "apihelp-query+revisions+base-paramvalue-prop-tags": "修訂標籤。",
+       "apihelp-query+search-summary": "執行全文搜尋。",
+       "apihelp-query+search-param-what": "要執行的搜尋類型。",
        "apihelp-query+search-param-info": "要回傳的詮釋資料。",
        "apihelp-query+search-param-prop": "要回傳的屬性:",
+       "apihelp-query+search-paramvalue-prop-size": "添加以位元組為單位的頁面大小。",
+       "apihelp-query+search-paramvalue-prop-wordcount": "添加頁面的字數。",
+       "apihelp-query+search-paramvalue-prop-timestamp": "添加頁面自上一次編輯的時間戳記。",
        "apihelp-query+search-paramvalue-prop-score": "已忽略",
        "apihelp-query+search-paramvalue-prop-hasrelated": "已忽略",
        "apihelp-query+search-param-limit": "要回傳的頁面總數。",
+       "apihelp-query+siteinfo-paramvalue-prop-general": "全面系統資訊。",
+       "apihelp-query+siteinfo-param-numberingroup": "列出在使用者群組裡的使用者數目。",
        "apihelp-query+siteinfo-example-simple": "索取站台資訊。",
        "apihelp-query+siteinfo-example-interwiki": "索取本地端跨 wiki 前綴的清單。",
        "apihelp-query+stashimageinfo-summary": "回傳多筆儲藏檔案的檔案資訊。",
        "apihelp-query+transcludedin-paramvalue-prop-title": "各頁面的標題。",
        "apihelp-query+transcludedin-paramvalue-prop-redirect": "若頁面為重新導向,則做出標記。",
        "apihelp-query+transcludedin-param-limit": "回傳的數量。",
+       "apihelp-query+usercontribs-summary": "按使用者來取得所有編輯。",
        "apihelp-query+usercontribs-param-limit": "回傳的貢獻數量上限。",
+       "apihelp-query+usercontribs-paramvalue-prop-ids": "添加頁面 ID 與修訂 ID。",
+       "apihelp-query+usercontribs-paramvalue-prop-title": "添加標題與頁面的命名空間 ID。",
+       "apihelp-query+usercontribs-paramvalue-prop-timestamp": "添加編輯的時間戳記。",
+       "apihelp-query+usercontribs-paramvalue-prop-comment": "添加編輯的註釋。",
+       "apihelp-query+usercontribs-paramvalue-prop-parsedcomment": "添加編輯的已解析註解。",
+       "apihelp-query+usercontribs-paramvalue-prop-size": "添加編輯的新大小。",
+       "apihelp-query+userinfo-paramvalue-prop-realname": "添加使用者的真實姓名。",
+       "apihelp-query+userinfo-paramvalue-prop-email": "添加使用者的電子郵件地址與電子郵件驗證日期。",
+       "apihelp-query+userinfo-paramvalue-prop-registrationdate": "添加使用者的註冊日期。",
+       "apihelp-query+userinfo-example-simple": "取得目前使用者的資訊。",
+       "apihelp-query+userinfo-example-data": "取得目前使用者的額外資訊。",
        "apihelp-query+users-summary": "取得有關使用者清單的資訊。",
+       "apihelp-query+users-param-prop": "要包含的資訊部份:",
        "apihelp-query+watchlist-param-start": "起始列舉的時間戳記。",
        "apihelp-query+watchlist-param-end": "結束列舉的時間戳記。",
        "apihelp-query+watchlist-param-limit": "每個請求要回傳的結果總數。",
        "apihelp-query+watchlist-paramvalue-prop-title": "添加頁面標題。",
        "apihelp-query+watchlist-paramvalue-prop-flags": "添加編輯的標籤。",
+       "apihelp-query+watchlist-paramvalue-prop-tags": "列出項目的標籤。",
+       "apihelp-query+watchlist-paramvalue-type-new": "頁面建立。",
        "apihelp-query+watchlist-paramvalue-type-log": "日誌項目。",
        "apihelp-query+watchlist-paramvalue-type-categorize": "分類成員更改。",
        "apihelp-query+watchlistraw-param-limit": "每個請求要回傳的結果總數。",
        "apihelp-query+watchlistraw-param-dir": "列出時所採用的方向。",
        "apihelp-removeauthenticationdata-summary": "為目前使用者移除身分核對資料。",
        "apihelp-revisiondelete-summary": "刪除和取消刪除修訂。",
+       "apihelp-rollback-summary": "撤修頁面的最後一次編輯。",
+       "apihelp-setpagelanguage-summary": "更改頁面的語言。",
+       "apihelp-setpagelanguage-param-reason": "變更的原因。",
        "apihelp-stashedit-param-title": "正在編輯此頁面的標題。",
        "apihelp-stashedit-param-text": "頁面內容。",
        "apihelp-tokens-summary": "取得資料修改動作的密鑰。",
        "apihelp-undelete-param-reason": "還原的原因。",
        "apihelp-upload-param-filename": "目標檔案名稱。",
        "apihelp-upload-param-comment": "上傳註釋。如果 <var>$1text</var> 未指定的話,也會作為新檔案用的初始頁面文字。",
+       "apihelp-upload-param-watch": "監視頁面。",
+       "apihelp-upload-param-ignorewarnings": "忽略所有警告。",
        "apihelp-upload-param-file": "檔案內容。",
        "apihelp-upload-example-url": "從 URL 上傳。",
        "apihelp-userrights-summary": "變更一位使用者的群組成員。",
        "apierror-copyuploadbadurl": "不允許從此 URL 來上傳。",
        "apierror-filedoesnotexist": "檔案不存在。",
        "apierror-filenopath": "無法取得本地端檔案路徑。",
+       "apierror-filetypecannotberotated": "無法旋轉的檔案類型。",
+       "apierror-imageusage-badtitle": "<kbd>$1</kbd>的標題必須是檔案。",
        "apierror-import-unknownerror": "未知的匯入錯誤:$1",
        "apierror-invalidsha1hash": "所提供的 SHA1 雜湊無效。",
+       "apierror-invaliduser": "無效的使用者名稱「$1」。",
+       "apierror-invaliduserid": "使用者 ID <var>$1</var> 無效。",
        "apierror-missingparam": "<var>$1</var>參數必須被設定。",
        "apierror-missingtitle": "您所指定的頁面不存在。",
        "apierror-mustbeloggedin-changeauth": "必須登入,才能變更身分核對資取。",
        "apierror-mustbeloggedin-generic": "您必須登入。",
+       "apierror-mustbeloggedin-linkaccounts": "您必須登入到連結帳號。",
        "apierror-mustbeloggedin-removeauth": "必須登入,才能移除身分核對資取。",
        "apierror-nodeleteablefile": "沒有這樣檔案的舊版本。",
        "apierror-noedit-anon": "匿名使用者不可編輯頁面。",
        "apierror-noedit": "您沒有權限來編輯頁面。",
        "apierror-nouploadmodule": "未設定上傳模組。",
+       "apierror-pagecannotexist": "命名空間不允許實際頁面。",
        "apierror-permissiondenied": "您沒有權限$1。",
+       "apierror-permissiondenied-generic": "權限不足。",
        "apierror-permissiondenied-unblock": "您沒有權限來解封使用者。",
+       "apierror-readapidenied": "您需要有閱讀權限來使用此模組。",
        "apierror-readonly": "Wiki 目前為唯讀模式。",
        "apierror-reauthenticate": "於本工作階段還未核對身分,請重新核對。",
+       "apierror-searchdisabled": "<var>$1</var>搜尋已停用。",
+       "apierror-stashwrongowner": "錯誤擁有者:$1",
        "apierror-timeout": "伺服器未有在預計的時間內回應。",
        "apierror-unknownerror-editpage": "不明編輯頁面錯誤:$1。",
        "apierror-unknownerror-nocode": "不明錯誤。",
        "apierror-unknownerror": "不明錯誤:\"$1\"。",
        "apierror-unknownformat": "無法識別的格式\"$1\"。",
        "apierror-upload-missingresult": "狀態資料裡沒有結果。",
+       "apiwarn-deprecation-httpsexpected": "當應為 HTTPS 時,HTTP 要被使用。",
+       "apiwarn-invalidcategory": "「$1」不是一個分類。",
+       "apiwarn-invalidtitle": "「$1」不是一個有效標題。",
+       "apiwarn-notfile": "「$1」不是一個檔案。",
+       "apiwarn-validationfailed-badpref": "不是有效的偏好設定。",
+       "apiwarn-validationfailed-cannotset": "不能透過此模組設定。",
        "api-feed-error-title": "錯誤($1)",
        "api-credits-header": "製作群",
        "api-credits": "API 開發人員:\n* Roan Kattouw (首席開發者 Sep 2007–2009)\n* Victor Vasiliev\n* Bryan Tong Minh\n* Sam Reed\n* Yuri Astrakhan (創立者,首席開發者 Sep 2006–Sep 2007)\n* Brad Jorsch (首席開發者 2013–present)\n\n請傳送您的評論、建議以及問題至 mediawiki-api@lists.wikimedia.org\n或者回報問題至 https://phabricator.wikimedia.org/。"
index 86dd338..7a0826e 100644 (file)
@@ -224,12 +224,13 @@ class LinkBatch {
                if ( $this->isEmpty() ) {
                        return false;
                }
+               $services = MediaWikiServices::getInstance();
 
-               if ( !MediaWikiServices::getInstance()->getContentLanguage()->needsGenderDistinction() ) {
+               if ( !$services->getContentLanguage()->needsGenderDistinction() ) {
                        return false;
                }
 
-               $genderCache = MediaWikiServices::getInstance()->getGenderCache();
+               $genderCache = $services->getGenderCache();
                $genderCache->doLinkBatch( $this->data, $this->caller );
 
                return true;
index f09b5bf..7a1b988 100644 (file)
@@ -107,15 +107,16 @@ class MessageCache {
        public static function singleton() {
                if ( self::$instance === null ) {
                        global $wgUseDatabaseMessages, $wgMsgCacheExpiry, $wgUseLocalMessageCache;
+                       $services = MediaWikiServices::getInstance();
                        self::$instance = new self(
-                               MediaWikiServices::getInstance()->getMainWANObjectCache(),
+                               $services->getMainWANObjectCache(),
                                wfGetMessageCacheStorage(),
                                $wgUseLocalMessageCache
-                                       ? MediaWikiServices::getInstance()->getLocalServerObjectCache()
+                                       ? $services->getLocalServerObjectCache()
                                        : new EmptyBagOStuff(),
                                $wgUseDatabaseMessages,
                                $wgMsgCacheExpiry,
-                               MediaWikiServices::getInstance()->getContentLanguage()
+                               $services->getContentLanguage()
                        );
                }
 
index 7ba12fb..a2af01c 100644 (file)
@@ -20,6 +20,8 @@
  * @file
  */
 
+use MediaWiki\MediaWikiServices;
+
 class OldChangesList extends ChangesList {
 
        /**
@@ -90,7 +92,8 @@ class OldChangesList extends ChangesList {
                        }
                // Log entries (old format) or log targets, and special pages
                } elseif ( $rc->mAttribs['rc_namespace'] == NS_SPECIAL ) {
-                       list( $name, $htmlubpage ) = SpecialPageFactory::resolveAlias( $rc->mAttribs['rc_title'] );
+                       list( $name, $htmlubpage ) = MediaWikiServices::getInstance()->getSpecialPageFactory()->
+                               resolveAlias( $rc->mAttribs['rc_title'] );
                        if ( $name == 'Log' ) {
                                $this->insertLog( $html, $rc->getTitle(), $htmlubpage );
                        }
index ae3c660..5b1be6d 100644 (file)
@@ -584,10 +584,11 @@ class LinksUpdate extends DataUpdate implements EnqueueableDataUpdate {
                global $wgCategoryCollation;
                $diffs = array_diff_assoc( $this->mCategories, $existing );
                $arr = [];
+               $contLang = MediaWikiServices::getInstance()->getContentLanguage();
+               $collation = Collation::singleton();
                foreach ( $diffs as $name => $prefix ) {
                        $nt = Title::makeTitleSafe( NS_CATEGORY, $name );
-                       MediaWikiServices::getInstance()->getContentLanguage()->
-                               findVariantLink( $name, $nt, true );
+                       $contLang->findVariantLink( $name, $nt, true );
 
                        $type = MWNamespace::getCategoryLinkType( $this->mTitle->getNamespace() );
 
@@ -595,8 +596,7 @@ class LinksUpdate extends DataUpdate implements EnqueueableDataUpdate {
                        # things are forced to sort as '*' or something, they'll
                        # sort properly in the category rather than in page_id
                        # order or such.
-                       $sortkey = Collation::singleton()->getSortKey(
-                               $this->mTitle->getCategorySortkey( $prefix ) );
+                       $sortkey = $collation->getSortKey( $this->mTitle->getCategorySortkey( $prefix ) );
 
                        $arr[] = [
                                'cl_from' => $this->mId,
index 105877b..3625476 100644 (file)
@@ -75,13 +75,14 @@ class SearchUpdate implements DeferrableUpdate {
         * Perform actual update for the entry
         */
        public function doUpdate() {
-               $config = MediaWikiServices::getInstance()->getSearchEngineConfig();
+               $services = MediaWikiServices::getInstance();
+               $config = $services->getSearchEngineConfig();
 
                if ( $config->getConfig()->get( 'DisableSearchUpdate' ) || !$this->id ) {
                        return;
                }
 
-               $seFactory = MediaWikiServices::getInstance()->getSearchEngineFactory();
+               $seFactory = $services->getSearchEngineFactory();
                foreach ( $config->getSearchTypes() as $type ) {
                        $search = $seFactory->create( $type );
                        if ( !$search->supports( 'search-update' ) ) {
@@ -117,14 +118,16 @@ class SearchUpdate implements DeferrableUpdate {
         * @return string
         */
        public function updateText( $text, SearchEngine $se = null ) {
+               $services = MediaWikiServices::getInstance();
+               $contLang = $services->getContentLanguage();
                # Language-specific strip/conversion
-               $text = MediaWikiServices::getInstance()->getContentLanguage()->normalizeForSearch( $text );
-               $se = $se ?: MediaWikiServices::getInstance()->newSearchEngine();
+               $text = $contLang->normalizeForSearch( $text );
+               $se = $se ?: $services->newSearchEngine();
                $lc = $se->legalSearchChars() . '&#;';
 
                # Strip HTML markup
                $text = preg_replace( "/<\\/?\\s*[A-Za-z][^>]*?>/",
-                       ' ', MediaWikiServices::getInstance()->getContentLanguage()->lc( " " . $text . " " ) );
+                       ' ', $contLang->lc( " " . $text . " " ) );
                $text = preg_replace( "/(^|\\n)==\\s*([^\\n]+)\\s*==(\\s)/sD",
                        "\\1\\2 \\2 \\2\\3", $text ); # Emphasize headings
 
@@ -199,13 +202,14 @@ class SearchUpdate implements DeferrableUpdate {
         * @return string A stripped-down title string ready for the search index
         */
        private function getNormalizedTitle( SearchEngine $search ) {
+               $contLang = MediaWikiServices::getInstance()->getContentLanguage();
                $ns = $this->title->getNamespace();
                $title = $this->title->getText();
 
                $lc = $search->legalSearchChars() . '&#;';
-               $t = MediaWikiServices::getInstance()->getContentLanguage()->normalizeForSearch( $title );
+               $t = $contLang->normalizeForSearch( $title );
                $t = preg_replace( "/[^{$lc}]+/", ' ', $t );
-               $t = MediaWikiServices::getInstance()->getContentLanguage()->lc( $t );
+               $t = $contLang->lc( $t );
 
                # Handle 's, s'
                $t = preg_replace( "/([{$lc}]+)'s( |$)/", "\\1 \\1's ", $t );
index b447b18..f7d0945 100644 (file)
@@ -165,10 +165,10 @@ class TextConflictHelper {
        /**
         * HTML to build the textbox1 on edit conflicts
         *
-        * @param mixed[]|null $customAttribs
+        * @param array $customAttribs
         * @return string HTML
         */
-       public function getEditConflictMainTextBox( $customAttribs = [] ) {
+       public function getEditConflictMainTextBox( array $customAttribs = [] ) {
                $builder = new TextboxBuilder();
                $classes = $builder->getTextboxProtectionCSSClasses( $this->title );
 
index 789ed4c..c889e56 100644 (file)
@@ -278,6 +278,7 @@ class LocalRepo extends FileRepo {
                $applyMatchingFiles = function ( ResultWrapper $res, &$searchSet, &$finalFiles )
                        use ( $fileMatchesSearch, $flags )
                {
+                       $contLang = MediaWikiServices::getInstance()->getContentLanguage();
                        $info = $this->getInfo();
                        foreach ( $res as $row ) {
                                $file = $this->newFileFromRow( $row );
@@ -286,8 +287,7 @@ class LocalRepo extends FileRepo {
                                $dbKeysLook = [ strtr( $file->getName(), ' ', '_' ) ];
                                if ( !empty( $info['initialCapital'] ) ) {
                                        // Search keys for "hi.png" and "Hi.png" should use the "Hi.png file"
-                                       $dbKeysLook[] = MediaWikiServices::getInstance()->getContentLanguage()->
-                                               lcfirst( $file->getName() );
+                                       $dbKeysLook[] = $contLang->lcfirst( $file->getName() );
                                }
                                foreach ( $dbKeysLook as $dbKey ) {
                                        if ( isset( $searchSet[$dbKey] )
index 2ed4853..fd3dc8b 100644 (file)
@@ -355,11 +355,12 @@ class ForeignAPIFile extends File {
        }
 
        function purgeDescriptionPage() {
+               $services = MediaWikiServices::getInstance();
                $url = $this->repo->getDescriptionRenderUrl(
-                       $this->getName(), MediaWikiServices::getInstance()->getContentLanguage()->getCode() );
+                       $this->getName(), $services->getContentLanguage()->getCode() );
                $key = $this->repo->getLocalCacheKey( 'RemoteFileDescription', 'url', md5( $url ) );
 
-               MediaWikiServices::getInstance()->getMainWANObjectCache()->delete( $key );
+               $services->getMainWANObjectCache()->delete( $key );
        }
 
        /**
index 442a7cf..0fa0406 100644 (file)
@@ -76,6 +76,9 @@ use Wikimedia\ObjectFactory;
  *    'help-messages'       -- array of message keys/objects. As above, each item can
  *                             be an array of msg key and then parameters.
  *                             Overwrites 'help'.
+ *    'help-inline'         -- Whether help text (defined using options above) will be shown
+ *                             inline after the input field, rather than in a popup.
+ *                             Defaults to true. Only used by OOUI form fields.
  *    'notice'              -- message text for a message to use as a notice in the field.
  *                             Currently used by OOUI form fields only.
  *    'notice-messages'     -- array of message keys/objects to use for notice.
index 97e4b50..f5d6e8c 100644 (file)
@@ -619,6 +619,7 @@ abstract class HTMLFormField {
                        'errors' => $errors,
                        'notices' => $notices,
                        'infusable' => $infusable,
+                       'helpInline' => $this->isHelpInline(),
                ];
 
                $preloadModules = false;
@@ -679,8 +680,8 @@ abstract class HTMLFormField {
         * @return bool
         */
        protected function shouldInfuseOOUI() {
-               // Always infuse fields with help text, since the interface for it is nicer with JS
-               return $this->getHelpText() !== null;
+               // Always infuse fields with popup help text, since the interface for it is nicer with JS
+               return $this->getHelpText() !== null && !$this->isHelpInline();
        }
 
        /**
@@ -851,6 +852,18 @@ abstract class HTMLFormField {
                return $helptext;
        }
 
+       /**
+        * Determine if the help text should be displayed inline.
+        *
+        * Only applies to OOUI forms.
+        *
+        * @since 1.31
+        * @return bool
+        */
+       public function isHelpInline() {
+               return isset( $this->mParams['help-inline'] ) ? $this->mParams['help-inline'] : true;
+       }
+
        /**
         * Determine form errors to display and their classes
         * @since 1.20
index 50c4517..6ebf95e 100644 (file)
@@ -144,6 +144,7 @@ class MssqlUpdater extends DatabaseUpdater {
                        [ 'addIndex', 'protected_titles', 'PRIMARY', 'patch-protected_titles-pk.sql' ],
                        [ 'addIndex', 'page_props', 'PRIMARY', 'patch-page_props-pk.sql' ],
                        [ 'addIndex', 'site_identifiers', 'PRIMARY', 'patch-site_identifiers-pk.sql' ],
+                       [ 'addIndex', 'recentchanges', 'rc_this_oldid', 'patch-recentchanges-rc_this_oldid-index.sql' ],
                ];
        }
 
index ac0a520..408f2fb 100644 (file)
@@ -367,6 +367,7 @@ class MysqlUpdater extends DatabaseUpdater {
                                'patch-protected_titles-fix-pk.sql' ],
                        [ 'renameIndex', 'site_identifiers', 'site_ids_type', 'PRIMARY', false,
                                'patch-site_identifiers-fix-pk.sql' ],
+                       [ 'addIndex', 'recentchanges', 'rc_this_oldid', 'patch-recentchanges-rc_this_oldid-index.sql' ],
                ];
        }
 
index c9ed53f..fbb7696 100644 (file)
@@ -155,6 +155,7 @@ class OracleUpdater extends DatabaseUpdater {
                        [ 'addField', 'change_tag', 'ct_tag_id', 'patch-change_tag-tag_id.sql' ],
                        [ 'addIndex', 'archive', 'ar_revid_uniq', 'patch-archive-ar_rev_id-unique.sql' ],
                        [ 'populateContentTables' ],
+                       [ 'addIndex', 'recentchanges', 'rc_this_oldid', 'patch-recentchanges-rc_this_oldid-index.sql' ],
 
                        // KEEP THIS AT THE BOTTOM!!
                        [ 'doRebuildDuplicateFunction' ],
index 932c941..e8663fb 100644 (file)
@@ -590,6 +590,7 @@ class PostgresUpdater extends DatabaseUpdater {
                        [ 'addIndex', 'interwiki', 'interwiki_pkey', 'patch-interwiki-pk.sql' ],
                        [ 'addIndex', 'protected_titles', 'protected_titles_pkey', 'patch-protected_titles-pk.sql' ],
                        [ 'addIndex', 'site_identifiers', 'site_identifiers_pkey', 'patch-site_identifiers-pk.sql' ],
+                       [ 'addPgIndex', 'recentchanges', 'rc_this_oldid', '(rc_this_oldid)' ],
                ];
        }
 
index 80eb843..57bf389 100644 (file)
@@ -231,6 +231,7 @@ class SqliteUpdater extends DatabaseUpdater {
                                'patch-protected_titles-fix-pk.sql' ],
                        [ 'renameIndex', 'site_identifiers', 'site_ids_type', 'PRIMARY', false,
                                'patch-site_identifiers-fix-pk.sql' ],
+                       [ 'addIndex', 'recentchanges', 'rc_this_oldid', 'patch-recentchanges-rc_this_oldid-index.sql' ],
                ];
        }
 
index 3015825..73f3e70 100644 (file)
@@ -334,6 +334,8 @@ class JavaScriptMinifier {
                                        self::ACTION_GOTO => self::PAREN_EXPRESSION,
                                ],
                        ],
+                       // Property assignment - This is an object literal declaration.
+                       // For example: `{ key: value }`
                        self::PROPERTY_ASSIGNMENT => [
                                self::TYPE_COLON => [
                                        self::ACTION_GOTO => self::PROPERTY_EXPRESSION,
@@ -520,6 +522,7 @@ class JavaScriptMinifier {
                                        self::ACTION_GOTO => self::STATEMENT,
                                ],
                        ],
+                       // Property expression - The value of a key in an object literal.
                        self::PROPERTY_EXPRESSION => [
                                self::TYPE_BRACE_OPEN => [
                                        self::ACTION_PUSH => self::PROPERTY_EXPRESSION_OP,
@@ -547,7 +550,8 @@ class JavaScriptMinifier {
                                        self::ACTION_GOTO => self::PROPERTY_EXPRESSION,
                                ],
                                self::TYPE_HOOK => [
-                                       self::ACTION_GOTO => self::PROPERTY_EXPRESSION,
+                                       self::ACTION_PUSH => self::PROPERTY_EXPRESSION,
+                                       self::ACTION_GOTO => self::EXPRESSION_TERNARY,
                                ],
                                self::TYPE_COMMA => [
                                        self::ACTION_GOTO => self::PROPERTY_ASSIGNMENT,
diff --git a/includes/libs/StaticArrayWriter.php b/includes/libs/StaticArrayWriter.php
new file mode 100644 (file)
index 0000000..cd1860f
--- /dev/null
@@ -0,0 +1,49 @@
+<?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.
+ *
+ */
+
+namespace Wikimedia;
+
+/**
+ * Format a static PHP array to be written to a file
+ *
+ * @since 1.32
+ */
+class StaticArrayWriter {
+
+       /**
+        * @param string[] $data Array with string keys/values to export
+        * @param string $header
+        *
+        * @return string PHP code
+        */
+       public function create( array $data, $header = 'Automatically generated' ) {
+               $format = "\t%s => %s,\n";
+               $code = "<?php\n"
+                       . "// " . implode( "\n// ", explode( "\n", $header ) ) . "\n"
+                       . "return [\n";
+               foreach ( $data as $key => $value ) {
+                       $code .= sprintf(
+                               $format,
+                               var_export( $key, true ),
+                               var_export( $value, true )
+                       );
+               }
+               $code .= "];\n";
+               return $code;
+       }
+}
index 5e08094..fbc3be9 100644 (file)
@@ -1928,14 +1928,14 @@ class LoadBalancer implements ILoadBalancer {
                                "Foreign domain connections are still in use ($domains)." );
                }
 
-               $oldDomain = $this->localDomain->getId();
                $this->setLocalDomain( new DatabaseDomain(
                        $this->localDomain->getDatabase(),
                        $this->localDomain->getSchema(),
                        $prefix
                ) );
 
-               $this->forEachOpenConnection( function ( IDatabase $db ) use ( $prefix, $oldDomain ) {
+               // Update the prefix for all local connections...
+               $this->forEachOpenConnection( function ( IDatabase $db ) use ( $prefix ) {
                        if ( !$db->getLBInfo( 'foreign' ) ) {
                                $db->tablePrefix( $prefix );
                        }
diff --git a/includes/libs/stats/PrefixingStatsdDataFactoryProxy.php b/includes/libs/stats/PrefixingStatsdDataFactoryProxy.php
new file mode 100644 (file)
index 0000000..136a614
--- /dev/null
@@ -0,0 +1,96 @@
+<?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
+ */
+
+use Liuggio\StatsdClient\Factory\StatsdDataFactoryInterface;
+use Liuggio\StatsdClient\Entity\StatsdDataInterface;
+
+/**
+ * Proxy to prefix metric keys sent to a StatsdDataFactoryInterface
+ *
+ * @since 1.32
+ */
+class PrefixingStatsdDataFactoryProxy implements StatsdDataFactoryInterface {
+
+       /**
+        * @var string
+        */
+       private $prefix;
+
+       /**
+        * @var StatsdDataFactoryInterface
+        */
+       private $factory;
+
+       /**
+        * @param StatsdDataFactoryInterface $factory
+        * @param string $prefix
+        */
+       public function __construct(
+               StatsdDataFactoryInterface $factory,
+               $prefix
+       ) {
+               $this->factory = $factory;
+               $this->prefix = rtrim( $prefix, '.' );
+       }
+
+       /**
+        * @param string $key
+        * @return string
+        */
+       private function addPrefixToKey( $key ) {
+               return $this->prefix . '.' . $key;
+       }
+
+       public function timing( $key, $time ) {
+               return $this->factory->timing( $this->addPrefixToKey( $key ), $time );
+       }
+
+       public function gauge( $key, $value ) {
+               return $this->factory->gauge( $this->addPrefixToKey( $key ), $value );
+       }
+
+       public function set( $key, $value ) {
+               return $this->factory->set( $this->addPrefixToKey( $key ), $value );
+       }
+
+       public function increment( $key ) {
+               return $this->factory->increment( $this->addPrefixToKey( $key ) );
+       }
+
+       public function decrement( $key ) {
+               return $this->factory->decrement( $this->addPrefixToKey( $key ) );
+       }
+
+       public function updateCount( $key, $delta ) {
+               return $this->factory->updateCount( $this->addPrefixToKey( $key ), $delta );
+       }
+
+       public function produceStatsdData(
+               $key,
+               $value = 1,
+               $metric = StatsdDataInterface::STATSD_METRIC_COUNT
+       ) {
+               return $this->factory->produceStatsdData(
+                       $this->addPrefixToKey( $key ),
+                       $value,
+                       $metric
+               );
+       }
+}
index 673c929..af99940 100644 (file)
@@ -294,9 +294,11 @@ class LogPage {
                        return $title->getPrefixedText();
                }
 
-               $linkRenderer = MediaWikiServices::getInstance()->getLinkRenderer();
+               $services = MediaWikiServices::getInstance();
+               $linkRenderer = $services->getLinkRenderer();
                if ( $title->isSpecialPage() ) {
-                       list( $name, $par ) = SpecialPageFactory::resolveAlias( $title->getDBkey() );
+                       list( $name, $par ) = $services->getSpecialPageFactory()->
+                               resolveAlias( $title->getDBkey() );
 
                        # Use the language name for log titles, rather than Log/X
                        if ( $name == 'Log' ) {
index 02a6972..ba02457 100644 (file)
@@ -150,9 +150,10 @@ class ProtectLogFormatter extends LogFormatter {
        public function formatParametersForApi() {
                $ret = parent::formatParametersForApi();
                if ( isset( $ret['details'] ) && is_array( $ret['details'] ) ) {
+                       $contLang = MediaWikiServices::getInstance()->getContentLanguage();
                        foreach ( $ret['details'] as &$detail ) {
                                if ( isset( $detail['expiry'] ) ) {
-                                       $detail['expiry'] = MediaWikiServices::getInstance()->getContentLanguage()->
+                                       $detail['expiry'] = $contLang->
                                                formatExpiry( $detail['expiry'], TS_ISO_8601, 'infinite' );
                                }
                        }
index c3df0e5..147c9f3 100644 (file)
@@ -2367,10 +2367,11 @@ class WikiPage implements Page, IDBAccessObject {
        public function protectDescriptionLog( array $limit, array $expiry ) {
                $protectDescriptionLog = '';
 
+               $dirMark = MediaWikiServices::getInstance()->getContentLanguage()->getDirMark();
                foreach ( array_filter( $limit ) as $action => $restrictions ) {
                        $expiryText = $this->formatExpiry( $expiry[$action] );
                        $protectDescriptionLog .=
-                               MediaWikiServices::getInstance()->getContentLanguage()->getDirMark() .
+                               $dirMark .
                                "[$action=$restrictions] ($expiryText)";
                }
 
index d3cb566..bf36983 100644 (file)
@@ -45,14 +45,12 @@ abstract class RangeChronologicalPager extends ReverseChronologicalPager {
                try {
                        if ( $startStamp !== '' ) {
                                $startTimestamp = MWTimestamp::getInstance( $startStamp );
-                               $startTimestamp->setTimezone( $this->getConfig()->get( 'Localtimezone' ) );
                                $startOffset = $this->mDb->timestamp( $startTimestamp->getTimestamp() );
                                $this->rangeConds[] = $this->mIndexField . '>=' . $this->mDb->addQuotes( $startOffset );
                        }
 
                        if ( $endStamp !== '' ) {
                                $endTimestamp = MWTimestamp::getInstance( $endStamp );
-                               $endTimestamp->setTimezone( $this->getConfig()->get( 'Localtimezone' ) );
                                $endOffset = $this->mDb->timestamp( $endTimestamp->getTimestamp() );
                                $this->rangeConds[] = $this->mIndexField . '<=' . $this->mDb->addQuotes( $endOffset );
 
index ae7ca6d..1f5308f 100644 (file)
@@ -950,7 +950,8 @@ class CoreParserFunctions {
        }
 
        public static function special( $parser, $text ) {
-               list( $page, $subpage ) = SpecialPageFactory::resolveAlias( $text );
+               list( $page, $subpage ) = MediaWikiServices::getInstance()->getSpecialPageFactory()->
+                       resolveAlias( $text );
                if ( $page ) {
                        $title = SpecialPage::getTitleFor( $page, $subpage );
                        return $title->getPrefixedText();
index 1fc2f92..6bee169 100644 (file)
@@ -22,6 +22,7 @@
  */
 use MediaWiki\Linker\LinkRenderer;
 use MediaWiki\MediaWikiServices;
+use MediaWiki\Special\SpecialPageFactory;
 use Wikimedia\ScopedCallback;
 
 /**
@@ -269,16 +270,20 @@ class Parser {
        /** @var ParserFactory */
        private $factory;
 
+       /** @var SpecialPageFactory */
+       private $specialPageFactory;
+
        /**
         * @param array $conf See $wgParserConf documentation
         * @param MagicWordFactory|null $magicWordFactory
         * @param Language|null $contLang Content language
         * @param ParserFactory|null $factory
         * @param string|null $urlProtocols As returned from wfUrlProtocols()
+        * @param SpecialPageFactory|null $spFactory
         */
        public function __construct(
                array $conf = [], MagicWordFactory $magicWordFactory = null, Language $contLang = null,
-               ParserFactory $factory = null, $urlProtocols = null
+               ParserFactory $factory = null, $urlProtocols = null, SpecialPageFactory $spFactory = null
        ) {
                $this->mConf = $conf;
                $this->mUrlProtocols = $urlProtocols ?? wfUrlProtocols();
@@ -301,12 +306,14 @@ class Parser {
                }
                wfDebug( __CLASS__ . ": using preprocessor: {$this->mPreprocessorClass}\n" );
 
+               $services = MediaWikiServices::getInstance();
                $this->magicWordFactory = $magicWordFactory ??
-                       MediaWikiServices::getInstance()->getMagicWordFactory();
+                       $services->getMagicWordFactory();
 
-               $this->contLang = $contLang ?? MediaWikiServices::getInstance()->getContentLanguage();
+               $this->contLang = $contLang ?? $services->getContentLanguage();
 
-               $this->factory = $factory ?? MediaWikiServices::getInstance()->getParserFactory();
+               $this->factory = $factory ?? $services->getParserFactory();
+               $this->specialPageFactory = $spFactory ?? $services->getSpecialPageFactory();
        }
 
        /**
@@ -3244,7 +3251,7 @@ class Parser {
                                        && $this->mOptions->getAllowSpecialInclusion()
                                        && $this->ot['html']
                                ) {
-                                       $specialPage = SpecialPageFactory::getPage( $title->getDBkey() );
+                                       $specialPage = $this->specialPageFactory->getPage( $title->getDBkey() );
                                        // Pass the template arguments as URL parameters.
                                        // "uselang" will have no effect since the Language object
                                        // is forced to the one defined in ParserOptions.
@@ -3270,8 +3277,7 @@ class Parser {
                                                $context->setUser( User::newFromName( '127.0.0.1', false ) );
                                        }
                                        $context->setLanguage( $this->mOptions->getUserLangObj() );
-                                       $ret = SpecialPageFactory::capturePath(
-                                               $title, $context, $this->getLinkRenderer() );
+                                       $ret = $this->specialPageFactory->capturePath( $title, $context, $this->getLinkRenderer() );
                                        if ( $ret ) {
                                                $text = $context->getOutput()->getHTML();
                                                $this->mOutput->addOutputPageMetadata( $context->getOutput() );
index 646f855..4238b27 100644 (file)
@@ -1,5 +1,4 @@
 <?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
@@ -20,6 +19,8 @@
  * @ingroup Parser
  */
 
+use MediaWiki\Special\SpecialPageFactory;
+
 /**
  * @since 1.32
  */
@@ -36,20 +37,26 @@ class ParserFactory {
        /** @var string */
        private $urlProtocols;
 
+       /** @var SpecialPageFactory */
+       private $specialPageFactory;
+
        /**
         * @param array $conf See $wgParserConf documentation
         * @param MagicWordFactory $magicWordFactory
         * @param Language $contLang Content language
         * @param string $urlProtocols As returned from wfUrlProtocols()
+        * @param SpecialPageFactory $spFactory
         * @since 1.32
         */
        public function __construct(
-               array $conf, MagicWordFactory $magicWordFactory, Language $contLang, $urlProtocols
+               array $conf, MagicWordFactory $magicWordFactory, Language $contLang, $urlProtocols,
+               SpecialPageFactory $spFactory
        ) {
                $this->conf = $conf;
                $this->magicWordFactory = $magicWordFactory;
                $this->contLang = $contLang;
                $this->urlProtocols = $urlProtocols;
+               $this->specialPageFactory = $spFactory;
        }
 
        /**
@@ -58,6 +65,6 @@ class ParserFactory {
         */
        public function create() : Parser {
                return new Parser( $this->conf, $this->magicWordFactory, $this->contLang, $this,
-                       $this->urlProtocols );
+                       $this->urlProtocols, $this->specialPageFactory );
        }
 }
index 2b25d91..98bae24 100644 (file)
@@ -37,7 +37,7 @@ use Wikimedia\WrappedString;
  */
 class ResourceLoader implements LoggerAwareInterface {
        /** @var int */
-       protected static $filterCacheVersion = 7;
+       protected static $filterCacheVersion = 8;
 
        /** @var bool */
        protected static $debugMode = null;
index 6ee030e..42bd66a 100644 (file)
@@ -460,9 +460,6 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
                        throw new MWException( __METHOD__ . ": skip function file not found: \"$localPath\"" );
                }
                $contents = $this->stripBom( file_get_contents( $localPath ) );
-               if ( $this->getConfig()->get( 'ResourceLoaderValidateStaticJS' ) ) {
-                       $contents = $this->validateScriptFile( $localPath, $contents );
-               }
                return $contents;
        }
 
@@ -807,12 +804,6 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
                                throw new MWException( __METHOD__ . ": script file not found: \"$localPath\"" );
                        }
                        $contents = $this->stripBom( file_get_contents( $localPath ) );
-                       if ( $this->getConfig()->get( 'ResourceLoaderValidateStaticJS' ) ) {
-                               // Static files don't really need to be checked as often; unlike
-                               // on-wiki module they shouldn't change unexpectedly without
-                               // admin interference.
-                               $contents = $this->validateScriptFile( $fileName, $contents );
-                       }
                        $js .= $contents . "\n";
                }
                return $js;
index bef34f9..8f4aa3b 100644 (file)
@@ -33,8 +33,7 @@ class ResourceLoaderJqueryMsgModule extends ResourceLoaderFileModule {
                $fileScript = parent::getScript( $context );
 
                $tagData = Sanitizer::getRecognizedTagData();
-               $parserDefaults = [];
-               $parserDefaults['allowedHtmlElements'] = array_merge(
+               $allowedHtmlElements = array_merge(
                        array_keys( $tagData['htmlpairs'] ),
                        array_diff(
                                array_keys( $tagData['htmlsingle'] ),
@@ -42,26 +41,24 @@ class ResourceLoaderJqueryMsgModule extends ResourceLoaderFileModule {
                        )
                );
 
-               $mainDataScript = Xml::encodeJsCall( 'mw.jqueryMsg.setParserDefaults', [ $parserDefaults ] );
-
-               // Associative array mapping magic words (e.g. SITENAME)
-               // to their values.
                $magicWords = [
                        'SITENAME' => $this->getConfig()->get( 'Sitename' ),
                ];
-
                Hooks::run( 'ResourceLoaderJqueryMsgModuleMagicWords', [ $context, &$magicWords ] );
 
-               $magicWordExtendData = [
+               $parserDefaults = [
+                       'allowedHtmlElements' => $allowedHtmlElements,
                        'magic' => $magicWords,
                ];
 
-               $magicWordDataScript = Xml::encodeJsCall( 'mw.jqueryMsg.setParserDefaults', [
-                       $magicWordExtendData,
-                       /* deep= */ true
+               $setDataScript = Xml::encodeJsCall( 'mw.jqueryMsg.setParserDefaults', [
+                       $parserDefaults,
+                       // Pass deep=true because mediawiki.jqueryMsg.js contains
+                       // page-specific magic words that must not be overwritten.
+                       true,
                ] );
 
-               return $fileScript . $mainDataScript . $magicWordDataScript;
+               return $fileScript . $setDataScript;
        }
 
        /**
index e3088c1..965a413 100644 (file)
@@ -264,8 +264,9 @@ abstract class SearchEngine {
         * @return SearchNearMatcher
         */
        protected static function defaultNearMatcher() {
-               $config = MediaWikiServices::getInstance()->getMainConfig();
-               return MediaWikiServices::getInstance()->newSearchEngine()->getNearMatcher( $config );
+               $services = MediaWikiServices::getInstance();
+               $config = $services->getMainConfig();
+               return $services->newSearchEngine()->getNearMatcher( $config );
        }
 
        /**
index 83d02a0..43b3ec1 100644 (file)
@@ -449,7 +449,8 @@ abstract class Skin extends ContextSource {
                if ( $title->isSpecialPage() ) {
                        $type = 'ns-special';
                        // T25315: provide a class based on the canonical special page name without subpages
-                       list( $canonicalName ) = SpecialPageFactory::resolveAlias( $title->getDBkey() );
+                       list( $canonicalName ) = MediaWikiServices::getInstance()->getSpecialPageFactory()->
+                               resolveAlias( $title->getDBkey() );
                        if ( $canonicalName ) {
                                $type .= ' ' . Sanitizer::escapeClass( "mw-special-$canonicalName" );
                        } else {
@@ -1547,7 +1548,8 @@ abstract class Skin extends ContextSource {
                        $notice = $msg->plain();
                }
 
-               $cache = MediaWikiServices::getInstance()->getMainWANObjectCache();
+               $services = MediaWikiServices::getInstance();
+               $cache = $services->getMainWANObjectCache();
                $parsed = $cache->getWithSetCallback(
                        // Use the extra hash appender to let eg SSL variants separately cache
                        // Key is verified with md5 hash of unparsed wikitext
@@ -1559,7 +1561,7 @@ abstract class Skin extends ContextSource {
                        }
                );
 
-               $contLang = MediaWikiServices::getInstance()->getContentLanguage();
+               $contLang = $services->getContentLanguage();
                return Html::rawElement(
                        'div',
                        [
index ceebf12..b44d409 100644 (file)
@@ -659,7 +659,9 @@ class SkinTemplate extends Skin {
                        # so it doesn't contain the original alias-with-subpage.
                        $origTitle = Title::newFromText( $request->getText( 'title' ) );
                        if ( $origTitle instanceof Title && $origTitle->isSpecialPage() ) {
-                               list( $spName, $spPar ) = SpecialPageFactory::resolveAlias( $origTitle->getText() );
+                               list( $spName, $spPar ) =
+                                       MediaWikiServices::getInstance()->getSpecialPageFactory()->
+                                               resolveAlias( $origTitle->getText() );
                                $active = $spName == 'Contributions'
                                        && ( ( $spPar && $spPar == $this->username )
                                                || $request->getText( 'target' ) == $this->username );
index 13287bd..e18eacc 100644 (file)
@@ -95,7 +95,8 @@ class SpecialPage implements MessageLocalizer {
         * @return TitleValue
         */
        public static function getTitleValueFor( $name, $subpage = false, $fragment = '' ) {
-               $name = SpecialPageFactory::getLocalNameFor( $name, $subpage );
+               $name = MediaWikiServices::getInstance()->getSpecialPageFactory()->
+                       getLocalNameFor( $name, $subpage );
 
                return new TitleValue( NS_SPECIAL, $name, $fragment );
        }
@@ -108,7 +109,8 @@ class SpecialPage implements MessageLocalizer {
         * @return Title|null Title object or null if the page doesn't exist
         */
        public static function getSafeTitleFor( $name, $subpage = false ) {
-               $name = SpecialPageFactory::getLocalNameFor( $name, $subpage );
+               $name = MediaWikiServices::getInstance()->getSpecialPageFactory()->
+                       getLocalNameFor( $name, $subpage );
                if ( $name ) {
                        return Title::makeTitleSafe( NS_SPECIAL, $name );
                } else {
@@ -233,7 +235,8 @@ class SpecialPage implements MessageLocalizer {
         */
        function getLocalName() {
                if ( !isset( $this->mLocalName ) ) {
-                       $this->mLocalName = SpecialPageFactory::getLocalNameFor( $this->mName );
+                       $this->mLocalName = MediaWikiServices::getInstance()->getSpecialPageFactory()->
+                               getLocalNameFor( $this->mName );
                }
 
                return $this->mLocalName;
index 9645811..c6ffbe4 100644 (file)
  * @ingroup SpecialPage
  * @defgroup SpecialPage SpecialPage
  */
+
+namespace MediaWiki\Special;
+
+use Config;
+use Hooks;
+use IContextSource;
+use Language;
 use MediaWiki\Linker\LinkRenderer;
-use MediaWiki\MediaWikiServices;
+use Profiler;
+use RequestContext;
+use SpecialPage;
+use Title;
+use User;
 use Wikimedia\ObjectFactory;
 
 /**
@@ -43,165 +54,180 @@ use Wikimedia\ObjectFactory;
  * SpecialPageFactory::$list. To remove a core static special page at runtime, use
  * a SpecialPage_initList hook.
  *
+ * @note There are two classes called SpecialPageFactory.  You should use this first one, in
+ * namespace MediaWiki\Special, which is a service.  \SpecialPageFactory is a deprecated collection
+ * of static methods that forwards to the global service.
+ *
  * @ingroup SpecialPage
  * @since 1.17
  */
 class SpecialPageFactory {
        /**
         * List of special page names to the subclass of SpecialPage which handles them.
+        * @todo Make this a const when we drop HHVM support (T192166).  It can still be private in PHP
+        * 7.1.
         */
        private static $coreList = [
                // Maintenance Reports
-               'BrokenRedirects' => BrokenRedirectsPage::class,
-               'Deadendpages' => DeadendPagesPage::class,
-               'DoubleRedirects' => DoubleRedirectsPage::class,
-               'Longpages' => LongPagesPage::class,
-               'Ancientpages' => AncientPagesPage::class,
-               'Lonelypages' => LonelyPagesPage::class,
-               'Fewestrevisions' => FewestrevisionsPage::class,
-               'Withoutinterwiki' => WithoutInterwikiPage::class,
-               'Protectedpages' => SpecialProtectedpages::class,
-               'Protectedtitles' => SpecialProtectedtitles::class,
-               'Shortpages' => ShortPagesPage::class,
-               'Uncategorizedcategories' => UncategorizedCategoriesPage::class,
-               'Uncategorizedimages' => UncategorizedImagesPage::class,
-               'Uncategorizedpages' => UncategorizedPagesPage::class,
-               'Uncategorizedtemplates' => UncategorizedTemplatesPage::class,
-               'Unusedcategories' => UnusedCategoriesPage::class,
-               'Unusedimages' => UnusedimagesPage::class,
-               'Unusedtemplates' => UnusedtemplatesPage::class,
-               'Unwatchedpages' => UnwatchedpagesPage::class,
-               'Wantedcategories' => WantedCategoriesPage::class,
-               'Wantedfiles' => WantedFilesPage::class,
-               'Wantedpages' => WantedPagesPage::class,
-               'Wantedtemplates' => WantedTemplatesPage::class,
+               'BrokenRedirects' => \BrokenRedirectsPage::class,
+               'Deadendpages' => \DeadendPagesPage::class,
+               'DoubleRedirects' => \DoubleRedirectsPage::class,
+               'Longpages' => \LongPagesPage::class,
+               'Ancientpages' => \AncientPagesPage::class,
+               'Lonelypages' => \LonelyPagesPage::class,
+               'Fewestrevisions' => \FewestrevisionsPage::class,
+               'Withoutinterwiki' => \WithoutInterwikiPage::class,
+               'Protectedpages' => \SpecialProtectedpages::class,
+               'Protectedtitles' => \SpecialProtectedtitles::class,
+               'Shortpages' => \ShortPagesPage::class,
+               'Uncategorizedcategories' => \UncategorizedCategoriesPage::class,
+               'Uncategorizedimages' => \UncategorizedImagesPage::class,
+               'Uncategorizedpages' => \UncategorizedPagesPage::class,
+               'Uncategorizedtemplates' => \UncategorizedTemplatesPage::class,
+               'Unusedcategories' => \UnusedCategoriesPage::class,
+               'Unusedimages' => \UnusedimagesPage::class,
+               'Unusedtemplates' => \UnusedtemplatesPage::class,
+               'Unwatchedpages' => \UnwatchedpagesPage::class,
+               'Wantedcategories' => \WantedCategoriesPage::class,
+               'Wantedfiles' => \WantedFilesPage::class,
+               'Wantedpages' => \WantedPagesPage::class,
+               'Wantedtemplates' => \WantedTemplatesPage::class,
 
                // List of pages
-               'Allpages' => SpecialAllPages::class,
-               'Prefixindex' => SpecialPrefixindex::class,
-               'Categories' => SpecialCategories::class,
-               'Listredirects' => ListredirectsPage::class,
-               'PagesWithProp' => SpecialPagesWithProp::class,
-               'TrackingCategories' => SpecialTrackingCategories::class,
+               'Allpages' => \SpecialAllPages::class,
+               'Prefixindex' => \SpecialPrefixindex::class,
+               'Categories' => \SpecialCategories::class,
+               'Listredirects' => \ListredirectsPage::class,
+               'PagesWithProp' => \SpecialPagesWithProp::class,
+               'TrackingCategories' => \SpecialTrackingCategories::class,
 
                // Authentication
-               'Userlogin' => SpecialUserLogin::class,
-               'Userlogout' => SpecialUserLogout::class,
-               'CreateAccount' => SpecialCreateAccount::class,
-               'LinkAccounts' => SpecialLinkAccounts::class,
-               'UnlinkAccounts' => SpecialUnlinkAccounts::class,
-               'ChangeCredentials' => SpecialChangeCredentials::class,
-               'RemoveCredentials' => SpecialRemoveCredentials::class,
+               'Userlogin' => \SpecialUserLogin::class,
+               'Userlogout' => \SpecialUserLogout::class,
+               'CreateAccount' => \SpecialCreateAccount::class,
+               'LinkAccounts' => \SpecialLinkAccounts::class,
+               'UnlinkAccounts' => \SpecialUnlinkAccounts::class,
+               'ChangeCredentials' => \SpecialChangeCredentials::class,
+               'RemoveCredentials' => \SpecialRemoveCredentials::class,
 
                // Users and rights
-               'Activeusers' => SpecialActiveUsers::class,
-               'Block' => SpecialBlock::class,
-               'Unblock' => SpecialUnblock::class,
-               'BlockList' => SpecialBlockList::class,
-               'AutoblockList' => SpecialAutoblockList::class,
-               'ChangePassword' => SpecialChangePassword::class,
-               'BotPasswords' => SpecialBotPasswords::class,
-               'PasswordReset' => SpecialPasswordReset::class,
-               'DeletedContributions' => DeletedContributionsPage::class,
-               'Preferences' => SpecialPreferences::class,
-               'ResetTokens' => SpecialResetTokens::class,
-               'Contributions' => SpecialContributions::class,
-               'Listgrouprights' => SpecialListGroupRights::class,
-               'Listgrants' => SpecialListGrants::class,
-               'Listusers' => SpecialListUsers::class,
-               'Listadmins' => SpecialListAdmins::class,
-               'Listbots' => SpecialListBots::class,
-               'Userrights' => UserrightsPage::class,
-               'EditWatchlist' => SpecialEditWatchlist::class,
-               'PasswordPolicies' => SpecialPasswordPolicies::class,
+               'Activeusers' => \SpecialActiveUsers::class,
+               'Block' => \SpecialBlock::class,
+               'Unblock' => \SpecialUnblock::class,
+               'BlockList' => \SpecialBlockList::class,
+               'AutoblockList' => \SpecialAutoblockList::class,
+               'ChangePassword' => \SpecialChangePassword::class,
+               'BotPasswords' => \SpecialBotPasswords::class,
+               'PasswordReset' => \SpecialPasswordReset::class,
+               'DeletedContributions' => \DeletedContributionsPage::class,
+               'Preferences' => \SpecialPreferences::class,
+               'ResetTokens' => \SpecialResetTokens::class,
+               'Contributions' => \SpecialContributions::class,
+               'Listgrouprights' => \SpecialListGroupRights::class,
+               'Listgrants' => \SpecialListGrants::class,
+               'Listusers' => \SpecialListUsers::class,
+               'Listadmins' => \SpecialListAdmins::class,
+               'Listbots' => \SpecialListBots::class,
+               'Userrights' => \UserrightsPage::class,
+               'EditWatchlist' => \SpecialEditWatchlist::class,
+               'PasswordPolicies' => \SpecialPasswordPolicies::class,
 
                // Recent changes and logs
-               'Newimages' => SpecialNewFiles::class,
-               'Log' => SpecialLog::class,
-               'Watchlist' => SpecialWatchlist::class,
-               'Newpages' => SpecialNewpages::class,
-               'Recentchanges' => SpecialRecentChanges::class,
-               'Recentchangeslinked' => SpecialRecentChangesLinked::class,
-               'Tags' => SpecialTags::class,
+               'Newimages' => \SpecialNewFiles::class,
+               'Log' => \SpecialLog::class,
+               'Watchlist' => \SpecialWatchlist::class,
+               'Newpages' => \SpecialNewpages::class,
+               'Recentchanges' => \SpecialRecentChanges::class,
+               'Recentchangeslinked' => \SpecialRecentChangesLinked::class,
+               'Tags' => \SpecialTags::class,
 
                // Media reports and uploads
-               'Listfiles' => SpecialListFiles::class,
-               'Filepath' => SpecialFilepath::class,
-               'MediaStatistics' => MediaStatisticsPage::class,
-               'MIMEsearch' => MIMEsearchPage::class,
-               'FileDuplicateSearch' => FileDuplicateSearchPage::class,
-               'Upload' => SpecialUpload::class,
-               'UploadStash' => SpecialUploadStash::class,
-               'ListDuplicatedFiles' => ListDuplicatedFilesPage::class,
+               'Listfiles' => \SpecialListFiles::class,
+               'Filepath' => \SpecialFilepath::class,
+               'MediaStatistics' => \MediaStatisticsPage::class,
+               'MIMEsearch' => \MIMEsearchPage::class,
+               'FileDuplicateSearch' => \FileDuplicateSearchPage::class,
+               'Upload' => \SpecialUpload::class,
+               'UploadStash' => \SpecialUploadStash::class,
+               'ListDuplicatedFiles' => \ListDuplicatedFilesPage::class,
 
                // Data and tools
-               'ApiSandbox' => SpecialApiSandbox::class,
-               'Statistics' => SpecialStatistics::class,
-               'Allmessages' => SpecialAllMessages::class,
-               'Version' => SpecialVersion::class,
-               'Lockdb' => SpecialLockdb::class,
-               'Unlockdb' => SpecialUnlockdb::class,
+               'ApiSandbox' => \SpecialApiSandbox::class,
+               'Statistics' => \SpecialStatistics::class,
+               'Allmessages' => \SpecialAllMessages::class,
+               'Version' => \SpecialVersion::class,
+               'Lockdb' => \SpecialLockdb::class,
+               'Unlockdb' => \SpecialUnlockdb::class,
 
                // Redirecting special pages
-               'LinkSearch' => LinkSearchPage::class,
-               'Randompage' => RandomPage::class,
-               'RandomInCategory' => SpecialRandomInCategory::class,
-               'Randomredirect' => SpecialRandomredirect::class,
-               'Randomrootpage' => SpecialRandomrootpage::class,
-               'GoToInterwiki' => SpecialGoToInterwiki::class,
+               'LinkSearch' => \LinkSearchPage::class,
+               'Randompage' => \RandomPage::class,
+               'RandomInCategory' => \SpecialRandomInCategory::class,
+               'Randomredirect' => \SpecialRandomredirect::class,
+               'Randomrootpage' => \SpecialRandomrootpage::class,
+               'GoToInterwiki' => \SpecialGoToInterwiki::class,
 
                // High use pages
-               'Mostlinkedcategories' => MostlinkedCategoriesPage::class,
-               'Mostimages' => MostimagesPage::class,
-               'Mostinterwikis' => MostinterwikisPage::class,
-               'Mostlinked' => MostlinkedPage::class,
-               'Mostlinkedtemplates' => MostlinkedTemplatesPage::class,
-               'Mostcategories' => MostcategoriesPage::class,
-               'Mostrevisions' => MostrevisionsPage::class,
+               'Mostlinkedcategories' => \MostlinkedCategoriesPage::class,
+               'Mostimages' => \MostimagesPage::class,
+               'Mostinterwikis' => \MostinterwikisPage::class,
+               'Mostlinked' => \MostlinkedPage::class,
+               'Mostlinkedtemplates' => \MostlinkedTemplatesPage::class,
+               'Mostcategories' => \MostcategoriesPage::class,
+               'Mostrevisions' => \MostrevisionsPage::class,
 
                // Page tools
-               'ComparePages' => SpecialComparePages::class,
-               'Export' => SpecialExport::class,
-               'Import' => SpecialImport::class,
-               'Undelete' => SpecialUndelete::class,
-               'Whatlinkshere' => SpecialWhatLinksHere::class,
-               'MergeHistory' => SpecialMergeHistory::class,
-               'ExpandTemplates' => SpecialExpandTemplates::class,
+               'ComparePages' => \SpecialComparePages::class,
+               'Export' => \SpecialExport::class,
+               'Import' => \SpecialImport::class,
+               'Undelete' => \SpecialUndelete::class,
+               'Whatlinkshere' => \SpecialWhatLinksHere::class,
+               'MergeHistory' => \SpecialMergeHistory::class,
+               'ExpandTemplates' => \SpecialExpandTemplates::class,
 
                // Other
-               'Booksources' => SpecialBookSources::class,
+               'Booksources' => \SpecialBookSources::class,
 
                // Unlisted / redirects
-               'ApiHelp' => SpecialApiHelp::class,
-               'Blankpage' => SpecialBlankpage::class,
-               'Diff' => SpecialDiff::class,
-               'EditTags' => SpecialEditTags::class,
-               'Emailuser' => SpecialEmailUser::class,
-               'Movepage' => MovePageForm::class,
-               'Mycontributions' => SpecialMycontributions::class,
-               'MyLanguage' => SpecialMyLanguage::class,
-               'Mypage' => SpecialMypage::class,
-               'Mytalk' => SpecialMytalk::class,
-               'Myuploads' => SpecialMyuploads::class,
-               'AllMyUploads' => SpecialAllMyUploads::class,
-               'PermanentLink' => SpecialPermanentLink::class,
-               'Redirect' => SpecialRedirect::class,
-               'Revisiondelete' => SpecialRevisionDelete::class,
-               'RunJobs' => SpecialRunJobs::class,
-               'Specialpages' => SpecialSpecialpages::class,
-               'PageData' => SpecialPageData::class,
+               'ApiHelp' => \SpecialApiHelp::class,
+               'Blankpage' => \SpecialBlankpage::class,
+               'Diff' => \SpecialDiff::class,
+               'EditTags' => \SpecialEditTags::class,
+               'Emailuser' => \SpecialEmailUser::class,
+               'Movepage' => \MovePageForm::class,
+               'Mycontributions' => \SpecialMycontributions::class,
+               'MyLanguage' => \SpecialMyLanguage::class,
+               'Mypage' => \SpecialMypage::class,
+               'Mytalk' => \SpecialMytalk::class,
+               'Myuploads' => \SpecialMyuploads::class,
+               'AllMyUploads' => \SpecialAllMyUploads::class,
+               'PermanentLink' => \SpecialPermanentLink::class,
+               'Redirect' => \SpecialRedirect::class,
+               'Revisiondelete' => \SpecialRevisionDelete::class,
+               'RunJobs' => \SpecialRunJobs::class,
+               'Specialpages' => \SpecialSpecialpages::class,
+               'PageData' => \SpecialPageData::class,
        ];
 
-       private static $list;
-       private static $aliases;
+       /** @var array Special page name => class name */
+       private $list;
+
+       /** @var array */
+       private $aliases;
+
+       /** @var Config */
+       private $config;
+
+       /** @var Language */
+       private $contLang;
 
        /**
-        * Reset the internal list of special pages. Useful when changing $wgSpecialPages after
-        * the internal list has already been initialized, e.g. during testing.
+        * @param Config $config
+        * @param Language $contLang
         */
-       public static function resetList() {
-               self::$list = null;
-               self::$aliases = null;
+       public function __construct( Config $config, Language $contLang ) {
+               $this->config = $config;
+               $this->contLang = $contLang;
        }
 
        /**
@@ -210,8 +236,8 @@ class SpecialPageFactory {
         *
         * @return string[]
         */
-       public static function getNames() {
-               return array_keys( self::getPageList() );
+       public function getNames() : array {
+               return array_keys( $this->getPageList() );
        }
 
        /**
@@ -219,49 +245,44 @@ class SpecialPageFactory {
         *
         * @return array
         */
-       private static function getPageList() {
-               global $wgSpecialPages;
-               global $wgDisableInternalSearch, $wgEmailAuthentication;
-               global $wgEnableEmail, $wgEnableJavaScriptTest;
-               global $wgPageLanguageUseDB, $wgContentHandlerUseDB;
-
-               if ( !is_array( self::$list ) ) {
-                       self::$list = self::$coreList;
+       private function getPageList() : array {
+               if ( !is_array( $this->list ) ) {
+                       $this->list = self::$coreList;
 
-                       if ( !$wgDisableInternalSearch ) {
-                               self::$list['Search'] = SpecialSearch::class;
+                       if ( !$this->config->get( 'DisableInternalSearch' ) ) {
+                               $this->list['Search'] = \SpecialSearch::class;
                        }
 
-                       if ( $wgEmailAuthentication ) {
-                               self::$list['Confirmemail'] = EmailConfirmation::class;
-                               self::$list['Invalidateemail'] = EmailInvalidation::class;
+                       if ( $this->config->get( 'EmailAuthentication' ) ) {
+                               $this->list['Confirmemail'] = \EmailConfirmation::class;
+                               $this->list['Invalidateemail'] = \EmailInvalidation::class;
                        }
 
-                       if ( $wgEnableEmail ) {
-                               self::$list['ChangeEmail'] = SpecialChangeEmail::class;
+                       if ( $this->config->get( 'EnableEmail' ) ) {
+                               $this->list['ChangeEmail'] = \SpecialChangeEmail::class;
                        }
 
-                       if ( $wgEnableJavaScriptTest ) {
-                               self::$list['JavaScriptTest'] = SpecialJavaScriptTest::class;
+                       if ( $this->config->get( 'EnableJavaScriptTest' ) ) {
+                               $this->list['JavaScriptTest'] = \SpecialJavaScriptTest::class;
                        }
 
-                       if ( $wgPageLanguageUseDB ) {
-                               self::$list['PageLanguage'] = SpecialPageLanguage::class;
+                       if ( $this->config->get( 'PageLanguageUseDB' ) ) {
+                               $this->list['PageLanguage'] = \SpecialPageLanguage::class;
                        }
-                       if ( $wgContentHandlerUseDB ) {
-                               self::$list['ChangeContentModel'] = SpecialChangeContentModel::class;
+                       if ( $this->config->get( 'ContentHandlerUseDB' ) ) {
+                               $this->list['ChangeContentModel'] = \SpecialChangeContentModel::class;
                        }
 
                        // Add extension special pages
-                       self::$list = array_merge( self::$list, $wgSpecialPages );
+                       $this->list = array_merge( $this->list, $this->config->get( 'SpecialPages' ) );
 
                        // This hook can be used to disable unwanted core special pages
                        // or conditionally register special pages.
-                       Hooks::run( 'SpecialPage_initList', [ &self::$list ] );
+                       Hooks::run( 'SpecialPage_initList', [ &$this->list ] );
 
                }
 
-               return self::$list;
+               return $this->list;
        }
 
        /**
@@ -270,19 +291,18 @@ class SpecialPageFactory {
         * All registered special pages are guaranteed to map to themselves.
         * @return array
         */
-       private static function getAliasList() {
-               $contLang = MediaWikiServices::getInstance()->getContentLanguage();
-               if ( is_null( self::$aliases ) ) {
-                       $aliases = $contLang->getSpecialPageAliases();
-                       $pageList = self::getPageList();
+       private function getAliasList() : array {
+               if ( is_null( $this->aliases ) ) {
+                       $aliases = $this->contLang->getSpecialPageAliases();
+                       $pageList = $this->getPageList();
 
-                       self::$aliases = [];
+                       $this->aliases = [];
                        $keepAlias = [];
 
                        // Force every canonical name to be an alias for itself.
                        foreach ( $pageList as $name => $stuff ) {
-                               $caseFoldedAlias = $contLang->caseFold( $name );
-                               self::$aliases[$caseFoldedAlias] = $name;
+                               $caseFoldedAlias = $this->contLang->caseFold( $name );
+                               $this->aliases[$caseFoldedAlias] = $name;
                                $keepAlias[$caseFoldedAlias] = 'canonical';
                        }
 
@@ -291,24 +311,24 @@ class SpecialPageFactory {
                                foreach ( $aliases as $realName => $aliasList ) {
                                        $aliasList = array_values( $aliasList );
                                        foreach ( $aliasList as $i => $alias ) {
-                                               $caseFoldedAlias = $contLang->caseFold( $alias );
+                                               $caseFoldedAlias = $this->contLang->caseFold( $alias );
 
-                                               if ( isset( self::$aliases[$caseFoldedAlias] ) &&
-                                                       $realName === self::$aliases[$caseFoldedAlias]
+                                               if ( isset( $this->aliases[$caseFoldedAlias] ) &&
+                                                       $realName === $this->aliases[$caseFoldedAlias]
                                                ) {
                                                        // Ignore same-realName conflicts
                                                        continue;
                                                }
 
                                                if ( !isset( $keepAlias[$caseFoldedAlias] ) ) {
-                                                       self::$aliases[$caseFoldedAlias] = $realName;
+                                                       $this->aliases[$caseFoldedAlias] = $realName;
                                                        if ( !$i ) {
                                                                $keepAlias[$caseFoldedAlias] = 'first';
                                                        }
                                                } elseif ( !$i ) {
                                                        wfWarn( "First alias '$alias' for $realName conflicts with " .
                                                                "{$keepAlias[$caseFoldedAlias]} alias for " .
-                                                               self::$aliases[$caseFoldedAlias]
+                                                               $this->aliases[$caseFoldedAlias]
                                                        );
                                                }
                                        }
@@ -316,7 +336,7 @@ class SpecialPageFactory {
                        }
                }
 
-               return self::$aliases;
+               return $this->aliases;
        }
 
        /**
@@ -327,13 +347,12 @@ class SpecialPageFactory {
         * @param string $alias
         * @return array Array( String, String|null ), or array( null, null ) if the page is invalid
         */
-       public static function resolveAlias( $alias ) {
+       public function resolveAlias( $alias ) {
                $bits = explode( '/', $alias, 2 );
 
-               $caseFoldedAlias = MediaWikiServices::getInstance()->getContentLanguage()->
-                       caseFold( $bits[0] );
+               $caseFoldedAlias = $this->contLang->caseFold( $bits[0] );
                $caseFoldedAlias = str_replace( ' ', '_', $caseFoldedAlias );
-               $aliases = self::getAliasList();
+               $aliases = $this->getAliasList();
                if ( isset( $aliases[$caseFoldedAlias] ) ) {
                        $name = $aliases[$caseFoldedAlias];
                } else {
@@ -355,10 +374,10 @@ class SpecialPageFactory {
         * @param string $name Name of a special page
         * @return bool True if a special page exists with this name
         */
-       public static function exists( $name ) {
-               list( $title, /*...*/ ) = self::resolveAlias( $name );
+       public function exists( $name ) {
+               list( $title, /*...*/ ) = $this->resolveAlias( $name );
 
-               $specialPageList = self::getPageList();
+               $specialPageList = $this->getPageList();
                return isset( $specialPageList[$title] );
        }
 
@@ -368,17 +387,17 @@ class SpecialPageFactory {
         * @param string $name Special page name, may be localised and/or an alias
         * @return SpecialPage|null SpecialPage object or null if the page doesn't exist
         */
-       public static function getPage( $name ) {
-               list( $realName, /*...*/ ) = self::resolveAlias( $name );
+       public function getPage( $name ) {
+               list( $realName, /*...*/ ) = $this->resolveAlias( $name );
 
-               $specialPageList = self::getPageList();
+               $specialPageList = $this->getPageList();
 
                if ( isset( $specialPageList[$realName] ) ) {
                        $rec = $specialPageList[$realName];
 
                        if ( is_callable( $rec ) ) {
                                // Use callback to instantiate the special page
-                               $page = call_user_func( $rec );
+                               $page = $rec();
                        } elseif ( is_string( $rec ) ) {
                                $className = $rec;
                                $page = new $className;
@@ -416,18 +435,14 @@ class SpecialPageFactory {
         * Return categorised listable special pages which are available
         * for the current user, and everyone.
         *
-        * @param User|null $user User object to check permissions, $wgUser will be used
-        *        if not provided
+        * @param User $user User object to check permissions
+        *  provided
         * @return array ( string => Specialpage )
         */
-       public static function getUsablePages( User $user = null ) {
+       public function getUsablePages( User $user ) : array {
                $pages = [];
-               if ( $user === null ) {
-                       global $wgUser;
-                       $user = $wgUser;
-               }
-               foreach ( self::getPageList() as $name => $rec ) {
-                       $page = self::getPage( $name );
+               foreach ( $this->getPageList() as $name => $rec ) {
+                       $page = $this->getPage( $name );
                        if ( $page ) { // not null
                                $page->setContext( RequestContext::getMain() );
                                if ( $page->isListed()
@@ -446,10 +461,10 @@ class SpecialPageFactory {
         *
         * @return array ( string => Specialpage )
         */
-       public static function getRegularPages() {
+       public function getRegularPages() : array {
                $pages = [];
-               foreach ( self::getPageList() as $name => $rec ) {
-                       $page = self::getPage( $name );
+               foreach ( $this->getPageList() as $name => $rec ) {
+                       $page = $this->getPage( $name );
                        if ( $page && $page->isListed() && !$page->isRestricted() ) {
                                $pages[$name] = $page;
                        }
@@ -462,17 +477,13 @@ class SpecialPageFactory {
         * Return categorised listable special pages which are available
         * for the current user, but not for everyone
         *
-        * @param User|null $user User object to use or null for $wgUser
+        * @param User $user User object to use
         * @return array ( string => Specialpage )
         */
-       public static function getRestrictedPages( User $user = null ) {
+       public function getRestrictedPages( User $user ) : array {
                $pages = [];
-               if ( $user === null ) {
-                       global $wgUser;
-                       $user = $wgUser;
-               }
-               foreach ( self::getPageList() as $name => $rec ) {
-                       $page = self::getPage( $name );
+               foreach ( $this->getPageList() as $name => $rec ) {
+                       $page = $this->getPage( $name );
                        if ( $page
                                && $page->isListed()
                                && $page->isRestricted()
@@ -500,7 +511,7 @@ class SpecialPageFactory {
         *
         * @return bool|Title
         */
-       public static function executePath( Title &$title, IContextSource &$context, $including = false,
+       public function executePath( Title &$title, IContextSource &$context, $including = false,
                LinkRenderer $linkRenderer = null
        ) {
                // @todo FIXME: Redirects broken due to this call
@@ -512,7 +523,7 @@ class SpecialPageFactory {
                        $par = $bits[1];
                }
 
-               $page = self::getPage( $name );
+               $page = $this->getPage( $name );
                if ( !$page ) {
                        $context->getOutput()->setArticleRelated( false );
                        $context->getOutput()->setRobotPolicy( 'noindex,nofollow' );
@@ -587,7 +598,7 @@ class SpecialPageFactory {
         * @param LinkRenderer|null $linkRenderer (since 1.28)
         * @return string HTML fragment
         */
-       public static function capturePath(
+       public function capturePath(
                Title $title, IContextSource $context, LinkRenderer $linkRenderer = null
        ) {
                global $wgTitle, $wgOut, $wgRequest, $wgUser, $wgLang;
@@ -622,7 +633,7 @@ class SpecialPageFactory {
                $main->setLanguage( $context->getLanguage() );
 
                // The useful part
-               $ret = self::executePath( $title, $context, true, $linkRenderer );
+               $ret = $this->executePath( $title, $context, true, $linkRenderer );
 
                // Restore old globals and context
                $wgTitle = $glob['title'];
@@ -646,16 +657,15 @@ class SpecialPageFactory {
         * @param string|bool $subpage
         * @return string
         */
-       public static function getLocalNameFor( $name, $subpage = false ) {
-               $contLang = MediaWikiServices::getInstance()->getContentLanguage();
-               $aliases = $contLang->getSpecialPageAliases();
-               $aliasList = self::getAliasList();
+       public function getLocalNameFor( $name, $subpage = false ) {
+               $aliases = $this->contLang->getSpecialPageAliases();
+               $aliasList = $this->getAliasList();
 
                // Find the first alias that maps back to $name
                if ( isset( $aliases[$name] ) ) {
                        $found = false;
                        foreach ( $aliases[$name] as $alias ) {
-                               $caseFoldedAlias = $contLang->caseFold( $alias );
+                               $caseFoldedAlias = $this->contLang->caseFold( $alias );
                                $caseFoldedAlias = str_replace( ' ', '_', $caseFoldedAlias );
                                if ( isset( $aliasList[$caseFoldedAlias] ) &&
                                        $aliasList[$caseFoldedAlias] === $name
@@ -676,7 +686,7 @@ class SpecialPageFactory {
                                        if ( strcasecmp( $name, $n ) === 0 ) {
                                                wfWarn( "Found alias defined for $n when searching for " .
                                                        "special page aliases for $name. Case mismatch?" );
-                                               return self::getLocalNameFor( $n, $subpage );
+                                               return $this->getLocalNameFor( $n, $subpage );
                                        }
                                }
                        }
@@ -691,7 +701,7 @@ class SpecialPageFactory {
                        $name = "$name/$subpage";
                }
 
-               return $contLang->ucfirst( $name );
+               return $this->contLang->ucfirst( $name );
        }
 
        /**
@@ -700,8 +710,8 @@ class SpecialPageFactory {
         * @param string $alias
         * @return Title|null Title or null if there is no such alias
         */
-       public static function getTitleForAlias( $alias ) {
-               list( $name, $subpage ) = self::resolveAlias( $alias );
+       public function getTitleForAlias( $alias ) {
+               list( $name, $subpage ) = $this->resolveAlias( $alias );
                if ( $name != null ) {
                        return SpecialPage::getTitleFor( $name, $subpage );
                } else {
diff --git a/includes/specialpage/SpecialPageFactory_deprecated.php b/includes/specialpage/SpecialPageFactory_deprecated.php
new file mode 100644 (file)
index 0000000..bc0c250
--- /dev/null
@@ -0,0 +1,96 @@
+<?php
+/**
+ * Factory for handling the special page list and generating SpecialPage objects.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup SpecialPage
+ * @defgroup SpecialPage SpecialPage
+ */
+
+use MediaWiki\Linker\LinkRenderer;
+use MediaWiki\MediaWikiServices;
+
+// phpcs:disable MediaWiki.Files.ClassMatchesFilename.NotMatch
+/**
+ * Wrapper for backward compatibility for old callers that used static methods.
+ *
+ * @deprecated since 1.32, use the SpecialPageFactory service instead
+ */
+class SpecialPageFactory {
+       public static function getNames() : array {
+               return MediaWikiServices::getInstance()->getSpecialPageFactory()->getNames();
+       }
+
+       public static function resolveAlias( $alias ) : array {
+               return MediaWikiServices::getInstance()->getSpecialPageFactory()->resolveAlias( $alias );
+       }
+
+       public static function exists( $name ) {
+               return MediaWikiServices::getInstance()->getSpecialPageFactory()->exists( $name );
+       }
+
+       public static function getPage( $name ) {
+               return MediaWikiServices::getInstance()->getSpecialPageFactory()->getPage( $name );
+       }
+
+       public static function getUsablePages( User $user = null ) : array {
+               global $wgUser;
+               $user = $user ?? $wgUser;
+               return MediaWikiServices::getInstance()->getSpecialPageFactory()->getUsablePages( $user );
+       }
+
+       public static function getRegularPages() : array {
+               return MediaWikiServices::getInstance()->getSpecialPageFactory()->getRegularPages();
+       }
+
+       public static function getRestrictedPages( User $user = null ) : array {
+               global $wgUser;
+               $user = $user ?? $wgUser;
+               return MediaWikiServices::getInstance()->getSpecialPageFactory()->getRestrictedPages( $user );
+       }
+
+       public static function executePath( Title &$title, IContextSource &$context, $including = false,
+               LinkRenderer $linkRenderer = null
+       ) {
+               return MediaWikiServices::getInstance()->getSpecialPageFactory()
+                       ->executePath( $title, $context, $including, $linkRenderer );
+       }
+
+       public static function capturePath(
+               Title $title, IContextSource $context, LinkRenderer $linkRenderer = null
+       ) {
+               return MediaWikiServices::getInstance()->getSpecialPageFactory()
+                       ->capturePath( $title, $context, $linkRenderer );
+       }
+
+       public static function getLocalNameFor( $name, $subpage = false ) {
+               return MediaWikiServices::getInstance()->getSpecialPageFactory()
+                       ->getLocalNameFor( $name, $subpage );
+       }
+
+       public static function getTitleForAlias( $alias ) {
+               return MediaWikiServices::getInstance()->getSpecialPageFactory()
+                       ->getTitleForAlias( $alias );
+       }
+
+       /**
+        * No-op since 1.32, call overrideMwServices() instead
+        */
+       public static function resetList() {
+       }
+}
index 7013e40..083b3c0 100644 (file)
@@ -573,6 +573,7 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
                if ( count( $fields ) > 1 && $count > 30 ) {
                        $this->toc = Linker::tocIndent();
                        $tocLength = 0;
+                       $contLang = MediaWikiServices::getInstance()->getContentLanguage();
 
                        foreach ( $fields as $data ) {
                                # strip out the 'ns' prefix from the section name:
@@ -580,8 +581,7 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
 
                                $nsText = ( $ns == NS_MAIN )
                                        ? $this->msg( 'blanknamespace' )->escaped()
-                                       : htmlspecialchars( MediaWikiServices::getInstance()->getContentLanguage()->
-                                               getFormattedNsText( $ns ) );
+                                       : htmlspecialchars( $contLang->getFormattedNsText( $ns ) );
                                $this->toc .= Linker::tocLine( "editwatchlist-{$data['section']}", $nsText,
                                        $this->getLanguage()->formatNum( ++$tocLength ), 1 ) . Linker::tocLineEnd();
                        }
index 4407259..ac10c2f 100644 (file)
@@ -418,7 +418,7 @@ class SpecialExport extends SpecialPage {
 
        /**
         * @param Title $title
-        * @return array
+        * @return string[]
         */
        private function getPagesFromCategory( $title ) {
                $maxPages = $this->getConfig()->get( 'ExportPagelistLimit' );
@@ -437,14 +437,7 @@ class SpecialExport extends SpecialPage {
                $pages = [];
 
                foreach ( $res as $row ) {
-                       $n = $row->page_title;
-                       if ( $row->page_namespace ) {
-                               $ns = MediaWikiServices::getInstance()->getContentLanguage()->getNsText(
-                                       $row->page_namespace );
-                               $n = $ns . ':' . $n;
-                       }
-
-                       $pages[] = $n;
+                       $pages[] = Title::makeName( $row->page_title, $row->page_namespace );
                }
 
                return $pages;
@@ -452,7 +445,7 @@ class SpecialExport extends SpecialPage {
 
        /**
         * @param int $nsindex
-        * @return array
+        * @return string[]
         */
        private function getPagesFromNamespace( $nsindex ) {
                $maxPages = $this->getConfig()->get( 'ExportPagelistLimit' );
@@ -469,15 +462,7 @@ class SpecialExport extends SpecialPage {
                $pages = [];
 
                foreach ( $res as $row ) {
-                       $n = $row->page_title;
-
-                       if ( $row->page_namespace ) {
-                               $ns = MediaWikiServices::getInstance()->getContentLanguage()->getNsText(
-                                       $row->page_namespace );
-                               $n = $ns . ':' . $n;
-                       }
-
-                       $pages[] = $n;
+                       $pages[] = Title::makeName( $row->page_title, $row->page_namespace );
                }
 
                return $pages;
index f858f5c..87bd2ed 100644 (file)
@@ -142,7 +142,7 @@ class SpecialJavaScriptTest extends SpecialPage {
                // Things like "dependency missing" or "unknown module".
                // Re-throw so that they are reported as global exceptions by QUnit and Karma.
                setTimeout( function () {
-                       throw e;
+                       throw err;
                } );
        } );
 JAVASCRIPT
index 8802a38..1d10791 100644 (file)
@@ -162,16 +162,17 @@ class SpecialListGroupRights extends SpecialPage {
                );
                $linkRenderer = $this->getLinkRenderer();
                ksort( $namespaceProtection );
+               $validNamespaces = MWNamespace::getValidNamespaces();
+               $contLang = MediaWikiServices::getInstance()->getContentLanguage();
                foreach ( $namespaceProtection as $namespace => $rights ) {
-                       if ( !in_array( $namespace, MWNamespace::getValidNamespaces() ) ) {
+                       if ( !in_array( $namespace, $validNamespaces ) ) {
                                continue;
                        }
 
                        if ( $namespace == NS_MAIN ) {
                                $namespaceText = $this->msg( 'blanknamespace' )->text();
                        } else {
-                               $namespaceText = MediaWikiServices::getInstance()->getContentLanguage()->
-                                       convertNamespace( $namespace );
+                               $namespaceText = $contLang->convertNamespace( $namespace );
                        }
 
                        $out->addHTML(
index 2160312..d700c39 100644 (file)
@@ -64,8 +64,6 @@ class SpecialLog extends SpecialPage {
                $dateString = $this->getRequest()->getVal( 'wpdate' );
                if ( !empty( $dateString ) ) {
                        $dateStamp = MWTimestamp::getInstance( $dateString . ' 00:00:00' );
-                       $dateStamp->setTimezone( $this->getConfig()->get( 'Localtimezone' ) );
-
                        $opts->setValue( 'year', (int)$dateStamp->format( 'Y' ) );
                        $opts->setValue( 'month', (int)$dateStamp->format( 'm' ) );
                        $opts->setValue( 'day', (int)$dateStamp->format( 'd' ) );
index 78a54f5..513d276 100644 (file)
@@ -709,9 +709,10 @@ class SpecialSearch extends SpecialPage {
         */
        public function getSearchEngine() {
                if ( $this->searchEngine === null ) {
+                       $services = MediaWikiServices::getInstance();
                        $this->searchEngine = $this->searchEngineType ?
-                               MediaWikiServices::getInstance()->getSearchEngineFactory()->create( $this->searchEngineType ) :
-                               MediaWikiServices::getInstance()->newSearchEngine();
+                               $services->getSearchEngineFactory()->create( $this->searchEngineType ) :
+                               $services->newSearchEngine();
                }
 
                return $this->searchEngine;
index 4f29082..00aa543 100644 (file)
@@ -21,6 +21,8 @@
  * @ingroup SpecialPage
  */
 
+use MediaWiki\MediaWikiServices;
+
 /**
  * A special page that lists special pages
  *
@@ -50,7 +52,8 @@ class SpecialSpecialpages extends UnlistedSpecialPage {
        }
 
        private function getPageGroups() {
-               $pages = SpecialPageFactory::getUsablePages( $this->getUser() );
+               $pages = MediaWikiServices::getInstance()->getSpecialPageFactory()->
+                       getUsablePages( $this->getUser() );
 
                if ( !count( $pages ) ) {
                        # Yeah, that was pointless. Thanks for coming.
index 5b48f4e..908183d 100644 (file)
@@ -493,9 +493,10 @@ class SpecialWatchlist extends ChangesListSpecialPage {
                $dbr = $this->getDB();
                $user = $this->getUser();
                $output = $this->getOutput();
+               $services = MediaWikiServices::getInstance();
 
                # Show a message about replica DB lag, if applicable
-               $lag = MediaWikiServices::getInstance()->getDBLoadBalancer()->safeGetLag( $dbr );
+               $lag = $services->getDBLoadBalancer()->safeGetLag( $dbr );
                if ( $lag > 0 ) {
                        $output->showLagWarning( $lag );
                }
@@ -535,7 +536,7 @@ class SpecialWatchlist extends ChangesListSpecialPage {
                if ( $this->getConfig()->get( 'RCShowWatchingUsers' )
                        && $user->getOption( 'shownumberswatching' )
                ) {
-                       $watchedItemStore = MediaWikiServices::getInstance()->getWatchedItemStore();
+                       $watchedItemStore = $services->getWatchedItemStore();
                }
 
                $s = $list->beginRecentChangesList();
index a00ef1e..15f8ff0 100644 (file)
@@ -112,18 +112,16 @@ class MediaWikiTitleCodec implements TitleFormatter, TitleParser {
         * @return string
         */
        public function formatTitle( $namespace, $text, $fragment = '', $interwiki = '' ) {
-               if ( $namespace !== false ) {
+               if ( $namespace !== 0 && $namespace !== false ) {
                        // Try to get a namespace name, but fallback
-                       // to empty string if it doesn't exist
+                       // to empty string if it doesn't exist. And
+                       // assume that ns 0 is the empty string.
                        try {
                                $nsName = $this->getNamespaceName( $namespace, $text );
                        } catch ( InvalidArgumentException $e ) {
                                $nsName = '';
                        }
-
-                       if ( $namespace !== 0 ) {
-                               $text = $nsName . ':' . $text;
-                       }
+                       $text = $nsName . ':' . $text;
                }
 
                if ( $fragment !== '' ) {
@@ -176,7 +174,7 @@ class MediaWikiTitleCodec implements TitleFormatter, TitleParser {
         * @return string $title->getText()
         */
        public function getText( LinkTarget $title ) {
-               return $this->formatTitle( false, $title->getText(), '' );
+               return $title->getText();
        }
 
        /**
index 4551d75..8859066 100644 (file)
@@ -50,7 +50,7 @@ interface TitleFormatter {
        /**
         * Returns the title text formatted for display, without namespace of fragment.
         *
-        * @note Only minimal normalization is applied. Consider using TitleValue::getText() directly.
+        * @note Consider using LinkTarget::getText() directly, it's identical.
         *
         * @param LinkTarget $title The title to format
         *
index 18e578d..43a399a 100644 (file)
@@ -158,7 +158,7 @@ class TitleValue implements LinkTarget {
         * @return string
         */
        public function getText() {
-               return str_replace( '_', ' ', $this->getDBkey() );
+               return str_replace( '_', ' ', $this->dbkey );
        }
 
        /**
index b4e3414..79380de 100644 (file)
@@ -65,12 +65,10 @@ class InterwikiSearchResultSetWidget implements SearchResultSetWidget {
 
                $iwResults = [];
                foreach ( $resultSets as $resultSet ) {
-                       $result = $resultSet->next();
-                       while ( $result ) {
+                       foreach ( $resultSet as $result ) {
                                if ( !$result->isBrokenTitle() ) {
                                        $iwResults[$result->getTitle()->getInterwiki()][] = $result;
                                }
-                               $result = $resultSet->next();
                        }
                }
 
index 735806b..7eb92fd 100644 (file)
@@ -238,14 +238,14 @@ class SearchFormWidget {
        protected function powerSearchBox( $term, array $opts ) {
                $rows = [];
                $activeNamespaces = $this->specialSearch->getNamespaces();
+               $langConverter = MediaWikiServices::getInstance()->getContentLanguage()->getConverter();
                foreach ( $this->searchConfig->searchableNamespaces() as $namespace => $name ) {
                        $subject = MWNamespace::getSubject( $namespace );
                        if ( !isset( $rows[$subject] ) ) {
                                $rows[$subject] = "";
                        }
 
-                       $name = MediaWikiServices::getInstance()->getContentLanguage()->getConverter()->
-                               convertNamespace( $namespace );
+                       $name = $langConverter->convertNamespace( $namespace );
                        if ( $name === '' ) {
                                $name = $this->specialSearch->msg( 'blanknamespace' )->text();
                        }
index 28473aa..6e96945 100644 (file)
@@ -13,7 +13,6 @@
                "resources/src/jquery.tablesorter",
                "resources/src/jquery.tipsy",
                "resources/src/jquery/jquery.color.js",
-               "resources/src/jquery/jquery.expandableField.js",
                "resources/src/jquery/jquery.highlightText.js",
                "resources/src/jquery/jquery.mw-jump.js",
                "resources/src/mediawiki.legacy",
index dfbacfc..eab09a1 100644 (file)
@@ -3014,7 +3014,7 @@ class Language {
         *
         * @return string
         */
-       function normalize( $s ) {
+       public function normalize( $s ) {
                global $wgAllUnicodeFixes;
                $s = UtfNormal\Validator::cleanUp( $s );
                if ( $wgAllUnicodeFixes ) {
index efdf5a2..f2ce178 100644 (file)
@@ -40,7 +40,7 @@ class LanguageAr extends Language {
         *
         * @return string
         */
-       function normalize( $s ) {
+       public function normalize( $s ) {
                global $wgFixArabicUnicode;
                $s = parent::normalize( $s );
                if ( $wgFixArabicUnicode ) {
index cf45762..176c64c 100644 (file)
@@ -41,7 +41,7 @@ class LanguageMl extends Language {
         *
         * @return string
         */
-       function normalize( $s ) {
+       public function normalize( $s ) {
                global $wgFixMalayalamUnicode;
                $s = parent::normalize( $s );
                if ( $wgFixMalayalamUnicode ) {
index 2422fa8..aaea4c7 100644 (file)
        "ns-specialprotected": "Les páxines especiales nun se puen editar.",
        "titleprotected": "Esti títulu ta protexíu escontra creación por [[User:$1|$1]].\nEl motivu conseñáu ye <em>$2</em>.",
        "filereadonlyerror": "Nun pudo camudase'l ficheru «$1» porque l'estoyu de ficheros «$2» ta en mou de sólo llectura.\n\nL'alministrador del sistema que lu bloquió dio esti motivu: «$3».",
+       "invalidtitle": "Títulu inválidu",
        "invalidtitle-knownnamespace": "Títulu inválidu col espaciu de nomes «$2» ya'l testu «$3»",
        "invalidtitle-unknownnamespace": "Títulu inválidu col númberu $1 d'espaciu de nomes desconocíu ya'l testu «$2»",
        "exception-nologin": "Nun aniciasti sesión",
        "filehist-filesize": "Tamañu del ficheru",
        "filehist-comment": "Comentariu",
        "imagelinks": "Usu del ficheru",
-       "linkstoimage": "{{PLURAL:$1|La páxina siguiente enllacia|Les páxines siguientes enllacien}} a esti ficheru:",
-       "linkstoimage-more": "Más de $1 {{PLURAL:$1|páxina enllacia|páxines enllacien}} a esti ficheru.\nLa llista siguiente amuesa{{PLURAL:$1|'l primer enllaz de páxina| los primeros $1 enllaces de páxina}} a esti ficheru namái.\nHai disponible una [[Special:WhatLinksHere/$2|llista completa]].",
-       "nolinkstoimage": "Nun hai páxines qu'enllacien a esti ficheru.",
+       "linkstoimage": "{{PLURAL:$1|La páxina siguiente usa|Les páxines siguientes usen}} esti ficheru:",
+       "linkstoimage-more": "Más de $1 {{PLURAL:$1|páxina usa|páxines usen}} esti ficheru.\nLa llista siguiente amuesa {{PLURAL:$1|la primer páxina qu'usa|les $1 primeres páxines qu'usen}} esti ficheru namái.\nHai disponible una [[Special:WhatLinksHere/$2|llista completa]].",
+       "nolinkstoimage": "Nun hai páxines qu'usen esti ficheru.",
        "morelinkstoimage": "Ver [[Special:WhatLinksHere/$1|más enllaces]] a esti ficheru.",
        "linkstoimage-redirect": "$1 (redireición de ficheru) $2",
        "duplicatesoffile": "{{PLURAL:$1|El siguiente ficheru ye un duplicáu|Los $1 ficheros siguientes son duplicaos}} d'esti ([[Special:FileDuplicateSearch/$2|más detalles]]):",
index 568b1c1..0c51bfe 100644 (file)
        "upload-form-label-infoform-date": "Дата",
        "upload-form-label-own-work-message-generic-local": "Я пацьвярджаю, што загружаю гэты файл згодна з правіламі і ліцэнзійнай палітыкай {{GRAMMAR:родны|{{SITENAME}}}}.",
        "upload-form-label-not-own-work-message-generic-local": "Калі вы ня можаце загрузіць файл у адпаведнасьці з правіламі {{GRAMMAR:родны|{{SITENAME}}}}, калі ласка, закрыйце гэтае акно і паспрабуйце іншы мэтад.",
-       "upload-form-label-not-own-work-local-generic-local": "Вы таксама можаце паспрабаваць [[Special:Upload|старонку загрузкі па змоўчаньні]].",
+       "upload-form-label-not-own-work-local-generic-local": "Вы таксама можаце паспрабаваць [[Special:Upload|стандартную старонку загрузкі]].",
        "upload-form-label-own-work-message-generic-foreign": "Я разумею, што загружаю гэты файл у агульнае сховішча. Я пацьвярджаю, што раблю гэта ў адпаведнасьці з умовамі выкарыстаньня і ліцэнзійнай палітыкай.",
        "upload-form-label-not-own-work-message-generic-foreign": "Калі вы ня можаце загрузіць гэты файл паводле правілаў агульнага сховішча, калі ласка, закрыйце гэты дыялёг і паспрабуйце іншы мэтад.",
        "upload-form-label-not-own-work-local-generic-foreign": "Вы можаце паспрабаваць скарыстацца [[Special:Upload|старонкай загрузкі {{GRAMMAR:родны|{{SITENAME}}}}]], калі гэты файл можна туды загрузіць згодна з правіламі.",
index 38f6b80..e9577e1 100644 (file)
        "ns-specialprotected": "No es poden modificar les pàgines especials.",
        "titleprotected": "La creació d'aquesta pàgina està protegida per [[User:$1|$1]].\nEls seus motius han estat: <em>$2</em>.",
        "filereadonlyerror": "No s'ha pogut modificar el fitxer «$1» perquè el repositori de fitxers «$2» està en mode només de lectura.\nL'administrador de sistema que l'ha blocat ha donat aquesta explicació: «$3».",
+       "invalidtitle": "Títol no vàlid",
        "invalidtitle-knownnamespace": "El títol amb l'espai de noms «$2» i text «$3» no és vàlid",
        "invalidtitle-unknownnamespace": "Títol no vàlid amb espai de noms desconegut de número «$1» i text «$2»",
        "exception-nologin": "No has iniciat sessió",
        "grouppage-bureaucrat": "{{ns:project}}:Buròcrates",
        "grouppage-suppress": "{{ns:project}}:Supressors de Flow",
        "right-read": "Llegir pàgines",
-       "right-edit": "Modificar pàgines",
+       "right-edit": "Modifica les pàgines",
        "right-createpage": "Crear pàgines (que no són de discussió)",
        "right-createtalk": "Crear pàgines de discussió",
        "right-createaccount": "Crear nous comptes",
        "rcfilters-savedqueries-defaultlabel": "Filtres desats",
        "rcfilters-savedqueries-rename": "Reanomena",
        "rcfilters-savedqueries-setdefault": "Defineix per defecte",
+       "rcfilters-savedqueries-unsetdefault": "Suprimeix per defecte",
        "rcfilters-savedqueries-remove": "Suprimeix",
        "rcfilters-savedqueries-new-name-label": "Nom",
        "rcfilters-savedqueries-new-name-placeholder": "Descriviu el propòsit del filtre",
        "speciallogtitlelabel": "Objectiu (títol o «{{ns:user}}:nom d’usuari» per a un usuari):",
        "log": "Registres",
        "logeventslist-submit": "Mostra",
-       "logeventslist-more-filters": "Més filtres:",
+       "logeventslist-more-filters": "Mostra els registres addicionals:",
+       "logeventslist-patrol-log": "Registre de patrulla",
        "logeventslist-tag-log": "Registre d'etiquetes",
        "all-logs-page": "Tots els registres públics",
        "alllogstext": "Presentació combinada de tots els registres disponibles de {{SITENAME}}.\nPodeu reduir l'extensió seleccionant el tipus de registre, el nom d'usuari realitzador (distingeix entre majúscules i minúscules), o la pàgina objectiu (també en distingeix).",
index 2913625..a74dd08 100644 (file)
        "diff-multi-sameuser": "(ца {{PLURAL:$1|гайтина юккъера цхьа верси|гайтина юккъера цхьа версеш}} оьцу декъашхочун)",
        "diff-multi-otherusers": "(ца {{PLURAL:$1|гайтина юккъера верси|гайтина юккъера версеш}} {{PLURAL:$2|кхин цхьан декъашхочун|$2 декъашхойн}})",
        "diff-multi-manyusers": "({{PLURAL:$1|гайтина яц $1 юккъера верси, йина|гайтина яц $1 юккъера версеш, йина}} {{PLURAL:$2|$2 декъашхочо|$2 декъашхоша}})",
+       "difference-missing-revision": "{{PLURAL:$2|Цакарий}} {{PLURAL:$2|$2 верси}} ($1) дустарна.\n\nИштта хуьлу хьажорг шира хилча, дӀаяьккхина йолу.\nМадарра хила мега [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} дӀадаьхнарш долу тéптар] чохь.",
        "searchresults": "Карийнарш",
        "searchresults-title": "Лахар «$1»",
        "titlematches": "АгӀонийн цӀерш цхьаьнанисялар",
        "group-autoconfirmed-member": "{{GENDER:$1|автотӀелаьцна декъашхо}}",
        "group-bot-member": "{{GENDER:$1|бот}}",
        "group-sysop-member": "{{GENDER:$1|куьйгалхо}}",
+       "group-interface-admin-member": "{{GENDER:$1|интерфейсан куьйгалхой}}",
        "group-bureaucrat-member": "{{GENDER:$1|бюрократхо}}",
        "group-suppress-member": "{{GENDER:$1|ревизор}}",
        "grouppage-user": "{{ns:project}}:Декъашхой",
        "grouppage-autoconfirmed": "{{ns:project}}:АвтотӀелаьцна декъашхой",
        "grouppage-bot": "{{ns:project}}:Боташ",
        "grouppage-sysop": "{{ns:project}}:Куьйгалхой",
+       "grouppage-interface-admin": "{{ns:project}}:Интерфейсан куьйгалхой",
        "grouppage-bureaucrat": "{{ns:project}}:Бюрократаш",
        "grouppage-suppress": "{{ns:project}}:Ревизораш",
        "right-read": "агӀонашка хьажар",
        "protectedtitles-submit": "Гайта кортош",
        "listusers": "Декъашхойн могӀам",
        "listusers-editsonly": "Цхаъ мукъане а хийцам бина декъашхой гайта",
+       "listusers-temporarygroupsonly": "Декъашхойн тобана, ханна юкъа тоьхна декъашхой гайта",
        "listusers-creationsort": "Кхоьллина хене хьаьжжина нисъяр",
        "listusers-desc": "Харжа кӀезиг хиларца",
        "usereditcount": "$1 {{PLURAL:$1|нисдар|нисдарш}}",
index 1c99d15..207ced9 100644 (file)
        "filehist-filesize": "Velikost souboru",
        "filehist-comment": "Komentář",
        "imagelinks": "Využití souboru",
-       "linkstoimage": "Na soubor {{PLURAL:$1|odkazuje tato stránka|odkazují tyto $1 stránky|odkazuje těchto $1 stránek}}:",
-       "linkstoimage-more": "Na tento soubor {{PLURAL:$1|odkazuje více stránek|odkazují více než $1 stránky|odkazuje více než $1 stránek}}.\nNásledující seznam zobrazuje pouze {{PLURAL:$1|tu první|první $1|prvních $1}}.\nMůžete si prohlédnout [[Special:WhatLinksHere/$2|úplný seznam]].",
-       "nolinkstoimage": "Na tento soubor neodkazuje žádná stránka.",
+       "linkstoimage": "Tento soubor {{PLURAL:$1|používá následující stránka|používají následující $1 stránky|používá následujících $1 stránek}}:",
+       "linkstoimage-more": "Tento soubor {{PLURAL:$1|používá více stránek|používají více než $1 stránky|používá více než $1 stránek}}.\nNásledující seznam zobrazuje pouze {{PLURAL:$1|tu první|první $1|prvních $1}}.\nMůžete si prohlédnout [[Special:WhatLinksHere/$2|úplný seznam]].",
+       "nolinkstoimage": "Tento soubor nepoužívá žádná stránka.",
        "morelinkstoimage": "Zobrazit [[Special:WhatLinksHere/$1|další odkazy]] na tento soubor.",
        "linkstoimage-redirect": "$1 (přesměrování) $2",
        "duplicatesoffile": "{{PLURAL:$1|Následující soubor je duplikát|Následující $1 soubory jsou duplikáty|Následujících $1 souborů jsou duplikáty}} tohoto souboru ([[Special:FileDuplicateSearch/$2|podrobnosti]]):",
index 3a3478c..fc87478 100644 (file)
        "yourname": "Усă куракан ят:",
        "userlogin-yourname": "Усă куракан ят",
        "yourpassword": "Вăрттăн сăмах:",
+       "userlogin-yourpassword": "Пароль",
        "yourpasswordagain": "Вăрттăн сăмах тепре çырăр:",
        "yourdomainname": "Сирĕн доменă:",
        "login": "Кĕрĕр",
        "accmailtext": "$1 вăрттăн сăмахне кунта леçрĕмĕр: $2.",
        "newarticle": "(Çĕнни)",
        "newarticletext": "Ссылка урлă эсир халлĕхе çук статья çине куçрăр.\nÇĕнĕ статьяна кĕртес тесен аяларах вырнаçнă чӳречере текста çырăр.\n(тĕплĕнрех пĕлес тесен [$1 пулăшу страниципе] паллашăр).\nЕнчен те эсир кунта йăнăшпа лекнĕ пулсан — сирĕн браузерăн <strong>Каялла</strong> кнопка çине пусăр.",
+       "userpage-userdoesnotexist-view": "\"$1\" аккаунтне туман.",
        "usercsspreview": "'''Ан манăр, эсир сирĕн css файл епле пулассине çеç куратăр, ăна халлĕхе çырса хуман!'''",
        "userjspreview": "'''Астăвăр, ку сирĕн javascript-файлăн малтанхи курăмĕ кăна, ăна хальлĕхе çырса хуман!'''",
        "updated": "(Çĕнелнĕ)",
        "templatesusedsection": "Ку пайĕнче усă куракан {{PLURAL:$1|шаблон|шаблонсем}}:",
        "template-protected": "(сыхланă)",
        "template-semiprotected": "(пĕр пайне сыхланă)",
+       "content-model-wikitext": "викитекст",
        "expensive-parserfunction-category": "Кунта эсир чылай ресурс ыйтакан функцисемпе нумай ĕçлекен страницăсене куратăр",
        "post-expand-template-argument-category": "Шаблон аргуменчĕсене сиктерсе хăварнă страницăсем",
        "undo-norev": "Ку тӳрлетĕве пăрахăçлама май çук — вăл е пулман та, е ăна кăларса пăрахнă.",
        "suppressionlog": "Пытару журналĕ",
        "history-title": "\"$1\" улшăннисен историйĕ",
        "lineno": "$1-мĕш йĕрке:",
+       "compareselectedversions": "Суйланă версисене танлаштар",
        "editundo": "унчченхи",
        "searchresults": "Шыранă результачĕсем",
        "searchresults-title": "\"$1\" шыраса тупни",
        "notargettitle": "Тĕллевне кăтартман",
        "pager-newer-n": "{{PLURAL:$1|çĕнĕреххисене 1|$1 çĕнĕреххисене}}",
        "pager-older-n": "{{PLURAL:$1|кивĕреххисене 1|$1 кивĕреххисене}}",
+       "apihelp-no-such-module": "\"$1\" модульĕ тупăнмарĕ.",
        "booksources": "Кĕнекесен çăлкуçĕсем",
        "booksources-search": "Туп",
        "specialloguserlabel": "Хутшăнакан:",
        "protect-level-sysop": "Администраторсене кăна юрать",
        "pagesize": "(байт)",
        "restriction-edit": "Тӳрлет",
+       "restriction-move": "Ятне улăштарни",
        "undelete": "Кăларса пăрахнă страницăсене пăх",
        "viewdeletedpage": "Кăларса пăрахнă страницăсене пăх",
        "undeleterevisions": "$1 {{PLURAL:$1|верси|версисене}} пăса утнă",
        "mycontris": "Хушни",
        "anoncontribs": "Хушни",
        "contribsub2": "{{GENDER:$3|$1}} валли ($2)",
+       "contributions-userdoesnotexist": "\"$1\" аккаунтне туман.",
        "uctop": "(хальхи)",
        "month": "Уйăхран (маларах та):",
        "year": "Çултан (маларах та):",
        "block-log-flags-anononly": "анонимлă хутшăнакансем кăна",
        "block-log-flags-nocreate": "хутшăнакансене регистрациленме чарнă",
        "block-log-flags-noemail": "çыру яма чарнă",
-       "move-page-legend": "Страницăна куçарнă",
+       "move-page": "$1 ятне улăштарни",
+       "move-page-legend": "Страницăна куçарни",
        "newtitle": "Çĕнĕ ят",
        "move-watch": "Ку страницăна сăнамаллисем шутне хуш",
        "movepagebtn": "Страницăн ятне улăштар",
        "allmessages-filter-submit": "Куç",
        "allmessages-filter-translate": "Куçар",
        "thumbnail-more": "Пысăклатмалли",
-       "filemissing": "Файл тупăнмарĕ",
+       "filemissing": "Файлĕ тупăнмарĕ",
        "thumbnail_error": "Пĕчĕк ӳкерчĕке тăваймарăмăр: $1",
        "thumbnail_invalid_params": "Пĕчĕк ӳкерчĕкĕн параметрĕ йăнăш",
        "import": "Страницăсене импортласси",
        "fileduplicatesearch": "Пĕр пек файлсен шыравĕ",
        "fileduplicatesearch-filename": "Файл ячĕ:",
        "fileduplicatesearch-submit": "Туп",
+       "fileduplicatesearch-noresults": "\"$1\" ятлă файл тупăнмарĕ.",
        "specialpages": "Ятарлă страницăсем",
        "specialpages-group-maintenance": "Техника обслуживанийĕн отчечĕсем",
        "specialpages-group-other": "Ытти ятарлă страницăсем",
        "specialpages-group-media": "Медиа-материалсемпе тултарăшсем",
        "specialpages-group-users": "Хутшăнакансем тата правасем",
        "specialpages-group-highuse": "Нумай усă куракан страницăсем",
+       "tag-filter": "[[Special:Tags|Тегсен]] фильтрĕ:",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Тег|Тегсем}}]]: $2)",
        "tags-title": "Тегсем",
        "compare-submit": "Танлаштар",
        "pagelang-select-lang": "Чĕлхе суйлăр",
        "mediastatistics-header-audio": "Аудио",
        "mediastatistics-header-video": "Видеосем",
-       "special-characters-group-symbols": "Символсем"
+       "special-characters-group-symbols": "Символсем",
+       "authmanager-userdoesnotexist": "\"$1\" аккаунтне туман."
 }
index 9398ee4..89eb5d7 100644 (file)
        "category-file-count": "{{PLURAL:$2|Diese Kategorie enthält nur folgende Datei.|Folgende {{PLURAL:$1|Datei ist|$1 Dateien sind}} in dieser Kategorie, von $2 insgesamt.}}",
        "category-file-count-limited": "Folgende {{PLURAL:$1|Datei ist|$1 Dateien sind}} in dieser Kategorie enthalten:",
        "listingcontinuesabbrev": "(Fortsetzung)",
-       "index-category": "Indexierte Seiten",
-       "noindex-category": "Nichtindexierte Seiten",
+       "index-category": "Seiten, die indexiert werden können",
+       "noindex-category": "Seiten, die nicht indexiert werden können",
        "broken-file-category": "Seiten mit defekten Dateilinks",
        "about": "Über",
        "article": "Seite",
        "post-expand-template-inclusion-warning": "Warnung: Die Größe eingebundener Vorlagen ist zu groß, einige Vorlagen können nicht eingebunden werden.",
        "post-expand-template-inclusion-category": "Seiten, in denen die maximale Größe eingebundener Vorlagen überschritten ist",
        "post-expand-template-argument-warning": "'''Warnung:''' Diese Seite enthält mindestens einen Parameter in einer Vorlage, der expandiert zu groß ist. Diese Parameter werden ignoriert.",
-       "post-expand-template-argument-category": "Seiten mit ignorierten Vorlagenparametern",
+       "post-expand-template-argument-category": "Seiten, die ignorierte Vorlagenparameter enthalten",
        "parser-template-loop-warning": "Vorlagenschleife entdeckt: [[$1]]",
        "template-loop-category": "Seiten mit Vorlagenschleifen",
        "template-loop-category-desc": "Die Seite enthält eine Vorlagenschleife, z.&nbsp;B. eine Vorlage, die sich selbst rekursiv aufruft.",
index 704cdc8..b0ea878 100644 (file)
        "search-nonefound": "Δεν υπάρχουν αποτελέσματα που να ικανοποιούν το ερώτημα.",
        "search-nonefound-thiswiki": "Δεν υπάρχουν αποτελέσματα που να ικανοποιούν το ερώτημα σε αυτόν τον ιστότοπο.",
        "powersearch-legend": "Αναλυτική αναζήτηση",
-       "powersearch-ns": "Î\91ναζήÏ\84ηÏ\83η Ï\83Ï\84ιÏ\82 Ï\80εÏ\81ιοÏ\87έÏ\82 Î¿Î½Î¿Î¼Î¬Ï\84Ï\89ν:",
+       "powersearch-ns": "Î\91ναζήÏ\84ηÏ\83η Ï\83Ï\84οÏ\85Ï\82 Î¿Î½Î¿Î¼Î±Ï\84οÏ\87Ï\8eÏ\81οÏ\85Ï\82:",
        "powersearch-togglelabel": "Έλεγχος:",
-       "powersearch-toggleall": "Î\8cλεÏ\82",
-       "powersearch-togglenone": "Î\9aαμία",
+       "powersearch-toggleall": "Î\8cλοι",
+       "powersearch-togglenone": "Î\9aανέναÏ\82",
        "powersearch-remember": "Διατήρηση επιλογής για μελλοντικές αναζητήσεις",
        "search-external": "Εξωτερική αναζήτηση",
        "searchdisabled": "Η αναζήτηση για τον ιστότοπο \"{{SITENAME}}\" είναι απενεργοποιημένη. Μπορείτε να αναζητήσετε μέσω του Google εν τω μεταξύ. Σημειώστε ότι οι κατάλογοί τους για το περιεχόμενο του ιστοτόπου \"{{SITENAME}}\" μπορεί να είναι απαρχαιωμένοι.",
index 06088a0..adda095 100644 (file)
        "tag-mw-new-redirect-description": "Feranrangen, diar en nei widjerfeerang iinracht.",
        "tag-mw-removed-redirect": "Widjerfeerang wechnimen",
        "tag-mw-changed-redirect-target": "Widjerfeerang feranert",
+       "tag-mw-blank": "Leesag maaget",
        "tag-mw-rollback": "Turagsaat",
        "tag-mw-undo": "Turag saaten",
        "tags-title": "Kääntiaken",
index c1deea2..7602df5 100644 (file)
        "exbeforeblank": "պարունակությունը մինչև մաքրումը. «$1»",
        "delete-confirm": "$1 ― ջնջում",
        "delete-legend": "Ջնջում",
-       "historywarning": "Զգուշացում. էջը, որը դուք պատրաստվում եք ջնջել ունի փոփոխությունների պատմություն։",
+       "historywarning": "Զգուշացում. էջը, որը դուք պատրաստվում եք ջնջել, ունի փոփոխությունների պատմություն։",
        "historyaction-submit": "Ցուցադրել",
        "confirmdeletetext": "Դուք պատրաստվում եք ընդմիշտ ջնջել էջը կամ պատկերը տվյալների բազայից իր փոփոխությունների պատմությամբ հանդերձ։ Խնդրում ենք հաստատել, որ դուք իրոք մտադրված եք դա անել, հասկանում եք դրա հետևանքները և գործում եք [[{{MediaWiki:Policy-url}}|կանոնադրության]] սահմաններում։",
        "actioncomplete": "Գործողությունն ավարտված է",
index 35a9280..65fe679 100644 (file)
        "filehist-filesize": "Dimension del file",
        "filehist-comment": "Commento",
        "imagelinks": "Uso de iste file",
-       "linkstoimage": "Le sequente {{PLURAL:$1|pagina ha un ligamine|$1 paginas ha ligamines}} verso iste file:",
-       "linkstoimage-more": "Plus de $1 {{PLURAL:$1|pagina ha un ligamine|paginas ha ligamines}} verso iste file.\nLe sequente lista monstra le {{PLURAL:$1|prime pagina|prime $1 paginas}} que puncta a iste file specific.\nUn [[Special:WhatLinksHere/$2|lista complete]] es disponibile.",
-       "nolinkstoimage": "Nulle pagina usa iste file.",
+       "linkstoimage": "Le sequente {{PLURAL:$1|pagina|$1 paginas}} usa iste file:",
+       "linkstoimage-more": "Plus de $1 {{PLURAL:$1|pagina|paginas}} usa iste file.\nLe sequente lista monstra le {{PLURAL:$1|prime pagina|prime $1 paginas}} que usa iste file solmente.\nUn [[Special:WhatLinksHere/$2|lista complete]] es disponibile.",
+       "nolinkstoimage": "Il non ha paginas que usa iste file.",
        "morelinkstoimage": "Vider [[Special:WhatLinksHere/$1|plus ligamines]] a iste file.",
        "linkstoimage-redirect": "$1 (redirection de file) $2",
        "duplicatesoffile": "Le sequente {{PLURAL:$1|file es un duplicato|$1 files es duplicatos}} de iste file ([[Special:FileDuplicateSearch/$2|plus detalios]]):",
index 5aad047..7a3e68d 100644 (file)
        "difference-missing-revision": "{{PLURAL:$2|Una versione|$2 versioni}} di questa differenza ($1) {{PLURAL:$2|non è stata trovata|non sono state trovate}}.\n\nQuesto si verifica solitamente seguendo un collegamento obsoleto di un diff a una pagina cancellata.\nI dettagli possono essere trovati nel [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro delle cancellazioni].",
        "searchresults": "Risultati della ricerca",
        "search-filter-title-prefix": "Ricerca effettuata solo nelle pagine con titolo che inizia con \"$1\"",
-       "search-filter-title-prefix-reset": "cerca in tutte le pagine",
+       "search-filter-title-prefix-reset": "Cerca in tutte le pagine",
        "searchresults-title": "Risultati della ricerca di \"$1\"",
        "titlematches": "Corrispondenze nel titolo delle pagine",
        "textmatches": "Corrispondenze nel testo delle pagine",
        "filehist-filesize": "Dimensione del file",
        "filehist-comment": "Commento",
        "imagelinks": "Utilizzo del file",
-       "linkstoimage": "{{PLURAL:$1|La seguente pagina contiene|Le seguenti $1 pagine contengono}} collegamenti a questo file:",
-       "linkstoimage-more": "Più di $1 {{PLURAL:$1|pagina punta|pagine puntano}} a questo file.\nDi seguito sono elencate solo {{PLURAL:$1|la prima pagina che punta|le prime $1 pagine che puntano}} a questo file.\nÈ disponibile un [[Special:WhatLinksHere/$2|elenco completo]].",
-       "nolinkstoimage": "Nessuna pagina contiene collegamenti al file.",
+       "linkstoimage": "{{PLURAL:$1|La seguente pagina usa|Le seguenti $1 pagine usano}} questo file:",
+       "linkstoimage-more": "Più di $1 {{PLURAL:$1|pagina usa|pagine usano}} questo file.\nDi seguito sono elencate solo {{PLURAL:$1|la prima pagina che usa|le prime $1 pagine che usano}} questo file.\nÈ disponibile un [[Special:WhatLinksHere/$2|elenco completo]].",
+       "nolinkstoimage": "Nessuna pagina utilizza questo file.",
        "morelinkstoimage": "Visualizza [[Special:WhatLinksHere/$1|altri collegamenti]] a questo file.",
        "linkstoimage-redirect": "$1 (reindirizzamento file) $2",
        "duplicatesoffile": "{{PLURAL:$1|Il seguente file è un duplicato|I seguenti $1 file sono duplicati}} di questo file ([[Special:FileDuplicateSearch/$2|ulteriori dettagli]]):",
index 7544b72..b955139 100644 (file)
        "diff-paragraph-moved-toold": "文章は移動しました。クリックすると元の場所が開きます。",
        "difference-missing-revision": "指定された{{PLURAL:$2|$2版}}の差分 ($1) が見つかりませんでした。\n\n通常、削除されたページの版への古い差分表示や固定リンクをたどった際に、このようなことが起きます。 \n詳細は[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 削除記録]を参照してください。",
        "searchresults": "検索結果",
+       "search-filter-title-prefix-reset": "すべてのページを検索",
        "searchresults-title": "「$1」の検索結果",
        "titlematches": "ページ名と一致",
        "textmatches": "ページ本文と一致",
        "group-autoconfirmed": "自動承認された利用者",
        "group-bot": "ボット",
        "group-sysop": "管理者",
+       "group-interface-admin": "インターフェース管理者",
        "group-bureaucrat": "ビューロクラット",
        "group-suppress": "秘匿者",
        "group-all": "(全員)",
        "group-autoconfirmed-member": "{{GENDER:$1|自動承認された利用者}}",
        "group-bot-member": "{{GENDER:$1|ボット}}",
        "group-sysop-member": "{{GENDER:$1|管理者}}",
+       "group-interface-admin-member": "{{GENDER:$1|インターフェース管理者}}",
        "group-bureaucrat-member": "{{GENDER:$1|ビューロクラット}}",
        "group-suppress-member": "{{GENDER:$1|秘匿者}}",
        "grouppage-user": "{{ns:project}}:登録利用者",
        "rcfilters-preference-label": "最近の更新の改善版を隠す",
        "rcfilters-preference-help": "2017年のインターフェース更新およびそれ以降に追加された新しいツールを無効化します。",
        "rcfilters-watchlist-preference-label": "ウォッチリストの改善版を隠す",
-       "rcfilters-filter-showlinkedfrom-label": "リンク先ページの変更を表示する",
-       "rcfilters-filter-showlinkedfrom-option-label": "選択されているページから<strong>リンクされているページ</strong>",
-       "rcfilters-filter-showlinkedto-label": "リンク先ページの変更を表示する",
-       "rcfilters-filter-showlinkedto-option-label": "選択されているページに<strong>リンクしているページ</strong>",
+       "rcfilters-filter-showlinkedfrom-label": "指定されたページのリンク先の変更を表示",
+       "rcfilters-filter-showlinkedfrom-option-label": "指定されたページから<strong>リンクされているページ</strong>",
+       "rcfilters-filter-showlinkedto-label": "指定されたページのリンク元の変更を表示",
+       "rcfilters-filter-showlinkedto-option-label": "指定されたページに<strong>リンクしているページ</strong>",
        "rcfilters-target-page-placeholder": "ページ名(またはカテゴリ名)を入力",
        "rcnotefrom": "以下は<strong>$3 $4</strong>以降の{{PLURAL:$5|更新です}} (最大 <strong>$1</strong> 件)。",
        "rclistfromreset": "日時指定をリセット",
        "recentchangeslinked-feed": "関連ページの更新状況",
        "recentchangeslinked-toolbox": "関連ページの更新状況",
        "recentchangeslinked-title": "「$1」と関連する変更",
-       "recentchangeslinked-summary": "ã\83\9aã\83¼ã\82¸å\90\8dã\82\92å\85¥å\8a\9bã\81\99ã\82\8bã\81¨ã\80\81ã\83ªã\83³ã\82¯é\96¢ä¿\82 (ã\81\9dã\81®ã\83\9aã\83¼ã\82¸ã\81®ã\83ªã\83³ã\82¯å\85\88ã\82\82ã\81\97ã\81\8fã\81¯ä»\96ã\81®ã\83\9aã\83¼ã\82¸ã\81\8bã\82\89ã\81®ã\83ªã\83³ã\82¯) ã\81®æ\9c\80è¿\91ã\81®å¤\89æ\9b´ã\82\92調ã\81¹ã\82\8bã\81\93ã\81¨ã\81\8cã\81§ã\81\8dã\81¾ã\81\99ã\80\82 (ä¸\8bä½\8dã\82«ã\83\86ã\82´ã\83ªã\82\92å\8f\82ç\85§ã\81\99ã\82\8bã\81«ã\81¯ã\80\81ã\82«ã\83\86ã\82´ã\83ª:ã\82«ã\83\86ã\82´ã\83ªå\90\8d (Category:Name of category) ã\82\92å\85¥å\8a\9b)。[[Special:Watchlist|自分のウォッチリスト]]にあるページの変更は<strong>太字</strong>で表示されます。",
+       "recentchangeslinked-summary": "ã\83ªã\83³ã\82¯å\85\83ã\81¾ã\81\9fã\81¯ã\83ªã\83³ã\82¯å\85\88ã\81®å¤\89æ\9b´ã\82\92表示ã\81\97ã\81\9fã\81\84ã\83\9aã\83¼ã\82¸å\90\8dã\82\92å\85¥å\8a\9bã\81\97ã\81¦ã\81\8fã\81 ã\81\95ã\81\84ã\80\82(\"Category:ã\82«ã\83\86ã\82´ã\83ªå\90\8d\"ã\81¨å\85¥å\8a\9bã\81\99ã\82\8bã\81¨ä¸\8bä½\8dã\82«ã\83\86ã\82´ã\83ªã\82\92å\8f\82ç\85§ã\81§ã\81\8dã\81¾ã\81\99)。[[Special:Watchlist|自分のウォッチリスト]]にあるページの変更は<strong>太字</strong>で表示されます。",
        "recentchangeslinked-page": "ページ名:",
        "recentchangeslinked-to": "このページへのリンク元での変更の表示に切り替え",
        "recentchanges-page-added-to-category": "[[:$1]]をカテゴリに追加",
        "http-timed-out": "HTTP要求がタイムアウトしました。",
        "http-curl-error": "URLからの取得に失敗しました: $1",
        "http-bad-status": "HTTP リクエストで問題が発生しました: $1 $2",
+       "http-internal-error": "HTTP 内部エラー。",
        "upload-curl-error6": "URLに到達できませんでした",
        "upload-curl-error6-text": "指定したURLに到達できませんでした。\nURLが正しいものであり、ウェブサイトが稼働していることを再度確認してください。",
        "upload-curl-error28": "アップロードのタイムアウト",
        "filehist-filesize": "ファイルサイズ",
        "filehist-comment": "コメント",
        "imagelinks": "ファイルの使用状況",
-       "linkstoimage": "以ä¸\8bã\81®{{PLURAL:$1|ã\83\9aã\83¼ã\82¸|â\80\8b&#32;$1 ã\83\9aã\83¼ã\82¸}}ã\81\8cã\81\93ã\81®ã\83\95ã\82¡ã\82¤ã\83«ã\81«ã\83ªã\83³ã\82¯しています:",
-       "linkstoimage-more": "ã\81\93ã\81®ã\83\95ã\82¡ã\82¤ã\83«ã\81¸ã\81¯ $1 ã\82\92è¶\85ã\81\88ã\82\8bæ\95°ã\81®ã\83\9aã\83¼ã\82¸ã\81\8bã\82\89ã\83ªã\83³ã\82¯ã\81\8cã\81\82ã\82\8aã\81¾ã\81\99ã\80\82\n以ä¸\8bã\81®ä¸\80覧ã\81§ã\81¯ã\81\93ã\81®ã\83\95ã\82¡ã\82¤ã\83«ã\81«ã\83ªã\83³ã\82¯している最初の $1 ページのみを表示しています。\n[[Special:WhatLinksHere/$2|完全な一覧]]も参照してください。",
-       "nolinkstoimage": "ã\81\93ã\81®ã\83\95ã\82¡ã\82¤ã\83«ã\81¸ã\83ªã\83³ã\82¯しているページはありません。",
+       "linkstoimage": "以ä¸\8bã\81®{{PLURAL:$1|ã\83\9aã\83¼ã\82¸|â\80\8b&#32;$1 ã\83\9aã\83¼ã\82¸}}ã\81\8cã\81\93ã\81®ã\83\95ã\82¡ã\82¤ã\83«ã\82\92使ç\94¨しています:",
+       "linkstoimage-more": "ã\81\93ã\81®ã\83\95ã\82¡ã\82¤ã\83«ã\81¸ã\81¯ $1 ã\82\92è¶\85ã\81\88ã\82\8bæ\95°ã\81®ã\83\9aã\83¼ã\82¸ã\81§ä½¿ç\94¨ã\81\95ã\82\8cã\81¦ã\81\84ã\81¾ã\81\99ã\80\82\n以ä¸\8bã\81®ä¸\80覧ã\81§ã\81¯ã\81\93ã\81®ã\83\95ã\82¡ã\82¤ã\83«ã\82\92使ç\94¨している最初の $1 ページのみを表示しています。\n[[Special:WhatLinksHere/$2|完全な一覧]]も参照してください。",
+       "nolinkstoimage": "ã\81\93ã\81®ã\83\95ã\82¡ã\82¤ã\83«ã\82\92使ç\94¨しているページはありません。",
        "morelinkstoimage": "このファイルへの[[Special:WhatLinksHere/$1|リンク元を更に]]を表示する。",
        "linkstoimage-redirect": "$1 (リダイレクト) $2",
        "duplicatesoffile": "以下の $1 {{PLURAL:$1|ファイル}}が、このファイルと重複しています ([[Special:FileDuplicateSearch/$2|詳細]]):",
        "protectedtitles-submit": "タイトルを表示",
        "listusers": "利用者一覧",
        "listusers-editsonly": "投稿記録のある利用者のみを表示",
-       "listusers-temporarygroupsonly": "一時的にこの利用者グループに属している利用者のみを表示",
+       "listusers-temporarygroupsonly": "この利用者グループに一時的に属している利用者のみを表示",
        "listusers-creationsort": "作成日順に並べ替え",
        "listusers-desc": "降順に並べ替える",
        "usereditcount": "$1 {{PLURAL:$1|回編集}}",
        "pageid": "ページID $1",
        "interfaceadmin-info": "$1\n\nサイト全体のCSS/JS/JSONの編集における許可は、最近まで<code>editinterface</code>権限と分けられていました。なぜこのエラーが表示されるのかわからない場合は、[[mw:MediaWiki_1.32/interface-admin]]をご覧ください。",
        "rawhtml-notallowed": "&lt;html&gt;タグは通常ページ以外では使用できません。",
-       "gotointerwiki": "{{SITENAME}}ã\81\8bã\82\89ä»\96ã\82µã\82¤ã\83\88ã\81¸ç§»å\8b\95ã\81\99る",
+       "gotointerwiki": "{{SITENAME}}ã\82\92é\9b¢ã\82\8cる",
        "gotointerwiki-invalid": "指定したページは無効です。",
-       "gotointerwiki-external": "あなたは{{SITENAME}}から別のウェブサイトである[[$2]]へ移動しようとしています。\n\n'''[$1 $1 へ移動する]'''",
+       "gotointerwiki-external": "\"{{SITENAME}}\"を離れ別のウェブサイト\"[[$2]]\"へ移動しようとしています。\n\n'''[$1 $1 へ移動する]'''",
        "undelete-cantedit": "このページを編集する許可がないため復元できません。",
        "undelete-cantcreate": "同名のページが存在せず、このページを作成する許可がないため復元できません。",
        "pagedata-title": "ページ・データ",
index 84496e8..083fd5f 100644 (file)
        "permissionserrors": "Masalah idin",
        "permissionserrorstext": "Panjengan ora kagungan idin kanggo nglakoni sing panjenengan gayuh amerga {{PLURAL:$1|alesan|alesan-alesan}} iki:",
        "permissionserrorstext-withaction": "Panjenengan ora diidinaké $2 amarga {{PLURAL:$1|alasan|alasan}} ing ngisor iki:",
-       "recreate-moveddeleted-warn": "'''Pènget: Panjenengan gawé manèh sawijining kaca sing wis tau dibusak.'''\n\nMangga digagas manèh apa pantes nerusaké nyunting kaca iki.\nIng ngisor iki kapacak log pambusakan lan pamindhahan saka kaca iki:",
+       "recreate-moveddeleted-warn": "<strong>Pélik: Panjenengan nggawé manèh kaca kang tau kabusak.</strong>\n\nPanjenengan kudu nglelimbang apa pantes nerusaké mbesut kaca iki.\nIng isor iki kapacak log pambusak lan pangalih saka kaca iki:",
        "moveddeleted-notice": "Kaca iki wis dibusak.\nLog busak, reksa, lan alih bab kacané cumepak ing ngisor minangka rujukan.",
        "log-fulllog": "Deleng cathetan wutuh",
        "edit-hook-aborted": "Besutan diwurungaké déning cangkolan.\nOra ana katerangané.",
        "showingresults": "Ing ngisor iki dituduhaké {{PLURAL:$1|'''1''' kasil|'''$1''' kasil}}, wiwitané saking #<strong>$2</strong>.",
        "showingresultsinrange": "Nuduhaké nganti {{PLURAL:$1|<strong>1</strong> kasil|<strong>$1</strong> kasil}} sajeroning penthangan #<strong>$2</strong> tekan #<strong>$3</strong>.",
        "search-showingresults": "{{PLURAL:$4|Asil <strong>$1</strong> saka <strong>$3</strong>|Asil <strong>$1 – $2</strong> saka <strong>$3</strong>}}",
-       "search-nonefound": "Ora ana kasil sing mathuk karo pitakoné.",
+       "search-nonefound": "Ora ana asil kang mathuk kuwèri.",
        "search-nonefound-thiswiki": "Ora ana kasil sing jumbuh karo panjalukan ing situs iki.",
        "powersearch-legend": "Panggolèkan sabanjuré (''advance search'')",
        "powersearch-ns": "Golèk ing mandala aran:",
        "rc-enhanced-hide": "Dhelikaké princèn",
        "rc-old-title": "kawitané digawé minangka \"$1\"",
        "recentchangeslinked": "Owahan magepokan",
-       "recentchangeslinked-feed": "Owah-owahan sing gegayutan",
+       "recentchangeslinked-feed": "Owah-owahan kang magepokan",
        "recentchangeslinked-toolbox": "Owahan magepokan",
        "recentchangeslinked-title": "Owah-owahan kang magepokan \"$1\"",
        "recentchangeslinked-summary": "Iki pratélaning owah-owahan sing mentas digawé tumrap ing kaca-kaca sing nggayut sawijining kaca (utawa kaca-kaca anggotaning sawijining kategori).\nKaca ing [[Special:Watchlist|pawawangané panjenegan]] <strong>dikandeli</strong>.",
        "logeventslist-submit": "Tuduhaké",
        "all-logs-page": "Kabèh log umum",
        "alllogstext": "Pitontonan gabungan log-log sing ana ing {{SITENAME}}.\nPanjenengan bisa nyiyutaké sesawangané kanthi milih sawijining jinis log, jeneng panganggo (sènsitif-case), utawa kaca sing gegayutan (uga sènsitif-case).",
-       "logempty": "Ora ditemokaké èntri log sing pas.",
+       "logempty": "Ora tinemu wiji kang cocog ing log",
        "log-title-wildcard": "Golèk sesirah sing diwiwiti tulisan iki",
        "showhideselectedlogentries": "Owah pakatonané èntri log sing dipilih",
        "log-edit-tags": "Besut tag saka isian log sing dipilih",
        "pageinfo-robot-noindex": "Ora éntuk",
        "pageinfo-watchers": "Cacahing sing ngawasi kaca",
        "pageinfo-visiting-watchers": "Cacahé pandeleng kaca sing nekani besutan anyar",
-       "pageinfo-few-watchers": "{{PLURAL:$1|Sing niliki|Sing niliki}} kurang saka $1",
+       "pageinfo-few-watchers": "{{PLURAL:$1|Kang ndeleng|Kang ndeleng}} kurang saka $1",
        "pageinfo-redirects-name": "Cacahing alihan menyang kaca iki",
        "pageinfo-subpages-name": "Cacahing anak kaca saka kaca iki",
        "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|alihan|alihan}}; $3 {{PLURAL:$3|non-alihan|non-alihan}})",
-       "pageinfo-firstuser": "Sing nggawé kaca",
+       "pageinfo-firstuser": "Kang nggawé kaca",
        "pageinfo-firsttime": "Tanggal panggawéning kaca",
-       "pageinfo-lastuser": "Sing mbesut kèri dhéwé",
+       "pageinfo-lastuser": "Kang wekasan mbesut",
        "pageinfo-lasttime": "Tanggal besutan kèri dhéwé",
        "pageinfo-edits": "Gunggunging besutan",
-       "pageinfo-authors": "Gunggunging sing nganggit",
+       "pageinfo-authors": "Gunggung kang nganggit",
        "pageinfo-recent-edits": "Cacahé besutan saiki (ing dalem $1 pungkasan)",
        "pageinfo-recent-authors": "Cacahing sing nganggit dinané iki",
        "pageinfo-magic-words": "{{PLURAL:$1|Tembung|Tembung}} mujarab ($1)",
        "file-info": "ukuran barkas: $1, jinis MIME: $2",
        "file-info-size": "$1 × $2 piksel, ukuran barkas: $3, jinis MIME: $4",
        "file-info-size-pages": "$1 × $2 piksel, gedhéné berkas: $3, jinisé MIME: $4, $5 {{PLURAL:$5|kaca|kaca}}",
-       "file-nohires": "Ora ana résolusi sing luwih dhuwur.",
+       "file-nohires": "Ora ana résolusi kang luwih dhuwur.",
        "svg-long-desc": "Barkas SVG, nominal $1 × $2 piksel, gedhéning barkas: $3",
        "svg-long-desc-animated": "Berkas SVG, nominal $1 × $2 piksel, gedhené berkas: $3",
        "svg-long-error": "Berkas SVG ora sah: $1",
index caa65d8..fdf96e6 100644 (file)
        "grouppage-bot": "{{ns:project}}:Ботлар",
        "grouppage-sysop": "{{ns:project}}:Башчылар",
        "right-read": "Сагьифа охув",
-       "right-edit": "Сагьифа тюзлев",
+       "right-edit": "Сагьифаланы тюзлемек",
        "right-writeapi": "Языв учун API‎ къоллав",
        "right-delete": "Сагьифа тайдырыв",
        "newuserlogpage": "Янгы къоллавчу тизме гюнделиги",
        "filehist-filesize": "Саплам гёлеми",
        "filehist-comment": "Ёрум",
        "imagelinks": "Сапламны къоллаву",
-       "linkstoimage": "Шундан сонггъу {{PLURAL:$1|сагьифа|$1 сагьифалар}} бу сапламгъа байлангъан:",
-       "linkstoimage-more": "$1 {{PLURAL:$1|Ñ\81агÑ\8cиÑ\84адан}} Ð°Ñ\80Ñ\82Ñ\8bкÑ\8a Ð¸Ð³ Ñ\81апламгÑ\8aа Ð±Ð°Ð¹Ð»Ð°Ð½Ñ\8bвлÑ\83.\nÐ\91Ñ\83 Ñ\82изме Ñ\8fнгÑ\8bз Ð±Ñ\83 Ñ\81апламгÑ\8aа {{PLURAL:$1|first page link|биÑ\80инÑ\87и $1 Ð±Ð°Ð¹Ð»Ð°Ð½Ñ\8bвлÑ\83 Ñ\81агÑ\8cиÑ\84аны}} гёрсете.\n[[Special:WhatLinksHere/$2|Толу тизме де]] бар.",
-       "nolinkstoimage": "Ð\91Ñ\83 Ñ\81апламгÑ\8aа Ð±Ð°Ð¹Ð»Ð°Ð²Ð»Ñ\83 Ñ\81агÑ\8cиÑ\84алаÑ\80 Ñ\91кÑ\8aдÑ\83Ñ\80",
+       "linkstoimage": "Шундан сонгра гелеген {{PLURAL:$1|сагьифа|$1 сагьифалар}} бу сапламны къоллай:",
+       "linkstoimage-more": "$1 {{PLURAL:$1|Ñ\81агÑ\8cиÑ\84адан}} Ð°Ñ\80Ñ\82Ñ\8bкÑ\8a Ð±Ñ\83 Ñ\81апламнÑ\8b ÐºÑ\8aоллай.\nÐ\91Ñ\83 Ñ\82изме Ñ\8fнгÑ\8bз Ð±Ñ\83 Ñ\81апламнÑ\8b ÐºÑ\8aоллайгÑ\8aан {{PLURAL:$1|биÑ\80инÑ\87и Ñ\81агÑ\8cиÑ\84анÑ\8b|биÑ\80инÑ\87и $1 Ñ\81агÑ\8cиÑ\84аланы}} гёрсете.\n[[Special:WhatLinksHere/$2|Толу тизме де]] бар.",
+       "nolinkstoimage": "Ð\91Ñ\83 Ñ\81апламнÑ\8b ÐºÑ\8aоллайгÑ\8aан Ñ\81агÑ\8cиÑ\84алаÑ\80 Ñ\91кÑ\8aд",
        "linkstoimage-redirect": "$1 (саплам ёллав) $2",
        "sharedupload-desc-here": "Бу саплам $1 проектдендир, ва башгъасында да къолланма бола. Ону [$2 тасвир сагьифасындан] маълюматы тюпде бериле.‎",
        "filepage-nofile": "Булай аты булан саплам ёкъдур.",
index f18571c..a225307 100644 (file)
        "botpasswords": "ꯕꯣꯇ ꯄꯥꯁꯋꯔꯇ",
        "botpasswords-summary": "<em>Bot passwords</em> allow access to a user account via the API without using the account's main login credentials. The user rights available when logged in with a bot password may be restricted.\n\nIf you don't know why you might want to do this, you should probably not do it. No one should ever ask you to generate one of these and give it to them.",
        "botpasswords-disabled": "ꯕꯣꯇ ꯄꯥꯁꯋꯔꯇ ꯌꯥꯉꯟꯗꯕꯥ",
+       "botpasswords-label-appid": "ꯕꯣꯠ ꯃꯃꯤꯡ:",
        "botpasswords-label-create": "ꯁꯥꯕꯥ",
        "botpasswords-label-update": "ꯅꯧꯊꯣꯛꯍꯟꯕꯥ",
        "botpasswords-label-cancel": "ꯀꯛꯊꯠꯄꯥ",
        "resetpass-submit-cancel": "ꯀꯛꯊꯠꯄꯥ",
        "resetpass-wrong-oldpass": "ꯃꯇꯝ ꯈꯔꯥꯒꯤ ꯑꯣꯏꯅꯥ ꯀꯔꯤꯝꯇꯥ ꯌꯥꯎꯗꯦ  ꯅꯠꯇꯔꯒꯥ ꯍꯧꯖꯤꯧꯀꯤ ꯄꯥꯁꯋ꯭ꯔꯇ꯫\nꯅꯪꯅꯥ ꯄꯥꯁꯋꯑꯔꯇ ꯍꯥꯟꯅꯗꯒꯤ ꯍꯣꯡꯂꯝꯂꯅꯤ ꯅꯠꯇꯔꯒꯥ ꯍꯪꯒꯠꯂꯨ ꯉꯥꯏꯍꯥꯛꯀꯤ ꯑꯣꯏꯕꯥ ꯄꯥꯁꯋ꯭ꯔꯇ",
        "resetpass-temp-password": "ꯉꯩꯍꯥꯛꯀꯤ ꯑꯣꯏꯕꯥ ꯄꯥꯁꯋ꯭ꯔꯇ",
+       "resetpass-expired": "ꯅꯪꯒꯤ ꯄꯥꯁꯋ꯭ꯔꯇ ꯁꯤ ꯌꯥꯗꯔꯦ ꯫ ꯆꯥꯟꯕꯤꯗꯨꯅ ꯑꯅꯧꯕ ꯱ ꯁꯦꯝꯃꯣ ꯂꯣꯒ ꯏꯟ ꯇꯧꯅꯕ ꯫",
        "passwordreset": "ꯄꯥꯁꯋ꯭ꯇ ꯁꯦꯝꯗꯣꯛꯄꯥ",
        "passwordreset-username": "ꯁꯤꯖꯤꯟꯅꯔꯤꯕꯥ ꯃꯃꯤꯡ",
        "passwordreset-domain": "ꯗꯣꯃꯦꯟ",
        "passwordreset-emailtext-ip": "Someone (probably you, from IP address $1) requested a reset of your\npassword for {{SITENAME}} ($4). The following user {{PLURAL:$3|account is|accounts are}}\nassociated with this email address:\n\n$2\n\n{{PLURAL:$3|This temporary password|These temporary passwords}} will expire in {{PLURAL:$5|one day|$5 days}}.\nYou should log in and choose a new password now. If someone else made this\nrequest, or if you have remembered your original password, and you no longer\nwish to change it, you may ignore this message and continue using your old\npassword.",
        "passwordreset-emailtext-user": "User $1 on {{SITENAME}} requested a reset of your password for {{SITENAME}}\n($4). The following user {{PLURAL:$3|account is|accounts are}} associated with this email address:\n\n$2\n\n{{PLURAL:$3|This temporary password|These temporary passwords}} will expire in {{PLURAL:$5|one day|$5 days}}.\nYou should log in and choose a new password now. If someone else made this\nrequest, or if you have remembered your original password, and you no longer\nwish to change it, you may ignore this message and continue using your old\npassword.",
        "passwordreset-emailelement": "$1 ꯁꯤꯖꯤꯟꯅꯔꯤꯕꯥ\n$2 ꯉꯩꯍꯥꯛꯀꯤ ꯑꯣꯏꯕꯥ ꯄꯥꯁꯋꯔꯇ",
+       "changeemail-oldemail": "ꯍꯧꯖꯤꯛꯀꯤ ꯏꯃꯦꯜ ꯑꯦꯗ꯭ꯔꯦꯁ:",
+       "changeemail-newemail": "ꯑꯅꯧꯕ ꯏꯃꯦꯜ ꯑꯦꯗ꯭ꯔꯦꯁ:",
        "changeemail-none": "ꯑꯃꯥꯇꯥ ꯅꯠꯇꯦ",
        "changeemail-password": "ꯅꯪꯒꯤ {{SITENAME}} ꯄꯥꯁꯋ꯭ꯔꯇ:",
        "changeemail-submit": "ꯏ-ꯃꯦꯜ ꯍꯣꯡꯕꯥ",
        "noarticletext-nopermission": "There is currently no text in this page.\nYou can [[Special:Search/{{PAGENAME}}|search for this page title]] in other pages, or <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} search the related logs]</span>, but you do not have permission to create this page.",
        "missing-revision": "The revision #$1 of the page named \"{{FULLPAGENAME}}\" does not exist.\n\nThis is usually caused by following an outdated history link to a page that has been deleted.\nDetails can be found in the [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].",
        "userpage-userdoesnotexist-view": "$1 ꯁꯤꯖꯤꯅꯅꯔꯤꯕ ꯑꯦꯀꯥꯎꯅ ꯁꯤ ꯃꯤꯡ ꯆꯟꯗꯔꯤ",
+       "updated": "(ꯅꯧꯊꯣꯛꯍꯟꯂꯦ)",
+       "note": "<ꯑꯀꯟꯕ>ꯏꯁꯤꯟꯒꯗꯕ:</ꯑꯀꯟꯕ>",
        "continue-editing": "ꯁꯦꯝꯒꯠꯄꯒꯤ ꯃꯐꯝꯗꯨꯗꯥ ꯆꯠꯂꯨ",
        "editing": "$1 ꯁꯦꯝꯒꯠꯂꯤ",
        "creating": "Creating $1",
        "search-redirect": "(redirect from $1)",
        "search-section": "(section $1)",
        "search-suggest": "$1 ꯁꯤꯔꯥ ꯅꯪꯅꯥ ꯍꯥꯏꯅꯤꯡꯂꯤꯕꯥꯁꯤ",
+       "search-interwiki-more-results": "ꯑꯍꯦꯟꯕ ꯐꯣꯜ ꯁꯤꯡ",
+       "search-relatedarticle": "ꯃꯔꯤꯂꯩꯅꯔꯦ",
+       "searchrelated": "ꯃꯔꯤꯂꯩꯅꯔꯦ",
        "searchall": "ꯄꯨꯂꯞ",
        "search-showingresults": "{{PLURAL:$4|Result <strong>$1</strong> of <strong>$3</strong>|Results <strong>$1 – $2</strong> of <strong>$3</strong>}}",
        "search-nonefound": "ꯃꯁꯤꯒꯤ ꯐꯣꯜꯁꯤꯒꯥ ꯆꯥꯟꯅꯕꯥ ꯂꯩꯇꯦ",
+       "powersearch-togglelabel": "ꯑꯁꯣꯏ ꯑꯔꯥꯟ ꯌꯥꯎꯕꯔ ꯌꯦꯡꯕ:",
+       "powersearch-toggleall": "ꯄꯨꯂꯞ",
+       "powersearch-togglenone": "ꯌꯥꯎꯗꯦ",
+       "powersearch-remember": "ꯍꯥꯌꯦꯡꯋꯥꯏ ꯊꯤꯅꯕꯥ ꯀꯥꯎꯒꯅꯨ ꯍꯧꯖꯤꯛ ꯈꯟꯕꯥ",
+       "search-external": "ꯃꯄꯥꯟꯒ ꯃꯔꯤꯂꯩꯅꯕ ꯊꯤꯕ",
+       "preferences": "ꯀꯔꯝꯕ ꯈꯟꯒꯅꯤ",
        "mypreferences": "Preferences",
+       "prefs-edits": "ꯁꯦꯝꯒꯠꯄꯒꯤ ꯃꯁꯤꯡ:",
        "prefs-skin": "ꯎꯨꯟꯁꯥ",
+       "prefs-user-pages": "ꯁꯤꯖꯤꯟꯅꯔꯤꯕ ꯂꯃꯥꯏꯁꯤꯡ",
+       "prefs-personal": "ꯁꯤꯖꯤꯟꯅꯔꯤꯕ ꯄꯔꯣꯐꯥꯏꯜ",
+       "prefs-rc": "ꯍꯧꯖꯤꯛꯀꯤ ꯑꯣꯏꯕꯥ ꯑꯍꯣꯡꯕꯁꯤꯡ",
+       "prefs-watchlist": "ꯌꯦꯡꯂꯤꯕ ꯄꯥꯥꯔꯦꯡ",
+       "prefs-editwatchlist": "ꯌꯦꯡꯂꯤꯕ ꯄꯥꯔꯦꯡꯗꯨ ꯁꯦꯝꯒꯠꯂꯨ",
+       "prefs-editwatchlist-label": "ꯅꯪꯅ ꯌꯦꯡꯉꯤꯕ ꯄꯔꯦꯡꯗꯨ ꯏꯁꯤꯟꯗꯨꯅ ꯁꯦꯝꯒꯠꯂꯨ:",
+       "saveprefs": "ꯇꯨꯡꯁꯤꯟꯂꯕ",
+       "prefs-editing": "ꯁꯦꯝꯒꯠꯂꯤ",
+       "searchresultshead": "ꯊꯤꯕꯥ",
+       "stub-threshold-sample-link": "ꯃꯑꯣꯡ",
+       "stub-threshold-disabled": "ꯌꯥꯍꯟꯗꯔꯗ",
        "timezonelegend": "ꯃꯇꯝꯒꯤ ꯃꯐꯝ:",
        "localtime": "ꯂꯩꯀꯥꯏꯒꯤ ꯃꯇꯝ:",
        "timezoneregion-africa": "ꯑꯐꯔꯤꯀ",
        "default": "ꯑꯃꯥ ꯍꯦꯛꯇꯥ",
        "prefs-files": "ꯐꯥꯏꯜꯁꯤꯡ",
        "youremail": "ꯏꯃꯦꯜ:",
+       "yournick": "ꯑꯅꯧꯕ ꯈꯨꯠꯌꯦꯛ:",
        "group-bot": "ꯕꯣꯇꯁꯤꯡ",
        "group-sysop": "ꯆꯨꯞꯂꯤ ꯄꯥꯏꯔꯤꯕꯁꯤꯡ",
        "grouppage-bot": "{{ns:project}}:ꯕꯣꯠꯁꯤꯡ",
index 85a4464..b51843c 100644 (file)
        "minoredit": "ဣဏအ်ဂှ် ဒှ်အရာ မပလေဝ်ဒါန် ညိည",
        "watchthis": "မင်မဲ မုက်လိက်ဏအ်",
        "savearticle": "ဂိုင်သိပ် မုက်လိက်",
-       "preview": "á\80\80á\80­á\80¯á\80\95á\80ºá\80\97á\80\97á\80µá\80¯",
-       "showpreview": "á\80\91á\80¹á\81\9cá\80¸ á\80\80á\80­á\80¯á\80\95á\80ºá\80\97á\80\97á\80µá\80¯",
+       "preview": "á\80\94á\80\99á\80°á\80\94á\80¬",
+       "showpreview": "á\80\91á\80¹á\81\9cá\80¸ á\80\94á\80\99á\80°á\80\94á\80¬",
        "showdiff": "ထ္ၜး အရာမပြံင်လှာဲ",
        "anoneditwarning": "<strong>သတိ</strong> မၞး ဟွံဂွံ လုပ်လံက်အေန်လဝ်ရ၊၊ IP address မၞး မံက်ဒၟံင်ရောင် ယဝ်ရ မၞးကၠောန်သ္ပ ပရေင်ပလေဝ်ပလေတ်မွဲမွဲမ္ဂး၊၊ ယဝ်ရ <strong>[$1 လုပ်လံက်အေန်]</strong> ဟွံသေင်မ္ဂး <strong>[$2 ခၞံကၠောန် အကံက်မွဲ]</strong>မ္ဂး၊ ပရေင်ပလေဝ်ဒါန်မၞး တြးပတိတ် နကဵု ယၟုသုင်စောဲ မၞးရောင်၊၊",
        "blockedtext": "<strong>ယၟုညးလွပ် ဟွံသေင်မ္ဂး ဌာန်ဒၟံင်အာင်ဒဳမၞး ဒးဒုင်ကၟာတ်စဵုဒၞာလဝ်</strong>\n\nပွမကၟာတ်စဵုဒၞာဂှ် ကၠောန်လဝ် နကဵု $1.\nဟိုတ်မဂွံကၟာတ်စဵုဒၞာဂှ် <em>$2</em>.\n\n* အခိင်မစကၟာတ်စဵုဒၞာ- $8\n* အခိင်မကၟာတ်စဵုဒၞာအိုတ်- $6\n* မရန်တၟအ် blockee- $7\n\nမၞး ဆက်ကဵု $1 ဟွံသေင်မ္ဂး ညးတၞဟ်သအာင် [[{{MediaWiki:Grouppage-sysop}}|administrator]] ယဝ်ရ မိက်ဂွံ ပတိုန်ဂလာန် စပ်ကဵု မဒးဒုင်ကၟာတ်စဵုဒၞာဂှ်ဂွံရ၊၊\nမၞး စကာ အဳမေလ် \"{{int:emailuser}}\" ဟွံဂွံရ၊၊ ဆဂး ယဝ်ရ ဌာန်ဒၟံင်အဳမေလ်ဂှ် ဒှ်အရာတၟေင် ပ္ဍဲ [[Special:Preferences|account preferences]] မၞး ကေုာံ မၞးဟွံဒးဒုင် ကၟာတ်စဵုဒၞာလဝ် နကဵုအဳမေဝ်ဂှ်မ္ဂး ဂွံမာန်ရ၊၊\nIP address မၞး လၟုဟ်ဂှ် ဒှ် $3, တုဲ ID မဒးဒုင်ကၟာတ်စဵုဒၞာဂှ် ဒှ် #$5 ရ၊၊ \nယဝ်ရ မၞးမိက်ဂွံ သၟာန်မ္ဂး တင်ဂၞင် ဗွဲလတူတအ် သီုဖအိုတ်ဂှ် ဗၟံက်ထ္ၜးကဵုညိ၊၊",
        "creating": "မခၞံကၠောန်ဒၟံင် $1",
        "editingsection": "ပလေဝ်ဒါန်ဒၟံင် (ဒကုတ်) $1",
        "templatesused": "{{PLURAL:$1|Template|Templates}} မသုင်စောဲ ပ္ဍဲ မုက်လိက်ဏအ်:",
-       "templatesusedpreview": "{{PLURAL:$1|Template|Templates}} á\80\99á\80\85á\80\80á\80¬á\80\9cá\80\9dá\80º á\80\95á\80¹á\80\8dá\80²á\80\80á\80­á\80¯á\80\95á\80ºá\80\97á\80\97á\80µá\80¯ဏအ်-",
+       "templatesusedpreview": "{{PLURAL:$1|Template|Templates}} á\80\99á\80\85á\80\80á\80¬á\80\9cá\80\9dá\80º á\80\95á\80¹á\80\8dá\80²á\80\94á\80\99á\80°á\80\94á\80¬ဏအ်-",
        "template-protected": "(စဵုဒၞာလဝ်)",
        "template-semiprotected": "(မစဵုဒၞာလဝ်-ကဝက်)",
        "hiddencategories": "မုက်လိက်ဏအ်ဂှ် ဒှ်ဂကောံ ကု{{PLURAL:$1|1 hidden category|$1 hidden categories}}:",
        "nextrevision": "မူမဒါန်လဝ် တၟိနူဂှ် →",
        "currentrevisionlink": "မူမဒါန်လဝ် လက္ကရဴအိုတ်",
        "cur": "ပစ္စုပ္ပန်",
-       "last": "á\80\80á\80­á\80¯á\80\95á\80ºá\80\97á\80\97á\80µá\80¯",
+       "last": "á\80\80á\80­á\80¯á\80\95á\80ºá\80\80á\81 á\80¬",
        "histlegend": "တၞဟ်န ဂွံပတောအ်ၜတ် အကြာမူမပလေဝ်ဒါန်လဝ်တအ်ဂှ် ကဵုစၟတ် ပ္ဍဲခံက်အင်ရေဒဳယော radio boxes တုဲ ဍဵုenter ဟွံသေင်မ္ဂး ဍဵု ကောန်ဍေင် သၟဝ်ဂှ်ညိ၊၊ <br />Legend: <strong>({{int:cur}})</strong> = အရာမတၞဟ်ခြာ ကုမူလက္ကရဴအိုတ် <strong>({{int:last}})</strong> = အရာမတၞဟ်ခြာ ကုမူကၠာနူဂှ်၊၊ <strong>{{int:minoreditletter}}</strong> = မပလေဝ်ဒါန်လဝ် ညိည၊၊",
        "history-fieldset-title": "ဂၠာဲ မူတြေံဂမၠိုင်",
        "histfirst": "တြေံအိုတ်",
        "tooltip-ca-nstab-category": "ဗဵု မုက်လိက်ကဏ္ဍ",
        "tooltip-minoredit": "ကဵုစၟတ် အရာဏအ် ဒဒှ်ရ မဒှ် အရာမပလေဝ်ဒါန် ညိည",
        "tooltip-save": "ဂိုင်သိပ် အရာမၞး မပြံင်လှာဲလဝ်",
-       "tooltip-preview": "á\80\80á\80­á\80¯á\80\95á\80ºá\80\97á\80\97á\80µá\80¯ အရာမၞး မပြံင်လှာဲလဝ်၊၊ ပဂုန်တုဲ ကၠာဟွံဂွံဂိုင်သိပ်ဂှ် ကၠောန်ကၠာညိ၊၊",
+       "tooltip-preview": "á\80\97á\80µá\80¯á\80\94á\80\99á\80°á\80\94á\80¬ အရာမၞး မပြံင်လှာဲလဝ်၊၊ ပဂုန်တုဲ ကၠာဟွံဂွံဂိုင်သိပ်ဂှ် ကၠောန်ကၠာညိ၊၊",
        "tooltip-diff": "ထ္ၜး ဒၞာဲ မလိက် မၞးမပြံင်လှာဲလဝ်ဂှ်ညိ",
        "tooltip-compareselectedversions": "ရံင် ဗီုတၞဟ်ခြာ အကြာ မူမပလေဝ်ဒါန်လဝ် ပ္ဍဲမုက်လိက်ဏအ် ဒၞာဲမရုဲစှ်လဝ် ၜါဂှ်",
        "tooltip-watch": "စုတ် မုက်လိက်ဏအ် ပ္ဍဲစရင်မမင်မဲ မၞး",
        "file-nohires": "resolution ခိုဟ် နူဏအ် ဟွံဂွံဆဵုရ၊၊",
        "svg-long-desc": "SVG ဝှာင်, မိက်ကဵုကသပ် $1 × $2 pixels, ဇမၞော် ဝှာင်: $3",
        "show-big-image": "ဝှာင် တမ်မူလ",
-       "show-big-image-preview": "á\80\87á\80\99á\81\9eá\80±á\80¬á\80º á\80\80á\80­á\80¯á\80\95á\80ºá\80\97á\80\97á\80µá\80¯ဏအ် - $1",
+       "show-big-image-preview": "á\80\87á\80\99á\81\9eá\80±á\80¬á\80º á\80\94á\80\99á\80°á\80\94á\80¬ ဏအ် - $1",
        "show-big-image-other": "တၞဟ် {{PLURAL:$2|resolution|resolutions}}: $1.",
        "show-big-image-size": "$1 × $2 pixels",
        "metadata": "Metadata",
index 5557493..f1a5324 100644 (file)
        "rcfilters-days-show-hours": "$1 {{PLURAL:$1|နာရီ|နာရီ}}",
        "rcfilters-highlighted-filters-list": "မီးမောင်းထိုးပြထားသည်: $1",
        "rcfilters-quickfilters": "သိမ်းထားသော စိစစ်မှုများ",
-       "rcfilters-quickfilters-placeholder-title": "မည်သည့် filter မှ မသိမ်းရသေးပါ",
+       "rcfilters-quickfilters-placeholder-title": "မည်သည့် စိစစ်မှုမှ မသိမ်းရသေးပါ",
        "rcfilters-savedqueries-defaultlabel": "သိမ်းထားသော စိစစ်မှုများ",
        "rcfilters-savedqueries-rename": "အမည်ပြန်ပြောင်းရန်",
        "rcfilters-savedqueries-setdefault": "မူလပုံသေအဖြစ် သတ်မှတ်ရန်",
        "activeusers-noresult": "အသုံးပြုသူ မတွေ့ပါ။",
        "activeusers-submit": "လတ်တလောအသုံးပြုသူများကို ပြသရန်",
        "listgrouprights": "အသုံးပြုသူအုပ်စု အခွင့်အရေးများ",
-       "listgrouprights-summary": "á\80¡á\80±á\80¬á\80\80á\80ºá\80\95á\80«á\80\90á\80­á\80¯á\80·á\80\9eá\80\8aá\80º á\80¤á\80\9dá\80®á\80\80á\80®á\80\90á\80½á\80\84á\80º á\80\9eá\80\90á\80ºá\80\99á\80¾á\80\90á\80ºá\80\91á\80¬á\80¸á\80\9eá\80\8aá\80·á\80º á\80¡á\80\9eá\80¯á\80¶á\80¸á\80\95á\80¼á\80¯á\80\9eá\80°á\80¡á\80¯á\80\95á\80ºá\80\85á\80¯á\80\85á\80¬á\80\9bá\80\84á\80ºá\80¸á\80\99á\80»á\80¬á\80¸á\80\94á\80¾á\80\84á\80·á\80º á\80\9aá\80\84á\80ºá\80¸á\80\90á\80­á\80¯á\80·á\81\8f á\80\86á\80\80á\80ºá\80\94á\80½á\80\9aá\80ºá\80\9eá\80±á\80¬ á\80¡á\80\81á\80½á\80\84á\80·á\80ºá\80¡á\80\9bá\80±á\80¸á\80\99á\80»á\80¬á\80¸á\80\96á\80¼á\80\85á\80ºá\80\9eá\80\8aá\80ºá\81\8b á\80\9eá\80®á\80¸á\80\9eá\80\94á\80·á\80ºá\80¡á\80\81á\80½á\80\84á\80·á\80ºá\80¡á\80\9bá\80±á\80¸á\80\99á\80»á\80¬á\80¸á\80¡á\80\90á\80½á\80\80á\80º [[{{MediaWiki:Listgrouprights-helppage}}|á\80\91á\80\95á\80ºá\80\86á\80±á\80¬á\80\84á\80ºá\80¸ á\80\9eá\80\90á\80\84á\80ºá\80¸á\80¡á\80\81á\80»á\80\84်အလက်]] ရှိနိုင်ပါသည်။",
+       "listgrouprights-summary": "á\80¡á\80±á\80¬á\80\80á\80ºá\80\95á\80«á\80\90á\80­á\80¯á\80·á\80\9eá\80\8aá\80º á\80¤á\80\9dá\80®á\80\80á\80®á\80\90á\80½á\80\84á\80º á\80\9eá\80\90á\80ºá\80\99á\80¾á\80\90á\80ºá\80\91á\80¬á\80¸á\80\9eá\80\8aá\80·á\80º á\80¡á\80\9eá\80¯á\80¶á\80¸á\80\95á\80¼á\80¯á\80\9eá\80°á\80¡á\80¯á\80\95á\80ºá\80\85á\80¯á\80\85á\80¬á\80\9bá\80\84á\80ºá\80¸á\80\99á\80»á\80¬á\80¸á\80\94á\80¾á\80\84á\80·á\80º á\80\9aá\80\84á\80ºá\80¸á\80\90á\80­á\80¯á\80·á\81\8f á\80\86á\80\80á\80ºá\80\94á\80½á\80\9aá\80ºá\80\9eá\80±á\80¬ á\80¡á\80\81á\80½á\80\84á\80·á\80ºá\80¡á\80\9bá\80±á\80¸á\80\99á\80»á\80¬á\80¸á\80\96á\80¼á\80\85á\80ºá\80\9eá\80\8aá\80ºá\81\8b á\80\9eá\80®á\80¸á\80\9eá\80\94á\80·á\80ºá\80¡á\80\81á\80½á\80\84á\80·á\80ºá\80¡á\80\9bá\80±á\80¸á\80\99á\80»á\80¬á\80¸á\80¡á\80\90á\80½á\80\80á\80º [[{{MediaWiki:Listgrouprights-helppage}}|á\80\91á\80\95á\80ºá\80\86á\80±á\80¬á\80\84á\80ºá\80¸ á\80\9eá\80\90á\80\84á\80ºá\80¸á\80¡á\80\81á\80»á\80\80်အလက်]] ရှိနိုင်ပါသည်။",
        "listgrouprights-key": "မှတ်ချက်:\n* <span class=\"listgrouprights-granted\">အပ်နှင်းပြီး အခွင့်အရေး</span>\n* <span class=\"listgrouprights-revoked\">ရုတ်သိမ်းပြီး အခွင့်အရေး</span>",
        "listgrouprights-group": "အုပ်စု",
        "listgrouprights-rights": "အခွင့်အရေးများ",
        "fileduplicatesearch-filename": "ဖိုင်အမည်:",
        "fileduplicatesearch-submit": "ရှာဖွေရန်",
        "specialpages": "အထူး စာမျက်နှာများ",
+       "specialpages-note-top": "မှတ်ချက်",
        "specialpages-note-restricted": "* ပုံမှန် အထူးစာမျက်နှာများ။\n* <span class=\"mw-specialpagerestricted\">ကန့်သတ်ထားသော အထူးစာမျက်နှာများ။</span>",
        "specialpages-group-maintenance": "ထိန်းသိမ်းမှု အစီရင်ခံချက်များ",
        "specialpages-group-other": "အခြားအထူးစာမျက်နှာများ",
index 6b18e71..23b3244 100644 (file)
        "sp-contributions-blocked-notice-anon": "St'IP è bloccato mò.\nL'urdemo elemento d' 'o riggistro 'e blocche è ripurtato ccà abbascio p'avé nu riferimento:",
        "sp-contributions-search": "Ascìa 'e contribbute",
        "sp-contributions-username": "Nnerizzo IP o nomme utente",
-       "sp-contributions-toponly": "Facenno vedé sulamente 'e contribbute 'e l'urdeme verziune",
-       "sp-contributions-newonly": "Facenno vedé sulamente 'e contribbute ca songo criazione 'e paggene",
+       "sp-contributions-toponly": "Sulamente 'e contribbute ca songo ll'urdeme verziune",
+       "sp-contributions-newonly": "Sulamente 'e contribbute ca songo criazione 'e paggene",
        "sp-contributions-hideminor": "Annascunne cagnamiénte piccerille",
        "sp-contributions-submit": "Truova",
        "whatlinkshere": "Paggene ca cullegano a chesta",
index 459a65e..cffe621 100644 (file)
        "welcomecreation-msg": "Kontoen din har blitt opprettet.\nIkke glem å endre [[Special:Preferences|innstillingene dine]] på {{SITENAME}}.",
        "yourname": "Brukernavn:",
        "userlogin-yourname": "Brukernavn",
-       "userlogin-yourname-ph": "Fyll inn brukernavnet ditt",
+       "userlogin-yourname-ph": "Fyll inn ditt brukernavn",
        "createacct-another-username-ph": "Fyll inn brukernavnet",
        "yourpassword": "Passord:",
        "userlogin-yourpassword": "Passord",
        "filehist-filesize": "Filstørrelse",
        "filehist-comment": "Kommentar",
        "imagelinks": "Filbruk",
-       "linkstoimage": "Følgende {{PLURAL:$1|side|$1 sider}} har lenker til denne filen:",
-       "linkstoimage-more": "Mer enn $1 {{PLURAL:$1|side|sider}} lenker til denne filen.\nFølgende liste viser {{PLURAL:$1|den første siden|de $1 første sidene}}.\nEn [[Special:WhatLinksHere/$2|fullstendig liste]] er tilgjengelig.",
+       "linkstoimage": "{{PLURAL:$1|Den følgende siden|De følgende $1 sidene}} bruker denne filen:",
+       "linkstoimage-more": "Mer enn $1 {{PLURAL:$1|side|sider}} bruker denne filen.\nFølgende liste viser {{PLURAL:$1|den første siden|de $1 første sidene}} som kun bruker denne filen.\nEn [[Special:WhatLinksHere/$2|fullstendig liste]] er tilgjengelig.",
        "nolinkstoimage": "Det er ingen sider som bruker denne filen.",
        "morelinkstoimage": "Vis [[Special:WhatLinksHere/$1|flere lenker]] til denne filen.",
        "linkstoimage-redirect": "$1 (filomdirigering) $2",
index bda58f9..154264a 100644 (file)
        "date-range-from": "Frå dato:",
        "date-range-to": "Til dato:",
        "randomrootpage": "Tilfeldig rotside",
+       "log-action-filter-newusers": "Type kontooppretting:",
        "log-action-filter-rights": "Type endring av rettar:",
+       "log-action-filter-all": "Alle",
        "log-action-filter-delete-delete_redir": "Overskriving av omdirigering",
        "log-action-filter-delete-restore": "Attoppretting av side",
        "log-action-filter-delete-revision": "Versjonssletting",
        "log-action-filter-move-move": "Flytting utan overskriving av omdirigeringar",
        "log-action-filter-move-move_redir": "Flytting med overskriving av omdirigeringar",
+       "log-action-filter-newusers-create": "Oppretting av anonym brukar",
+       "log-action-filter-newusers-create2": "Oppretting av registrert brukar",
+       "log-action-filter-newusers-autocreate": "Automatisk oppretting",
+       "log-action-filter-newusers-byemail": "Oppretting med passord sendt på e-post",
        "log-action-filter-suppress-revision": "Versjonsundertrykking",
        "authmanager-userdoesnotexist": "Brukarkontoen «$1» er ikkje oppretta.",
        "authmanager-provider-temporarypassword": "Mellombels passord",
index 7da0f30..1751fdd 100644 (file)
        "redirectedfrom": "($1 ରୁ ଲେଉଟି ଆସିଛି)",
        "redirectpagesub": "ପୁନଃପ୍ରେରଣ ପୃଷ୍ଠା",
        "redirectto": "କେଉଁଠାକୁ ଲେଉଟାଣି:",
-       "lastmodifiedat": "à¬\8fହି à¬ªà­\83ଷà­\8dଠାà¬\9fି $1 à¬¤à¬¾à¬°à¬¿à¬\96 $2 ବେଳେ ବଦଳାଯାଇଥିଲା ।",
+       "lastmodifiedat": "à¬\8fହି à¬ªà­\83ଷà­\8dଠାà¬\9fି $1 à¬¦à¬¿à¬¨ $2 ବେଳେ ବଦଳାଯାଇଥିଲା ।",
        "viewcount": "ଏହି ପୃଷ୍ଠାଟି {{PLURAL:$1|ଥରେ|$1 ଥର}} ଖୋଲାଯାଇଛି ।",
        "protectedpage": "କିଳାଯାଇଥିବା ପୃଷ୍ଠା",
        "jumpto": "ସିଧାସଳଖ ଯିବେ",
        "tooltip-feed-rss": "ଏହି ପୃଷ୍ଠାଟି ପାଇଁ RSS ଫିଡ଼",
        "tooltip-feed-atom": "ଏହି ପୃଷ୍ଠାଟି ପାଇଁ ଆଟମ ଫିଡ଼",
        "tooltip-t-contributions": "{{GENDER:$1|ଏହି ଇଉଜରଙ୍କର}} ଦ୍ଵାରା ହୋଇଥିବା ବଦଳ ତାଲିକା",
-       "tooltip-t-emailuser": "ଏହି ସଭ୍ୟଙ୍କୁ ଇ-ମେଲଟିଏ ପଠାଇବେ",
+       "tooltip-t-emailuser": "ଏହି {{GENDER:$1|ସଭ୍ୟ}}ଙ୍କୁ ଇ-ମେଲଟିଏ ପଠାଇବେ",
        "tooltip-t-upload": "ଫାଇଲ ଅପଲୋଡ଼ କରିବେ",
        "tooltip-t-specialpages": "ବିଶେଷ ପୃଷ୍ଠାମାନଙ୍କର ଏକ ତାଲିକା",
        "tooltip-t-print": "ଏହି ପୃଷ୍ଠାର ଛପାହୋଇପାରିବା ସଙ୍କଳନ",
        "special-characters-title-endash": "en ଡ୍ୟାସ",
        "special-characters-title-emdash": "em dash",
        "special-characters-title-minus": "ମେନୁଗୁଡିକର ଚିହ୍ନ",
-       "mw-widgets-titleinput-description-redirect": "$1କୁ ପୁନଃପ୍ରେରଣ କରିବେ"
+       "mw-widgets-titleinput-description-redirect": "$1କୁ ପୁନଃପ୍ରେରଣ କରିବେ",
+       "randomrootpage": "ଜାହିତାହି ମୁଳ ପୃଷ୍ଠା"
 }
index d91e6d6..1e8ddfd 100644 (file)
        "right-patrolmarks": "Podgląd znaczników patrolowania ostatnich zmian – oznaczania jako „sprawdzone”",
        "right-unwatchedpages": "Podgląd listy stron nieobserwowanych",
        "right-mergehistory": "Łączenie historii edycji stron",
-       "right-userrights": "Edycja uprawnień użytkownika",
-       "right-userrights-interwiki": "Edycja uprawnień użytkowników innych witryn wiki",
+       "right-userrights": "Edycja uprawnień użytkowników",
+       "right-userrights-interwiki": "Edycja uprawnień użytkowników na innych witrynach wiki",
        "right-siteadmin": "Blokowanie i odblokowywanie bazy danych",
        "right-override-export-depth": "Eksport stron wraz z linkowanymi do głębokości 5 linków",
        "right-sendemail": "Wysyłanie e‐maili do innych użytkowników",
index 2e7fb21..c22e638 100644 (file)
        "filehist-filesize": "Tamanho do ficheiro",
        "filehist-comment": "Comentário",
        "imagelinks": "Utilização local do ficheiro",
-       "linkstoimage": "{{PLURAL:$1|A seguinte página contém|As seguintes $1 páginas contêm}} hiperligações para este ficheiro:",
-       "linkstoimage-more": "Mais de {{PLURAL:$1|uma página contém|$1 páginas contêm}} hiperligações para este ficheiro.\nA lista abaixo apresenta apenas {{PLURAL:$1|a primeira página|as primeiras $1 páginas}}.\nEncontra-se disponível uma [[Special:WhatLinksHere/$2|lista completa]].",
-       "nolinkstoimage": "Não há nenhuma página que contenha hiperligações para este ficheiro.",
+       "linkstoimage": "{{PLURAL:$1|A seguinte página usa|As seguintes $1 páginas usam}} este ficheiro:",
+       "linkstoimage-more": "Mais de {{PLURAL:$1|uma página usa|$1 páginas usam}} este ficheiro.\nA lista abaixo apresenta apenas {{PLURAL:$1|a primeira página|as primeiras $1 páginas}}.\nEncontra-se disponível uma [[Special:WhatLinksHere/$2|lista completa]].",
+       "nolinkstoimage": "Não há nenhuma página que use este ficheiro.",
        "morelinkstoimage": "Ver a [[Special:WhatLinksHere/$1|lista completa]] de páginas que contêm hiperligações para este ficheiro.",
        "linkstoimage-redirect": "$1 (redirecionamento de ficheiro) $2",
        "duplicatesoffile": "{{PLURAL:$1|O seguinte ficheiro é duplicado|Os seguintes $1 ficheiros são duplicados}} deste ficheiro ([[Special:FileDuplicateSearch/$2|mais detalhes]]):",
index e0c49ab..c028e0a 100644 (file)
        "customcssprotected": "Nu aveți permisiunea de a modifica această pagină CSS, deoarece conține setările personale ale altui utilizator.",
        "customjsonprotected": "Nu aveți permisiunea de a modifica această pagină JSON, deoarece conține setările personale ale altui utilizator.",
        "customjsprotected": "Nu aveți permisiunea de a modifica această pagină JavaScript, deoarece conține setările personale ale altui utilizator.",
+       "sitecssprotected": "Nu aveți dreptul să editați această pagină CSS deoarece poate afecta toți vizitatorii",
+       "sitejsonprotected": "Nu aveți dreptul să editați această pagină JSON deoarece poate afecta toți vizitatorii",
+       "sitejsprotected": "Nu aveți dreptul să editați această pagină JavaScript deoarece poate afecta toți vizitatorii",
        "mycustomcssprotected": "Nu aveți permisiunea să modificați această pagină CSS.",
        "mycustomjsonprotected": "Nu aveți permisiunea să modificați această pagină JSON.",
        "mycustomjsprotected": "Nu aveți permisiunea să modificați această pagină JavaScript.",
        "ns-specialprotected": "Paginile din spațiul de nume {{ns:special}} nu pot fi editate.",
        "titleprotected": "Acest titlu a fos protejat la creare de [[User:$1|$1]].\nMotivul invocat este <em>$2</em>.",
        "filereadonlyerror": "Imposibil de modificat fișierul „$1”, deoarece depozitul de fișiere „$2” este în modul „doar citire”.\n\nAdministratorul de sistem care a efectuat blocarea a furnizat explicația: „$3”.",
+       "invalidtitle": "Titlu incorect",
        "invalidtitle-knownnamespace": "Titlu invalid cu spațiul de nume „$2” și textul „$3”",
        "invalidtitle-unknownnamespace": "Titlu invalid cu numărul spațiului de nume $1 necunoscut și textul „$2”",
        "exception-nologin": "Neautentificat{{GENDER:||ă}}",
        "group-autoconfirmed": "Utilizatori autoconfirmați",
        "group-bot": "Roboți",
        "group-sysop": "Administratori",
+       "group-interface-admin": "Administratori de interfață",
        "group-bureaucrat": "Birocrați",
        "group-suppress": "Suprimători",
        "group-all": "(toți)",
        "group-autoconfirmed-member": "{{GENDER:$1|utilizator autoconfirmat|utilizatoare autoconfirmată|utilizator autoconfirmat}}",
        "group-bot-member": "{{GENDER:$1|robot}}",
        "group-sysop-member": "{{GENDER:$1|administrator}}",
+       "group-interface-admin-member": "{{GENDER:$1|administrator de interfață}}",
        "group-bureaucrat-member": "{{GENDER:$1|birocrat}}",
        "group-suppress-member": "{{GENDER:$1|suprimător|suprimătoare}}",
        "grouppage-user": "{{ns:project}}:Utilizatori",
        "grouppage-autoconfirmed": "{{ns:project}}:Utilizator autoconfirmați",
        "grouppage-bot": "{{ns:project}}:Boți",
        "grouppage-sysop": "{{ns:project}}:Administratori",
+       "grouppage-interface-admin": "{{ns:project}}:Administratori de interfață",
        "grouppage-bureaucrat": "{{ns:project}}:Birocrați",
        "grouppage-suppress": "{{ns:project}}:Suprimători",
        "right-read": "Citește pagini",
        "right-editusercss": "Modifică fișierele CSS ale altor utilizatori",
        "right-edituserjson": "Modifică fișierele JSON ale altor utilizatori",
        "right-edituserjs": "Modifică fișierele JS ale altor utilizatori",
+       "right-editsitecss": "Editează CSS global",
+       "right-editsitejson": "Editează JSON global",
+       "right-editsitejs": "Editează JavaScript global",
        "right-editmyusercss": "Modificați-vă propriile fișiere CSS",
        "right-editmyuserjson": "Modificați-vă propriile fișiere JSON",
        "right-editmyuserjs": "Modificați-vă propriile fișiere JavaScript",
        "grant-createaccount": "Creare conturi",
        "grant-createeditmovepage": "Creează, editează și redenumește pagini",
        "grant-delete": "Șterge pagini, revizii și loguri",
-       "grant-editinterface": "Editați spațiul de nume MediaWiki și CSS/JSON/JavaScript de utilizator",
+       "grant-editinterface": "Editați spațiul de nume MediaWiki și fișiere JSON globale/de utilizator",
        "grant-editmycssjs": "Editați CSS/JSON/JavaScript ale contului dv.",
        "grant-editmyoptions": "Modificați-vă preferințele de utilizator",
        "grant-editmywatchlist": "Modificați-vă lista de pagini urmărite",
+       "grant-editsiteconfig": "Editează CSS/JS global și de utilizator",
        "grant-editpage": "Editați pagini existente",
        "grant-editprotected": "Editați pagini protejate",
        "grant-highvolume": "Volum mare de editare",
        "rcfilters-filter-humans-label": "Om (nu robot)",
        "rcfilters-filter-humans-description": "Modificări făcute de oameni.",
        "rcfilters-filtergroup-reviewstatus": "Statutul reviziei",
+       "rcfilters-filter-reviewstatus-unpatrolled-description": "Editări nemarcate, manual sau automat, ca patrulate.",
        "rcfilters-filter-reviewstatus-unpatrolled-label": "Nepatrulate",
        "rcfilters-filter-reviewstatus-manual-description": "Modificări marcate manual ca patrulate.",
        "rcfilters-filter-reviewstatus-manual-label": "Patrulate manual",
+       "rcfilters-filter-reviewstatus-auto-description": "Editări făcute de utilizatori avansați a cărui muncă este marcată automat ca patrulată.",
        "rcfilters-filter-reviewstatus-auto-label": "Patrulate automat",
        "rcfilters-filtergroup-significance": "Semnificație",
        "rcfilters-filter-minor-label": "Modificări minore",
        "rcfilters-watchlist-showupdated": "Paginile care au fost modificate după ultima dumneavoastră vizită sunt afișate <strong>îngroșat</strong>.",
        "rcfilters-preference-label": "Ascunde versiunea îmbunătățită a Schimbărilor Recente",
        "rcfilters-preference-help": "Ascunde interfața schimbată în 2017 și toate uneltele adăugate de atunci.",
+       "rcfilters-watchlist-preference-label": "Ascunde versiunea îmbunătățită a liste de pagini urmărite",
        "rcfilters-filter-showlinkedfrom-label": "Arată schimbările pe paginile către care există legături în",
        "rcfilters-filter-showlinkedfrom-option-label": "<strong>Pages la care trimite</strong> pagina selectată",
        "rcfilters-filter-showlinkedto-label": "Arată schimbările din paginile ce trimit la",
        "uploadstash-zero-length": "Fișierul are lungime zero.",
        "invalid-chunk-offset": "Decalaj de segment nevalid",
        "img-auth-accessdenied": "Acces interzis",
-       "img-auth-nopathinfo": "PATH_INFO lipsește.\nServerul dumneavoastră nu a fost setat pentru a trece aceste informații.\nS-ar putea să fie bazat pe CGI și să nu suporte img_auth.\nVedeți https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization.",
+       "img-auth-nopathinfo": "Lipsește informația privitoare la căi.\n\nServerul dumneavoastră trebuie să fie setat pentru a transmite variabilele REQUEST_URI sau PATH_INFO.\n\nDacă face deja acest lucru, încercați să activați $wgUserPathInfo.\n\nVedeți https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization.",
        "img-auth-notindir": "Adresa cerută nu este în directorul pentru încărcări configurat.",
        "img-auth-badtitle": "Nu s-a putut construi un titlu valid din \"$1\".",
        "img-auth-nologinnWL": "Nu sunteți autentificat și \"$1\" nu este pe lista albă.",
        "filehist-filesize": "Mărimea fișierului",
        "filehist-comment": "Comentariu",
        "imagelinks": "Utilizarea fișierului",
-       "linkstoimage": "{{PLURAL:$1|Următoarea pagină trimite|Următoarele $1 pagini trimit spre|Următoarele $1 de pagini trimit}} către acest fișier:",
-       "linkstoimage-more": "Mai mult de $1 {{PLURAL:$1|pagină este legată|pagini sunt legate}} de acest fișier.\nUrmătoarea listă arată {{PLURAL:$1|prima legătură|primele $1 legături}} către acest fișier.\nO [[Special:WhatLinksHere/$2|listă completă]] este disponibilă.",
+       "linkstoimage": "{{PLURAL:$1|Următoarea pagină folosește|Următoarele $1 pagini folosesc |Următoarele $1 de pagini folosesc}} acest fișier:",
+       "linkstoimage-more": "Mai mult de $1 {{PLURAL:$1|pagină folosește|pagini folosesc}} acest fișier.\nUrmătoarea listă arată {{PLURAL:$1|prima legătură|primele $1 legături}} către acest fișier.\nEste disponibilă o [[Special:WhatLinksHere/$2|listă completă]].",
        "nolinkstoimage": "Nicio pagină nu utilizează această imagine.",
        "morelinkstoimage": "Vedeți [[Special:WhatLinksHere/$1|mai multe legături]] către acest fișier.",
        "linkstoimage-redirect": "$1 (redirecționare de fișier) $2",
        "cachedspecial-refresh-now": "Ultima versiune.",
        "categories": "Categorii",
        "categories-submit": "Afișează",
-       "categoriespagetext": "{{PLURAL:$1|Următoarea categorie conține|Următoarele categorii conțin}} pagini sau fișiere.\n[[Special:UnusedCategories|Categoriile neutilizate]] nu apar aici.\nVedeți și [[Special:WantedCategories|categoriile dorite]].",
+       "categoriespagetext": "{{PLURAL:$1|Următoarea categorie|Următoarele categorii}} există pe wiki și ar putea sau nu să fie nefolosite.\nVedeți și [[Special:WantedCategories|categoriile dorite]].",
        "categoriesfrom": "Arată categoriile pornind de la:",
        "deletedcontributions": "Contribuții șterse",
        "deletedcontributions-title": "Contribuții șterse",
        "fix-double-redirects": "Actualizează toate redirecționările care trimit la titlul original",
        "move-leave-redirect": "Lasă în urmă o redirecționare",
        "protectedpagemovewarning": "'''Atenție:''' această pagină a fost protejată astfel încât poate fi redenumită doar de către administratori.\nUltima intrare în jurnal este afișată mai jos pentru referință:",
-       "semiprotectedpagemovewarning": "'''Observație: această pagină a fost protejată, putând fi redenumiră doar de către utilizatorii înregistrați.'''\nUltima intrare în jurnal este afișată mai jos pentru referință:",
+       "semiprotectedpagemovewarning": "<strong>Notă:</strong>  această pagină a fost protejată, putând fi redenumită doar de către utilizatorii autoconfirmați.\nUltima intrare în jurnal este afișată mai jos pentru referință:",
        "move-over-sharedrepo": "[[:$1]] există deja într-un depozit partajat. Redenumirea fișierului la acest titlu va suprascrie fișierul partajat și îl va face inaccesibil.",
        "file-exists-sharedrepo": "Numele ales al fișierului este deja în utilizare într-un depozit împărțit.\nAlegeți un alt nume.",
        "export": "Exportare pagini",
        "diff-form": "Diferențe",
        "diff-form-submit": "Arată diferențele",
        "permanentlink": "Legătură permanentă",
+       "permanentlink-revid": "ID versiune",
        "permanentlink-submit": "Mergi la versiunea",
        "dberr-problems": "Ne cerem scuze! Acest site întâmpină dificultăți tehnice.",
        "dberr-again": "Așteptați câteva minute și încercați din nou.",
        "htmlform-datetime-invalid": "Valoarea introdusă nu este recunoscută ca dată și timp. Încercați să folosiți formatul YYYY-MM-DD HH:MM:SS.",
        "htmlform-date-toolow": "Valoarea introdusă este anterioară primei date permise, $1.",
        "htmlform-date-toohigh": "Valoarea introdusă este posterioară ultimei date permise, $1.",
+       "htmlform-time-toolow": "Valoarea specificată este înainte de prima oră permisă, $1.",
+       "htmlform-time-toohigh": "Valoarea specificată este după ultima oră permisă, $1.",
+       "htmlform-datetime-toolow": "Valoarea specificată este înainte de prima dată permisă, $1.",
+       "htmlform-datetime-toohigh": "Valoarea specificată este după ultima dată permisă, $1.",
        "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ă.",
        "log-action-filter-protect-move_prot": "Mutarea protecției",
        "log-action-filter-rights-rights": "Modificare manuală",
        "log-action-filter-rights-autopromote": "Schimbare automată",
+       "log-action-filter-suppress-event": "Ștergere jurnal",
+       "log-action-filter-suppress-revision": "Ștergere versiune",
+       "log-action-filter-suppress-delete": "Ștergere pagină",
        "log-action-filter-upload-upload": "Încărcare nouă",
        "log-action-filter-upload-overwrite": "Reîncărcare",
+       "authmanager-create-disabled": "Crearea de conturi este dezactivată.",
+       "authmanager-create-from-login": "Pentru a crea contul, vă rugăm să completați câmpurile.",
        "authmanager-authplugin-setpass-failed-title": "Schimbarea parolei a eșuat",
        "authmanager-authplugin-setpass-bad-domain": "Domeniu invalid.",
        "authmanager-userdoesnotexist": "Contul de utilizator „$1” nu este înregistrat.",
        "edit-error-short": "Eroare: $1",
        "edit-error-long": "Erori:\n\n$1",
        "revid": "versiunea $1",
+       "pageid": "ID pagină $1",
+       "interfaceadmin-info": "$1\n\nPermisiunile pentru editarea de CSS/JS/JSON global au fost recent separate de dreptul <code>editinterface</code>. Dacă nu înțelegeți de ce primiți această eroare, vedeți [[mw:MediaWiki_1.32/interface-admin]].",
        "rawhtml-notallowed": "Tagurile &lt;html&gt; nu pot fi folosite în afara paginilor normale.",
        "gotointerwiki": "Se părăsește {{SITENAME}}",
        "gotointerwiki-invalid": "Titlul specificat nu este valid.",
+       "gotointerwiki-external": "Sunteți pe cale să părăsiți {{SITENAME}} pentru a vizita [[$2]], care este un alt site.\n\n'''[$1 Continuați către $1]'''",
+       "undelete-cantedit": "Nu puteți recupera această pagină pentru că nu puteți să o editați.",
+       "undelete-cantcreate": "Nu puteți recupera această pagină deoarece nu există o pagină cu acest nume și nu aveți dreptul să o creați.",
        "pagedata-title": "Datele paginii",
        "pagedata-not-acceptable": "Niciun format corespunzător găsit. Tipuri MIME acceptate: $1",
        "pagedata-bad-title": "Titlu invalid: $1.",
        "passwordpolicies-policy-passwordcannotmatchusername": "Parola nu poate fi identică cu numele de utilizator",
        "passwordpolicies-policy-passwordcannotmatchblacklist": "Parolele nu pot fi cele de pe lista neagră",
        "passwordpolicies-policy-maximalpasswordlength": "Parola trebuie să aibă cel puțin $1 {{PLURAL:$1|caracter|caractere|de caractere}}.",
-       "passwordpolicies-policy-passwordcannotbepopular": "Parola nu poate fi {{PLURAL:$1|o parolă populară|în lista celor $1 parole populare|în lista celor $1 de parole populare}}."
+       "passwordpolicies-policy-passwordcannotbepopular": "Parola nu poate fi {{PLURAL:$1|o parolă populară|în lista celor $1 parole populare|în lista celor $1 de parole populare}}.",
+       "easydeflate-invaliddeflate": "Conținutul oferit nu este comprimat corect"
 }
index aabc640..d58c150 100644 (file)
@@ -26,7 +26,8 @@
                        "C.R.",
                        "Anomie",
                        "Pierpao",
-                       "Fitoschido"
+                       "Fitoschido",
+                       "Vlad5250"
                ]
        },
        "tog-underline": "Unnerline airtins:",
        "right-editcontentmodel": "Eedit the content model o ae page",
        "right-editinterface": "Eedit the uiser interface",
        "right-editusercss": "Eedit ither uisers' CSS files",
+       "right-edituserjson": "Eedit ither uisers' JSON files",
        "right-edituserjs": "Eedit ither uisers' JavaScript files",
        "right-editmyusercss": "Eidit yer ain uiser CSS files",
+       "right-editmyuserjson": "Eedit yer ain uiser JSON files",
        "right-editmyuserjs": "Eedit yer ain uiser JavaScript files",
        "right-viewmywatchlist": "See yer ain watchleet",
        "right-editmywatchlist": "Eedit yer ain watchleet. Mynd that some actions will still eik pages even wioot this richt.",
index 0d4bb24..18a7765 100644 (file)
        "grouppage-bureaucrat": "{{ns:project}}:Byrokrati",
        "grouppage-suppress": "{{ns:project}}:Dozor",
        "right-read": "Čítať stránky",
-       "right-edit": "Upravovať stránky (ktoré nie sú diskusné stránky)",
+       "right-edit": "Upravovať stránky",
        "right-createpage": "Vytvárať stránky (ktoré nie sú diskusné stránky)",
        "right-createtalk": "Vytvárať diskusné stránky",
        "right-createaccount": "Vytvárať nové používateľské kontá",
index d1f3d62..72e7ea5 100644 (file)
        "nosuchaction": "Nuk ekziston ky veprim",
        "nosuchactiontext": "Veprimi i specifikuar nga URL është i pavlefshëm.\nJu mund të keni bërë një gabim në shkrimin e URL-së, ose keni ndjekur një lidhje të pasaktë.\nKjo mund të vijë edhe si rezultat i një gabimi në programin e përdorur nga {{SITENAME}}.",
        "nosuchspecialpage": "Nuk ekziston kjo faqe speciale",
-       "nospecialpagetext": "<strong>Ju keni kërkuar një faqe speciale të pavlefshme.</strong> \n\n Një listë e faqeve speciale të vlefshme mund të gjendet në [[Special:SpecialPages|{{int: specialpages }}]].",
+       "nospecialpagetext": "<strong>Ju keni kërkuar një faqe speciale të pavlefshme.</strong> \n\nNjë listë e faqeve speciale të vlefshme mund të gjendet në [[Special:SpecialPages|{{int: specialpages }}]].",
        "error": "Gabim",
        "databaseerror": "Gabim në databazë",
        "databaseerror-text": "\nKjo mund të tregojë një gabim në software.",
index 41df71d..ef4d5d3 100644 (file)
@@ -42,7 +42,7 @@
                        "Stalker"
                ]
        },
-       "tog-underline": "Ð\9fодвлаÑ\87еÑ\9aе Ð²ÐµÐ·а:",
+       "tog-underline": "Ð\9fодвлаÑ\87еÑ\9aе Ð»Ð¸Ð½ÐºÐ¾Ð²а:",
        "tog-hideminor": "Сакриј мање измене са списка скорашњих измена",
        "tog-hidepatrolled": "Сакриј патролиране измене са списка скорашњих измена",
        "tog-newpageshidepatrolled": "Сакриј патролиране странице са списка нових страница",
@@ -50,7 +50,7 @@
        "tog-extendwatchlist": "Прошири списак надгледања за поглед свих промена, не само скорашњих",
        "tog-usenewrc": "Групиши измене по страници у скорашњим изменама и списку надгледања",
        "tog-numberheadings": "Аутоматски нумериши поднаслове",
-       "tog-showtoolbar": "Прикажи траку с алаткама за уређивање",
+       "tog-showtoolbar": "Прикажи траку са алаткама за уређивање",
        "tog-editondblclick": "Уреди странице двоструким кликом",
        "tog-editsectiononrightclick": "Омогући уређивање одељака десним кликом на њихове наслове",
        "tog-watchcreations": "Додај странице које направим и датотеке које отпремим на мој списак надгледања",
        "tog-enotifwatchlistpages": "Пошаљи ми имејл када се промени страница или датотека са мог списка надгледања",
        "tog-enotifusertalkpages": "Пошаљи ми имејл кад се промени моја корисничка страница за разговор",
        "tog-enotifminoredits": "Пошаљи ми имејл и код мањих измена страница и датотека",
-       "tog-enotifrevealaddr": "Откриј моју имејл адресу у порукама обавештења",
+       "tog-enotifrevealaddr": "Откриј моју имејл-адресу у порукама обавештења",
        "tog-shownumberswatching": "Прикажи број корисника који надгледају",
        "tog-oldsig": "Ваш постојећи потпис:",
-       "tog-fancysig": "Сматрај потпис као викитекст (без самоповезивања)",
+       "tog-fancysig": "Сматрај потпис као викитекст (без аутоматског линка)",
        "tog-uselivepreview": "Прикажи претпреглед без поновног учитавања странице",
-       "tog-forceeditsummary": "Упозори ме када не унесем опис измене",
+       "tog-forceeditsummary": "Упозори ме када не унесем резиме измене",
        "tog-watchlisthideown": "Сакриј моје измене са списка надгледања",
        "tog-watchlisthidebots": "Сакриј измене ботова са списка надгледања",
        "tog-watchlisthideminor": "Сакриј мање измене са списка надгледања",
@@ -84,7 +84,7 @@
        "tog-diffonly": "Не приказуј садржај странице испод разлика",
        "tog-showhiddencats": "Прикажи скривене категорије",
        "tog-norollbackdiff": "Не приказуј разлику након извршеног враћања",
-       "tog-useeditwarning": "Упозори ме када напуштам страницу за уређивање с несачуваним променама",
+       "tog-useeditwarning": "Упозори ме када напуштам страницу за уређивање са несачуваним променама",
        "tog-prefershttps": "Увек користи сигурну везу док сам пријављен/а.",
        "underline-always": "увек",
        "underline-never": "никад",
        "listingcontinuesabbrev": "наст.",
        "index-category": "Пописане странице",
        "noindex-category": "Непописане странице",
-       "broken-file-category": "Странице с неисправним везама до датотека",
+       "broken-file-category": "Странице са неисправним линковима до датотека",
        "categoryviewer-pagedlinks": "$1 ($2)",
        "category-header-numerals": "$1–$2",
        "about": "О нама",
        "tagline": "Извор: {{SITENAME}}",
        "help": "Помоћ",
        "search": "Претрага",
-       "search-ignored-headings": " #<!-- Ð½Ðµ Ð¼ÐµÑ\9aаÑ\98Ñ\82е Ð½Ð¸Ñ\88Ñ\82а Ñ\83 Ð¾Ð²Ð¾Ð¼ Ñ\80едÑ\83 --> <pre>\n# Ð\9dаÑ\81лови ÐºÐ¾Ñ\98и Ñ\9bе Ð±Ð¸Ñ\82и Ð·Ð°Ð½ÐµÐ¼Ð°Ñ\80ени Ð¿Ñ\80и Ð¿Ñ\80еÑ\82Ñ\80ази.\n# Ð\9fÑ\80омене Ñ\81Ñ\83 Ð²Ð¸Ð´Ñ\99иве Ð¾Ð´Ð¼Ð°Ñ\85 Ð½Ð°ÐºÐ¾Ð½ Ñ\88Ñ\82о Ñ\81е Ñ\81Ñ\82Ñ\80аниÑ\86а Ñ\81а Ð½Ð°Ñ\81ловом Ð¿Ð¾Ð¿Ð¸Ñ\88е.\n# Ð\9cожеÑ\82е Ð¸Ð·Ð½Ñ\83диÑ\82и Ð¿Ð¾Ð½Ð¾Ð²Ð½Ð¾ Ð¿Ð¾Ð¿Ð¸Ñ\81иваÑ\9aе â\80\9eнÑ\83лÑ\82омâ\80\9d Ð¸Ð·Ð¼ÐµÐ½Ð¾Ð¼.\n# Ð¡Ð¸Ð½Ñ\82акÑ\81а Ñ\98е Ñ\81ледеÑ\9bа:\n#  * Ð¡Ð²Ð°ÐºÐ¸ Ñ\80ед ÐºÐ¾Ñ\98и Ð·Ð°Ð¿Ð¾Ñ\87иÑ\9aе Ð·Ð½Ð°ÐºÐ¾Ð¼ â\80\9e\80\9d Ñ\98е ÐºÐ¾Ð¼ÐµÐ½Ñ\82аÑ\80.\n#  * Ð¡Ð²Ð°ÐºÐ¸ Ð½Ðµ Ð¿Ñ\80азни Ñ\80ед Ñ\98е Ñ\82аÑ\87ан Ð½Ð°Ñ\81лов ÐºÐ¾Ñ\98и Ñ\9bе Ð±Ð¸Ñ\82и Ð·Ð°Ð½ÐµÐ¼Ð°Ñ\80ен, Ñ\81 Ñ\82им Ð´Ð° Ñ\81е Ñ\80азликÑ\83Ñ\98Ñ\83 Ð¼Ð°Ð»Ð° Ð¸ Ð²ÐµÐ»Ð¸ÐºÐ° Ñ\81лова Ð¸ Ñ\81ве Ð¾Ñ\81Ñ\82ало\nРеÑ\84еÑ\80енÑ\86е\nСпоÑ\99аÑ\88Ñ\9aе Ð²ÐµÐ·Ðµ\nТакође погледајте\n #</pre> <!-- не мењајте ништа у овом реду -->",
+       "search-ignored-headings": " #<!-- Ð½Ðµ Ð¼ÐµÑ\9aаÑ\98Ñ\82е Ð½Ð¸Ñ\88Ñ\82а Ñ\83 Ð¾Ð²Ð¾Ð¼ Ñ\80едÑ\83 --> <pre>\n# Ð\9dаÑ\81лови ÐºÐ¾Ñ\98и Ñ\9bе Ð±Ð¸Ñ\82и Ð·Ð°Ð½ÐµÐ¼Ð°Ñ\80ени Ð¿Ñ\80и Ð¿Ñ\80еÑ\82Ñ\80ази.\n# Ð\9fÑ\80омене Ñ\81Ñ\83 Ð²Ð¸Ð´Ñ\99иве Ð¾Ð´Ð¼Ð°Ñ\85 Ð½Ð°ÐºÐ¾Ð½ Ñ\88Ñ\82о Ñ\81е Ñ\81Ñ\82Ñ\80аниÑ\86а Ñ\81а Ð½Ð°Ñ\81ловом Ð¿Ð¾Ð¿Ð¸Ñ\88е.\n# Ð\9cожеÑ\82е Ð¸Ð·Ð½Ñ\83диÑ\82и Ð¿Ð¾Ð½Ð¾Ð²Ð½Ð¾ Ð¿Ð¾Ð¿Ð¸Ñ\81иваÑ\9aе â\80\9eнÑ\83лÑ\82омâ\80\9d Ð¸Ð·Ð¼ÐµÐ½Ð¾Ð¼.\n# Ð¡Ð¸Ð½Ñ\82акÑ\81а Ñ\98е Ñ\81ледеÑ\9bа:\n#  * Ð¡Ð²Ð°ÐºÐ¸ Ñ\80ед ÐºÐ¾Ñ\98и Ð·Ð°Ð¿Ð¾Ñ\87иÑ\9aе Ð·Ð½Ð°ÐºÐ¾Ð¼ â\80\9e\80\9d Ñ\98е ÐºÐ¾Ð¼ÐµÐ½Ñ\82аÑ\80.\n#  * Ð¡Ð²Ð°ÐºÐ¸ Ð½Ðµ Ð¿Ñ\80азни Ñ\80ед Ñ\98е Ñ\82аÑ\87ан Ð½Ð°Ñ\81лов ÐºÐ¾Ñ\98и Ñ\9bе Ð±Ð¸Ñ\82и Ð·Ð°Ð½ÐµÐ¼Ð°Ñ\80ен, Ñ\81 Ñ\82им Ð´Ð° Ñ\81е Ñ\80азликÑ\83Ñ\98Ñ\83 Ð¼Ð°Ð»Ð° Ð¸ Ð²ÐµÐ»Ð¸ÐºÐ° Ñ\81лова Ð¸ Ñ\81ве Ð¾Ñ\81Ñ\82ало\nРеÑ\84еÑ\80енÑ\86е\nСпоÑ\99аÑ\88Ñ\9aи Ð»Ð¸Ð½ÐºÐ¾Ð²Ð¸\nТакође погледајте\n #</pre> <!-- не мењајте ништа у овом реду -->",
        "searchbutton": "Претражи",
        "go": "Иди",
        "searcharticle": "Иди",
        "history_small": "историја",
        "updatedmarker": "ажурирано од моје последње посете",
        "printableversion": "За штампање",
-       "permalink": "ТÑ\80аÑ\98на Ð²ÐµÐ·Ð°",
+       "permalink": "ТÑ\80аÑ\98ни Ð»Ð¸Ð½Ðº",
        "print": "Штампај",
        "view": "Погледај",
        "view-foreign": "Погледај на пројекту $1",
        "nstab-category": "Категорија",
        "mainpage-nstab": "Главна страна",
        "nosuchaction": "Нема такве радње",
-       "nosuchactiontext": "Радња наведена у URL-у није валидна.\nМожда сте откуцали погрешан URL-а или сте пратили покварену везу.\nОво такође може да указује на грешку у софтверу који користи {{SITENAME}}.",
+       "nosuchactiontext": "Радња наведена у URL-у није валидна.\nМожда сте откуцали погрешан URL-а или сте пратили покварен линк.\nОво такође може да указује на грешку у софтверу који користи {{SITENAME}}.",
        "nosuchspecialpage": "Нема такве посебне странице",
        "nospecialpagetext": "<strong>Захтевали сте невалидну посебну страницу.</strong>\n\nСписак валидних посебних страница може да се пронађе на „[[Special:SpecialPages|{{int:specialpages}}]]”.",
        "error": "Грешка",
        "readonly": "База података је закључана",
        "enterlockreason": "Унесите разлог за закључавање, укључујући и време откључавања",
        "readonlytext": "База података је тренутно закључана, што значи да је није могуће мењати.\n\nСистемски администратор је навео следеће објашњење: $1",
-       "missing-article": "ТекÑ\81Ñ\82 Ñ\81Ñ\82Ñ\80аниÑ\86е Ð¿Ð¾Ð´ Ð½Ð°Ð·Ð¸Ð²Ð¾Ð¼ â\80\9e$1â\80\9c ($2) Ð½Ð¸Ñ\98е Ð¿Ñ\80онаÑ\92ен.\n\nУзÑ\80ок Ð¾Ð²Ðµ Ð³Ñ\80еÑ\88ке Ñ\98е Ð¾Ð±Ð¸Ñ\87но Ð·Ð°Ñ\81Ñ\82аÑ\80ела Ð¸Ð·Ð¼ÐµÐ½Ð° Ð¸Ð»Ð¸ Ð²ÐµÐ·Ð° Ð´Ð¾ Ð¾Ð±Ñ\80иÑ\81ане Ñ\81Ñ\82Ñ\80аниÑ\86е.\n\nÐ\90ко Ñ\81е Ð½Ðµ Ñ\80ади Ð¾ Ñ\82оме, Ð¾Ð½Ð´Ð° Ñ\81Ñ\82е Ð²ÐµÑ\80оваÑ\82но Ð¿Ñ\80онаÑ\88ли Ð³Ñ\80еÑ\88кÑ\83 Ñ\83 Ñ\81оÑ\84Ñ\82веÑ\80Ñ\83.\nÐ\9fÑ\80иÑ\98авиÑ\82е Ñ\98е [[Special:ListUsers/sysop|админиÑ\81Ñ\82Ñ\80аÑ\82оÑ\80Ñ\83]] Ñ\83з Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ\80аÑ\98Ñ\83Ñ\9bÑ\83 Ð²ÐµÐ·Ñ\83.",
+       "missing-article": "ТекÑ\81Ñ\82 Ñ\81Ñ\82Ñ\80аниÑ\86е Ð¿Ð¾Ð´ Ð½Ð°Ð·Ð¸Ð²Ð¾Ð¼ â\80\9e$1â\80\9c ($2) Ð½Ð¸Ñ\98е Ð¿Ñ\80онаÑ\92ен.\n\nУзÑ\80ок Ð¾Ð²Ðµ Ð³Ñ\80еÑ\88ке Ñ\98е Ð¾Ð±Ð¸Ñ\87но Ð·Ð°Ñ\81Ñ\82аÑ\80ела Ð¸Ð·Ð¼ÐµÐ½Ð° Ð¸Ð»Ð¸ Ð»Ð¸Ð½Ðº Ð´Ð¾ Ð¾Ð±Ñ\80иÑ\81ане Ñ\81Ñ\82Ñ\80аниÑ\86е.\n\nÐ\90ко Ñ\81е Ð½Ðµ Ñ\80ади Ð¾ Ñ\82оме, Ð¾Ð½Ð´Ð° Ñ\81Ñ\82е Ð²ÐµÑ\80оваÑ\82но Ð¿Ñ\80онаÑ\88ли Ð³Ñ\80еÑ\88кÑ\83 Ñ\83 Ñ\81оÑ\84Ñ\82веÑ\80Ñ\83.\nÐ\9fÑ\80иÑ\98авиÑ\82е Ñ\98е [[Special:ListUsers/sysop|админиÑ\81Ñ\82Ñ\80аÑ\82оÑ\80Ñ\83]] Ñ\83з Ð¾Ð´Ð³Ð¾Ð²Ð°Ñ\80аÑ\98Ñ\83Ñ\9bи Ð»Ð¸Ð½Ðº.",
        "missingarticle-rev": "(ревизија#: $1)",
        "missingarticle-diff": "(разлика: $1, $2)",
        "readonly_lag": "База података је аутоматски закључана да би се секундарни сервери базе података ускладили с главним.",
        "cannotdelete-title": "Не могу да обришем страницу „$1“",
        "delete-hook-aborted": "Брисање је прекинула кука.\nНије дато никакво образложење.",
        "no-null-revision": "Не могу да направим нову ништавну ревизију странице „$1“",
-       "badtitle": "Ð\9dеиÑ\81пÑ\80аван наслов",
+       "badtitle": "Ð\9bоÑ\88 наслов",
        "badtitletext": "Захтевани наслов странице је неважећи, празан или је погрешно повезан међујезички или међувики наслов.\nМожда садржи један или више знакова који се не могу користити у насловима.",
        "title-invalid-empty": "Тражено име странице је празно или садржи само назив именског простора.",
        "title-invalid-utf8": "Тражени назив странице садржи неважећи UTF-8 знак.",
        "titleprotected": "Овај назив је [[User:$1|$1]] заштитио од прављења. Разлог: <em>$2</em>.",
        "filereadonlyerror": "Не могу да изменим датотеку „$1“ јер је ризница „$2“ у режиму за читање.\n\nСистемски администратор је навео следеће објашњење: „$3“.",
        "invalidtitle": "Неважећи наслов",
-       "invalidtitle-knownnamespace": "Ð\9dеиÑ\81пÑ\80аван Ð½Ð°Ñ\81лов Ñ\81 именским простором „$2“ и текстом „$3“",
-       "invalidtitle-unknownnamespace": "Ð\9dеиÑ\81пÑ\80аван Ð½Ð°Ñ\81лов Ñ\81 именским простором бр. $1 и текстом „$2“",
+       "invalidtitle-knownnamespace": "Ð\9dеважеÑ\9bи Ð½Ð°Ñ\81лов Ñ\81а именским простором „$2“ и текстом „$3“",
+       "invalidtitle-unknownnamespace": "Ð\9dеважеÑ\9bи Ð½Ð°Ñ\81лов Ñ\81а Ð½ÐµÐ¿Ð¾Ð·Ð½Ð°Ñ\82им именским простором бр. $1 и текстом „$2“",
        "exception-nologin": "Нисте пријављени",
        "exception-nologin-text": "Пријавите се да бисте приступили овој страници или радњи.",
        "exception-nologin-text-manual": "Морате бити $1 да бисте приступили овој страници или радњи.",
-       "virus-badscanner": "Ð\9dеиÑ\81пÑ\80авно Ð¿Ð¾Ð´ÐµÑ\88аваÑ\9aе: непознати скенер за вирусе: <em>$1</em>",
+       "virus-badscanner": "Ð\9bоÑ\88а ÐºÐ¾Ð½Ñ\84игÑ\83Ñ\80аÑ\86иÑ\98а: непознати скенер за вирусе: <em>$1</em>",
        "virus-scanfailed": "скенирање није успело (код $1)",
        "virus-unknownscanner": "непознати антивирус:",
        "logouttext": "<strong>Сада сте одјављени.</strong>\n\nЗапамтите да неке странице могу наставити да се приказују као да сте још увек пријављени, све док не очистите кеш свог прегледача.",
        "cannotcreateaccount-text": "Директно прављење налога није омогућено на овом викију.",
        "yourdomainname": "Домен:",
        "password-change-forbidden": "Не можете да промените лозинку на овом викију.",
-       "externaldberror": "Ð\94оÑ\88ло Ñ\98е Ð´Ð¾ Ð³Ñ\80еÑ\88ке Ð¿Ñ\80и Ð°Ñ\83Ñ\82енÑ\82иÑ\84икаÑ\86иÑ\98и базе података или вам није дозвољено да ажурирате свој спољни налог.",
+       "externaldberror": "Ð\94оÑ\88ло Ñ\98е Ð´Ð¾ Ð³Ñ\80еÑ\88ке Ð¿Ñ\80и Ð¿Ð¾Ñ\82вÑ\80ди Ð¸Ð´ÐµÐ½Ñ\82иÑ\82еÑ\82а базе података или вам није дозвољено да ажурирате свој спољни налог.",
        "login": "Пријави ме",
-       "login-security": "Ð\92еÑ\80иÑ\84икаÑ\86иÑ\98а вашег индентитета",
+       "login-security": "Ð\9fоÑ\82вÑ\80да вашег индентитета",
        "nav-login-createaccount": "Пријава/регистрација",
        "logout": "Одјава",
        "userlogout": "Одјава",
        "notloggedin": "Нисте пријављени",
        "userlogin-noaccount": "Немате налог?",
        "userlogin-joinproject": "Придружите се пројекту {{SITENAME}}",
-       "createaccount": "Ð\9eÑ\82воÑ\80и Ð½Ð°Ð»Ð¾Ð³",
+       "createaccount": "Ð\9eÑ\82ваÑ\80аÑ\9aе Ð½Ð°Ð»Ð¾Ð³Ð°",
        "userlogin-resetpassword-link": "Заборавили сте лозинку?",
        "userlogin-helplink2": "Помоћ при пријављивању",
        "userlogin-loggedin": "Већ сте пријављени као {{GENDER:$1|$1}}.\nКористите доњи образац да бисте се пријавили као други корисник.",
-       "userlogin-reauth": "Морате се поново пријавити да би верификовали да сте {{GENDER:$1|$1}}.",
+       "userlogin-reauth": "Морате да се поново пријавите да бисте потврдили да сте {{GENDER:$1|$1}}.",
        "userlogin-createanother": "Отвори још један налог",
-       "createacct-emailrequired": "Имејл адреса",
-       "createacct-emailoptional": "Имејл адреса (опционално)",
-       "createacct-email-ph": "Унесите своју имејл адресу",
-       "createacct-another-email-ph": "Унесите имејл адресу",
-       "createaccountmail": "Користите привремену, случајно створену лозинку и пошаљите на наведену имејл адресу",
+       "createacct-emailrequired": "Имејл-адреса",
+       "createacct-emailoptional": "Имејл-адреса (опционално)",
+       "createacct-email-ph": "Унесите своју имејл-адресу",
+       "createacct-another-email-ph": "Унесите имејл-адресу",
+       "createaccountmail": "Користите привремену, случајну лозинку и пошаљите је на наведену имејл-адресу",
        "createaccountmail-help": "Може се користити да се некоме отвори налог без сазнања лозинке.",
        "createacct-realname": "Право име (опционално)",
        "createacct-reason": "Разлог",
        "nocookiesfornew": "Кориснички налог није отворен јер његов извор није потврђен.\nОмогућите колачиће на прегледачу и поново учитајте страницу.",
        "nocookiesforlogin": "{{int:nocookieslogin}}",
        "createacct-loginerror": "Налог је успешно направљен, али се не можете аутоматски пријавити. Пређите на [[Special:UserLogin|ручно пријављивање]].",
-       "noname": "Унели Ñ\81Ñ\82е Ð½ÐµÐ¸Ñ\81пÑ\80авно корисничко име.",
+       "noname": "Ð\9dиÑ\81Ñ\82е Ð½Ð°Ð²ÐµÐ»Ð¸ Ð²Ð°Ð¶ÐµÑ\9bе корисничко име.",
        "loginsuccesstitle": "Успешно пријављивање",
        "loginsuccess": "<strong>Пријављени сте на {{SITENAME}} као „$1”.</strong>",
        "nosuchuser": "Не постоји корисник с именом „$1“.\nКорисничка имена су осетљива на мала и велика слова.\nПроверите да ли сте га добро унели или [[Special:CreateAccount|отворите нови налог]].",
        "nosuchusershort": "Корисник с именом „$1“ не постоји.\nПроверите да ли сте правилно написали.",
        "nouserspecified": "Морате навести корисничко име.",
        "login-userblocked": "{{GENDER:$1|Овај корисник је блокиран|Ова корисница је блокирана|Овај корисник је блокиран}}. Пријава није дозвољена.",
-       "wrongpassword": "Унели сте неисправно корисничко име или лозинку. Покушајте поново.",
+       "wrongpassword": "Унели сте неисправно корисничко име или лозинку.\nПокушајте поново.",
        "wrongpasswordempty": "Нисте унели лозинку. Покушајте поново.",
        "passwordtooshort": "Лозинка мора имати најмање {{PLURAL:$1|један знак|$1 знака|$1 знакова}}.",
        "passwordtoolong": "Лозинке не могу бити дуже од {{PLURAL:$1|$1 знака|$1 знакова}}.",
        "mailmypassword": "Ресетуј лозинку",
        "passwordremindertitle": "{{SITENAME}} — привремена лозинка",
        "passwordremindertext": "Неко са IP адресе $1 је затражио нову лозинку на викију {{SITENAME}} ($4).\nСтворена је привремена лозинка за {{GENDER:$2|корисника|корисницу|корисника}} $2 која гласи $3.\nУколико је ово ваш захтев, сада се пријавите и поставите нову лозинку.\nПривремена лозинка истиче за {{PLURAL:$5|један дан|$5 дана}}.\n\nАко је неко други затражио промену лозинке, или сте се сетили ваше лозинке и не желите да је мењате, занемарите ову поруку.",
-       "noemail": "Не постоји имејл адреса за {{GENDER:$1|корисника|корисницу}} $1.",
-       "noemailcreate": "Ð\9cоÑ\80аÑ\82е Ð´Ð° Ð½Ð°Ð²ÐµÐ´ÐµÑ\82е Ð²Ð°Ð»Ð¸Ð´Ð½Ñ\83 Ð¸Ð¼ÐµÑ\98л адресу.",
-       "passwordsent": "Нова лозинка је послата на имејл адресу {{GENDER:$1|корисника|кориснице|корисника}} $1.\nПријавите се пошто је примите.",
+       "noemail": "Не постоји имејл-адреса за {{GENDER:$1|корисника|корисницу}} $1.",
+       "noemailcreate": "Ð\9cоÑ\80аÑ\82е Ð´Ð° Ð½Ð°Ð²ÐµÐ´ÐµÑ\82е Ð²Ð°Ð¶ÐµÑ\9bÑ\83 Ð¸Ð¼ÐµÑ\98л-адресу.",
+       "passwordsent": "Нова лозинка је послата на имејл-адресу {{GENDER:$1|корисника|кориснице}} $1.\nПоново се пријавите након што је примите.",
        "blocked-mailpassword": "Уређивање са ваше IP адресе је блокирано. Ради спречавања злоупотребе, забрањена је и функција враћања лозинке са ње.",
-       "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ла Ð´Ð° Ð±Ð¸Ñ\81Ñ\82е Ð¿Ð¾Ñ\82вÑ\80дили Ð´Ð° Ñ\81Ñ\82е Ð\92и Ð¾Ñ\82воÑ\80или Ð½Ð°Ð»Ð¾Ð³.",
+       "eauthentsent": "Ð\98меÑ\98л Ð¾ Ð¿Ð¾Ñ\82вÑ\80ди Ñ\98е Ð¿Ð¾Ñ\81лаÑ\82 Ð½Ð° Ð½Ð°Ð²ÐµÐ´ÐµÐ½Ñ\83 Ð¸Ð¼ÐµÑ\98л-адÑ\80еÑ\81Ñ\83.\nÐ\9fÑ\80е Ð±Ð¸Ð»Ð¾ ÐºÐ¾Ñ\98иÑ\85 Ð´Ñ\80Ñ\83гиÑ\85 Ñ\81лаÑ\9aа Ð¸Ð¼ÐµÑ\98лова Ð½Ð° Ð½Ð°Ð»Ð¾Ð³, Ð¼Ð¾Ñ\80аÑ\9bеÑ\82е Ð¿Ñ\80аÑ\82иÑ\82и Ñ\83пÑ\83Ñ\82Ñ\81Ñ\82ва Ñ\83 Ð¸Ð¼ÐµÑ\98лÑ\83 Ð´Ð° Ð±Ð¸Ñ\81Ñ\82е Ð¿Ð¾Ñ\82вÑ\80дили Ð´Ð° Ñ\98е Ð½Ð°Ð»Ð¾Ð³ Ð·Ð°Ð¸Ñ\81Ñ\82а Ð²Ð°Ñ\88.",
        "throttled-mailpassword": "Порука за промену лозинке је послата у {{PLURAL:$1|1=последњих сат времена|последња $1 сата|последњих $1 сати}}.\nДа бисмо спречили злоупотребу, подсетник шаљемо само једном у року од {{PLURAL:$1|1=сат времена|$1 сата|$1 сати}}.",
        "mailerror": "Грешка при слању поруке: $1",
        "acct_creation_throttle_hit": "Посетиоци овог викија који користе вашу IP адресу су већ отворили {{PLURAL:$1|1=један налог|$1 налога}} претходни $2, што је највећи дозвољени број у том временском периоду.\nЗбог тога посетиоци с ове IP адресе тренутно не могу отворити више налога.",
-       "emailauthenticated": "Ваша имејл адреса је потврђена на дан $2 у $3 ч.",
-       "emailnotauthenticated": "Ваша имејл адреса још увек није потврђена.\nИмејл неће бити послат ни у једном од следећих случајева.",
-       "noemailprefs": "Наведите имејл адресу у својим подешавањима за рад ових могућности.",
-       "emailconfirmlink": "Потврдите своју имејл адресу",
-       "invalidemailaddress": "Имејл адреса не може бити прихваћена јер је невалидног облика.\nУнесите исправну адресу или оставите празно поље.",
-       "cannotchangeemail": "Ð\9dа Ð¾Ð²Ð¾Ð¼ Ð²Ð¸ÐºÐ¸Ñ\98Ñ\83 Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ\82е Ð¿Ñ\80омениÑ\82и Ð¸Ð¼ÐµÑ\98л Ð°Ð´Ñ\80еÑ\81Ñ\83 Ð½Ð°Ð»Ð¾Ð³Ð°.",
+       "emailauthenticated": "Ваша имејл-адреса је потврђена на дан $2 у $3 ч.",
+       "emailnotauthenticated": "Ваша имејл-адреса још није потврђена.\nНиједан имејл неће да буде послат ни у једном од следећих случајева.",
+       "noemailprefs": "Наведите имејл-адресу у својим подешавањима за оспособљавање ових могућности.",
+       "emailconfirmlink": "Потврдите своју имејл-адресу",
+       "invalidemailaddress": "Имејл-адреса не може да буде прихваћена јер је у неважећем облику.\nУнесите исправну адресу или оставите празно поље.",
+       "cannotchangeemail": "Ð\98меÑ\98л-адÑ\80еÑ\81е Ð½Ð°Ð»Ð¾Ð³Ð° Ð½Ðµ Ð¼Ð¾Ð³Ñ\83 Ð´Ð° Ñ\81е Ð¿Ñ\80омене Ð½Ð° Ð¾Ð²Ð¾Ð¼ Ð²Ð¸ÐºÐ¸Ñ\98Ñ\83.",
        "emaildisabled": "Овај сајт не може да шаље имејлове.",
        "accountcreated": "Налог је отворен",
        "accountcreatedtext": "Кориснички налог [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|talk]]) је отворен.",
        "createaccount-title": "Отварање корисничког налога за {{SITENAME}}",
-       "createaccount-text": "Неко је отворио налог с вашом имејл адресом на {{SITENAME}} ($4) под именом $2 и лозинком $3.\nПријавите се и промените своју лозинку.\n\nАко је ово грешка, занемарите ову поруку.",
+       "createaccount-text": "Неко је отворио налог са вашом имејл-адресом на пројекту {{SITENAME}} ($4) под именом „$2“ и са лозинком „$3“.\nОдмах требате да се пријавите и промените своју лозинку.\n\nМожете да занемарите ову поруку, ако је овај налог отворен грешком.",
        "login-throttled": "Превише пута сте покушали да се пријавите.\nСачекајте $1 пре него што покушате поново.",
        "login-abort-generic": "Неуспешна пријава – прекинуто",
        "login-migrated-generic": "Ваш налог је мигриран и ваше корисничко више не постоји на овом викију.",
        "loginlanguagelabel": "Језик: $1",
-       "suspicious-userlogout": "Ваш захтев за одјаву је одбијен јер је послат од стране неисправног прегледача или посредника.",
-       "createacct-another-realname-tip": "Право име  је необавезно.\nАко одаберете да га наведете, биће коришћено за приписивање вашег рада.",
+       "suspicious-userlogout": "Ваш захтев за одјаву је одбијен јер изгледа да га је послао покварени прегледач или кеширани посредник.",
+       "createacct-another-realname-tip": "Право име је опционално.\nАко одаберете да га наведете, биће коришћено за приписивање вашег рада.",
        "pt-login": "Пријави ме",
        "pt-login-button": "Пријави ме",
        "pt-login-continue-button": "Настави пријављивање",
        "pt-createaccount": "Отвори налог",
        "pt-userlogout": "Одјави ме",
        "php-mail-error-unknown": "Непозната грешка у функцији PHP mail().",
-       "user-mail-no-addy": "Покушали сте да пошаљете имејл без имејл адресе.",
+       "user-mail-no-addy": "Покушали сте да пошаљете имејл без имејл-адресе.",
        "user-mail-no-body": "Покушано слање имејла с празним или неразумно кратким садржајем.",
-       "changepassword": "Ð\9fÑ\80омени Ð»Ð¾Ð·Ð¸Ð½ÐºÑ\83",
+       "changepassword": "Ð\9fÑ\80омена Ð»Ð¾Ð·Ð¸Ð½ÐºÐµ",
        "resetpass_announce": "Да бисте завршили пријаву, подесите нову лозинку овде.",
        "resetpass_text": "<!-- Овде унесите текст -->",
        "resetpass_header": "Промена лозинке налога",
        "resetpass-abort-generic": "Промену лозинке је прекинуо додатак.",
        "resetpass-expired": "Ваша лозинка је истекла. Поставите нову лозинку да бисте се пријавили.",
        "resetpass-expired-soft": "Ваша лозинка је истекла и морате је променити. Поставите нову лозинку или кликните „{{int:authprovider-resetpass-skip-label}}“ да је промените касније.",
-       "resetpass-validity-soft": "Ð\92аÑ\88а Ð»Ð¾Ð·Ð¸Ð½ÐºÐ° Ð½Ð¸Ñ\98е Ð²Ð°Ð»Ð¸Ð´Ð½а: $1\n\nИзаберите нову одмах или кликните на „{{int:authprovider-resetpass-skip-label}}“ да је промените касније.",
+       "resetpass-validity-soft": "Ð\92аÑ\88а Ð»Ð¾Ð·Ð¸Ð½ÐºÐ° Ð½Ð¸Ñ\98е Ð²Ð°Ð¶ÐµÑ\9bа: $1\n\nИзаберите нову одмах или кликните на „{{int:authprovider-resetpass-skip-label}}“ да је промените касније.",
        "passwordreset": "Ресетовање лозинке",
        "passwordreset-text-one": "Попуните овај образац да бисте добили привремену лозинку на имејл.",
        "passwordreset-text-many": "{{PLURAL:$1|Испуните једно од поља како бисте добили привремену лозинку на имејл.}}",
        "passwordreset-emaildisabled": "Имејл је онемогућен на овом викију.",
        "passwordreset-username": "Корисничко име:",
        "passwordreset-domain": "Домен:",
-       "passwordreset-email": "Имејл адреса:",
+       "passwordreset-email": "Имејл-адреса:",
        "passwordreset-emailtitle": "Детаљи налога на викију {{SITENAME}}",
-       "passwordreset-emailtext-ip": "Ð\9dеко (веÑ\80оваÑ\82но Ð\92и, Ñ\81 IP Ð°Ð´Ñ\80еÑ\81е $1) Ð·Ð°Ñ\82Ñ\80ажио Ñ\98е Ñ\80еÑ\81еÑ\82оваÑ\9aе Ð\92аÑ\88е \nлозинке Ð·Ð° Ð¿Ñ\80оÑ\98екаÑ\82 {{SITENAME}} ($4). Ð¡Ð»ÐµÐ´ÐµÑ\9bи ÐºÐ¾Ñ\80иÑ\81ниÑ\87ки {{PLURAL:$3|налог Ñ\98е Ð¿Ð¾Ð²ÐµÐ·Ð°Ð½|налози Ñ\81Ñ\83 Ð¿Ð¾Ð²ÐµÐ·Ð°Ð½Ð¸}} \nÑ\81 Ð¾Ð²Ð¾Ð¼ Ð¸Ð¼ÐµÑ\98л Ð°Ð´Ñ\80еÑ\81ом:\n\n$2\n\n{{PLURAL:$3|Ð\9eва Ð¿Ñ\80ивÑ\80емена Ð»Ð¾Ð·Ð¸Ð½ÐºÐ°|Ð\9eве Ð¿Ñ\80ивÑ\80емене Ð»Ð¾Ð·Ð¸Ð½ÐºÐµ}} Ñ\9bе Ð¸Ñ\81Ñ\82еÑ\9bи Ð·Ð° {{PLURAL:$5|Ñ\98едан Ð´Ð°Ð½|$5 Ð´Ð°Ð½Ð°}}.\nТÑ\80ебаÑ\82е Ð´Ð° Ñ\81е Ð¿Ñ\80иÑ\98авиÑ\82е Ð¸ Ð¾Ð´Ð°Ð±ÐµÑ\80иÑ\82е Ð½Ð¾Ð²Ñ\83 Ð»Ð¾Ð·Ð¸Ð½ÐºÑ\83 Ð¾Ð´Ð¼Ð°Ñ\85. Ако је неко други направио овај \nзахтев или сте се сетили своје првобитне лозинке, а не \nжелите да је промените, можете да занемарите ову поруку и наставите да користите своју стару \nлозинку.",
-       "passwordreset-emailtext-user": "{{GENDER:$1|Корисник је затражио|Корисница је затражила}} подсетник о подацима за пријаву на викију {{SITENAME}} ($4).\nСледећи {{PLURAL:$3|кориснички налог је повезан|кориснички налози су повезани}} с овом имејл адресом:\n\n$2\n\n{{PLURAL:$3|Привремена лозинка истиче|Привремене лозинке истичу}} за {{PLURAL:$5|један дан|$5 дана}}.\nПријавите се и изаберите нову лозинку. Ако је неко други захтевао ову радњу или сте се сетили лозинке и не желите да је мењате, занемарите ову поруку.",
+       "passwordreset-emailtext-ip": "Ð\9dеко (веÑ\80оваÑ\82но Ð²Ð¸, Ñ\81а IP Ð°Ð´Ñ\80еÑ\81е $1) Ð·Ð°Ñ\82Ñ\80ажио Ñ\98е Ñ\80еÑ\81еÑ\82оваÑ\9aе Ð²Ð°Ñ\88е \nлозинке Ð·Ð° Ð¿Ñ\80оÑ\98екаÑ\82 {{SITENAME}} ($4). Ð¡Ð»ÐµÐ´ÐµÑ\9bи ÐºÐ¾Ñ\80иÑ\81ниÑ\87ки {{PLURAL:$3|налог Ñ\98е Ð¿Ð¾Ð²ÐµÐ·Ð°Ð½|налози Ñ\81Ñ\83 Ð¿Ð¾Ð²ÐµÐ·Ð°Ð½Ð¸}} \nÑ\81а Ð¾Ð²Ð¾Ð¼ Ð¸Ð¼ÐµÑ\98л Ð°Ð´Ñ\80еÑ\81ом:\n\n$2\n\n{{PLURAL:$3|Ð\9eва Ð¿Ñ\80ивÑ\80емена Ð»Ð¾Ð·Ð¸Ð½ÐºÐ°|Ð\9eве Ð¿Ñ\80ивÑ\80емене Ð»Ð¾Ð·Ð¸Ð½ÐºÐµ}} Ñ\9bе Ð¸Ñ\81Ñ\82еÑ\9bи Ð·Ð° {{PLURAL:$5|Ñ\98едан Ð´Ð°Ð½|$5 Ð´Ð°Ð½Ð°}}.\nÐ\9eдмаÑ\85 Ñ\82Ñ\80ебаÑ\82е Ð´Ð° Ñ\81е Ð¿Ñ\80иÑ\98авиÑ\82е Ð¸ Ð¾Ð´Ð°Ð±ÐµÑ\80иÑ\82е Ð½Ð¾Ð²Ñ\83 Ð»Ð¾Ð·Ð¸Ð½ÐºÑ\83. Ако је неко други направио овај \nзахтев или сте се сетили своје првобитне лозинке, а не \nжелите да је промените, можете да занемарите ову поруку и наставите да користите своју стару \nлозинку.",
+       "passwordreset-emailtext-user": "{{GENDER:$1|Корисник је затражио|Корисница је затражила}} подсетник о подацима за пријаву на викију {{SITENAME}} ($4).\nСледећи {{PLURAL:$3|кориснички налог је повезан|кориснички налози су повезани}} са овом имејл-адресом:\n\n$2\n\n{{PLURAL:$3|Привремена лозинка истиче|Привремене лозинке истичу}} за {{PLURAL:$5|један дан|$5 дана}}.\nПријавите се и изаберите нову лозинку. Ако је неко други захтевао ову радњу или сте се сетили лозинке и не желите да је мењате, занемарите ову поруку.",
        "passwordreset-emailelement": "Корисничко име: \n$1\n\nПривремена лозинка: \n$2",
-       "passwordreset-emailsentemail": "Ð\90ко Ñ\98е Ð¾Ð²Ð¾ Ð¸Ð¼ÐµÑ\98л Ð°Ð´Ñ\80еÑ\81а Ð¿Ð¾Ð²ÐµÐ·Ð°Ð½Ð° Ñ\81а Ð\92аÑ\88им Ð½Ð°Ð»Ð¾Ð³Ð¾Ð¼, Ð¿Ð¾Ð´Ñ\81еÑ\82ник Ð¾ Ð»Ð¾Ð·Ð¸Ð½Ñ\86и Ñ\9bе Ð±Ð¸Ñ\82и Ð¿Ð¾Ñ\81лаÑ\82 Ð½Ð° Ð¸Ð¼ÐµÑ\98л.",
-       "passwordreset-emailsentusername": "Ако сте навели имејл адресу приликом регистрације, биће послат имејл за ресетовање лозинке.",
+       "passwordreset-emailsentemail": "Ð\90ко Ñ\98е Ð¾Ð²Ð° Ð¸Ð¼ÐµÑ\98л-адÑ\80еÑ\81а Ð¿Ð¾Ð²ÐµÐ·Ð°Ð½Ð° Ñ\81а Ð²Ð°Ñ\88им Ð½Ð°Ð»Ð¾Ð³Ð¾Ð¼, Ð¾Ð½Ð´Ð° Ñ\9bе Ð¸Ð¼ÐµÑ\98л Ð¾ Ñ\80еÑ\81еÑ\82оваÑ\9aÑ\83 Ð»Ð¾Ð·Ð¸Ð½ÐºÐµ Ð±Ð¸Ñ\82и Ð¿Ð¾Ñ\81лаÑ\82.",
+       "passwordreset-emailsentusername": "Ако постоји имејл-адреса повезана са овим корисничким именом, онда ће имејл о ресетовању лозинке бити послат.",
        "passwordreset-nocaller": "Позивалац се мора навести",
        "passwordreset-nosuchcaller": "Позивалац не постоји: $1",
        "passwordreset-ignored": "Ресетовање лозинке није успело. Можда послужилац није конфигурисан?",
-       "passwordreset-invalidemail": "Ð\9dеиÑ\81пÑ\80авна Ð¸Ð¼ÐµÑ\98л адреса",
+       "passwordreset-invalidemail": "Ð\9dеважеÑ\9bа Ð¸Ð¼ÐµÑ\98л-адреса",
        "passwordreset-nodata": "Корисничко име и адреса е-поште нису наведени",
-       "changeemail": "Промена или уклањање имејл адресе",
-       "changeemail-header": "Ð\9fопÑ\83ниÑ\82е Ð¾Ð²Ð°Ñ\98 Ð¾Ð±Ñ\80азаÑ\86 Ð´Ð° Ð±Ð¸ Ñ\81Ñ\82е Ð¿Ñ\80оменили Ð\92аÑ\88Ñ\83 Ð¸Ð¼ÐµÑ\98л Ð°Ð´Ñ\80еÑ\81Ñ\83. Ð\90ко Ð¶ÐµÐ»Ð¸ Ð´Ð° Ñ\83Ñ\81кÑ\80аÑ\82иÑ\82е Ð¿Ñ\80иÑ\81Ñ\82Ñ\83п Ð±Ð¸Ð»Ð¾ ÐºÐ¾Ñ\98оÑ\98 Ð¸Ð¼ÐµÑ\98л Ð°Ð´Ñ\80еÑ\81и Ð\92аÑ\88ем Ð½Ð°Ð»Ð¾Ð³Ñ\83, Ð¾Ñ\81Ñ\82авиÑ\82е Ð¿Ñ\80азно Ð¿Ð¾Ñ\99е Ð·Ð° Ð½Ð¾Ð²Ñ\83 Ð¸Ð¼ÐµÑ\98л Ð°Ð´Ñ\80еÑ\81Ñ\83 Ð¿Ñ\80иликом Ð¿Ð¾Ð¿Ñ\83Ñ\9aаваÑ\9aе Ð¾Ð±Ñ\80аÑ\81Ñ\86а.",
+       "changeemail": "Промена или уклањање имејл-адресе",
+       "changeemail-header": "Ð\9fопÑ\83ниÑ\82е Ð¾Ð²Ð°Ñ\98 Ð¾Ð±Ñ\80азаÑ\86 Ð´Ð° Ð±Ð¸ Ñ\81Ñ\82е Ð¿Ñ\80оменили Ð²Ð°Ñ\88Ñ\83 Ð¸Ð¼ÐµÑ\98л-адÑ\80еÑ\81Ñ\83. Ð\90ко Ð±Ð¸Ñ\81Ñ\82е Ð¶ÐµÐ»ÐµÐ»Ð¸ Ð´Ð° Ñ\83клониÑ\82е Ð¿Ð¾Ð²ÐµÐ·Ð°Ð½Ð¾Ñ\81Ñ\82 Ð±Ð¸Ð»Ð¾ ÐºÐ¾Ñ\98е Ð¸Ð¼ÐµÑ\98л-адÑ\80еÑ\81е Ñ\81а Ð²Ð°Ñ\88ег Ð½Ð°Ð»Ð¾Ð³Ð°, Ð¾Ñ\81Ñ\82авиÑ\82е Ð¿Ñ\80азно Ð¿Ð¾Ñ\99е Ð·Ð° Ð½Ð¾Ð²Ñ\83 Ð¸Ð¼ÐµÑ\98л-адÑ\80еÑ\81Ñ\83 ÐºÐ°Ð´Ð° Ñ\88аÑ\99еÑ\82е Ð¾Ð±Ñ\80азаÑ\86.",
        "changeemail-no-info": "Морате бити пријављени да бисте приступили овој страници.",
-       "changeemail-oldemail": "Актуелна имејл адреса:",
+       "changeemail-oldemail": "Актуелна имејл-адреса:",
        "changeemail-newemail": "Нова имејл адреса:",
        "changeemail-none": "(ништа)",
-       "changeemail-password": "Ваша лозинка:",
+       "changeemail-password": "Ваша лозинка за пројекат {{SITENAME}}:",
        "changeemail-submit": "Промени имејл",
        "changeemail-throttled": "Превише пута сте покушали да се пријавите.\nМолимо вас да сачекате $1 пре него што покушате поново.",
        "changeemail-nochange": "Унесите другу имејл адресу.",
-       "resettokens": "Ресетовање жетона",
-       "resettokens-text": "Можете поново поставити жетоне који ће вам омогућити приступ одређеним приватним подацима повезаним са вашим налогом овде.\n\nТребали бисте то да урадите ако их мимо воље поделите с неким или ако је ваш налог угрожен.",
+       "resettokens": "Ресетовање токена",
+       "resettokens-text": "Можете поново поставити жетоне који ће вам омогућити приступ одређеним приватним подацима повезаним са вашим налогом овде.\n\nТребали бисте то да урадите ако их мимо воље поделите са неким или ако је ваш налог угрожен.",
        "resettokens-no-tokens": "Нема жетона за ресетовање.",
        "resettokens-tokens": "Жетони:",
        "resettokens-token-label": "$1 (тренутна вредност: $2)",
        "bold_tip": "Подебљан текст",
        "italic_sample": "Искошен текст",
        "italic_tip": "Искошен текст",
-       "link_sample": "Ð\9dаÑ\81лов Ð²ÐµÐ·Ðµ",
-       "link_tip": "УнÑ\83Ñ\82Ñ\80аÑ\88Ñ\9aа Ð²ÐµÐ·Ð°",
-       "extlink_sample": "http://www.example.com/ Ð½Ð°Ñ\81лов Ð²ÐµÐ·Ðµ",
+       "link_sample": "Ð\9dаÑ\81лов Ð»Ð¸Ð½ÐºÐ°",
+       "link_tip": "УнÑ\83Ñ\82Ñ\80аÑ\88Ñ\9aи Ð»Ð¸Ð½Ðº",
+       "extlink_sample": "http://www.example.com/ Ð½Ð°Ñ\81лов Ð»Ð¸Ð½ÐºÐ°",
        "extlink_tip": "Спољашња веза (с префиксом http://)",
        "headline_sample": "Текст наслова",
        "headline_tip": "Поднаслов (ниво 2)",
        "image_sample": "Пример.jpg",
        "image_tip": "Уграђивање датотеке",
        "media_sample": "Пример.ogg",
-       "media_tip": "Ð\92еза",
-       "sig_tip": "Ваш потпис с временском ознаком",
+       "media_tip": "Ð\9bинк Ð´Ð¾ Ð´Ð°Ñ\82оÑ\82еке",
+       "sig_tip": "Ваш потпис са временском ознаком",
        "hr_tip": "Водоравна линија (користите ретко)",
-       "summary": "Ð\9eпиÑ\81 Ð¸Ð·Ð¼ÐµÐ½е:",
+       "summary": "Резиме:",
        "subject": "Тема:",
        "minoredit": "Ово је мања измена",
        "watchthis": "Надгледај ову страницу",
        "savearticle": "Сачувај страницу",
-       "savechanges": "СаÑ\87Ñ\83ваÑ\98 Ð¸Ð·мене",
+       "savechanges": "СаÑ\87Ñ\83ваÑ\98 Ð¿Ñ\80омене",
        "publishpage": "Објави страницу",
-       "publishchanges": "Ð\9eбÑ\98ави Ð¸Ð·мене",
+       "publishchanges": "Ð\9eбÑ\98ави Ð¿Ñ\80омене",
        "savearticle-start": "Сачувај страницу...",
-       "savechanges-start": "СаÑ\87Ñ\83ваÑ\98 Ð¸Ð·мене...",
+       "savechanges-start": "СаÑ\87Ñ\83ваÑ\98 Ð¿Ñ\80омене...",
        "publishpage-start": "Објави страницу...",
-       "publishchanges-start": "Ð\9eбÑ\98ави Ð¸Ð·мене...",
+       "publishchanges-start": "Ð\9eбÑ\98ави Ð¿Ñ\80омене...",
        "preview": "Претпреглед",
        "showpreview": "Прикажи претпреглед",
        "showdiff": "Прикажи промене",
        "blankarticle": "<strong>Упозорење:</strong> Страница коју правите је празна.\nАко још једном притиснете „$1”, страница ће бити направљена без икаквог садржаја.",
-       "anoneditwarning": "<strong>УпозоÑ\80еÑ\9aе:</strong> Ð\9dиÑ\81Ñ\82е Ð¿Ñ\80иÑ\98авÑ\99ени. Ð\90ко Ð¾Ð±Ñ\98авиÑ\82е Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83, Ð\92аÑ\88а IP Ð°Ð´Ñ\80еÑ\81а Ñ\9bе Ð±Ð¸Ñ\82и Ñ\98авно Ð²Ð¸Ð´Ñ\99ива Ñ\83 Ñ\9aеноÑ\98 Ð¸Ñ\81Ñ\82оÑ\80иÑ\98и Ð¸Ð·Ð¼ÐµÐ½Ð° Ð¸ Ð´Ñ\80Ñ\83где. Ð\90ко Ñ\81е <strong>[$1 Ð¿Ñ\80иÑ\98авиÑ\82е]</strong> Ð¸Ð»Ð¸ <strong>[$2 Ð¾Ñ\82воÑ\80иÑ\82е Ð½Ð°Ð»Ð¾Ð³]</strong>, Ð¿Ð¾Ñ\80ед Ð¾Ñ\81Ñ\82алиÑ\85 Ð¿Ð¾Ð³Ð¾Ð´Ð½Ð¾Ñ\81Ñ\82и ÐºÐ¾Ñ\98е Ð´Ð¾Ð±Ð¸Ñ\98аÑ\82е Ð\92аÑ\88е Ð¸Ð·Ð¼ÐµÐ½Ðµ Ñ\9bе Ð±Ð¸Ñ\82и Ð¿Ñ\80ипиÑ\81иване Ð\92ашем корисничком имену.",
-       "anonpreviewwarning": "<em>Ð\9dиÑ\81Ñ\82е Ð¿Ñ\80иÑ\98авÑ\99ени. Ð\90ко Ð¾Ð±Ñ\98авиÑ\82е Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83, Ð\92аша IP адреса ће бити јавно видљива у њеној историји измена и другде.</em>",
-       "missingsummary": "<strong>Ð\9fодÑ\81еÑ\82ник:</strong> Ð\9dиÑ\81Ñ\82е Ñ\83нели Ð¾Ð¿Ð¸Ñ\81 Ð¸Ð·Ð¼ÐµÐ½Ðµ.\nÐ\90ко Ð¿Ð¾Ð½Ð¾Ð²Ð¾ ÐºÐ»Ð¸ÐºÐ½ÐµÑ\82е Ð½Ð° â\80\9e$1â\80\9d, Ð\92аÑ\88а Ð¸Ð·Ð¼ÐµÐ½Ð° Ñ\9bе Ð±Ð¸Ñ\82и Ñ\81аÑ\87Ñ\83вана Ð±ÐµÐ· Ð¾Ð¿Ð¸Ñ\81а.",
+       "anoneditwarning": "<strong>УпозоÑ\80еÑ\9aе:</strong> Ð\9dиÑ\81Ñ\82е Ð¿Ñ\80иÑ\98авÑ\99ени. Ð\90ко Ð¾Ð±Ñ\98авиÑ\82е Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83, Ð²Ð°Ñ\88а IP Ð°Ð´Ñ\80еÑ\81а Ñ\9bе Ð±Ð¸Ñ\82и Ñ\98авно Ð²Ð¸Ð´Ñ\99ива Ñ\83 Ñ\9aеноÑ\98 Ð¸Ñ\81Ñ\82оÑ\80иÑ\98и Ð¸Ð·Ð¼ÐµÐ½Ð° Ð¸ Ð´Ñ\80Ñ\83где. Ð\90ко Ñ\81е <strong>[$1 Ð¿Ñ\80иÑ\98авиÑ\82е]</strong> Ð¸Ð»Ð¸ <strong>[$2 Ð¾Ñ\82воÑ\80иÑ\82е Ð½Ð°Ð»Ð¾Ð³]</strong>, Ð¿Ð¾Ñ\80ед Ð¾Ñ\81Ñ\82алиÑ\85 Ð¿Ð¾Ð³Ð¾Ð´Ð½Ð¾Ñ\81Ñ\82и ÐºÐ¾Ñ\98е Ð´Ð¾Ð±Ð¸Ñ\98аÑ\82е Ð²Ð°Ñ\88е Ð¸Ð·Ð¼ÐµÐ½Ðµ Ñ\9bе Ð±Ð¸Ñ\82и Ð¿Ñ\80ипиÑ\81иване Ð²ашем корисничком имену.",
+       "anonpreviewwarning": "<em>Ð\9dиÑ\81Ñ\82е Ð¿Ñ\80иÑ\98авÑ\99ени. Ð\90ко Ð¾Ð±Ñ\98авиÑ\82е Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83, Ð²аша IP адреса ће бити јавно видљива у њеној историји измена и другде.</em>",
+       "missingsummary": "<strong>Ð\9fодÑ\81еÑ\82ник:</strong> Ð½Ð¸Ñ\81Ñ\82е Ð½Ð°Ð²ÐµÐ»Ð¸ Ñ\80езиме Ð¸Ð·Ð¼ÐµÐ½Ðµ.\nÐ\90ко Ð¿Ð¾Ð½Ð¾Ð²Ð¾ ÐºÐ»Ð¸ÐºÐ½ÐµÑ\82е Ð½Ð° â\80\9e$1â\80\9d, Ð²Ð°Ñ\88а Ð¸Ð·Ð¼ÐµÐ½Ð° Ñ\9bе Ð±Ð¸Ñ\82и Ñ\81аÑ\87Ñ\83вана Ð±ÐµÐ· Ñ\80езимеа.",
        "selfredirect": "<strong>Упозорење:</strong> Преусмеравате ову страницу на њу саму.\nМожда вам је одредишна страница за преусмерење погрешна или уређујете погрешну страницу.\nАко још једном притиснете „$1”, преусмерење ће свеједно бити направљено.",
        "missingcommenttext": "Молимо унесите коментар.",
        "missingcommentheader": "<strong>Напомена:</strong> Нисте унели наслов теме овог коментара.\nАко поново кликнете на „$1”, измена ће бити сачувана без наслова.",
-       "summary-preview": "Преглед описа измене:",
+       "summary-preview": "Преглед резимеа измене:",
        "subject-preview": "Преглед теме:",
        "previewerrortext": "Дошло је до грешке при покушају прегледа промена.",
        "blockedtitle": "Корисник је блокиран",
        "anontalkpagetext": "----\n<em>Ово је страница за разговор с анонимним корисником који још нема налог или га не користи.</em>\nЗбог тога морамо да користимо бројчану IP адресу како бисмо га препознали.\nТакву адресу може делити више корисника.\nАко сте анонимни корисник и мислите да су вам упућене примедбе, [[Special:CreateAccount|отворите налог]] или се [[Special:UserLogin|пријавите]] да бисте избегли будућу забуну с осталим анонимним корисницима.",
        "noarticletext": "На овој страници тренутно нема текста.\nМожете [[Special:Search/{{PAGENAME}}|потражити овај наслов]] на другим страницама,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} претражити сродне извештаје] или [{{fullurl:{{FULLPAGENAME}}|action=edit}} направити ову страницу]</span>.",
        "noarticletext-nopermission": "Тренутно нема текста на овој страници.\nМожете да [[Special:Search/{{PAGENAME}}|потражите овај наслов странице]] на другим страницама или <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} претражите сродне евиденције]</span>, али немате дозволу да направите ову страницу.",
-       "missing-revision": "Ревизија бр. $1 на страници под именом „{{FULLPAGENAME}}“ не постоји.\n\nОво се обично дешава када пратите застарелу везу до странице која је обрисана.\nВише информација можете да пронађете у [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} евиденцији брисања].",
+       "missing-revision": "Ревизија бр. $1 на страници под именом „{{FULLPAGENAME}}“ не постоји.\n\nОво се обично дешава када пратите застарели линк до странице која је обрисана.\nВише информација можете да пронађете у [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} евиденцији брисања].",
        "userpage-userdoesnotexist": "Кориснички налог „<nowiki>$1</nowiki>“ није отворен.\nРазмислите да ли заиста желите да направите/уредите ову страницу.",
        "userpage-userdoesnotexist-view": "Кориснички налог „$1“ није отворен.",
        "blocked-notice-logextract": "Овај корисник је тренутно блокиран.\nПоследњи унос у евиденцији блокирања је наведен испод као референца:",
        "previewnote": "<strong>Не заборавите да је ово само претпреглед.</strong>\nВаше промене још нису сачуване!",
        "continue-editing": "Иди на уређивачки оквир",
        "previewconflict": "Овај преглед осликава како ће изгледати текст у текстуалном оквиру.",
-       "session_fail_preview": "Ð\98звиÑ\9aавамо Ñ\81е! Ð\9dиÑ\81мо Ð¼Ð¾Ð³Ð»Ð¸ Ð´Ð° Ð¾Ð±Ñ\80адимо Ð\92аÑ\88Ñ\83 Ð¸Ð·Ð¼ÐµÐ½Ñ\83 Ð·Ð±Ð¾Ð³ Ð³Ñ\83биÑ\82ка Ð¿Ð¾Ð´Ð°Ñ\82ака Ñ\81еÑ\81иÑ\98е.\n\nÐ\9cожда Ñ\81Ñ\82е Ð¾Ð´Ñ\98авÑ\99ени. <strong>Ð\9fÑ\80овеÑ\80иÑ\82е Ð´Ð° Ð»Ð¸ Ñ\81Ñ\82е Ð¿Ñ\80иÑ\98авÑ\99ени Ð¸ Ð¿Ð¾ÐºÑ\83Ñ\88аÑ\98Ñ\82е Ð¿Ð¾Ð½Ð¾Ð²Ð¾</strong>.\nÐ\90ко Ð¸ Ð´Ð°Ñ\99е Ð½Ðµ Ñ\80ади, Ð¿Ð¾ÐºÑ\83Ñ\88аÑ\98Ñ\82е Ð´Ð° Ñ\81е [[Special:UserLogout|одÑ\98авиÑ\82е]] Ð¸ Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¿Ñ\80иÑ\98авиÑ\82е, Ñ\82е Ð¿Ñ\80овеÑ\80иÑ\82е Ð´Ð° Ð»Ð¸ Ñ\81Ñ\83 Ð½Ð° Ð\92ашем претраживачу дозвољени колачићи са овог сајта.",
-       "session_fail_preview_html": "Ð\9dиÑ\81мо Ð¼Ð¾Ð³Ð»Ð¸ Ð´Ð° Ð¾Ð±Ñ\80адимо Ð²Ð°Ñ\88Ñ\83 Ð¸Ð·Ð¼ÐµÐ½Ñ\83 Ð·Ð±Ð¾Ð³ Ð³Ñ\83биÑ\82ка Ð¿Ð¾Ð´Ð°Ñ\82ака Ñ\81еÑ\81иÑ\98е.\n\n<em>Ð\91Ñ\83дÑ\83Ñ\9bи Ð´Ð° Ñ\98е Ð½Ð° Ð¾Ð²Ð¾Ð¼ Ð²Ð¸ÐºÐ¸Ñ\98Ñ\83 Ð¾Ð¼Ð¾Ð³Ñ\83Ñ\9bен Ñ\83ноÑ\81 HTML Ð¾Ð·Ð½Ð°ÐºÐ°, Ð¿Ñ\80еглед Ñ\98е Ñ\81акÑ\80ивен ÐºÐ°Ð¾ Ð¼ÐµÑ\80а Ð¿Ñ\80едоÑ\81Ñ\82Ñ\80ожноÑ\81Ñ\82и Ð¿Ñ\80оÑ\82ив Ð½Ð°Ð¿Ð°Ð´Ð° Ð¿Ñ\80еко Ñ\98аваÑ\81кÑ\80ипÑ\82а.</em>\n\n<strong>Ð\90ко Ñ\81Ñ\82е Ð¿Ð¾ÐºÑ\83Ñ\88али Ð´Ð° Ð½Ð°Ð¿Ñ\80авиÑ\82е Ð¿Ñ\80авÑ\83 Ð¸Ð·Ð¼ÐµÐ½Ñ\83, Ð¿Ð¾ÐºÑ\83Ñ\88аÑ\98Ñ\82е Ð¿Ð¾Ð½Ð¾Ð²Ð¾.<strong>\nÐ\90ко Ð¸ Ð´Ð°Ñ\99е Ð½Ðµ Ñ\80ади, Ð¿Ð¾ÐºÑ\83Ñ\88аÑ\98Ñ\82е Ð´Ð° Ñ\81е [[Special:UserLogout|одÑ\98авиÑ\82е]] Ð¸ Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¿Ñ\80иÑ\98авиÑ\82е Ð¸ Ð¿Ñ\80овеÑ\80иÑ\82е Ð´Ð° Ð»Ð¸ Ð\92аш прегледач дозвољава колачиће са овог сајта.",
-       "token_suffix_mismatch": "<strong>Ð\92аÑ\88а Ð¸Ð·Ð¼ÐµÐ½Ð° Ñ\98е Ð¾Ð´Ð±Ð°Ñ\87ена Ñ\98еÑ\80 Ñ\98е Ð²Ð°Ñ\88 Ð¿Ñ\80егледаÑ\87 Ñ\83баÑ\86ио Ð·Ð½Ð°ÐºÐ¾Ð²Ðµ Ð¸Ð½Ñ\82еÑ\80пÑ\83нкÑ\86иÑ\98е Ñ\83 Ð½Ð¾Ð²Ñ\87иÑ\9b Ñ\83Ñ\80еÑ\92иваÑ\9aа.</strong>\nТо Ñ\81е Ð¿Ð¾Ð½ÐµÐºÐ°Ð´ Ð´Ð¾Ð³Ð°Ñ\92а ÐºÐ°Ð´Ð° Ñ\81е ÐºÐ¾Ñ\80иÑ\81Ñ\82и Ð½ÐµÐ¸Ñ\81пÑ\80аван Ð¿Ð¾Ñ\81Ñ\80едник.",
+       "session_fail_preview": "Ð\98звиÑ\9aавамо Ñ\81е! Ð\9dиÑ\81мо Ð¼Ð¾Ð³Ð»Ð¸ Ð´Ð° Ð¾Ð±Ñ\80адимо Ð²Ð°Ñ\88Ñ\83 Ð¸Ð·Ð¼ÐµÐ½Ñ\83 Ð·Ð±Ð¾Ð³ Ð³Ñ\83биÑ\82ка Ð¿Ð¾Ð´Ð°Ñ\82ака Ñ\81еÑ\81иÑ\98е.\n\nÐ\9cожда Ñ\81Ñ\82е Ð¾Ð´Ñ\98авÑ\99ени. <strong>Ð\9fÑ\80овеÑ\80иÑ\82е Ð´Ð° Ð»Ð¸ Ñ\81Ñ\82е Ð¿Ñ\80иÑ\98авÑ\99ени Ð¸ Ð¿Ð¾ÐºÑ\83Ñ\88аÑ\98Ñ\82е Ð¿Ð¾Ð½Ð¾Ð²Ð¾</strong>.\nÐ\90ко Ð¸ Ð´Ð°Ñ\99е Ð½Ðµ Ñ\80ади, Ð¿Ð¾ÐºÑ\83Ñ\88аÑ\98Ñ\82е Ð´Ð° Ñ\81е [[Special:UserLogout|одÑ\98авиÑ\82е]] Ð¸ Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¿Ñ\80иÑ\98авиÑ\82е, Ñ\82е Ð¿Ñ\80овеÑ\80иÑ\82е Ð´Ð° Ð»Ð¸ Ñ\81Ñ\83 Ð½Ð° Ð²ашем претраживачу дозвољени колачићи са овог сајта.",
+       "session_fail_preview_html": "Ð\9dиÑ\81мо Ð¼Ð¾Ð³Ð»Ð¸ Ð´Ð° Ð¾Ð±Ñ\80адимо Ð²Ð°Ñ\88Ñ\83 Ð¸Ð·Ð¼ÐµÐ½Ñ\83 Ð·Ð±Ð¾Ð³ Ð³Ñ\83биÑ\82ка Ð¿Ð¾Ð´Ð°Ñ\82ака Ñ\81еÑ\81иÑ\98е.\n\n<em>Ð\91Ñ\83дÑ\83Ñ\9bи Ð´Ð° Ñ\98е Ð½Ð° Ð¾Ð²Ð¾Ð¼ Ð²Ð¸ÐºÐ¸Ñ\98Ñ\83 Ð¾Ð¼Ð¾Ð³Ñ\83Ñ\9bен Ñ\83ноÑ\81 HTML Ð¾Ð·Ð½Ð°ÐºÐ°, Ð¿Ñ\80еглед Ñ\98е Ñ\81акÑ\80ивен ÐºÐ°Ð¾ Ð¼ÐµÑ\80а Ð¿Ñ\80едоÑ\81Ñ\82Ñ\80ожноÑ\81Ñ\82и Ð¿Ñ\80оÑ\82ив Ð½Ð°Ð¿Ð°Ð´Ð° Ð¿Ñ\80еко Ñ\98аваÑ\81кÑ\80ипÑ\82а.</em>\n\n<strong>Ð\90ко Ñ\81Ñ\82е Ð¿Ð¾ÐºÑ\83Ñ\88али Ð´Ð° Ð½Ð°Ð¿Ñ\80авиÑ\82е Ð¿Ñ\80авÑ\83 Ð¸Ð·Ð¼ÐµÐ½Ñ\83, Ð¿Ð¾ÐºÑ\83Ñ\88аÑ\98Ñ\82е Ð¿Ð¾Ð½Ð¾Ð²Ð¾.<strong>\nÐ\90ко Ð¸ Ð´Ð°Ñ\99е Ð½Ðµ Ñ\80ади, Ð¿Ð¾ÐºÑ\83Ñ\88аÑ\98Ñ\82е Ð´Ð° Ñ\81е [[Special:UserLogout|одÑ\98авиÑ\82е]] Ð¸ Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¿Ñ\80иÑ\98авиÑ\82е Ð¸ Ð¿Ñ\80овеÑ\80иÑ\82е Ð´Ð° Ð»Ð¸ Ð²аш прегледач дозвољава колачиће са овог сајта.",
+       "token_suffix_mismatch": "<strong>Ð\92аÑ\88а Ð¸Ð·Ð¼ÐµÐ½Ð° Ñ\98е Ð¾Ð´Ð±Ð¸Ñ\98ена Ñ\98еÑ\80 Ñ\98е Ð²Ð°Ñ\88 ÐºÐ»Ð¸Ñ\98енÑ\82 Ñ\83баÑ\86ио Ð·Ð½Ð°ÐºÐ¾Ð²Ðµ Ð¸Ð½Ñ\82еÑ\80пÑ\83нкÑ\86иÑ\98е Ñ\83 Ñ\82окен Ñ\83Ñ\80еÑ\92иваÑ\9aа.</strong>\nÐ\98змена Ñ\98е Ð¾Ð´Ð±Ð¸Ñ\98ена Ñ\80ади Ñ\81пÑ\80еÑ\87аваÑ\9aа Ñ\83ниÑ\88Ñ\82аваÑ\9aа Ñ\82екÑ\81Ñ\82а Ñ\81Ñ\82Ñ\80аниÑ\86е.\nÐ\9eво Ñ\81е Ð¿Ð¾Ð½ÐµÐºÐ°Ð´ Ð´Ð¾Ð³Ð°Ñ\92а ÐºÐ°Ð´Ð° ÐºÐ¾Ñ\80иÑ\81Ñ\82иÑ\82е Ð¿Ñ\80облемаÑ\82иÑ\87ни Ð°Ð½Ð¾Ð½Ð¸Ð¼Ð½Ð¸ Ð¿Ð¾Ñ\81Ñ\80едник ÐºÐ¾Ñ\98и Ñ\98е Ð·Ð°Ñ\81нован Ð½Ð° Ð²ÐµÐ±Ñ\83.",
        "edit_form_incomplete": "<strong>Неки делови обрасца за уређивање нису стигли до сервера. Проверите да ли су ваше измене непромењене и покушајте поново.</strong>",
        "editing": "Уређујете $1",
        "creating": "Прављење странице $1",
        "editingold": "<strong>Упозорење: уређујете застарелу ревизију ове странице.</strong>\nАко је сачувате, све промене направљене од ове ревизије ће бити изгубљене.",
        "unicode-support-fail": "Ваш прегледач не подржава Unicode. Он је неопоходан за уређивање страница, па зато не могу сачувати измену.",
        "yourdiff": "Разлике",
-       "copyrightwarning": "Имајте на уму да се сви доприноси на овом викију сматрају као објављени под лиценцом $2 (више на $1).\nАко не желите да се ваши текстови мењају и размењују без ограничења, онда их не шаљите овде.<br />\nИсто тако обећавате да сте Ви аутор текста, или да сте га умножили с извора који је у јавном власништву.\n<strong>Не шаљите радове заштићене ауторским правима без дозволе!</strong>",
+       "copyrightwarning": "Имајте на уму да се сви доприноси на овом викију сматрају као објављени под лиценцом $2 (више на $1).\nАко не желите да се ваши текстови мењају и размењују без ограничења, онда их не шаљите овде.<br />\nИсто тако обећавате да сте Ви аутор текста, или да сте га умножили са извора који је у јавном власништву.\n<strong>Не шаљите радове заштићене ауторским правима без дозволе!</strong>",
        "copyrightwarning2": "Имајте на уму да се сви доприноси на овом викију могу мењати, враћати или брисати од других корисника.\nАко не желите да се ваши текстови слободно мењају и расподељују, не шаљите их овде.<br />\nИсто тако обећавате да сте ви аутор текста, или да сте га умножили с извора који је у јавном власништву (више на $1).\n<strong>Не шаљите радове заштићене ауторским правима без дозволе!</strong>",
        "editpage-cannot-use-custom-model": "Модел садржаја ове странице се не може променити.",
        "longpageerror": "<strong>Грешка: текст који сте унели је величине {{PLURAL:$1|један килобајт|$1 килобајта}}, што је веће од {{PLURAL:$2|дозвољеног једног килобајта|дозвољена $2 килобајта|дозвољених $2 килобајта}}.</strong>\nСтраница не може бити сачувана.",
        "readonlywarning": "<strong>Упозорење: база података је закључана ради одржавања, тако да тренутно нећете моћи да сачувате измене.</strong>\nМожда бисте желели сачувати текст за касније у некој текстуалној датотеци.\n\nСистемски администратор је навео следеће објашњење: $1",
-       "protectedpagewarning": "<strong>УпозоÑ\80еÑ\9aе: Ð¾Ð²Ð° Ñ\81Ñ\82Ñ\80аниÑ\86а Ñ\98е Ð·Ð°Ñ\88Ñ\82иÑ\9bена, Ñ\82ако Ð´Ð° Ñ\81амо ÐºÐ¾Ñ\80иÑ\81ниÑ\86и Ñ\81 Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñ\81Ñ\82Ñ\80аÑ\82оÑ\80Ñ\81ким Ð¾Ð²Ð»Ð°Ñ\88Ñ\9bеÑ\9aима Ð¼Ð¾Ð³Ñ\83 Ð´Ð° Ñ\98е Ð¼ÐµÑ\9aаÑ\98Ñ\83.</strong>\nÐ\9fоÑ\81ледÑ\9aи унос у евиденцији је наведен испод као референца:",
-       "semiprotectedpagewarning": "<strong>Ð\9dапомена:</strong> Ð¾Ð²Ð° Ñ\81Ñ\82Ñ\80аниÑ\86а Ñ\98е Ð·Ð°Ñ\88Ñ\82иÑ\9bена, Ñ\82ако Ð´Ð° Ñ\81амо Ð°Ñ\83Ñ\82омаÑ\82Ñ\81ки Ð¿Ð¾Ñ\82вÑ\80Ñ\92ени ÐºÐ¾Ñ\80иÑ\81ниÑ\86и Ð¼Ð¾Ð³Ñ\83 Ð´Ð° Ñ\98е Ñ\83Ñ\80еÑ\92Ñ\83Ñ\98Ñ\83.\nÐ\9fоÑ\81ледÑ\9aи унос у евиденцији је наведен испод као референца:",
-       "cascadeprotectedwarning": "<strong>Упозорење:</strong> Ова страница је заштићена тако да је могу уређивати само корисници са [[Special:ListGroupRights|одређеним правима]] (администратори), јер је иста укључена у {{PLURAL:$1|следећу страницу која је заштићена|следеће странице које су заштићене}} „преносивом” заштитом:",
-       "titleprotectedwarning": "<strong>УпозоÑ\80еÑ\9aе: Ð¾Ð²Ð° Ñ\81Ñ\82Ñ\80аниÑ\86а Ñ\98е Ð·Ð°Ñ\88Ñ\82иÑ\9bена, Ñ\82ако Ð´Ð° Ñ\81Ñ\83 Ð¿Ð¾Ñ\82Ñ\80ебна [[Special:ListGroupRights|поÑ\81ебна Ð¿Ñ\80ава]] Ð´Ð° Ñ\81е Ð¾Ð½Ð° Ð½Ð°Ð¿Ñ\80ави.</strong>\nÐ\9fоÑ\81ледÑ\9aи унос у евиденцији је наведен испод као референца:",
+       "protectedpagewarning": "<strong>УпозоÑ\80еÑ\9aе: Ð\9eва Ñ\81Ñ\82Ñ\80аниÑ\86а Ñ\98е Ð·Ð°Ñ\88Ñ\82иÑ\9bена, Ñ\82ако Ð´Ð° Ñ\81амо ÐºÐ¾Ñ\80иÑ\81ниÑ\86и Ñ\81а Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñ\81Ñ\82Ñ\80аÑ\82оÑ\80Ñ\81ким Ð¾Ð²Ð»Ð°Ñ\88Ñ\9bеÑ\9aима Ð¼Ð¾Ð³Ñ\83 Ð´Ð° Ñ\98е Ñ\83Ñ\80еÑ\92Ñ\83Ñ\98Ñ\83.</strong>\nÐ\9dаÑ\98новиÑ\98и унос у евиденцији је наведен испод као референца:",
+       "semiprotectedpagewarning": "<strong>Ð\9dапомена:</strong> Ð\9eва Ñ\81Ñ\82Ñ\80аниÑ\86а Ñ\98е Ð·Ð°Ñ\88Ñ\82иÑ\9bена, Ñ\82ако Ð´Ð° Ñ\81амо Ð°Ñ\83Ñ\82омаÑ\82Ñ\81ки Ð¿Ð¾Ñ\82вÑ\80Ñ\92ени ÐºÐ¾Ñ\80иÑ\81ниÑ\86и Ð¼Ð¾Ð³Ñ\83 Ð´Ð° Ñ\98е Ñ\83Ñ\80еÑ\92Ñ\83Ñ\98Ñ\83.\nÐ\9dаÑ\98новиÑ\98и унос у евиденцији је наведен испод као референца:",
+       "cascadeprotectedwarning": "<strong>Упозорење:</strong> Ова страница је заштићена, тако да само корисници са [[Special:ListGroupRights|одређеним правима]] могу да је уређују, јер је она укључена у {{PLURAL:$1|следећу страницу која је заштићена|следеће странице које су заштићене}} преносивом заштитом:",
+       "titleprotectedwarning": "<strong>УпозоÑ\80еÑ\9aе: Ð\9eва Ñ\81Ñ\82Ñ\80аниÑ\86а Ñ\98е Ð·Ð°Ñ\88Ñ\82иÑ\9bена, Ñ\82ако Ð´Ð° Ñ\81Ñ\83 Ð¿Ð¾Ñ\82Ñ\80ебна [[Special:ListGroupRights|поÑ\81ебна Ð¿Ñ\80ава]] Ð´Ð° Ñ\81е Ð¾Ð½Ð° Ð½Ð°Ð¿Ñ\80ави.</strong>\nÐ\9dаÑ\98новиÑ\98и унос у евиденцији је наведен испод као референца:",
        "templatesused": "{{PLURAL:$1|Шаблон који се користи|Шаблони који се користе}} на овој страници:",
        "templatesusedpreview": "{{PLURAL:$1|Шаблон|Шаблони}} у овом претпрегледу:",
        "templatesusedsection": "{{PLURAL:$1|Шаблон|Шаблони}} у овом одељку:",
        "recreate-moveddeleted-warn": "<strong>Упозорење: поново правите страницу која је претходно обрисана.</strong>\n\nРазмотрите да ли је прикладно да наставите с уређивањем ове странице.\nОвде је наведена евиденција брисања и премештања с образложењем:",
        "moveddeleted-notice": "Ова страница је обрисана.\nЕвиденција брисања, заштите и премештања странице је наведена испод као референца.",
        "moveddeleted-notice-recent": "Жао нам је, ова страница је недавно обрисана (у последњих 24 сата).\nЕвиденција њеног брисања, заштите и премештања налази се испод:",
-       "log-fulllog": "Ð\9fогледаÑ\98 Ñ\86елÑ\83 Ð¸Ñ\81Ñ\82оÑ\80ију",
+       "log-fulllog": "Ð\9fогледаÑ\98 Ñ\86елÑ\83 ÐµÐ²Ð¸Ð´ÐµÐ½Ñ\86ију",
        "edit-hook-aborted": "Измену је прекинула кука.\nНије дато никакво образложење.",
        "edit-gone-missing": "Не могу да ажурирам страницу.\nИзгледа да је обрисана.",
        "edit-conflict": "Сукоб измена.",
        "edit-already-exists": "Не могу да направим страницу.\nИзгледа да она већ постоји.",
        "defaultmessagetext": "Подразумевани текст поруке",
        "content-failed-to-parse": "Не могу да рашчланим садржај типа $2 за модел $1: $3",
-       "invalid-content-data": "Ð\9dеиÑ\81пÑ\80авни подаци садржаја",
+       "invalid-content-data": "Ð\9dеважеÑ\9bи подаци садржаја",
        "content-not-allowed-here": "Садржај модела „$1“ није дозвољен на страници [[$2]]",
        "editwarning-warning": "Ако напустите ову страницу, изгубићете све измене које сте направили. Ако сте пријављени, можете онемогућити ово упозорење у својим подешавањима, у одељку „{{int:prefs-editing}}“.",
        "editpage-invalidcontentmodel-title": "Модел садржаја није подржан",
        "duplicate-args-warning": "<strong>Упозорење:</strong> [[:$1]] позива [[:$2]] са више од једне вредности за параметар „$3“. Само последња наведена вредност ће бити коришћена.",
        "duplicate-args-category": "Странице с дуплираним аргументима код позива шаблона",
        "duplicate-args-category-desc": "Страница садржи позиве шаблона који користе двоструке аргументе, као што су <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> или <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
-       "expensive-parserfunction-warning": "<strong>УпозоÑ\80еÑ\9aе:</strong> Ð¾Ð²Ð° Ñ\81Ñ\82Ñ\80аниÑ\86а Ñ\81адÑ\80жи Ð¿Ñ\80евиÑ\88е Ð¿Ð¾Ð·Ð¸Ð²а за рашчлањивање.\n\nТребало би да има мање од $2 {{PLURAL:$2|позив|позива}}, а сада има $1.",
+       "expensive-parserfunction-warning": "<strong>УпозоÑ\80еÑ\9aе:</strong> Ð\9eва Ñ\81Ñ\82Ñ\80аниÑ\86а Ñ\81адÑ\80жи Ð¿Ñ\80евиÑ\88е Ð¿Ð¾Ð·Ð¸Ð²Ð° Ð¾Ð¿Ñ\82еÑ\80еÑ\9bÑ\83Ñ\98Ñ\83Ñ\9bиÑ\85 Ñ\84Ñ\83нкÑ\86иÑ\98а за рашчлањивање.\n\nТребало би да има мање од $2 {{PLURAL:$2|позив|позива}}, а сада има $1.",
        "expensive-parserfunction-category": "Странице с превише позива за рашчлањивање",
        "post-expand-template-inclusion-warning": "<strong>Упозорење:</strong> величина обухваћеног шаблона је превелика.\nНеки шаблони неће бити обухваћени.",
        "post-expand-template-inclusion-category": "Странице где су обухваћени превелики шаблони",
-       "post-expand-template-argument-warning": "'''УпозоÑ\80еÑ\9aе:''' Ð¾Ð²Ð° Ñ\81Ñ\82Ñ\80аниÑ\86а Ñ\81адÑ\80жи Ð½Ð°Ñ\98маÑ\9aе Ñ\98едан Ð°Ñ\80гÑ\83менÑ\82 Ñ\83 Ñ\88аблонÑ\83 ÐºÐ¾Ñ\98и Ð¸Ð¼Ð° Ð¿Ñ\80евеликÑ\83 Ð²ÐµÐ»Ð¸Ñ\87инÑ\83.\nÐ\9eвакве Ð°Ñ\80гÑ\83менÑ\82е Ð±Ð¸ Ñ\82Ñ\80ебало Ð¸Ð·Ð±ÐµÐ³Ð°Ð²Ð°Ñ\82и.",
+       "post-expand-template-argument-warning": "'''УпозоÑ\80еÑ\9aе:''' Ð\9eва Ñ\81Ñ\82Ñ\80аниÑ\86а Ñ\81адÑ\80жи Ð½Ð°Ñ\98маÑ\9aе Ñ\98едан Ð°Ñ\80гÑ\83менÑ\82 Ñ\83 Ñ\88аблонÑ\83 ÐºÐ¾Ñ\98и Ð¸Ð¼Ð° Ð¿Ñ\80евеликÑ\83 Ð²ÐµÐ»Ð¸Ñ\87инÑ\83.\nÐ\9eвакви Ð°Ñ\80гÑ\83менÑ\82и Ñ\82Ñ\80ебаÑ\98Ñ\83 Ð´Ð° Ñ\81е Ð¸Ð·Ð±ÐµÐ³Ð°Ð²Ð°Ñ\98Ñ\83.",
        "post-expand-template-argument-category": "Странице које садрже изостављене аргументе у шаблону",
        "parser-template-loop-warning": "Откривена је петља шаблона: [[$1]]",
-       "template-loop-category": "СÑ\82Ñ\80аниÑ\86е Ñ\81а Ð¿ÐµÑ\82Ñ\99ама Ñ\88аблона",
+       "template-loop-category": "СÑ\82Ñ\80аниÑ\86е Ñ\81а Ð¿ÐµÑ\82Ñ\99ама Ñ\83 Ñ\88аблонима",
        "template-loop-category-desc": "Страница садржи петљу шаблона, тј. шаблон који позива сам ребе рекурзивно.",
        "parser-template-recursion-depth-warning": "Дубина укључивања шаблона је прекорачена ($1)",
        "language-converter-depth-warning": "Прекорачена је граница дубине језичког претварача ($1)",
        "undo-summary-username-hidden": "Поништи измену $1 скривеног корисника",
        "cantcreateaccount-text": "Отварање налога с ове IP адресе (<strong>$1</strong>) је блокирао/ла [[User:$3|$3]].\n\nРазлог који је навео/ла $3 је <em>$2</em>",
        "cantcreateaccount-range-text": "Отварање налога са IP адреса у распону <strong>$1</strong>, који укључује и вашу IP адресу (<strong>$4</strong>) је блокирао/ла [[User:$3|$3]].\n\nРазлог који је навео/ла $3 је <em>$2</em>",
-       "viewpagelogs": "Ð\9fогледаÑ\98 Ðµвиденције ове странице",
+       "viewpagelogs": "Ð\95виденције ове странице",
        "nohistory": "Не постоји историја измена ове странице.",
        "currentrev": "Актуелна ревизија",
        "currentrev-asof": "Најновија ревизија на датум $2 у $3",
        "last": "разл",
        "page_first": "прва",
        "page_last": "последња",
-       "histlegend": "Избор разлика: означите кутијице ревизија за упоређивање и притисните enter или дугме на дну.<br />\nОбјашњење: <strong>({{int:cur}})</strong> = разлика с актуелном ревизијом, <strong>({{int:last}})</strong> = разлика с претходном ревизијом, <strong>{{int:minoreditletter}}</strong> = мања измена",
+       "histlegend": "Избор разлика: означите кутијице ревизија за упоређивање и притисните enter или дугме на дну.<br />\nОбјашњење: <strong>({{int:cur}})</strong> = разлика са актуелном ревизијом, <strong>({{int:last}})</strong> = разлика са претходном ревизијом, <strong>{{int:minoreditletter}}</strong> = мања измена",
        "history-fieldset-title": "Претрага измена",
        "history-show-deleted": "Само обрисане ревизије",
        "histfirst": "најстарије",
        "revdelete-text-file": "Избрисане верзије датотеке ће и даље бити видљиве у историји датотеке, али делови њиховог садржаја неће бити јавно доступни.",
        "logdelete-text": "Обрисани догађаји у евиденцијама ће се идаље појављивати у евиденцији, али ће делови њиховог садржаја бити недоступни јавности.",
        "revdelete-text-others": "Остали администратори ће и даље моћи да приступе скривеном садржају и врате га, осим ако се поставе додатна ограничења.",
-       "revdelete-confirm": "Потврдите да намеравате ово урадити, да разумете последице и да то чините у складу с [[{{MediaWiki:Policy-url}}|правилима]].",
+       "revdelete-confirm": "Потврдите да намеравате ово урадити, да разумете последице и да то чините у складу са [[{{MediaWiki:Policy-url}}|правилима]].",
        "revdelete-suppress-text": "Сакривање измена би требало користити <strong>само</strong> у следећим случајевима:\n* злонамерни или погрдни подаци\n* неприкладни лични подаци\n*: <em>кућна адреса и број телефона, број кредитне картице, ЈМБГ итд.</em>",
        "revdelete-legend": "Ограничења видљивости",
        "revdelete-hide-text": "Текст ревизије",
        "revdelete-hide-image": "Сакриј садржај датотеке",
        "revdelete-hide-name": "Циљ и параметре",
-       "revdelete-hide-comment": "Ð\9eпиÑ\81 измене",
+       "revdelete-hide-comment": "Резиме измене",
        "revdelete-hide-user": "Корисничко име/IP адреса",
        "revdelete-hide-restricted": "Сакриј податке од администратора и других корисника",
        "revdelete-radio-same": "(не мењај)",
        "revdelete-offender": "Аутор ревизије:",
        "suppressionlog": "Евиденција сакривања",
        "suppressionlogtext": "Испод се налази списак брисања и блокирања који укључује садржај сакривен од администратора. Погледајте [[Special:BlockList|списак блокирања]] за списак актуелних операција забрана и блокирања.",
-       "mergehistory": "СпоÑ\98и Ð¸Ñ\81Ñ\82оÑ\80иÑ\98е Ñ\81Ñ\82Ñ\80аниÑ\86а",
+       "mergehistory": "СпаÑ\98аÑ\9aе Ð¸Ñ\81Ñ\82оÑ\80иÑ\98а Ñ\81Ñ\82Ñ\80аниÑ\86е",
        "mergehistory-header": "Ова страница вам омогућава да спојите ревизије неке изворне странице у нову страницу.\nЗапамтите да ће ова промена оставити непромењен садржај историје странице.",
        "mergehistory-box": "Споји измене две странице:",
        "mergehistory-from": "Изворна страница:",
        "mergehistory-into": "Одредишна страница:",
        "mergehistory-list": "Спојива историја измена",
-       "mergehistory-merge": "СледеÑ\9bе Ñ\80евизиÑ\98е Ñ\81Ñ\82Ñ\80аниÑ\86е [[:$1]] Ð¼Ð¾Ð³Ñ\83 Ñ\81е Ñ\81поÑ\98иÑ\82и Ñ\81а [[:$2]].\nÐ\9aоÑ\80иÑ\81Ñ\82иÑ\82е Ð´Ñ\83гмиÑ\9bе Ñ\83 ÐºÐ¾Ð»Ð¾Ð½Ð¸ Ð´Ð° Ð±Ð¸Ñ\81Ñ\82е Ñ\81поÑ\98или Ñ\80евизиÑ\98е ÐºÐ¾Ñ\98е Ñ\81Ñ\83 Ð½Ð°Ð¿Ñ\80авÑ\99ене Ð¿Ñ\80е Ð½Ð°Ð²ÐµÐ´ÐµÐ½Ð¾Ð³ Ð²Ñ\80емена.\nÐ\9aоÑ\80иÑ\88Ñ\9bеÑ\9aе Ð½Ð°Ð²Ð¸Ð³Ð°Ñ\86иониÑ\85 Ð²ÐµÐ·а ће поништити ову колону.",
+       "mergehistory-merge": "СледеÑ\9bе Ñ\80евизиÑ\98е Ñ\81Ñ\82Ñ\80аниÑ\86е [[:$1]] Ð¼Ð¾Ð³Ñ\83 Ñ\81е Ñ\81поÑ\98иÑ\82и Ñ\81а [[:$2]].\nÐ\9aоÑ\80иÑ\81Ñ\82иÑ\82е Ð´Ñ\83гмиÑ\9bе Ñ\83 ÐºÐ¾Ð»Ð¾Ð½Ð¸ Ð´Ð° Ð±Ð¸Ñ\81Ñ\82е Ñ\81поÑ\98или Ñ\80евизиÑ\98е ÐºÐ¾Ñ\98е Ñ\81Ñ\83 Ð½Ð°Ð¿Ñ\80авÑ\99ене Ð¿Ñ\80е Ð½Ð°Ð²ÐµÐ´ÐµÐ½Ð¾Ð³ Ð²Ñ\80емена.\nÐ\9aоÑ\80иÑ\88Ñ\9bеÑ\9aе Ð½Ð°Ð²Ð¸Ð³Ð°Ñ\86иониÑ\85 Ð»Ð¸Ð½ÐºÐ¾Ð²а ће поништити ову колону.",
        "mergehistory-go": "Прикажи измене које се могу спојити",
        "mergehistory-submit": "Споји ревизије",
        "mergehistory-empty": "Нема измена за спајање.",
        "diff-multi-manyusers": "({{PLURAL:$1|Није приказана међуизмена|Нису приказане $1 међуизмене|Није приказано $1 међуизмена}} од више од $2 корисника)",
        "diff-paragraph-moved-tonew": "Пасус је премештен. Кликните да пређете на његово ново место.",
        "diff-paragraph-moved-toold": "Пасус је премештен. Кликните да пређете на његово старо место.",
-       "difference-missing-revision": "{{PLURAL:$2|Једна ревизија|$2 ревизије}} од ове разлике ($1) не {{PLURAL:$2|постоји|постоје}}.\n\nОво се обично дешава када пратите застарелу везу до странице која је обрисана.\nДетаље можете да пронађете у [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} евиденцији брисања].",
+       "difference-missing-revision": "{{PLURAL:$2|Једна ревизија|$2 ревизије}} од ове разлике ($1) не {{PLURAL:$2|постоји|постоје}}.\n\nОво се обично дешава када пратите застарели линк до странице која је обрисана.\nДетаље можете да пронађете у [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} евиденцији брисања].",
        "searchresults": "Резултати претраге",
+       "search-filter-title-prefix-reset": "Претражи све странице",
        "searchresults-title": "Резултати претраге за „$1“",
        "titlematches": "Наслов странице одговара",
        "textmatches": "Текст странице одговара",
        "prefs-rc": "Скорашње измене",
        "prefs-watchlist": "Списак надгледања",
        "prefs-editwatchlist": "Уређивање списка надгледања",
-       "prefs-editwatchlist-label": "Уређивање списка:",
-       "prefs-editwatchlist-edit": "уреди списак",
-       "prefs-editwatchlist-raw": "уреди сиров списак",
+       "prefs-editwatchlist-label": "Уреди уносе на списку надгледања:",
+       "prefs-editwatchlist-edit": "погледајте и уклоните наслове са списка надгледања",
+       "prefs-editwatchlist-raw": "уреди сиров списак надгледања",
        "prefs-editwatchlist-clear": "очисти списак надгледања",
        "prefs-watchlist-days": "Број дана у списку надгледања:",
        "prefs-watchlist-days-max": "Највише $1 {{PLURAL:$1|дан|дана|дана}}",
        "restoreprefs": "Врати сва подешавања на подразумеване вредности (у свим одељцима)",
        "prefs-editing": "Уређивање",
        "searchresultshead": "Претрага",
-       "stub-threshold": "Ð\9fÑ\80аг Ð·Ð° Ð¾Ð±Ð»Ð¸ÐºÐ¾Ð²Ð°Ñ\9aе Ð²ÐµÐ·Ðµ као клице ($1):",
+       "stub-threshold": "Ð\9fÑ\80аг Ð·Ð° Ð¾Ð±Ð»Ð¸ÐºÐ¾Ð²Ð°Ñ\9aе Ð»Ð¸Ð½ÐºÐ¾Ð²Ð° као клице ($1):",
        "stub-threshold-sample-link": "пример",
        "stub-threshold-disabled": "онемогућено",
        "recentchangesdays": "Број дана у скорашњим изменама:",
        "prefs-help-variant": "Жељена варијанта или правопис за приказ страница са садржајем овог викија.",
        "yournick": "Нови потпис:",
        "prefs-help-signature": "Коментари на страницама за разговор треба да буду потписани са „<nowiki>~~~~</nowiki>“ које ће бити претворено у ваш потпис и временску ознаку.",
-       "badsig": "Ð\9dеиÑ\81пÑ\80аван сиров потпис.\nПроверите HTML тагове.",
+       "badsig": "Ð\9dеважеÑ\9bи сиров потпис.\nПроверите HTML тагове.",
        "badsiglength": "Ваш потпис је предугачак.\nНе сме бити дужи од $1 {{PLURAL:$1|знака|знака|знакова}}.",
        "yourgender": "Како желите да се представите?",
        "gender-unknown": "Кад вас спомиње, софтвер ће користити родно неутралне речи кад год је то могуће",
        "email": "Имејл",
        "prefs-help-realname": "Право име је опционално.\nАко је наведено, биће коришћено за приписивање вашег рада.",
        "prefs-help-email": "Имејл адреса је опционална, али је потребна за ресетовање лозинке, ако је заборавите.",
-       "prefs-help-email-others": "ТакоÑ\92е Ð¼Ð¾Ð¶ÐµÑ\82е Ð¸Ð·Ð°Ð±Ñ\80аÑ\82и Ð´Ð° Ð´Ð¾Ð¿Ñ\83Ñ\81Ñ\82иÑ\82е Ð´Ñ\80Ñ\83гима Ð´Ð° Ð²Ð°Ñ\81 ÐºÐ¾Ð½Ñ\82акÑ\82иÑ\80аÑ\98Ñ\83 Ð¿Ñ\80еко Ð¸Ð¼ÐµÑ\98ла Ð¿Ñ\83Ñ\82ем Ð²ÐµÐ·Ðµ на вашој корисничкој страници или страници за разговор.\nВаша имејл адреса неће бити приказана другим корисницима који вас контактирају.",
+       "prefs-help-email-others": "ТакоÑ\92е Ð¼Ð¾Ð¶ÐµÑ\82е Ð¸Ð·Ð°Ð±Ñ\80аÑ\82и Ð´Ð° Ð´Ð¾Ð¿Ñ\83Ñ\81Ñ\82иÑ\82е Ð´Ñ\80Ñ\83гима Ð´Ð° Ð²Ð°Ñ\81 ÐºÐ¾Ð½Ñ\82акÑ\82иÑ\80аÑ\98Ñ\83 Ð¿Ñ\80еко Ð¸Ð¼ÐµÑ\98ла Ð¿Ñ\83Ñ\82ем Ð»Ð¸Ð½ÐºÐ° на вашој корисничкој страници или страници за разговор.\nВаша имејл адреса неће бити приказана другим корисницима који вас контактирају.",
        "prefs-help-email-required": "Потребна је имејл адреса.",
        "prefs-info": "Основне информације",
        "prefs-i18n": "Интернационализација",
        "userrights-invalid-expiry": "Време истицања групе „$1“ није валидно.",
        "userrights-expiry-in-past": "Време истицања групе „$1“ је прошло.",
        "userrights-cannot-shorten-expiry": "Не можете убрзати истек чланства у групи „$1”. Само корисници са дозволом да додају или уклоне ову групу могу да убрзају рок истека.",
-       "userrights-conflict": "СÑ\83коб Ð¿Ñ\80омена ÐºÐ¾Ñ\80иÑ\81ниÑ\87киÑ\85 Ð¿Ñ\80ава! Ð\9cолимо Ð¿Ñ\80овеÑ\80иÑ\82е Ð²Ð°Ñ\88е Ð¸Ð·мене.",
+       "userrights-conflict": "СÑ\83коб Ð¿Ñ\80омена ÐºÐ¾Ñ\80иÑ\81ниÑ\87киÑ\85 Ð¿Ñ\80ава! Ð\9fÑ\80егледаÑ\98Ñ\82е Ð¸ Ð¿Ñ\80овеÑ\80иÑ\82е Ð²Ð°Ñ\88е Ð¿Ñ\80омене.",
        "group": "Група:",
        "group-user": "Корисници",
        "group-autoconfirmed": "Аутоматски потврђени корисници",
        "right-autocreateaccount": "Пријавите се аутоматски са екстерним корисничким налогом",
        "right-minoredit": "означавање измена мањим",
        "right-move": "премештање страница",
-       "right-move-subpages": "премештање страница с њиховим подстраницама",
+       "right-move-subpages": "премештање страница са њиховим подстраницама",
        "right-move-rootuserpages": "премештање основних корисничких страница",
        "right-move-categorypages": "премештање категорија",
        "right-movefile": "премештање датотека",
        "right-apihighlimits": "коришћење виших граница за упите из API-ја",
        "right-writeapi": "коришћење API-ја за писање",
        "right-delete": "брисање страница",
-       "right-bigdelete": "брисање страница с великом историјом",
+       "right-bigdelete": "брисање страница са великом историјом",
        "right-deletelogentry": "брисање и враћање одређених уноса у евиденцији",
        "right-deleterevision": "брисање и враћање одређених ревизија страница",
        "right-deletedhistory": "прегледање обрисаних ставки историје без повезаног текста",
        "right-hideuser": "блокирање корисничког имена и његово сакривање од јавности",
        "right-ipblock-exempt": "заобилажење IP блокада, самоблокада и блокада опсега",
        "right-unblockself": "деблокирање самог себе",
-       "right-protect": "мењање степена заштите и уређивање страница под преносивом заштитом",
+       "right-protect": "мењање нивоа заштите и уређивање страница под преносивом заштитом",
        "right-editprotected": "уређивање страница под заштитом „{{int:protect-level-sysop}}“",
        "right-editsemiprotected": "уређивање страница под заштитом „{{int:protect-level-autoconfirmed}}“",
        "right-editcontentmodel": "мењање модела садржаја странице",
        "right-userrights": "уређивање свих корисничких права",
        "right-userrights-interwiki": "уређивање корисничких права на другим викијима",
        "right-siteadmin": "закључавање и откључавање базе података",
-       "right-override-export-depth": "извоз Ñ\81Ñ\82Ñ\80аниÑ\86а Ñ\83кÑ\99Ñ\83Ñ\87Ñ\83Ñ\98Ñ\83Ñ\9bи Ð¸ Ð¿Ð¾Ð²Ð°Ð·ÐµÐ½Ðµ Ñ\81Ñ\82Ñ\80аниÑ\86е Ð´Ð¾ Ð´Ñ\83бине Ð¾Ð´ Ð¿ÐµÑ\82 Ð²ÐµÐ·а",
+       "right-override-export-depth": "извоз Ñ\81Ñ\82Ñ\80аниÑ\86а Ñ\83кÑ\99Ñ\83Ñ\87Ñ\83Ñ\98Ñ\83Ñ\9bи Ð¸ Ð¿Ð¾Ð²Ð°Ð·ÐµÐ½Ðµ Ñ\81Ñ\82Ñ\80аниÑ\86е Ð´Ð¾ Ð´Ñ\83бине Ð¾Ð´ Ð¿ÐµÑ\82 Ð»Ð¸Ð½ÐºÐ¾Ð²а",
        "right-sendemail": "слање имејла другим корисницима",
        "right-managechangetags": "прављење и (де)активирање [[Special:Tags|ознака]]",
        "right-applychangetags": "примењивање [[Special:Tags|ознака]] на нечије промене",
        "grant-group-high-volume": "Извршавање великог броја радњи",
        "grant-group-customization": "Прилагођавање и подешавања",
        "grant-group-administration": "Извршавање административних радњи",
-       "grant-group-private-information": "Ð\9fÑ\80иÑ\81Ñ\82Ñ\83паÑ\9aе Ð\92аÑ\88им Ð»Ð¸Ñ\87ним подацима",
+       "grant-group-private-information": "Ð\9fÑ\80иÑ\81Ñ\82Ñ\83паÑ\9aе Ð²Ð°Ñ\88им Ð¿Ñ\80иваÑ\82ним подацима",
        "grant-group-other": "Разне активности",
        "grant-blockusers": "Блокирање и деблокирање корисника",
        "grant-createaccount": "Отварање налога",
        "grant-delete": "Брисање страница, ревизија и уноса у евиденцијама",
        "grant-editinterface": "Уређивање Медијавики именског простора и корисничких CSS/JSON/Јаваскрипт страница",
        "grant-editmycssjs": "Уређивање вашег CSS/JSON/Јаваскрипта",
-       "grant-editmyoptions": "УÑ\80еÑ\92иваÑ\9aе Ð\92аÑ\88их подешавања",
+       "grant-editmyoptions": "УÑ\80еÑ\92иваÑ\9aе Ð²Ð°Ñ\88иÑ\85 ÐºÐ¾Ñ\80иÑ\81ниÑ\87ких подешавања",
        "grant-editmywatchlist": "Уређивање вашег списка надгледања",
        "grant-editpage": "Уређивање постојећих страница",
        "grant-editprotected": "Уређивање заштићених страница",
        "rcfilters-clear-all-filters": "Уклоните све филтере",
        "rcfilters-show-new-changes": "Најновије промене",
        "rcfilters-search-placeholder": "Филтрирајте промене (користите мени или претрагу за име филтера)",
-       "rcfilters-invalid-filter": "Ð\9dеиÑ\81пÑ\80аван филтер",
+       "rcfilters-invalid-filter": "Ð\9dеважеÑ\9bи филтер",
        "rcfilters-empty-filter": "Нема активних филтера. Сви доприноси су приказани.",
        "rcfilters-filterlist-title": "Филтери",
        "rcfilters-filterlist-whatsthis": "Како ово функционише?",
        "rcfilters-state-message-fullcoverage": "Одабир свих филтера у групи је исто као и одабир ниједног, тако да овај филтер нема ефекта. Група укључује: $1",
        "rcfilters-filtergroup-authorship": "Ауторство доприноса",
        "rcfilters-filter-editsbyself-label": "Ваше промене",
-       "rcfilters-filter-editsbyself-description": "Ваши доприноси.",
+       "rcfilters-filter-editsbyself-description": "Ваши сопствени доприноси.",
        "rcfilters-filter-editsbyother-label": "Промене других",
-       "rcfilters-filter-editsbyother-description": "Све Ð¸Ð·Ð¼ÐµÐ½Ðµ Ð¾Ñ\81им Ð\92аших.",
+       "rcfilters-filter-editsbyother-description": "Све Ð¸Ð·Ð¼ÐµÐ½Ðµ Ð¾Ñ\81им Ð²аших.",
        "rcfilters-filtergroup-userExpLevel": "Корисничка регистрација и искуство",
        "rcfilters-filter-user-experience-level-registered-label": "Регистровани",
        "rcfilters-filter-user-experience-level-registered-description": "Пријављени уредници.",
        "rcfilters-filter-major-description": "Измене које нису означене као мање.",
        "rcfilters-filtergroup-watchlist": "Странице на списку надгледања",
        "rcfilters-filter-watchlist-watched-label": "На списку надгледања",
-       "rcfilters-filter-watchlist-watched-description": "Ð\9fÑ\80омене Ñ\81Ñ\82Ñ\80аниÑ\86а Ð½Ð° Ð\92ашем списку надгледања.",
+       "rcfilters-filter-watchlist-watched-description": "Ð\9fÑ\80омене Ñ\81Ñ\82Ñ\80аниÑ\86а Ð½Ð° Ð²ашем списку надгледања.",
        "rcfilters-filter-watchlist-watchednew-label": "Нове промене на списку надгледања",
        "rcfilters-filter-watchlist-watchednew-description": "Промене страница на списку надгледања које нисте посетили од када су промене направљене.",
        "rcfilters-filter-watchlist-notwatched-label": "Није на списку надгледања",
-       "rcfilters-filter-watchlist-notwatched-description": "Све Ð¾Ñ\81им Ð¿Ñ\80омена Ñ\81Ñ\82Ñ\80аниÑ\86а Ð½Ð° Ð\92ашем списку надгледања.",
+       "rcfilters-filter-watchlist-notwatched-description": "Све Ð¾Ñ\81им Ð¿Ñ\80омена Ñ\81Ñ\82Ñ\80аниÑ\86а Ð½Ð° Ð²ашем списку надгледања.",
        "rcfilters-filtergroup-watchlistactivity": "Стање на списку надгледања",
        "rcfilters-filter-watchlistactivity-unseen-label": "Непогледане промене",
        "rcfilters-filter-watchlistactivity-unseen-description": "Промене на страницама које нисте посетили од када су промене направљене.",
        "rcfilters-filter-showlinkedto-option-label": "<strong>Странице ка којима воде везе са</strong> изабране странице",
        "rcfilters-target-page-placeholder": "Унесите име странице (или категорије)",
        "rcnotefrom": "Испод {{PLURAL:$5|је промена|су промене}} од <strong>$3, $4</strong> (до <strong>$1</strong> приказано).",
-       "rclistfromreset": "РеÑ\81еÑ\82Ñ\83Ñ\98 Ð¾Ð´Ð°Ð±Ð¸р датума",
+       "rclistfromreset": "РеÑ\81еÑ\82Ñ\83Ñ\98 Ð¸Ð·Ð±Ð¾р датума",
        "rclistfrom": "Прикажи нове промене почев од $2, $3",
        "rcshowhideminor": "$1 мање измене",
        "rcshowhideminor-show": "Прикажи",
        "rc-enhanced-expand": "Прикажи детаље",
        "rc-enhanced-hide": "Сакриј детаље",
        "rc-old-title": "првобитно направљено као „$1“",
-       "recentchangeslinked": "СÑ\80одне Ð¸Ð·мене",
+       "recentchangeslinked": "СÑ\80одне Ð¿Ñ\80омене",
        "recentchangeslinked-feed": "Сродне измене",
-       "recentchangeslinked-toolbox": "СÑ\80одне Ð¸Ð·мене",
+       "recentchangeslinked-toolbox": "СÑ\80одне Ð¿Ñ\80омене",
        "recentchangeslinked-title": "Измене сродне са „$1“",
        "recentchangeslinked-summary": "Унесите име странице да бисте видели промене на страницама које су повезане са или са те странице. (Да бисте видели чланове категорије, унесите {{ns:category}}:Име категорије). Промене на страницама које су на [[Special:Watchlist|Вашем списку надгледања]] су <strong>подебљане</strong>.",
        "recentchangeslinked-page": "Назив странице:",
        "uploadlogpage": "Евиденција отпремања",
        "uploadlogpagetext": "Испод је списак недавних отпремања.\nПогледајте [[Special:NewFiles|галерију нових датотека]] за лепши преглед.",
        "filename": "Назив датотеке",
-       "filedesc": "Ð\9eпиÑ\81",
-       "fileuploadsummary": "Ð\9eпиÑ\81:",
+       "filedesc": "Резиме",
+       "fileuploadsummary": "Резиме:",
        "filereuploadsummary": "Промене датотеке:",
        "filestatus": "Статус ауторског права:",
        "filesource": "Извор:",
        "badfilename": "Име датотеке је промењено у „$1“.",
        "filetype-mime-mismatch": "Проширење датотеке „.$1“ не одговара препознатом типу MIME датотеке ($2).",
        "filetype-badmime": "Датотеке MIME типа „$1“ није дозвољено слати.",
-       "filetype-bad-ie-mime": "Ð\9eва Ð´Ð°Ñ\82оÑ\82ека Ñ\81е Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð¿Ð¾Ñ\81лаÑ\82и Ð·Ð°Ñ\82о Ñ\88Ñ\82о Ð±Ð¸ Ñ\98е Ð\98нÑ\82еÑ\80неÑ\82 ÐµÐºÑ\81плоÑ\80еÑ\80 Ñ\83оÑ\87ио ÐºÐ°Ð¾ â\80\9e$1â\80\9c, Ð° Ñ\82о Ñ\98е Ð·Ð°Ð±Ñ\80аÑ\9aена Ð¸ Ð¾Ð¿Ð°Ñ\81на Ð²Ñ\80Ñ\81Ñ\82а датотеке.",
-       "filetype-unwanted-type": "„.$1“ је непожељна врста датотеке.\n{{PLURAL:$3|Пожељна врста датотеке је|Пожељне врсте датотека су}} $2.",
-       "filetype-banned-type": "'''„.$1“''' {{PLURAL:$4|је забрањена врста датотеке|су забрањене врсте датотека}}.\n{{PLURAL:$3|Дозвољена врста датотеке је|Дозвољене врсте датотека су}} $2.",
+       "filetype-bad-ie-mime": "Ð\9dе Ð¼Ð¾Ð³Ñ\83 Ð´Ð° Ð¾Ñ\82пÑ\80емим Ð¾Ð²Ñ\83 Ð´Ð°Ñ\82оÑ\82екÑ\83 Ñ\98еÑ\80 Ð±Ð¸ Ñ\98е Ð\98нÑ\82еÑ\80неÑ\82 ÐµÐºÑ\81плоÑ\80еÑ\80 Ð¿Ñ\80епознао ÐºÐ°Ð¾ â\80\9e$1â\80\9c, Ñ\88Ñ\82о Ñ\98е Ð½ÐµÐ´Ð¾Ð·Ð²Ð¾Ñ\99ен Ð¸ Ð¿Ð¾Ñ\82енÑ\86иÑ\98ално Ð¾Ð¿Ð°Ñ\81ан Ñ\82ип датотеке.",
+       "filetype-unwanted-type": "<strong>„.$1“</strong> је непожељан тип датотеке.\n{{PLURAL:$3|Пожељан тип датотеке је|Пожељни типови датотека су}} $2.",
+       "filetype-banned-type": "<strong>„.$1“</strong> {{PLURAL:$4|није допуштен тип датотеке|нису допуштени типови датотека}}.\n{{PLURAL:$3|Дозвољен тип датотеке је|Дозвољени типови датотека су}} $2.",
        "filetype-missing": "Ова датотека нема проширење (нпр. „.jpg“).",
        "empty-file": "Послата датотека је празна.",
        "file-too-large": "Послата датотека је превелика.",
        "filename-tooshort": "Назив датотеке је прекратак.",
-       "filetype-banned": "Ð\92Ñ\80Ñ\81Ñ\82а Ð´Ð°Ñ\82оÑ\82еке Ñ\98е Ð·Ð°Ð±Ñ\80аÑ\9aена.",
+       "filetype-banned": "Ð\9eваÑ\98 Ñ\82ип Ð´Ð°Ñ\82оÑ\82еке Ñ\98е Ð·Ð°Ð±Ñ\80аÑ\9aен.",
        "verification-error": "Ова датотека није прошла проверу.",
        "hookaborted": "Измену коју сте покушали да направите је прекинуо додатак.",
        "illegal-filename": "Назив датотеке је забрањен.",
        "large-file": "Препоручљиво је да датотеке не буду веће од $1; ова датотека је $2.",
        "largefileserver": "Ова датотека прелази ограничење величине.",
        "emptyfile": "Датотека коју сте послали је празна.\nУзрок може бити грешка у називу датотеке.\nПроверите да ли заиста желите да је пошаљете.",
-       "windows-nonascii-filename": "Ð\9eваÑ\98 Ð²Ð¸ÐºÐ¸ Ð½Ðµ Ð¿Ð¾Ð´Ñ\80жава Ð½Ð°Ð·Ð¸Ð²Ðµ Ð´Ð°Ñ\82оÑ\82ека Ñ\81 посебним знацима.",
+       "windows-nonascii-filename": "Ð\9eваÑ\98 Ð²Ð¸ÐºÐ¸ Ð½Ðµ Ð¿Ð¾Ð´Ñ\80жава Ð¸Ð¼ÐµÐ½Ð° Ð´Ð°Ñ\82оÑ\82ека Ñ\81а посебним знацима.",
        "fileexists": "Датотека с овим именом већ постоји. Погледајте <strong>[[:$1]]</strong> ако нисте сигурни да ли желите да је промените.\n[[$1|thumb]]",
        "filepageexists": "Страница с описом ове датотеке је већ направљена овде <strong>[[:$1]]</strong>, иако датотека не постоји.\nОпис који сте навели се неће појавити на страници с описом.\nДа би се ваш опис овде нашао, потребно је да га ручно измените.\n[[$1|thumb]]",
        "fileexists-extension": "Датотека са сличним називом већ постоји: [[$2|thumb]]\n* Назив датотеке коју шаљете: <strong>[[:$1]]</strong>\n* Назив постојеће датотеке: <strong>[[:$2]]</strong>\nДа ли желите да користите препознатљивије име?",
        "fileexists-thumbnail-yes": "Изгледа да је датотека умањено издање слике ''(thumbnail)''.\n[[$1|thumb]]\nПроверите датотеку <strong>[[:$1]]</strong>.\nАко је проверена датотека иста слика оригиналне величине, није потребно слати додатну слику.",
        "file-thumbnail-no": "Датотека почиње са <strong>$1</strong>.\nИзгледа да се ради о умањеној слици ''(thumbnail)''.\nУколико имате ову слику у пуној величини, пошаљите је, а ако немате, промените назив датотеке.",
        "fileexists-forbidden": "Датотека с овим називом већ постоји и не може се заменити.\nАко и даље желите да пошаљете датотеку, вратите се и изаберите други назив.\n[[File:$1|thumb|center|$1]]",
-       "fileexists-shared-forbidden": "Датотека с овим називом већ постоји у заједничкој остави.\nВратите се и пошаљите датотеку с другим називом.\n[[File:$1|thumb|center|$1]]",
+       "fileexists-shared-forbidden": "Датотека са овим називом већ постоји у заједничкој остави.\nВратите се и пошаљите датотеку са другим називом.\n[[File:$1|thumb|center|$1]]",
        "fileexists-no-change": "Датотека је дупликат актуелне верзије <strong>[[:$1]]</strong>.",
        "fileexists-duplicate-version": "Датотека је дупликат {{PLURAL:$2|старе верзије|старих верзија}} <strong>[[:$1]]</strong>.",
        "file-exists-duplicate": "Ово је дупликат {{PLURAL:$1|следеће датотеке|следећих датотека}}:",
        "filewasdeleted": "Датотека с овим називом је раније послата, али је обрисана.\nПроверите $1 пре него што наставите с поновним слањем.",
        "filename-bad-prefix": "Назив датотеке коју шаљете почиње са <strong>„$1“</strong>, а њега обично додељују дигитални фотоапарати.\nИзаберите назив датотеке који описује њен садржај.",
        "filename-prefix-blacklist": " #<!-- оставите овај ред онаквим какав јесте --> <pre>\n# Синтакса је следећа:\n#   * Све од тарабе па до краја реда је коментар\n#   * Сваки ред означава префикс типичних назива датотека које додељивају дигитални апарати\nCIMG # Касио\nDSC_ # Никон\nDSCF # Фуџи\nDSCN # Никон\nDUW # неки мобилни телефони\nIMG # опште\nJD # Џеноптик\nMGP # Пентакс\nPICT # разно\n #</pre> <!-- оставите овај ред онаквим какав јесте -->",
-       "upload-proto-error": "Ð\9dеиÑ\81пÑ\80аван протокол",
+       "upload-proto-error": "Ð\9dеважеÑ\9bи протокол",
        "upload-proto-error-text": "Слање са спољне локације захтева адресу која почиње са <code>http://</code> или <code>ftp://</code>.",
        "upload-file-error": "Унутрашња грешка",
        "upload-file-error-text": "Дошло је до унутрашње грешке при отварању привремене датотеке на серверу.\nКонтактирајте [[Special:ListUsers/sysop|администратора]].",
        "zip-wrong-format": "Наведена датотека није формата ZIP.",
        "zip-bad": "Датотека је оштећена или је нечитљива ZIP датотека.\nБезбедносна провера не може да се изврши како треба.",
        "zip-unsupported": "Датотека је формата ZIP који користи могућности које не подржава Медијавики.\nБезбедносна провера не може да се изврши како треба.",
-       "uploadstash": "ТаÑ\98но Ñ\81кладиÑ\88Ñ\82е",
+       "uploadstash": "Ð\9eÑ\82пÑ\80емаÑ\9aе Ð½Ð¸Ð·Ð° Ð´Ð°Ñ\82оÑ\82ека",
        "uploadstash-summary": "Ова страница пружа приступ датотекама које су отпремљене или се отпремају, али још нису објављене. Ове датотеке нису видљиве никоме, осим кориснику који их је отпремио.",
        "uploadstash-clear": "Очисти сакривене датотеке",
        "uploadstash-nofiles": "Немате сакривене датотеке.",
        "uploadstash-file-not-found-no-local-path": "Нема локалне путање за умањену ставку.",
        "uploadstash-file-not-found-no-object": "Не могу направити локални датотечни објекат за минијатуру.",
        "uploadstash-file-not-found-no-remote-thumb": "Добављање минијатуре није успело: $1\nАдреса = $2",
-       "uploadstash-file-not-found-missing-content-type": "Недостаје заглавље за врсту садржаја.",
+       "uploadstash-file-not-found-missing-content-type": "Недостаје заглавље за тип садржаја.",
        "uploadstash-file-not-found-not-exists": "Не могу наћи путању или ово није обична датотека.",
        "uploadstash-file-too-large": "Не могу послужити датотеку већу од $1 {{PLURAL:$1|бајта|бајтова}}",
        "uploadstash-not-logged-in": "Нико није пријављен. Датотеке морају припадати корисницима.",
        "uploadstash-no-such-key": "Нема таквог кључа ($1). Не могу уклонити.",
        "uploadstash-no-extension": "Додатак је празан.",
        "uploadstash-zero-length": "Датотека је празна",
-       "invalid-chunk-offset": "Ð\9dеиÑ\81пÑ\80авна полазна тачка",
+       "invalid-chunk-offset": "Ð\9dеважеÑ\9bа полазна тачка",
        "img-auth-accessdenied": "Приступ је одбијен",
        "img-auth-nopathinfo": "Недостаје PATH_INFO.\nВаш сервер није подешен да прослеђује овакве податке.\nМожда је заснован на CGI-ју који не подржава img_auth.\nПогледајте https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization?uselang=sr-ec.",
        "img-auth-notindir": "Захтевана путања није у подешеној фасцикли за отпремање.",
        "img-auth-streaming": "Учитавам „$1“...",
        "img-auth-public": "Сврха img_auth.php је да прослеђује датотеке из приватних викија.\nОвај вики је постављен као јавни.\nРади сигурности, img_auth.php је онемогућен.",
        "img-auth-noread": "Корисник нема приступ за читање „$1“.",
-       "http-invalid-url": "Ð\9dеиÑ\81пÑ\80авна Ð°Ð´Ñ\80еÑ\81а: $1",
+       "http-invalid-url": "Ð\9dеважеÑ\9bи URL: $1",
        "http-invalid-scheme": "Адресе са шемом „$1“ нису подржане.",
        "http-request-error": "HTTP захтев није прошао због непознате грешке.",
        "http-read-error": "HTTP грешка при читању.",
        "http-timed-out": "Захтев HTTP је истекао.",
        "http-curl-error": "Грешка при отварању адресе: $1",
        "http-bad-status": "Дошло је до проблема током захтева HTTP: $1 $2",
+       "http-internal-error": "HTTP интерна грешка.",
        "upload-curl-error6": "Не могу да приступим адреси",
        "upload-curl-error6-text": "Не могу да приступим наведеном URL-у.\nПроверите да ли је URL исправан и доступан.",
        "upload-curl-error28": "Отпремање је истекло",
        "nolicense": "Није изабрано",
        "licenses-edit": "Уреди избор лиценци",
        "license-nopreview": "(преглед није доступан)",
-       "upload_source_url": "(ваÑ\88а Ð¸Ð·Ð°Ð±Ñ\80ана Ð´Ð°Ñ\82оÑ\82ека Ð¾Ð´ Ð¸Ñ\81пÑ\80авниÑ\85 Ð¸ јавно доступних адреса)",
+       "upload_source_url": "(ваÑ\88а Ð¸Ð·Ð°Ð±Ñ\80ана Ð´Ð°Ñ\82оÑ\82ека Ð¾Ð´ Ð²Ð°Ð¶ÐµÑ\9bиÑ\85, јавно доступних адреса)",
        "upload_source_file": "(ваша одабрана датотека са вашег рачунара)",
        "listfiles-delete": "обриши",
        "listfiles-summary": "Ова посебна страница приказује све отпремљене датотеке.",
        "linkstoimage": "{{PLURAL:$1|Следећа страница користи|$1 следеће странице користе|$1 следећих страница користи}} ову датотеку:",
        "linkstoimage-more": "Више од $1 {{PLURAL:$1|странице користи|странице користе|страница користе}} ову датотеку.\nСледећи списак приказује само {{PLURAL:$1|прву страницу која користи|прве $1 странице које користе|првих $1 страница које користе}} ову датотеку.\nДоступан је и [[Special:WhatLinksHere/$2|потпуни списак]].",
        "nolinkstoimage": "Нема страница које користе ову датотеку.",
-       "morelinkstoimage": "Ð\9fогледаÑ\98Ñ\82е [[Special:WhatLinksHere/$1|виÑ\88е Ð²ÐµÐ·а]] до ове датотеке.",
+       "morelinkstoimage": "Ð\9fогледаÑ\98Ñ\82е [[Special:WhatLinksHere/$1|виÑ\88е Ð»Ð¸Ð½ÐºÐ¾Ð²а]] до ове датотеке.",
        "linkstoimage-redirect": "$1 (преусмерење датотеке) $2",
        "duplicatesoffile": "{{PLURAL:$1|Следећа датотека је дупликат|Следеће $1 датотеке су дупликати|Следећих $1 датотека су дупликати}} ове датотеке ([[Special:FileDuplicateSearch/$2|детаљније]]):",
        "sharedupload": "Ова датотека се налази на $1 и може се користити и на другим пројектима.",
        "upload-disallowed-here": "Не можете да замените ову датотеку.",
        "filerevert": "Врати $1",
        "filerevert-legend": "Врати датотеку",
-       "filerevert-intro": "Враћате датотеку '''[[Media:$1|$1]]''' на [$4 издање од $2; $3].",
+       "filerevert-intro": "Враћате датотеку <strong>[[Media:$1|$1]]</strong> на [$4 верзију од $2; $3].",
        "filerevert-comment": "Разлог:",
        "filerevert-defaultcomment": "Враћено на верзију од $2, $1 ($3)",
        "filerevert-submit": "Врати",
-       "filerevert-success": "Датотека '''[[Media:$1|$1]]''' је враћена на [$4 издање од $2; $3].",
-       "filerevert-badversion": "Ð\9dе Ð¿Ð¾Ñ\81Ñ\82оÑ\98и Ñ\80аниÑ\98е Ð»Ð¾ÐºÐ°Ð»Ð½Ð¾ Ð¸Ð·Ð´Ð°Ñ\9aе Ð´Ð°Ñ\82оÑ\82еке Ñ\81 Ð½Ð°Ð²ÐµÐ´ÐµÐ½Ð¸Ð¼ Ð²Ñ\80еменÑ\81ким Ð¿Ð¾Ð´Ð°Ñ\86има.",
+       "filerevert-success": "Датотека <strong>[[Media:$1|$1]]</strong> је враћена на [$4 верзију од $2; $3].",
+       "filerevert-badversion": "Ð\9dе Ð¿Ð¾Ñ\81Ñ\82оÑ\98и Ñ\80аниÑ\98а Ð»Ð¾ÐºÐ°Ð»Ð½Ð° Ð²ÐµÑ\80зиÑ\98а Ð¾Ð²Ðµ Ð´Ð°Ñ\82оÑ\82еке Ñ\81а Ð½Ð°Ð²ÐµÐ´ÐµÐ½Ð¾Ð¼ Ð²Ñ\80еменÑ\81ком Ð¾Ð·Ð½Ð°ÐºÐ¾Ð¼.",
        "filerevert-identical": "Актуелна верзија датотеке је индентична изабраној.",
        "filedelete": "Обриши $1",
        "filedelete-legend": "Обриши датотеку",
        "filedelete-comment": "Разлог:",
        "filedelete-submit": "Обриши",
        "filedelete-success": "Датотека '''$1''' је обрисана.",
-       "filedelete-success-old": "Ð\98здаÑ\9aе '''[[Media:$1|$1]]''' Ð¾Ð´ $2, $3 Ñ\98е Ð¾Ð±Ñ\80иÑ\81ано.",
+       "filedelete-success-old": "Ð\92еÑ\80зиÑ\98а Ð´Ð°Ñ\82оÑ\82еке <strong>[[Media:$1|$1]]</strong> Ð¾Ð´ $2, $3 Ñ\98е Ð¾Ð±Ñ\80иÑ\81ана.",
        "filedelete-nofile": "Датотека '''$1''' не постоји.",
-       "filedelete-nofile-old": "Ð\9dе Ð¿Ð¾Ñ\81Ñ\82оÑ\98и Ð°Ñ\80Ñ\85ивиÑ\80ано Ð¸Ð·Ð´Ð°Ñ\9aе Ð´Ð°Ñ\82оÑ\82еке '''$1''' Ñ\81 наведеним особинама.",
+       "filedelete-nofile-old": "Ð\9dе Ð¿Ð¾Ñ\81Ñ\82оÑ\98и Ð°Ñ\80Ñ\85ивиÑ\80ана Ð²ÐµÑ\80зиÑ\98а Ð´Ð°Ñ\82оÑ\82еке <strong>$1</strong> Ñ\81а наведеним особинама.",
        "filedelete-otherreason": "Други/додатни разлог:",
        "filedelete-reason-otherlist": "Други разлог",
        "filedelete-reason-dropdown": "*Најчешћи разлози брисања\n** Кршење ауторских права\n** Дупликати датотека",
        "download": "преузми",
        "unwatchedpages": "Ненадгледане странице",
        "listredirects": "Списак преусмерења",
-       "listduplicatedfiles": "Списак дуплираних датотека",
+       "listduplicatedfiles": "Списак датотека са дупликатима",
        "listduplicatedfiles-summary": "Ово је списак датотека које су дупликат неких других датотека. Само локалне датотеке су приказане.",
        "listduplicatedfiles-entry": "[[:File:$1|$1]] има [[$3|{{PLURAL:$2|један дупликат|$2 дупликата}}]].",
        "unusedtemplates": "Некоришћени шаблони",
        "statistics-users": "Регистровани корисници",
        "statistics-users-active": "Активни корисници",
        "statistics-users-active-desc": "Корисници који су извршили бар једну радњу {{PLURAL:$1|1=претходни дан|у последња $1 дана|у последњих $1 дана}}",
-       "pageswithprop": "СÑ\82Ñ\80ане Ñ\81 Ð¾Ñ\81обином Ñ\81Ñ\82Ñ\80ане",
+       "pageswithprop": "СÑ\82Ñ\80аниÑ\86е Ñ\81а Ñ\81воÑ\98Ñ\81Ñ\82вом Ñ\81Ñ\82Ñ\80аниÑ\86е",
        "pageswithprop-legend": "Стране с особином стране",
        "pageswithprop-text": "Ова страна излистава стране које имају одређену особину",
        "pageswithprop-prop": "Име особине:",
        "pageswithprop-prophidden-long": "сакривено дуго текстуално својство ($1)",
        "pageswithprop-prophidden-binary": "сакривено дуго бинарно својство ($1)",
        "doubleredirects": "Двострука преусмерења",
-       "doubleredirectstext": "Ð\9eва Ñ\81Ñ\82Ñ\80аниÑ\86а Ð¿Ñ\80иказÑ\83Ñ\98е Ñ\81Ñ\82Ñ\80аниÑ\86е ÐºÐ¾Ñ\98е Ð¿Ñ\80еÑ\83Ñ\81меÑ\80аваÑ\98Ñ\83 Ð½Ð° Ð´Ñ\80Ñ\83га Ð¿Ñ\80еÑ\83Ñ\81меÑ\80еÑ\9aа.\nСваки Ñ\80ед Ñ\81адÑ\80жи Ð²ÐµÐ·е према првом и другом преусмерењу, као и одредишну страницу другог преусмерења која је обично „прави“ чланак на кога прво преусмерење треба да упућује.\n<del>Прецртани</del> уноси су већ решени.",
+       "doubleredirectstext": "Ð\9eва Ñ\81Ñ\82Ñ\80аниÑ\86а Ð¿Ñ\80иказÑ\83Ñ\98е Ñ\81Ñ\82Ñ\80аниÑ\86е ÐºÐ¾Ñ\98е Ð¿Ñ\80еÑ\83Ñ\81меÑ\80аваÑ\98Ñ\83 Ð½Ð° Ð´Ñ\80Ñ\83га Ð¿Ñ\80еÑ\83Ñ\81меÑ\80еÑ\9aа.\nСваки Ñ\80ед Ñ\81адÑ\80жи Ð»Ð¸Ð½ÐºÐ¾Ð²е према првом и другом преусмерењу, као и одредишну страницу другог преусмерења која је обично „прави“ чланак на кога прво преусмерење треба да упућује.\n<del>Прецртани</del> уноси су већ решени.",
        "double-redirect-fixed-move": "[[$1]] је премештен.\nАутоматски је ажурирано и сада преусмерава на [[$2]].",
        "double-redirect-fixed-maintenance": "Аутоматски исправља двострука преусмерења из [[$1]] у [[$2]] као део одржавања",
        "double-redirect-fixer": "Исправљач преусмерења",
        "brokenredirects": "Покварена преусмерења",
-       "brokenredirectstext": "Следећа преусмерења упућују на непостојеће странице:",
+       "brokenredirectstext": "Следећа преусмерења воде на непостојеће странице:",
        "brokenredirects-edit": "уреди",
        "brokenredirects-delete": "обриши",
-       "withoutinterwiki": "СÑ\82Ñ\80аниÑ\86е Ð±ÐµÐ· Ñ\98езиÑ\87киÑ\85 Ð²ÐµÐ·а",
-       "withoutinterwiki-summary": "СледеÑ\9bе Ñ\81Ñ\82Ñ\80аниÑ\86е Ð½Ð¸Ñ\81Ñ\83 Ð¿Ð¾Ð²ÐµÐ·Ð°Ð½Ðµ Ñ\81 другим језицима.",
+       "withoutinterwiki": "СÑ\82Ñ\80аниÑ\86е Ð±ÐµÐ· Ñ\98езиÑ\87киÑ\85 Ð»Ð¸Ð½ÐºÐ¾Ð²а",
+       "withoutinterwiki-summary": "СледеÑ\9bе Ñ\81Ñ\82Ñ\80аниÑ\86е Ð½ÐµÐ¼Ð°Ñ\98Ñ\83 Ð»Ð¸Ð½ÐºÐ¾Ð²Ðµ Ð¿Ñ\80ема Ð²ÐµÑ\80зиÑ\98ама Ð½Ð° другим језицима.",
        "withoutinterwiki-legend": "Префикс",
        "withoutinterwiki-submit": "Прикажи",
-       "fewestrevisions": "Странице с најмање ревизија",
+       "fewestrevisions": "Странице са најмање ревизија",
        "nbytes": "$1 {{PLURAL:$1|бајт|бајта|бајтова}}",
        "ncategories": "$1 {{PLURAL:$1|категорија|категорије|категорија}}",
        "ninterwikis": "$1 {{PLURAL:$1|међувики|међувикија|међувикија}}",
-       "nlinks": "$1 {{PLURAL:$1|веза|везе|веза}}",
+       "nlinks": "$1 {{PLURAL:$1|линк|линка|линкова}}",
        "nmembers": "$1 {{PLURAL:$1|члан|члана|чланова}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|члан|члана|чланова}}",
        "nrevisions": "$1 {{PLURAL:$1|ревизија|ревизије|ревизија}}",
        "unusedimages": "Некоришћене датотеке",
        "wantedcategories": "Тражене категорије",
        "wantedpages": "Тражене странице",
-       "wantedpages-summary": "СпиÑ\81ак Ð½ÐµÐ¿Ð¾Ñ\81Ñ\82оÑ\98еÑ\9bиÑ\85 Ñ\81Ñ\82Ñ\80аниÑ\86а Ñ\81а Ð½Ð°Ñ\98виÑ\88е Ð²ÐµÐ·а до њих, на овом списку се не налазе странице до којих воде преусмерења. За списак покварених преусмерења погледајте [[{{#special:BrokenRedirects}}|списак покварених преусмерења]].",
-       "wantedpages-badtitle": "Ð\9dеиÑ\81пÑ\80аван Ð½Ð°Ñ\81лов Ñ\83 Ñ\81еÑ\82у резултата: $1",
+       "wantedpages-summary": "СпиÑ\81ак Ð½ÐµÐ¿Ð¾Ñ\81Ñ\82оÑ\98еÑ\9bиÑ\85 Ñ\81Ñ\82Ñ\80аниÑ\86а Ñ\81а Ð½Ð°Ñ\98виÑ\88е Ð»Ð¸Ð½ÐºÐ¾Ð²а до њих, на овом списку се не налазе странице до којих воде преусмерења. За списак покварених преусмерења погледајте [[{{#special:BrokenRedirects}}|списак покварених преусмерења]].",
+       "wantedpages-badtitle": "Ð\9dеважеÑ\9bи Ð½Ð°Ñ\81лов Ñ\83 Ñ\81кÑ\83пу резултата: $1",
        "wantedfiles": "Тражене датотеке",
        "wantedfiletext-cat": "Следеће датотеке се користе, али не постоје. Датотеке из других ризница могу бити наведене иако не постоје. Такве датотеке ће бити <del>поништене</del> са списка. Поред тога, странице које садрже непостојеће датотеке се налазе [[:$1|овде]].",
        "wantedfiletext-nocat": "Следеће датотеке се користе, али не постоје. Датотеке из других ризница могу бити наведене иако не постоје. Такве датотеке ће бити <del>поништене</del> са списка.",
        "wantedfiletext-nocat-noforeign": "Следеће датотеке се користе, али не постоје.",
        "wantedtemplates": "Тражени шаблони",
-       "mostlinked": "Странице с највише веза",
-       "mostlinkedcategories": "Категорије с највише веза",
-       "mostlinkedtemplates": "Странице с највише веза",
-       "mostcategories": "Странице с највише категорија",
-       "mostimages": "Датотеке с највише веза",
+       "mostlinked": "Странице са највише линкова",
+       "mostlinkedcategories": "Категорије са највише веза",
+       "mostlinkedtemplates": "Странице са највише веза",
+       "mostcategories": "Странице са највише категорија",
+       "mostimages": "Датотеке са највише линкова",
        "mostinterwikis": "Странице са највише међувикија",
-       "mostrevisions": "Странице с највише ревизија",
-       "prefixindex": "Све странице с префиксом",
+       "mostrevisions": "Странице са највише ревизија",
+       "prefixindex": "Све странице са префиксом",
        "prefixindex-namespace": "Све странице с предметком (именски простор $1)",
        "prefixindex-submit": "Прикажи",
        "prefixindex-strip": "Сакриј префикс у списку",
        "shortpages": "Кратке странице",
        "longpages": "Дугачке странице",
-       "deadendpages": "СÑ\82Ñ\80аниÑ\86е Ð±ÐµÐ· Ñ\83нÑ\83Ñ\82Ñ\80аÑ\88Ñ\9aиÑ\85 Ð²ÐµÐ·Ð°",
-       "deadendpagestext": "СледеÑ\9bе Ñ\81Ñ\82Ñ\80аниÑ\86е Ð½ÐµÐ¼Ð°Ñ\98Ñ\83 Ð²ÐµÐ·е до других страница на овом викију.",
+       "deadendpages": "Ð\8bоÑ\80Ñ\81окаÑ\86и",
+       "deadendpagestext": "СледеÑ\9bе Ñ\81Ñ\82Ñ\80аниÑ\86е Ð½ÐµÐ¼Ð°Ñ\98Ñ\83 Ð»Ð¸Ð½ÐºÐ¾Ð²е до других страница на овом викију.",
        "protectedpages": "Заштићене странице",
        "protectedpages-filters": "Филтери:",
        "protectedpages-indef": "Само неограничене заштите",
        "apisandbox-request-time": "Време за извршавање захтјева: {{PLURAL:$1|$1 милисекунда|$1 милисекунде|$1 милисекунди}}",
        "apisandbox-results-fixtoken": "Исправи токен и пошаљи поново",
        "apisandbox-results-fixtoken-fail": "Неуспело добијање „$1“ токена.",
-       "apisandbox-alert-page": "Поља на страници су неисправна.",
-       "apisandbox-alert-field": "Вредност овог поља је неисправна.",
+       "apisandbox-alert-page": "Поља на страници нису важећа.",
+       "apisandbox-alert-field": "Вредност овог поља није важећа.",
        "apisandbox-continue": "Настави",
        "apisandbox-continue-clear": "Очисти",
        "apisandbox-param-limit": "Унесите <kbd>max</kbd> да би сте користили највеће ограничење.",
        "apisandbox-multivalue-all-namespaces": "$1 (сви именски простори)",
        "apisandbox-multivalue-all-values": "$1 (све вредности)",
-       "booksources": "ШÑ\82ампани извори",
+       "booksources": "Ð\9aÑ\9aижевни извори",
        "booksources-search-legend": "Претражи штампане изворе",
        "booksources-isbn": "ISBN:",
        "booksources-search": "Претражи",
-       "booksources-text": "Ð\98Ñ\81под Ñ\81е Ð½Ð°Ð»Ð°Ð·Ð¸ Ñ\81пиÑ\81ак Ð²ÐµÐ·а ка сајтовима који се баве продајом нових и половних књига, а који би могли имати додатне податке о књигама које тражите:",
+       "booksources-text": "Ð\98Ñ\81под Ñ\81е Ð½Ð°Ð»Ð°Ð·Ð¸ Ñ\81пиÑ\81ак Ð»Ð¸Ð½ÐºÐ¾Ð²а ка сајтовима који се баве продајом нових и половних књига, а који би могли имати додатне податке о књигама које тражите:",
        "booksources-invalid-isbn": "Наведени ISBN број није валидан. Проверите да није дошло до грешке при копирању из првобитног извора.",
-       "magiclink-tracking-rfc": "Странице с магичним RFC везама",
-       "magiclink-tracking-pmid": "Странице с магичним PMID везама",
-       "magiclink-tracking-isbn": "СÑ\82Ñ\80аниÑ\86е Ñ\81а ISBN Ð¼Ð°Ð³Ð¸Ñ\87ним Ð²ÐµÐ·Ð°ма",
+       "magiclink-tracking-rfc": "Странице са магичним RFC линковима",
+       "magiclink-tracking-pmid": "Странице са магичним PMID линковима",
+       "magiclink-tracking-isbn": "СÑ\82Ñ\80аниÑ\86е Ñ\81а ISBN Ð¼Ð°Ð³Ð¸Ñ\87ним Ð»Ð¸Ð½ÐºÐ¾Ð²Ð¸ма",
        "specialloguserlabel": "Извршилац:",
        "speciallogtitlelabel": "Циљ (наслов или {{ns:user}}:корисничко име):",
        "log": "Евиденције",
        "deletedcontributions": "Обрисани кориснички доприноси",
        "deletedcontributions-title": "Обрисани кориснички доприноси",
        "sp-deletedcontributions-contribs": "доприноси",
-       "linksearch": "Ð\9fÑ\80еÑ\82Ñ\80ага Ñ\81поÑ\99аÑ\88Ñ\9aиÑ\85 Ð²ÐµÐ·а",
+       "linksearch": "Ð\9fÑ\80еÑ\82Ñ\80ага Ñ\81поÑ\99аÑ\88Ñ\9aиÑ\85 Ð»Ð¸Ð½ÐºÐ¾Ð²а",
        "linksearch-pat": "Образац претраге:",
        "linksearch-ns": "Именски простор:",
        "linksearch-ok": "Претражи",
        "linksearch-text": "Могу се користити џокери попут „*.wikipedia.org“.\nПотребан је највиши домен, као „*.org“.<br />\n{{PLURAL:$2|1=Подржан протокол|Подржани протоколи}}: $1 (задаје http:// ако не наведете протокол).",
-       "linksearch-line": "$1 Ð²ÐµÐ·Ð° Ñ\83 $2",
+       "linksearch-line": "$1 Ð²Ð¾Ð´Ð¸ Ñ\81а $2",
        "linksearch-error": "Џокери се могу појавити само на почетку адресе.",
        "listusersfrom": "Прикажи кориснике почев од:",
        "listusers-submit": "Прикажи",
        "listgrants": "Дозволе",
        "listgrants-grant": "Дозвола",
        "listgrants-rights": "Права",
-       "trackingcategories": "Ð\9cедиÑ\98авики ÐºÐ°Ñ\82егоÑ\80иÑ\98е",
+       "trackingcategories": "Ð\9aаÑ\82егоÑ\80иÑ\98е Ð·Ð° Ð¿Ñ\80аÑ\9bеÑ\9aе",
        "trackingcategories-summary": "Ова посебна страница је списак категорија које су део Медијавикија, оне се аутоматски ажурирају и њихови називи се могу мењати уређивањем системских порука у именском простору {{ns:8}}.",
-       "trackingcategories-msg": "Ð\9fÑ\80аÑ\9bеÑ\9aе ÐºÐ°Ñ\82егоÑ\80иÑ\98е",
+       "trackingcategories-msg": "Ð\9aаÑ\82егоÑ\80иÑ\98е Ð·Ð° Ð¿Ñ\80аÑ\9bеÑ\9aе",
        "trackingcategories-name": "Име поруке",
        "trackingcategories-desc": "Које странице се налазе у категорији",
        "restricted-displaytitle-ignored": "Странице са занемареним насловима за приказ",
        "noindex-category-desc": "Странице које у себи имају магичну реч <code><nowiki>__NOINDEX__</nowiki></code>.",
        "index-category-desc": "Странице које у себи имају магичну реч <code><nowiki>__INDEX__</nowiki></code> и самим тим су индексиране од стране робота.",
-       "broken-file-category-desc": "СÑ\82Ñ\80аниÑ\86е ÐºÐ¾Ñ\98е Ð¸Ð¼Ð°Ñ\98Ñ\83 Ð²ÐµÐ·Ðµ Ð´Ð¾ Ð½ÐµÐ¿Ð¾Ñ\81Ñ\82оÑ\98еÑ\9bиÑ\85 Ð´Ð°Ñ\82оÑ\82ека.",
+       "broken-file-category-desc": "СÑ\82Ñ\80аниÑ\86а Ñ\81адÑ\80жи Ð¿Ð¾ÐºÐ²Ð°Ñ\80ени Ð»Ð¸Ð½Ðº Ð´Ð¾ Ð´Ð°Ñ\82оÑ\82еке (линк Ð·Ð° Ñ\83гÑ\80аÑ\92иваÑ\9aе Ð´Ð°Ñ\82оÑ\82еке ÐºÐ°Ð´Ð° Ð¾Ð½Ð° Ð½Ðµ Ð¿Ð¾Ñ\81Ñ\82оÑ\98и).",
        "hidden-category-category-desc": "Категорије које у себи имају магичну реч <code><nowiki>__HIDDENCAT__</nowiki></code> и самим тим се не приказују у одељку за категорије на страницама.",
        "trackingcategories-nodesc": "Опис није доступан.",
        "trackingcategories-disabled": "Категорија је онемогућена",
        "mailnologin": "Нема адресе за слање",
        "mailnologintext": "Морате бити [[Special:UserLogin|пријављени]] и имати ваљану имејл адресу у [[Special:Preferences|подешавањима]] да бисте слали имејлове другим корисницима.",
-       "emailuser": "Пошаљи имејл",
+       "emailuser": "Пошаљи имејл овом кориснику/ци",
        "emailuser-title-target": "Слање имејла {{GENDER:$1|кориснику|корисници}}",
        "emailuser-title-notarget": "Слање имејла кориснику",
        "emailpagetext": "Можете да користите доњи образац да пошаљете имејл {{GENDER:$1|овом кориснику|овој корисници}}.\nИмејл који сте унели у вашим [[Special:Preferences|подешавањима]] ће се приказати у пољу „Од“, тако да ће прималац моћи да вам одговори директно.",
        "noemailtitle": "Нема имејл адресе",
        "noemailtext": "Овај корисник није навео валидну имејл адресу.",
        "nowikiemailtext": "Овај корисник је одлучио да не прима имејлове од других корисника.",
-       "emailnotarget": "Ð\9dепоÑ\81Ñ\82оÑ\98еÑ\9bе Ð¸Ð»Ð¸ Ð½ÐµÐ¸Ñ\81пÑ\80авно корисничко име примаоца.",
+       "emailnotarget": "Ð\9dепоÑ\81Ñ\82оÑ\98еÑ\9bе Ð¸Ð»Ð¸ Ð½Ð°Ð²Ð°Ð¶ÐµÑ\9bе корисничко име примаоца.",
        "emailtarget": "Унос корисничког имена примаоца",
        "emailusername": "Корисничко име:",
        "emailusernamesubmit": "Пошаљи",
        "addwatch": "Додај на списак надгледања",
        "addedwatchtext": "Страница „[[:$1]]“ и њена страница за разговор је додата на ваш [[Special:Watchlist|списак надгледања]].",
        "addedwatchtext-talk": "Страница „[[:$1]]” и њена придружена страница је додата на ваш [[Special:Watchlist|списак надгледања]]",
-       "addedwatchtext-short": "СÑ\82Ñ\80аниÑ\86а â\80\9e$1â\80\9c Ñ\98е Ð´Ð¾Ð´Ð°Ñ\82а Ð½Ð° Ð\92аш списак надгледања.",
+       "addedwatchtext-short": "СÑ\82Ñ\80аниÑ\86а â\80\9e$1â\80\9c Ñ\98е Ð´Ð¾Ð´Ð°Ñ\82а Ð½Ð° Ð²аш списак надгледања.",
        "removewatch": "Уклони са списка надгледања",
-       "removedwatchtext": "СÑ\82Ñ\80аниÑ\86а â\80\9e[[:$1]]â\80\9c Ð¸ Ñ\9aена Ñ\81Ñ\82Ñ\80аниÑ\86а Ð·Ð° Ñ\80азговоÑ\80 Ñ\98е Ñ\83клоÑ\9aена Ñ\81а Ð\92ашег [[Special:Watchlist|списка надгледања]].",
-       "removedwatchtext-short": "Страница „$1“ је уклоњена с вашег списка надгледања.",
+       "removedwatchtext": "СÑ\82Ñ\80аниÑ\86а â\80\9e[[:$1]]â\80\9c Ð¸ Ñ\9aена Ñ\81Ñ\82Ñ\80аниÑ\86а Ð·Ð° Ñ\80азговоÑ\80 Ñ\98е Ñ\83клоÑ\9aена Ñ\81а Ð²ашег [[Special:Watchlist|списка надгледања]].",
+       "removedwatchtext-short": "Страница „$1“ је уклоњена са вашег списка надгледања.",
        "watch": "Надгледај",
        "watchthispage": "Надгледај ову страницу",
        "unwatch": "Прекини надгледање",
        "enotif_lastvisited": "За све промене од последње посете, погледајте $1.",
        "enotif_lastdiff": "Да бисте видели ову промену, погледајте $1.",
        "enotif_anon_editor": "анониман корисник $1",
-       "enotif_body": "Ð\9fоÑ\88Ñ\82овани $WATCHINGUSERNAME,\n \t\n$PAGEINTRO $NEWPAGE\n\nÐ\9eпиÑ\81: $PAGESUMMARY $PAGEMINOREDIT\n\nКонтакт:\nмејл: $PAGEEDITOR_EMAIL\nвики: $PAGEEDITOR_WIKI\n\nНеће бити других обавештења у случају даљих измена уколико не посетите ову страницу када сте пријављени.\nМожете и да поништите подешавања обавештења за све странице у вашем списку надгледања.\n\nСрдачан поздрав, {{SITENAME}}\n\n--\nДа бисте променили подешавања имејл обавештења, посетите\n{{canonicalurl:{{#special:Preferences}}}}\n\nДа бисте променили подешавања списка надгледања, посетите\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nДа бисте уклонили ову страницу са списка надгледања, посетите\n$UNWATCHURL\n\nПодршка и даља помоћ:\n$HELPPAGE",
+       "enotif_body": "Ð\9fоÑ\88Ñ\82овани $WATCHINGUSERNAME,\n \t\n$PAGEINTRO $NEWPAGE\n\nРезиме Ñ\83Ñ\80еÑ\92иваÑ\87а: $PAGESUMMARY $PAGEMINOREDIT\n\nКонтакт:\nмејл: $PAGEEDITOR_EMAIL\nвики: $PAGEEDITOR_WIKI\n\nНеће бити других обавештења у случају даљих измена уколико не посетите ову страницу када сте пријављени.\nМожете и да поништите подешавања обавештења за све странице у вашем списку надгледања.\n\nСрдачан поздрав, {{SITENAME}}\n\n--\nДа бисте променили подешавања имејл обавештења, посетите\n{{canonicalurl:{{#special:Preferences}}}}\n\nДа бисте променили подешавања списка надгледања, посетите\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nДа бисте уклонили ову страницу са списка надгледања, посетите\n$UNWATCHURL\n\nПодршка и даља помоћ:\n$HELPPAGE",
        "enotif_minoredit": "Ово је мања измена",
        "created": "направљена",
        "changed": "измењена",
        "rollback-missingrevision": "Не могу да учитам податке о ревизији.",
        "cantrollback": "Не могу да вратим измену.\nПоследњи аутор је уједно и једини.",
        "alreadyrolled": "Враћање последње измене странице [[:$1]] од стране {{GENDER:$2|корисника|кориснице|корисника}} [[User:$2|$2]] ([[User talk:$2|разговор]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) није успело; неко други је у међувремену изменио или вратио страницу.\n\nПоследњу измену је {{GENDER:$3|направио|направила|направио}} [[User:$3|$3]] ([[User talk:$3|разговор]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "Ð\9eпиÑ\81 Ð¸Ð·Ð¼ÐµÐ½Ðµ: <em>$1</em>.",
+       "editcomment": "Резиме Ð¸Ð·Ð¼ÐµÐ½Ðµ Ñ\98е Ð±Ð¸Ð¾: <em>$1</em>.",
        "revertpage": "Враћене измене {{GENDER:$2|корисника|кориснице}} [[Special:Contributions/$2|$2]] ([[User talk:$2|разговор]]) на последњу ревизију {{GENDER:$1|корисника|кориснице}} [[User:$1|$1]]",
-       "revertpage-nouser": "Ð\98змене Ñ\81кÑ\80ивеног ÐºÐ¾Ñ\80иÑ\81ника Ñ\81Ñ\83 Ð²Ñ\80аÑ\9bене Ð½Ð° Ð¿Ð¾Ñ\81ледÑ\9aÑ\83 Ð¸Ð·Ð¼ÐµÐ½у {{GENDER:$1|корисника|кориснице}} [[User:$1|$1]]",
+       "revertpage-nouser": "Ð\92Ñ\80аÑ\9bене Ð¸Ð·Ð¼ÐµÐ½Ðµ Ñ\81кÑ\80ивеног ÐºÐ¾Ñ\80иÑ\81ника Ð½Ð° Ð¿Ð¾Ñ\81ледÑ\9aÑ\83 Ñ\80евизиÑ\98у {{GENDER:$1|корисника|кориснице}} [[User:$1|$1]]",
        "rollback-success": "Враћене измене {{GENDER:$1|корисника|кориснице}} {{GENDER:$3|$1}}  на последњу ревизију {{GENDER:$2|корисника|кориснице}} {{GENDER:$4|$2}}.",
        "rollback-success-notify": "Враћене измене корисника $1;\nвраћено на последњу ревизију корисника $2. [$3 Прикажи промене]",
        "sessionfailure-title": "Сесија је окончана",
        "changecontentmodel-submit": "Промени",
        "changecontentmodel-success-title": "Модел садржаја је промењен",
        "changecontentmodel-success-text": "Модел садржаја странице [[:$1]] је промењен.",
-       "changecontentmodel-cannot-convert": "Ð\9cодел Ñ\81адÑ\80жаÑ\98а Ñ\81Ñ\82Ñ\80аниÑ\86е [[:$1]] Ñ\81е Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð¿Ñ\80еÑ\82воÑ\80иÑ\82и Ñ\83 Ð²Ñ\80Ñ\81Ñ\82Ñ\83 $2.",
+       "changecontentmodel-cannot-convert": "Ð\9cодел Ñ\81адÑ\80жаÑ\98а Ñ\81Ñ\82Ñ\80аниÑ\86е [[:$1]] Ñ\81е Ð½Ðµ Ð¼Ð¾Ð¶Ðµ ÐºÐ¾Ð½Ð²ÐµÑ\80Ñ\82оваÑ\82и Ñ\83 Ñ\82ип $2.",
        "changecontentmodel-nodirectediting": "Модел садржаја $1 не подржава изравно уређивање",
        "changecontentmodel-emptymodels-title": "Нема доступних модела садржаја",
-       "changecontentmodel-emptymodels-text": "Ð\9cодел Ñ\81адÑ\80жаÑ\98а Ñ\81Ñ\82Ñ\80аниÑ\86е [[:$1]] Ñ\81е Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð¿Ñ\80еÑ\82воÑ\80иÑ\82и Ð½Ð¸ Ñ\83 Ñ\98еднÑ\83 Ð´Ñ\80Ñ\83гÑ\83 Ð²Ñ\80Ñ\81Ñ\82Ñ\83.",
+       "changecontentmodel-emptymodels-text": "Ð\9cодел Ñ\81адÑ\80жаÑ\98а Ñ\81Ñ\82Ñ\80аниÑ\86е [[:$1]] Ñ\81е Ð½Ðµ Ð¼Ð¾Ð¶Ðµ ÐºÐ¾Ð½Ð²ÐµÑ\80Ñ\82оваÑ\82и Ð½Ð¸ Ñ\83 Ñ\98едан Ð´Ñ\80Ñ\83ги Ñ\82ип.",
        "log-name-contentmodel": "Евиденција промене модела садржаја",
        "log-description-contentmodel": "Ова страница приказује измене у моделима садржаја страница и странице које су направљене са моделом садржаја који се разликује од подразумеваног.",
        "logentry-contentmodel-new": "$1 је {{GENDER:$2|направио|направила}} страницу $3 с нестандардним моделом садржаја „$5“",
        "protectedarticle-comment": "{{GENDER:$2|Заштићена}} страница [[$1]]",
        "modifiedarticleprotection-comment": "је {{GENDER:$2|променио|променила}} ниво заштите странице „[[$1]]”",
        "unprotectedarticle-comment": "{{GENDER:$2|Скинута}} заштита са [[$1]]",
-       "protect-title": "Промена степена заштите за страницу „$1“",
-       "protect-title-notallowed": "Преглед степена заштите за „$1“",
+       "protect-title": "Промена нивоа заштите странице „$1“",
+       "protect-title-notallowed": "Преглед нивоа заштите странице „$1“",
        "prot_1movedto2": "је преместио [[$1]] на [[$2]]",
        "protect-badnamespace-title": "Незаштитљив именски простор",
        "protect-badnamespace-text": "Странице у овом именском простору се не могу заштитити.",
-       "protect-norestrictiontypes-text": "Ова страница се не може заштитити јер нема доступних врста ограничења.",
+       "protect-norestrictiontypes-text": "Ова страница се не може заштитити јер нема доступних типова ограничења.",
        "protect-norestrictiontypes-title": "Незаштитљива страна",
        "protect-legend": "Подешавања заштите",
        "protectcomment": "Разлог:",
        "undeleterevdel": "Враћање неће бити извршено ако је резултат тога делимично брисање последње ревизије.\nУ таквим случајевима морате искључити или открити најновије обрисане ревизије.",
        "undeletehistorynoadmin": "Ова страница је обрисана.\nРазлог за брисање се налази испод, заједно с детаљима о кориснику који је уредио ову страницу пре брисања.\nТекст обрисаних ревизија је доступан само администраторима.",
        "undelete-revision": "Обрисана измена странице $1 (дана $4; $5) од стране {{GENDER:$3|корисника|кориснице|корисника}} $3:",
-       "undeleterevision-missing": "Ð\9dеважеÑ\9bа Ð¸Ð»Ð¸ Ð½ÐµÐ´Ð¾Ñ\81Ñ\82аÑ\98Ñ\83Ñ\9bа Ñ\80евизиÑ\98а.\nÐ\9cожда Ñ\81Ñ\82е Ñ\83нели Ð¿Ð¾Ð³Ñ\80еÑ\88нÑ\83 Ð²ÐµÐ·Ñ\83 или је ревизија враћена или уклоњена из архиве.",
+       "undeleterevision-missing": "Ð\9dеважеÑ\9bа Ð¸Ð»Ð¸ Ð½ÐµÐ´Ð¾Ñ\81Ñ\82аÑ\98Ñ\83Ñ\9bа Ñ\80евизиÑ\98а.\nÐ\9cожда Ñ\81Ñ\82е Ñ\83нели Ð»Ð¾Ñ\88 Ð»Ð¸Ð½Ðº или је ревизија враћена или уклоњена из архиве.",
        "undeleterevision-duplicate-revid": "Не могу вратити {{PLURAL:$1|ревизију|$1 ревизије|$1 ревизија}} јер се {{PLURAL:$1|њен|њихов}} <code>rev_id</code> већ користи.",
        "undelete-nodiff": "Претходне измене нису пронађене.",
        "undeletebtn": "Врати",
        "namespace": "Именски простор:",
        "invert": "Обрни избор",
        "tooltip-invert": "Означите ову кутијуцу да бисте сакрили промене на страницана у изабраном именском простору (и повезаним именским просторима, ако је означено)",
-       "tooltip-whatlinkshere-invert": "Ð\9eзнаÑ\87иÑ\82е Ð¾Ð²Ñ\83 ÐºÑ\83Ñ\82иÑ\98иÑ\86Ñ\83 Ð·Ð° Ñ\81акÑ\80иваÑ\9aе Ð²ÐµÐ·а са страница у изабраном именском простору.",
+       "tooltip-whatlinkshere-invert": "Ð\9eзнаÑ\87иÑ\82е Ð¾Ð²Ñ\83 ÐºÑ\83Ñ\82иÑ\98иÑ\86Ñ\83 Ð·Ð° Ñ\81акÑ\80иваÑ\9aе Ð»Ð¸Ð½ÐºÐ¾Ð²а са страница у изабраном именском простору.",
        "namespace_association": "Повезани именски простор",
        "tooltip-namespace_association": "Означите ову кутијицу да бисте укључили и разговор или именски простор теме која је повезана са изабраним именским простором",
        "blanknamespace": "(главни)",
        "sp-contributions-hideminor": "Сакриј мање измене",
        "sp-contributions-submit": "Претражи",
        "whatlinkshere": "Шта води овде",
-       "whatlinkshere-title": "Странице које су повезане са „$1”",
+       "whatlinkshere-title": "Странице које воде на страницу „$1”",
        "whatlinkshere-page": "Страница:",
-       "linkshere": "СледеÑ\9bе Ñ\81Ñ\82Ñ\80аниÑ\86е Ð¸Ð¼Ð°Ñ\98Ñ\83 Ð²ÐµÐ·Ñ\83 Ð´Ð¾ <strong>$2</strong>:",
+       "linkshere": "СледеÑ\9bе Ñ\81Ñ\82Ñ\80аниÑ\86е Ð²Ð¾Ð´Ðµ Ð½Ð° Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83 <strong>$2</strong>:",
        "nolinkshere": "Ниједна страница није повезана са: <strong>$2</strong>.",
-       "nolinkshere-ns": "Ð\9dиÑ\98една Ñ\81Ñ\82Ñ\80аниÑ\86а Ð½Ðµ Ð²Ð¾Ð´Ð¸ Ð´Ð¾ '''$2''' у изабраном именском простору.",
+       "nolinkshere-ns": "Ð\9dиÑ\98една Ñ\81Ñ\82Ñ\80аниÑ\86а Ð½Ðµ Ð²Ð¾Ð´Ð¸ Ð½Ð° Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83 <strong>$2</strong> у изабраном именском простору.",
        "isredirect": "преусмерење",
        "istemplate": "укључивање",
-       "isimage": "веза до датотеке",
+       "isimage": "линк до датотеке",
        "whatlinkshere-prev": "{{PLURAL:$1|претходни|претходна $1|претходних $1}}",
        "whatlinkshere-next": "{{PLURAL:$1|следећи|следећа $1|следећих $1}}",
-       "whatlinkshere-links": "â\86\90 Ð²ÐµÐ·Ðµ",
+       "whatlinkshere-links": "â\86\90 Ð»Ð¸Ð½ÐºÐ¾Ð²Ð¸",
        "whatlinkshere-hideredirs": "$1 преусмерења",
        "whatlinkshere-hidetrans": "$1 укључивања",
-       "whatlinkshere-hidelinks": "$1 Ð²ÐµÐ·е",
-       "whatlinkshere-hideimages": "$1 Ð²ÐµÐ·Ðµ до датотеке",
+       "whatlinkshere-hidelinks": "$1 Ð»Ð¸Ð½ÐºÐ¾Ð²е",
+       "whatlinkshere-hideimages": "$1 Ð»Ð¸Ð½ÐºÐ¾Ð²Ð° до датотеке",
        "whatlinkshere-filters": "Филтери",
        "whatlinkshere-submit": "Иди",
        "autoblockid": "Аутоматско блокирање #$1",
        "ipaddressorusername": "IP адреса или корисничко име:",
        "ipbexpiry": "Истиче:",
        "ipbreason": "Разлог:",
-       "ipbreason-dropdown": "*Ð\9dаÑ\98Ñ\87еÑ\88Ñ\9bи Ñ\80азлози Ð·Ð° Ð±Ð»Ð¾ÐºÐ¸Ñ\80аÑ\9aе\n** Ð£Ð½Ð¾Ñ\88еÑ\9aе Ð»Ð°Ð¶Ð½Ð¸Ñ\85 Ð¸Ð½Ñ\84оÑ\80маÑ\86иÑ\98а\n** Ð£ÐºÐ»Ð°Ñ\9aаÑ\9aе Ñ\81адÑ\80жаÑ\98а Ñ\81а Ñ\81Ñ\82Ñ\80аниÑ\86а\n** Ð\9fоÑ\81Ñ\82авÑ\99аÑ\9aе Ð²ÐµÐ·Ð° Ð´Ð¾ Ñ\81поÑ\99аÑ\88Ñ\9aиÑ\85 Ñ\81аÑ\98Ñ\82ова\n** Ð£Ð½Ð¾Ñ\88еÑ\9aе Ð±ÐµÑ\81миÑ\81лиÑ\86а у странице\n** Непристојно понашање\n** Употреба више налога\n** Неприхватљиво корисничко име",
+       "ipbreason-dropdown": "*Ð\9dаÑ\98Ñ\87еÑ\88Ñ\9bи Ñ\80азлози Ð·Ð° Ð±Ð»Ð¾ÐºÐ¸Ñ\80аÑ\9aе\n** Ð£Ð¼ÐµÑ\82аÑ\9aе Ð»Ð°Ð¶Ð½Ð¸Ñ\85 Ð¸Ð½Ñ\84оÑ\80маÑ\86иÑ\98а\n** Ð£ÐºÐ»Ð°Ñ\9aаÑ\9aе Ñ\81адÑ\80жаÑ\98а Ñ\81а Ñ\81Ñ\82Ñ\80аниÑ\86а\n** Ð\94одаваÑ\9aе Ð½ÐµÐ¿Ð¾Ð¶ÐµÑ\99ниÑ\85 Ð»Ð¸Ð½ÐºÐ¾Ð²Ð° Ð´Ð¾ Ñ\81поÑ\99аÑ\88Ñ\9aиÑ\85 Ñ\81аÑ\98Ñ\82ова\n** Ð£Ð½Ð¾Ñ\88еÑ\9aе Ð±ÐµÑ\81миÑ\81лиÑ\86а/гÑ\80аÑ\84иÑ\82а у странице\n** Непристојно понашање\n** Употреба више налога\n** Неприхватљиво корисничко име",
        "ipb-hardblock": "Спречи пријављене кориснике да уређују с ове IP адресе",
        "ipbcreateaccount": "Онемогући отварање налога",
        "ipbemailban": "Спречи корисника да шаље имејлове",
        "ipb-blocklist": "Погледај постојећа блокирања",
        "ipb-blocklist-contribs": "Доприноси за {{GENDER:$1|$1}}",
        "ipb-blocklist-duration-left": "преостало: $1",
-       "unblockip": "Ð\94еблокиÑ\80аÑ\98 корисника",
+       "unblockip": "Ð\94еблокиÑ\80аÑ\9aе корисника",
        "unblockiptext": "Користите доњи образац да бисте вратили право писања раније блокираној IP адреси или корисничком имену.",
        "ipusubmit": "Уклони ову блокаду",
        "unblocked": "[[User:$1|$1]] је деблокиран",
        "lockedbyandtime": "(од $1 дана $2 у $3)",
        "move-page": "Премештање „$1”",
        "move-page-legend": "Премештање странице",
-       "movepagetext": "Ð\94оÑ\9aи Ð¾Ð±Ñ\80азаÑ\86 Ñ\9bе Ð¿Ñ\80еименоваÑ\82и Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83, Ð¿Ñ\80емеÑ\88Ñ\82аÑ\98Ñ\83Ñ\9bи Ñ\86елÑ\83 Ð¸Ñ\81Ñ\82оÑ\80иÑ\98Ñ\83 Ð½Ð° Ð½Ð¾Ð²Ð¾ Ð¸Ð¼Ðµ.\nСÑ\82аÑ\80и Ð½Ð°Ñ\81лов Ð¿Ð¾Ñ\81Ñ\82аÑ\9bе Ð¿Ñ\80еÑ\83Ñ\81меÑ\80еÑ\9aе Ð½Ð° Ð½Ð¾Ð²Ð¸.\nÐ\9cожеÑ\82е Ð°Ð¶Ñ\83Ñ\80иÑ\80аÑ\82и Ð¿Ñ\80еÑ\83Ñ\81меÑ\80еÑ\9aа ÐºÐ¾Ñ\98а Ð²Ð¾Ð´Ðµ Ð´Ð¾ Ð¸Ð·Ð²Ð¾Ñ\80ног Ð½Ð°Ñ\81лова;\nпогледаÑ\98Ñ\82е [[Special:DoubleRedirects|двоÑ\81Ñ\82Ñ\80Ñ\83ка]] Ð¸Ð»Ð¸ [[Special:BrokenRedirects|покваÑ\80ена]] Ð¿Ñ\80еÑ\83Ñ\81меÑ\80еÑ\9aа.\nÐ\9dа Ð²Ð°Ð¼Ð° Ñ\98е Ð¾Ð´Ð³Ð¾Ð²Ð¾Ñ\80ноÑ\81Ñ\82 Ð´Ð° Ð²ÐµÐ·Ðµ и даље иду тамо где треба.\n\nСтраница <strong>неће</strong> бити премештена ако већ постоји страница с тим именом (осим ако је празна, садржи преусмерење или нема историју измена).\nТо значи да можете вратити страницу на претходно име ако погрешите, али не можете ''преписати'' постојећу.\n\n<strong>Напомена:</strong>\nОво може представљати драстичну и неочекивану измену за популарну страницу;\nдобро размислите о последицама пре него што наставите.",
+       "movepagetext": "Ð\94оÑ\9aи Ð¾Ð±Ñ\80азаÑ\86 Ñ\9bе Ð¿Ñ\80еименоваÑ\82и Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83, Ð¿Ñ\80емеÑ\88Ñ\82аÑ\98Ñ\83Ñ\9bи Ñ\86елÑ\83 Ð¸Ñ\81Ñ\82оÑ\80иÑ\98Ñ\83 Ð½Ð° Ð½Ð¾Ð²Ð¾ Ð¸Ð¼Ðµ.\nСÑ\82аÑ\80и Ð½Ð°Ñ\81лов Ð¿Ð¾Ñ\81Ñ\82аÑ\9bе Ð¿Ñ\80еÑ\83Ñ\81меÑ\80еÑ\9aе Ð½Ð° Ð½Ð¾Ð²Ð¸.\nÐ\9cожеÑ\82е Ð°Ð¶Ñ\83Ñ\80иÑ\80аÑ\82и Ð¿Ñ\80еÑ\83Ñ\81меÑ\80еÑ\9aа ÐºÐ¾Ñ\98а Ð²Ð¾Ð´Ðµ Ð´Ð¾ Ð¸Ð·Ð²Ð¾Ñ\80ног Ð½Ð°Ñ\81лова;\nпогледаÑ\98Ñ\82е [[Special:DoubleRedirects|двоÑ\81Ñ\82Ñ\80Ñ\83ка]] Ð¸Ð»Ð¸ [[Special:BrokenRedirects|покваÑ\80ена]] Ð¿Ñ\80еÑ\83Ñ\81меÑ\80еÑ\9aа.\nÐ\9dа Ð²Ð°Ð¼Ð° Ñ\98е Ð¾Ð´Ð³Ð¾Ð²Ð¾Ñ\80ноÑ\81Ñ\82 Ð´Ð° Ð»Ð¸Ð½ÐºÐ¾Ð²Ð¸ и даље иду тамо где треба.\n\nСтраница <strong>неће</strong> бити премештена ако већ постоји страница с тим именом (осим ако је празна, садржи преусмерење или нема историју измена).\nТо значи да можете вратити страницу на претходно име ако погрешите, али не можете ''преписати'' постојећу.\n\n<strong>Напомена:</strong>\nОво може представљати драстичну и неочекивану измену за популарну страницу;\nдобро размислите о последицама пре него што наставите.",
        "movepagetext-noredirectfixer": "Доњи образац ће преименовати страницу, премештајући целу историју на ново име.\nСтари наслов постаће преусмерење на нови.\nПогледајте [[Special:DoubleRedirects|двострука]] или [[Special:BrokenRedirects|покварена]] преусмерења.\nНа вама је одговорност да везе и даље иду тамо где треба.\n\nСтраница <strong>неће</strong> бити премештена ако већ постоји страница с тим именом (осим ако је празна, садржи преусмерење или нема историју измена).\nТо значи да можете вратити страницу на претходно име ако погрешите, али не можете ''преписати'' постојећу.\n\n<strong>Напомена:</strong>\nОво може представљати драстичну и неочекивану измену за популарну страницу;\nдобро размислите о последицама пре него што наставите.",
        "movepagetalktext": "Ако сте означили овај квадратић, одговарајућа страница за разговор биће аутоматски премештена на нови наслов, осим ако већ постоји страница за разговор са истим насловом.\n\nУ том случају, мораћете ручно да је преместите или спојите, ако има потребе за тим.",
        "moveuserpage-warning": "'''Упозорење:''' на путу сте да преместите корисничку страницу. Имајте у виду да ће само страница бити премештена, а сам корисник ''неће'' бити преименован.",
        "selfmove": "Наслов је истоветан;\nне можете преместити страницу преко саме себе.",
        "immobile-source-namespace": "Не могу преместити странице у именски простор „$1“.",
        "immobile-target-namespace": "Не могу преместити странице у именски простор „$1“.",
-       "immobile-target-namespace-iw": "Ð\9cеÑ\92Ñ\83вики Ð²ÐµÐ·Ð° Ð½Ð¸Ñ\98е Ð²Ð°Ð»Ð¸Ð´Ð½Ð¾ одредиште за премештање странице.",
+       "immobile-target-namespace-iw": "Ð\9cеÑ\92Ñ\83вики Ð»Ð¸Ð½Ðº Ð½Ð¸Ñ\98е Ð²Ð°Ð¶ÐµÑ\9bе одредиште за премештање странице.",
        "immobile-source-page": "Ова страница се не може преместити.",
        "immobile-target-page": "Не могу да преместим на жељени наслов.",
        "bad-target-model": "Жељено одредиште користи другачији модел садржаја. Не могу да претворим из $1 у $2.",
        "imageinvalidfilename": "Циљано име датотеке је неважеће",
        "fix-double-redirects": "Ажурирајте сва преусмерења која воде до првобитног наслова",
        "move-leave-redirect": "Остави преусмерење",
-       "protectedpagemovewarning": "'''УпозоÑ\80еÑ\9aе:''' Ð¾Ð²Ð° Ñ\81Ñ\82Ñ\80аниÑ\86а Ñ\98е Ð·Ð°Ñ\88Ñ\82иÑ\9bена, Ñ\82ако Ð´Ð° Ñ\81амо ÐºÐ¾Ñ\80иÑ\81ниÑ\86и Ñ\81 Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñ\81Ñ\82Ñ\80аÑ\82оÑ\80Ñ\81ким Ð¾Ð²Ð»Ð°Ñ\88Ñ\9bеÑ\9aима Ð¼Ð¾Ð³Ñ\83 Ð´Ð° Ñ\98е Ð¿Ñ\80емеÑ\81Ñ\82е.\nÐ\9fоÑ\81ледÑ\9aи унос у евиденцији је наведен испод као референца:",
-       "semiprotectedpagemovewarning": "<strong>Ð\9dапомена:</strong> Ð¾Ð²Ð° Ñ\81Ñ\82Ñ\80аниÑ\86а Ñ\98е Ð·Ð°Ñ\88Ñ\82иÑ\9bена, Ñ\82ако Ð´Ð° Ñ\81амо Ð°Ñ\83Ñ\82омаÑ\82Ñ\81ки Ð¿Ð¾Ñ\82вÑ\80Ñ\92ени ÐºÐ¾Ñ\80иÑ\81ниÑ\86и Ð¼Ð¾Ð³Ñ\83 Ð´Ð° Ñ\98е Ð¿Ñ\80емеÑ\81Ñ\82е.\nÐ\9fоÑ\81ледÑ\9aи унос у евиденцији је наведен испод као референца:",
+       "protectedpagemovewarning": "'''УпозоÑ\80еÑ\9aе:''' Ð\9eва Ñ\81Ñ\82Ñ\80аниÑ\86а Ñ\98е Ð·Ð°Ñ\88Ñ\82иÑ\9bена, Ñ\82ако Ð´Ð° Ñ\81амо ÐºÐ¾Ñ\80иÑ\81ниÑ\86и Ñ\81а Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñ\81Ñ\82Ñ\80аÑ\82оÑ\80Ñ\81ким Ð¾Ð²Ð»Ð°Ñ\88Ñ\9bеÑ\9aима Ð¼Ð¾Ð³Ñ\83 Ð´Ð° Ñ\98е Ð¿Ñ\80емеÑ\81Ñ\82е.\nÐ\9dаÑ\98новиÑ\98и унос у евиденцији је наведен испод као референца:",
+       "semiprotectedpagemovewarning": "<strong>Ð\9dапомена:</strong> Ð\9eва Ñ\81Ñ\82Ñ\80аниÑ\86а Ñ\98е Ð·Ð°Ñ\88Ñ\82иÑ\9bена, Ñ\82ако Ð´Ð° Ñ\81амо Ð°Ñ\83Ñ\82омаÑ\82Ñ\81ки Ð¿Ð¾Ñ\82вÑ\80Ñ\92ени ÐºÐ¾Ñ\80иÑ\81ниÑ\86и Ð¼Ð¾Ð³Ñ\83 Ð´Ð° Ñ\98е Ð¿Ñ\80емеÑ\81Ñ\82е.\nÐ\9dаÑ\98новиÑ\98и унос у евиденцији је наведен испод као референца:",
        "move-over-sharedrepo": "[[:$1]] се налази на дељеном складишту. Ако преместите датотеку на овај наслов, то ће заменити дељену датотеку.",
        "file-exists-sharedrepo": "Наведени назив датотеке се већ користи у дељеном складишту.\nИзаберите други назив.",
        "export": "Извоз страница",
-       "exporttext": "Ð\9cожеÑ\82е Ð´Ð° Ð¸Ð·Ð²ÐµÐ·ÐµÑ\82е Ñ\82екÑ\81Ñ\82 Ð¸ Ð¸Ñ\81Ñ\82оÑ\80иÑ\98Ñ\83 Ð¸Ð·Ð¼ÐµÐ½Ð° Ð¾Ð´Ñ\80еÑ\92ене Ñ\81Ñ\82Ñ\80аниÑ\86е Ð¸Ð»Ð¸ Ñ\81кÑ\83па Ñ\81Ñ\82Ñ\80аниÑ\86а Ñ\83клÑ\99ениÑ\85 Ñ\83 XML Ñ\84оÑ\80маÑ\82Ñ\83.\nÐ\9eво Ð¾Ð½Ð´Ð° Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ð±Ñ\83де Ñ\83везено Ñ\83 Ð´Ñ\80Ñ\83ги Ð²Ð¸ÐºÐ¸ ÐºÐ¾Ñ\98и ÐºÐ¾Ñ\80иÑ\81Ñ\82и Ð\9cедиÑ\98авики Ñ\81оÑ\84Ñ\82веÑ\80 Ð¿Ñ\80еко [[Special:Import|Ñ\81Ñ\82Ñ\80аниÑ\86е Ð·Ð° Ñ\83воз]].\n\nÐ\94а Ð±Ð¸Ñ\81Ñ\82е Ð¸Ð·Ð²ÐµÐ·Ð»Ð¸ Ñ\81Ñ\82Ñ\80аниÑ\86е, Ñ\83неÑ\81иÑ\82е Ð½Ð°Ð·Ð¸Ð²Ðµ Ñ\83 Ð¾ÐºÐ²Ð¸Ñ\80Ñ\83 Ð¸Ñ\81под, Ñ\81 Ñ\98едним Ð½Ð°Ñ\81ловом Ð¿Ð¾ Ñ\80едÑ\83, Ð¸ Ð¸Ð·Ð°Ð±ÐµÑ\80иÑ\82е Ð´Ð° Ð»Ð¸ Ð¶ÐµÐ»Ð¸Ñ\82е Ð°ÐºÑ\82Ñ\83елнÑ\83 Ñ\80евизиÑ\98Ñ\83 Ð¸ Ñ\81ве Ð¾Ñ\81Ñ\82але, Ð¸Ð»Ð¸ Ñ\81амо Ð°ÐºÑ\82Ñ\83елнÑ\83 Ñ\80евизиÑ\98Ñ\83 Ñ\81 Ð¿Ð¾Ð´Ð°Ñ\86има Ð¾ Ð¿Ð¾Ñ\81ледÑ\9aоÑ\98 Ð¸Ð·Ð¼ÐµÐ½Ð¸.\n\nУ Ð´Ñ\80Ñ\83гом Ñ\81лÑ\83Ñ\87аÑ\98Ñ\83, Ð¼Ð¾Ð¶ÐµÑ\82е ÐºÐ¾Ñ\80иÑ\81Ñ\82иÑ\82и Ð¸ Ð²ÐµÐ·Ñ\83, на пример [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] за страницу [[{{MediaWiki:Mainpage}}]].",
+       "exporttext": "Ð\9cожеÑ\82е Ð´Ð° Ð¸Ð·Ð²ÐµÐ·ÐµÑ\82е Ñ\82екÑ\81Ñ\82 Ð¸ Ð¸Ñ\81Ñ\82оÑ\80иÑ\98Ñ\83 Ð¸Ð·Ð¼ÐµÐ½Ð° Ð¾Ð´Ñ\80еÑ\92ене Ñ\81Ñ\82Ñ\80аниÑ\86е Ð¸Ð»Ð¸ Ñ\81кÑ\83па Ñ\81Ñ\82Ñ\80аниÑ\86а Ñ\83клÑ\99ениÑ\85 Ñ\83 XML Ñ\84оÑ\80маÑ\82Ñ\83.\nÐ\9eво Ð¾Ð½Ð´Ð° Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ð±Ñ\83де Ñ\83везено Ñ\83 Ð´Ñ\80Ñ\83ги Ð²Ð¸ÐºÐ¸ ÐºÐ¾Ñ\98и ÐºÐ¾Ñ\80иÑ\81Ñ\82и Ð\9cедиÑ\98авики Ñ\81оÑ\84Ñ\82веÑ\80 Ð¿Ñ\80еко [[Special:Import|Ñ\81Ñ\82Ñ\80аниÑ\86е Ð·Ð° Ñ\83воз]].\n\nÐ\94а Ð±Ð¸Ñ\81Ñ\82е Ð¸Ð·Ð²ÐµÐ·Ð»Ð¸ Ñ\81Ñ\82Ñ\80аниÑ\86е, Ñ\83неÑ\81иÑ\82е Ð½Ð°Ð·Ð¸Ð²Ðµ Ñ\83 Ð¾ÐºÐ²Ð¸Ñ\80Ñ\83 Ð¸Ñ\81под, Ñ\81 Ñ\98едним Ð½Ð°Ñ\81ловом Ð¿Ð¾ Ñ\80едÑ\83, Ð¸ Ð¸Ð·Ð°Ð±ÐµÑ\80иÑ\82е Ð´Ð° Ð»Ð¸ Ð¶ÐµÐ»Ð¸Ñ\82е Ð°ÐºÑ\82Ñ\83елнÑ\83 Ñ\80евизиÑ\98Ñ\83 Ð¸ Ñ\81ве Ð¾Ñ\81Ñ\82але, Ð¸Ð»Ð¸ Ñ\81амо Ð°ÐºÑ\82Ñ\83елнÑ\83 Ñ\80евизиÑ\98Ñ\83 Ñ\81 Ð¿Ð¾Ð´Ð°Ñ\86има Ð¾ Ð¿Ð¾Ñ\81ледÑ\9aоÑ\98 Ð¸Ð·Ð¼ÐµÐ½Ð¸.\n\nУ Ð´Ñ\80Ñ\83гом Ñ\81лÑ\83Ñ\87аÑ\98Ñ\83, Ð¼Ð¾Ð¶ÐµÑ\82е ÐºÐ¾Ñ\80иÑ\81Ñ\82иÑ\82и Ð¸ Ð»Ð¸Ð½Ðº, на пример [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] за страницу [[{{MediaWiki:Mainpage}}]].",
        "exportall": "Извези све странице",
        "exportcuronly": "Укључи само актуелну ревизију, не целу историју",
        "exportnohistory": "----\n'''Напомена:''' извоз пуне историје страница преко овог обрасца је онемогућено из техничких разлога.",
        "djvu_no_xml": "Не могу да преузмем XML за DjVu датотеку.",
        "thumbnail-temp-create": "Не могу да направим привремену датотеку минијатуре",
        "thumbnail-dest-create": "Не могу да сачувам минијатуру у одредишту",
-       "thumbnail_invalid_params": "Ð\9dеиÑ\81пÑ\80авни Ð¿Ð°Ñ\80амеÑ\82Ñ\80и Ð·Ð° Ð¼Ð¸Ð½Ð¸Ñ\98аÑ\82Ñ\83Ñ\80Ñ\83",
+       "thumbnail_invalid_params": "Ð\9dеважеÑ\9bи Ð¿Ð°Ñ\80амеÑ\82Ñ\80и Ñ\81лиÑ\87иÑ\86е",
        "thumbnail_toobigimagearea": "Датотека са величинама већим од $1",
        "thumbnail_dest_directory": "Не могу да направим одредишну фасциклу",
-       "thumbnail_image-type": "Ð\92Ñ\80Ñ\81Ñ\82а Ñ\81лике Ð½Ð¸Ñ\98е Ð¿Ð¾Ð´Ñ\80жана",
+       "thumbnail_image-type": "Тип Ñ\81лике Ð½Ð¸Ñ\98е Ð¿Ð¾Ð´Ñ\80жан",
        "thumbnail_gd-library": "Недовршена подешавања графичке библиотеке: недостаје функција $1",
        "thumbnail_image-size-zero": "Изгледа да је величина датотеке нула.",
        "thumbnail_image-missing": "Датотека недостаје: $1",
        "importunknownsource": "Непознат изворни тип увоза",
        "importnoprefix": "Није наведен међувики префикс",
        "importcantopen": "Не могу да отворим датотеку за увоз.",
-       "importbadinterwiki": "Ð\9dеиÑ\81пÑ\80авна Ð¼ÐµÑ\92Ñ\83вики Ð²ÐµÐ·Ð°",
+       "importbadinterwiki": "Ð\9bоÑ\88 Ð¼ÐµÑ\92Ñ\83вики Ð»Ð¸Ð½Ðº",
        "importsuccess": "Увожење је завршено!",
        "importnosources": "Није одређен ниједан извор за увоз, тако да је отпремање историје онемогућено.",
        "importnofile": "Увозна датотека није послата.",
        "import-nonewrevisions": "Ниједна ревизија није увезена (све су већ присутне или су прескочене због грешака).",
        "xml-error-string": "$1 у реду $2, колона $3 (бајт $4): $5",
        "import-upload": "Отпремање XML података",
-       "import-token-mismatch": "Ð\93Ñ\83биÑ\82ак Ð¿Ð¾Ð´Ð°Ñ\82ака Ð¾ Ñ\81еÑ\81иÑ\98и.\n\nÐ\9cожда Ñ\81Ñ\82е Ð¾Ð´Ñ\98авÑ\99ени. '''Ð\9cолимо Ð\92аÑ\81 Ð¿Ñ\80овеÑ\80иÑ\82е Ð´Ð° Ð»Ð¸ Ñ\81Ñ\82е Ñ\98оÑ\88 Ñ\83век Ð¿Ñ\80иÑ\98авÑ\99ени Ð¸ Ð¿Ð¾ÐºÑ\83Ñ\88аÑ\98Ñ\82е Ð¿Ð¾Ð½Ð¾Ð²Ð¾'''.\n\nÐ\90ко Ð¸ Ð´Ð°Ñ\99е Ð½Ðµ Ñ\80ади, Ð¿Ð¾ÐºÑ\83Ñ\88аÑ\98Ñ\82е Ñ\81е [[Special:UserLogout|одÑ\98авиÑ\82и]] Ð¸ Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¿Ñ\80иÑ\98авиÑ\82и Ð¸ Ð¿Ñ\80овеÑ\80иÑ\82е Ð´Ð° Ð»Ð¸ Ð\92аÑ\88 Ð²ÐµÐ±-пÑ\80траживач дозвољава колачиће са овог сајта.",
+       "import-token-mismatch": "Ð\93Ñ\83биÑ\82ак Ð¿Ð¾Ð´Ð°Ñ\82ака Ð¾ Ñ\81еÑ\81иÑ\98и.\n\nÐ\9cожда Ñ\81Ñ\82е Ð¾Ð´Ñ\98авÑ\99ени. '''Ð\9cолимо Ð\92аÑ\81 Ð¿Ñ\80овеÑ\80иÑ\82е Ð´Ð° Ð»Ð¸ Ñ\81Ñ\82е Ñ\98оÑ\88 Ñ\83век Ð¿Ñ\80иÑ\98авÑ\99ени Ð¸ Ð¿Ð¾ÐºÑ\83Ñ\88аÑ\98Ñ\82е Ð¿Ð¾Ð½Ð¾Ð²Ð¾'''.\n\nÐ\90ко Ð¸ Ð´Ð°Ñ\99е Ð½Ðµ Ñ\80ади, Ð¿Ð¾ÐºÑ\83Ñ\88аÑ\98Ñ\82е Ñ\81е [[Special:UserLogout|одÑ\98авиÑ\82и]] Ð¸ Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¿Ñ\80иÑ\98авиÑ\82и Ð¸ Ð¿Ñ\80овеÑ\80иÑ\82е Ð´Ð° Ð»Ð¸ Ð²Ð°Ñ\88 Ð²ÐµÐ±-пÑ\80етраживач дозвољава колачиће са овог сајта.",
        "import-invalid-interwiki": "Не могу да увозим с наведеног викија.",
        "import-error-edit": "Страница „$1“ није увезена јер вам није дозвољено да је уређујете.",
        "import-error-create": "Страница „$1“ није увезена јер вам није дозвољено да је направите.",
        "import-error-interwiki": "Не могу да увезем страницу „$1“ јер је њен назив резервисан за спољно повезивање (међувики).",
        "import-error-special": "Не могу да увезем страницу „$1“ јер она припада посебном именском простору које не прихвата странице.",
-       "import-error-invalid": "Ð\9dе Ð¼Ð¾Ð³Ñ\83 Ð´Ð° Ñ\83везем Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83 â\80\9e$1â\80\9c Ñ\98еÑ\80 Ñ\98е Ñ\9aен Ð½Ð°Ð·Ð¸Ð² Ð½ÐµÐ¸Ñ\81пÑ\80аван.",
+       "import-error-invalid": "СÑ\82Ñ\80аниÑ\86а â\80\9e$1â\80\9c Ð½Ð¸Ñ\98е Ñ\83везена Ñ\98еÑ\80 Ñ\98е Ð¸Ð¼Ðµ Ð¿Ð¾Ð´ ÐºÐ¾Ñ\98им Ñ\81е Ñ\82Ñ\80еба Ñ\83воÑ\81Ñ\82и Ð½ÐµÐ²Ð°Ð¶ÐµÑ\9bе Ð½Ð° Ð¾Ð²Ð¾Ð¼ Ð²Ð¸ÐºÐ¸Ñ\98Ñ\83.",
        "import-error-unserialize": "Не могу да десеријализујем ревизију $2 странице $1. Записано је да ревизија користи $3 модел садржаја у $4 формату.",
        "import-options-wrong": "{{PLURAL:$2|Погрешна опција|Погрешне опције}}: <nowiki>$1</nowiki>",
-       "import-rootpage-invalid": "Ð\9dаведена Ð¾Ñ\81новна Ñ\81Ñ\82Ñ\80аниÑ\86а Ð¸Ð¼Ð° Ð½ÐµÐ¸Ñ\81пÑ\80аван наслов.",
+       "import-rootpage-invalid": "Ð\9dаведена Ð¾Ñ\81новна Ñ\81Ñ\82Ñ\80аниÑ\86а Ð¸Ð¼Ð° Ð½ÐµÐ²Ð°Ð¶ÐµÑ\9bи наслов.",
        "import-rootpage-nosubpage": "Именски простор „$1“ основне странице не дозвољава подстранице.",
        "importlogpage": "Евиденција увоза",
        "importlogpagetext": "Административни увози страница с историјама измена с других викија.",
        "tooltip-pt-watchlist": "Списак страница које надгледате",
        "tooltip-pt-mycontris": "Списак {{GENDER:|Ваших}} доприноса",
        "tooltip-pt-anoncontribs": "Списак измена направљених са ове IP адресе",
-       "tooltip-pt-login": "Ð\9fÑ\80едлажемо Ð\92ам да се пријавите, иако то није обавезно",
+       "tooltip-pt-login": "Ð\9fÑ\80едлажемо Ð²ам да се пријавите, иако то није обавезно",
        "tooltip-pt-login-private": "Морате да се пријавите да бисте користили овај Вики",
        "tooltip-pt-logout": "Одјавите се",
-       "tooltip-pt-createaccount": "Ð\9fÑ\80едлажемо Ð\92ам да отворите налог и пријавите се, иако то није обавезно",
+       "tooltip-pt-createaccount": "Ð\9fÑ\80едлажемо Ð²ам да отворите налог и пријавите се, иако то није обавезно",
        "tooltip-ca-talk": "Разговор о страници са садржајем",
        "tooltip-ca-edit": "Уредите ову страницу",
        "tooltip-ca-addsection": "Започните нови одељак",
        "tooltip-t-upload": "Отпремите датотеке",
        "tooltip-t-specialpages": "Списак свих посебних страница",
        "tooltip-t-print": "Верзија ове странице за штампање",
-       "tooltip-t-permalink": "ТÑ\80аÑ\98на Ð²ÐµÐ·Ð° ка овој ревизији странице",
+       "tooltip-t-permalink": "ТÑ\80аÑ\98ни Ð»Ð¸Ð½Ðº ка овој ревизији странице",
        "tooltip-ca-nstab-main": "Погледајте страницу са садржајем",
        "tooltip-ca-nstab-user": "Погледајте корисничку страницу",
        "tooltip-ca-nstab-media": "Погледајте медијску страницу",
        "tooltip-minoredit": "Означите ову измену као мању",
        "tooltip-save": "Сачувајте своје промене",
        "tooltip-publish": "Објавите своје измене",
-       "tooltip-preview": "Ð\9fÑ\80егледаÑ\98Ñ\82е Ñ\81воÑ\98е Ð¸Ð·мене. Користите ово дугме пре чувања.",
+       "tooltip-preview": "Ð\9fÑ\80егледаÑ\98Ñ\82е Ñ\81воÑ\98е Ð¿Ñ\80омене. Користите ово дугме пре чувања.",
        "tooltip-diff": "Погледајте које промене сте направили на тексту",
        "tooltip-compareselectedversions": "Погледаjте разлике између две изабране ревизије ове странице",
        "tooltip-watch": "Додајте ову страницу на свој списак надгледања",
        "tooltip-recreate": "Поново направите страницу иако је обрисана",
        "tooltip-upload": "Започните отпремање",
        "tooltip-rollback": "„Врати“ враћа измене последњег доприносиоца ове странице једним кликом",
-       "tooltip-undo": "„Поништи” враћа ову измену и отвара образац за уређивање у претпрегледном моду. Дозвољава додавање разлога у опису измене.",
+       "tooltip-undo": "„Поништи” враћа ову измену и отвара образац за уређивање у претпрегледном моду. Дозвољава додавање разлога у резимеу.",
        "tooltip-preferences-save": "Сачувај подешавања",
-       "tooltip-summary": "Унесите кратак опис",
+       "tooltip-summary": "Унесите кратак резиме",
        "interlanguage-link-title": "$1 — $2",
        "interlanguage-link-title-nonlang": "$1 — $2",
        "common.css": "/* CSS постављен овде ће се одразити на све теме */",
        "creditspage": "Аутори странице",
        "nocredits": "Не постоје подаци о аутору ове странице.",
        "spamprotectiontitle": "Филтер за заштиту од непожељних порука",
-       "spamprotectiontext": "ФилÑ\82еÑ\80а Ð¿Ñ\80оÑ\82ив Ð½ÐµÐ¶ÐµÑ\99ениÑ\85 Ð¿Ð¾Ñ\80Ñ\83ка Ñ\98е Ð±Ð»Ð¾ÐºÐ¸Ñ\80ао Ñ\87Ñ\83ваÑ\9aе Ð¾Ð²Ðµ Ñ\81Ñ\82Ñ\80аниÑ\86е.\nÐ\9eво Ñ\98е Ð²ÐµÑ\80оваÑ\82но Ð¸Ð·Ð°Ð·Ð²Ð°Ð½Ð¾ Ð²ÐµÐ·ом до спољашњег сајта који се налази на црном списку.",
+       "spamprotectiontext": "ФилÑ\82еÑ\80а Ð¿Ñ\80оÑ\82ив Ð½ÐµÐ¶ÐµÑ\99ениÑ\85 Ð¿Ð¾Ñ\80Ñ\83ка Ñ\98е Ð±Ð»Ð¾ÐºÐ¸Ñ\80ао Ñ\87Ñ\83ваÑ\9aе Ð¾Ð²Ðµ Ñ\81Ñ\82Ñ\80аниÑ\86е.\nÐ\9eво Ñ\98е Ð²ÐµÑ\80оваÑ\82но Ð¸Ð·Ð°Ð·Ð²Ð°Ð½Ð¾ Ð»Ð¸Ð½Ðºом до спољашњег сајта који се налази на црном списку.",
        "spamprotectionmatch": "Следећи текст је активирао наш филтер за нежељене поруке: $1",
        "spambot_username": "Чишћење непожељних порука у Медијавикији",
-       "spam_reverting": "Ð\92Ñ\80аÑ\9bам Ð½Ð° Ð¿Ð¾Ñ\81ледÑ\9aÑ\83 Ñ\80евизиÑ\98Ñ\83 ÐºÐ¾Ñ\98а Ð½Ðµ Ñ\81адÑ\80жи Ð²ÐµÐ·е до $1",
+       "spam_reverting": "Ð\92Ñ\80аÑ\9bам Ð½Ð° Ð¿Ð¾Ñ\81ледÑ\9aÑ\83 Ñ\80евизиÑ\98Ñ\83 ÐºÐ¾Ñ\98а Ð½Ðµ Ñ\81адÑ\80жи Ð»Ð¸Ð½ÐºÐ¾Ð²е до $1",
        "spam_blanking": "Све измене садрже везе до $1. Чистим",
-       "spam_deleting": "Све Ñ\80евизиÑ\98е Ñ\81адÑ\80же Ð²ÐµÐ·е до $1. Бришем",
+       "spam_deleting": "Све Ñ\80евизиÑ\98е Ñ\81адÑ\80же Ð»Ð¸Ð½ÐºÐ¾Ð²е до $1. Бришем",
        "simpleantispam-label": "Провера против нежељеног садржаја. \n<strong>Не</strong> попуњавајте ово!",
        "pageinfo-title": "Информације за „$1“",
        "pageinfo-not-current": "Нажалост, немогуће је навести ове инфомације за старије ревизије.",
        "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|страница|странице|страница}}",
        "file-info": "величина датотеке: $1, MIME тип: $2",
        "file-info-size": "$1 × $2 пиксела, величина датотеке: $3, MIME тип: $4",
-       "file-info-size-pages": "$1 × $2 пиксела, величина: $3, MIME врста: $4, $5 {{PLURAL:$5|страница|странице|страница}}",
+       "file-info-size-pages": "$1 × $2 пиксела, величина: $3, MIME тип: $4, $5 {{PLURAL:$5|страница|странице|страница}}",
        "file-nohires": "Већа резолуција није доступна.",
        "svg-long-desc": "SVG датотека, номинално $1 × $2 пиксела, величина: $3",
        "svg-long-desc-animated": "Анимирана SVG датотека, номинално: $1 × $2 пиксела, величина: $3",
-       "svg-long-error": "Ð\9dеиÑ\81пÑ\80авна SVG датотека: $1",
+       "svg-long-error": "Ð\9dеважеÑ\9bа SVG датотека: $1",
        "show-big-image": "Првобитна датотека",
        "show-big-image-preview": "Величина овог приказа: $1.",
        "show-big-image-preview-differ": "Величина $3 прегледа за ову $2 датотеку је $1.",
        "saturday-at": "у суботу у $1",
        "sunday-at": "у недељу у $1",
        "yesterday-at": "Јуче у $1",
-       "bad_image_list": "ФоÑ\80маÑ\82 Ñ\98е Ñ\81ледеÑ\9bи:\n\nРазмаÑ\82Ñ\80аÑ\98Ñ\83 Ñ\81е Ñ\81амо Ð½Ð°Ð±Ñ\80аÑ\98аÑ\9aа (Ñ\80едови ÐºÐ¾Ñ\98и Ð¿Ð¾Ñ\87иÑ\9aÑ\83 Ñ\81а Ð·Ð²ÐµÐ·Ð´Ð¸Ñ\86ом).\nÐ\9fÑ\80ва Ð²ÐµÐ·Ð° Ñ\83 Ñ\80едÑ\83 Ð¼Ð¾Ñ\80а Ð´Ð° Ð±Ñ\83де Ð²ÐµÐ·Ð° Ð´Ð¾ Ð½ÐµÐ¸Ñ\81пÑ\80авне Ð´Ð°Ñ\82оÑ\82еке.\nСве Ð´Ð°Ñ\99Ñ\9aе Ð²ÐµÐ·Ðµ у истом реду сматрају се изузецима.",
+       "bad_image_list": "ФоÑ\80маÑ\82 Ñ\98е Ñ\81ледеÑ\9bи:\n\nРазмаÑ\82Ñ\80аÑ\98Ñ\83 Ñ\81е Ñ\81амо Ð½Ð°Ð±Ñ\80аÑ\98аÑ\9aа (Ñ\80едови ÐºÐ¾Ñ\98и Ð¿Ð¾Ñ\87иÑ\9aÑ\83 Ñ\81а Ð·Ð²ÐµÐ·Ð´Ð¸Ñ\86ом).\nÐ\9fÑ\80ви Ð»Ð¸Ð½Ðº Ñ\83 Ñ\80едÑ\83 Ð¼Ð¾Ñ\80а Ð´Ð° Ð±Ñ\83де Ð»Ð¸Ð½Ðº Ð´Ð¾ Ð½ÐµÐ¸Ñ\81пÑ\80авне Ð´Ð°Ñ\82оÑ\82еке.\nСви Ð´Ð°Ñ\99Ñ\9aи Ð»Ð¸Ð½ÐºÐ¾Ð²Ð¸ у истом реду сматрају се изузецима.",
        "variantname-zh-hans": "hans",
        "variantname-zh-hant": "hant",
        "variantname-zh-cn": "cn",
        "exif-software": "Коришћени софтвер",
        "exif-artist": "Аутор",
        "exif-copyright": "Носилац ауторских права",
-       "exif-exifversion": "Exif Ð¸Ð·Ð´Ð°Ñ\9aе",
-       "exif-flashpixversion": "Ð\9fодÑ\80жано Ð¸Ð·Ð´Ð°Ñ\9aе FlashPix-а",
+       "exif-exifversion": "Exif Ð²ÐµÑ\80зиÑ\98а",
+       "exif-flashpixversion": "Ð\9fодÑ\80жана Ð²ÐµÑ\80зиÑ\98а FlashPix-а",
        "exif-colorspace": "Простор боје",
        "exif-componentsconfiguration": "Значење сваког дела",
        "exif-compressedbitsperpixel": "Режим сажимања слике",
        "exif-devicesettingdescription": "Опис поставки уређаја",
        "exif-subjectdistancerange": "Опсег удаљености објекта",
        "exif-imageuniqueid": "Назнака слике",
-       "exif-gpsversionid": "Ð\98здаÑ\9aе GPS ознаке",
+       "exif-gpsversionid": "Ð\92еÑ\80зиÑ\98а GPS ознаке",
        "exif-gpslatituderef": "Северна или јужна ширина",
        "exif-gpslatitude": "Ширина",
        "exif-gpslongituderef": "Источна или западна дужина",
        "exif-contact": "Подаци за контакт",
        "exif-writer": "Писац",
        "exif-languagecode": "Језик",
-       "exif-iimversion": "IIM Ð¸Ð·Ð´Ð°Ñ\9aе",
+       "exif-iimversion": "IIM Ð²ÐµÑ\80зиÑ\98а",
        "exif-iimcategory": "Категорија",
        "exif-iimsupplementalcategory": "Допунске категорије",
        "exif-datetimeexpires": "Не користи након",
        "exif-originaldocumentid": "Јединствени ID изворног документа",
        "exif-licenseurl": "Адреса лиценце за ауторска права",
        "exif-morepermissionsurl": "Резервни подаци о лиценцирању",
-       "exif-attributionurl": "Ð\9fÑ\80и Ð¿Ð¾Ð½Ð¾Ð²Ð½Ð¾Ð¼ ÐºÐ¾Ñ\80иÑ\88Ñ\9bеÑ\9aÑ\83 Ð¾Ð²Ð¾Ð³ Ñ\80ада, ÐºÐ¾Ñ\80иÑ\81Ñ\82иÑ\82е Ð²ÐµÐ·Ñ\83 до",
+       "exif-attributionurl": "Ð\9fÑ\80и Ð¿Ð¾Ð½Ð¾Ð²Ð½Ð¾Ð¼ ÐºÐ¾Ñ\80иÑ\88Ñ\9bеÑ\9aÑ\83 Ð¾Ð²Ð¾Ð³ Ñ\80ада, ÐºÐ¾Ñ\80иÑ\81Ñ\82иÑ\82е Ð»Ð¸Ð½Ðº до",
        "exif-preferredattributionname": "При поновном коришћењу овог рада, поставите заслуге",
        "exif-pngfilecomment": "Коментар на датотеку PNG",
        "exif-disclaimer": "Одрицање одговорности",
        "exif-componentsconfiguration-4": "R",
        "exif-componentsconfiguration-5": "G",
        "exif-componentsconfiguration-6": "B",
-       "exif-exposureprogram-0": "Ð\9dеодÑ\80еÑ\92ено",
+       "exif-exposureprogram-0": "Ð\9dиÑ\98е Ð¾Ð´Ñ\80еÑ\92ен",
        "exif-exposureprogram-1": "Ручно",
        "exif-exposureprogram-2": "Нормалан програм",
        "exif-exposureprogram-3": "Приоритет отвора бленде",
        "exif-flash-function-1": "Нема функције за блиц",
        "exif-flash-redeye-1": "режим исправке црвених очију",
        "exif-focalplaneresolutionunit-2": "инчи",
-       "exif-sensingmethod-1": "Ð\9dеодÑ\80еÑ\92ено",
+       "exif-sensingmethod-1": "Ð\9dедеÑ\84иниÑ\81ан",
        "exif-sensingmethod-2": "Једнокристални матрични сензор",
        "exif-sensingmethod-3": "Двокристални матрични сензор",
        "exif-sensingmethod-4": "Трокристални матрични сензор",
        "exif-dc-relation": "Сродни медији",
        "exif-dc-rights": "Права",
        "exif-dc-source": "Извор медија",
-       "exif-dc-type": "Ð\92Ñ\80Ñ\81Ñ\82а медија",
+       "exif-dc-type": "Тип медија",
        "exif-rating-rejected": "Одбијено",
        "exif-isospeedratings-overflow": "Веће од 65535",
        "exif-maxaperturevalue-value": "$1 APEX (f/$2)",
        "monthsall": "све",
        "confirmemail": "Потврда имејл адресе",
        "confirmemail_noemail": "Нисте унели валидну имејл адресу у [[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 потврдним кодом;\nунесите је у прегледач да бисте потврдили да је ваша имејл адреса важећа.",
+       "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а потврдним кодом;\nунесите је у прегледач да бисте потврдили да је ваша имејл адреса важећа.",
        "confirmemail_pending": "Потврдни код вам је већ послат. Ако сте недавно отворили налог, онда вероватно треба да сачекате неколико минута да пристигне, пре него што поново затражите нови код.",
        "confirmemail_send": "Пошаљи потврдни код",
        "confirmemail_sent": "Потврдна порука је послата.",
        "confirmemail_oncreate": "Послат је потврдни код на вашу имејл адресу.\nОвај код није потребан за пријављивање, али вам треба да бисте укључили могућности имејла на викију.",
        "confirmemail_sendfailed": "{{SITENAME}} не може да пошаље имејл потврду.\nПроверите да ли је имејл адреса правилно написана.\n\nГрешка: $1",
-       "confirmemail_invalid": "Ð\9fоÑ\82вÑ\80дни ÐºÐ¾Ð´ Ñ\98е Ð½ÐµÐ¸Ñ\81пÑ\80аван. Ð\92еÑ\80оваÑ\82но Ñ\98е истекао.",
+       "confirmemail_invalid": "Ð\9dеважеÑ\9bи ÐºÐ¾Ð´ Ð·Ð° Ð¿Ð¾Ñ\82вÑ\80дÑ\83.\nÐ\9aод Ñ\98е Ð¼Ð¾Ð¶Ð´Ð° истекао.",
        "confirmemail_needlogin": "Морате бити $1 да бисте потврдили имејл адресу.",
        "confirmemail_success": "Ваша имејл адреса је потврђена.\nСада можете да се [[Special:UserLogin|пријавите]] и уживате у викију.",
        "confirmemail_loggedin": "Ваша имејл адреса је сада потврђена.",
        "confirmemail_subject": "{{SITENAME}} – потврда имејл адресе",
-       "confirmemail_body": "Неко, вероватно Ви, с IP адресе $1,\nотворио је налог „$2“ с овом имејл адресом на пројекту {{SITENAME}}.\n\nДа потврдите да овај налог стварно припада вама и да активирате\nмогућности имејла на пројекту {{SITENAME}}, отворите ову везу у прегледачу:\n\n$3\n\nУколико налог *не* припада вама, пратите везу\nда откажете потврду имејл адресе:\n\n$5\n\nОвај потврдни код истиче у $4.",
-       "confirmemail_body_changed": "Неко, вероватно Ви, с IP адресе $1,\nпроменио је имејл адресу налога „$2“ у ову адресу на пројекту {{SITENAME}}.\n\nДа бисте потврдили да овај налог стварно припада вама и поново активирали могућности имејла, отворите следећу везу у прегледачу:\n\n$3\n\nАко налог *не* припада вама, пратите следећу везу да откажете потврду имејл адресе:\n\n$5\n\nОвај потврдни код истиче $6 у $7",
-       "confirmemail_body_set": "Неко, вероватно Ви, с IP адресе $1,\nпроменио је имејл адресу налога „$2“ у ову адресу на {{SITENAME}}.\n\nДа бисмо потврдили да овај налог стварно припада вама и поново активирали\nмогућности имејла на {{SITENAME}}, отворите следећу везу у прегледачу:\n\n$3\n\nАко налог *не* припада вама, пратите следећу везу да откажете потврду имејл адресе:\n\n$5\n\nОвај потврдни код истиче $4.",
+       "confirmemail_body": "Неко, вероватно Ви, са IP адресе $1,\nрегистровао је налог „$2“ са овом имејл адресом на пројекту {{SITENAME}}.\n\nДа бисте потврдили да овај налог стварно припада вама и активирали могућности имејла на пројекту {{SITENAME}}, отворите овај линк у прегледачу:\n\n$3\n\nАко ви *нисте* регистровали налог, пратите овај линк\nда бисте отказали потврду имејл адресе:\n\n$5\n\nОвај потврдни код истиче у $4.",
+       "confirmemail_body_changed": "Неко, вероватно Ви, с IP адресе $1,\nпроменио је имејл адресу налога „$2“ у ову адресу на пројекту {{SITENAME}}.\n\nДа бисте потврдили да овај налог стварно припада вама и поново активирали могућности имејла, отворите следећи линк у прегледачу:\n\n$3\n\nАко налог *не* припада вама, пратите следећи линк да откажете потврду имејл адресе:\n\n$5\n\nОвај потврдни код истиче $6 у $7",
+       "confirmemail_body_set": "Неко, вероватно Ви, с IP адресе $1,\nпроменио је имејл адресу налога „$2“ у ову адресу на {{SITENAME}}.\n\nДа бисмо потврдили да овај налог стварно припада вама и поново активирали\nмогућности имејла на {{SITENAME}}, отворите следећи линк у прегледачу:\n\n$3\n\nАко налог *не* припада вама, пратите следећи линк да откажете потврду имејл адресе:\n\n$5\n\nОвај потврдни код истиче $4.",
        "confirmemail_invalidated": "Потврда имејл адресе је отказана",
        "invalidateemail": "Отказивање потврде имејла",
        "notificationemail_subject_changed": "Регистрована имејл адреса на пројекту {{SITENAME}} је промењена",
        "scarytranscludefailed": "[Добављање шаблона за $1 није успело]",
        "scarytranscludefailed-httpstatus": "[Не могу да преузмем шаблон $1: HTTP $2]",
        "scarytranscludetoolong": "[URL адреса је предугачка]",
-       "deletedwhileediting": "<strong>УпозоÑ\80еÑ\9aе</strong>: Ð¾Ð²Ð° Ñ\81Ñ\82Ñ\80аниÑ\86а Ñ\98е Ð¾Ð±Ñ\80иÑ\81ана Ð½Ð°ÐºÐ¾Ð½ Ñ\88Ñ\82о Ñ\81Ñ\82е Ð¿Ð¾Ñ\87ели Ñ\81 уређивањем!",
+       "deletedwhileediting": "<strong>УпозоÑ\80еÑ\9aе</strong>: Ð\9eва Ñ\81Ñ\82Ñ\80аниÑ\86а Ñ\98е Ð¾Ð±Ñ\80иÑ\81ана Ð½Ð°ÐºÐ¾Ð½ Ñ\88Ñ\82о Ñ\81Ñ\82е Ð¿Ð¾Ñ\87ели Ñ\81а уређивањем!",
        "confirmrecreate": "{{GENDER:$1|Корисник|Корисница}} [[User:$1|$1]] ([[User talk:$1|разговор]]) је {{GENDER:$1|обрисао|обрисала}} ову страницу након што сте почели да је уређујете из следећег разлога:\n: <em>$2</em>\nПотврдите да стварно желите да направите страницу.",
        "confirmrecreate-noreason": "{{GENDER:$1|Корисник|Корисница}} [[User:$1|$1]] ([[User talk:$1|разговор]]) је {{GENDER:$1|обрисао|обрисала}} ову страницу након што сте почели да је уређујете. Потврдите да стварно желите да поново направите ову страницу.",
        "recreate": "Поново направи",
        "watchlistedit-raw-removed": "{{PLURAL:$1|1 наслов је уклоњен|Уклоњена су $1 наслова|Уклоњено је $1 наслова}}:",
        "watchlistedit-clear-title": "Чишћење списка надгледања",
        "watchlistedit-clear-legend": "Чишћење списка надгледања",
-       "watchlistedit-clear-explain": "Сви наслови ће бити уклоњени из вашег списка надгледања.",
+       "watchlistedit-clear-explain": "Сви наслови ће бити уклоњени из списка надгледања",
        "watchlistedit-clear-titles": "Наслови:",
        "watchlistedit-clear-submit": "Очисти списак надгледања (Ово је неповратно!)",
-       "watchlistedit-clear-done": "Ð\92аÑ\88 Ñ\81пиÑ\81ак Ð½Ð°Ð´Ð³Ð»ÐµÐ´Ð°Ñ\9aа Ñ\98е Ð¸Ñ\81пÑ\80ажÑ\9aен.",
+       "watchlistedit-clear-done": "Ð\92аÑ\88 Ñ\81пиÑ\81ак Ð½Ð°Ð´Ð³Ð»ÐµÐ´Ð°Ñ\9aа Ñ\98е Ð¾Ñ\87иÑ\88Ñ\9bен.",
        "watchlistedit-clear-removed": "{{PLURAL:$1|1 наслов је уклоњен|$1 наслова су уклоњена|$1 наслова је уклоњено}}:",
        "watchlistedit-too-many": "Има превише страница за приказ овде.",
        "watchlisttools-clear": "очисти списак надгледања",
        "version-ext-license": "Лиценца",
        "version-ext-colheader-name": "Додатак",
        "version-skin-colheader-name": "Тема",
-       "version-ext-colheader-version": "Ð\98здаÑ\9aе",
+       "version-ext-colheader-version": "Ð\92еÑ\80зиÑ\98а",
        "version-ext-colheader-license": "Лиценца",
        "version-ext-colheader-description": "Опис",
        "version-ext-colheader-credits": "Аутори",
        "version-license-info": "Медијавики је слободан софтвер можете га редистрибуирати и/или модификовати под условима ГНУ-ове опште јавне лиценце верзија 2 или сваке следеће коју објави Задужбина за слободан софтвер.\n\nМедијавики се редистрибуира у нади да ће бити од користи, али <em>БЕЗ ИКАКВЕ ГАРАНЦИЈЕ</em> чак и без <strong>ПОДРАЗУМЕВАНЕ ГАРАНЦИЈЕ ФУНКЦИОНАЛНОСТИ</strong> или <strong>ПРИКЛАДНОСТИ ЗА ОДРЕЂЕНЕУ НАМЕНУ</strong>. Погледајте ГНУ-ову општу јавну лиценцу за више информација.\n\nТребало би да сте добили [{{SERVER}}{{SCRIPTPATH}}/COPYING примерак ГНУ-ове опште јавне лиценце] заједно са овим програмом. Ако нисте, пишите на Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA или [//www.gnu.org/licenses/old-licenses/gpl-2.0.html прочитајте овде].",
        "version-software": "Инсталирани софтвер",
        "version-software-product": "Производ",
-       "version-software-version": "Ð\98здаÑ\9aе",
+       "version-software-version": "Ð\92еÑ\80зиÑ\98а",
        "version-entrypoints": "Адресе улазне тачке",
        "version-entrypoints-header-entrypoint": "Улазна тачка",
        "version-entrypoints-header-url": "Адреса",
        "redirect-file": "Назив датотеке",
        "redirect-logid": "ID евиденције",
        "redirect-not-exists": "Вредност није пронађена",
-       "fileduplicatesearch": "Ð\9fÑ\80еÑ\82Ñ\80ажи Ð´Ñ\83пликаÑ\82е",
+       "fileduplicatesearch": "Ð\9fÑ\80еÑ\82Ñ\80ага Ð´Ñ\83пликаÑ\82а Ð´Ð°Ñ\82оÑ\82ека",
        "fileduplicatesearch-summary": "Претрага дуплираних датотека према хеш вредности.",
        "fileduplicatesearch-filename": "Назив датотеке:",
        "fileduplicatesearch-submit": "Претражи",
        "specialpages-group-developer": "Програмерске алатке",
        "blankpage": "Празна страница",
        "intentionallyblankpage": "Ова страница је намерно остављена празном.",
-       "external_image_whitelist": " #Ð\9eÑ\81Ñ\82авиÑ\82е Ð¾Ð²Ð°Ñ\98 Ñ\80ед Ð¾Ð½Ð°ÐºÐ²Ð¸Ð¼ ÐºÐ°ÐºÐ°Ð² Ñ\98еÑ\81Ñ\82е<pre>\n#Ð\98Ñ\81под Ð´Ð¾Ð´Ð°Ñ\98Ñ\82е Ð¾Ð´Ð»Ð¾Ð¼ÐºÐµ Ñ\80егÑ\83лаÑ\80ниÑ\85 Ð¸Ð·Ñ\80аза (Ñ\81амо Ð´ÐµÐ¾ ÐºÐ¾Ñ\98и Ñ\81е Ð½Ð°Ð»Ð°Ð·Ð¸ Ð¸Ð·Ð¼ÐµÑ\92Ñ\83 //)\n#Ð\9eни Ñ\9bе Ð±Ð¸Ñ\82и Ñ\83поÑ\80еÑ\92ени Ñ\81 Ð°Ð´Ñ\80еÑ\81ама Ñ\81поÑ\99аÑ\88Ñ\9aиÑ\85 Ñ\81лика\n#Ð\9eне ÐºÐ¾Ñ\98е Ñ\81е Ð¿Ð¾ÐºÐ»Ð°Ð¿Ð°Ñ\98Ñ\83 Ð±Ð¸Ñ\9bе Ð¿Ñ\80иказане ÐºÐ°Ð¾ Ñ\81лике, Ð° Ð¿Ñ\80еоÑ\81Ñ\82але ÐºÐ°Ð¾ Ð²ÐµÐ·Ðµ до слика\n#Редови који почињу с тарабом се сматрају коментарима\n#Сви уноси су осетљиви на мала и велика слова\n\n#Додајте све одломке регуларних израза изнад овог реда. Овај ред не дирајте</pre>",
+       "external_image_whitelist": " #Ð\9eÑ\81Ñ\82авиÑ\82е Ð¾Ð²Ð°Ñ\98 Ñ\80ед Ð¾Ð½Ð°ÐºÐ²Ð¸Ð¼ ÐºÐ°ÐºÐ°Ð² Ñ\98еÑ\81Ñ\82е<pre>\n#Ð\98Ñ\81под Ð´Ð¾Ð´Ð°Ñ\98Ñ\82е Ð¾Ð´Ð»Ð¾Ð¼ÐºÐµ Ñ\80егÑ\83лаÑ\80ниÑ\85 Ð¸Ð·Ñ\80аза (Ñ\81амо Ð´ÐµÐ¾ ÐºÐ¾Ñ\98и Ñ\81е Ð½Ð°Ð»Ð°Ð·Ð¸ Ð¸Ð·Ð¼ÐµÑ\92Ñ\83 //)\n#Ð\9eни Ñ\9bе Ð±Ð¸Ñ\82и Ñ\83поÑ\80еÑ\92ени Ñ\81 Ð°Ð´Ñ\80еÑ\81ама Ñ\81поÑ\99аÑ\88Ñ\9aиÑ\85 Ñ\81лика\n#Ð\9eне ÐºÐ¾Ñ\98е Ñ\81е Ð¿Ð¾ÐºÐ»Ð°Ð¿Ð°Ñ\98Ñ\83 Ð±Ð¸Ñ\9bе Ð¿Ñ\80иказане ÐºÐ°Ð¾ Ñ\81лике, Ð° Ð¿Ñ\80еоÑ\81Ñ\82але ÐºÐ°Ð¾ Ð»Ð¸Ð½ÐºÐ¾Ð²Ð¸ до слика\n#Редови који почињу с тарабом се сматрају коментарима\n#Сви уноси су осетљиви на мала и велика слова\n\n#Додајте све одломке регуларних израза изнад овог реда. Овај ред не дирајте</pre>",
        "tags": "Важеће ознаке промена",
-       "tag-filter": "Филтер за [[Special:Tags|ознаке]]:",
+       "tag-filter": "Филтер [[Special:Tags|ознака]]:",
        "tag-filter-submit": "Филтрирај",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|ознака|ознаке}}]]: $2)",
        "tag-mw-contentmodelchange": "промена модела садржаја",
        "tags-activate": "активирај",
        "tags-deactivate": "деактивирај",
        "tags-hitcount": "$1 {{PLURAL:$1|промена|промене|промена}}",
-       "tags-manage-no-permission": "Немате дозволу да мењате ознаке.",
+       "tags-manage-no-permission": "Немате дозволу да управљате променама ознака.",
        "tags-manage-blocked": "Не можете да мењате ознаке промена док {{GENDER:$1|сте}} блокирани.",
-       "tags-create-heading": "Ð\9dова Ð¾Ð·Ð½Ð°ÐºÐ°",
+       "tags-create-heading": "Ð\9fÑ\80авÑ\99еÑ\9aе Ð½Ð¾Ð²Ðµ Ð¾Ð·Ð½Ð°ÐºÐµ",
        "tags-create-explanation": "По подразумеваним подешавањима нове ознаке моћи ће да користе корисници и ботови.",
        "tags-create-tag-name": "Назив ознаке:",
        "tags-create-reason": "Разлог:",
        "tags-create-submit": "Направи",
-       "tags-create-no-name": "Ð\9cоÑ\80аÑ\82е Ð½Ð°Ð²ÐµÑ\81Ñ\82и Ð½Ð°Ð·Ð¸Ð² ознаке.",
+       "tags-create-no-name": "Ð\9cоÑ\80аÑ\82е Ð´Ð° Ð½Ð°Ð²ÐµÐ´ÐµÑ\82е Ð¸Ð¼Ðµ ознаке.",
        "tags-create-already-exists": "Ознака „$1“ већ постоји.",
        "tags-create-warnings-below": "Правите нову ознаку, желите ли да наставите?",
        "tags-delete-title": "Брисање ознака",
        "compare-rev1": "Ревизија 1",
        "compare-rev2": "Измена 2",
        "compare-submit": "Упореди",
-       "compare-invalid-title": "Наведени наслов је неисправан.",
+       "compare-invalid-title": "Наслов који сте навели је неважећи.",
        "compare-title-not-exists": "Наведени наслов не постоји.",
        "compare-revision-not-exists": "Ревизија коју сте навели не постоји.",
        "diff-form": "Разлике",
        "diff-form-oldid": "ID старе ревизије (опционално)",
        "diff-form-revid": "ID измене или разлике",
        "diff-form-submit": "Прикажи разлике",
-       "permanentlink": "ТÑ\80аÑ\98на Ð²ÐµÐ·Ð°",
+       "permanentlink": "ТÑ\80аÑ\98ни Ð»Ð¸Ð½Ðº",
        "permanentlink-revid": "ID ревизије",
        "permanentlink-submit": "Иди на измену",
        "dberr-problems": "Дошло је до техничких проблема.",
        "dberr-usegoogle": "У међувремену, покушајте да претражите помоћу Гугла.",
        "dberr-outofdate": "Имајте на уму да њихови примерци нашег садржаја могу бити застарели.",
        "dberr-cachederror": "Ово је привремено меморисан примерак стране који можда није ажуран.",
-       "htmlform-invalid-input": "Пронађени су проблеми у вашем уносу",
+       "htmlform-invalid-input": "Постоје проблеми са вашим уносом.",
        "htmlform-select-badoption": "Вредност коју сте навели није валидна опција.",
        "htmlform-int-invalid": "Наведена вредност није цели број.",
        "htmlform-float-invalid": "Наведена вредност није број.",
        "logentry-suppress-event-legacy": "$1 је потајно {{GENDER:$2|променио|променила}} видљивост догађаја у евиденцији на страници „$3”",
        "logentry-suppress-revision-legacy": "$1 је тајно {{GENDER:$2|променио|променила}} видљивост ревизија на страници $3",
        "revdelete-content-hid": "садржај је сакривен",
-       "revdelete-summary-hid": "опис измене је сакривен",
+       "revdelete-summary-hid": "резиме измене је сакривен",
        "revdelete-uname-hid": "корисничко име је сакривено",
        "revdelete-content-unhid": "садржај је откривен",
-       "revdelete-summary-unhid": "опис измене је откривен",
+       "revdelete-summary-unhid": "резиме измене је откривен",
        "revdelete-uname-unhid": "корисничко име је откривено",
        "revdelete-restricted": "примењена ограничења за администраторе",
        "revdelete-unrestricted": "уклоњена ограничења за администраторе",
        "feedback-useragent": "Кориснички агент:",
        "searchsuggest-search": "Претрага",
        "searchsuggest-containing": "садржи...",
-       "api-error-badtoken": "УнÑ\83Ñ\82Ñ\80аÑ\88Ñ\9aа Ð³Ñ\80еÑ\88ка: Ð½ÐµÐ¸Ñ\81пÑ\80аван токен.",
+       "api-error-badtoken": "УнÑ\83Ñ\82Ñ\80аÑ\88Ñ\9aа Ð³Ñ\80еÑ\88ка: Ð»Ð¾Ñ\88 токен.",
        "api-error-emptypage": "Стварање нових празних страница није дозвољено.",
        "api-error-publishfailed": "Унутрашња грешка: сервер није успео да објави привремену датотеку.",
        "api-error-stashfailed": "Унутрашња грешка: сервер не може да сачува привремену датотеку.",
        "limitreport-unstrip-depth": "Unstrip дубина рекурзије",
        "limitreport-unstrip-size": "Unstrip величина након проширења",
        "limitreport-unstrip-size-value": "$1/$2 {{PLURAL:$2|бајт|бајта|бајтова}}",
-       "expandtemplates": "Ð\97амена шаблона",
+       "expandtemplates": "Ð\9fÑ\80оÑ\88иÑ\80аваÑ\9aе шаблона",
        "expand_templates_intro": "Ова посебна страница узима викитекст и мења све шаблоне у њему рекурзивно.\nТакође мења функције парсера као што је <code><nowiki>{{</nowiki>#language:…}}</code> и променљиве као што је <code><nowiki>{{</nowiki>CURRENTDAY}}</code>. \nЗаправо практично све што се налази између витичастих заграда.",
        "expand_templates_title": "Назив контекста; за {{СТРАНИЦА}} итд.:",
        "expand_templates_input": "Унос викитекста:",
        "expand_templates_generate_xml": "Прикажи XML стабло",
        "expand_templates_generate_rawhtml": "Прикажи сиров HTML",
        "expand_templates_preview": "Претпреглед",
-       "pagelanguage": "Ð\9fÑ\80омени Ñ\98език странице",
+       "pagelanguage": "Ð\9fÑ\80омена Ñ\98езика странице",
        "pagelang-name": "Страница",
        "pagelang-language": "Језик",
        "pagelang-use-default": "Користи подразумевани језик",
        "logentry-pagelang-pagelang": "$1 је {{GENDER:$2|променио|променила}} језик странице $3 из $4 у $5.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (омогућена)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>онемогућена</strong>)",
-       "mediastatistics": "СÑ\82аÑ\82иÑ\81Ñ\82ика Ð´Ð°Ñ\82оÑ\82ека",
+       "mediastatistics": "СÑ\82аÑ\82иÑ\81Ñ\82ика Ð¼ÐµÐ´Ð¸Ñ\98а",
        "mediastatistics-summary": "Статистике о типовима послатих датотека. Овде су урачунате само најскорије верзије датотека. Старе или обрисане верзије нису урачунате.",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 бајт|$1 бајта|$1 бајтова}} ($2; $3%)",
        "mediastatistics-bytespertype": "Укупна величина датотеке овог одељка: {{PLURAL:$1|$1 бајт|$1 бајта|$1 бајтова}} ($2; $3%).",
        "json-error-utf8": "Малформирани UTF-8 знаци, могуће је да су неисправно енкодирани",
        "json-error-recursion": "Једна или више рекурзивних референци у вредности коју треба енкодирати.",
        "json-error-inf-or-nan": "Једна или више NAN или INF вредности у вредности коју треба енкодирати",
-       "json-error-unsupported-type": "Дата је вреднос врсте која се не може енкодирати",
-       "headline-anchor-title": "Ð\92еза до овог одељка",
+       "json-error-unsupported-type": "Дата је вредност типа која се не може енкодирати",
+       "headline-anchor-title": "Ð\9bинк до овог одељка",
        "special-characters-group-latin": "Латиница",
        "special-characters-group-latinextended": "Проширена латиница",
        "special-characters-group-ipa": "МФА",
        "log-action-filter-patrol": "Тип патролирања:",
        "log-action-filter-protect": "Тип заштите:",
        "log-action-filter-rights": "Тип промене корисничких права:",
-       "log-action-filter-suppress": "Ð\92Ñ\80Ñ\81Ñ\82а скривања:",
+       "log-action-filter-suppress": "Тип скривања:",
        "log-action-filter-upload": "Тип отпремања:",
        "log-action-filter-all": "Све",
        "log-action-filter-block-block": "блокирање",
        "log-action-filter-suppress-reblock": "Скривање корисника поновним блокирањем",
        "log-action-filter-upload-upload": "ново отпремање",
        "log-action-filter-upload-overwrite": "промена постојећег",
-       "authmanager-authn-not-in-progress": "Ð\90Ñ\83Ñ\82енÑ\82иÑ\84икаÑ\86иÑ\98а није у току или је дошло до губитка података о сесији. Почните испочетка.",
+       "authmanager-authn-not-in-progress": "Ð\9fоÑ\82вÑ\80да Ð¸Ð´ÐµÐ½Ñ\82иÑ\82еÑ\82а није у току или је дошло до губитка података о сесији. Почните испочетка.",
        "authmanager-authn-no-primary": "Не могу да проверим пружене акредитиве.",
        "authmanager-authn-no-local-user": "Пружени акредитиви нису повезани ни са једним корисником на овом викију.",
-       "authmanager-authn-no-local-user-link": "Ð\9fÑ\80Ñ\83жени Ñ\81Ñ\83 Ð²Ð°Ð¶ÐµÑ\9bи Ð°ÐºÑ\80едиÑ\82иви, Ð°Ð»Ð¸ Ð½Ð¸Ñ\81Ñ\83 Ð¿Ð¾Ð²ÐµÐ·Ð°Ð½Ð¸ Ð½Ð¸ Ñ\81 Ñ\98едним ÐºÐ¾Ñ\80иÑ\81ником Ð½Ð° Ð¾Ð²Ð¾Ð¼ Ð²Ð¸ÐºÐ¸Ñ\98Ñ\83. Ð\9fÑ\80иÑ\98авиÑ\82е Ñ\81е Ð½Ð° Ð½ÐµÐºÐ¸ Ð´Ñ\80Ñ\83ги Ð½Ð°Ñ\87ин Ð¸Ð»Ð¸ Ð½Ð°Ð¿Ñ\80авиÑ\82е Ð½Ð¾Ð²Ð¸ ÐºÐ¾Ñ\80иÑ\81ниÑ\87ки Ð½Ð°Ð»Ð¾Ð³, Ñ\88Ñ\82о Ñ\9bе Ð\92ам дати могућност да повежете претходне акредитиве на нови налог.",
+       "authmanager-authn-no-local-user-link": "Ð\9fÑ\80Ñ\83жени Ñ\81Ñ\83 Ð²Ð°Ð¶ÐµÑ\9bи Ð°ÐºÑ\80едиÑ\82иви, Ð°Ð»Ð¸ Ð½Ð¸Ñ\81Ñ\83 Ð¿Ð¾Ð²ÐµÐ·Ð°Ð½Ð¸ Ð½Ð¸ Ñ\81 Ñ\98едним ÐºÐ¾Ñ\80иÑ\81ником Ð½Ð° Ð¾Ð²Ð¾Ð¼ Ð²Ð¸ÐºÐ¸Ñ\98Ñ\83. Ð\9fÑ\80иÑ\98авиÑ\82е Ñ\81е Ð½Ð° Ð½ÐµÐºÐ¸ Ð´Ñ\80Ñ\83ги Ð½Ð°Ñ\87ин Ð¸Ð»Ð¸ Ð½Ð°Ð¿Ñ\80авиÑ\82е Ð½Ð¾Ð²Ð¸ ÐºÐ¾Ñ\80иÑ\81ниÑ\87ки Ð½Ð°Ð»Ð¾Ð³, Ñ\88Ñ\82о Ñ\9bе Ð²ам дати могућност да повежете претходне акредитиве на нови налог.",
        "authmanager-authn-autocreate-failed": "Не могу да аутоматски направим локални налог: $1",
        "authmanager-change-not-supported": "Не могу да променим пружене акредитиве јер их ништа не би користило.",
        "authmanager-create-disabled": "Онемогућено прављење налога.",
        "authmanager-link-no-primary": "Не могу да искористим пружене акредитиве за спајање налога.",
        "authmanager-link-not-in-progress": "Спајање налога није у току или је дошло до губитка података о сесији. Почните испочетка.",
        "authmanager-authplugin-setpass-failed-title": "Неуспешна промена лозинке",
-       "authmanager-authplugin-setpass-failed-message": "Ð\94одаÑ\82ак Ð·Ð° Ð°Ñ\83Ñ\82енÑ\82иÑ\84икаÑ\86иÑ\98Ñ\83 је одбио промену лозинке.",
-       "authmanager-authplugin-create-fail": "Ð\94одаÑ\82ак Ð·Ð° Ð°Ñ\83Ñ\82енÑ\82иÑ\84икаÑ\86иÑ\98Ñ\83 је одбио прављење налога.",
-       "authmanager-authplugin-setpass-denied": "Ð\94одаÑ\82ак Ð·Ð° Ð°Ñ\83Ñ\82енÑ\82иÑ\84икаÑ\86иÑ\98Ñ\83 не дозвољава мењање лозику.",
-       "authmanager-authplugin-setpass-bad-domain": "Ð\9dеиÑ\81пÑ\80аван домен.",
+       "authmanager-authplugin-setpass-failed-message": "Ð\94одаÑ\82ак Ð·Ð° Ð¿Ð¾Ñ\82вÑ\80дÑ\83 Ð¸Ð´ÐµÐ½Ñ\82иÑ\82еÑ\82а је одбио промену лозинке.",
+       "authmanager-authplugin-create-fail": "Ð\94одаÑ\82ак Ð·Ð° Ð¿Ð¾Ñ\82вÑ\80дÑ\83 Ð¸Ð´ÐµÐ½Ñ\82иÑ\82еÑ\82а је одбио прављење налога.",
+       "authmanager-authplugin-setpass-denied": "Ð\94одаÑ\82ак Ð·Ð° Ð¿Ð¾Ñ\82вÑ\80дÑ\83 Ð¸Ð´ÐµÐ½Ñ\82иÑ\82еÑ\82а не дозвољава мењање лозику.",
+       "authmanager-authplugin-setpass-bad-domain": "Ð\9dеважеÑ\9bи домен.",
        "authmanager-autocreate-noperm": "Аутоматско прављење налога није дозвољено.",
        "authmanager-userdoesnotexist": "Кориснички налог „$1“ није отворен.",
-       "authmanager-username-help": "Ð\9aоÑ\80иÑ\81ниÑ\87ко Ð¸Ð¼Ðµ Ð·Ð° Ð°Ñ\83Ñ\82енÑ\82иÑ\84икаÑ\86иÑ\98Ñ\83.",
-       "authmanager-password-help": "Ð\9bозинка Ð·Ð° Ð°Ñ\83Ñ\82енÑ\82иÑ\84икаÑ\86иÑ\98Ñ\83.",
-       "authmanager-domain-help": "Ð\94омен Ð·Ð° Ñ\81поÑ\99аÑ\88Ñ\9aÑ\83 Ð°Ñ\83Ñ\82енÑ\82иÑ\84икаÑ\86иÑ\98Ñ\83.",
+       "authmanager-username-help": "Ð\9aоÑ\80иÑ\81ниÑ\87ко Ð¸Ð¼Ðµ Ð·Ð° Ð¿Ð¾Ñ\82вÑ\80дÑ\83 Ð¸Ð´ÐµÐ½Ñ\82иÑ\82еÑ\82а.",
+       "authmanager-password-help": "Ð\9bозинка Ð·Ð° Ð¿Ð¾Ñ\82вÑ\80дÑ\83 Ð¸Ð´ÐµÐ½Ñ\82иÑ\82еÑ\82а.",
+       "authmanager-domain-help": "Ð\94омен Ð·Ð° Ñ\81поÑ\99аÑ\88Ñ\9aÑ\83 Ð¿Ð¾Ñ\82вÑ\80дÑ\83 Ð¸Ð´ÐµÐ½Ñ\82иÑ\82еÑ\82а.",
        "authmanager-retype-help": "Поновите лозинку да би сте потврдили.",
        "authmanager-email-label": "Имејл",
        "authmanager-email-help": "Имејл адреса",
        "authmanager-realname-label": "Право име",
        "authmanager-realname-help": "Право име корисника",
-       "authmanager-provider-password": "Ð\90Ñ\83Ñ\82енÑ\82иÑ\84икаÑ\86иÑ\98а лозинком",
-       "authmanager-provider-password-domain": "Ð\90Ñ\83Ñ\82енÑ\82иÑ\84икаÑ\86иÑ\98а лозинком и доменом",
+       "authmanager-provider-password": "Ð\9fоÑ\82вÑ\80да Ð¸Ð´ÐµÐ½Ñ\82иÑ\82еÑ\82а лозинком",
+       "authmanager-provider-password-domain": "Ð\9fоÑ\82вÑ\80да Ð¸Ð´ÐµÐ½Ñ\82иÑ\82еÑ\82а лозинком и доменом",
        "authmanager-provider-temporarypassword": "Привремена лозинка",
        "authprovider-confirmlink-option": "$1 ($2)",
        "authprovider-confirmlink-request-label": "Рачуни који се требају повезати",
        "authprovider-confirmlink-ok-help": "Наставите након приказивања порука за неуспело повезивање.",
        "authprovider-resetpass-skip-label": "Прескочи",
        "authprovider-resetpass-skip-help": "Прескочите ресетовање лозинке.",
-       "authform-nosession-login": "Ð\90Ñ\83Ñ\82енÑ\82иÑ\84икаÑ\86иÑ\98а Ñ\98е Ñ\83Ñ\81пела, Ð°Ð»Ð¸ Ð\92аш прегледач не може да „запамти” да сте пријављени.\n\n$1",
-       "authform-nosession-signup": "Ð\9dалог Ñ\98е Ð½Ð°Ð¿Ñ\80авÑ\99ен, Ð°Ð»Ð¸ Ð\92аш прегледач не може да „запамти” да сте пријављени.\n\n$1",
+       "authform-nosession-login": "Ð\9fоÑ\82вÑ\80да Ð¸Ð´ÐµÐ½Ñ\82иÑ\82еÑ\82а Ñ\98е Ñ\83Ñ\81пела, Ð°Ð»Ð¸ Ð²аш прегледач не може да „запамти” да сте пријављени.\n\n$1",
+       "authform-nosession-signup": "Ð\9dалог Ñ\98е Ð¾Ñ\82воÑ\80ен, Ð°Ð»Ð¸ Ð²аш прегледач не може да „запамти” да сте пријављени.\n\n$1",
        "authform-newtoken": "Недостаје токен. $1",
        "authform-notoken": "Недостаје токен",
        "authform-wrongtoken": "Погрешан токен",
        "specialpage-securitylevel-not-allowed-title": "Није дозвољено",
-       "specialpage-securitylevel-not-allowed": "Ð\96ао Ð½Ð°Ð¼ Ñ\98е, Ð½Ð¸Ñ\98е Ð\92ам Ð´Ð¾Ð·Ð²Ð¾Ñ\99ено Ð´Ð° ÐºÐ¾Ñ\80иÑ\81Ñ\82иÑ\82е Ð¾Ð²Ñ\83 Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83 Ñ\98еÑ\80 Ð½Ðµ Ð¼Ð¾Ð³Ñ\83 Ð´Ð° Ð¿Ð¾Ñ\82вÑ\80дим Ð\92аш идентитет.",
+       "specialpage-securitylevel-not-allowed": "Ð\96ао Ð½Ð°Ð¼ Ñ\98е, Ð½Ð¸Ñ\98е Ð²Ð°Ð¼ Ð´Ð¾Ð·Ð²Ð¾Ñ\99ено Ð´Ð° ÐºÐ¾Ñ\80иÑ\81Ñ\82иÑ\82е Ð¾Ð²Ñ\83 Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83 Ñ\98еÑ\80 Ð½Ðµ Ð¼Ð¾Ð³Ñ\83 Ð´Ð° Ð¿Ð¾Ñ\82вÑ\80дим Ð²аш идентитет.",
        "authpage-cannot-login": "Не могу започети пријаву.",
-       "authpage-cannot-login-continue": "Не могу да наставим пријављивање. Ваша сесија је највероватније истекла.",
+       "authpage-cannot-login-continue": "Не могу да наставим са пријавом. Ваша сесија је највероватније истекла.",
        "authpage-cannot-create": "Не могу започети стварање налога.",
        "authpage-cannot-link": "Не могу започети спајање налога.",
        "cannotauth-not-allowed-title": "Приступ је одбијен",
-       "cannotauth-not-allowed": "Ð\9dиÑ\98е Ð\92ам дозвољено да користите ову страницу",
+       "cannotauth-not-allowed": "Ð\9dиÑ\98е Ð²ам дозвољено да користите ову страницу",
        "changecredentials": "Промена акредитива",
        "changecredentials-submit": "Промени",
-       "changecredentials-invalidsubpage": "â\80\9e$1â\80\9c Ð½Ð¸Ñ\98е Ð²Ð°Ð»Ð¸Ð´Ð½Ð° Ð²Ñ\80Ñ\81Ñ\82а акредитива.",
+       "changecredentials-invalidsubpage": "â\80\9e$1â\80\9c Ð½Ð¸Ñ\98е Ð²Ð°Ð¶ÐµÑ\9bи Ñ\82ип акредитива.",
        "changecredentials-success": "Ваши акредитиви су промењени.",
        "removecredentials": "Уклањање акредитива",
        "removecredentials-submit": "Уклањање акредитива",
-       "removecredentials-invalidsubpage": "â\80\9e$1â\80\9c Ð½Ð¸Ñ\98е Ð²Ð°Ð»Ð¸Ð´Ð½Ð° Ð²Ñ\80Ñ\81Ñ\82а акредитива.",
+       "removecredentials-invalidsubpage": "â\80\9e$1â\80\9c Ð½Ð¸Ñ\98е Ð²Ð°Ð¶ÐµÑ\9bи Ñ\82ип акредитива.",
        "removecredentials-success": "Ваши акредитиви су уклоњени.",
        "credentialsform-provider": "Тип акредитива:",
        "credentialsform-account": "Назив налога:",
        "cannotlink-no-provider-title": "Нема налога за повезивање",
        "cannotlink-no-provider": "Нема налога за повезивање.",
-       "linkaccounts": "Ð\9fовежи Ð½Ð°Ð»Ð¾Ð³Ðµ",
+       "linkaccounts": "СпаÑ\98аÑ\9aе Ð½Ð°Ð»Ð¾Ð³Ð°",
        "linkaccounts-success-text": "Налог је повезан.",
        "linkaccounts-submit": "Повежи налоге",
-       "unlinkaccounts": "Ð\9eбÑ\98едини Ð½Ð°Ð»Ð¾Ð³Ðµ",
+       "unlinkaccounts": "РаздваÑ\98аÑ\9aе Ð½Ð°Ð»Ð¾Ð³Ð°",
        "unlinkaccounts-success": "Налог је обједињен.",
        "userjsispublic": "Напомена: JavaScript подстранице не би требале садржавати поверљиве информације будући да су видљиве другим корисницима.",
        "usercssispublic": "Напомена: CSS подстранице не би требале садржавати поверљиве информације будући да су видљиве другим корисницима.",
        "revid": "ревизија $1",
        "pageid": "ID странице: $1",
        "rawhtml-notallowed": "&lt;html&gt; тагови не могу да се користе ван нормалних страница.",
-       "gotointerwiki": "Напуштам пројекат {{SITENAME}}",
+       "gotointerwiki": "Напуштање пројекта {{SITENAME}}",
        "gotointerwiki-invalid": "Одабрани наслов је невалидан.",
        "gotointerwiki-external": "Управо ћете да напустите пројекат {{SITENAME}} да бисте на засебном веб-сајту посетили [[$2]].\n\n'''[$1 Продужи на $1]'''",
        "undelete-cantedit": "Не можете повратити ову страницу јер немате дозволу да је уређујете.",
index 8f4753c..c4b1e48 100644 (file)
        "cannotdelete-title": "Ne mogu da obrišem stranicu „$1“",
        "delete-hook-aborted": "Brisanje je prekinula kuka.\nNije dato nikakvo obrazloženje.",
        "no-null-revision": "Ne mogu da napravim novu praznu verziju za stranicu „$1“",
-       "badtitle": "Neispravan naslov",
+       "badtitle": "Loš naslov",
        "badtitletext": "Naslov stranice je neispravan, prazan ili je međujezički ili međuviki naslov pogrešno povezan.\nMožda sadrži znakove koji se ne mogu koristiti u naslovima.",
        "title-invalid-empty": "Traženo ime stranice je prazno ili sadrži samo naziv imenskog prostora.",
        "title-invalid-utf8": "Traženi naziv stranice sadrži nevažeći UTF-8 znak.",
        "notloggedin": "Niste prijavljeni",
        "userlogin-noaccount": "Nemate nalog?",
        "userlogin-joinproject": "Pridružite se projektu {{SITENAME}}",
-       "createaccount": "Otvori nalog",
+       "createaccount": "Otvaranje naloga",
        "userlogin-resetpassword-link": "Zaboravili ste lozinku?",
        "userlogin-helplink2": "Pomoć pri prijavljivanju",
        "userlogin-loggedin": "Već ste prijavljeni kao {{GENDER:$1|$1}}.\nKoristite donji obrazac da biste se prijavili kao drugi korisnik.",
        "php-mail-error-unknown": "Nepoznata greška u funkciji PHP mail().",
        "user-mail-no-addy": "Pokušali ste da pošaljete imejl bez imejl adrese.",
        "user-mail-no-body": "Pokušano slanje imejla s praznim ili nerazumno kratkim sadržajem.",
-       "changepassword": "Promeni lozinku",
+       "changepassword": "Promena lozinke",
        "resetpass_announce": "Da biste završili prijavu, podesite novu lozinku ovde.",
        "resetpass_text": "<!-- Ovde unesite tekst -->",
        "resetpass_header": "Promena lozinke naloga",
        "statistics-users": "Registrovani korisnici",
        "statistics-users-active": "Aktivni korisnici",
        "statistics-users-active-desc": "Korisnici koji su izvršili bar jednu radnju {{PLURAL:$1|1=prethodni dan|u poslednja $1 dana|u poslednjih $1 dana}}",
-       "pageswithprop": "Strane s osobinom strane",
+       "pageswithprop": "Stranice sa svojstvom stranice",
        "pageswithprop-legend": "Strane s osobinom strane",
        "pageswithprop-text": "Ova strana izlistava strane koje imaju određenu osobinu",
        "pageswithprop-prop": "Ime osobine:",
        "mostimages": "Datoteke s najviše veza",
        "mostinterwikis": "Stranice sa najviše međuvikija",
        "mostrevisions": "Stranice s najviše izmena",
-       "prefixindex": "Sve stranice s prefiksom",
+       "prefixindex": "Sve stranice sa prefiksom",
        "prefixindex-namespace": "Sve stranice s predmetkom (imenski prostor $1)",
        "prefixindex-submit": "Prikaži",
        "prefixindex-strip": "Sakrij prefiks u spisku",
        "shortpages": "Kratke stranice",
        "longpages": "Dugačke stranice",
-       "deadendpages": "Stranice bez unutrašnjih veza",
+       "deadendpages": "Ćorsokaci",
        "deadendpagestext": "Sledeće stranice nemaju veze do drugih stranica na ovom vikiju.",
        "protectedpages": "Zaštićene stranice",
        "protectedpages-filters": "Filteri:",
        "apisandbox-param-limit": "Unesite <kbd>max</kbd> da bi ste koristili najveće ograničenje.",
        "apisandbox-multivalue-all-namespaces": "$1 (svi imenski prostori)",
        "apisandbox-multivalue-all-values": "$1 (sve vrednosti)",
-       "booksources": "Štampani izvori",
+       "booksources": "Književni izvori",
        "booksources-search-legend": "Pretraži štampane izvore",
        "booksources-isbn": "ISBN:",
        "booksources-search": "Pretraži",
        "trackingcategories-disabled": "Kategorija je onemogućena",
        "mailnologin": "Nema adrese za slanje",
        "mailnologintext": "Morate biti [[Special:UserLogin|prijavljeni]] i imati ispravan imejl adresu u [[Special:Preferences|podešavanjima]] da biste slali imejlove drugim korisnicima.",
-       "emailuser": "Pošalji imejl",
+       "emailuser": "Pošalji imejl ovom korisniku/ci",
        "emailuser-title-target": "Slanje imejla {{GENDER:$1|korisniku|korisnici}}",
        "emailuser-title-notarget": "Slanje imejla korisniku",
        "emailpagetext": "Možete da koristite donji obrazac da pošaljete imejl {{GENDER:$1|ovom korisniku|ovoj korisnici}}.\nImejl koji ste uneli u vašim [[Special:Preferences|podešavanjima]] će se prikazati u polju „Od“, tako da će primalac moći da vam odgovori direktno.",
        "importlogpagetext": "Administrativni uvozi stranica s istorijama izmena s drugih vikija.",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|izmena uvezena|izmene uvezene|izmena uvezeno}}",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|izmena uvezena|izmene uvezene|izmena uvezeno}} iz $2",
-       "javascripttest": "Javaskript test",
+       "javascripttest": "Testiranje javaskripta",
        "javascripttest-pagetext-unknownaction": "Nepoznata radnja „$1“.",
        "javascripttest-qunit-intro": "Pogledajte [$1 dokumentaciju za testiranje] na mediawiki.org.",
        "tooltip-pt-userpage": "{{GENDER:|Vaša}} korisnička stranica",
        "redirect-file": "Naziv datoteke",
        "redirect-logid": "ID dnevnika",
        "redirect-not-exists": "Vrednost nije pronađena",
-       "fileduplicatesearch": "Pretraži duplikate",
+       "fileduplicatesearch": "Pretraga duplikata datoteka",
        "fileduplicatesearch-summary": "Pretraga dupliranih datoteka prema heš vrednosti.",
        "fileduplicatesearch-filename": "Naziv datoteke:",
        "fileduplicatesearch-submit": "Pretraži",
        "limitreport-unstrip-depth": "Unstrip dubina rekurzije",
        "limitreport-unstrip-size": "Unstrip veličina nakon proširenja",
        "limitreport-unstrip-size-value": "$1/$2 {{PLURAL:$2|bajt|bajta|bajtova}}",
-       "expandtemplates": "Zamena šablona",
+       "expandtemplates": "Proširavanje šablona",
        "expand_templates_intro": "Ova posebna stranica uzima vikitekst i menja sve šablone u njemu rekurzivno.\nTakođe menja funkcije parsera kao što je <code><nowiki>{{</nowiki>#language:…}}</code> i promenljive kao što je <code><nowiki>{{</nowiki>CURRENTDAY}}</code>. \nZapravo praktično sve što se nalazi između vitičastih zagrada.",
        "expand_templates_title": "Naziv konteksta; za {{STRANICA}} itd.:",
        "expand_templates_input": "Unos vikiteksta:",
        "expand_templates_generate_xml": "Prikaži XML stablo",
        "expand_templates_generate_rawhtml": "Prikaži sirov HTML",
        "expand_templates_preview": "Pretpregled",
-       "pagelanguage": "Promeni jezik stranice",
+       "pagelanguage": "Promena jezika stranice",
        "pagelang-name": "Stranica",
        "pagelang-language": "Jezik",
        "pagelang-use-default": "Koristi podrazumevani jezik",
        "log-description-pagelang": "Ovo je dnevnik izmena u jezicima stranica.",
        "logentry-pagelang-pagelang": "$1 je {{GENDER:$2|promenio|promenila}} jezik stranice $3 iz $4 u $5.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (omogućena)",
-       "mediastatistics": "Statistika datoteka",
+       "mediastatistics": "Statistika medija",
        "mediastatistics-summary": "Statistike o tipovima poslatih datoteka. Ovde su uračunate samo najnovije verzije datoteka. Stare ili obrisane verzije nisu uračunate.",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 bajt|$1 bajta|$1 bajtova}} ($2; $3%)",
        "mediastatistics-bytespertype": "Ukupna veličina datoteke ovog odeljka: {{PLURAL:$1|$1 bajt|$1 bajta|$1 bajtova}} ($2; $3%).",
        "revid": "izmena $1",
        "pageid": "ID stranice: $1",
        "rawhtml-notallowed": "&lt;html&gt; tagovi ne mogu da se koriste van normalnih stranica.",
-       "gotointerwiki": "Napuštam projekat {{SITENAME}}",
+       "gotointerwiki": "Napuštanje projekta {{SITENAME}}",
        "gotointerwiki-invalid": "Odabrani naslov je nevalidan.",
        "gotointerwiki-external": "Upravo ćete da napustite projekat {{SITENAME}} da biste na zasebnom veb-sajtu posetili [[$2]].\n\n'''[$1 Produži na $1]'''",
        "undelete-cantedit": "Ne možete povratiti ovu stranicu jer nemate dozvolu da je uređujete.",
index 85a67bf..445cfa9 100644 (file)
        "group-autoconfirmed-member": "{{GENDER:$1|bekräftad användare}}",
        "group-bot-member": "{{GENDER:$1|robot}}",
        "group-sysop-member": "{{GENDER:$1|administratör}}",
-       "group-interface-admin-member": "{{GENDER:$1|gränssnittsadministratörer}}",
+       "group-interface-admin-member": "{{GENDER:$1|gränssnittsadministratör}}",
        "group-bureaucrat-member": "{{GENDER:$1|byråkrat}}",
        "group-suppress-member": "{{GENDER:$1|censor}}",
        "grouppage-user": "{{ns:project}}:Användare",
index bcb7cea..c4590dc 100644 (file)
        "ns-specialprotected": "சிறப்புப் பக்கங்களைத் தொகுக்க முடியாது.",
        "titleprotected": "பயனர் [[User:$1|$1]] இத்தலைப்பு உருவாக்கப்படுவதை தவிர்க்கும் வகையில் தடுத்துள்ளார்.\nகொடுக்கப்பட்டக் காரணம் <em>$2</em>.",
        "filereadonlyerror": "\"$1\" கோப்பைத் திருத்த முடியவில்லை ஏனெனில் கோப்புப் பெட்டகம் \"$2\" படிக்க-மட்டும் வகையில் உள்ளது. அதனை பூட்டிய நிர்வாகி பின்வரும் விளக்கத்தை அளித்துள்ளார்: \"$3\"",
+       "invalidtitle": "செல்லத்தகாத தலைப்பு",
        "invalidtitle-knownnamespace": "பெயரிடைவெளி ' $2 '' மற்றும் உரை '' $3 '' கொன்ட தலைப்பு செல்லாது",
        "invalidtitle-unknownnamespace": "அறியப்படாத பெயரிடைவெளி $1 மற்றும் உரை $2 கொண்ட தலைப்பு செல்லாது",
        "exception-nologin": "புகுபதிகை செய்யப்படவில்லை.",
        "cannotloginnow-title": "இப்பொழுது விடுபதிகை செய்ய இயலாது.",
        "cannotloginnow-text": "$1-ஐ பயன்படுத்தும் பொழுது விடுபதிகை சாத்தியம் அல்ல.",
        "cannotcreateaccount-title": "கணக்கைத் தொடங்க முடியாது",
+       "cannotcreateaccount-text": "இவ்விக்கியில் நேரடி கணக்குத்தொடக்கம் இயக்கப்படவில்லை",
        "yourdomainname": "உங்கள் உரிமைப்பரப்பு:",
        "password-change-forbidden": "நீங்கள் விக்கிகளில் கடவுச் சொற்களை மாற்ற முடியாது",
        "externaldberror": "வெளி உறுதிப்படுத்தலில் ஏற்பட்ட தவறு காரணமாக உங்கள் வெளி கணக்கை இற்றைப்படுத்த முடியாது.",
        "userlogin-resetpassword-link": "உங்கள் கடவுச் சொல்லை மறந்து விட்டீர்களா?",
        "userlogin-helplink2": "உள்நுழைவதற்கு உதவி",
        "userlogin-loggedin": "நீங்கள் {{GENDER:$1|$1}} ஆக புகுபதியவில்லை.\nகீழ் உள்ள படிவத்தை பயன்படுத்தி இன்னொரு பயனராக புகுபதிவு செய்க.",
+       "userlogin-reauth": "{{GENDER:$1|$1}} என்பதை உறுதிசெய்ய நீங்கள் உள்புக வேண்டும்.",
        "userlogin-createanother": "மற்றொரு கணக்கு ஒன்றை உருவாக்கவும்",
        "createacct-emailrequired": "மின்னஞ்சல் முகவரி",
        "createacct-emailoptional": "மின்னஞ்சல் முகவரி (விருப்பத்தேர்வு)",
        "createacct-email-ph": "உங்கள் மின்னஞ்சல் முகவரியை உள்ளிடுக",
        "createacct-another-email-ph": "உங்கள் மின்னஞ்சல் முகவரியை உள்ளிடுக",
        "createaccountmail": "தற்காலிகமாக எழுந்தமான ஒரு கடவுச்சொல்லை பயன்படுத்துக, அதை குறித்துள்ள மின்னஞ்சலுக்கு அனுப்புக",
+       "createaccountmail-help": "மற்றவருக்காக கடவுச்சொல்லை அறிந்துக்கொள்ளாமல் கணக்கைத் தொடங்க முடியும்.",
        "createacct-realname": "உண்மைப் பெயர் (விருப்பத்தேர்வு)",
        "createacct-reason": "காரணம்",
        "createacct-reason-ph": "தாங்கள் ஏன் மற்றொரு கணக்கைத் துவங்குகிறீர்கள்?",
        "postedit-confirmation-created": "இந்தப் பக்கம் உருவாக்கபட்டுள்ளது",
        "postedit-confirmation-restored": "இந்தப் பக்கம் மீட்டமைக்கப்பட்டது.",
        "postedit-confirmation-saved": "உங்களது தொகுப்பு சேமிக்கப்பட்டது.",
+       "postedit-confirmation-published": "தங்கள் தொகுப்பு பதிப்பிக்கப்பட்டுவிட்டது.",
        "edit-already-exists": "புதிய பக்கமொன்றை உருவாக்க முடியாது.\nஇப்பக்கம் ஏற்கனவே உள்ளது.",
        "defaultmessagetext": "இயல்பிருப்பு தகவல் உரை",
        "content-failed-to-parse": "உள்ளடக்கம் $2 வகை $1 இற்காக பாகுபடுத்தல் தோல்வி: $3",
        "prefs-watchlist-edits": "விரிவாக்கப்பட்ட கவனிப்புப் பட்டியலில் காட்டவேண்டிய தொகுப்புகளின் எண்ணிக்கை:",
        "prefs-watchlist-edits-max": "(அதிக அளவான எண்: 1000)",
        "prefs-watchlist-token": "கவனிப்பு பட்டியலின் அடையாளம்:",
+       "prefs-watchlist-managetokens": "வில்லைகளை நிர்வகிக்க",
        "prefs-misc": "பலதரப்பட்டவை",
        "prefs-resetpass": "கடவுச்சொல்லை மாற்றுக",
        "prefs-changeemail": "மின்னஞ்சல் முகவரியை மாற்று / நீக்கு",
        "recentchanges-legend-heading": "<strong>குறியீட்டு விளக்கம்:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|புதிய பக்கங்கள் பட்டியலையும்]] காணவும்)",
        "recentchanges-submit": "காட்டு",
+       "rcfilters-activefilters-hide": "மறைக்க",
+       "rcfilters-activefilters-show": "காட்டு",
        "rcfilters-days-title": "அண்மைய தினங்கள்",
        "rcfilters-hours-title": "அண்மைய நேரங்கள்",
        "rcfilters-days-show-days": "$1 {{PLURAL:$1|நாள்|நாட்கள்}}",
        "rcfilters-savedqueries-apply-label": "வடிப்பானை உருவாக்குக",
        "rcfilters-savedqueries-apply-and-setdefault-label": "தன்னியல்பு வடிப்பானை உருவாக்குக",
        "rcfilters-savedqueries-cancel-label": "ரத்து செய்",
+       "rcfilters-invalid-filter": "செல்லத்தகாத வடிப்பான்",
        "rcfilters-filterlist-title": "வடிப்பான்கள்",
        "rcfilters-highlightmenu-title": "ஒரு நிறத்தை தேர்ந்தெடுக்கவும்",
        "rcfilters-filterlist-noresults": "எந்த வடிப்பானும் காணப்படவில்லை",
        "rcfilters-filter-editsbyself-description": "தங்களது தொகுப்புகள்.",
        "rcfilters-filter-editsbyother-label": "மற்றவர் தொகுப்புகள்",
        "rcfilters-filter-user-experience-level-registered-label": "பதிவுசெய்யப்பட்டது",
+       "rcfilters-filter-user-experience-level-registered-description": "உள்நுழைந்த தொகுப்பாளர்கள்.",
        "rcfilters-filter-user-experience-level-unregistered-label": "பதிவு நீக்கம் செய்யப்பட்டது",
+       "rcfilters-filter-user-experience-level-unregistered-description": "உள்புகாத தொகுப்பாளர்கள்",
        "rcfilters-filter-user-experience-level-newcomer-label": "புது வரவுகள்",
        "rcfilters-filter-user-experience-level-learner-label": "கற்போர்",
        "rcfilters-filter-user-experience-level-experienced-label": "அனுபவமுள்ள பயனர்கள்",
        "rcfilters-filter-bots-description": "தானியக்க கருவிகளால ஆன தொகுப்புகள்",
        "rcfilters-filter-humans-label": "மனிதன் (தானியங்கி அல்ல)",
        "rcfilters-filter-humans-description": "மனித தொகுப்பாளர்களால் ஆன தொகுப்பு",
+       "rcfilters-filter-reviewstatus-unpatrolled-label": "சுற்றித்திரியாதவை",
+       "rcfilters-filter-reviewstatus-auto-label": "தானியக்கமாக ரோந்திடப்பட்டது",
        "rcfilters-filtergroup-significance": "சிறப்பு",
        "rcfilters-filter-minor-label": "சிறு தொகுப்பு",
+       "rcfilters-filter-major-label": "சிறுமையில்லா தொகுப்புகள்",
+       "rcfilters-filtergroup-watchlist": "பார்க்கப்படும் பக்கங்கள்",
        "rcfilters-filtergroup-changetype": "மாற்ற வகை",
        "rcfilters-filter-pageedits-label": "பக்க தொகுப்புகள்",
        "rcfilters-filter-newpages-label": "பக்க உருவாக்கங்கள்",
+       "rcfilters-filtergroup-lastRevision": "அண்மைய திருத்தங்கள்",
        "rcfilters-filter-lastrevision-label": "அண்மைய திருத்தம்",
+       "rcfilters-filter-excluded": "தவிர்க்கப்பட்டது",
        "rcnotefrom": "கீழே காணப்படுவது <strong>$3, $4</strong> இலிருந்து செய்யப்பட்ட (<strong>$1</strong> வரைக் காட்டப்பட்டுள்ளது) {{PLURAL:$5|மாற்றமாகும்.|மாற்றங்களாகும்.}}",
        "rclistfrom": "$2, $3 முதல் இன்று வரை செய்யப்பட்ட புதிய மாற்றங்களைக் காட்டவும்",
        "rcshowhideminor": "சிறிய தொகுப்புகளை $1",
        "upload-copy-upload-invalid-domain": "இந்தக் களத்தில் இருந்து படியெடுத்துப் பதிவேற்றம் செய்யும் வசதி கிடையாது.",
        "upload-dialog-title": "கோப்பைப் பதிவேற்று",
        "upload-dialog-button-cancel": "ரத்து செய்",
+       "upload-dialog-button-back": "பின் செல்",
        "upload-dialog-button-done": "முடிந்தது",
        "upload-dialog-button-save": "சேமி",
        "upload-dialog-button-upload": "பதிவேற்று",
        "uploadstash-badtoken": "அந்த செயலுக்கான நடவடிக்கை தோல்வியடைந்தது, ஒருவேளை ஏனென்றால் உங்கள் திருத்த அறிமுகசான்றுகள் காலாவதியாகிவிட்டது. மீண்டும் முயற்சி செய்.",
        "uploadstash-errclear": "கோப்புகளை சரிசெய்தல் (Clearing) தோல்வியடைந்து விட்டது.",
        "uploadstash-refresh": "கோப்புகள் உள்ள பட்டியலை புதுப்பி",
+       "uploadstash-thumbnail": "நகப்படத்தை காட்டுக",
+       "uploadstash-bad-path": "வழி இடம்பெறவில்லை",
+       "uploadstash-bad-path-invalid": "வழி செல்லத்தாகது",
+       "uploadstash-file-not-found-no-thumb": "நகப்படத்தை பெறமுடியவில்லை",
+       "uploadstash-zero-length": "கோப்பின் நீளம் சுழியம்",
        "invalid-chunk-offset": "செல்லாத chunk offset",
        "img-auth-accessdenied": "அனுமதி மறுக்கப்பட்டது",
        "img-auth-nopathinfo": "PATH_INFO காணவில்லை.\nஉங்கள் வழங்கி இந்தத் தகவலை அனுப்ப அமைக்கப்படவில்லை\nஇது சிஜிஐ (CGI)- அடிப்படையிலானதாகவோ img_auth-ஐ ஆதரக்காததாகவோ இருக்கலாம் .\nபார்க்கவும் https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization.",
        "apisandbox-reset": "வெறுமையாக்கு",
        "apisandbox-retry": "மறு முயற்சி செய்",
        "apisandbox-examples": "உதாரணங்கள்",
+       "apisandbox-add-multi": "சேர்",
        "apisandbox-results": "முடிவுகள்",
        "apisandbox-sending-request": "API வேண்டுகோள் அனுப்பப்படுகிறது...",
        "apisandbox-loading-results": "API முடிவுகள் பெறப்படுகின்றன...",
        "listgrouprights-namespaceprotection-header": "பெயர்வெளி கட்டுப்பாடு",
        "listgrouprights-namespaceprotection-namespace": "பெயர்வெளி",
        "listgrouprights-namespaceprotection-restrictedto": "பயனரை திருத்த அனுமதிக்கும் உரிமை(கள்)",
+       "listgrants": "நல்கைகள்",
        "listgrants-grant": "நல்கை",
        "listgrants-rights": "அணுக்கங்கள்",
        "trackingcategories": "பகுப்புகளை தடமறி",
        "dellogpage": "நீக்கல் பதிவு",
        "dellogpagetext": "கீழே காணப்படுவது மிக அண்மைய நீக்கல்களின் அட்டவணையாகும்.",
        "deletionlog": "நீக்கல் பதிவு",
+       "log-name-create": "பக்க உருவாக்க குறிப்பு",
        "reverted": "முன் திருத்தத்துக்கு முன்நிலையாக்கப்பட்டது",
        "deletecomment": "காரணம்:",
        "deleteotherreason": "வேறு மேலதிக காரணம்:",
        "unblocked-id": "$1 தடை நீக்கப்பட்டது",
        "unblocked-ip": "[[Special:Contributions/$1|$1]] முடக்கப்பட்டார்.",
        "blocklist": "தடைசெய்யப்பட்ட பயனர்கள்",
+       "autoblocklist": "தன்னியக்கத் தடை",
+       "autoblocklist-submit": "தேடுக",
+       "autoblocklist-legend": "தானியக்க தடைகளை பட்டியலிடுக",
        "ipblocklist": "தடைசெய்யப்பட்ட பயனர்கள்",
        "ipblocklist-legend": "தடுக்கப்பட்ட பயனரொருவரைத் தேடு",
        "blocklist-userblocks": "கணக்கு தடுப்புகளை மறை",
index 23ad3fb..0824294 100644 (file)
        "filehist-filesize": "దస్త్రపు పరిమాణం",
        "filehist-comment": "వ్యాఖ్య",
        "imagelinks": "దస్త్రపు వాడుక",
-       "linkstoimage": "కింది {{PLURAL:$1|పేజీ|$1 పేజీల}} నుండి ఈ ఫైలుకి లింకులు ఉన్నాయి:",
-       "linkstoimage-more": "à°\88 à°«à±\88à°²à±\81à°\95à±\81 $1 à°\95à°\82à°\9fà±\87 à°\8eà°\95à±\8dà°\95à±\81à°µ {{PLURAL:$1|à°ªà±\87à°\9cà±\80 à°²à°¿à°\82à°\95à±\88 à°\89à°\82ది|à°ªà±\87à°\9cà±\80à°²à±\81 à°²à°¿à°\82à°\95à±\88 à°\89à°¨à±\8dనాయి}}.\nà°\88 à°«à±\88à°²à±\81à°\95à°¿ à°®à°¾à°¤à±\8dà°°à°®à±\87 à°²à°¿à°\82à°\95à±\88 à°\89à°¨à±\8dà°¨ {{PLURAL:$1|à°®à±\8aà°¦à°\9fà°¿ à°ªà±\87à°\9cà±\80ని|à°®à±\8aà°¦à°\9fà°¿ $1 à°ªà±\87à°\9cà±\80లనà±\81}} à°\88 à°\95à±\8dà°°à°¿à°\82ది à°\9cాబితా à°\9aà±\82పిసà±\8dà°¤à±\81à°\82ది.\n[[Special:WhatLinksHere/$2|à°ªà±\82à°°à±\8dతి à°\9cాబితా]] à°\95à±\82à°¡à°¾ ఉంది.",
-       "nolinkstoimage": "à°\88 à°«à±\88à°²à±\81à°\95à±\81 à°²à°¿à°\82à°\95ున్న పేజీలు లేవు.",
+       "linkstoimage": "కింది {{PLURAL:$1|పేజీ|$1 పేజీలు}} ఈ ఫైలును వాడుతున్నాయి:",
+       "linkstoimage-more": "à°\88 à°«à±\88à°²à±\81à°¨à±\81 $1 à°\95à°\82à°\9fà±\87 à°\8eà°\95à±\8dà°\95à±\81à°µ {{PLURAL:$1|à°ªà±\87à°\9cà±\80 à°µà°¾à°¡à±\81à°¤à±\8bà°\82ది|à°ªà±\87à°\9cà±\80à°²à±\81 à°µà°¾à°¡à±\81à°¤à±\81à°¨à±\8dనాయి}}.\nà°\88 à°«à±\88à°²à±\81à°¨à±\81 à°®à°¾à°¤à±\8dà°°à°®à±\87 à°µà°¾à°¡à±\81à°¤à±\81à°¨à±\8dà°¨ {{PLURAL:$1|à°®à±\8aà°¦à°\9fà°¿ à°ªà±\87à°\9cà±\80ని|à°®à±\8aà°¦à°\9fà°¿ $1 à°ªà±\87à°\9cà±\80లనà±\81}} à°\88 à°\95à±\8dà°°à°¿à°\82ది à°\9cాబితా à°\9aà±\82పిసà±\8dà°¤à±\81à°\82ది.\n[[Special:WhatLinksHere/$2|à°ªà±\82à°°à±\8dతి à°\9cాబితా]] ఉంది.",
+       "nolinkstoimage": "à°\88 à°«à±\88à°²à±\81à°¨à±\81 à°µà°¾à°¡à±\81à°¤ున్న పేజీలు లేవు.",
        "morelinkstoimage": "ఈ ఫైలుకు ఉన్న మరిన్ని [[Special:WhatLinksHere/$1| లింకులను]] చూపించు",
        "linkstoimage-redirect": "$1 (దస్త్రపు దారిమార్పు) $2",
        "duplicatesoffile": "క్రింద పేర్కొన్న {{PLURAL:$1|ఫైలు ఈ ఫైలుకి నకలు|$1 ఫైళ్ళు ఈ ఫైలుకి నకళ్ళు}} ([[Special:FileDuplicateSearch/$2|మరిన్ని వివరాలు]]):",
        "wantedpages-badtitle": "ఫలితాల సమితిలో తప్పుడు శీర్షిక: $1",
        "wantedfiles": "కావలసిన ఫైళ్ళు",
        "wantedfiletext-cat": "కింది ఫైళ్ళను వాడారు, కానీ అవి ఉనికిలో లేవు. బయటి రిపాజిటరీలలోని ఫైళ్ళను, అవి ఉనికిలో ఉన్నప్పటికీ, చూపవచ్చు. అటువంటి తప్పు పాజిటివులు <del>కొట్టివేయబడతాయి</del>. పైగా, ఉనికిలో లేని ఫైళ్ళను ఇమిడ్చే పేజీలు [[:$1]] లో చేర్చబడతాయి.",
+       "wantedfiletext-cat-noforeign": "కింది దస్త్రాలు ఉనికిలో లేవు. కానీ, అవి వాడుకలో ఉన్నాయి. అదనంగా, ఉనికిలోనే లేని దస్త్రాలను వాడే పేజీల జాబితా [[:$1]] లో ఉంది.",
        "wantedfiletext-nocat": "కింది ఫైళ్ళను వాడారు, కానీ అవి ఉనికిలో లేవు. బయటి రిపాజిటరీలలోని ఫైళ్ళను, అవి ఉనికిలో ఉన్నప్పటికీ, చూపవచ్చు. అటువంటి తప్పు పాజిటివులు <del>కొట్టివేయబడతాయి</del>.",
        "wantedfiletext-nocat-noforeign": "ఈ క్రింది దస్త్రాలను వాడారు కానీ అవి లేనే లేవు.",
        "wantedtemplates": "కావాల్సిన మూసలు",
        "nopagetext": "మీరు అడిగిన పేజీ లేదు",
        "pager-newer-n": "{{PLURAL:$1|1 కొత్తది|$1 కొత్తవి}}",
        "pager-older-n": "{{PLURAL:$1|1 పాతది|$1 పాతవి}}",
-       "suppress": " పూర్తి తొలగింపు",
+       "suppress": "పూర్తి తొలగింపు",
        "querypage-disabled": "పనితీరు కారణాల వలన, ఈ ప్రత్యేకపేజీని అశక్తం చేసాం.",
        "apihelp": "API సహాయం",
        "apihelp-no-such-module": "\"$1\" మాడ్యూలు కనబడలేదు.",
        "anonymous": "{{SITENAME}} యొక్క అజ్ఞాత {{PLURAL:$1|వాడుకరి|వాడుకరులు}}",
        "siteuser": "{{SITENAME}} వాడుకరి $1",
        "anonuser": "{{SITENAME}} అజ్ఞాత వాడుకరి $1",
-       "lastmodifiedatby": "à°\88 à°ªà±\87à°\9cà±\80à°\95à°¿ $3 $2, $1à°¨ à°\9aివరి à°®à°¾à°°à±\8dà°ªà±\81 à°\9aà±\87సారà±\81.",
+       "lastmodifiedatby": "à°\88 à°ªà±\87à°\9cà±\80à°²à±\8b à°\9aివరి à°®à°¾à°°à±\8dà°ªà±\81 $1à°¨ à°\9aà±\87సారà±\81. à°\9aà±\87సినది: $3 $2.",
        "othercontribs": "$1 యొక్క కృతిపై ఆధారితం.",
        "others": "ఇతరాలు",
        "siteusers": "{{SITENAME}} {{PLURAL:$2|{{GENDER:$1|వాడుకరి}}|వాడుకరులు}} $1",
        "pageinfo-watchers": "పేజీ గమనింపుదారుల సంఖ్య",
        "pageinfo-visiting-watchers": "ఈ పేజీలో ఇటీవల జరిగిన దిద్దుబాట్లను చూసిన వీక్షకుల సంఖ్య",
        "pageinfo-few-watchers": "$1 {{PLURAL:$1|వీక్షకుడి|వీక్షకుల}} కంటే తక్కువ",
+       "pageinfo-few-visiting-watchers": "ఇటీవలి మార్పులను గమనిస్తూ ఉన్న వాడుకరి ఉండి ఉండవచ్చు, ఉండకపోనూ వచ్చు.",
        "pageinfo-redirects-name": "ఈ పేజీకి ఉన్న దారిమార్పుల సంఖ్య",
        "pageinfo-subpages-name": "ఈ పేజీకి ఉన్న ఉపపేజీల సంఖ్య",
        "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|దారిమార్పు|దారిమార్పులు}}; $3 {{PLURAL:$3|దారిమార్పు కానిది|దారిమార్పు కానివి}})",
        "pageinfo-category-pages": "పేజీల సంఖ్య",
        "pageinfo-category-subcats": "ఉపవర్గాల సంఖ్య",
        "pageinfo-category-files": "దస్త్రాల సంఖ్య",
+       "pageinfo-user-id": "వాడుకరి ID",
+       "pageinfo-file-hash": "హ్యాష్ వ్యాల్యూ",
        "markaspatrolleddiff": "పరీక్షించినట్లుగా గుర్తు పెట్టు",
        "markaspatrolledtext": "ఈ వ్యాసాన్ని పరీక్షించినట్లుగా గుర్తు పెట్టు",
        "markedaspatrolled": "పరీక్షింపబడినట్లు గుర్తింపబడింది",
index 1621af6..f873f83 100644 (file)
        "category_header": "«$1» төркемендәге битләр",
        "subcategories": "Төркемчәләр",
        "category-media-header": "«$1» төркемендәге файллар",
-       "category-empty": "''Бу төркем әлегә буш.''",
+       "category-empty": "<em>Бу төркем әлегә буш.</em>",
        "hidden-categories": "{{PLURAL:$1|1=Яшерен төркем|Яшерен төркемнәр}}",
        "hidden-category-category": "Яшерен төркемнәр",
        "category-subcat-count": "{{PLURAL:$2|1=Әлеге төркем бары тик бу астөркемне генә үз өченә ала.|Әлеге төркемдә $2 астөркемдән бары тик $1 {{PLURAL:$1|астөркем}} генә күрсәтелгән.}}",
        "viewtalkpage": "Бәхәс битен карау",
        "otherlanguages": "Башка телләрдә",
        "redirectedfrom": "($1 битеннән юнәлтелде)",
-       "redirectpagesub": "Ð\91аÑ\88ка Ð±Ð¸Ñ\82кÓ\99 Ñ\8eнәлтү бите",
+       "redirectpagesub": "Юнәлтү бите",
        "redirectto": "Шунда юнәлтелә:",
        "lastmodifiedat": "Бу бит соңгы тапкыр $2 $1 үзгәртелә.",
        "viewcount": "Бу биткә $1 {{PLURAL:$1|бер тапкыр|$1 тапкыр}} мөрәҗәгать иттеләр.",
        "readonlywarning": "<strong>Кисәтү: мәгълүматлар базасында техник эшләр башкарыла, сезнең үзгәртүләр хәзер үк саклана алмый.</strong>\nБез сезгә әлеге текстны, югалмас өчен, берәр файлга сакларга тәкъдим итәбез.\n\nМәгълүматлар базасын япкан идарәче күрсәткән сәбәп: $1",
        "protectedpagewarning": "'''Кисәтү: сез бу битне үзгәртә алмыйсыз, бу хокукка идарәчеләр гына ия.'''\nТүбәндә көндәлекнең  соңгы язуы бирелгән:",
        "semiprotectedpagewarning": "<strong>Кисәтү:</strong> бу бит якланган. Аны авторасланган кулланучылар гына үзгәртә ала.\nАста бу битнең күзәтү көндәлегендә булган соңгы язмасы бирелгән:",
-       "cascadeprotectedwarning": "<strong>Кисәтү:</strong> Бу битне идарәчеләр гына үзгәртә ала., чөнки бит {{PLURAL:$1|каскадлы яклау исемлегенә кертелгән}}:",
+       "cascadeprotectedwarning": "<strong>Кисәтү:</strong> Бу бит якланган һәм аны бары [[Special:ListGroupRights|махсус вәкаләтләре]] булган кулланучылар гына үзгәртә ала, чөнки бит {{PLURAL:$1|каскадлы яклау исемлегенә кертелгән}}:",
        "titleprotectedwarning": "'''Кисәтү: Мондый исемле бит якланган, аны үзгәртү өчен [[Special:ListGroupRights|тиешле хокукка]] ия булу зарур.'''\nАста күзәтү көндәлегендәге соңгы язма бирелгән:",
        "templatesused": "Бу биттә кулланылган {{PLURAL:$1|1=калып|калыплар}} :",
        "templatesusedpreview": "Алдан карау мөмкинлегендә кулланылган {{PLURAL:$1|1=калып|калыплар}}:",
        "diff-multi-otherusers": "({{PLURAL:$2|Башка бер кулланучының|$2 кулланучының}} {{PLURAL:$1|бер арадаш юрамасы|$1 арадаш юрамасы}} күрсәтелмәгән)",
        "diff-multi-manyusers": "($2 күбрәк {{PLURAL:$2|кулланучының|кулланучының}} {{PLURAL:$1|Бер арадаш юрамасы|$1 арадаш юрамасы}} күрсәтелмәгән)",
        "searchresults": "Эзләү нәтиҗәләре",
+       "search-filter-title-prefix-reset": "Барлык битләрне эзләү",
        "searchresults-title": "«$1» өчен эзләү нәтиҗәләре",
        "titlematches": "Бит исемнәрендә тиңдәшлек",
        "textmatches": "Бит эчтәлегендә тиңдәшлек",
        "search-category": "($1 категориясе)",
        "search-file-match": "(файл эчтәлеге белән туры килә)",
        "search-suggest": "Бәлки, сез моны эзлисез: $1",
+       "search-rewritten": "$1 нәтижәсе күрсәтелгән. $2 урынына эзләргә.",
        "search-interwiki-caption": "Тугандаш проектлар нәтиҗәсе",
        "search-interwiki-default": "$1 нәтиҗә:",
        "search-interwiki-more": "(тагын)",
        "prefs-editwatchlist-clear": "Күзәтү исемлеген чистарту",
        "prefs-watchlist-days": "Күзәтү исемлегендә күрсәтелгән көннәр саны:",
        "prefs-watchlist-days-max": "Иң күбе $1 {{PLURAL:$1|1=көн|көн}}",
-       "prefs-watchlist-edits": "Киңәйтелгән күзәтү исемлегендә күрсәтелүче төзәтмәләрнең максималь саны:",
+       "prefs-watchlist-edits": "Күзәтү исемлегендә күрсәтелүче төзәтмәләрнең максималь саны:",
        "prefs-watchlist-edits-max": "Иң күбе: 1000",
        "prefs-watchlist-token": "Күзәтү исемлеге токены:",
        "prefs-watchlist-managetokens": "Токеннар беләр идарә итү",
        "stub-threshold-disabled": "Сүнгән",
        "recentchangesdays": "Соңгы үзгәртүләрне күрсәтүче көннәр саны:",
        "recentchangesdays-max": "(иң күбе $1 {{PLURAL:$1|көн}})",
-       "recentchangescount": "Төп буларак кулланучы үзгәртүләр саны:",
+       "recentchangescount": "Төп буларак кулланучы соңгы үзгәртүләр исемелегендә, тарихта һәм көндәлектә булган үзгәртүләр саны:",
        "prefs-help-recentchangescount": "Иң күбе: 1000",
        "prefs-help-watchlist-token2": "Бу сезнең кузәтү исемлеге өчен ясалган веб-агымының серле ачкычы.\nАны белгән һәркем сезнең күзәтү исемлегегезне карый ала, шуңа да башкаларга аны күрсәтмәгез. [[Special:ResetTokens|Ачкычны ташларга теләсәгез, әлеге юрамага басыгыз]].",
        "savedprefs": "Көйләнмәләрегез сакланды.",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (шулай ук [[Special:NewPages|яңа битләр исемлеген]] карагыз)",
        "recentchanges-submit": "Күрсәт",
        "rcfilters-legend-heading": "<strong>Кыскартулар тезмәсе:&nbsp;</strong>",
+       "rcfilters-group-results-by-page": "Нәтиҗәләрне биттә төркемләргә",
        "rcfilters-activefilters": "Актив фильтрлар",
        "rcfilters-activefilters-hide": "Яшер",
        "rcfilters-activefilters-show": "Күрсәт",
        "rcfilters-limit-title": "Күрсәтү өчен үзгәртүләр",
+       "rcfilters-limit-and-date-label": "$1 {{PLURAL:$1|үзгәртү}}, $2",
+       "rcfilters-date-popup-title": "Эзләү өчен вакыт аралыгы",
        "rcfilters-days-title": "Соңгы көннәр",
        "rcfilters-hours-title": "Соңгы сәгатьләр",
        "rcfilters-days-show-days": "$1 {{PLURAL:$1|көн}}",
        "rcfilters-filter-user-experience-level-unregistered-label": "Теркәлмәгәннәр",
        "rcfilters-filter-user-experience-level-unregistered-description": "Системага кермәгән мөхәррирләр.",
        "rcfilters-filter-user-experience-level-newcomer-label": "Яңа кулланучылар",
+       "rcfilters-filter-user-experience-level-learner-label": "Укучылар",
        "rcfilters-filter-user-experience-level-experienced-label": "Тәҗрибәле кулланучылар",
        "rcfilters-filter-user-experience-level-experienced-description": "Төзәтүләре 500 дән күбрәк һәм актив эш көннәре 30 дан артык теркәлгән мөхәррирләр",
        "rcfilters-filtergroup-automated": "Автоматлаштырылган кертем",
        "rcshowhidecategorization": "битләрне төркемләүне $1",
        "rcshowhidecategorization-show": "Күрсәт",
        "rcshowhidecategorization-hide": "Яшер",
-       "rclinks": "Соңгы $2 көн эчендә ясалган $1 үзгәртүне күрсәт",
+       "rclinks": "Соңгы $2 көндә ясалган $1 үзгәртүне күрсәтергә",
        "diff": "аерма",
        "hist": "тарих",
        "hide": "Яшер",
        "listfiles-summary": "Әлеге махсус бит Сез йөкләгән бөтен файлларны күрсәтә.",
        "listfiles_search_for": "Файл исеме буенча эзләү:",
        "imgfile": "файл",
-       "listfiles": "СүÑ\80Ó\99Ñ\82лÓ\99р исемлеге",
+       "listfiles": "Файллар исемлеге",
        "listfiles_thumb": "Миниатюра",
        "listfiles_date": "Вакыт",
        "listfiles_name": "Файл исеме",
        "filehist-filesize": "Файлның зурлыгы",
        "filehist-comment": "Искәрмә",
        "imagelinks": "Файлны куллану",
-       "linkstoimage": "{{PLURAL:$1|Киләсе $1 бит|Киләсе $1 битләр|}} әлеге файлга сылтама ясый:",
-       "linkstoimage-more": "Ð\91Ñ\83 Ñ\84айлга ÐºÐ¸Ð¼ÐµÐ½Ð´Ó\99 $1 {{PLURAL:$1|биÑ\82}} Ñ\81Ñ\8bлÑ\82ама Ñ\8fÑ\81Ñ\8bй.\nÓ\98леге Ð¸Ñ\81емлекÑ\82Ó\99 Ð±Ñ\83 Ñ\84айлга {{PLURAL:$1| $1 Ñ\81Ñ\8bлÑ\82ама}} ÐºÐ¸Ñ\82еÑ\80елгән.\nШулай ук [[Special:WhatLinksHere/$2|тулы исемлекне]] дә карарга мөмкин.",
-       "nolinkstoimage": "Ð\91Ñ\83 Ñ\84айлга Ñ\81Ñ\8bлÑ\82аган битләр юк.",
+       "linkstoimage": "{{PLURAL:$1|Киләсе бит|Киләсе $1 бит}} әлеге файлны куллана:",
+       "linkstoimage-more": "Ð\91Ñ\83 Ñ\84айлнÑ\8b ÐºÐ¸Ð¼ÐµÐ½Ð´Ó\99 $1 {{PLURAL:$1|биÑ\82}} ÐºÑ\83ллана.\nÓ\98леге Ð¸Ñ\81емлекÑ\82Ó\99 Ð±Ñ\83 Ñ\84айлнÑ\8b ÐºÑ\83лланган {{PLURAL:$1| $1 Ð±Ð¸Ñ\82}} ÐºÒ¯Ñ\80Ñ\81Ó\99Ñ\82елгән.\nШулай ук [[Special:WhatLinksHere/$2|тулы исемлекне]] дә карарга мөмкин.",
+       "nolinkstoimage": "Ð\91Ñ\83 Ñ\84айлнÑ\8b ÐºÑ\83лланган битләр юк.",
        "linkstoimage-redirect": "$1 (файл юнәлтүе) $2",
        "duplicatesoffile": "{{PLURAL:$1|Әлеге $1 файл }} астагы файлның күчерелмәсе булып тора ([[Special:FileDuplicateSearch/$2|тулырак]]):",
        "sharedupload": "Бу файл $1 проектыннан һәм башка проектларда кулланырга мөмкин",
        "trackingcategories": "Күзәтелүче төркемнәр",
        "trackingcategories-msg": "Күзәтүче төркем",
        "trackingcategories-name": "Хат исеме",
-       "emailuser": "Ð\91Ñ\83 Ðºулланучыга хат",
+       "emailuser": "Ð\9aулланучыга хат",
        "emailuser-title-target": "{{GENDER:$1|Кулланучыга}} электрон хат язу",
        "emailuser-title-notarget": "Кулланучыга хат җибәрү",
        "emailpagetext": "Әлеге форма ярдәмендә {{GENDER:$1|кулланучының}} электрон почта адресына хат җибәрергә мөмкин. Җибәрелгән адрес исемендә Сезнең [[Special:Preferences|көйләнмәләрдә]] күрсәтелгән адресыгыз күрсәтеләчәк, шуның ярдәмендә Сез ул кулланучы белән турыдан-туры сөйләшә аласыз.",
        "pipe-separator": "&#32;|&#32;",
        "quotation-marks": "«$1»",
        "imgmultipageprev": "← алдагы бит",
-       "imgmultipagenext": "алдагÑ\8b бит →",
+       "imgmultipagenext": "килÓ\99Ñ\81е бит →",
        "imgmultigo": "Күчү!",
        "imgmultigoto": "$1 битенә күчү",
        "img-lang-go": "Башкару",
index 35e7097..7c64fcf 100644 (file)
        "filehist-dimensions": "ⵉⵎⵏⴰⴷⵏ",
        "filehist-comment": "ⴰⵖⴼⴰⵡⴰⵍ",
        "imagelinks": "ⴰⵙⵎⵔⵙ ⵏ ⵓⴼⴰⵢⵍⵓ",
-       "linkstoimage": "{{PLURAL:$1|âµ\89ⵣⴷⴰⵢâµ\8f âµ\8f âµ\9câµ\99âµ\8fâ´°|$1 â´°âµ£â´·â´°âµ¢ âµ\8f âµ\9câµ\99âµ\8fâ´°}} âµ\96âµ\94 âµ\93ⴼⴰⵢⵍⵓ ⴰⴷ:",
-       "linkstoimage-more": "ⵓⴳⴳⴰⵔ ⵏ {{PLURAL:$1|ⵢⴰⵜ ⵜⴰⵙⵏⴰ ⴰⵢⴷ ⵉⵙⵙⵎⵔⴰⵙⵏ| $1 ⵏ ⵜⴰⵙⵏⵉⵡⵉⵏ ⴰⵢⴷ ⵉⵙⵙⵎⵔⴰⵙⵏ}} ⴰⴼⴰⵢⵍⵓ ⴰⴷ.\nⵜⵙⴽⴰⵏ ⵜⵍⴳⴰⵎⵜ ⴰⴷ ⵖⴰⵙ {{PLURAL:$1|ⵜⴰⵙⵏⴰ ⵜⴰⵎⵣⵡⴰⵔⵓⵜ  ⵉⵙⵙⵎⵔⴰⵙⵏ $1 ⵜⴰⵙⵏⵉⵡⵉⵏ ⵜⵉⵎⵣⵡⴰⵔⴰ ⵉⵙⵙⵎⵔⴰⵙⵏ}} ⴰⴼⴰⵢⵍⵓ ⴰⴷ.\nⵜⵍⵍⴰ ⵢⴰⵜ [[Special:WhatLinksHere/$2|ⵜⴰⵍⴳⴰⵎⵜ ⵉⵎⴷⵏ]].",
-       "nolinkstoimage": "âµ\93âµ\94 âµ\8dâµ\8dâµ\89âµ\8fâµ\9c âµ\9câ´°âµ\99âµ\8fâµ\89ⵡâµ\89âµ\8f âµ\8fâµ\8fâ´° âµ\89âµ\87âµ\87âµ\8fâ´»âµ\8f âµ\96âµ\94 âµ\93ⴼⴰⵢⵍⵓ ⴰ.",
+       "linkstoimage": "{{PLURAL:$1|âµ\9câ´°âµ\99âµ\8fâ´° â´°â´· âµ\9câµ\99âµ\8eâµ\94âµ\99|$1 âµ\9câ´°âµ\99âµ\8fâµ\89ⵡâµ\89âµ\8f â´°â´· âµ\99âµ\8eâµ\94âµ\99âµ\8fâµ\9c}} â´°ⴼⴰⵢⵍⵓ ⴰⴷ:",
+       "linkstoimage-more": "ⵓⴳⴳⴰⵔ ⵏ {{PLURAL:$1|ⵢⴰⵜ ⵜⴰⵙⵏⴰ ⴰⵢⴷ ⵉⵙⵙⵎⵔⴰⵙⵏ| $1 ⵏ ⵜⴰⵙⵏⵉⵡⵉⵏ ⴰⵢⴷ ⵉⵙⵙⵎⵔⴰⵙⵏ}} ⴰⴼⴰⵢⵍⵓ ⴰⴷ.\nⵜⵙⴽⴰⵏ ⵜⵍⴳⴰⵎⵜ ⴰⴷ ⵖⴰⵙ {{PLURAL:$1|ⵜⴰⵙⵏⴰ ⵜⴰⵎⵣⵡⴰⵔⵓⵜ  ⵉⵙⵙⵎⵔⴰⵙⵏ| $1 ⵏ ⵜⴰⵙⵏⵉⵡⵉⵏ ⵜⵉⵎⵣⵡⴰⵔⴰ ⵉⵙⵙⵎⵔⴰⵙⵏ}} ⴰⴼⴰⵢⵍⵓ ⴰⴷ.\nⵜⵍⵍⴰ ⵢⴰⵜ [[Special:WhatLinksHere/$2|ⵜⴰⵍⴳⴰⵎⵜ ⵉⵎⴷⵏ]].",
+       "nolinkstoimage": "âµ\93âµ\94 âµ\8dâµ\8dâµ\89âµ\8fâµ\9c âµ\9câ´°âµ\99âµ\8fâµ\89ⵡâµ\89âµ\8f âµ\8fâµ\8fâ´° âµ\89âµ\99âµ\8eâµ\94âµ\99âµ\8f â´°ⴼⴰⵢⵍⵓ ⴰ.",
        "linkstoimage-redirect": "$1 (ⴰⵙⵡⴰⵍⴰ ⵏ ⵓⴼⴰⵢⵍⵓ) $2",
        "sharedupload-desc-here": "ⴰⵙⴷⴰⵡ ⴰⴷ ⵙⴳ $1 ⵉⵥⴹⴰⵔ ⴰ ⵉⵜⵜⵡⴰⵙⵎⵔⵙ ⴳ ⵉⵙⵏⵜⴰⵢⵏ ⵢⴰⴹⵏ.\nⴰⵙⵏⵓⵎⵎⵍ ⵏⵙ ⴳ [$2 ⵜⴰⵙⵏⴰ ⵏⵙ ⵏ ⵓⵙⵏⵓⵎⵎⵍ] ⵜⵡⴰⵙⵎⴰⵍ ⵙⴰⴷⵓ.",
        "filepage-nofile": "ⵓⵔ ⵓⴼⴰⵢⵍⵓ ⵙ ⵢⵉⵙⵎ ⴰ.",
index c7fce79..a55372c 100644 (file)
        "pool-errorunknown": "不明錯誤",
        "pool-servererror": "無法使用程序計數服務 ($1)。",
        "poolcounter-usage-error": "用法錯誤:$1",
-       "aboutsite": "關於 {{SITENAME}}",
+       "aboutsite": "關於{{SITENAME}}",
        "aboutpage": "Project:關於",
        "copyright": "除非另有註明,否則所有內容皆以 $1 條款授權。",
        "copyrightpage": "{{ns:project}}:版權",
        "magiclink-tracking-isbn": "使用 ISBN 魔法連結的頁面",
        "magiclink-tracking-isbn-desc": "此頁面使用 ISBN 魔法連結的頁面,請參考 [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org] 的如何遷移。",
        "specialloguserlabel": "執行者:",
-       "speciallogtitlelabel": "目標 (標題或以 {{ns:user}}:使用者 表示使用者):",
+       "speciallogtitlelabel": "目標(標題或以 {{ns:user}}:使用者名稱 表示使用者):",
        "log": "日誌",
        "logeventslist-submit": "顯示",
        "logeventslist-more-filters": "顯示額外日誌:",
index 4b15837..0331aef 100644 (file)
@@ -16,7 +16,8 @@
                        "Liuxinyu970226",
                        "Quest for Truth",
                        "Wxyveronica",
-                       "和平至上"
+                       "和平至上",
+                       "A2093064"
                ]
        },
        "tog-watchlisthidebots": "隱藏監視清單中機械人的編輯",
@@ -67,7 +68,7 @@
        "jumpto": "跳到:",
        "jumptonavigation": "導覽",
        "jumptosearch": "搜尋",
-       "aboutsite": "關於 {{SITENAME}}",
+       "aboutsite": "關於{{SITENAME}}",
        "aboutpage": "Project:關於我們",
        "disclaimers": "免責聲明",
        "disclaimerpage": "本專案:一般免責聲明",
diff --git a/maintenance/archives/patch-recentchanges-rc_this_oldid-index.sql b/maintenance/archives/patch-recentchanges-rc_this_oldid-index.sql
new file mode 100644 (file)
index 0000000..364256b
--- /dev/null
@@ -0,0 +1,6 @@
+-- Add an index to recentchanges on rc_this_oldid
+--
+-- T139012
+--
+
+CREATE INDEX /*i*/rc_this_oldid ON /*_*/recentchanges(rc_this_oldid);
\ No newline at end of file
index 04aee80..9bfebce 100644 (file)
@@ -53,6 +53,9 @@ abstract class Benchmarker extends Maintenance {
                $this->startBench();
                $count = $this->getOption( 'count', $this->defaultCount );
                $verbose = $this->hasOption( 'verbose' );
+
+               // Normalise
+               $normBenchs = [];
                foreach ( $benchs as $key => $bench ) {
                        // Shortcut for simple functions
                        if ( is_callable( $bench ) ) {
@@ -64,6 +67,25 @@ abstract class Benchmarker extends Maintenance {
                                $bench['args'] = [];
                        }
 
+                       // Name defaults to name of called function
+                       if ( is_string( $key ) ) {
+                               $name = $key;
+                       } else {
+                               if ( is_array( $bench['function'] ) ) {
+                                       $name = get_class( $bench['function'][0] ) . '::' . $bench['function'][1];
+                               } else {
+                                       $name = strval( $bench['function'] );
+                               }
+                               $name = sprintf( "%s(%s)",
+                                       $name,
+                                       implode( ', ', $bench['args'] )
+                               );
+                       }
+
+                       $normBenchs[$name] = $bench;
+               }
+
+               foreach ( $normBenchs as $name => $bench ) {
                        // Optional setup called outside time measure
                        if ( isset( $bench['setup'] ) ) {
                                call_user_func( $bench['setup'] );
@@ -81,21 +103,6 @@ abstract class Benchmarker extends Maintenance {
                                $stat->addObservation( $t );
                        }
 
-                       // Name defaults to name of called function
-                       if ( is_string( $key ) ) {
-                               $name = $key;
-                       } else {
-                               if ( is_array( $bench['function'] ) ) {
-                                       $name = get_class( $bench['function'][0] ) . '::' . $bench['function'][1];
-                               } else {
-                                       $name = strval( $bench['function'] );
-                               }
-                               $name = sprintf( "%s(%s)",
-                                       $name,
-                                       implode( ', ', $bench['args'] )
-                               );
-                       }
-
                        $this->addResult( [
                                'name' => $name,
                                'count' => $stat->getCount(),
index d613352..564f7ce 100644 (file)
@@ -157,8 +157,12 @@ SPARQLDI;
                $this->handleMoves( $dbr, $output );
                // We need to handle restores too since delete may have happened in previous update.
                $this->handleRestores( $dbr, $output );
+               // Process newly added pages
                $this->handleAdds( $dbr, $output );
-               $this->handleChanges( $dbr, $output );
+               // Process page edits
+               $this->handleEdits( $dbr, $output );
+               // Process categorization changes
+               $this->handleCategorization( $dbr, $output );
 
                // Update timestamp
                fwrite( $output, $this->updateTS( $this->endTS ) );
@@ -198,9 +202,10 @@ SPARQLDI;
        }
 
        /**
-        * Write data for a set of categories
+        * Write parent data for a set of categories.
+        * The list has the child categories.
         * @param IDatabase $dbr
-        * @param string[] $pages List of categories: id => title
+        * @param string[] $pages List of child categories: id => title
         */
        private function writeParentCategories( IDatabase $dbr, $pages ) {
                foreach ( $this->getCategoryLinksIterator( $dbr, array_keys( $pages ) ) as $row ) {
@@ -356,16 +361,17 @@ SPARQL;
        }
 
        /**
-        * Fetch categorization changes
+        * Fetch categorization changes or edits
         * @param IDatabase $dbr
         * @return BatchRowIterator
         */
-       protected function getChangedCatsIterator( IDatabase $dbr ) {
-               $it = $this->setupChangesIterator( $dbr );
+       protected function getChangedCatsIterator( IDatabase $dbr, $type ) {
+               $it =
+                       $this->setupChangesIterator( $dbr );
                $it->addConditions( [
                        'rc_namespace' => NS_CATEGORY,
                        'rc_new' => 0,
-                       'rc_type' => [ RC_EDIT, RC_CATEGORIZE ],
+                       'rc_type' => $type,
                ] );
                $this->addIndex( $it );
                return $it;
@@ -540,14 +546,21 @@ SPARQL;
        }
 
        /**
+        * Handle edits for category texts
         * @param IDatabase $dbr
         * @param resource $output
         */
-       public function handleChanges( IDatabase $dbr, $output ) {
-               foreach ( $this->getChangedCatsIterator( $dbr ) as $batch ) {
+       public function handleEdits( IDatabase $dbr, $output ) {
+               // Editing category can change hidden flag and add new parents.
+               // TODO: it's pretty expensive to update all edited categories, and most edits
+               // aren't actually interesting for us. Some way to know which are interesting?
+               // We can capture recategorization on the next step, but not change in hidden status.
+               foreach ( $this->getChangedCatsIterator( $dbr, RC_EDIT ) as $batch ) {
                        $pages = [];
                        $deleteUrls = [];
                        foreach ( $batch as $row ) {
+                               // Note that on categorization event, cur_id points to
+                               // the child page, not the parent category!
                                if ( isset( $this->processed[$row->rc_cur_id] ) ) {
                                        // We already captured this one before
                                        continue;
@@ -558,6 +571,121 @@ SPARQL;
                                $deleteUrls[] = '<' . $this->categoriesRdf->labelToUrl( $row->rc_title ) . '>';
                        }
 
+                       fwrite( $output, $this->getCategoriesUpdate( $dbr, $deleteUrls, $pages, "Edits" ) );
+               }
+       }
+
+       /**
+        * Handles categorization changes
+        * @param IDatabase $dbr
+        * @param resource $output
+        */
+       public function handleCategorization( IDatabase $dbr, $output ) {
+               $processedTitle = [];
+               // Categorization change can add new parents and change counts
+               // for the parent category.
+               foreach ( $this->getChangedCatsIterator( $dbr, RC_CATEGORIZE ) as $batch ) {
+                       /*
+                        * Note that on categorization event, cur_id points to
+                        * the child page, not the parent category!
+                        * So we need to have a two-stage process, since we have ID from one
+                        * category and title from another, and we need both for proper updates.
+                        * TODO: For now, we do full update even though some data hasn't changed,
+                        * e.g. parents for parent cat and counts for child cat.
+                        */
+                       foreach ( $batch as $row ) {
+                               $childPages[$row->rc_cur_id] = true;
+                               $parentCats[$row->rc_title] = true;
+                       }
+
+                       $joinConditions = [
+                               'page_props' => [
+                                       'LEFT JOIN',
+                                       [ 'pp_propname' => 'hiddencat', 'pp_page = page_id' ],
+                               ],
+                               'category' => [
+                                       'LEFT JOIN',
+                                       [ 'cat_title = page_title' ],
+                               ],
+                       ];
+
+                       $pages = [];
+                       $deleteUrls = [];
+
+                       if ( !empty( $childPages ) ) {
+                               // Load child rows by ID
+                               $childRows = $dbr->select(
+                                       [ 'page', 'page_props', 'category' ],
+                                       [
+                                               'page_id',
+                                               'rc_title' => 'page_title',
+                                               'pp_propname',
+                                               'cat_pages',
+                                               'cat_subcats',
+                                               'cat_files',
+                                       ],
+                                       [ 'page_namespace' => NS_CATEGORY, 'page_id' => array_keys( $childPages ) ],
+                                       __METHOD__,
+                                       [],
+                                       $joinConditions
+                               );
+                               foreach ( $childRows as $row ) {
+                                       if ( isset( $this->processed[$row->page_id] ) ) {
+                                               // We already captured this one before
+                                               continue;
+                                       }
+                                       $this->writeCategoryData( $row );
+                                       $deleteUrls[] = '<' . $this->categoriesRdf->labelToUrl( $row->rc_title ) . '>';
+                                       $this->processed[$row->page_id] = true;
+                               }
+                       }
+
+                       if ( !empty( $parentCats ) ) {
+                               // Load parent rows by title
+                               $joinConditions = [
+                                       'page' => [
+                                               'LEFT JOIN',
+                                               [ 'page_title = cat_title', 'page_namespace' => NS_CATEGORY ],
+                                       ],
+                                       'page_props' => [
+                                               'LEFT JOIN',
+                                               [ 'pp_propname' => 'hiddencat', 'pp_page = page_id' ],
+                                       ],
+                               ];
+
+                               $parentRows = $dbr->select(
+                                       [ 'category', 'page', 'page_props' ],
+                                       [
+                                               'page_id',
+                                               'rc_title' => 'cat_title',
+                                               'pp_propname',
+                                               'cat_pages',
+                                               'cat_subcats',
+                                               'cat_files',
+                                       ],
+                                       [ 'cat_title' => array_keys( $parentCats ) ],
+                                       __METHOD__,
+                                       [],
+                                       $joinConditions
+                               );
+                               foreach ( $parentRows as $row ) {
+                                       if ( $row->page_id && isset( $this->processed[$row->page_id] ) ) {
+                                               // We already captured this one before
+                                               continue;
+                                       }
+                                       if ( isset( $processedTitle[$row->rc_title] ) ) {
+                                               // We already captured this one before
+                                               continue;
+                                       }
+                                       $this->writeCategoryData( $row );
+                                       $deleteUrls[] = '<' . $this->categoriesRdf->labelToUrl( $row->rc_title ) . '>';
+                                       if ( $row->page_id ) {
+                                               $this->processed[$row->page_id] = true;
+                                       }
+                                       $processedTitle[$row->rc_title] = true;
+                               }
+                       }
+
                        fwrite( $output, $this->getCategoriesUpdate( $dbr, $deleteUrls, $pages, "Changes" ) );
                }
        }
index 32adafd..97b46f7 100644 (file)
@@ -321,9 +321,10 @@ class GenerateCollationData extends Maintenance {
                print "Out of order: $numOutOfOrder / " . count( $headerChars ) . "\n";
 
                global $IP;
+               $writer = new StaticArrayWriter();
                file_put_contents(
                        "$IP/includes/collation/data/first-letters-root.php",
-                       wfMakeStaticArrayFile( $headerChars, 'File created by generateCollationData.php' )
+                       $writer->create( $headerChars, 'File created by generateCollationData.php' )
                );
                echo "first-letters-root: file written.\n";
        }
index fad35cb..d3e0655 100644 (file)
@@ -127,7 +127,8 @@ class GenerateNormalizerDataAr extends Maintenance {
                }
 
                global $IP;
-               file_put_contents( "$IP/languages/data/normalize-ar.php", wfMakeStaticArrayFile(
+               $writer = new StaticArrayWriter();
+               file_put_contents( "$IP/languages/data/normalize-ar.php", $writer->create(
                        $pairs,
                        'File created by generateNormalizerDataAr.php'
                ) );
index 5b75d8b..1b8ea09 100644 (file)
@@ -61,7 +61,8 @@ class GenerateNormalizerDataMl extends Maintenance {
                }
 
                global $IP;
-               file_put_contents( "$IP/languages/data/normalize-ml.php", wfMakeStaticArrayFile(
+               $writer = new StaticArrayWriter();
+               file_put_contents( "$IP/languages/data/normalize-ml.php", $writer->create(
                        $pairs,
                        'File created by generateNormalizerDataMl.php'
                ) );
index f040c15..ebbd6e3 100644 (file)
@@ -1052,6 +1052,7 @@ CREATE INDEX /*i*/rc_user_text ON /*_*/recentchanges (rc_user_text, rc_timestamp
 CREATE INDEX /*i*/rc_ns_actor ON /*_*/recentchanges (rc_namespace, rc_actor);
 CREATE INDEX /*i*/rc_actor ON /*_*/recentchanges (rc_actor, rc_timestamp);
 CREATE INDEX /*i*/rc_name_type_patrolled_timestamp ON /*_*/recentchanges (rc_namespace, rc_type, rc_patrolled, rc_timestamp);
+CREATE INDEX /*i*/rc_this_oldid ON /*_*/recentchanges (rc_this_oldid);
 
 
 CREATE TABLE /*_*/watchlist (
index b5e423d..7497c20 100644 (file)
@@ -721,6 +721,7 @@ CREATE INDEX &mw_prefix.recentchanges_i07 ON &mw_prefix.recentchanges (rc_user_t
 CREATE INDEX &mw_prefix.rc_ns_actor ON &mw_prefix.recentchanges (rc_namespace, rc_actor);
 CREATE INDEX &mw_prefix.rc_actor ON &mw_prefix.recentchanges (rc_actor, rc_timestamp);
 CREATE INDEX &mw_prefix.recentchanges_i08 ON &mw_prefix.recentchanges (rc_namespace, rc_type, rc_patrolled, rc_timestamp);
+CREATE INDEX &mw_prefix.recentchanges_i10 ON &mw_prefix.recentchanges (rc_this_oldid);
 /*$mw$*/
 CREATE TRIGGER &mw_prefix.recentchanges_seq_trg BEFORE INSERT ON &mw_prefix.recentchanges
        FOR EACH ROW WHEN (new.rc_id IS NULL)
index fad4e7d..d47ca43 100644 (file)
@@ -104,9 +104,9 @@ class Orphans extends Maintenance {
                                'rev_id', 'rev_page', 'rev_timestamp', 'rev_user_text', 'rev_comment'
                        ) );
 
+                       $contLang = MediaWikiServices::getInstance()->getContentLanguage();
                        foreach ( $result as $row ) {
                                $comment = $commentStore->getComment( 'rev_comment', $row )->text;
-                               $contLang = MediaWikiServices::getInstance()->getContentLanguage();
                                if ( $comment !== '' ) {
                                        $comment = '(' . $contLang->truncateForVisual( $comment, 40 ) . ')';
                                }
index adf2688..db68248 100644 (file)
@@ -588,6 +588,7 @@ CREATE INDEX rc_cur_id          ON recentchanges (rc_cur_id);
 CREATE INDEX new_name_timestamp ON recentchanges (rc_new, rc_namespace, rc_timestamp);
 CREATE INDEX rc_ip              ON recentchanges (rc_ip);
 CREATE INDEX rc_name_type_patrolled_timestamp ON recentchanges (rc_namespace, rc_type, rc_patrolled, rc_timestamp);
+CREATE INDEX rc_this_oldid      ON recentchanges (rc_this_oldid);
 
 
 CREATE SEQUENCE watchlist_wl_id_seq;
index b503bba..8cda4f9 100644 (file)
@@ -1471,6 +1471,8 @@ CREATE INDEX /*i*/rc_actor ON /*_*/recentchanges (rc_actor, rc_timestamp);
 -- ApiQueryRecentChanges (T140108)
 CREATE INDEX /*i*/rc_name_type_patrolled_timestamp ON /*_*/recentchanges (rc_namespace, rc_type, rc_patrolled, rc_timestamp);
 
+-- Article.php and friends (T139012)
+CREATE INDEX /*i*/rc_this_oldid ON /*_*/recentchanges (rc_this_oldid);
 
 CREATE TABLE /*_*/watchlist (
   wl_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
index 01aace0..12a454a 100644 (file)
@@ -66,7 +66,8 @@ class UpdateSpecialPages extends Maintenance {
                                continue;
                        }
 
-                       $specialObj = SpecialPageFactory::getPage( $special );
+                       $specialObj = MediaWikiServices::getInstance()->getSpecialPageFactory()->
+                               getPage( $special );
                        if ( !$specialObj ) {
                                $this->output( "No such special page: $special\n" );
                                exit;
index 8bd37dd..264b5eb 100644 (file)
@@ -1,6 +1,17 @@
 <?php
 /**
- * Show profiling data.
+ * Simple interface for displaying request profile data stored in
+ * the wikis' primary database.
+ *
+ * See also https://www.mediawiki.org/wiki/Manual:Profiling.
+ *
+ * To add profiling information to the database:
+ *
+ * - set $wgProfiler['class'] in LocalSetings.php to a Profiler class other than ProfilerStub.
+ * - set $wgProfiler['output'] to 'db' to force the profiler to save its the
+ *   information in the database.
+ * - apply the maintenance/archives/patch-profiling.sql patch to the database.
+ * - set $wgEnableProfileInfo to true.
  *
  * Copyright 2005 Kate Turner.
  *
@@ -32,7 +43,6 @@ define( 'MW_NO_SESSION', 'warn' );
 
 ini_set( 'zlib.output_compression', 'off' );
 
-$wgEnableProfileInfo = false;
 require __DIR__ . '/includes/WebStart.php';
 
 header( 'Content-Type: text/html; charset=utf-8' );
@@ -155,7 +165,7 @@ $dbr = wfGetDB( DB_REPLICA );
 if ( !$dbr->tableExists( 'profiling' ) ) {
        echo '<p>No <code>profiling</code> table exists, so we can\'t show you anything.</p>'
                . '<p>If you want to log profiling data, enable <code>$wgProfiler[\'output\'] = \'db\'</code>'
-               . ' in your StartProfiler.php and run <code>maintenance/update.php</code> to'
+               . ' in LocalSettings.php and run <code>maintenance/update.php</code> to'
                . ' create the profiling table.'
                . '</body></html>';
        exit( 1 );
index 710d54a..e912242 100644 (file)
@@ -224,9 +224,6 @@ return [
                'scripts' => 'resources/lib/jquery/jquery.cookie.js',
                'targets' => [ 'desktop', 'mobile' ],
        ],
-       'jquery.expandableField' => [
-               'scripts' => 'resources/src/jquery/jquery.expandableField.js',
-       ],
        'jquery.form' => [
                'scripts' => 'resources/lib/jquery/jquery.form.js',
        ],
@@ -1299,7 +1296,6 @@ return [
        ],
        'mediawiki.ForeignStructuredUpload.BookletLayout' => [
                'scripts' => 'resources/src/mediawiki.ForeignStructuredUpload.BookletLayout/BookletLayout.js',
-               'styles' => 'resources/src/mediawiki.ForeignStructuredUpload.BookletLayout/BookletLayout.less',
                'dependencies' => [
                        'mediawiki.ForeignStructuredUpload',
                        'mediawiki.Upload.BookletLayout',
diff --git a/resources/src/jquery/jquery.expandableField.js b/resources/src/jquery/jquery.expandableField.js
deleted file mode 100644 (file)
index c3d39da..0000000
+++ /dev/null
@@ -1,147 +0,0 @@
-/**
- * This plugin provides functionality to expand a text box on focus to double it's current width
- *
- * Usage:
- *
- * Set options:
- *             $('#textbox').expandableField( { option1: value1, option2: value2 } );
- *             $('#textbox').expandableField( option, value );
- * Get option:
- *             value = $('#textbox').expandableField( option );
- * Initialize:
- *             $('#textbox').expandableField();
- *
- * Options:
- */
-( function ( $ ) {
-
-       $.expandableField = {
-               /**
-                * Expand the field, make the callback
-                *
-                * @param {jQuery.Event} e Event
-                * @param {Object} context
-                */
-               expandField: function ( e, context ) {
-                       context.config.beforeExpand.call( context.data.$field, context );
-                       context.data.$field
-                               .animate( { width: context.data.expandedWidth }, 'fast', function () {
-                                       context.config.afterExpand.call( this, context );
-                               } );
-               },
-               /**
-                * Condense the field, make the callback
-                *
-                * @param {jQuery.Event} e Event
-                * @param {Object} context
-                */
-               condenseField: function ( e, context ) {
-                       context.config.beforeCondense.call( context.data.$field, context );
-                       context.data.$field
-                               .animate( { width: context.data.condensedWidth }, 'fast', function () {
-                                       context.config.afterCondense.call( this, context );
-                               } );
-               },
-               /**
-                * Sets the value of a property, and updates the widget accordingly
-                *
-                * @param {Object} context
-                * @param {string} property Name of property
-                * @param {Mixed} value Value to set property with
-                */
-               configure: function ( context, property, value ) {
-                       // TODO: Validate creation using fallback values
-                       context.config[ property ] = value;
-               }
-
-       };
-
-       $.fn.expandableField = function () {
-
-               // Multi-context fields
-               var returnValue,
-                       args = arguments;
-
-               $( this ).each( function () {
-                       var key, context, timeout;
-
-                       /* Construction / Loading */
-
-                       context = $( this ).data( 'expandableField-context' );
-
-                       // TODO: Do we need to check both null and undefined?
-                       if ( context === undefined || context === null ) {
-                               context = {
-                                       config: {
-                                               // callback function for before collapse
-                                               beforeCondense: function () {},
-
-                                               // callback function for before expand
-                                               beforeExpand: function () {},
-
-                                               // callback function for after collapse
-                                               afterCondense: function () {},
-
-                                               // callback function for after expand
-                                               afterExpand: function () {},
-
-                                               // Whether the field should expand to the left or the right -- defaults to left
-                                               expandToLeft: true
-                                       }
-                               };
-                       }
-
-                       /* API */
-                       // Handle various calling styles
-                       if ( args.length > 0 ) {
-                               if ( typeof args[ 0 ] === 'object' ) {
-                                       // Apply set of properties
-                                       for ( key in args[ 0 ] ) {
-                                               $.expandableField.configure( context, key, args[ 0 ][ key ] );
-                                       }
-                               } else if ( typeof args[ 0 ] === 'string' ) {
-                                       if ( args.length > 1 ) {
-                                               // Set property values
-                                               $.expandableField.configure( context, args[ 0 ], args[ 1 ] );
-
-                                       // TODO: Do we need to check both null and undefined?
-                                       } else if ( returnValue === null || returnValue === undefined ) {
-                                               // Get property values, but don't give access to internal data - returns only the first
-                                               returnValue = ( args[ 0 ] in context.config ? undefined : context.config[ args[ 0 ] ] );
-                                       }
-                               }
-                       }
-
-                       /* Initialization */
-
-                       if ( context.data === undefined ) {
-                               context.data = {
-                                       // The width of the field in it's condensed state
-                                       condensedWidth: $( this ).width(),
-
-                                       // The width of the field in it's expanded state
-                                       expandedWidth: $( this ).width() * 2,
-
-                                       // Reference to the field
-                                       $field: $( this )
-                               };
-
-                               $( this )
-                                       .addClass( 'expandableField' )
-                                       .focus( function ( e ) {
-                                               clearTimeout( timeout );
-                                               $.expandableField.expandField( e, context );
-                                       } )
-                                       .blur( function ( e ) {
-                                               timeout = setTimeout( function () {
-                                                       $.expandableField.condenseField( e, context );
-                                               }, 250 );
-                                       } );
-                       }
-                       // Store the context for next time
-                       $( this ).data( 'expandableField-context', context );
-               } );
-               return returnValue !== undefined ? returnValue : $( this );
-       };
-
-}( jQuery ) );
index 186ad17..3823395 100644 (file)
 
                // If the first argument is the function,
                // set filterFn to the first argument's value and ignore the second argument.
-               if ( $.isFunction( limit ) ) {
+               if ( typeof limit === 'function' ) {
                        filterFn = limit;
                        limit = undefined;
                // Either way, verify it is a function so we don't have to call
                // isFunction again after this.
-               } else if ( !filterFn || !$.isFunction( filterFn ) ) {
+               } else if ( !filterFn || typeof filterFn !== 'function' ) {
                        filterFn = undefined;
                }
 
index 39c601f..35c6a5d 100644 (file)
@@ -6,10 +6,6 @@
  *             $( '#textbox' ).suggestions( { option1: value1, option2: value2 } );
  *             $( '#textbox' ).suggestions( option, value );
  *
- * Get option:
- *
- *             value = $( '#textbox' ).suggestions( option );
- *
  * Initialize:
  *
  *             $( '#textbox' ).suggestions();
                        if ( context.data.timerID !== null ) {
                                clearTimeout( context.data.timerID );
                        }
-                       if ( $.isFunction( context.config.cancel ) ) {
+                       if ( typeof context.config.cancel === 'function' ) {
                                context.config.cancel.call( context.data.$textbox );
                        }
                },
 
        // See file header for method documentation
        $.fn.suggestions = function () {
-
                // Multi-context fields
-               var returnValue,
-                       args = arguments;
+               var args = arguments;
 
                $( this ).each( function () {
                        var context, key;
                                        if ( args.length > 1 ) {
                                                // Set property values
                                                $.suggestions.configure( context, args[ 0 ], args[ 1 ] );
-                                       } else if ( returnValue === null || returnValue === undefined ) {
-                                               // Get property values, but don't give access to internal data - returns only the first
-                                               returnValue = ( args[ 0 ] in context.config ? undefined : context.config[ args[ 0 ] ] );
                                        }
                                }
                        }
                        // Store the context for next time
                        $( this ).data( 'suggestions-context', context );
                } );
-               return returnValue !== undefined ? returnValue : $( this );
+               return this;
        };
 
        /**
index d38adcd..ae1b590 100644 (file)
 
                // These elements are filled with text in #initialize
                // TODO Refactor this to be in one place
-               this.$ownWorkMessage = $( '<p>' )
-                       .addClass( 'mw-foreignStructuredUpload-bookletLayout-license' );
+               this.$ownWorkMessage = $( '<p>' );
                this.$notOwnWorkMessage = $( '<p>' );
                this.$notOwnWorkLocal = $( '<p>' );
 
                        } ),
                        new OO.ui.FieldLayout( this.ownWorkCheckbox, {
                                align: 'inline',
-                               label: $( '<div>' ).append(
-                                       $( '<p>' ).text( mw.msg( 'upload-form-label-own-work' ) ),
-                                       this.$ownWorkMessage
-                               )
+                               label: mw.msg( 'upload-form-label-own-work' ),
+                               help: this.$ownWorkMessage,
+                               helpInline: true
                        } ),
                        new OO.ui.FieldLayout( this.messageLabel, {
                                align: 'top'
                this.filenameField = new OO.ui.FieldLayout( this.filenameWidget, {
                        label: mw.msg( 'upload-form-label-infoform-name' ),
                        align: 'top',
-                       classes: [ 'mw-foreignStructuredUploa-bookletLayout-small-notice' ],
-                       notices: [ mw.msg( 'upload-form-label-infoform-name-tooltip' ) ]
+                       help: mw.msg( 'upload-form-label-infoform-name-tooltip' ),
+                       helpInline: true
                } );
                this.descriptionField = new OO.ui.FieldLayout( this.descriptionWidget, {
                        label: mw.msg( 'upload-form-label-infoform-description' ),
                        align: 'top',
-                       classes: [ 'mw-foreignStructuredUploa-bookletLayout-small-notice' ],
-                       notices: [ mw.msg( 'upload-form-label-infoform-description-tooltip' ) ]
+                       help: mw.msg( 'upload-form-label-infoform-description-tooltip' ),
+                       helpInline: true
                } );
                this.categoriesField = new OO.ui.FieldLayout( this.categoriesWidget, {
                        label: mw.msg( 'upload-form-label-infoform-categories' ),
diff --git a/resources/src/mediawiki.ForeignStructuredUpload.BookletLayout/BookletLayout.less b/resources/src/mediawiki.ForeignStructuredUpload.BookletLayout/BookletLayout.less
deleted file mode 100644 (file)
index 24ca434..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-.mw-foreignStructuredUpload-bookletLayout-license {
-       font-size: 90%;
-       line-height: 1.4em;
-       color: #54595d;
-}
-
-.mw-foreignStructuredUploa-bookletLayout-small-notice {
-       .oo-ui-fieldLayout-messages-notice {
-               .oo-ui-iconWidget {
-                       display: none;
-               }
-
-               .oo-ui-labelWidget {
-                       line-height: 1.2em;
-                       font-size: 0.9em;
-                       color: #54595d;
-               }
-       }
-}
index ee3bac2..4510b2c 100644 (file)
@@ -47,7 +47,7 @@
                        showEventName += '.' + options.namespace;
                }
 
-               if ( $.isFunction( options.message ) ) {
+               if ( typeof options.message === 'function' ) {
                        message = options.message();
                } else {
                        message = options.message;
index 8157975..2f62371 100644 (file)
@@ -12,7 +12,7 @@
                                        fetch: function ( val ) {
                                                var $el = $( this );
                                                $el.suggestions( 'suggestions',
-                                                       $.grep( $el.data( 'autocomplete' ), function ( v ) {
+                                                       $el.data( 'autocomplete' ).filter( function ( v ) {
                                                                return v.indexOf( val ) === 0;
                                                        } )
                                                );
index b30a30e..cec537f 100644 (file)
                        var module = mw.loader.moduleRegistry[ moduleName ];
 
                        // Grep module's JavaScript
-                       if ( $.isFunction( module.script ) && pattern.test( module.script.toString() ) ) {
+                       if ( typeof module.script === 'function' && pattern.test( module.script.toString() ) ) {
                                return true;
                        }
 
index 437800a..b7fd6fd 100644 (file)
@@ -1,3 +1,4 @@
+/* eslint-disable no-restricted-properties */
 /*!
 * Experimental advanced wikitext parser-emitter.
 * See: https://www.mediawiki.org/wiki/Extension:UploadWizard/MessageParser for docs
@@ -20,7 +21,7 @@
                        },
                        // Whitelist for allowed HTML elements in wikitext.
                        // Self-closing tags are not currently supported.
-                       // Can be populated via setPrivateData().
+                       // Can be populated via setParserDefaults().
                        allowedHtmlElements: [],
                        // Key tag name, value allowed attributes for that tag.
                        // See Sanitizer::setupAttributeWhitelist
index b96bebc..cb4edc1 100644 (file)
@@ -1,3 +1,4 @@
+/* eslint-disable no-restricted-properties */
 ( function ( mw, $ ) {
        var ProtectionForm,
                reasonCodePointLimit = mw.config.get( 'wgCommentCodePointLimit' ),
index e7859cf..bd94f29 100644 (file)
@@ -1,3 +1,4 @@
+/* eslint-disable no-restricted-properties */
 /*!
  * Add search suggestions to the search form.
  */
index 7c0d232..52abb30 100644 (file)
@@ -1,3 +1,4 @@
+/* eslint-disable no-restricted-properties */
 ( function ( $, mw, OO ) {
        'use strict';
        var ApiSandbox, Util, WidgetMethods, Validators,
index 99e9dbe..43f0552 100644 (file)
@@ -19,7 +19,7 @@
                                auprefix: userInput[ 0 ].toUpperCase() + userInput.slice( 1 ),
                                aulimit: maxRows
                        } ).done( function ( data ) {
-                               var users = $.map( data.query.allusers, function ( userObj ) {
+                               var users = data.query.allusers.map( function ( userObj ) {
                                        return userObj.name;
                                } );
                                response( users );
index 9eea6f3..ca0c303 100644 (file)
 
                        // Update tooltip for the access key after inserting into DOM
                        // to get a localized access key label (T69946).
-                       $link.updateTooltipAccessKeys();
+                       if ( accesskey ) {
+                               $link.updateTooltipAccessKeys();
+                       }
 
                        return $item[ 0 ];
                },
index 6ee9595..44a7d61 100644 (file)
                                // Workaround T97096 by setting uselang=content
                                uselang: 'content'
                        } ).then( function ( data ) {
-                               return $.map( data.query.interwikimap, function ( interwiki ) {
+                               return data.query.interwikimap.map( function ( interwiki ) {
                                        return interwiki.prefix;
                                } );
                        } );
index b2d86e2..7e7fd6a 100644 (file)
@@ -72,10 +72,7 @@ window.isCompatible = function ( str ) {
                // Hardcoded exceptions for browsers that pass the requirement but we don't want to
                // support in the modern run-time.
                // Note: Please extend the regex instead of adding new ones
-               !(
-                       ua.match( /MSIE 10|webOS\/1\.[0-4]|SymbianOS|Series60|NetFront|Opera Mini|S40OviBrowser|MeeGo|Android.+Glass|^Mozilla\/5\.0 .+ Gecko\/$|googleweblight/ ) ||
-                       ua.match( /PlayStation/i )
-               )
+               !ua.match( /MSIE 10|webOS\/1\.[0-4]|SymbianOS|Series60|NetFront|Opera Mini|S40OviBrowser|MeeGo|Android.+Glass|^Mozilla\/5\.0 .+ Gecko\/$|googleweblight|PLAYSTATION|PlayStation/ )
        );
 };
 
index 2f7a6c8..6972165 100644 (file)
@@ -947,7 +947,9 @@ abstract class MediaWikiTestCase extends PHPUnit\Framework\TestCase {
         * @return MediaWikiServices
         * @throws MWException
         */
-       protected function overrideMwServices( Config $configOverrides = null, array $services = [] ) {
+       protected static function overrideMwServices(
+               Config $configOverrides = null, array $services = []
+       ) {
                if ( !$configOverrides ) {
                        $configOverrides = new HashConfig();
                }
diff --git a/tests/phpunit/data/categoriesrdf/change.sparql b/tests/phpunit/data/categoriesrdf/change.sparql
deleted file mode 100644 (file)
index d1a6a62..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-# Changes
-DELETE {
-?category ?x ?y
-} WHERE {
-   VALUES ?category {
-     <http://acme.test/wiki/Category:Changed_category>
-   }
-};
-INSERT DATA {
-
-<http://acme.test/wiki/Category:Changed_category> a mediawiki:Category ;
-       rdfs:label "Changed category" ;
-       mediawiki:pages "7"^^xsd:integer ;
-       mediawiki:subcategories "2"^^xsd:integer ;
-       mediawiki:isInCategory <http://acme.test/wiki/Category:Parent_of_30> .
-
-};
diff --git a/tests/phpunit/data/categoriesrdf/edit.sparql b/tests/phpunit/data/categoriesrdf/edit.sparql
new file mode 100644 (file)
index 0000000..ae2e300
--- /dev/null
@@ -0,0 +1,17 @@
+# Edits
+DELETE {
+?category ?x ?y
+} WHERE {
+   VALUES ?category {
+     <http://acme.test/wiki/Category:Changed_category>
+   }
+};
+INSERT DATA {
+
+<http://acme.test/wiki/Category:Changed_category> a mediawiki:Category ;
+       rdfs:label "Changed category" ;
+       mediawiki:pages "7"^^xsd:integer ;
+       mediawiki:subcategories "2"^^xsd:integer ;
+       mediawiki:isInCategory <http://acme.test/wiki/Category:Parent_of_30> .
+
+};
index 19780a6..a921ee0 100644 (file)
@@ -84,7 +84,7 @@ class BlockTest extends MediaWikiLangTestCase {
         * per T28425
         * @covers Block::__construct
         */
-       public function testBug26425BlockTimestampDefaultsToTime() {
+       public function testT28425BlockTimestampDefaultsToTime() {
                $user = $this->getUserForBlocking();
                $block = $this->addBlockForUser( $user );
                $madeAt = wfTimestamp( TS_MW );
@@ -103,10 +103,10 @@ class BlockTest extends MediaWikiLangTestCase {
         * because the new function didn't accept empty strings like Block::load()
         * had. Regression T31116.
         *
-        * @dataProvider provideBug29116Data
+        * @dataProvider provideT31116Data
         * @covers Block::newFromTarget
         */
-       public function testBug29116NewFromTargetWithEmptyIp( $vagueTarget ) {
+       public function testT31116NewFromTargetWithEmptyIp( $vagueTarget ) {
                $user = $this->getUserForBlocking();
                $initialBlock = $this->addBlockForUser( $user );
                $block = Block::newFromTarget( $user->getName(), $vagueTarget );
@@ -118,7 +118,7 @@ class BlockTest extends MediaWikiLangTestCase {
                );
        }
 
-       public static function provideBug29116Data() {
+       public static function provideT31116Data() {
                return [
                        [ null ],
                        [ '' ],
index 250d49d..5f0200d 100644 (file)
@@ -273,13 +273,9 @@ class ContentSecurityPolicyTest extends MediaWikiTestCase {
         * @covers ContentSecurityPolicy::isNonceRequired
         */
        public function testCSPIsEnabled( $main, $reportOnly, $expected ) {
-               global $wgCSPReportOnlyHeader, $wgCSPHeader;
-               global $wgCSPHeader;
-               $oldReport = wfSetVar( $wgCSPReportOnlyHeader, $reportOnly );
-               $oldMain = wfSetVar( $wgCSPHeader, $main );
+               $this->setMwGlobals( 'wgCSPReportOnlyHeader', $reportOnly );
+               $this->setMwGlobals( 'wgCSPHeader', $main );
                $res = ContentSecurityPolicy::isNonceRequired( RequestContext::getMain()->getConfig() );
-               wfSetVar( $wgCSPReportOnlyHeader, $oldReport );
-               wfSetVar( $wgCSPHeader, $oldMain );
                $this->assertEquals( $res, $expected );
        }
 
index fcd26f5..6279cf6 100644 (file)
@@ -5,7 +5,7 @@
  * @covers ::wfShellExec
  */
 class WfShellExecTest extends MediaWikiTestCase {
-       public function testBug67870() {
+       public function testT69870() {
                $command = wfIsWindows()
                        // 333 = 331 + CRLF
                        ? ( 'for /l %i in (1, 1, 1001) do @echo ' . str_repeat( '*', 331 ) )
index 3c8fa25..070a029 100644 (file)
@@ -476,6 +476,10 @@ class HtmlTest extends MediaWikiTestCase {
                        Html::errorBox( 'err', 'heading' ),
                        '<div class="errorbox"><h2>heading</h2>err</div>'
                );
+               $this->assertEquals(
+                       Html::errorBox( 'err', '0' ),
+                       '<div class="errorbox"><h2>0</h2>err</div>'
+               );
        }
 
        /**
@@ -785,6 +789,45 @@ class HtmlTest extends MediaWikiTestCase {
        public function testSrcSet( $images, $expected, $message ) {
                $this->assertEquals( Html::srcSet( $images ), $expected, $message );
        }
+
+       public static function provideInlineScript() {
+               return [
+                       'Empty' => [
+                               '',
+                               '<script></script>'
+                       ],
+                       'Simple' => [
+                               'EXAMPLE.label("foo");',
+                               '<script>EXAMPLE.label("foo");</script>'
+                       ],
+                       'Ampersand' => [
+                               'EXAMPLE.is(a && b);',
+                               '<script>/*<![CDATA[*/EXAMPLE.is(a && b);/*]]>*/</script>'
+                       ],
+                       'HTML' => [
+                               'EXAMPLE.label("<a>");',
+                               '<script>/*<![CDATA[*/EXAMPLE.label("<a>");/*]]>*/</script>'
+                       ],
+                       'Script closing string' => [
+                               'EXAMPLE.label("</script>");',
+                               // Broken: First </script> ends the script in HTML
+                               '<script>/*<![CDATA[*/EXAMPLE.label("</script>");/*]]>*/</script>'
+                       ],
+                       'CDATA string' => [
+                               'EXAMPLE.label("&> CDATA ]]>");',
+                               // Broken: Works in HTML, but is invalid XML.
+                               '<script>/*<![CDATA[*/EXAMPLE.label("&> CDATA ]]>");/*]]>*/</script>'
+                       ],
+               ];
+       }
+
+       /**
+        * @dataProvider provideInlineScript
+        * @covers Html::inlineScript
+        */
+       public function testInlineScript( $code, $expected ) {
+               $this->assertSame( Html::inlineScript( $code ), $expected );
+       }
 }
 
 class HtmlTestValue {
index 5606924..0e35767 100644 (file)
@@ -61,7 +61,7 @@ class PrefixSearchTest extends MediaWikiLangTestCase {
                $this->originalHandlers = TestingAccessWrapper::newFromClass( Hooks::class )->handlers;
                TestingAccessWrapper::newFromClass( Hooks::class )->handlers = [];
 
-               SpecialPageFactory::resetList();
+               $this->overrideMwServices();
        }
 
        public function tearDown() {
@@ -69,7 +69,7 @@ class PrefixSearchTest extends MediaWikiLangTestCase {
 
                TestingAccessWrapper::newFromClass( Hooks::class )->handlers = $this->originalHandlers;
 
-               SpecialPageFactory::resetList();
+               $this->overrideMwServices();
        }
 
        protected function searchProvision( array $results = null ) {
index 63803cc..dd84b7e 100644 (file)
@@ -99,6 +99,10 @@ class TitlePermissionTest extends MediaWikiLangTestCase {
        /**
         * @todo This test method should be split up into separate test methods and
         * data providers
+        *
+        * This test is failing per T201776.
+        *
+        * @group Broken
         * @covers Title::checkQuickPermissions
         */
        public function testQuickPermissions() {
@@ -643,6 +647,10 @@ class TitlePermissionTest extends MediaWikiLangTestCase {
        /**
         * @todo This test method should be split up into separate test methods and
         * data providers
+        *
+        * This test is failing per T201776.
+        *
+        * @group Broken
         * @covers Title::checkPageRestrictions
         */
        public function testPageRestrictions() {
index 4c276d6..852812b 100644 (file)
@@ -399,7 +399,7 @@ class ApiEditPageTest extends ApiTestCase {
                        "no edit conflict expected here" );
        }
 
-       public function testEditConflict_bug41990() {
+       public function testEditConflict_T43990() {
                static $count = 0;
                $count++;
 
@@ -410,11 +410,11 @@ class ApiEditPageTest extends ApiTestCase {
                */
 
                // assume NS_HELP defaults to wikitext
-               $name = "Help:ApiEditPageTest_testEditConflict_redirect_bug41990_$count";
+               $name = "Help:ApiEditPageTest_testEditConflict_redirect_T43990_$count";
                $title = Title::newFromText( $name );
                $page = WikiPage::factory( $title );
 
-               $rname = "Help:ApiEditPageTest_testEditConflict_redirect_bug41990_r$count";
+               $rname = "Help:ApiEditPageTest_testEditConflict_redirect_T43990_r$count";
                $rtitle = Title::newFromText( $rname );
                $rpage = WikiPage::factory( $rtitle );
 
index fe2058f..129b7f9 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use MediaWiki\MediaWikiServices;
+
 /**
  * @group API
  * @group medium
@@ -107,7 +109,7 @@ class ApiQuerySiteinfoTest extends ApiTestCase {
 
        public function testSpecialPageAliases() {
                $this->assertCount(
-                       count( SpecialPageFactory::getNames() ),
+                       count( MediaWikiServices::getInstance()->getSpecialPageFactory()->getNames() ),
                        $this->doQuery( 'specialpagealiases' )
                );
        }
diff --git a/tests/phpunit/includes/api/PrefixUniquenessTest.php b/tests/phpunit/includes/api/PrefixUniquenessTest.php
deleted file mode 100644 (file)
index d125a7d..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-
-/**
- * Checks that all API query modules, core and extensions, have unique prefixes.
- *
- * @group API
- */
-class PrefixUniquenessTest extends MediaWikiTestCase {
-
-       public function testPrefixes() {
-               $main = new ApiMain( new FauxRequest() );
-               $query = new ApiQuery( $main, 'foo', 'bar' );
-               $moduleManager = $query->getModuleManager();
-
-               $modules = $moduleManager->getNames();
-               $prefixes = [];
-
-               foreach ( $modules as $name ) {
-                       $module = $moduleManager->getModule( $name );
-                       $class = get_class( $module );
-
-                       $prefix = $module->getModulePrefix();
-                       if ( $prefix !== '' && isset( $prefixes[$prefix] ) ) {
-                               $this->fail( "Module prefix '{$prefix}' is shared between {$class} and {$prefixes[$prefix]}" );
-                       }
-                       $prefixes[$module->getModulePrefix()] = $class;
-               }
-               $this->assertTrue( true ); // dummy call to make this test non-incomplete
-       }
-}
index 16048bf..54dc583 100644 (file)
@@ -317,7 +317,8 @@ JAVASCRIPT
                        [
                                // Regression test for T201606.
                                // Must not break between 'return' and Expression.
-                               // FIXME: Cause?
+                               // Was caused by bad state after a ternary in the expression value
+                               // for a key in an object literal.
                                <<<JAVASCRIPT
 call( {
        key: 1 ? 0 : function () {
@@ -340,7 +341,7 @@ JAVASCRIPT
                                        '(',
                                        ')',
                                        '{',
-                                       'return', 'this', // FIXME
+                                       'return this',
                                        ';',
                                        '}',
                                        '}',
diff --git a/tests/phpunit/includes/libs/StaticArrayWriterTest.php b/tests/phpunit/includes/libs/StaticArrayWriterTest.php
new file mode 100644 (file)
index 0000000..276fee3
--- /dev/null
@@ -0,0 +1,49 @@
+<?php
+/**
+ * Copyright (C) 2018 Kunal Mehta <legoktm@member.fsf.org>
+ *
+ * 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.
+ *
+ */
+
+use Wikimedia\StaticArrayWriter;
+
+/**
+ * @covers \Wikimedia\StaticArrayWriter
+ */
+class StaticArrayWriterTest extends PHPUnit\Framework\TestCase {
+       public function testCreate() {
+               $data = [
+                       'foo' => 'bar',
+                       'baz' => 'rawr',
+                       "they're" => '"quoted properly"',
+               ];
+               $writer = new StaticArrayWriter();
+               $actual = $writer->create( $data, "Header\nWith\nNewlines" );
+               $expected = <<<PHP
+<?php
+// Header
+// With
+// Newlines
+return [
+       'foo' => 'bar',
+       'baz' => 'rawr',
+       'they\'re' => '"quoted properly"',
+];
+
+PHP;
+               $this->assertSame( $expected, $actual );
+       }
+}
diff --git a/tests/phpunit/includes/libs/stats/PrefixingStatsdDataFactoryProxyTest.php b/tests/phpunit/includes/libs/stats/PrefixingStatsdDataFactoryProxyTest.php
new file mode 100644 (file)
index 0000000..b55d869
--- /dev/null
@@ -0,0 +1,58 @@
+<?php
+
+use Liuggio\StatsdClient\Factory\StatsdDataFactoryInterface;
+
+/**
+ * @covers PrefixingStatsdDataFactoryProxy
+ */
+class PrefixingStatsdDataFactoryProxyTest extends PHPUnit\Framework\TestCase {
+
+       use PHPUnit4And6Compat;
+
+       public function provideMethodNames() {
+               return [
+                       [ 'timing' ],
+                       [ 'gauge' ],
+                       [ 'set' ],
+                       [ 'increment' ],
+                       [ 'decrement' ],
+                       [ 'updateCount' ],
+                       [ 'produceStatsdData' ],
+               ];
+       }
+
+       /**
+        * @dataProvider provideMethodNames
+        */
+       public function testPrefixingAndPassthrough( $method ) {
+               /** @var StatsdDataFactoryInterface|PHPUnit_Framework_MockObject_MockObject $innerFactory */
+               $innerFactory = $this->getMock(
+                       \Liuggio\StatsdClient\Factory\StatsdDataFactoryInterface::class
+               );
+               $innerFactory->expects( $this->once() )
+                       ->method( $method )
+                       ->with( 'testprefix.' . 'metricname' );
+
+               $proxy = new PrefixingStatsdDataFactoryProxy( $innerFactory, 'testprefix' );
+               // 1,2,3,4 simply makes sure we provide enough parameters, without caring what they are
+               $proxy->$method( 'metricname', 1, 2, 3, 4 );
+       }
+
+       /**
+        * @dataProvider provideMethodNames
+        */
+       public function testPrefixIsTrimmed( $method ) {
+               /** @var StatsdDataFactoryInterface|PHPUnit_Framework_MockObject_MockObject $innerFactory */
+               $innerFactory = $this->getMock(
+                       \Liuggio\StatsdClient\Factory\StatsdDataFactoryInterface::class
+               );
+               $innerFactory->expects( $this->once() )
+                       ->method( $method )
+                       ->with( 'testprefix.' . 'metricname' );
+
+               $proxy = new PrefixingStatsdDataFactoryProxy( $innerFactory, 'testprefix...' );
+               // 1,2,3,4 simply makes sure we provide enough parameters, without caring what they are
+               $proxy->$method( 'metricname', 1, 2, 3, 4 );
+       }
+
+}
index 83df61a..41c1218 100644 (file)
@@ -69,7 +69,7 @@ class SearchEnginePrefixTest extends MediaWikiLangTestCase {
                $this->originalHandlers = TestingAccessWrapper::newFromClass( Hooks::class )->handlers;
                TestingAccessWrapper::newFromClass( Hooks::class )->handlers = [];
 
-               SpecialPageFactory::resetList();
+               $this->overrideMwServices();
        }
 
        public function tearDown() {
@@ -77,7 +77,7 @@ class SearchEnginePrefixTest extends MediaWikiLangTestCase {
 
                TestingAccessWrapper::newFromClass( Hooks::class )->handlers = $this->originalHandlers;
 
-               SpecialPageFactory::resetList();
+               $this->overrideMwServices();
        }
 
        protected function searchProvision( array $results = null ) {
index 1da6fb3..04a89d2 100644 (file)
@@ -21,22 +21,10 @@ use Wikimedia\ScopedCallback;
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
- * @covers SpecialPageFactory
+ * @covers \MediaWiki\Special\SpecialPageFactory
  * @group SpecialPage
  */
 class SpecialPageFactoryTest extends MediaWikiTestCase {
-
-       protected function tearDown() {
-               parent::tearDown();
-
-               SpecialPageFactory::resetList();
-       }
-
-       public function testResetList() {
-               SpecialPageFactory::resetList();
-               $this->assertContains( 'Specialpages', SpecialPageFactory::getNames() );
-       }
-
        public function testHookNotCalledTwice() {
                $count = 0;
                $this->mergeMwGlobalArrayValue( 'wgHooks', [
@@ -45,9 +33,10 @@ class SpecialPageFactoryTest extends MediaWikiTestCase {
                                        $count++;
                                }
                ] ] );
-               SpecialPageFactory::resetList();
-               SpecialPageFactory::getNames();
-               SpecialPageFactory::getNames();
+               $this->overrideMwServices();
+               $spf = MediaWikiServices::getInstance()->getSpecialPageFactory();
+               $spf->getNames();
+               $spf->getNames();
                $this->assertEquals( 1, $count );
        }
 
@@ -82,7 +71,7 @@ class SpecialPageFactoryTest extends MediaWikiTestCase {
         */
        public function testGetPage( $spec, $shouldReuseInstance ) {
                $this->mergeMwGlobalArrayValue( 'wgSpecialPages', [ 'testdummy' => $spec ] );
-               SpecialPageFactory::resetList();
+               $this->overrideMwServices();
 
                $page = SpecialPageFactory::getPage( 'testdummy' );
                $this->assertInstanceOf( SpecialPage::class, $page );
@@ -96,7 +85,7 @@ class SpecialPageFactoryTest extends MediaWikiTestCase {
         */
        public function testGetNames() {
                $this->mergeMwGlobalArrayValue( 'wgSpecialPages', [ 'testdummy' => SpecialAllPages::class ] );
-               SpecialPageFactory::resetList();
+               $this->overrideMwServices();
 
                $names = SpecialPageFactory::getNames();
                $this->assertInternalType( 'array', $names );
@@ -108,7 +97,7 @@ class SpecialPageFactoryTest extends MediaWikiTestCase {
         */
        public function testResolveAlias() {
                $this->setContentLang( 'de' );
-               SpecialPageFactory::resetList();
+               $this->overrideMwServices();
 
                list( $name, $param ) = SpecialPageFactory::resolveAlias( 'Spezialseiten/Foo' );
                $this->assertEquals( 'Specialpages', $name );
@@ -120,7 +109,7 @@ class SpecialPageFactoryTest extends MediaWikiTestCase {
         */
        public function testGetLocalNameFor() {
                $this->setContentLang( 'de' );
-               SpecialPageFactory::resetList();
+               $this->overrideMwServices();
 
                $name = SpecialPageFactory::getLocalNameFor( 'Specialpages', 'Foo' );
                $this->assertEquals( 'Spezialseiten/Foo', $name );
@@ -131,7 +120,7 @@ class SpecialPageFactoryTest extends MediaWikiTestCase {
         */
        public function testGetTitleForAlias() {
                $this->setContentLang( 'de' );
-               SpecialPageFactory::resetList();
+               $this->overrideMwServices();
 
                $title = SpecialPageFactory::getTitleForAlias( 'Specialpages/Foo' );
                $this->assertEquals( 'Spezialseiten/Foo', $title->getText() );
@@ -146,11 +135,11 @@ class SpecialPageFactoryTest extends MediaWikiTestCase {
        ) {
                $lang = clone MediaWikiServices::getInstance()->getContentLanguage();
                $lang->mExtendedSpecialPageAliases = $aliasesList;
-               $this->setContentLang( $lang );
                $this->setMwGlobals( 'wgSpecialPages',
                        array_combine( array_keys( $aliasesList ), array_keys( $aliasesList ) )
                );
-               SpecialPageFactory::resetList();
+               $this->overrideMwServices();
+               $this->setContentLang( $lang );
 
                // Catch the warnings we expect to be raised
                $warnings = [];
@@ -278,7 +267,7 @@ class SpecialPageFactoryTest extends MediaWikiTestCase {
                                }
                        ],
                ] );
-               SpecialPageFactory::resetList();
+               $this->overrideMwServices();
                SpecialPageFactory::getLocalNameFor( 'Specialpages' );
                $this->assertTrue( $called, 'Recursive call succeeded' );
        }
index d53a9b8..4a171df 100644 (file)
@@ -7,6 +7,8 @@
  * @author Antoine Musso
  */
 
+use MediaWiki\MediaWikiServices;
+
 /**
  * @group Database
  * @covers QueryPage<extended>
@@ -43,7 +45,8 @@ class QueryAllSpecialPagesTest extends MediaWikiTestCase {
                        $class = $page[0];
                        $name = $page[1];
                        if ( !in_array( $class, $this->manualTest ) ) {
-                               $this->queryPages[$class] = SpecialPageFactory::getPage( $name );
+                               $this->queryPages[$class] =
+                                       MediaWikiServices::getInstance()->getSpecialPageFactory()->getPage( $name );
                        }
                }
        }
index cd6cd3b..90f6ad9 100644 (file)
@@ -21,7 +21,7 @@ class SpecialPreferencesTest extends MediaWikiTestCase {
         * Test specifications by Alexandre "ialex" Emsenhuber.
         * @todo give this test a real name explaining what is being tested here
         */
-       public function testBug41337() {
+       public function testT43337() {
                // Set a low limit
                $this->setMwGlobals( 'wgMaxSigChars', 2 );
 
index 196321c..6ff2110 100644 (file)
@@ -231,7 +231,7 @@ class SpecialSearchTest extends MediaWikiTestCase {
 
                $ctx = new RequestContext;
                $sp = Title::newFromText( 'Special:Search/foo_bar' );
-               SpecialPageFactory::executePath( $sp, $ctx );
+               MediaWikiServices::getInstance()->getSpecialPageFactory()->executePath( $sp, $ctx );
                $url = $ctx->getOutput()->getRedirect();
                // some older versions of hhvm have a bug that doesn't parse relative
                // urls with a port, so help it out a little bit.
index 39acbb0..e796065 100644 (file)
@@ -41,7 +41,7 @@ class UploadStashTest extends MediaWikiTestCase {
        /**
         * @todo give this test a real name explaining what is being tested here
         */
-       public function testBug29408() {
+       public function testT31408() {
                $this->setMwGlobals( 'wgUser', self::$users['uploader']->getUser() );
 
                $repo = RepoGroup::singleton()->getLocalRepo();
index f3f5a3f..296ee60 100644 (file)
@@ -1,32 +1,61 @@
 <?php
-/**
- * Based on LanguagMlTest
- * @file
- */
 
 /**
  * @covers LanguageAr
  */
 class LanguageArTest extends LanguageClassesTestCase {
+
        /**
         * @covers Language::formatNum
-        * @todo split into a test and a dataprovider
+        * @dataProvider provideFormatNum
         */
-       public function testFormatNum() {
-               $this->assertEquals( '١٬٢٣٤٬٥٦٧', $this->getLang()->formatNum( '1234567' ) );
-               $this->assertEquals( '-١٢٫٨٩', $this->getLang()->formatNum( -12.89 ) );
+       public function testFormatNum( $num, $formatted ) {
+               $this->assertEquals( $formatted, $this->getLang()->formatNum( $num ) );
+       }
+
+       public static function provideFormatNum() {
+               return [
+                       [ '1234567', '١٬٢٣٤٬٥٦٧' ],
+                       [ -12.89, '-١٢٫٨٩' ],
+               ];
+       }
+
+       /**
+        * @covers LanguageAr::normalize
+        * @covers Language::normalize
+        * @dataProvider provideNormalize
+        */
+       public function testNormalize( $input, $expected ) {
+               if ( $input === $expected ) {
+                       throw new Exception( 'Expected output must differ.' );
+               }
+
+               $this->setMwGlobals( 'wgFixArabicUnicode', true );
+               $this->assertSame( $expected, $this->getLang()->normalize( $input ), 'ar-normalised form' );
+
+               $this->setMwGlobals( 'wgFixArabicUnicode', false );
+               $this->assertSame( $input, $this->getLang()->normalize( $input ), 'regular normalised form' );
+       }
+
+       public static function provideNormalize() {
+               return [
+                       [
+                               'ﷅ',
+                               'صمم',
+                       ],
+               ];
        }
 
        /**
         * Mostly to test the raw ascii feature.
-        * @dataProvider providerSprintfDate
+        * @dataProvider provideSprintfDate
         * @covers Language::sprintfDate
         */
        public function testSprintfDate( $format, $date, $expected ) {
                $this->assertEquals( $expected, $this->getLang()->sprintfDate( $format, $date ) );
        }
 
-       public static function providerSprintfDate() {
+       public static function provideSprintfDate() {
                return [
                        [
                                'xg "vs" g',
index 673b5c7..59b7ba8 100644 (file)
 class LanguageMlTest extends LanguageClassesTestCase {
 
        /**
-        * @dataProvider providerFormatNum
-        * T31495
+        * @dataProvider provideFormatNum
         * @covers Language::formatNum
         */
        public function testFormatNum( $result, $value ) {
+               // For T31495
                $this->assertEquals( $result, $this->getLang()->formatNum( $value ) );
        }
 
-       public static function providerFormatNum() {
+       public static function provideFormatNum() {
                return [
                        [ '12,34,567', '1234567' ],
                        [ '12,345', '12345' ],
@@ -37,4 +37,30 @@ class LanguageMlTest extends LanguageClassesTestCase {
                        [ '', null ],
                ];
        }
+
+       /**
+        * @covers LanguageMl::normalize
+        * @covers Language::normalize
+        * @dataProvider provideNormalize
+        */
+       public function testNormalize( $input, $expected ) {
+               if ( $input === $expected ) {
+                       throw new Exception( 'Expected output must differ.' );
+               }
+
+               $this->setMwGlobals( 'wgFixMalayalamUnicode', true );
+               $this->assertSame( $expected, $this->getLang()->normalize( $input ), 'ml-normalised form' );
+
+               $this->setMwGlobals( 'wgFixMalayalamUnicode', false );
+               $this->assertSame( $input, $this->getLang()->normalize( $input ), 'regular normalised form' );
+       }
+
+       public static function provideNormalize() {
+               return [
+                       [
+                               'ല്‍',
+                               'ൽ',
+                       ],
+               ];
+       }
 }
index 30a56f4..701929a 100644 (file)
@@ -149,10 +149,10 @@ class CategoryChangesRdfTest extends MediaWikiLangTestCase {
                                ],
                                [ 22 => true ],
                        ],
-                       'change in categories' => [
-                               __DIR__ . "/../data/categoriesrdf/change.sparql",
+                       'edit category' => [
+                               __DIR__ . "/../data/categoriesrdf/edit.sparql",
                                'getChangedCatsIterator',
-                               'handleChanges',
+                               'handleEdits',
                                [
                                        (object)[
                                                'rc_title' => 'Changed category',
@@ -167,7 +167,7 @@ class CategoryChangesRdfTest extends MediaWikiLangTestCase {
                                                'rc_title' => 'Changed again',
                                                'rc_cur_id' => 30,
                                                'pp_propname' => null,
-                                               'cat_pages' => 10,
+                                               'cat_pages' => 12,
                                                'cat_subcats' => 2,
                                                'cat_files' => 1,
                                        ],
@@ -182,7 +182,7 @@ class CategoryChangesRdfTest extends MediaWikiLangTestCase {
                                ],
                                [ 31 => true ],
                        ],
-
+                       // TODO: not sure how to test categorization changes, it uses the database select...
                ];
        }
 
diff --git a/tests/phpunit/structure/ApiPrefixUniquenessTest.php b/tests/phpunit/structure/ApiPrefixUniquenessTest.php
new file mode 100644 (file)
index 0000000..4f95fbb
--- /dev/null
@@ -0,0 +1,49 @@
+<?php
+
+/**
+ * Checks that all API query modules, core and extensions, have unique prefixes.
+ *
+ * @group API
+ * @coversNothing
+ */
+class ApiPrefixUniquenessTest extends MediaWikiTestCase {
+
+       public function testPrefixes() {
+               $main = new ApiMain( new FauxRequest() );
+               $query = new ApiQuery( $main, 'foo' );
+               $moduleManager = $query->getModuleManager();
+
+               $modules = $moduleManager->getNames();
+               $prefixes = [];
+
+               foreach ( $modules as $name ) {
+                       $module = $moduleManager->getModule( $name );
+                       $class = get_class( $module );
+
+                       $prefix = $module->getModulePrefix();
+                       if ( $prefix === '' /* HACK: T196962 */ || $prefix === 'wbeu' ) {
+                               continue;
+                       }
+
+                       if ( isset( $prefixes[$prefix] ) ) {
+                               $this->fail(
+                                       "Module prefix '{$prefix}' is shared between {$class} and {$prefixes[$prefix]}"
+                               );
+                       }
+                       $prefixes[$module->getModulePrefix()] = $class;
+
+                       if ( $module instanceof ApiQueryGeneratorBase ) {
+                               // namespace with 'g', a generator can share a prefix with a module
+                               $prefix = 'g' . $prefix;
+                               if ( isset( $prefixes[$prefix] ) ) {
+                                       $this->fail(
+                                               "Module prefix '{$prefix}' is shared between {$class} and {$prefixes[$prefix]}" .
+                                                       " (as a generator)"
+                                       );
+                               }
+                               $prefixes[$module->getModulePrefix()] = $class;
+                       }
+               }
+               $this->assertTrue( true ); // dummy call to make this test non-incomplete
+       }
+}
index abf1cdd..9d85fde 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use MediaWiki\MediaWikiServices;
+
 /**
  * Test that runs against all registered special pages to make sure that regular
  * execution of the special page does not cause a fatal error.
@@ -14,18 +16,19 @@ class SpecialPageFatalTest extends MediaWikiTestCase {
 
        public static function setUpBeforeClass() {
                parent::setUpBeforeClass();
-               SpecialPageFactory::resetList();
+               self::overrideMwServices();
        }
 
        public static function tearDownAfterClass() {
-               SpecialPageFactory::resetList();
+               self::overrideMwServices();
                parent::tearDownAfterClass();
        }
 
        public function provideSpecialPages() {
                $specialPages = [];
-               foreach ( SpecialPageFactory::getNames() as $name ) {
-                       $specialPages[$name] = [ SpecialPageFactory::getPage( $name ) ];
+               $spf = MediaWikiServices::getInstance()->getSpecialPageFactory();
+               foreach ( $spf->getNames() as $name ) {
+                       $specialPages[$name] = [ $spf->getPage( $name ) ];
                }
                return $specialPages;
        }
index e125b8a..1917674 100644 (file)
@@ -73,6 +73,8 @@
                        <directory suffix=".php">../../maintenance</directory>
                        <exclude>
                                <directory suffix=".php">../../languages/messages</directory>
+                               <file>../../languages/data/normalize-ar.php</file>
+                               <file>../../languages/data/normalize-ml.php</file>
                        </exclude>
                </whitelist>
        </filter>
index 50fd581..e4cf446 100644 (file)
        QUnit.test( 'Match PHP parser', function ( assert ) {
                var tasks;
                mw.messages.set( mw.libs.phpParserData.messages );
-               tasks = $.map( mw.libs.phpParserData.tests, function ( test ) {
+               tasks = mw.libs.phpParserData.tests.map( function ( test ) {
                        var done = assert.async();
                        return function ( next, abort ) {
                                getMwLanguage( test.lang )
index 8a5e68a..f0a3543 100644 (file)
@@ -1,4 +1,4 @@
-( function ( mw, $ ) {
+( function ( mw ) {
        QUnit.module( 'mediawiki.user', QUnit.newMwEnvironment( {
                setup: function () {
                        this.server = this.sandbox.useFakeServer();
@@ -69,7 +69,7 @@
 
                result = mw.user.generateRandomSessionId();
                assert.strictEqual( typeof result, 'string', 'type' );
-               assert.strictEqual( $.trim( result ), result, 'no whitespace at beginning or end' );
+               assert.strictEqual( result.trim(), result, 'no whitespace at beginning or end' );
                assert.strictEqual( result.length, 16, 'size' );
 
                result2 = mw.user.generateRandomSessionId();
@@ -90,7 +90,7 @@
 
                result = mw.user.generateRandomSessionId();
                assert.strictEqual( typeof result, 'string', 'type' );
-               assert.strictEqual( $.trim( result ), result, 'no whitespace at beginning or end' );
+               assert.strictEqual( result.trim(), result, 'no whitespace at beginning or end' );
                assert.strictEqual( result.length, 16, 'size' );
 
                result2 = mw.user.generateRandomSessionId();
                var result = mw.user.sessionId(),
                        result2 = mw.user.sessionId();
                assert.strictEqual( typeof result, 'string', 'type' );
-               assert.strictEqual( $.trim( result ), result, 'no leading or trailing whitespace' );
+               assert.strictEqual( result.trim(), result, 'no leading or trailing whitespace' );
                assert.strictEqual( result2, result, 'retained' );
        } );
-}( mediaWiki, jQuery ) );
+}( mediaWiki ) );
diff --git a/tests/selenium/pageobjects/undo.page.js b/tests/selenium/pageobjects/undo.page.js
new file mode 100644 (file)
index 0000000..f0eff3f
--- /dev/null
@@ -0,0 +1,14 @@
+const Page = require( 'wdio-mediawiki/Page' );
+
+class UndoPage extends Page {
+
+       get save() { return browser.element( '#wpSave' ); }
+
+       undo( title, previousRev, undoRev ) {
+               super.openTitle( title, { action: 'edit', undoafter: previousRev, undo: undoRev } );
+               this.save.click();
+       }
+
+}
+
+module.exports = new UndoPage();
index 032cbf0..6a394d8 100644 (file)
@@ -4,6 +4,7 @@ const assert = require( 'assert' ),
        RestorePage = require( '../pageobjects/restore.page' ),
        EditPage = require( '../pageobjects/edit.page' ),
        HistoryPage = require( '../pageobjects/history.page' ),
+       UndoPage = require( '../pageobjects/undo.page' ),
        UserLoginPage = require( '../pageobjects/userlogin.page' ),
        Util = require( 'wdio-mediawiki/Util' );
 
@@ -118,4 +119,26 @@ describe( 'Page', function () {
                // check
                assert.strictEqual( RestorePage.displayedContent.getText(), name + ' has been restored\nConsult the deletion log for a record of recent deletions and restorations.' );
        } );
+
+       it( 'should be undoable', function () {
+               // create
+               browser.call( function () {
+                       return Api.edit( name, content );
+               } );
+
+               // edit
+               let previousRev, undoRev;
+               browser.call( function () {
+                       return Api.edit( name, Util.getTestString( 'editContent-' ) )
+                               .then( ( response ) => {
+                                       previousRev = response.edit.oldrevid;
+                                       undoRev = response.edit.newrevid;
+                               } );
+               } );
+
+               UndoPage.undo( name, previousRev, undoRev );
+
+               assert.strictEqual( EditPage.displayedContent.getText(), content );
+       } );
+
 } );