Merge "Remove i18n references to Popularpages"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Mon, 22 Jun 2015 14:56:38 +0000 (14:56 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Mon, 22 Jun 2015 14:56:38 +0000 (14:56 +0000)
292 files changed:
RELEASE-NOTES-1.26
autoload.php
composer.json
docs/doxygen_first_page.php
includes/AjaxDispatcher.php
includes/AjaxResponse.php
includes/Block.php
includes/CategoryViewer.php
includes/DefaultSettings.php
includes/EditPage.php
includes/GlobalFunctions.php
includes/Import.php
includes/MimeMagic.php
includes/OutputPage.php
includes/Preferences.php
includes/Revision.php
includes/Sanitizer.php
includes/Setup.php
includes/StreamFile.php
includes/TemplateParser.php
includes/User.php
includes/WebRequest.php
includes/actions/UnprotectAction.php
includes/api/ApiBase.php
includes/api/ApiBlock.php
includes/api/ApiCreateAccount.php
includes/api/ApiEditPage.php
includes/api/ApiExpandTemplates.php
includes/api/ApiFormatXml.php
includes/api/ApiLogin.php
includes/api/ApiParamInfo.php
includes/api/ApiParse.php
includes/api/ApiQuerySearch.php
includes/api/ApiQuerySiteinfo.php
includes/api/ApiQueryUserInfo.php
includes/api/ApiUnblock.php
includes/api/ApiUndelete.php
includes/api/i18n/cs.json
includes/api/i18n/eu.json
includes/api/i18n/he.json
includes/api/i18n/ko.json
includes/api/i18n/ksh.json
includes/api/i18n/pl.json
includes/api/i18n/zh-hans.json
includes/cache/LCStoreStaticArray.php
includes/cache/LinkCache.php
includes/cache/LocalisationCache.php
includes/cache/MessageCache.php
includes/cache/UserCache.php
includes/changes/EnhancedChangesList.php
includes/changetags/ChangeTags.php
includes/content/WikitextContent.php
includes/context/RequestContext.php
includes/db/Database.php
includes/db/DatabaseMssql.php
includes/db/DatabasePostgres.php
includes/db/LoadBalancer.php
includes/debug/logger/LegacyLogger.php
includes/deferred/LinksUpdate.php
includes/diff/DifferenceEngine.php
includes/filebackend/FSFile.php
includes/filebackend/FileBackendMultiWrite.php
includes/filebackend/TempFSFile.php
includes/filerepo/FileRepo.php
includes/filerepo/ForeignAPIRepo.php
includes/gallery/PackedOverlayImageGallery.php
includes/gallery/TraditionalImageGallery.php
includes/htmlform/HTMLCheckField.php
includes/htmlform/HTMLForm.php
includes/htmlform/HTMLFormField.php
includes/htmlform/HTMLFormFieldWithButton.php [new file with mode: 0644]
includes/htmlform/HTMLSelectAndOtherField.php
includes/htmlform/HTMLSelectNamespaceWithButton.php [new file with mode: 0644]
includes/htmlform/HTMLTextFieldWithButton.php [new file with mode: 0644]
includes/installer/Installer.php
includes/installer/LocalSettingsGenerator.php
includes/installer/MssqlUpdater.php
includes/installer/i18n/cs.json
includes/installer/i18n/es.json
includes/installer/i18n/ko.json
includes/installer/i18n/lrc.json
includes/installer/i18n/nap.json
includes/installer/i18n/pl.json
includes/installer/i18n/sk.json
includes/installer/i18n/udm.json
includes/jobqueue/JobQueue.php
includes/jobqueue/aggregator/JobQueueAggregator.php
includes/json/FormatJson.php
includes/libs/MultiHttpClient.php
includes/libs/eventrelayer/EventRelayer.php
includes/libs/virtualrest/VirtualRESTService.php
includes/media/FormatMetadata.php
includes/media/MediaTransformInvalidParametersException.php
includes/media/SVGMetadataExtractor.php
includes/media/XCF.php
includes/media/XMP.php
includes/objectcache/SqlBagOStuff.php
includes/page/Article.php
includes/page/WikiPage.php
includes/parser/LinkHolderArray.php
includes/parser/Parser.php
includes/parser/Preprocessor_DOM.php
includes/parser/Preprocessor_Hash.php
includes/profiler/ProfileSection.php
includes/profiler/Profiler.php
includes/profiler/ProfilerFunctions.php
includes/profiler/output/ProfilerOutputUdp.php
includes/registration/ExtensionProcessor.php
includes/registration/ExtensionRegistry.php
includes/resourceloader/DerivativeResourceLoaderContext.php
includes/resourceloader/ResourceLoader.php
includes/resourceloader/ResourceLoaderContext.php
includes/resourceloader/ResourceLoaderEditToolbarModule.php
includes/resourceloader/ResourceLoaderFileModule.php
includes/resourceloader/ResourceLoaderImage.php
includes/resourceloader/ResourceLoaderImageModule.php
includes/resourceloader/ResourceLoaderJqueryMsgModule.php
includes/resourceloader/ResourceLoaderLanguageDataModule.php
includes/resourceloader/ResourceLoaderLanguageNamesModule.php
includes/resourceloader/ResourceLoaderModule.php
includes/resourceloader/ResourceLoaderOOUIImageModule.php
includes/resourceloader/ResourceLoaderSkinModule.php
includes/resourceloader/ResourceLoaderSpecialCharacterDataModule.php
includes/resourceloader/ResourceLoaderStartUpModule.php
includes/resourceloader/ResourceLoaderUserCSSPrefsModule.php
includes/resourceloader/ResourceLoaderUserDefaultsModule.php
includes/resourceloader/ResourceLoaderUserOptionsModule.php
includes/resourceloader/ResourceLoaderWikiModule.php
includes/search/SearchHighlighter.php
includes/skins/Skin.php
includes/skins/SkinFallbackTemplate.php
includes/specialpage/QueryPage.php
includes/specialpage/RedirectSpecialPage.php
includes/specialpage/SpecialPageFactory.php
includes/specials/SpecialAllMessages.php
includes/specials/SpecialBlockList.php
includes/specials/SpecialExport.php
includes/specials/SpecialJavaScriptTest.php
includes/specials/SpecialMIMEsearch.php
includes/specials/SpecialMediaStatistics.php
includes/specials/SpecialNewpages.php
includes/specials/SpecialProtectedtitles.php
includes/specials/SpecialTags.php
includes/specials/SpecialUploadStash.php
includes/specials/SpecialUserlogin.php
includes/specials/SpecialUserrights.php
includes/upload/UploadBase.php
includes/upload/UploadFromUrl.php
languages/Language.php
languages/classes/LanguageEo.php
languages/classes/LanguageFi.php
languages/classes/LanguageKsh.php
languages/i18n/ast.json
languages/i18n/bcc.json
languages/i18n/be-tarask.json
languages/i18n/bgn.json
languages/i18n/bn.json
languages/i18n/bs.json
languages/i18n/ce.json
languages/i18n/cps.json
languages/i18n/cs.json
languages/i18n/de.json
languages/i18n/dty.json
languages/i18n/en.json
languages/i18n/es.json
languages/i18n/et.json
languages/i18n/eu.json
languages/i18n/fr.json
languages/i18n/gl.json
languages/i18n/gom-latn.json
languages/i18n/gu.json
languages/i18n/he.json
languages/i18n/hi.json
languages/i18n/hil.json
languages/i18n/hr.json
languages/i18n/ilo.json
languages/i18n/it.json
languages/i18n/ka.json
languages/i18n/km.json
languages/i18n/ko.json
languages/i18n/ksh.json
languages/i18n/la.json
languages/i18n/lb.json
languages/i18n/lrc.json
languages/i18n/luz.json [new file with mode: 0644]
languages/i18n/mn.json
languages/i18n/nb.json
languages/i18n/ne.json
languages/i18n/pdc.json
languages/i18n/pl.json
languages/i18n/pt.json
languages/i18n/qqq.json
languages/i18n/ro.json
languages/i18n/roa-tara.json
languages/i18n/ru.json
languages/i18n/sah.json
languages/i18n/sk.json
languages/i18n/sl.json
languages/i18n/sr-ec.json
languages/i18n/sr-el.json
languages/i18n/uz.json
languages/i18n/zh-hans.json
languages/i18n/zh-hant.json
languages/messages/MessagesAeb.php
languages/messages/MessagesAeb_arab.php
languages/messages/MessagesGom.php
languages/messages/MessagesGom_deva.php
languages/messages/MessagesPnt.php
maintenance/checkComposerLockUpToDate.php
maintenance/convertExtensionToRegistration.php
maintenance/exportSites.php
maintenance/importSites.php
maintenance/jsduck/categories.json
maintenance/validateRegistrationFile.php
resources/Resources.php
resources/ResourcesOOUI.php
resources/lib/oojs-ui/i18n/ar.json
resources/lib/oojs-ui/i18n/hu.json
resources/lib/oojs-ui/i18n/it.json
resources/lib/oojs-ui/i18n/krc.json
resources/lib/oojs-ui/i18n/nl.json
resources/lib/oojs-ui/i18n/zh-hant.json
resources/lib/oojs-ui/oojs-ui-apex-noimages.css
resources/lib/oojs-ui/oojs-ui-apex.js
resources/lib/oojs-ui/oojs-ui-mediawiki-noimages.css
resources/lib/oojs-ui/oojs-ui-mediawiki.js
resources/lib/oojs-ui/oojs-ui.js
resources/lib/oojs-ui/themes/mediawiki/icons-moderation.json
resources/lib/oojs-ui/themes/mediawiki/icons.json
resources/lib/oojs-ui/themes/mediawiki/images/icons/check-destructive.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/check-destructive.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-rtl.svg [new file with mode: 0644]
resources/src/jquery/jquery.accessKeyLabel.js
resources/src/jquery/jquery.highlightText.js
resources/src/jquery/jquery.mwExtension.js
resources/src/jquery/jquery.tablesorter.js
resources/src/mediawiki.action/mediawiki.action.edit.stash.js
resources/src/mediawiki.page/mediawiki.page.watch.ajax.js
resources/src/mediawiki/mediawiki.RegExp.js [new file with mode: 0644]
resources/src/mediawiki/mediawiki.htmlform.js
resources/src/mediawiki/mediawiki.inspect.js
resources/src/mediawiki/mediawiki.util.js
tests/phpunit/ResourceLoaderTestCase.php
tests/phpunit/includes/BlockTest.php
tests/phpunit/includes/LinkFilterTest.php
tests/phpunit/includes/MovePageTest.php
tests/phpunit/includes/OutputPageTest.php
tests/phpunit/includes/StatusTest.php
tests/phpunit/includes/TitlePermissionTest.php
tests/phpunit/includes/TitleTest.php
tests/phpunit/includes/api/ApiBlockTest.php
tests/phpunit/includes/api/ApiEditPageTest.php
tests/phpunit/includes/api/ApiMainTest.php
tests/phpunit/includes/api/ApiResultTest.php
tests/phpunit/includes/api/ApiUnblockTest.php
tests/phpunit/includes/api/query/ApiQueryTest.php
tests/phpunit/includes/config/HashConfigTest.php
tests/phpunit/includes/content/JsonContentTest.php
tests/phpunit/includes/db/DatabaseMysqlBaseTest.php
tests/phpunit/includes/diff/ArrayDiffFormatterTest.php
tests/phpunit/includes/exception/MWExceptionTest.php
tests/phpunit/includes/htmlform/HTMLAutoCompleteSelectFieldTest.php
tests/phpunit/includes/libs/ArrayUtilsTest.php
tests/phpunit/includes/libs/ObjectFactoryTest.php
tests/phpunit/includes/libs/XhprofTest.php
tests/phpunit/includes/objectcache/WANObjectCacheTest.php
tests/phpunit/includes/registration/ExtensionProcessorTest.php
tests/phpunit/includes/resourceloader/DerivativeResourceLoaderContextTest.php [new file with mode: 0644]
tests/phpunit/includes/resourceloader/ResourceLoaderFileModuleTest.php
tests/phpunit/includes/resourceloader/ResourceLoaderStartUpModuleTest.php
tests/phpunit/includes/resourceloader/ResourceLoaderTest.php
tests/phpunit/includes/site/HashSiteStoreTest.php
tests/phpunit/includes/site/SiteExporterTest.php
tests/phpunit/includes/site/SiteImporterTest.php
tests/phpunit/includes/title/ForeignTitleTest.php
tests/phpunit/includes/title/MediaWikiPageLinkRendererTest.php
tests/phpunit/includes/utils/IPTest.php
tests/phpunit/languages/classes/LanguageArqTest.php
tests/phpunit/maintenance/backupTextPassTest.php
tests/phpunit/phpunit.php
tests/phpunit/structure/AvailableRightsTest.php
tests/qunit/QUnitTestResources.php
tests/qunit/suites/resources/mediawiki/mediawiki.RegExp.test.js [new file with mode: 0644]
tests/testHelpers.inc
thumb.php

index 3cc1d26..852023b 100644 (file)
@@ -41,6 +41,12 @@ production.
   to be set. If they are both set, the value of rootpage= will be ignored.
 * prop=revision output in enum mode is now sorted by timestamp rather than
   revision ID. This usually won't make any difference.
+* (T102645) Namespace list from meta=siteinfo&siprop=namespaces is now an array
+  with formatversion=2.
+* Various other output from meta=siteinfo will now always be arrays instead of
+  sometimes being numerically-indexed objects with formatversion=2.
+* When errors about users being blocked are returned, they now include
+  information about the relevant block.
 
 === Action API internal changes in 1.26 ===
 
@@ -87,6 +93,10 @@ changes to languages because of Bugzilla reports.
 * wfSuppressWarnings() and wfRestoreWarnings() were split into a separate library,
   mediawiki/at-ease, and are now deprecated. Callers should use
   MediaWiki\suppressWarnings() and MediaWiki\restoreWarnings() directly.
+* The Block class constructor now takes an associative array of parameters
+  instead of many optional positional arguments. Calling the constructor the old
+  way will issue a deprecation warning.
+* The jquery.mwExtension module was deprecated.
 
 
 == Compatibility ==
index 26d954a..504eaf2 100644 (file)
@@ -489,6 +489,7 @@ $wgAutoloadLocalClasses = array(
        'HTMLFileCache' => __DIR__ . '/includes/cache/HTMLFileCache.php',
        'HTMLFloatField' => __DIR__ . '/includes/htmlform/HTMLFloatField.php',
        'HTMLForm' => __DIR__ . '/includes/htmlform/HTMLForm.php',
+       'HTMLFormFieldWithButton' => __DIR__ . '/includes/htmlform/HTMLFormFieldWithButton.php',
        'HTMLFormField' => __DIR__ . '/includes/htmlform/HTMLFormField.php',
        'HTMLFormFieldCloner' => __DIR__ . '/includes/htmlform/HTMLFormFieldCloner.php',
        'HTMLFormFieldRequiredOptionsException' => __DIR__ . '/includes/htmlform/HTMLFormFieldRequiredOptionsException.php',
@@ -502,11 +503,13 @@ $wgAutoloadLocalClasses = array(
        'HTMLSelectField' => __DIR__ . '/includes/htmlform/HTMLSelectField.php',
        'HTMLSelectLimitField' => __DIR__ . '/includes/htmlform/HTMLSelectLimitField.php',
        'HTMLSelectNamespace' => __DIR__ . '/includes/htmlform/HTMLSelectNamespace.php',
+       'HTMLSelectNamespaceWithButton' => __DIR__ . '/includes/htmlform/HTMLSelectNamespaceWithButton.php',
        'HTMLSelectOrOtherField' => __DIR__ . '/includes/htmlform/HTMLSelectOrOtherField.php',
        'HTMLSubmitField' => __DIR__ . '/includes/htmlform/HTMLSubmitField.php',
        'HTMLTagFilter' => __DIR__ . '/includes/htmlform/HTMLTagFilter.php',
        'HTMLTextAreaField' => __DIR__ . '/includes/htmlform/HTMLTextAreaField.php',
        'HTMLTextField' => __DIR__ . '/includes/htmlform/HTMLTextField.php',
+       'HTMLTextFieldWithButton' => __DIR__ . '/includes/htmlform/HTMLTextFieldWithButton.php',
        'HWLDFWordAccumulator' => __DIR__ . '/includes/diff/DairikiDiff.php',
        'HashBagOStuff' => __DIR__ . '/includes/libs/objectcache/HashBagOStuff.php',
        'HashConfig' => __DIR__ . '/includes/config/HashConfig.php',
index ad6399c..257c195 100644 (file)
@@ -21,7 +21,7 @@
                "leafo/lessphp": "0.5.0",
                "liuggio/statsd-php-client": "1.0.12",
                "mediawiki/at-ease": "1.0.0",
-               "oojs/oojs-ui": "0.11.4",
+               "oojs/oojs-ui": "0.11.5",
                "php": ">=5.3.3",
                "psr/log": "1.0.0",
                "wikimedia/cdb": "1.0.1",
index 9949d13..77ae1dc 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-die("Not a valid entry point\n");
+die( "Not a valid entry point\n" );
 /**
  * This file does not hold any code. It is only there so we can generate
  * the doxygen documentation main page.
index b14114d..96892d7 100644 (file)
@@ -124,9 +124,9 @@ class AjaxDispatcher {
                                $result = call_user_func_array( $this->func_name, $this->args );
 
                                if ( $result === false || $result === null ) {
-                                       wfDebug( __METHOD__ . ' ERROR while dispatching '
-                                                       . $this->func_name . "(" . var_export( $this->args, true ) . "): "
-                                                       . "no data returned\n" );
+                                       wfDebug( __METHOD__ . ' ERROR while dispatching ' .
+                                               $this->func_name . "(" . var_export( $this->args, true ) . "): " .
+                                               "no data returned\n" );
 
                                        wfHttpError( 500, 'Internal Error',
                                                "{$this->func_name} returned no data" );
@@ -141,9 +141,9 @@ class AjaxDispatcher {
                                        wfDebug( __METHOD__ . ' dispatch complete for ' . $this->func_name . "\n" );
                                }
                        } catch ( Exception $e ) {
-                               wfDebug( __METHOD__ . ' ERROR while dispatching '
-                                               . $this->func_name . "(" . var_export( $this->args, true ) . "): "
-                                               . get_class( $e ) . ": " . $e->getMessage() . "\n" );
+                               wfDebug( __METHOD__ . ' ERROR while dispatching ' .
+                                       $this->func_name . "(" . var_export( $this->args, true ) . "): " .
+                                       get_class( $e ) . ": " . $e->getMessage() . "\n" );
 
                                if ( !headers_sent() ) {
                                        wfHttpError( 500, 'Internal Error',
index 2984c33..6c2efc2 100644 (file)
@@ -166,12 +166,12 @@ class AjaxResponse {
                        HttpStatus::header( $n );
                }
 
-               header ( "Content-Type: " . $this->mContentType );
+               header( "Content-Type: " . $this->mContentType );
 
                if ( $this->mLastModified ) {
-                       header ( "Last-Modified: " . $this->mLastModified );
+                       header( "Last-Modified: " . $this->mLastModified );
                } else {
-                       header ( "Last-Modified: " . gmdate( "D, d M Y H:i:s" ) . " GMT" );
+                       header( "Last-Modified: " . gmdate( "D, d M Y H:i:s" ) . " GMT" );
                }
 
                if ( $this->mCacheDuration ) {
@@ -193,20 +193,20 @@ class AjaxResponse {
 
                        } else {
                                # Let the client do the caching. Cache is not purged.
-                               header ( "Expires: " . gmdate( "D, d M Y H:i:s", time() + $this->mCacheDuration ) . " GMT" );
-                               header ( "Cache-Control: s-maxage={$this->mCacheDuration}," .
+                               header( "Expires: " . gmdate( "D, d M Y H:i:s", time() + $this->mCacheDuration ) . " GMT" );
+                               header( "Cache-Control: s-maxage={$this->mCacheDuration}," .
                                        "public,max-age={$this->mCacheDuration}" );
                        }
 
                } else {
                        # always expired, always modified
-                       header ( "Expires: Mon, 26 Jul 1997 05:00:00 GMT" );    // Date in the past
-                       header ( "Cache-Control: no-cache, must-revalidate" );  // HTTP/1.1
-                       header ( "Pragma: no-cache" );                          // HTTP/1.0
+                       header( "Expires: Mon, 26 Jul 1997 05:00:00 GMT" );    // Date in the past
+                       header( "Cache-Control: no-cache, must-revalidate" );  // HTTP/1.1
+                       header( "Pragma: no-cache" );                          // HTTP/1.0
                }
 
                if ( $this->mVary ) {
-                       header ( "Vary: " . $this->mVary );
+                       header( "Vary: " . $this->mVary );
                }
        }
 
index d582201..c5a16fc 100644 (file)
@@ -23,15 +23,16 @@ class Block {
        /** @var string */
        public $mReason;
 
-       /** @var bool|string */
+       /** @var string */
        public $mTimestamp;
 
-       /** @var int */
+       /** @var bool */
        public $mAuto;
 
-       /** @var bool|string */
+       /** @var string */
        public $mExpiry;
 
+       /** @var bool */
        public $mHideName;
 
        /** @var int */
@@ -65,10 +66,10 @@ class Block {
        protected $blocker;
 
        /** @var bool */
-       protected $isHardblock = true;
+       protected $isHardblock;
 
        /** @var bool */
-       protected $isAutoblocking = true;
+       protected $isAutoblocking;
 
        # TYPE constants
        const TYPE_USER = 1;
@@ -78,55 +79,84 @@ class Block {
        const TYPE_ID = 5;
 
        /**
-        * @todo FIXME: Don't know what the best format to have for this constructor
-        *   is, but fourteen optional parameters certainly isn't it.
-        * @param string $address
-        * @param int $user
-        * @param int $by
-        * @param string $reason
-        * @param mixed $timestamp
-        * @param int $auto
-        * @param string $expiry
-        * @param int $anonOnly
-        * @param int $createAccount
-        * @param int $enableAutoblock
-        * @param int $hideName
-        * @param int $blockEmail
-        * @param int $allowUsertalk
-        * @param string $byText
+        * Create a new block with specified parameters on a user, IP or IP range.
+        *
+        * @param array $options Parameters of the block:
+        *     address string|User  Target user name, User object, IP address or IP range
+        *     user int             Override target user ID (for foreign users)
+        *     by int               User ID of the blocker
+        *     reason string        Reason of the block
+        *     timestamp string     The time at which the block comes into effect
+        *     auto bool            Is this an automatic block?
+        *     expiry string        Timestamp of expiration of the block or 'infinity'
+        *     anonOnly bool        Only disallow anonymous actions
+        *     createAccount bool   Disallow creation of new accounts
+        *     enableAutoblock bool Enable automatic blocking
+        *     hideName bool        Hide the target user name
+        *     blockEmail bool      Disallow sending emails
+        *     allowUsertalk bool   Allow the target to edit its own talk page
+        *     byText string        Username of the blocker (for foreign users)
+        *
+        * @since 1.26 accepts $options array instead of individual parameters; order
+        * of parameters above reflects the original order
         */
-       function __construct( $address = '', $user = 0, $by = 0, $reason = '',
-               $timestamp = 0, $auto = 0, $expiry = '', $anonOnly = 0, $createAccount = 0, $enableAutoblock = 0,
-               $hideName = 0, $blockEmail = 0, $allowUsertalk = 0, $byText = ''
-       ) {
-               if ( $timestamp === 0 ) {
-                       $timestamp = wfTimestampNow();
-               }
+       function __construct( $options = array() ) {
+               $defaults = array(
+                       'address'         => '',
+                       'user'            => null,
+                       'by'              => null,
+                       'reason'          => '',
+                       'timestamp'       => '',
+                       'auto'            => false,
+                       'expiry'          => '',
+                       'anonOnly'        => false,
+                       'createAccount'   => false,
+                       'enableAutoblock' => false,
+                       'hideName'        => false,
+                       'blockEmail'      => false,
+                       'allowUsertalk'   => false,
+                       'byText'          => '',
+               );
 
-               if ( count( func_get_args() ) > 0 ) {
-                       # Soon... :D
-                       # wfDeprecated( __METHOD__ . " with arguments" );
+               if ( func_num_args() > 1 || !is_array( $options ) ) {
+                       $options = array_combine(
+                               array_slice( array_keys( $defaults ), 0, func_num_args() ),
+                               func_get_args()
+                       );
+                       wfDeprecated( __METHOD__ . ' with multiple arguments', '1.26' );
                }
 
-               $this->setTarget( $address );
-               if ( $this->target instanceof User && $user ) {
-                       $this->forcedTargetID = $user; // needed for foreign users
+               $options += $defaults;
+
+               $this->setTarget( $options['address'] );
+
+               if ( $this->target instanceof User && $options['user'] ) {
+                       # Needed for foreign users
+                       $this->forcedTargetID = $options['user'];
                }
-               if ( $by ) { // local user
-                       $this->setBlocker( User::newFromId( $by ) );
-               } else { // foreign user
-                       $this->setBlocker( $byText );
+
+               if ( $options['by'] ) {
+                       # Local user
+                       $this->setBlocker( User::newFromID( $options['by'] ) );
+               } else {
+                       # Foreign user
+                       $this->setBlocker( $options['byText'] );
                }
-               $this->mReason = $reason;
-               $this->mTimestamp = wfTimestamp( TS_MW, $timestamp );
-               $this->mAuto = $auto;
-               $this->isHardblock( !$anonOnly );
-               $this->prevents( 'createaccount', $createAccount );
-               $this->mExpiry = wfGetDB( DB_SLAVE )->decodeExpiry( $expiry );
-               $this->isAutoblocking( $enableAutoblock );
-               $this->mHideName = $hideName;
-               $this->prevents( 'sendemail', $blockEmail );
-               $this->prevents( 'editownusertalk', !$allowUsertalk );
+
+               $this->mReason = $options['reason'];
+               $this->mTimestamp = wfTimestamp( TS_MW, $options['timestamp'] );
+               $this->mExpiry = wfGetDB( DB_SLAVE )->decodeExpiry( $options['expiry'] );
+
+               # Boolean settings
+               $this->mAuto = (bool)$options['auto'];
+               $this->mHideName = (bool)$options['hideName'];
+               $this->isHardblock( !$options['anonOnly'] );
+               $this->isAutoblocking( (bool)$options['enableAutoblock'] );
+
+               # Prevention measures
+               $this->prevents( 'sendemail', (bool)$options['blockEmail'] );
+               $this->prevents( 'editownusertalk', !$options['allowUsertalk'] );
+               $this->prevents( 'createaccount', (bool)$options['createAccount'] );
 
                $this->mFromMaster = false;
        }
@@ -1109,7 +1139,7 @@ class Block {
                $blocks = array();
                foreach ( $rows as $row ) {
                        $block = self::newFromRow( $row );
-                       if ( !$block->deleteIfExpired()  ) {
+                       if ( !$block->deleteIfExpired() ) {
                                $blocks[] = $block;
                        }
                }
index 66079c0..e2c31a6 100644 (file)
@@ -329,7 +329,7 @@ class CategoryViewer extends ContextSource {
                                        'category' => array( 'LEFT JOIN', array(
                                                'cat_title = page_title',
                                                'page_namespace' => NS_CATEGORY
-                                       ))
+                                       ) )
                                )
                        );
 
index d278c59..39f739d 100644 (file)
@@ -472,13 +472,13 @@ $wgImgAuthUrlPathMap = array();
  *
  * These settings describe a foreign MediaWiki installation. They are optional, and will be ignored
  * for local repositories:
- *   - descBaseUrl       URL of image description pages, e.g. http://en.wikipedia.org/wiki/File:
+ *   - descBaseUrl       URL of image description pages, e.g. https://en.wikipedia.org/wiki/File:
  *   - scriptDirUrl      URL of the MediaWiki installation, equivalent to $wgScriptPath, e.g.
- *                       http://en.wikipedia.org/w
+ *                       https://en.wikipedia.org/w
  *   - scriptExtension   Script extension of the MediaWiki installation, equivalent to
  *                       $wgScriptExtension, e.g. .php5 defaults to .php
  *
- *   - articleUrl        Equivalent to $wgArticlePath, e.g. http://en.wikipedia.org/wiki/$1
+ *   - articleUrl        Equivalent to $wgArticlePath, e.g. https://en.wikipedia.org/wiki/$1
  *   - fetchDescription  Fetch the text of the remote file description page. Equivalent to
  *                       $wgFetchCommonsDescriptions.
  *   - abbrvThreshold    File names over this size will use the short form of thumbnail names.
@@ -709,7 +709,7 @@ $wgMaxUploadSize = 1024 * 1024 * 100; # 100MB
  *
  * @par Example:
  * @code
- * $wgUploadNavigationUrl = 'http://commons.wikimedia.org/wiki/Special:Upload';
+ * $wgUploadNavigationUrl = 'https://commons.wikimedia.org/wiki/Special:Upload';
  * @endcode
  */
 $wgUploadNavigationUrl = false;
@@ -769,7 +769,7 @@ $wgHashedSharedUploadDirectory = true;
  *
  * Please specify the namespace, as in the example below.
  */
-$wgRepositoryBaseUrl = "http://commons.wikimedia.org/wiki/File:";
+$wgRepositoryBaseUrl = "https://commons.wikimedia.org/wiki/File:";
 
 /**
  * This is the list of preferred extensions for uploading files. Uploading files
@@ -2797,14 +2797,14 @@ $wgBrowserBlackList = array(
         * - Mozilla/4.0 (compatible; MSIE 5.23; Mac_PowerPC)
         * - [...]
         *
-        * @link http://en.wikipedia.org/w/index.php?diff=12356041&oldid=12355864
-        * @link http://en.wikipedia.org/wiki/Template%3AOS9
+        * @link https://en.wikipedia.org/w/index.php?diff=12356041&oldid=12355864
+        * @link https://en.wikipedia.org/wiki/Template%3AOS9
         */
        '/^Mozilla\/4\.0 \(compatible; MSIE \d+\.\d+; Mac_PowerPC\)/',
 
        /**
         * Google wireless transcoder, seems to eat a lot of chars alive
-        * http://it.wikipedia.org/w/index.php?title=Luciano_Ligabue&diff=prev&oldid=8857361
+        * https://it.wikipedia.org/w/index.php?title=Luciano_Ligabue&diff=prev&oldid=8857361
         */
        '/^Mozilla\/4\.0 \(compatible; MSIE 6.0; Windows NT 5.0; Google Wireless Transcoder;\)/'
 );
@@ -4524,7 +4524,7 @@ $wgUserrightsInterwikiDelimiter = '@';
 /**
  * This is to let user authenticate using https when they come from http.
  * Based on an idea by George Herbert on wikitech-l:
- * http://lists.wikimedia.org/pipermail/wikitech-l/2010-October/050039.html
+ * https://lists.wikimedia.org/pipermail/wikitech-l/2010-October/050039.html
  * @since 1.17
  */
 $wgSecureLogin = false;
@@ -5051,7 +5051,7 @@ $wgAccountCreationThrottle = 0;
  * There's no administrator override on-wiki, so be careful what you set. :)
  * May be an array of regexes or a single string for backwards compatibility.
  *
- * @see http://en.wikipedia.org/wiki/Regular_expression
+ * @see https://en.wikipedia.org/wiki/Regular_expression
  *
  * @note Each regex needs a beginning/end delimiter, eg: # or /
  */
@@ -5582,7 +5582,7 @@ $wgProfilePerHost = null;
  *
  * The host should be running a daemon which can be obtained from MediaWiki
  * Git at:
- * http://git.wikimedia.org/tree/operations%2Fsoftware.git/master/udpprofile
+ * https://git.wikimedia.org/tree/operations%2Fsoftware.git/master/udpprofile
  *
  * @deprecated set $wgProfiler['udphost'] instead
  */
index ee67d01..4e470e9 100644 (file)
@@ -1037,7 +1037,6 @@ class EditPage {
                                $undo = $wgRequest->getInt( 'undo' );
 
                                if ( $undo > 0 && $undoafter > 0 ) {
-
                                        $undorev = Revision::newFromId( $undo );
                                        $oldrev = Revision::newFromId( $undoafter );
 
@@ -1046,8 +1045,8 @@ class EditPage {
                                        # Otherwise, $content will be left as-is.
                                        if ( !is_null( $undorev ) && !is_null( $oldrev ) &&
                                                !$undorev->isDeleted( Revision::DELETED_TEXT ) &&
-                                               !$oldrev->isDeleted( Revision::DELETED_TEXT ) ) {
-
+                                               !$oldrev->isDeleted( Revision::DELETED_TEXT )
+                                       ) {
                                                $content = $this->mArticle->getUndoContent( $undorev, $oldrev );
 
                                                if ( $content === false ) {
@@ -1242,9 +1241,9 @@ class EditPage {
 
                        if ( !$converted ) {
                                //TODO: somehow show a warning to the user!
-                               wfDebug( "Attempt to preload incompatible content: "
-                                               . "can't convert " . $content->getModel()
-                                               . " to " . $handler->getModelID() );
+                               wfDebug( "Attempt to preload incompatible content: " .
+                                       "can't convert " . $content->getModel() .
+                                       " to " . $handler->getModelID() );
 
                                return $handler->makeEmptyContent();
                        }
index 7a9b27b..e2e0666 100644 (file)
@@ -1756,7 +1756,7 @@ function wfMsgExt( $key, $options ) {
        }
 
        if ( in_array( 'escape', $options, true ) ) {
-               $string = htmlspecialchars ( $string );
+               $string = htmlspecialchars( $string );
        } elseif ( in_array( 'escapenoentities', $options, true ) ) {
                $string = Sanitizer::escapeHtmlAllowEntities( $string );
        }
@@ -2758,7 +2758,7 @@ function wfShellExec( $cmd, &$retval = null, $environ = array(),
 
        $useLogPipe = false;
        if ( is_executable( '/bin/bash' ) ) {
-               $time = intval ( isset( $limits['time'] ) ? $limits['time'] : $wgMaxShellTime );
+               $time = intval( isset( $limits['time'] ) ? $limits['time'] : $wgMaxShellTime );
                if ( isset( $limits['walltime'] ) ) {
                        $wallTime = intval( $limits['walltime'] );
                } elseif ( isset( $limits['time'] ) ) {
@@ -2766,8 +2766,8 @@ function wfShellExec( $cmd, &$retval = null, $environ = array(),
                } else {
                        $wallTime = intval( $wgMaxShellWallClockTime );
                }
-               $mem = intval ( isset( $limits['memory'] ) ? $limits['memory'] : $wgMaxShellMemory );
-               $filesize = intval ( isset( $limits['filesize'] ) ? $limits['filesize'] : $wgMaxShellFileSize );
+               $mem = intval( isset( $limits['memory'] ) ? $limits['memory'] : $wgMaxShellMemory );
+               $filesize = intval( isset( $limits['filesize'] ) ? $limits['filesize'] : $wgMaxShellFileSize );
 
                if ( $time > 0 || $mem > 0 || $filesize > 0 || $wallTime > 0 ) {
                        $cmd = '/bin/bash ' . escapeshellarg( "$IP/includes/limit.sh" ) . ' ' .
index 214bc4e..6a0bfd0 100644 (file)
@@ -394,9 +394,9 @@ class WikiImporter {
                        $countKey = 'title_' . $title->getPrefixedText();
                        $countable = $page->isCountable( $editInfo );
                        if ( array_key_exists( $countKey, $this->countableCache ) &&
-                               $countable != $this->countableCache[ $countKey ] ) {
+                               $countable != $this->countableCache[$countKey] ) {
                                DeferredUpdates::addUpdate( SiteStatsUpdate::factory( array(
-                                       'articles' => ( (int)$countable - (int)$this->countableCache[ $countKey ] )
+                                       'articles' => ( (int)$countable - (int)$this->countableCache[$countKey] )
                                ) ) );
                        }
                }
@@ -611,7 +611,7 @@ class WikiImporter {
                        $tag = $this->reader->localName;
 
                        if ( $tag == 'namespace' ) {
-                               $this->foreignNamespaces[ $this->nodeAttribute( 'key' ) ] =
+                               $this->foreignNamespaces[$this->nodeAttribute( 'key' )] =
                                        $this->nodeContents();
                        } elseif ( in_array( $tag, $normalFields ) ) {
                                $siteInfo[$tag] = $this->nodeContents();
index 0d907b7..3b06525 100644 (file)
@@ -617,12 +617,14 @@ class MimeMagic {
        /**
         * Guess the MIME type from the file contents.
         *
+        * @todo Remove $ext param
+        *
         * @param string $file
         * @param mixed $ext
         * @return bool|string
         * @throws MWException
         */
-       private function doGuessMimeType( $file, $ext ) { // TODO: remove $ext param
+       private function doGuessMimeType( $file, $ext ) {
                // Read a chunk of the file
                MediaWiki\suppressWarnings();
                $f = fopen( $file, 'rb' );
index b3720a4..f02f752 100644 (file)
@@ -617,7 +617,8 @@ class OutputPage extends ContextSource {
                        $module = $resourceLoader->getModule( $val );
 
                        if ( $module instanceof ResourceLoaderModule && $module->isPositionDefault() ) {
-                               $warning = __METHOD__ . ': style module should define its position explicitly: ' . $val . ' ' . get_class( $module );
+                               $warning = __METHOD__ . ': style module should define its position explicitly: ' .
+                                       $val . ' ' . get_class( $module );
                                wfDebugLog( 'resourceloader', $warning );
                                wfLogWarning( $warning );
                        }
@@ -2281,7 +2282,6 @@ class OutputPage extends ContextSource {
                if ( $this->mArticleBodyOnly ) {
                        echo $this->mBodytext;
                } else {
-
                        $sk = $this->getSkin();
                        // add skin specific modules
                        $modules = $sk->getDefaultModules();
index 9b0ada8..ecb2294 100644 (file)
@@ -1394,7 +1394,7 @@ class Preferences {
                                }
 
                                # Max is +14:00 and min is -12:00, see:
-                               # http://en.wikipedia.org/wiki/Timezone
+                               # https://en.wikipedia.org/wiki/Timezone
                                $minDiff = min( $minDiff, 840 );  # 14:00
                                $minDiff = max( $minDiff, - 720 ); # -12:00
                                return 'Offset|' . $minDiff;
index 9bb4d16..5939715 100644 (file)
@@ -194,8 +194,8 @@ class Revision implements IDBAccessObject {
 
                if ( !isset( $attribs['title'] )
                        && isset( $row->ar_namespace )
-                       && isset( $row->ar_title ) ) {
-
+                       && isset( $row->ar_title )
+               ) {
                        $attribs['title'] = Title::makeTitle( $row->ar_namespace, $row->ar_title );
                }
 
index 677d5a4..2340cd9 100644 (file)
@@ -374,7 +374,6 @@ class Sanitizer {
                // are changed (like in the screwed up test system) we will re-initialise the settings.
                $globalContext = implode( '-', compact( 'wgAllowMicrodataAttributes', 'wgAllowImageTag' ) );
                if ( !$staticInitialised || $staticInitialised != $globalContext ) {
-
                        $htmlpairsStatic = array( # Tags that must be closed
                                'b', 'bdi', 'del', 'i', 'ins', 'u', 'font', 'big', 'small', 'sub', 'sup', 'h1',
                                'h2', 'h3', 'h4', 'h5', 'h6', 'cite', 'code', 'em', 's',
index 70c935d..a97cfa6 100644 (file)
@@ -236,9 +236,7 @@ if ( $wgUseInstantCommons ) {
        $wgForeignFileRepos[] = array(
                'class' => 'ForeignAPIRepo',
                'name' => 'wikimediacommons',
-               'apibase' => WebRequest::detectProtocol() === 'https' ?
-                       'https://commons.wikimedia.org/w/api.php' :
-                       'http://commons.wikimedia.org/w/api.php',
+               'apibase' => 'https://commons.wikimedia.org/w/api.php',
                'hashLevels' => 2,
                'fetchDescription' => true,
                'descriptionCacheExpiry' => 43200,
@@ -365,13 +363,13 @@ if ( $wgMetaNamespace === false ) {
 
 // Default value is 2000 or the suhosin limit if it is between 1 and 2000
 if ( $wgResourceLoaderMaxQueryLength === false ) {
-       $suhosinMaxValueLength = (int) ini_get( 'suhosin.get.max_value_length' );
+       $suhosinMaxValueLength = (int)ini_get( 'suhosin.get.max_value_length' );
        if ( $suhosinMaxValueLength > 0 && $suhosinMaxValueLength < 2000 ) {
                $wgResourceLoaderMaxQueryLength = $suhosinMaxValueLength;
        } else {
                $wgResourceLoaderMaxQueryLength = 2000;
        }
-       unset($suhosinMaxValueLength);
+       unset( $suhosinMaxValueLength );
 }
 
 /**
@@ -431,7 +429,7 @@ if ( !$wgHtml5Version && $wgAllowRdfaAttributes ) {
 }
 
 // Blacklisted file extensions shouldn't appear on the "allowed" list
-$wgFileExtensions = array_values( array_diff ( $wgFileExtensions, $wgFileBlacklist ) );
+$wgFileExtensions = array_values( array_diff( $wgFileExtensions, $wgFileBlacklist ) );
 
 if ( $wgInvalidateCacheOnLocalSettingsChange ) {
        MediaWiki\suppressWarnings();
index bac4db6..3f73ae3 100644 (file)
@@ -78,7 +78,7 @@ class StreamFile {
        ) {
                if ( !is_array( $info ) ) {
                        if ( $sendErrors ) {
-                               HttpStatus::header( 404  );
+                               HttpStatus::header( 404 );
                                header( 'Cache-Control: no-cache' );
                                header( 'Content-Type: text/html; charset=utf-8' );
                                $encFile = htmlspecialchars( $path );
index 3de70fa..d53d593 100644 (file)
@@ -130,7 +130,8 @@ class TemplateParser {
                if ( !is_callable( $renderer ) ) {
                        throw new RuntimeException( "Requested template, {$templateName}, is not callable" );
                }
-               return $this->renderers[$templateName] = $renderer;
+               $this->renderers[$templateName] = $renderer;
+               return $renderer;
        }
 
        /**
index 10763ea..961520a 100644 (file)
@@ -330,7 +330,7 @@ class User implements IDBAccessObject {
         *
         * @param integer $flags User::READ_* constant bitfield
         */
-       public function load( $flags = self::READ_LATEST ) {
+       public function load( $flags = self::READ_NORMAL ) {
                if ( $this->mLoadedItems === true ) {
                        return;
                }
@@ -344,9 +344,13 @@ class User implements IDBAccessObject {
                                $this->loadDefaults();
                                break;
                        case 'name':
-                               // @TODO: this gets the ID from a slave, assuming renames
-                               // are rare. This should be controllable and more consistent.
-                               $this->mId = self::idFromName( $this->mName );
+                               // Make sure this thread sees its own changes
+                               if ( wfGetLB()->hasOrMadeRecentMasterChanges() ) {
+                                       $flags |= self::READ_LATEST;
+                                       $this->queryFlagsUsed = $flags;
+                               }
+
+                               $this->mId = self::idFromName( $this->mName, $flags );
                                if ( !$this->mId ) {
                                        // Nonexistent user placeholder object
                                        $this->loadDefaults( $this->mName );
@@ -380,21 +384,19 @@ class User implements IDBAccessObject {
                        return false;
                }
 
-               // Try cache
-               $cache = $this->loadFromCache();
-               if ( !$cache ) {
+               // Try cache (unless this needs to lock the DB).
+               // NOTE: if this thread called saveSettings(), the cache was cleared.
+               if ( ( $flags & self::READ_LOCKING ) || !$this->loadFromCache() ) {
                        wfDebug( "User: cache miss for user {$this->mId}\n" );
-                       // Load from DB
+                       // Load from DB (make sure this thread sees its own changes)
+                       if ( wfGetLB()->hasOrMadeRecentMasterChanges() ) {
+                               $flags |= self::READ_LATEST;
+                       }
                        if ( !$this->loadFromDatabase( $flags ) ) {
                                // Can't load from ID, user is anonymous
                                return false;
                        }
-                       if ( $flags & self::READ_LATEST ) {
-                               // Only save master data back to the cache to keep it consistent.
-                               // @TODO: save it anyway and have callers specifiy $flags and have
-                               // load() called as needed. That requires updating MANY callers...
-                               $this->saveToCache();
-                       }
+                       $this->saveToCache();
                }
 
                $this->mLoadedItems = true;
@@ -415,9 +417,8 @@ class User implements IDBAccessObject {
                        return false;
                }
 
-               $cache = ObjectCache::getMainWANInstance();
                $key = wfMemcKey( 'user', 'id', $this->mId );
-               $data = $cache->get( $key );
+               $data = ObjectCache::getMainWANInstance()->get( $key );
                if ( !is_array( $data ) || $data['mVersion'] < self::VERSION ) {
                        // Object is expired
                        return false;
@@ -448,15 +449,6 @@ class User implements IDBAccessObject {
                        return;
                }
 
-               $cache = ObjectCache::getMainWANInstance();
-
-               // The cache needs good consistency due to its high TTL, so the user
-               // should have been loaded from the master to avoid lag amplification.
-               if ( !( $this->queryFlagsUsed & self::READ_LATEST ) ) {
-                       wfWarn( "Cannot cache slave-loaded User object with ID '{$this->mId}'." );
-                       return;
-               }
-
                $data = array();
                foreach ( self::$mCacheVars as $name ) {
                        $data[$name] = $this->$name;
@@ -464,7 +456,7 @@ class User implements IDBAccessObject {
                $data['mVersion'] = self::VERSION;
                $key = wfMemcKey( 'user', 'id', $this->mId );
 
-               $cache->set( $key, $data );
+               ObjectCache::getMainWANInstance()->set( $key, $data, 3600 );
        }
 
        /** @name newFrom*() static factory methods */
@@ -598,9 +590,10 @@ class User implements IDBAccessObject {
        /**
         * Get database id given a user name
         * @param string $name Username
+        * @param integer $flags User::READ_* constant bitfield
         * @return int|null The corresponding user's ID, or null if user is nonexistent
         */
-       public static function idFromName( $name ) {
+       public static function idFromName( $name, $flags = self::READ_NORMAL ) {
                $nt = Title::makeTitleSafe( NS_USER, $name );
                if ( is_null( $nt ) ) {
                        // Illegal name
@@ -611,8 +604,11 @@ class User implements IDBAccessObject {
                        return self::$idCacheByName[$name];
                }
 
-               $dbr = wfGetDB( DB_SLAVE );
-               $s = $dbr->selectRow(
+               $db = ( $flags & self::READ_LATEST )
+                       ? wfGetDB( DB_MASTER )
+                       : wfGetDB( DB_SLAVE );
+
+               $s = $db->selectRow(
                        'user',
                        array( 'user_id' ),
                        array( 'user_name' => $nt->getText() ),
@@ -1141,7 +1137,6 @@ class User implements IDBAccessObject {
                }
 
                $proposedUser = User::newFromId( $sId );
-               $proposedUser->load( self::READ_LATEST );
                if ( !$proposedUser->isLoggedIn() ) {
                        // Not a valid ID
                        return false;
@@ -2336,10 +2331,9 @@ class User implements IDBAccessObject {
 
                if ( $this->mId ) {
                        if ( $this->mQuickTouched === null ) {
-                               $cache = ObjectCache::getMainWANInstance();
                                $key = wfMemcKey( 'user-quicktouched', 'id', $this->mId );
 
-                               $timestamp = $cache->getCheckKeyTime( $key );
+                               $timestamp = ObjectCache::getMainWANInstance()->getCheckKeyTime( $key );
                                if ( $timestamp ) {
                                        $this->mQuickTouched = wfTimestamp( TS_MW, (int)$timestamp );
                                } else {
@@ -3619,12 +3613,6 @@ class User implements IDBAccessObject {
                        return; // anon
                }
 
-               // This method is for updating existing users, so the user should
-               // have been loaded from the master to begin with to avoid problems.
-               if ( !( $this->queryFlagsUsed & self::READ_LATEST ) ) {
-                       wfWarn( "Attempting to save slave-loaded User object with ID '{$this->mId}'." );
-               }
-
                // Get a new user_touched that is higher than the old one.
                // This will be used for a CAS check as a last-resort safety
                // check against race conditions and slave lag.
@@ -3660,8 +3648,9 @@ class User implements IDBAccessObject {
                        // Maybe the problem was a missed cache update; clear it to be safe
                        $this->clearSharedCache();
                        // User was changed in the meantime or loaded with stale data
+                       $from = ( $this->queryFlagsUsed & self::READ_LATEST ) ? 'master' : 'slave';
                        MWExceptionHandler::logException( new MWException(
-                               "CAS update failed on user_touched for user ID '{$this->mId}';" .
+                               "CAS update failed on user_touched for user ID '{$this->mId}' (read from $from);" .
                                "the version of the user to be saved is older than the current version."
                        ) );
 
index 6bdcc87..b9c9b86 100644 (file)
@@ -691,7 +691,7 @@ class WebRequest {
                        // This shouldn't happen!
                        throw new MWException( "Web server doesn't provide either " .
                                "REQUEST_URI, HTTP_X_ORIGINAL_URL or SCRIPT_NAME. Report details " .
-                               "of your web server configuration to http://bugzilla.wikimedia.org/" );
+                               "of your web server configuration to https://phabricator.wikimedia.org/" );
                }
                // User-agents should not send a fragment with the URI, but
                // if they do, and the web server passes it on to us, we
@@ -774,7 +774,7 @@ class WebRequest {
         *
         * @param int $deflimit Limit to use if no input and the user hasn't set the option.
         * @param string $optionname To specify an option other than rclimit to pull from.
-        * @return array First element is limit, second is offset
+        * @return int[] First element is limit, second is offset
         */
        public function getLimitOffset( $deflimit = 50, $optionname = 'rclimit' ) {
                global $wgUser;
index bc28c8e..559cfaf 100644 (file)
@@ -37,7 +37,6 @@ class UnprotectAction extends ProtectAction {
        }
 
        public function show() {
-
                $this->page->unprotect();
        }
 }
index 55f9677..4b76e65 100644 (file)
@@ -1056,7 +1056,6 @@ abstract class ApiBase extends ContextSource {
         */
        protected function validateLimit( $paramName, &$value, $min, $max, $botMax = null, $enforceLimits = false ) {
                if ( !is_null( $min ) && $value < $min ) {
-
                        $msg = $this->encodeParamName( $paramName ) . " may not be less than $min (set to $value)";
                        $this->warnOrDie( $msg, $enforceLimits );
                        $value = $min;
@@ -2646,7 +2645,6 @@ abstract class ApiBase extends ContextSource {
                wfDeprecated( __METHOD__, '1.25' );
                $params = $this->getFinalParams( ApiBase::GET_VALUES_FOR_HELP );
                if ( $params ) {
-
                        $paramsDescription = $this->getFinalParamDescription();
                        $msg = '';
                        $paramPrefix = "\n" . str_repeat( ' ', 24 );
index 26b5f0e..6adfc1a 100644 (file)
@@ -52,7 +52,13 @@ class ApiBlock extends ApiBase {
                if ( $user->isBlocked() ) {
                        $status = SpecialBlock::checkUnblockSelf( $params['user'], $user );
                        if ( $status !== true ) {
-                               $this->dieUsageMsg( array( $status ) );
+                               $msg = $this->parseMsg( $status );
+                               $this->dieUsage(
+                                       $msg['info'],
+                                       $msg['code'],
+                                       0,
+                                       array( 'blockinfo' => ApiQueryUserInfo::getBlockInfo( $user->getBlock() ) )
+                               );
                        }
                }
 
index 57f96c6..b3a543a 100644 (file)
@@ -48,7 +48,12 @@ class ApiCreateAccount extends ApiBase {
                        );
                }
                if ( $this->getUser()->isBlockedFromCreateAccount() ) {
-                       $this->dieUsage( 'You cannot create a new account because you are blocked', 'blocked' );
+                       $this->dieUsage(
+                               'You cannot create a new account because you are blocked',
+                               'blocked',
+                               0,
+                               array( 'blockinfo' => ApiQueryUserInfo::getBlockInfo( $this->getUser()->getBlock() ) )
+                       );
                }
 
                $params = $this->extractRequestParams();
index aad71b9..e70b8f0 100644 (file)
@@ -130,7 +130,30 @@ class ApiEditPage extends ApiBase {
                        $errors = array_merge( $errors, $titleObj->getUserPermissionsErrors( 'create', $user ) );
                }
                if ( count( $errors ) ) {
-                       $this->dieUsageMsg( $errors[0] );
+                       if ( is_array( $errors[0] ) ) {
+                               switch ( $errors[0][0] ) {
+                                       case 'blockedtext':
+                                               $this->dieUsage(
+                                                       'You have been blocked from editing',
+                                                       'blocked',
+                                                       0,
+                                                       array( 'blockinfo' => ApiQueryUserInfo::getBlockInfo( $user->getBlock() ) )
+                                               );
+                                               break;
+                                       case 'autoblockedtext':
+                                               $this->dieUsage(
+                                                       'Your IP address has been blocked automatically, because it was used by a blocked user',
+                                                       'autoblocked',
+                                                       0,
+                                                       array( 'blockinfo' => ApiQueryUserInfo::getBlockInfo( $user->getBlock() ) )
+                                               );
+                                               break;
+                                       default:
+                                               $this->dieUsageMsg( $errors[0] );
+                               }
+                       } else {
+                               $this->dieUsageMsg( $errors[0] );
+                       }
                }
 
                $toMD5 = $params['text'];
@@ -246,7 +269,7 @@ class ApiEditPage extends ApiBase {
                                $titleObj->getNextRevisionID( $undoafterRev->getID() ) == $params['undo']
                        ) {
                                $params['summary'] = wfMessage( 'undo-summary' )
-                                       ->params ( $params['undo'], $undoRev->getUserText() )->inContentLanguage()->text();
+                                       ->params( $params['undo'], $undoRev->getUserText() )->inContentLanguage()->text();
                        }
                }
 
@@ -450,7 +473,12 @@ class ApiEditPage extends ApiBase {
                                $this->dieUsageMsg( array( 'spamdetected', $result['spam'] ) );
 
                        case EditPage::AS_BLOCKED_PAGE_FOR_USER:
-                               $this->dieUsageMsg( 'blockedtext' );
+                               $this->dieUsage(
+                                       'You have been blocked from editing',
+                                       'blocked',
+                                       0,
+                                       array( 'blockinfo' => ApiQueryUserInfo::getBlockInfo( $user->getBlock() ) )
+                               );
 
                        case EditPage::AS_MAX_ARTICLE_SIZE_EXCEEDED:
                        case EditPage::AS_CONTENT_TOO_BIG:
index 966af53..6112534 100644 (file)
@@ -162,7 +162,7 @@ class ApiExpandTemplates extends ApiBase {
                                        !isset( $prop['jsconfigvars'] ) && !isset( $prop['encodedjsconfigvars'] ) ) {
                                        $this->setWarning( "Property 'modules' was set but not 'jsconfigvars' " .
                                                "or 'encodedjsconfigvars'. Configuration variables are necessary " .
-                                               "for proper module usage.");
+                                               "for proper module usage." );
                                }
                        }
                }
index fa0bac3..4c7d720 100644 (file)
@@ -72,7 +72,7 @@ class ApiFormatXml extends ApiFormatBase {
                        'Custom' => function ( &$data, &$metadata ) {
                                if ( isset( $metadata[ApiResult::META_TYPE] ) ) {
                                        // We want to use non-BC for BCassoc to force outputting of _idx.
-                                       switch( $metadata[ApiResult::META_TYPE] ) {
+                                       switch ( $metadata[ApiResult::META_TYPE] ) {
                                                case 'BCassoc':
                                                        $metadata[ApiResult::META_TYPE] = 'assoc';
                                                        break;
index d8b390c..c4e7022 100644 (file)
@@ -144,6 +144,10 @@ class ApiLogin extends ApiBase {
                        case LoginForm::CREATE_BLOCKED:
                                $result['result'] = 'CreateBlocked';
                                $result['details'] = 'Your IP address is blocked from account creation';
+                               $result = array_merge(
+                                       $result,
+                                       ApiQueryUserInfo::getBlockInfo( $context->getUser()->getBlock() )
+                               );
                                break;
 
                        case LoginForm::THROTTLED:
@@ -154,6 +158,10 @@ class ApiLogin extends ApiBase {
 
                        case LoginForm::USER_BLOCKED:
                                $result['result'] = 'Blocked';
+                               $result = array_merge(
+                                       $result,
+                                       ApiQueryUserInfo::getBlockInfo( User::newFromName( $params['name'] )->getBlock() )
+                               );
                                break;
 
                        case LoginForm::ABORTED:
index 8a4ef49..2ab37ad 100644 (file)
@@ -337,7 +337,7 @@ class ApiParamInfo extends ApiBase {
                                                        ? '' : ( $module->getModulePath() . '+' );
                                                $item['submodules'] = array();
                                                foreach ( $item['type'] as $v ) {
-                                                       $item['submodules'][$v] = $prefix.$v;
+                                                       $item['submodules'][$v] = $prefix . $v;
                                                }
                                        }
                                        if ( isset( $settings[ApiBase::PARAM_SUBMODULE_PARAM_PREFIX] ) ) {
index 1833434..fa6f30e 100644 (file)
@@ -376,7 +376,7 @@ class ApiParse extends ApiBase {
                        !isset( $prop['jsconfigvars'] ) && !isset( $prop['encodedjsconfigvars'] ) ) {
                        $this->setWarning( "Property 'modules' was set but not 'jsconfigvars' " .
                                "or 'encodedjsconfigvars'. Configuration variables are necessary " .
-                               "for proper module usage.");
+                               "for proper module usage." );
                }
 
                if ( isset( $prop['indicators'] ) ) {
index 90af15a..349e7fa 100644 (file)
@@ -238,7 +238,7 @@ class ApiQuerySearch extends ApiQueryGeneratorBase {
 
                                                // Add item to results and see whether it fits
                                                $fit = $apiResult->addValue(
-                                                       array( 'query', 'interwiki' . $this->getModuleName(), $result->getInterwikiPrefix()  ),
+                                                       array( 'query', 'interwiki' . $this->getModuleName(), $result->getInterwikiPrefix() ),
                                                        null,
                                                        $vals
                                                );
index 1dc9985..a112cf0 100644 (file)
@@ -297,6 +297,7 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                        }
                }
 
+               ApiResult::setArrayType( $data, 'BCarray' );
                ApiResult::setIndexedTagName( $data, 'ns' );
 
                return $this->getResult()->addValue( 'query', $property, $data );
@@ -511,6 +512,7 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                                        $groups = array_intersect( $rights[$group], $allGroups );
                                        if ( $groups ) {
                                                $arr[$type] = $groups;
+                                               ApiResult::setArrayType( $arr[$type], 'BCarray' );
                                                ApiResult::setIndexedTagName( $arr[$type], 'group' );
                                        }
                                }
@@ -682,6 +684,11 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                        'semiprotectedlevels' => $config->get( 'SemiprotectedRestrictionLevels' ),
                );
 
+               ApiResult::setArrayType( $data['types'], 'BCarray' );
+               ApiResult::setArrayType( $data['levels'], 'BCarray' );
+               ApiResult::setArrayType( $data['cascadinglevels'], 'BCarray' );
+               ApiResult::setArrayType( $data['semiprotectedlevels'], 'BCarray' );
+
                ApiResult::setIndexedTagName( $data['types'], 'type' );
                ApiResult::setIndexedTagName( $data['levels'], 'level' );
                ApiResult::setIndexedTagName( $data['cascadinglevels'], 'level' );
@@ -741,6 +748,7 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                global $wgParser;
                $wgParser->firstCallInit();
                $tags = array_map( array( $this, 'formatParserTags' ), $wgParser->getTags() );
+               ApiResult::setArrayType( $tags, 'BCarray' );
                ApiResult::setIndexedTagName( $tags, 't' );
 
                return $this->getResult()->addValue( 'query', $property, $tags );
@@ -750,6 +758,7 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                global $wgParser;
                $wgParser->firstCallInit();
                $hooks = $wgParser->getFunctionHooks();
+               ApiResult::setArrayType( $hooks, 'BCarray' );
                ApiResult::setIndexedTagName( $hooks, 'h' );
 
                return $this->getResult()->addValue( 'query', $property, $hooks );
@@ -757,6 +766,7 @@ class ApiQuerySiteinfo extends ApiQueryBase {
 
        public function appendVariables( $property ) {
                $variables = MagicWord::getVariableIDs();
+               ApiResult::setArrayType( $variables, 'BCarray' );
                ApiResult::setIndexedTagName( $variables, 'v' );
 
                return $this->getResult()->addValue( 'query', $property, $variables );
@@ -765,6 +775,7 @@ class ApiQuerySiteinfo extends ApiQueryBase {
        public function appendProtocols( $property ) {
                // Make a copy of the global so we don't try to set the _element key of it - bug 45130
                $protocols = array_values( $this->getConfig()->get( 'UrlProtocols' ) );
+               ApiResult::setArrayType( $protocols, 'BCarray' );
                ApiResult::setIndexedTagName( $protocols, 'p' );
 
                return $this->getResult()->addValue( 'query', $property, $protocols );
@@ -792,6 +803,7 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                                'subscribers' => array_map( array( 'SpecialVersion', 'arrayToString' ), $subscribers ),
                        );
 
+                       ApiResult::setArrayType( $arr['subscribers'], 'BCarray' );
                        ApiResult::setIndexedTagName( $arr['subscribers'], 's' );
                        $data[] = $arr;
                }
index 4302ef3..e003e31 100644 (file)
@@ -51,9 +51,32 @@ class ApiQueryUserInfo extends ApiQueryBase {
                $result->addValue( 'query', $this->getModuleName(), $r );
        }
 
-       protected function getCurrentUserInfo() {
+       /**
+        * Get basic info about a given block
+        * @param Block $block
+        * @return array Array containing several keys:
+        *  - blockid - ID of the block
+        *  - blockedby - username of the blocker
+        *  - blockedbyid - user ID of the blocker
+        *  - blockreason - reason provided for the block
+        *  - blockedtimestamp - timestamp for when the block was placed/modified
+        *  - blockexpiry - expiry time of the block
+        */
+       public static function getBlockInfo( Block $block ) {
                global $wgContLang;
+               $vals = array();
+               $vals['blockid'] = $block->getId();
+               $vals['blockedby'] = $block->getByName();
+               $vals['blockedbyid'] = $block->getBy();
+               $vals['blockreason'] = $block->mReason;
+               $vals['blockedtimestamp'] = wfTimestamp( TS_ISO_8601, $block->mTimestamp );
+               $vals['blockexpiry'] = $wgContLang->formatExpiry(
+                       $block->getExpiry(), TS_ISO_8601, 'infinite'
+               );
+               return $vals;
+       }
 
+       protected function getCurrentUserInfo() {
                $user = $this->getUser();
                $result = $this->getResult();
                $vals = array();
@@ -64,18 +87,8 @@ class ApiQueryUserInfo extends ApiQueryBase {
                        $vals['anon'] = true;
                }
 
-               if ( isset( $this->prop['blockinfo'] ) ) {
-                       if ( $user->isBlocked() ) {
-                               $block = $user->getBlock();
-                               $vals['blockid'] = $block->getId();
-                               $vals['blockedby'] = $block->getByName();
-                               $vals['blockedbyid'] = $block->getBy();
-                               $vals['blockreason'] = $user->blockedFor();
-                               $vals['blockedtimestamp'] = wfTimestamp( TS_ISO_8601, $block->mTimestamp );
-                               $vals['blockexpiry'] = $wgContLang->formatExpiry(
-                                       $block->getExpiry(), TS_ISO_8601, 'infinite'
-                               );
-                       }
+               if ( isset( $this->prop['blockinfo'] ) && $user->isBlocked() ) {
+                       $vals = array_merge( $vals, self::getBlockInfo( $user->getBlock() ) );
                }
 
                if ( isset( $this->prop['hasmsg'] ) ) {
index 1af83ba..f6c24b7 100644 (file)
@@ -53,7 +53,13 @@ class ApiUnblock extends ApiBase {
                if ( $user->isBlocked() ) {
                        $status = SpecialBlock::checkUnblockSelf( $params['user'], $user );
                        if ( $status !== true ) {
-                               $this->dieUsageMsg( $status );
+                               $msg = $this->parseMsg( $status );
+                               $this->dieUsage(
+                                       $msg['info'],
+                                       $msg['code'],
+                                       0,
+                                       array( 'blockinfo' => ApiQueryUserInfo::getBlockInfo( $user->getBlock() ) )
+                               );
                        }
                }
 
index c23e9ff..28702b1 100644 (file)
@@ -37,7 +37,12 @@ class ApiUndelete extends ApiBase {
                }
 
                if ( $this->getUser()->isBlocked() ) {
-                       $this->dieUsageMsg( 'blockedtext' );
+                       $this->dieUsage(
+                               'You have been blocked from editing',
+                               'blocked',
+                               0,
+                               array( 'blockinfo' => ApiQueryUserInfo::getBlockInfo( $this->getUser()->getBlock() ) )
+                       );
                }
 
                $titleObj = Title::newFromText( $params['title'] );
index 1ac6dc3..b544cc8 100644 (file)
        "api-help-param-required": "Tento parametr je povinný.",
        "api-help-datatypes-header": "Datové typy",
        "api-help-datatypes": "Některé typy parametrů v API potřebují bližší vysvětlení:\n;boolean\n:Booleovské parametry fungují jako zaškrtávací políčka v HTML: pokud je parametr uveden, bez ohledu na hodnotu, je považován za pravdivý. Pro nepravdivou hodnotu parametr zcela vynechte.\n;časová značka\n:Časové značky lze uvádět v několika formátech. Doporučuje se datum a čas podle ISO 8601. Všechny časy jsou v UTC a obsažené časové pásmo je ignorováno.\n:* Datum a čas podle ISO 8601, <kbd><var>2001</var>-<var>01</var>-<var>15</var>T<var>14</var>:<var>56</var>:<var>00</var>Z</kbd> (interpunkce a <kbd>Z</kbd> jsou nepovinné)\n:* Datum a čas podle ISO 8601 s (ignorovaným) zlomkem sekundy, <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> (pomlčky, dvojtečky a <kbd>Z</kbd> jsou nepovinné)\n:* Formát MediaWiki, <kbd><var>2001</var><var>01</var><var>15</var><var>14</var><var>56</var><var>00</var></kbd>\n:* Obecný číselný formát, <kbd><var>2001</var>-<var>01</var>-<var>15</var> <var>14</var>:<var>56</var>:<var>00</var></kbd> (nepovinné časové pásmo <kbd>GMT</kbd>, <kbd>+<var>##</var></kbd> nebo <kbd>-<var>##</var></kbd> se ignoruje)\n:* Formát EXIF, <kbd><var>2001</var>:<var>01</var>:<var>15</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* Formát podle RFC 2822 (časové pásmo lze vynechat), <kbd><var>Mon</var>, <var>15</var> <var>Jan</var> <var>2001</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* Formát podle RFC 850 (časové pásmo lze vynechat), <kbd><var>Monday</var>, <var>15</var>-<var>Jan</var>-<var>2001</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* Formát podle céčkové funkce 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:* Sekundy od 1970-01-01T00:00:00Z jako celé číslo o 1–13 číslicích (s výjimkou <kbd>0</kbd>)\n:* Řetězec <kbd>now</kbd>",
+       "api-help-param-type-integer": "Typ: {{PLURAL:$1|1=celé číslo|2=seznam celých čísel}}",
        "api-help-param-type-boolean": "Typ: boolean ([[Special:ApiHelp/main#main/datatypes|podrobnosti]])",
        "api-help-param-list": "{{PLURAL:$1|1=Jedna hodnota|2=Hodnoty (oddělené <kbd>{{!}}</kbd>)}}: $2",
        "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=Musí být prázdné|Může být prázdné nebo $2}}",
index 574bd2f..b418f1d 100644 (file)
@@ -29,6 +29,7 @@
        "apihelp-login-param-domain": "Domeinua (hautazkoa).",
        "apihelp-login-example-login": "Saioa hasi",
        "apihelp-move-description": "Orrialde bat mugitu",
+       "apihelp-options-example-reset": "Berrezarri hobespen guztiak.",
        "apihelp-protect-example-protect": "Orrialde bat babestu",
        "apihelp-query+allusers-param-witheditsonly": "Bakarrik zerrendatu aldaketak egin dituzten erabiltzaileak.",
        "apihelp-query+allusers-param-activeusers": "Bakarrik zerrendatu azken {{PLURAL:$1|eguneko|$1 egunetako}} erabiltzaile aktiboak.",
index 579ce32..23cca40 100644 (file)
@@ -19,7 +19,7 @@
        "apihelp-block-description": "חסימת משתמש.",
        "apihelp-block-param-user": "שם משתמש, כתובת IP, או טווח IP שהנך רוצה לחסום.",
        "apihelp-block-param-reason": "סיבה לחסימה.",
-       "apihelp-block-param-anononly": "×\97ס×\95×\9d ×\9eשת×\9eש×\99×\9d ×\90× ×\95× ×\99×\9e×\99×\99×\9d ×\91×\9c×\91×\93 (×\93×\94×\99×\99× ×\95, ×\94ש×\91תת ×¢×¨×\99×\9b×\95ת ×\90× ×\95× ×\99×\9e×\99×\95ת ×\9e×\9bת×\95×\91ת ×\94IP הזאת)",
+       "apihelp-block-param-anononly": "×\9c×\97ס×\95×\9d ×\9eשת×\9eש×\99×\9d ×\90×\9c×\9e×\95× ×\99×\99×\9d ×\91×\9c×\91×\93 (×\93×\94×\99×\99× ×\95, ×\94ש×\91תת ×¢×¨×\99×\9b×\95ת ×\90×\9c×\9e×\95× ×\99×\95ת ×\9e×\9bת×\95×\91ת ×\94Ö¾IP הזאת)",
        "apihelp-block-param-nocreate": "מניעת יצירת חשבונות",
        "apihelp-block-param-autoblock": "חסימה אוטומטית גם של כתובת ה־IP האחרונה שהשתמש בה ושל כל כתובת IP שינסה להשתמש בה בעתיד.",
        "apihelp-compare-param-fromtitle": "כותרת ראשונה להשוואה.",
        "api-help-source-unknown": "מקור: <span class=\"apihelp-unknown\">לא ידוע</span>",
        "api-help-license": "רישיון: [[$1|$2]]",
        "api-help-license-noname": "רישיון: [[$1|ראו קישור]]",
+       "api-help-license-unknown": "רישיון: <span class=\"apihelp-unknown\">לא ידוע</span>",
        "api-help-parameters": "{{PLURAL:$1|פרמטר|פרמטרים}}:",
        "api-help-param-deprecated": "מיושן.",
        "api-help-param-required": "פרמטר זה נדרש.",
index 3ff138d..3f841ac 100644 (file)
@@ -5,7 +5,8 @@
                        "Twotwo2019",
                        "아라",
                        "LiteHell",
-                       "Ysjbserver"
+                       "Ysjbserver",
+                       "Alex00728"
                ]
        },
        "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [https://www.mediawiki.org/wiki/API:Main_page 설명문서]\n* [https://www.mediawiki.org/wiki/API:FAQ FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api 메일링 리스트]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API 공지 사항] * [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R 버그 및 요청] </div>\n<strong>상태:</strong> 이 페이지에 표시된 모든 기능은 정상 작동할 것이지만, API는 여전히 활발하게 개발되고 있으며, 언제든지 바뀔 수 있습니다. 업데이트 정보를 받아보려면 [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ the mediawiki-api-announce 메일링 리스트]를 구독하십시오.\n\n<strong>잘못된 요청:</strong> API에 잘못된 요청이 전송되면 HTTP 헤더에서 \"MediaWiki-API-Error\" 키를 보내고, 헤더 값과 오류 코드가 같게 설정됩니다. 자세한 정보에 대해서는 https://www.mediawiki.org/wiki/API:Errors_and_warnings 를 참고하십시오.",
        "apihelp-edit-param-bot": "이 편집을 봇으로 표시.",
        "apihelp-edit-example-edit": "문서 편집",
        "apihelp-expandtemplates-param-title": "문서 제목",
+       "apihelp-feedrecentchanges-param-tagfilter": "태그로 분류",
        "apihelp-login-param-name": "계정 이름.",
        "apihelp-login-param-password": "비밀번호.",
        "apihelp-login-example-login": "로그인.",
        "apihelp-move-description": "문서 이동하기.",
+       "apihelp-move-param-reason": "제목을 변경하는 이유",
+       "apihelp-move-param-movetalk": "토론 문서가 존재한다면, 토론 문서도 이름을 변경해주세요.",
+       "apihelp-move-param-movesubpages": "하위 문서가 있다면, 하위 문서도 이름을 변경해주세요.",
+       "apihelp-move-param-noredirect": "넘겨주기 문서 만들지 않기",
+       "apihelp-move-param-watch": "현재 사용자의 주시 문서에 이 문서와 넘겨주기 문서를 추가하기",
+       "apihelp-move-param-unwatch": "현재 사용자의 주시 문서에 이 문서와 넘겨주기 문서를 제거하기",
+       "apihelp-move-param-ignorewarnings": "모든 경고 무시하기",
+       "apihelp-opensearch-description": "OpenSearch 프로토콜을 이용하여 위키 검색하기",
+       "apihelp-opensearch-param-search": "문자열 검색",
+       "apihelp-opensearch-param-limit": "반환할 결과의 최대 수",
+       "apihelp-options-param-reset": "사이트 기본으로 설정 초기화",
+       "apihelp-options-example-reset": "모든 설정 초기화",
+       "apihelp-protect-example-protect": "문서 보호",
+       "apihelp-query+pageswithprop-param-limit": "나타낼 문서의 최대 수입니다.",
+       "apihelp-query+pageswithprop-param-dir": "정렬 순서",
+       "apihelp-query+prefixsearch-param-search": "문자열 검색",
        "api-help-title": "미디어위키 API 도움말",
        "api-help-lead": "이 페이지는 자동으로 생성된 미디어위키 API 도움말 문서입니다.\n\n설명 문서 및 예시: https://www.mediawiki.org/wiki/API",
        "api-help-main-header": "메인 모듈",
index 38e6334..9be0c62 100644 (file)
        "apihelp-expandtemplates-param-includecomments": "Ov Aanmärkonge em <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"HyperText Markup Language\">HTML</i>-Fommaht med ußjejovve wähde sulle.",
        "apihelp-expandtemplates-param-generatexml": "Donn ene Boum vum <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Extensible Markup Language\">XML</i>-Paaser opboue. Es dorsch „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1prop=parsetree</code>“ ässäz.",
        "apihelp-expandtemplates-example-simple": "Donn dä Wikkitäx <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\"><nowiki>{{Project:Sandbox}}</nowiki></kbd> en Täx wandelle.",
-       "apihelp-feedcontributions-description": "Jidd ene Kannahl met de Beidräsch vun enem Metmaacher uß.",
+       "apihelp-feedcontributions-description": "Jidd ene Kannahl met de Beidrähsch vun enem Metmaacher uß.",
        "apihelp-feedcontributions-param-feedformat": "Däm Kannahl sing Fommaht.",
        "apihelp-feedcontributions-param-user": "De Beijdrähsch för wat för en Metmaacher holle.",
        "apihelp-feedcontributions-param-namespace": "Wat för ene Appachtemang för de Beijdrähsch ußjeschloße wähde sull.",
index 1f2bace..54e0a3a 100644 (file)
@@ -54,6 +54,7 @@
        "apihelp-delete-example-reason": "Usuń <kbd>Stronę Główną</kbd> z powodem <kbd>Przygotowania do przenoszenia</kbd>.",
        "apihelp-disabled-description": "Ten moduł został wyłączony.",
        "apihelp-edit-description": "Utwórz i edytuj strony.;",
+       "apihelp-edit-param-section": "Numer sekcji. <kbd>0</kbd> dla górnej sekcji, <kbd>new</kbd> dla nowej sekcji.",
        "apihelp-edit-param-sectiontitle": "Tytuł nowej sekcji.",
        "apihelp-edit-param-text": "Zawartość strony.",
        "apihelp-edit-param-tags": "Zmień tagi do przypisania do tej edycji.",
@@ -81,6 +82,7 @@
        "apihelp-feedcontributions-param-deletedonly": "Pokazuj tylko usunięty wkład.",
        "apihelp-feedcontributions-param-toponly": "Pokazuj tylko edycje będące ostatnią zmianą strony.",
        "apihelp-feedcontributions-param-newonly": "Pokazuj tylko edycje tworzące stronę.",
+       "apihelp-feedcontributions-param-showsizediff": "Pokaż różnicę rozmiaru między wersjami.",
        "apihelp-feedrecentchanges-param-namespace": "Przestrzeń nazw, do której ograniczone są wyniki.",
        "apihelp-feedrecentchanges-param-invert": "Wszystkie przestrzenie nazw oprócz wybranej.",
        "apihelp-feedrecentchanges-param-days": "Dni, do których ograniczone są wyniki.",
        "apihelp-filerevert-description": "Przywróć plik do starej wersji.",
        "apihelp-filerevert-param-filename": "Docelowa nazwa pliku bez prefiksu Plik:",
        "apihelp-filerevert-param-comment": "Prześlij komentarz.",
+       "apihelp-filerevert-example-revert": "Przywróć <kbd>Wiki.png</kbd> do wersji z <kbd>2011-03-05T15:27:40Z</kbd>.",
        "apihelp-help-description": "Wyświetl pomoc dla określonych modułów.",
        "apihelp-help-param-modules": "Moduły do wyświetlenia pomocy dla (wartości <var>action</var> i <var>format</var> parametry, lub <kbd>main</kbd>). Może określić podmoduły z <kbd>+</kbd>.",
        "apihelp-help-param-recursivesubmodules": "Zawiera pomoc dla podmodułów rekursywnie.",
        "apihelp-help-param-helpformat": "Format wyjściowy pomocy.",
+       "apihelp-help-param-toc": "Dołącz spis treści do wyjściowego HTML.",
        "apihelp-help-example-main": "Pomoc dla modułu głównego",
        "apihelp-help-example-recursive": "Cała pomoc na jednej stronie.",
        "apihelp-help-example-help": "Pomoc dla modułu pomocy",
        "apihelp-help-example-query": "Pomoc dla dwóch podmodułów zapytań.",
        "apihelp-imagerotate-description": "Obróć jeden lub wiecej obrazków.",
        "apihelp-imagerotate-param-rotation": "Stopni w prawo, aby obrócić zdjęcie.",
+       "apihelp-imagerotate-example-simple": "Obróć <kbd>Plik:Przykład.png</kbd> o <kbd>90</kbd> stopni.",
+       "apihelp-imagerotate-example-generator": "Obróć wszystkie obrazki w <kbd>Kategorii:Flip</kbd> o <kbd>180</kbd> stopni.",
        "apihelp-import-param-summary": "Podsumowanie importu.",
        "apihelp-import-param-xml": "Przesłany plik XML.",
        "apihelp-import-param-interwikisource": "Dla importów mediawiki: źródłowa wiki.",
        "apihelp-import-param-interwikipage": "Dla importów interwiki: strona do importu.",
        "apihelp-import-param-fullhistory": "Dla importów interwiki: importuj całą historię, a nie tylko obecną wersję.",
        "apihelp-import-param-templates": "Dla importów mediawiki: importuj też wszystkie użyte szablony.",
+       "apihelp-import-param-namespace": "Importuj do tej przestrzeni nazw. Nie może być użyte razem z <var>$1rootpage</var>.",
+       "apihelp-import-param-rootpage": "Importuj jako podstronę tej strony. Nie może być użyte razem z <var>$1namespace</var>.",
        "apihelp-login-param-name": "Nazwa użytkownika.",
        "apihelp-login-param-password": "Hasło.",
        "apihelp-login-param-domain": "Domena (opcjonalnie).",
        "apihelp-login-example-login": "Zaloguj się",
        "apihelp-logout-description": "Wyloguj i wyczyść dane sesji.",
        "apihelp-logout-example-logout": "Wyloguj obecnego użytkownika.",
+       "apihelp-managetags-param-reason": "Opcjonalny powód utworzenia, usunięcia, włączenia lub wyłączenia znacznika.",
        "apihelp-managetags-param-ignorewarnings": "Czy zignorować ostrzeżenia, które pojawiają się w trakcie operacji.",
        "apihelp-move-description": "Przenieś stronę.",
        "apihelp-move-param-reason": "Powód zmiany nazwy.",
        "apihelp-query+alldeletedrevisions-paraminfo-useronly": "Może być użyte tylko z <var>$3user</var>.",
        "apihelp-query+alldeletedrevisions-param-from": "Zacznij nasłuchiwanie na tym tytule.",
        "apihelp-query+alldeletedrevisions-param-to": "Skończ nasłuchiwanie na tym tytule.",
-       "apihelp-query+alldeletedrevisions-param-tag": "Pokazuj tylko zmiany oznaczone tym tagiem.",
+       "apihelp-query+alldeletedrevisions-param-tag": "Pokazuj tylko zmiany oznaczone tym znacznikiem.",
        "apihelp-query+alldeletedrevisions-param-user": "Pokazuj tylko zmiany dokonane przez tego użytkownika.",
        "apihelp-query+alldeletedrevisions-param-excludeuser": "Nie pokazuj zmian dokonanych przez tego użytkownika.",
        "apihelp-query+alldeletedrevisions-param-namespace": "Listuj tylko strony z tej przestrzeni nazw.",
        "apihelp-query+prefixsearch-param-offset": "Liczba wyników do pominięcia.",
        "apihelp-query+protectedtitles-description": "Lista wszystkich tytułów zabezpieczonych przed tworzeniem.",
        "apihelp-query+protectedtitles-param-namespace": "Listuj tylko strony z tych przestrzeni nazw.",
-       "apihelp-query+protectedtitles-param-limit": "Łączna ilość stron do zwrócenia.",
+       "apihelp-query+protectedtitles-param-limit": "Łączna liczba stron do zwrócenia.",
        "apihelp-query+protectedtitles-example-simple": "Lista chronionych nagłówków",
        "apihelp-query+recentchanges-param-user": "Listuj tylko zmiany dokonane przez tego użytkownika.",
        "apihelp-query+recentchanges-param-excludeuser": "Nie listuj zmian dokonanych przez tego użytkownika.",
        "apihelp-query+recentchanges-param-tag": "Pokazuj tylko zmiany oznaczone tym tagiem.",
        "apihelp-query+recentchanges-example-simple": "Lista ostatnich zmian.",
        "apihelp-query+redirects-param-limit": "Ile przekierowań zwrócić.",
-       "apihelp-query+revisions+base-param-limit": "Ograniczenia na ilość wersji które będą zwrócone.",
+       "apihelp-query+revisions+base-param-limit": "Ograniczenie na liczbę wersji, które będą zwrócone.",
        "apihelp-query+search-description": "Wykonaj wyszukiwanie pełnotekstowe.",
        "apihelp-query+search-param-info": "Które metadane zwrócić.",
-       "apihelp-query+search-param-limit": "Łączna ilość stron do zwrócenia.",
+       "apihelp-query+search-param-limit": "Łączna liczba stron do zwrócenia.",
        "apihelp-query+search-param-interwiki": "Dołączaj wyniki wyszukiwań interwiki w wyszukiwarce, jeśli możliwe.",
        "apihelp-query+search-example-simple": "Szukaj <kbd>meaning</kbd>.",
        "apihelp-query+siteinfo-example-simple": "Pobierz informacje o stronie.",
index 9ab85c7..d0c124c 100644 (file)
        "apihelp-move-param-unwatch": "从当前用户的监视列表中移除页面及重定向。",
        "apihelp-move-param-watchlist": "无条件地将页面加入至当前用户的监视列表或将其移除,使用设置或不更改监视。",
        "apihelp-move-param-ignorewarnings": "忽略任何警告。",
-       "apihelp-move-example-move": "移动<kbd>坏标题</kbd>到<kbd>好标题</kbd>并且不留下重定向。",
+       "apihelp-move-example-move": "移动<kbd>Badtitle</kbd>到<kbd>Goodtitle</kbd>,不保留重定向。",
        "apihelp-opensearch-description": "使用OpenSearch协议搜索本wiki。",
        "apihelp-opensearch-param-search": "搜索字符串。",
        "apihelp-opensearch-param-limit": "要返回的结果最大数。",
index 862ed67..6a597ca 100644 (file)
@@ -48,7 +48,7 @@ class LCStoreStaticArray implements LCStore {
 
        public function startWrite( $code ) {
                $this->currentLang = $code;
-               $this->fname = $this->directory. '/' . $code . '.l10n.php';
+               $this->fname = $this->directory . '/' . $code . '.l10n.php';
                $this->data[$code] = array();
                if ( file_exists( $this->fname ) ) {
                        $this->data[$code] = require $this->fname;
@@ -125,7 +125,7 @@ class LCStoreStaticArray implements LCStore {
 
        public function get( $code, $key ) {
                if ( !array_key_exists( $code, $this->data ) ) {
-                       $fname = $this->directory. '/' . $code . '.l10n.php';
+                       $fname = $this->directory . '/' . $code . '.l10n.php';
                        if ( !file_exists( $fname ) ) {
                                return null;
                        }
index eace1ee..e8cc5e5 100644 (file)
@@ -220,17 +220,14 @@ class LinkCache {
 
                $key = $nt->getPrefixedDBkey();
                if ( $this->isBadLink( $key ) || $nt->isExternal() ) {
-
                        return 0;
                }
                $id = $this->getGoodLinkID( $key );
                if ( $id != 0 ) {
-
                        return $id;
                }
 
                if ( $key === '' ) {
-
                        return 0;
                }
 
index 5b802aa..276e84a 100644 (file)
@@ -539,13 +539,11 @@ class LocalisationCache {
        public function readJSONFile( $fileName ) {
 
                if ( !is_readable( $fileName ) ) {
-
                        return array();
                }
 
                $json = file_get_contents( $fileName );
                if ( $json === false ) {
-
                        return array();
                }
 
index 90fa065..79f4d6c 100644 (file)
@@ -85,6 +85,16 @@ class MessageCache {
         */
        protected $mLoadedLanguages = array();
 
+       /**
+        * @var bool $mInParser
+        */
+       protected $mInParser = false;
+
+       /** @var BagOStuff */
+       protected $mMemc;
+       /** @var WANObjectCache */
+       protected $wanCache;
+
        /**
         * Singleton instance
         *
@@ -92,11 +102,6 @@ class MessageCache {
         */
        private static $instance;
 
-       /**
-        * @var bool $mInParser
-        */
-       protected $mInParser = false;
-
        /**
         * Get the signleton instance of this class
         *
@@ -138,6 +143,8 @@ class MessageCache {
                $this->mMemc = $memCached;
                $this->mDisable = !$useDB;
                $this->mExpiry = $expiry;
+
+               $this->wanCache = ObjectCache::getMainWANInstance();
        }
 
        /**
@@ -271,14 +278,14 @@ class MessageCache {
                # Loading code starts
                $success = false; # Keep track of success
                $staleCache = false; # a cache array with expired data, or false if none has been loaded
+               $hashExpired = false; # whether the cluster-local validation hash is stale
                $where = array(); # Debug info, delayed to avoid spamming debug log too much
-               $cacheKey = wfMemcKey( 'messages', $code ); # Key in memc for messages
 
                # Local cache
                # Hash of the contents is stored in memcache, to detect if local cache goes
                # out of date (e.g. due to replace() on some other server)
                if ( $wgUseLocalMessageCache ) {
-                       $hash = $this->mMemc->get( wfMemcKey( 'messages', $code, 'hash' ) );
+                       list( $hash, $hashExpired ) = $this->getValidationHash( $code );
                        if ( $hash ) {
                                $cache = $this->getLocalCache( $hash, $code );
                                if ( !$cache ) {
@@ -286,6 +293,9 @@ class MessageCache {
                                } elseif ( $this->isCacheExpired( $cache ) ) {
                                        $where[] = 'local cache is expired';
                                        $staleCache = $cache;
+                               } elseif ( $hashExpired ) {
+                                       $where[] = 'local cache validation key is expired';
+                                       $staleCache = $cache;
                                } else {
                                        $where[] = 'got from local cache';
                                        $success = true;
@@ -295,21 +305,29 @@ class MessageCache {
                }
 
                if ( !$success ) {
+                       $cacheKey = wfMemcKey( 'messages', $code ); # Key in memc for messages
                        # Try the global cache. If it is empty, try to acquire a lock. If
                        # the lock can't be acquired, wait for the other thread to finish
                        # and then try the global cache a second time.
                        for ( $failedAttempts = 0; $failedAttempts < 2; $failedAttempts++ ) {
-                               $cache = $this->mMemc->get( $cacheKey );
-                               if ( !$cache ) {
-                                       $where[] = 'global cache is empty';
-                               } elseif ( $this->isCacheExpired( $cache ) ) {
-                                       $where[] = 'global cache is expired';
-                                       $staleCache = $cache;
+                               if ( $hashExpired && $staleCache ) {
+                                       # Do not bother fetching the whole cache blob to avoid I/O.
+                                       # Instead, just try to get the non-blocking $statusKey lock
+                                       # below, and use the local stale value if it was not acquired.
+                                       $where[] = 'global cache is presumed expired';
                                } else {
-                                       $where[] = 'got from global cache';
-                                       $this->mCache[$code] = $cache;
-                                       $this->saveToCaches( $cache, 'local-only', $code );
-                                       $success = true;
+                                       $cache = $this->mMemc->get( $cacheKey );
+                                       if ( !$cache ) {
+                                               $where[] = 'global cache is empty';
+                                       } elseif ( $this->isCacheExpired( $cache ) ) {
+                                               $where[] = 'global cache is expired';
+                                               $staleCache = $cache;
+                                       } else {
+                                               $where[] = 'got from global cache';
+                                               $this->mCache[$code] = $cache;
+                                               $this->saveToCaches( $cache, 'local-only', $code );
+                                               $success = true;
+                                       }
                                }
 
                                if ( $success ) {
@@ -317,68 +335,11 @@ class MessageCache {
                                        break;
                                }
 
-                               # We need to call loadFromDB. Limit the concurrency to a single
-                               # process. This prevents the site from going down when the cache
-                               # expires.
-                               $statusKey = wfMemcKey( 'messages', $code, 'status' );
-                               $acquired = $this->mMemc->add( $statusKey, 'loading', MSG_LOAD_TIMEOUT );
-                               if ( $acquired ) {
-                                       # Unlock the status key if there is an exception
-                                       $that = $this;
-                                       $statusUnlocker = new ScopedCallback( function () use ( $that, $statusKey ) {
-                                               $that->mMemc->delete( $statusKey );
-                                       } );
-
-                                       # Now let's regenerate
-                                       $where[] = 'loading from database';
-
-                                       # Lock the cache to prevent conflicting writes
-                                       # If this lock fails, it doesn't really matter, it just means the
-                                       # write is potentially non-atomic, e.g. the results of a replace()
-                                       # may be discarded.
-                                       if ( $this->lock( $cacheKey ) ) {
-                                               $mainUnlocker = new ScopedCallback( function () use ( $that, $cacheKey ) {
-                                                       $that->unlock( $cacheKey );
-                                               } );
-                                       } else {
-                                               $mainUnlocker = null;
-                                               $where[] = 'could not acquire main lock';
-                                       }
-
-                                       $cache = $this->loadFromDB( $code );
-                                       $this->mCache[$code] = $cache;
-                                       $success = true;
-                                       $saveSuccess = $this->saveToCaches( $cache, 'all', $code );
-
-                                       # Unlock
-                                       ScopedCallback::consume( $mainUnlocker );
-                                       ScopedCallback::consume( $statusUnlocker );
-
-                                       if ( !$saveSuccess ) {
-                                               # Cache save has failed.
-                                               # There are two main scenarios where this could be a problem:
-                                               #
-                                               #   - The cache is more than the maximum size (typically
-                                               #     1MB compressed).
-                                               #
-                                               #   - Memcached has no space remaining in the relevant slab
-                                               #     class. This is unlikely with recent versions of
-                                               #     memcached.
-                                               #
-                                               # Either way, if there is a local cache, nothing bad will
-                                               # happen. If there is no local cache, disabling the message
-                                               # cache for all requests avoids incurring a loadFromDB()
-                                               # overhead on every request, and thus saves the wiki from
-                                               # complete downtime under moderate traffic conditions.
-                                               if ( !$wgUseLocalMessageCache ) {
-                                                       $this->mMemc->set( $statusKey, 'error', 60 * 5 );
-                                                       $where[] = 'could not save cache, disabled globally for 5 minutes';
-                                               } else {
-                                                       $where[] = "could not save global cache";
-                                               }
-                                       }
-
+                               # We need to call loadFromDB. Limit the concurrency to one process.
+                               # This prevents the site from going down when the cache expires.
+                               if ( $this->loadFromDBWithLock( $code, $where ) ) {
                                        # Load from DB complete, no need to retry
+                                       $success = true;
                                        break;
                                } elseif ( $staleCache ) {
                                        # Use the stale cache while some other thread constructs the new one
@@ -393,6 +354,7 @@ class MessageCache {
                                        $where[] = "could not acquire status key.";
                                        break;
                                } else {
+                                       $statusKey = wfMemcKey( 'messages', $code, 'status' );
                                        $status = $this->mMemc->get( $statusKey );
                                        if ( $status === 'error' ) {
                                                # Disable cache
@@ -417,12 +379,86 @@ class MessageCache {
                        # All good, just record the success
                        $this->mLoadedLanguages[$code] = true;
                }
+
                $info = implode( ', ', $where );
                wfDebugLog( 'MessageCache', __METHOD__ . ": Loading $code... $info\n" );
 
                return $success;
        }
 
+       /**
+        * @param string $code
+        * @param array $where List of wfDebug() comments
+        * @return bool Lock acquired and loadFromDB() called
+        */
+       protected function loadFromDBWithLock( $code, array &$where ) {
+               global $wgUseLocalMessageCache;
+
+               $memCache = $this->mMemc;
+
+               $statusKey = wfMemcKey( 'messages', $code, 'status' );
+               if ( !$memCache->add( $statusKey, 'loading', MSG_LOAD_TIMEOUT ) ) {
+                       return false; // could not acquire lock
+               }
+
+               # Unlock the status key if there is an exception
+               $statusUnlocker = new ScopedCallback( function () use ( $memCache, $statusKey ) {
+                       $memCache->delete( $statusKey );
+               } );
+
+               # Now let's regenerate
+               $where[] = 'loading from database';
+
+               $cacheKey = wfMemcKey( 'messages', $code );
+               # Lock the cache to prevent conflicting writes
+               # If this lock fails, it doesn't really matter, it just means the
+               # write is potentially non-atomic, e.g. the results of a replace()
+               # may be discarded.
+               if ( $this->lock( $cacheKey ) ) {
+                       $that = $this;
+                       $mainUnlocker = new ScopedCallback( function () use ( $that, $cacheKey ) {
+                               $that->unlock( $cacheKey );
+                       } );
+               } else {
+                       $mainUnlocker = null;
+                       $where[] = 'could not acquire main lock';
+               }
+
+               $cache = $this->loadFromDB( $code );
+               $this->mCache[$code] = $cache;
+               $saveSuccess = $this->saveToCaches( $cache, 'all', $code );
+
+               # Unlock
+               ScopedCallback::consume( $mainUnlocker );
+               ScopedCallback::consume( $statusUnlocker );
+
+               if ( !$saveSuccess ) {
+                       # Cache save has failed.
+                       # There are two main scenarios where this could be a problem:
+                       #
+                       #   - The cache is more than the maximum size (typically
+                       #     1MB compressed).
+                       #
+                       #   - Memcached has no space remaining in the relevant slab
+                       #     class. This is unlikely with recent versions of
+                       #     memcached.
+                       #
+                       # Either way, if there is a local cache, nothing bad will
+                       # happen. If there is no local cache, disabling the message
+                       # cache for all requests avoids incurring a loadFromDB()
+                       # overhead on every request, and thus saves the wiki from
+                       # complete downtime under moderate traffic conditions.
+                       if ( !$wgUseLocalMessageCache ) {
+                               $memCache->set( $statusKey, 'error', 60 * 5 );
+                               $where[] = 'could not save cache, disabled globally for 5 minutes';
+                       } else {
+                               $where[] = "could not save global cache";
+                       }
+               }
+
+               return true;
+       }
+
        /**
         * Loads cacheable messages from the database. Messages bigger than
         * $wgMaxMsgCacheEntrySize are assigned a special value, and are loaded
@@ -551,6 +587,7 @@ class MessageCache {
                # Update caches
                $this->saveToCaches( $this->mCache[$code], 'all', $code );
                $this->unlock( $cacheKey );
+               $this->wanCache->touchCheckKey( wfMemcKey( 'messages', $code ) );
 
                // Also delete cached sidebar... just in case it is affected
                $codes = array( $code );
@@ -560,10 +597,9 @@ class MessageCache {
                        $codes = array_keys( Language::fetchLanguageNames() );
                }
 
-               $cache = ObjectCache::getMainWANInstance();
                foreach ( $codes as $code ) {
                        $sidebarKey = wfMemcKey( 'sidebar', $code );
-                       $cache->delete( $sidebarKey, 5 );
+                       $this->wanCache->delete( $sidebarKey, 5 );
                }
 
                // Update the message in the message blob store
@@ -605,9 +641,8 @@ class MessageCache {
        protected function saveToCaches( $cache, $dest, $code = false ) {
                global $wgUseLocalMessageCache;
 
-               $cacheKey = wfMemcKey( 'messages', $code );
-
                if ( $dest === 'all' ) {
+                       $cacheKey = wfMemcKey( 'messages', $code );
                        $success = $this->mMemc->set( $cacheKey, $cache );
                } else {
                        $success = true;
@@ -617,13 +652,45 @@ class MessageCache {
                if ( $wgUseLocalMessageCache ) {
                        $serialized = serialize( $cache );
                        $hash = md5( $serialized );
-                       $this->mMemc->set( wfMemcKey( 'messages', $code, 'hash' ), $hash );
+                       $this->setValidationHash( $code, $hash );
                        $this->saveToLocal( $serialized, $hash, $code );
                }
 
                return $success;
        }
 
+       /**
+        * Get the md5 used to validate the local disk cache
+        *
+        * @param string $code
+        * @return array (hash or false, bool expiry status)
+        */
+       protected function getValidationHash( $code ) {
+               $curTTL = null;
+               $value = $this->wanCache->get(
+                       wfMemcKey( 'messages', $code, 'hash' ),
+                       $curTTL,
+                       array( wfMemcKey( 'messages', $code ) )
+               );
+               $expired = ( $curTTL === null || $curTTL < 0 );
+
+               return array( $value, $expired );
+       }
+
+       /**
+        * Set the md5 used to validate the local disk cache
+        *
+        * @param string $code
+        * @param string $hash
+        */
+       protected function setValidationHash( $code, $hash ) {
+               $this->wanCache->set(
+                       wfMemcKey( 'messages', $code, 'hash' ),
+                       $hash,
+                       WANObjectCache::TTL_NONE
+               );
+       }
+
        /**
         * Represents a write lock on the messages key.
         *
@@ -1077,11 +1144,10 @@ class MessageCache {
        function clear() {
                $langs = Language::fetchLanguageNames( null, 'mw' );
                foreach ( array_keys( $langs ) as $code ) {
-                       # Global cache
-                       $this->mMemc->delete( wfMemcKey( 'messages', $code ) );
-                       # Invalidate all local caches
-                       $this->mMemc->delete( wfMemcKey( 'messages', $code, 'hash' ) );
+                       # Global and local caches
+                       $this->wanCache->touchCheckKey( wfMemcKey( 'messages', $code ) );
                }
+
                $this->mLoadedLanguages = array();
        }
 
index 8a42489..2a3aac2 100644 (file)
@@ -123,11 +123,11 @@ class UserCache {
                $lb = new LinkBatch();
                foreach ( $usersToCheck as $userId => $name ) {
                        if ( $this->queryNeeded( $userId, 'userpage', $options ) ) {
-                               $lb->add( NS_USER, str_replace( ' ', '_', $row->user_name ) );
+                               $lb->add( NS_USER, $row->user_name );
                                $this->typesCached[$userId]['userpage'] = 1;
                        }
                        if ( $this->queryNeeded( $userId, 'usertalk', $options ) ) {
-                               $lb->add( NS_USER_TALK, str_replace( ' ', '_', $row->user_name ) );
+                               $lb->add( NS_USER_TALK, $row->user_name );
                                $this->typesCached[$userId]['usertalk'] = 1;
                        }
                }
index 19277f1..54cde0d 100644 (file)
@@ -330,7 +330,6 @@ class EnhancedChangesList extends ChangesList {
                        } elseif ( !ChangesList::userCan( $rcObj, Revision::DELETED_TEXT, $this->getUser() ) ) {
                                $link = '<span class="history-deleted">' . $rcObj->timestamp . '</span> ';
                        } else {
-
                                $link = Linker::linkKnown(
                                        $rcObj->getTitle(),
                                        $rcObj->timestamp,
index 79763bd..95f4816 100644 (file)
@@ -417,21 +417,23 @@ class ChangeTags {
                        return Status::newFatal( 'tags-update-no-permission' );
                }
 
-               // to be added, a tag has to be explicitly defined
-               // @todo Allow extensions to define tags that can be applied by users...
-               $explicitlyDefinedTags = self::listExplicitlyDefinedTags();
-               $diff = array_diff( $tagsToAdd, $explicitlyDefinedTags );
-               if ( $diff ) {
-                       return self::restrictedTagError( 'tags-update-add-not-allowed-one',
-                               'tags-update-add-not-allowed-multi', $diff );
+               if ( $tagsToAdd ) {
+                       // to be added, a tag has to be explicitly defined
+                       // @todo Allow extensions to define tags that can be applied by users...
+                       $explicitlyDefinedTags = self::listExplicitlyDefinedTags();
+                       $diff = array_diff( $tagsToAdd, $explicitlyDefinedTags );
+                       if ( $diff ) {
+                               return self::restrictedTagError( 'tags-update-add-not-allowed-one',
+                                       'tags-update-add-not-allowed-multi', $diff );
+                       }
                }
 
-               // to be removed, a tag has to be either explicitly defined or not defined
-               // at all
-               $definedTags = self::listDefinedTags();
-               $diff = array_diff( $tagsToRemove, $explicitlyDefinedTags );
-               if ( $diff ) {
-                       $intersect = array_intersect( $diff, $definedTags );
+               if ( $tagsToRemove ) {
+                       // to be removed, a tag must not be defined by an extension, or equivalently it
+                       // has to be either explicitly defined or not defined at all
+                       // (assuming no edge case of a tag both explicitly-defined and extension-defined)
+                       $extensionDefinedTags = self::listExtensionDefinedTags();
+                       $intersect = array_intersect( $tagsToRemove, $extensionDefinedTags );
                        if ( $intersect ) {
                                return self::restrictedTagError( 'tags-update-remove-not-allowed-one',
                                        'tags-update-remove-not-allowed-multi', $intersect );
@@ -747,12 +749,6 @@ class ChangeTags {
                        return Status::newFatal( 'tags-manage-no-permission' );
                }
 
-               // non-existing tags cannot be activated
-               $tagUsage = self::tagUsageStatistics();
-               if ( !isset( $tagUsage[$tag] ) ) {
-                       return Status::newFatal( 'tags-activate-not-found', $tag );
-               }
-
                // defined tags cannot be activated (a defined tag is either extension-
                // defined, in which case the extension chooses whether or not to active it;
                // or user-defined, in which case it is considered active)
@@ -761,6 +757,12 @@ class ChangeTags {
                        return Status::newFatal( 'tags-activate-not-allowed', $tag );
                }
 
+               // non-existing tags cannot be activated
+               $tagUsage = self::tagUsageStatistics();
+               if ( !isset( $tagUsage[$tag] ) ) { // we already know the tag is undefined
+                       return Status::newFatal( 'tags-activate-not-found', $tag );
+               }
+
                return Status::newGood();
        }
 
@@ -885,7 +887,7 @@ class ChangeTags {
 
                // does the tag already exist?
                $tagUsage = self::tagUsageStatistics();
-               if ( isset( $tagUsage[$tag] ) ) {
+               if ( isset( $tagUsage[$tag] ) || in_array( $tag, self::listDefinedTags() ) ) {
                        return Status::newFatal( 'tags-create-already-exists', $tag );
                }
 
@@ -995,11 +997,11 @@ class ChangeTags {
                        return Status::newFatal( 'tags-manage-no-permission' );
                }
 
-               if ( !isset( $tagUsage[$tag] ) ) {
+               if ( !isset( $tagUsage[$tag] ) && !in_array( $tag, self::listDefinedTags() ) ) {
                        return Status::newFatal( 'tags-delete-not-found', $tag );
                }
 
-               if ( $tagUsage[$tag] > self::MAX_DELETE_USES ) {
+               if ( isset( $tagUsage[$tag] ) && $tagUsage[$tag] > self::MAX_DELETE_USES ) {
                        return Status::newFatal( 'tags-delete-too-many-uses', $tag, self::MAX_DELETE_USES );
                }
 
@@ -1044,6 +1046,7 @@ class ChangeTags {
 
                // store the tag usage statistics
                $tagUsage = self::tagUsageStatistics();
+               $hitcount = isset( $tagUsage[$tag] ) ? $tagUsage[$tag] : 0;
 
                // do it!
                $deleteResult = self::deleteTagEverywhere( $tag );
@@ -1052,7 +1055,7 @@ class ChangeTags {
                }
 
                // log it
-               $logId = self::logTagManagementAction( 'delete', $tag, $reason, $user, $tagUsage[$tag] );
+               $logId = self::logTagManagementAction( 'delete', $tag, $reason, $user, $hitcount );
                $deleteResult->value = $logId;
                return $deleteResult;
        }
@@ -1170,6 +1173,7 @@ class ChangeTags {
        /**
         * Returns a map of any tags used on the wiki to number of edits
         * tagged with them, ordered descending by the hitcount.
+        * This does not include tags defined somewhere that have never been applied.
         *
         * Keeps a short-term cache in memory, so calling this multiple times in the
         * same request should be fine.
@@ -1203,12 +1207,6 @@ class ChangeTags {
                                        $out[$row->ct_tag] = $row->hitcount;
                                }
 
-                               foreach ( ChangeTags::listDefinedTags() as $tag ) {
-                                       if ( !isset( $out[$tag] ) ) {
-                                               $out[$tag] = 0;
-                                       }
-                               }
-
                                return $out;
                        },
                        300,
index 3b449b6..8beae39 100644 (file)
@@ -82,7 +82,6 @@ class WikitextContent extends TextContent {
                $text = $with->getNativeData();
 
                if ( strval( $sectionId ) === '' ) {
-
                        return $with; # XXX: copy first?
                }
 
index 4e790c0..d1bc597 100644 (file)
@@ -380,7 +380,6 @@ class RequestContext implements IContextSource {
         */
        public function getSkin() {
                if ( $this->skin === null ) {
-
                        $skin = null;
                        Hooks::run( 'RequestContextCreateSkin', array( $this, &$skin ) );
                        $factory = SkinFactory::getDefaultInstance();
index e15c248..94cf1f2 100644 (file)
@@ -915,10 +915,6 @@ abstract class DatabaseBase implements IDatabase {
                // Although postgres and oracle support schemas, we don't use them (yet)
                // to maintain backwards compatibility
                $defaultSchemas = array(
-                       'mysql' => null,
-                       'postgres' => null,
-                       'sqlite' => null,
-                       'oracle' => null,
                        'mssql' => 'get from global',
                );
 
@@ -932,7 +928,9 @@ abstract class DatabaseBase implements IDatabase {
                        $p['flags'] = isset( $p['flags'] ) ? $p['flags'] : 0;
                        $p['variables'] = isset( $p['variables'] ) ? $p['variables'] : array();
                        $p['tablePrefix'] = isset( $p['tablePrefix'] ) ? $p['tablePrefix'] : 'get from global';
-                       $p['schema'] = isset( $p['schema'] ) ? $p['schema'] : $defaultSchemas[$dbType];
+                       if ( !isset( $p['schema'] ) ) {
+                               $p['schema'] = isset( $defaultSchemas[$dbType] ) ? $defaultSchemas[$dbType] : null;
+                       }
                        $p['foreign'] = isset( $p['foreign'] ) ? $p['foreign'] : false;
 
                        return new $class( $p );
index b5b6825..85f1b96 100644 (file)
@@ -1089,7 +1089,9 @@ class DatabaseMssql extends DatabaseBase {
         * @param string $s
         * @return string
         */
-       public function strencode( $s ) { # Should not be called by us
+       public function strencode( $s ) {
+               // Should not be called by us
+
                return str_replace( "'", "''", $s );
        }
 
index 60999e5..9ad76ab 100644 (file)
@@ -1510,7 +1510,9 @@ SQL;
                return pg_unescape_bytea( $b );
        }
 
-       function strencode( $s ) { # Should not be called by us
+       function strencode( $s ) {
+               // Should not be called by us
+
                return pg_escape_string( $this->mConn, $s );
        }
 
@@ -1702,4 +1704,5 @@ SQL;
        }
 } // end DatabasePostgres class
 
-class PostgresBlob extends Blob {}
+class PostgresBlob extends Blob {
+}
index 99c9a14..069185b 100644 (file)
@@ -538,7 +538,6 @@ class LoadBalancer {
                # Now we have an explicit index into the servers array
                $conn = $this->openConnection( $i, $wiki );
                if ( !$conn ) {
-
                        return $this->reportConnectionError();
                }
 
index 71fc328..6bd6411 100644 (file)
@@ -181,7 +181,7 @@ class LegacyLogger extends AbstractLogger {
                } elseif ( $channel === 'profileoutput' ) {
                        // Legacy wfLogProfilingData formatitng
                        $forward = '';
-                       if ( isset( $context['forwarded_for'] )) {
+                       if ( isset( $context['forwarded_for'] ) ) {
                                $forward = " forwarded for {$context['forwarded_for']}";
                        }
                        if ( isset( $context['client_ip'] ) ) {
index eeadd16..e9ec7ff 100644 (file)
@@ -995,15 +995,27 @@ class LinksDeletionUpdate extends SqlDataUpdate {
 
                # If using cleanup triggers, we can skip some manual deletes
                if ( !$this->mDb->cleanupTriggers() ) {
-                       # Clean up recentchanges entries...
-                       $this->mDb->delete( 'recentchanges',
-                               array( 'rc_type != ' . RC_LOG,
+                       # Find recentchanges entries to clean up...
+                       $rcIdsForTitle = $this->mDb->selectFieldValues( 'recentchanges',
+                               'rc_id',
+                               array(
+                                       'rc_type != ' . RC_LOG,
                                        'rc_namespace' => $title->getNamespace(),
-                                       'rc_title' => $title->getDBkey() ),
-                               __METHOD__ );
-                       $this->mDb->delete( 'recentchanges',
+                                       'rc_title' => $title->getDBkey()
+                               ),
+                               __METHOD__
+                       );
+                       $rcIdsForPage = $this->mDb->selectFieldValues( 'recentchanges',
+                               'rc_id',
                                array( 'rc_type != ' . RC_LOG, 'rc_cur_id' => $id ),
-                               __METHOD__ );
+                               __METHOD__
+                       );
+
+                       # T98706: delete PK to avoid lock contention with RC delete log insertions
+                       $rcIds = array_merge( $rcIdsForTitle, $rcIdsForPage );
+                       if ( $rcIds ) {
+                               $this->mDb->delete( 'recentchanges', array( 'rc_id' => $rcIds ), __METHOD__ );
+                       }
                }
        }
 
index 07a0522..c138eec 100644 (file)
@@ -685,24 +685,20 @@ class DifferenceEngine extends ContextSource {
                $this->mCacheHit = true;
                // Check if the diff should be hidden from this user
                if ( !$this->loadRevisionData() ) {
-
                        return false;
                } elseif ( $this->mOldRev &&
                        !$this->mOldRev->userCan( Revision::DELETED_TEXT, $this->getUser() )
                ) {
-
                        return false;
                } elseif ( $this->mNewRev &&
                        !$this->mNewRev->userCan( Revision::DELETED_TEXT, $this->getUser() )
                ) {
-
                        return false;
                }
                // Short-circuit
                if ( $this->mOldRev === false || ( $this->mOldRev && $this->mNewRev
                        && $this->mOldRev->getID() == $this->mNewRev->getID() )
                ) {
-
                        return '';
                }
                // Cacheable?
@@ -726,7 +722,6 @@ class DifferenceEngine extends ContextSource {
 
                // Loadtext is permission safe, this just clears out the diff
                if ( !$this->loadText() ) {
-
                        return false;
                }
 
@@ -859,12 +854,10 @@ class DifferenceEngine extends ContextSource {
 
                        $tempFile1 = fopen( $tempName1, "w" );
                        if ( !$tempFile1 ) {
-
                                return false;
                        }
                        $tempFile2 = fopen( $tempName2, "w" );
                        if ( !$tempFile2 ) {
-
                                return false;
                        }
                        fwrite( $tempFile1, $otext );
@@ -1040,7 +1033,7 @@ class DifferenceEngine extends ContextSource {
                        $key = $title->quickUserCan( 'edit', $user ) ? 'editold' : 'viewsourceold';
                        $msg = $this->msg( $key )->escaped();
                        $editLink = $this->msg( 'parentheses' )->rawParams(
-                               Linker::linkKnown( $title, $msg, array( ), $editQuery ) )->escaped();
+                               Linker::linkKnown( $title, $msg, array(), $editQuery ) )->escaped();
                        $header .= ' ' . Html::rawElement(
                                'span',
                                array( 'class' => 'mw-diff-edit' ),
index a75f328..213bb87 100644 (file)
@@ -200,7 +200,6 @@ class FSFile {
        public function getSha1Base36( $recache = false ) {
 
                if ( $this->sha1Base36 !== null && !$recache ) {
-
                        return $this->sha1Base36;
                }
 
index f2d13ee..6a699f9 100644 (file)
@@ -328,8 +328,8 @@ class FileBackendMultiWrite extends FileBackend {
                                $cStat = $cBackend->getFileStat( array( 'src' => $cPath, 'latest' => true ) );
                                if ( $cStat === null || ( $cSha1 !== false && !$cStat ) ) { // sanity
                                        $status->fatal( 'backend-fail-internal', $cBackend->getName() );
-                                       wfDebugLog( 'FileOperation', __METHOD__
-                                       . ': File is not available on the clone backend' );
+                                       wfDebugLog( 'FileOperation', __METHOD__ .
+                                               ': File is not available on the clone backend' );
                                        continue; // file is not available on the clone backend...
                                }
                                if ( $mSha1 === $cSha1 ) {
index 312b65c..46b5360 100644 (file)
@@ -67,7 +67,6 @@ class TempFSFile extends FSFile {
                                break; // got it
                        }
                        if ( $attempt >= 5 ) {
-
                                return null; // give up
                        }
                }
index c0c6d9d..e66fdaf 100644 (file)
@@ -63,7 +63,7 @@ class FileRepo {
        protected $transformVia404;
 
        /** @var string URL of image description pages, e.g.
-        *    http://en.wikipedia.org/wiki/File:
+        *    https://en.wikipedia.org/wiki/File:
         */
        protected $descBaseUrl;
 
@@ -76,7 +76,7 @@ class FileRepo {
         *    to $wgScriptExtension, e.g. .php5 defaults to .php */
        protected $scriptExtension;
 
-       /** @var string Equivalent to $wgArticlePath, e.g. http://en.wikipedia.org/wiki/$1 */
+       /** @var string Equivalent to $wgArticlePath, e.g. https://en.wikipedia.org/wiki/$1 */
        protected $articleUrl;
 
        /** @var bool Equivalent to $wgCapitalLinks (or $wgCapitalLinkOverrides[NS_FILE],
index 7ead968..c6941e6 100644 (file)
@@ -29,7 +29,7 @@
  * $wgForeignFileRepos[] = array(
  *   'class'                  => 'ForeignAPIRepo',
  *   'name'                   => 'shared',
- *   'apibase'                => 'http://en.wikipedia.org/w/api.php',
+ *   'apibase'                => 'https://en.wikipedia.org/w/api.php',
  *   'fetchDescription'       => true, // Optional
  *   'descriptionCacheExpiry' => 3600,
  * );
@@ -72,7 +72,7 @@ class ForeignAPIRepo extends FileRepo {
                global $wgLocalFileRepo;
                parent::__construct( $info );
 
-               // http://commons.wikimedia.org/w/api.php
+               // https://commons.wikimedia.org/w/api.php
                $this->mApiBase = isset( $info['apibase'] ) ? $info['apibase'] : null;
 
                if ( isset( $info['apiThumbCacheExpiry'] ) ) {
index 01360d0..e1ee7fa 100644 (file)
@@ -40,7 +40,7 @@ class PackedOverlayImageGallery extends PackedImageGallery {
 
                # ATTENTION: The newline after <div class="gallerytext"> is needed to
                # accommodate htmltidy which in version 4.8.6 generated crackpot HTML
-               # in its absence, see: http://bugzilla.wikimedia.org/show_bug.cgi?id=1765
+               # in its absence, see: https://phabricator.wikimedia.org/T3765
                # -Ævar
 
                $thumbWidth = $this->getGBWidth( $thumb ) - $this->getThumbPadding() - $this->getGBPadding();
index 7a0206c..0df6f84 100644 (file)
@@ -205,7 +205,7 @@ class TraditionalImageGallery extends ImageGalleryBase {
        protected function wrapGalleryText( $galleryText, $thumb ) {
                # ATTENTION: The newline after <div class="gallerytext"> is needed to
                # accommodate htmltidy which in version 4.8.6 generated crackpot html in
-               # its absence, see: http://bugzilla.wikimedia.org/show_bug.cgi?id=1765
+               # its absence, see: https://phabricator.wikimedia.org/T3765
                # -Ævar
 
                return "\n\t\t\t" . '<div class="gallerytext">' . "\n"
index ede30dd..55312ff 100644 (file)
@@ -20,9 +20,15 @@ class HTMLCheckField extends HTMLFormField {
                        $attr['class'] = $this->mClass;
                }
 
-               $chkLabel = Xml::check( $this->mName, $value, $attr )
-               . '&#160;'
-               . Html::rawElement( 'label', array( 'for' => $this->mID ), $this->mLabel );
+               $attrLabel = array( 'for' => $this->mID );
+               if ( isset( $attr['title'] ) ) {
+                       // propagate tooltip to label
+                       $attrLabel['title'] = $attr['title'];
+               }
+
+               $chkLabel = Xml::check( $this->mName, $value, $attr ) .
+                       '&#160;' .
+                       Html::rawElement( 'label', $attrLabel, $this->mLabel );
 
                if ( $wgUseMediaWikiUIEverywhere || $this->mParent instanceof VFormHTMLForm ) {
                        $chkLabel = Html::rawElement(
@@ -74,6 +80,11 @@ class HTMLCheckField extends HTMLFormField {
        function getLabel() {
                if ( $this->mParent instanceof OOUIHTMLForm ) {
                        return $this->mLabel;
+               } elseif (
+                       $this->mParent instanceof HTMLForm &&
+                       $this->mParent->getDisplayFormat() === 'div'
+               ) {
+                       return '';
                } else {
                        return '&#160;';
                }
index cb4bba2..65fc0e8 100644 (file)
@@ -125,6 +125,7 @@ class HTMLForm extends ContextSource {
        public static $typeMappings = array(
                'api' => 'HTMLApiField',
                'text' => 'HTMLTextField',
+               'textwithbutton' => 'HTMLTextFieldWithButton',
                'textarea' => 'HTMLTextAreaField',
                'select' => 'HTMLSelectField',
                'radio' => 'HTMLRadioField',
@@ -138,6 +139,7 @@ class HTMLForm extends ContextSource {
                'selectorother' => 'HTMLSelectOrOtherField',
                'selectandother' => 'HTMLSelectAndOtherField',
                'namespaceselect' => 'HTMLSelectNamespace',
+               'namespaceselectwithbutton' => 'HTMLSelectNamespaceWithButton',
                'tagfilter' => 'HTMLTagFilter',
                'submit' => 'HTMLSubmitField',
                'hidden' => 'HTMLHiddenField',
index 49478fb..e19273b 100644 (file)
@@ -524,12 +524,20 @@ abstract class HTMLFormField {
                        'mw-htmlform-nolabel' => ( $label === '' )
                );
 
-               $field = Html::rawElement(
-                       'div',
-                       array( 'class' => $outerDivClass ) + $cellAttributes,
-                       $inputHtml . "\n$errors"
-               );
-               $divCssClasses = array( "mw-htmlform-field-$fieldType", $this->mClass, $this->mVFormClass, $errorClass );
+               $horizontalLabel = isset( $this->mParams['horizontal-label'] )
+                       ? $this->mParams['horizontal-label'] : false;
+
+               if ( $horizontalLabel ) {
+                       $field = '&#160;' . $inputHtml . "\n$errors";
+               } else {
+                       $field = Html::rawElement(
+                               'div',
+                               array( 'class' => $outerDivClass ) + $cellAttributes,
+                               $inputHtml . "\n$errors"
+                       );
+               }
+               $divCssClasses = array( "mw-htmlform-field-$fieldType",
+                       $this->mClass, $this->mVFormClass, $errorClass );
 
                $wrapperAttributes = array(
                        'class' => $divCssClasses,
@@ -796,6 +804,8 @@ abstract class HTMLFormField {
 
                $displayFormat = $this->mParent->getDisplayFormat();
                $html = '';
+               $horizontalLabel = isset( $this->mParams['horizontal-label'] )
+                       ? $this->mParams['horizontal-label'] : false;
 
                if ( $displayFormat === 'table' ) {
                        $html =
@@ -803,7 +813,7 @@ abstract class HTMLFormField {
                                        array( 'class' => 'mw-label' ) + $cellAttributes,
                                        Html::rawElement( 'label', $for, $labelValue ) );
                } elseif ( $hasLabel || $this->mShowEmptyLabels ) {
-                       if ( $displayFormat === 'div' ) {
+                       if ( $displayFormat === 'div' && !$horizontalLabel ) {
                                $html =
                                        Html::rawElement( 'div',
                                                array( 'class' => 'mw-label' ) + $cellAttributes,
diff --git a/includes/htmlform/HTMLFormFieldWithButton.php b/includes/htmlform/HTMLFormFieldWithButton.php
new file mode 100644 (file)
index 0000000..3c8910f
--- /dev/null
@@ -0,0 +1,57 @@
+<?php
+/**
+ * Enables HTMLFormField elements to be build with a button.
+ */
+class HTMLFormFieldWithButton extends HTMLFormField {
+       /** @var string $mButtonClass CSS class for the button in this field */
+       protected $mButtonClass = '';
+
+       /** @var string|integer $mButtonId Element ID for the button in this field */
+       protected $mButtonId = '';
+
+       /** @var string $mButtonName Name the button in this field */
+       protected $mButtonName = '';
+
+       /** @var string $mButtonType Type of the button in this field (e.g. button or submit) */
+       protected $mButtonType = 'submit';
+
+       /** @var string $mButtonType Value for the button in this field */
+       protected $mButtonValue;
+
+       public function __construct( $info ) {
+               if ( isset( $info['buttonclass'] ) ) {
+                       $this->mButtonClass = $info['buttonclass'];
+               }
+               if ( isset( $info['buttonid'] ) ) {
+                       $this->mButtonId = $info['buttonid'];
+               }
+               if ( isset( $info['buttonname'] ) ) {
+                       $this->mButtonName = $info['buttonname'];
+               }
+               if ( isset( $info['buttondefault'] ) ) {
+                       $this->mButtonValue = $info['buttondefault'];
+               }
+               if ( isset( $info['buttontype'] ) ) {
+                       $this->mButtonType = $info['buttontype'];
+               }
+               parent::__construct( $info );
+       }
+
+       public function getInputHTML( $value ) {
+               $attr = array(
+                       'class' => 'mw-htmlform-submit ' . $this->mButtonClass,
+                       'id' => $this->mButtonId,
+               ) + $this->getAttributes( array( 'disabled', 'tabindex' ) );
+
+               return Html::input( $this->mButtonName, $this->mButtonValue, $this->mButtonType, $attr );
+       }
+
+       /**
+        * Combines the passed element with a button.
+        * @param String $element Element to combine the button with.
+        * @return String
+        */
+       public function getElement( $element ) {
+               return $element . '&#160;' . $this->getInputHTML( '' );
+       }
+}
\ No newline at end of file
index a1c0c95..23ca3bf 100644 (file)
@@ -71,7 +71,6 @@ class HTMLSelectAndOtherField extends HTMLSelectField {
         */
        function loadDataFromRequest( $request ) {
                if ( $request->getCheck( $this->mName ) ) {
-
                        $list = $request->getText( $this->mName );
                        $text = $request->getText( $this->mName . '-other' );
 
diff --git a/includes/htmlform/HTMLSelectNamespaceWithButton.php b/includes/htmlform/HTMLSelectNamespaceWithButton.php
new file mode 100644 (file)
index 0000000..5ab57a3
--- /dev/null
@@ -0,0 +1,17 @@
+<?php
+/**
+ * Creates a Html::namespaceSelector input field with a button assigned to the input field.
+ */
+class HTMLSelectNamespaceWithButton extends HTMLSelectNamespace {
+       /** @var HTMLFormClassWithButton $mClassWithButton */
+       protected $mClassWithButton = null;
+
+       public function __construct( $info ) {
+               $this->mClassWithButton = new HTMLFormFieldWithButton( $info );
+               parent::__construct( $info );
+       }
+
+       public function getInputHTML( $value ) {
+               return $this->mClassWithButton->getElement( parent::getInputHTML( $value ) );
+       }
+}
\ No newline at end of file
diff --git a/includes/htmlform/HTMLTextFieldWithButton.php b/includes/htmlform/HTMLTextFieldWithButton.php
new file mode 100644 (file)
index 0000000..00c0517
--- /dev/null
@@ -0,0 +1,17 @@
+<?php
+/**
+ * Creates a text input field with a button assigned to the input field.
+ */
+class HTMLTextFieldWithButton extends HTMLTextField {
+       /** @var HTMLFormClassWithButton $mClassWithButton */
+       protected $mClassWithButton = null;
+
+       public function __construct( $info ) {
+               $this->mClassWithButton = new HTMLFormFieldWithButton( $info );
+               parent::__construct( $info );
+       }
+
+       public function getInputHTML( $value ) {
+               return $this->mClassWithButton->getElement( parent::getInputHTML( $value ) );
+       }
+}
\ No newline at end of file
index a10fb48..2818349 100644 (file)
@@ -1123,12 +1123,12 @@ abstract class Installer {
                } elseif ( $c <= 0x7FF ) {
                        return chr( 0xC0 | $c >> 6 ) . chr( 0x80 | $c & 0x3F );
                } elseif ( $c <= 0xFFFF ) {
-                       return chr( 0xE0 | $c >> 12 ) . chr( 0x80 | $c >> 6 & 0x3F )
-                       . chr( 0x80 | $c & 0x3F );
+                       return chr( 0xE0 | $c >> 12 ) . chr( 0x80 | $c >> 6 & 0x3F ) .
+                               chr( 0x80 | $c & 0x3F );
                } elseif ( $c <= 0x10FFFF ) {
-                       return chr( 0xF0 | $c >> 18 ) . chr( 0x80 | $c >> 12 & 0x3F )
-                       . chr( 0x80 | $c >> 6 & 0x3F )
-                       . chr( 0x80 | $c & 0x3F );
+                       return chr( 0xF0 | $c >> 18 ) . chr( 0x80 | $c >> 12 & 0x3F ) .
+                               chr( 0x80 | $c >> 6 & 0x3F ) .
+                               chr( 0x80 | $c & 0x3F );
                } else {
                        return false;
                }
index 9bf055c..7b1cfdc 100644 (file)
@@ -371,7 +371,7 @@ ${serverSetting}
 {$magic}\$wgUseImageMagick = true;
 {$magic}\$wgImageMagickConvertCommand = \"{$this->values['wgImageMagickConvertCommand']}\";
 
-# InstantCommons allows wiki to use images from http://commons.wikimedia.org
+# InstantCommons allows wiki to use images from https://commons.wikimedia.org
 \$wgUseInstantCommons = {$this->values['wgUseInstantCommons']};
 
 ## If you use ImageMagick (or any other shell command) on a
index 5eef335..164cfab 100644 (file)
@@ -41,7 +41,7 @@ class MssqlUpdater extends DatabaseUpdater {
                        array( 'addField', 'mwuser', 'user_password_expires', 'patch-user_password_expires.sql' ),
 
                        // 1.24
-                       array( 'addField', 'page', 'page_lang', 'patch-page-page_lang.sql'),
+                       array( 'addField', 'page', 'page_lang', 'patch-page-page_lang.sql' ),
 
                        // 1.25
                        array( 'dropTable', 'hitcounter' ),
index 0321d8e..abcb333 100644 (file)
@@ -65,7 +65,7 @@
        "config-magic-quotes-sybase": "'''Kritická chyba: Je zapnuto [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase]!'''\nToto nastavení nepředvídatelně poškozuje vstupní data.\nMediaWiki nelze nainstalovat ani používat, dokud není toto nastavení vypnuto.",
        "config-mbstring": "'''Kritická chyba: Je zapnuto [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload]!'''\nToto nastavení způsobuje chyby a může nepředvídatelně poškozovat vstupní data.\nMediaWiki nelze nainstalovat ani používat, dokud není toto nastavení vypnuto.",
        "config-safe-mode": "'''Upozornění:''' Je aktivní [http://www.php.net/features.safe-mode bezpečný režim] PHP.\nMůže způsobovat potíže, zejména při použití načítání souborů a podpory <code>math</code>.",
-       "config-xml-bad": "Chybí XML modul pro PHP.\nMediaWiki potřebuje funkce v tomto modulu a v této konfiguraci nebude fungovat.\nPokud běžíte na Mandrake, nainstalujte balíček php-xml.",
+       "config-xml-bad": "Chybí XML modul pro PHP.\nMediaWiki potřebuje funkce v tomto modulu a v této konfiguraci nebude fungovat.\nMožná si budete muset nainstalovat RPM balíček php-xml.",
        "config-pcre-old": "'''Kritická chyba:''' Je vyžadováno PCRE verze $1 nebo novější.\nVaše binárka PHP obsahuje PCRE $2.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE Více informací.]",
        "config-pcre-no-utf8": "'''Kritická chyba''': PHP modul PCRE byl zřejmě přeložen bez podpory PCRE_UTF8.\nMediaWiki vyžaduje ke správné funkci podporu UTF-8.",
        "config-memory-raised": "<code>memory_limit</code> v PHP byl nastaven na $1, zvýšen na $2.",
index 995d576..da5d93f 100644 (file)
        "config-install-pg-schema-failed": "Falló la creación de las tablas.\nAsegúrate de que la cuenta «$1» tiene permiso de escritura para el esquema «$2».",
        "config-install-pg-commit": "Validando los cambios",
        "config-install-pg-plpgsql": "Comprobación de lenguaje PL/pgSQL",
-       "config-pg-no-plpgsql": "Necesita instalar el lenguaje PL/pgSQL en la base de datos $1",
+       "config-pg-no-plpgsql": "Necesitas instalar el lenguaje PL/pgSQL en la base de datos $1",
        "config-pg-no-create-privs": "La cuenta especificada para la instalación no tiene suficientes privilegios para crear una cuenta.",
        "config-pg-not-in-role": "La cuenta especificada para el usuario web ya existe.\nLa cuenta especificada para la instalación no es de un superusuario y no es miembro del grupo de usuarios con acceso a la web, por lo que es incapaz de crear objetos pertenecientes al usuario web.\n\nMediaWiki requiere actualmente que las tablas sean propiedad del usuario web. Especifique otro nombre de cuenta web, o haga clic en \"atrás\" y especifique un usuario de instalación con los privilegios convenientes.",
        "config-install-user": "Creando el usuario de la base de datos",
index f7160b6..8cd8dfe 100644 (file)
@@ -6,7 +6,8 @@
                        "Hym411",
                        "Priviet",
                        "Namoroka",
-                       "Revi"
+                       "Revi",
+                       "Alex00728"
                ]
        },
        "config-desc": "미디어위키를 위한 설치 관리자",
@@ -64,7 +65,7 @@
        "config-magic-quotes-sybase": "<strong>치명: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase]이 활성화되어 있습니다!</strong>\n이 옵션은 데이터를 입력하는 데 예기치 않는 손상을 일으킵니다.\n이 옵션을 비활성화하지 않는 한 미디어위키를 설치하고 사용할 수 없습니다.",
        "config-mbstring": "<strong>치명: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload]이 활성화되어 있습니다!</strong>\n이 옵션은 오류가 발생하고 데이터를 입력하는 데 예기치 않는 손상을 일으킬 수 있습니다.\n이 옵션을 비활성화하지 않는 한 미디어위키를 설치하고 사용할 수 없습니다.",
        "config-safe-mode": "<strong>경고:</strong> PHP의 [http://www.php.net/features.safe-mode 안전 모드]가 활성화되어 있습니다!\n특히 파일을 올리거나 <code>math</code>를 지원하는 데 문제가 발생할 수 있습니다.",
-       "config-xml-bad": "PHP의 XML 모듈이 없습니다.\n미디어위키는 이 모듈의 기능이 필요하며 이 설정에서는 작동하지 않습니다.\nMandrake를 실행하고 있다면 php-xml 패키지를 설치하세요.",
+       "config-xml-bad": "PHP의 XML 모듈이 없습니다.\n미디어위키는 이 모듈의 기능이 필요하며 이 설정에서는 작동하지 않습니다.\nphp-xml 패키지를 설치해야할 수도 있습니다.",
        "config-pcre-old": "<strong>치명:</strong> PCRE $1 또는 그 이상이 필요합니다.\nPHP 바이너리는 PCRE $2에 연결되어 있습니다. [https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE 자세한 정보].",
        "config-pcre-no-utf8": "<strong>치명:</strong> PHP의 PCRE 모듈은 RCRE_UTF8 지원 없이 컴파일된 것 같습니다.\n미디어위키가 올바르게 작동하려면 UTF-8을 지원해야 합니다.",
        "config-memory-raised": "PHP의 <code>memory_limit</code>는 $1이며 $2(으)로 늘렸습니다.",
index 607fc40..6d93a5c 100644 (file)
@@ -8,8 +8,12 @@
        "config-information": "دونسمنيا",
        "config-your-language": "زون شما:",
        "config-wiki-language": "زون ویکی:",
+       "config-back": "← ڤادئما",
+       "config-continue": "نئها گئرئتئن →",
        "config-page-language": "زون",
        "config-page-welcome": "د ویکی رسانه خوش اومایت!",
+       "config-page-dbconnect": "ڤأصل بییئن د رئسینە جا",
+       "config-page-dbsettings": "میزوٙنکاری رئسینە جا",
        "config-page-name": "نوم",
        "config-page-options": "گزينه يا هنی:",
        "config-page-install": "پورنیئن",
index 31dfda9..741c198 100644 (file)
        "config-mysql-engine": "Mutore d'astipo:",
        "config-mysql-innodb": "InnoDB",
        "config-mysql-myisam": "MyISAM",
+       "config-mysql-engine-help": "<strong>InnoDB</strong> è quase sempe 'a meglia opzione, pecché ave nu buono suppuorto concorrente.\n\n<strong>MyISAM</strong> putesse ghì cchiù ampressa int'a na installazione mono-utente e liegge-surtanto.\n'E database MyISAM se scassano cchiù spisso d' 'e database InnoDB.",
        "config-mysql-charset": "Nzieme 'e carattere d' 'o database:",
        "config-mysql-binary": "Binario",
        "config-mysql-utf8": "UTF-8",
index 5ec110d..e7d2388 100644 (file)
@@ -97,7 +97,7 @@
        "config-no-scaling": "Nie odnaleziono biblioteki GD lub ImageMagick. Możliwość zmniejszania załadowywanych grafik zostanie wyłączona.",
        "config-no-uri": "'''Błąd:''' Nie można określić aktualnego URI.\nInstalacja została przerwana.",
        "config-no-cli-uri": "<strong>Ostrzeżenie:</strong> Nie wskazano <code>--scriptpath</code>, użycie wartości domyślnej: <code>$1</code>.",
-       "config-using-server": "â\80\9e<nowiki>$1</nowiki>â\80\9c jest adresem serwera, na którym instalowana jest wiki.",
+       "config-using-server": "â\80\9e<nowiki>$1</nowiki>â\80\9d jest adresem serwera, na którym instalowana jest wiki.",
        "config-using-uri": "Wiki będzie zainstalowana pod adresem \"<nowiki>$1$2</nowiki>\".",
        "config-uploads-not-safe": "'''Uwaga''' – domyślny katalog do którego zapisywane są przesyłane pliki <code>$1</code> jest podatny na wykonanie dowolnego skryptu.\nChociaż MediaWiki sprawdza wszystkie przesłane pliki pod kątem bezpieczeństwa, zaleca się jednak, aby [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Security#Upload_security zamknąć tę lukę w zabezpieczeniach] przed włączeniem przesyłania plików.",
        "config-no-cli-uploads-check": "'''Ostrzeżenie:''' Katalog domyślny przesyłanych plików ( <code>$1</code> ) nie jest sprawdzona względem luki\n wykonania dowolnego skryptu podczas instalacji CLI w zabezpieczeniach.",
        "config-connection-error": "$1.\n\nSprawdź adres serwera, nazwę użytkownika i hasło, a następnie spróbuj ponownie.",
        "config-invalid-schema": "Nieprawidłowa nazwa schematu dla MediaWiki „$1”.\nNazwa może zawierać wyłącznie liter ASCII (a-z, A-Z), cyfr (0-9) i podkreślenia (_).",
        "config-db-sys-create-oracle": "Instalator może wykorzystać wyłącznie konto SYSDBA do tworzenia nowych kont użytkowników.",
-       "config-db-sys-user-exists-oracle": "Konto użytkownika â\80\9e$1â\80\9c już istnieje. SYSDBA można użyć tylko do utworzenia nowego konta!",
+       "config-db-sys-user-exists-oracle": "Konto użytkownika â\80\9e$1â\80\9d już istnieje. SYSDBA można użyć tylko do utworzenia nowego konta!",
        "config-postgres-old": "Korzystasz z wersji $2 oprogramowania PostgreSQL, a potrzebna jest wersja co najmniej $1.",
        "config-mssql-old": "Wymagany jest Microsoft SQL Server w wersji $1 lub nowszej. Masz zainstalowaną wersję $2.",
        "config-sqlite-name-help": "Wybierz nazwę, która będzie identyfikować Twoją wiki.\nNie wolno używać spacji ani myślników.\nZostanie ona użyta jako nazwa pliku danych SQLite.",
        "config-pg-no-create-privs": "Konto, które zostało określone dla instalacji nie ma wystarczających uprawnień, aby utworzyć konto.",
        "config-pg-not-in-role": "Konto określone dla użytkownika sieci już istnieje.\nKonto określone dla instalacji nie ma uprawnień administratora ani nie jest przynależy do roli użytkownika sieci web, więc nie można utworzyć obiektów stanowiących własność użytkownika sieci.\n\nMediaWiki wymaga obecnie, by tabele były własnością konta zwykłego użytkownika. Podaj inną nazwę konta użytkownika, lub kliknij przycisk \"Wstecz\" i podaj nazwę konta użytkownika instalatora, które posiada odpowiednie uprawnienia.",
        "config-install-user": "Tworzenie użytkownika bazy danych",
-       "config-install-user-alreadyexists": "Konto użytkownika â\80\9e$1â\80\9c już istnieje",
+       "config-install-user-alreadyexists": "Konto użytkownika â\80\9e$1â\80\9d już istnieje",
        "config-install-user-create-failed": "Tworzenie użytkownika \"$1\" nie powiodło się: $2",
        "config-install-user-grant-failed": "Przyznanie uprawnień użytkownikowi „$1” nie powiodło się – $2",
-       "config-install-user-missing": "Nie istnieje konto użytkownika â\80\9e$1â\80\9c.",
+       "config-install-user-missing": "Nie istnieje konto użytkownika â\80\9e$1â\80\9d.",
        "config-install-user-missing-create": "Określony użytkownik \"$1\" nie istnieje.\nKliknij poniższe pole wyboru „utwórz konto\" jeśli chcesz go utworzyć.",
        "config-install-tables": "Tworzenie tabel",
        "config-install-tables-exist": "'''Uwaga''' – wygląda na to, że tabele MediaWiki już istnieją.\nPomijam tworzenie tabel.",
        "config-insecure-keys": "'''Ostrzeżenie:''' {{PLURAL:$2|Klucz bezpieczeństwa|Klucze bezpieczeństwa|Klucze bezpieczeństwa}} ($1) utworzone podczas instalacji {{PLURAL:$2|utworzony podczas instalacji nie jest|utworzone podczas instalacji nie są|utworzone podczas instalacji nie są}} w pełni bezpieczne. Być może warto wygenerować {{PLURAL:$2|własny klucz|własne klucze|własne klucze}}.",
        "config-install-updates": "Zapobieganie uruchamianiu niepotrzebnych aktualizacji",
        "config-install-sysop": "Tworzenie konta administratora",
-       "config-install-subscribe-fail": "Nie można zapisaÄ\87 na listÄ\99 â\80\9emediawiki-announceâ\80\9c – $1",
+       "config-install-subscribe-fail": "Nie można zapisaÄ\87 na listÄ\99 â\80\9emediawiki-announceâ\80\9d – $1",
        "config-install-subscribe-notpossible": "cURL nie jest zainstalowany, więc <code>allow_url_fopen</code> nie jest dostępne.",
        "config-install-mainpage": "Tworzenie strony głównej z domyślną zawartością",
        "config-install-extension-tables": "Tworzenie tabel dla aktywnych rozszerzeń",
index a22f94d..aac1615 100644 (file)
@@ -3,7 +3,8 @@
                "authors": [
                        "Kusavica",
                        "KuboF",
-                       "Sudo77(new)"
+                       "Sudo77(new)",
+                       "Hromoslav"
                ]
        },
        "config-desc": "Inštalátor pre MediaWiki",
@@ -50,6 +51,7 @@
        "config-missing-db-name": "Musíte zadať hodnotu pre \"{{int:config-db-name}}\".",
        "config-missing-db-host": "Musíte zadať hodnotu pre \"{{int:config-db-host}}\".",
        "config-missing-db-server-oracle": "Musíte zadať hodnotu pre \"{{int:config-db-host-oracle}}\".",
+       "config-ns-generic": "Projekt",
        "config-admin-box": "Účet správcu",
        "config-admin-name": "Vaše používateľské meno:",
        "config-admin-password": "Heslo:",
@@ -64,6 +66,7 @@
        "config-optional-skip": "Už ma to nudí, proste nainštaluj wiki.",
        "config-profile-wiki": "Otvorená wiki",
        "config-profile-private": "Súkromná wiki",
+       "config-license-pd": "Voľné dielo",
        "config-email-settings": "Nastavenia e-mailu",
        "config-install-step-done": "hotovo",
        "config-install-step-failed": "zlyhalo",
index 8a46212..1d4867d 100644 (file)
@@ -1,8 +1,18 @@
 {
        "@metadata": {
                "authors": [
-                       "Andrewboltachev"
+                       "Andrewboltachev",
+                       "AlnashPiyash2"
                ]
        },
+       "config-title": "MediaWiki $1 пуктон",
+       "config-your-language": "Тӥляд кылды:",
+       "config-back": "← Берлань",
+       "config-continue": "Азьлань →",
+       "config-page-language": "Кыл",
+       "config-page-options": "Настройкаос",
+       "config-page-complete": "Быдэстэмын!",
+       "config-page-readme": "Лыдӟы монэ",
+       "config-page-copying": "Лицензия",
        "mainpagetext": "'''MediaWiki движок азинлыко пуктэмын.'''"
 }
index b4a2184..913aea0 100644 (file)
@@ -637,7 +637,6 @@ abstract class JobQueue {
         * @since 1.22
         */
        final public function getSiblingQueuesWithJobs( array $types ) {
-
                return $this->doGetSiblingQueuesWithJobs( $types );
        }
 
@@ -661,7 +660,6 @@ abstract class JobQueue {
         * @since 1.22
         */
        final public function getSiblingQueueSizes( array $types ) {
-
                return $this->doGetSiblingQueueSizes( $types );
        }
 
index febc277..aa02d1f 100644 (file)
@@ -169,4 +169,4 @@ class JobQueueAggregatorNull extends JobQueueAggregator {
        protected function doPurge() {
                return true;
        }
-}
\ No newline at end of file
+}
index 095811f..f85ee92 100644 (file)
@@ -380,7 +380,7 @@ class FormatJson {
                $inComment = false;
                $multiline = false;
 
-               for ($idx = 0; $idx < $maxLen; $idx++) {
+               for ( $idx = 0; $idx < $maxLen; $idx++ ) {
                        switch ( $str[$idx] ) {
                                case '"':
                                        $lookBehind = ( $idx - 1 >= 0 ) ? $str[$idx - 1] : '';
index 16e0d4f..f5d5229 100644 (file)
@@ -84,12 +84,12 @@ class MultiHttpClient {
         * Execute an HTTP(S) request
         *
         * This method returns a response map of:
-        *   - code    : HTTP response code or 0 if there was a serious cURL error
-        *   - reason  : HTTP response reason (empty if there was a serious cURL error)
-        *   - headers : <header name/value associative array>
-        *   - body    : HTTP response body or resource (if "stream" was set)
+        *   - code    : HTTP response code or 0 if there was a serious cURL error
+        *   - reason  : HTTP response reason (empty if there was a serious cURL error)
+        *   - headers : <header name/value associative array>
+        *   - body    : HTTP response body or resource (if "stream" was set)
         *   - error     : Any cURL error string
-        * The map also stores integer-indexed copies of these values. This lets callers do:
+        * The map also stores integer-indexed copies of these values. This lets callers do:
         * @code
         *              list( $rcode, $rdesc, $rhdrs, $rbody, $rerr ) = $http->run( $req );
         * @endcode
index a3d214f..f95ba3f 100755 (executable)
@@ -26,7 +26,8 @@ abstract class EventRelayer {
        /**
         * @param array $params
         */
-       public function __construct( array $params ) {}
+       public function __construct( array $params ) {
+       }
 
        /**
         * @param string $channel
index 05c2afc..2a0b3f0 100644 (file)
@@ -84,8 +84,8 @@ abstract class VirtualRESTService {
         *
         * This method may mangle any of the $reqs entry 'response' fields as needed:
         *   - code    : perform any code normalization [as needed]
-        *   - reason  : perform any reason normalization [as needed]
-        *   - headers : perform any header normalization [as needed]
+        *   - reason  : perform any reason normalization [as needed]
+        *   - headers : perform any header normalization [as needed]
         *
         * This method can also remove some of the requests as well as add new ones
         * (using $idGenerator to set each of the entries' array keys). For any existing
index 2ae5af3..17e3dda 100644 (file)
@@ -706,7 +706,7 @@ class FormatMetadata extends ContextSource {
                                                break;
 
                                        case 'GPSDOP':
-                                               // See http://en.wikipedia.org/wiki/Dilution_of_precision_(GPS)
+                                               // See https://en.wikipedia.org/wiki/Dilution_of_precision_(GPS)
                                                if ( $val <= 2 ) {
                                                        $val = $this->exifMsg( $tag, 'excellent', $this->formatNum( $val ) );
                                                } elseif ( $val <= 5 ) {
@@ -1283,7 +1283,7 @@ class FormatMetadata extends ContextSource {
         */
        private function gcd( $a, $b ) {
                /*
-                       // http://en.wikipedia.org/wiki/Euclidean_algorithm
+                       // https://en.wikipedia.org/wiki/Euclidean_algorithm
                        // Recursive form would be:
                        if( $b == 0 )
                                return $a;
@@ -1575,7 +1575,6 @@ class FormatMetadata extends ContextSource {
 
                // If revision deleted, exit immediately
                if ( $file->isDeleted( File::DELETED_FILE ) ) {
-
                        return array();
                }
 
index 15a2ca5..6f9c291 100644 (file)
@@ -23,4 +23,5 @@
  *
  * @ingroup Exception
  */
-class MediaTransformInvalidParametersException extends MWException {}
+class MediaTransformInvalidParametersException extends MWException {
+}
index 6c53bc5..8afa31b 100644 (file)
@@ -262,7 +262,6 @@ class SVGReader {
                        } elseif ( $this->reader->namespaceURI == self::NS_SVG
                                && $this->reader->nodeType == XMLReader::ELEMENT
                        ) {
-
                                $sysLang = $this->reader->getAttribute( 'systemLanguage' );
                                if ( !is_null( $sysLang ) && $sysLang !== '' ) {
                                        // See http://www.w3.org/TR/SVG/struct.html#SystemLanguageAttribute
index e957cb2..16e11dc 100644 (file)
@@ -3,7 +3,7 @@
  * Handler for the Gimp's native file format (XCF)
  *
  * Overview:
- *   http://en.wikipedia.org/wiki/XCF_(file_format)
+ *   https://en.wikipedia.org/wiki/XCF_(file_format)
  * Specification in Gnome repository:
  *   http://svn.gnome.org/viewvc/gimp/trunk/devel-docs/xcf.txt?view=markup
  *
index 3fb86ba..a838355 100644 (file)
@@ -415,7 +415,7 @@ class XMPReader implements LoggerAwareInterface {
                $len = unpack( 'Nlength/Noffset', substr( $content, 32, 8 ) );
 
                if ( !$len || $len['length'] < 4 || $len['offset'] < 0 || $len['offset'] > $len['length'] ) {
-                       $this->logger->info(  __METHOD__ . 'Error reading extended XMP block, invalid length or offset.' );
+                       $this->logger->info( __METHOD__ . 'Error reading extended XMP block, invalid length or offset.' );
 
                        return false;
                }
@@ -638,7 +638,6 @@ class XMPReader implements LoggerAwareInterface {
                // Validate structures.
                list( $ns, $tag ) = explode( ' ', $elm, 2 );
                if ( isset( $this->items[$ns][$tag]['validate'] ) ) {
-
                        $info =& $this->items[$ns][$tag];
                        $finalName = isset( $info['map_name'] )
                                ? $info['map_name'] : $tag;
index 2017a74..b8c1e75 100644 (file)
@@ -358,8 +358,6 @@ class SqlBagOStuff extends BagOStuff {
                return $result;
        }
 
-
-
        /**
         * @param string $key
         * @param mixed $value
index 11a3638..5d7f365 100644 (file)
@@ -333,7 +333,9 @@ class Article implements Page {
         * @return string|bool String containing article contents, or false if null
         * @deprecated since 1.21, use WikiPage::getContent() instead
         */
-       function fetchContent() { #BC cruft!
+       function fetchContent() {
+               // BC cruft!
+
                ContentHandler::deprecated( __METHOD__, '1.21' );
 
                if ( $this->mContentLoaded && $this->mContent ) {
index 5e72151..cb3def3 100644 (file)
@@ -3024,7 +3024,7 @@ class WikiPage implements Page, IDBAccessObject {
                        ) );
                }
 
-               // Get the last edit not by this guy...
+               // Get the last edit not by this person...
                // Note: these may not be public values
                $user = intval( $current->getUser( Revision::RAW ) );
                $user_text = $dbw->addQuotes( $current->getUserText( Revision::RAW ) );
@@ -3046,29 +3046,6 @@ class WikiPage implements Page, IDBAccessObject {
                        return array( array( 'notvisiblerev' ) );
                }
 
-               // Set patrolling and bot flag on the edits, which gets rollbacked.
-               // This is done before the rollback edit to have patrolling also on failure (bug 62157).
-               $set = array();
-               if ( $bot && $guser->isAllowed( 'markbotedits' ) ) {
-                       // Mark all reverted edits as bot
-                       $set['rc_bot'] = 1;
-               }
-
-               if ( $wgUseRCPatrol ) {
-                       // Mark all reverted edits as patrolled
-                       $set['rc_patrolled'] = 1;
-               }
-
-               if ( count( $set ) ) {
-                       $dbw->update( 'recentchanges', $set,
-                               array( /* WHERE */
-                                       'rc_cur_id' => $current->getPage(),
-                                       'rc_user_text' => $current->getUserText(),
-                                       'rc_timestamp > ' . $dbw->addQuotes( $s->rev_timestamp ),
-                               ), __METHOD__
-                       );
-               }
-
                // Generate the edit summary if necessary
                $target = Revision::newFromId( $s->rev_id, Revision::READ_LATEST );
                if ( empty( $summary ) ) {
@@ -3117,6 +3094,30 @@ class WikiPage implements Page, IDBAccessObject {
                        $guser
                );
 
+               // Set patrolling and bot flag on the edits, which gets rollbacked.
+               // This is done even on edit failure to have patrolling in that case (bug 62157).
+               $set = array();
+               if ( $bot && $guser->isAllowed( 'markbotedits' ) ) {
+                       // Mark all reverted edits as bot
+                       $set['rc_bot'] = 1;
+               }
+
+               if ( $wgUseRCPatrol ) {
+                       // Mark all reverted edits as patrolled
+                       $set['rc_patrolled'] = 1;
+               }
+
+               if ( count( $set ) ) {
+                       $dbw->update( 'recentchanges', $set,
+                               array( /* WHERE */
+                                       'rc_cur_id' => $current->getPage(),
+                                       'rc_user_text' => $current->getUserText(),
+                                       'rc_timestamp > ' . $dbw->addQuotes( $s->rev_timestamp ),
+                               ),
+                               __METHOD__
+                       );
+               }
+
                if ( !$status->isOK() ) {
                        return $status->getErrorsArray();
                }
index 7026c5c..b4ca7c8 100644 (file)
@@ -560,7 +560,6 @@ class LinkHolderArray {
 
                        // for each found variants, figure out link holders and replace
                        foreach ( $varRes as $s ) {
-
                                $variantTitle = Title::makeTitle( $s->page_namespace, $s->page_title );
                                $varPdbk = $variantTitle->getPrefixedDBkey();
                                $vardbk = $variantTitle->getDBkey();
index 928c3a8..3183689 100644 (file)
@@ -1438,7 +1438,7 @@ class Parser {
                                '-' => '',
                                ' ' => '',
                                'x' => 'X',
-                       ));
+                       ) );
                        $titleObj = SpecialPage::getTitleFor( 'Booksources', $num );
                        return '<a href="' .
                                htmlspecialchars( $titleObj->getLocalURL() ) .
@@ -1481,7 +1481,7 @@ class Parser {
                # Don't break a trailing HTML entity by moving the ; into $trail
                # This is in hot code, so use substr_compare to avoid having to
                # create a new string object for the comparison
-               if ( $numSepChars && substr_compare( $url, ";", -$numSepChars, 1 ) === 0) {
+               if ( $numSepChars && substr_compare( $url, ";", -$numSepChars, 1 ) === 0 ) {
                        # more optimization: instead of running preg_match with a $
                        # anchor, which can be slow, do the match on the reversed
                        # string starting at the desired offset.
@@ -3438,7 +3438,6 @@ class Parser {
 
                # SUBST
                if ( !$found ) {
-
                        $substMatch = $this->mSubstWords->matchStartAndRemove( $part1 );
 
                        # Possibilities for substMatch: "subst", "safesubst" or FALSE
@@ -3496,7 +3495,6 @@ class Parser {
 
                # Parser functions
                if ( !$found ) {
-
                        $colonPos = strpos( $part1, ':' );
                        if ( $colonPos !== false ) {
                                $func = substr( $part1, 0, $colonPos );
index 56cddce..718ca35 100644 (file)
@@ -154,7 +154,6 @@ class Preprocessor_DOM implements Preprocessor {
                $cacheable = ( $wgPreprocessorCacheThreshold !== false
                        && strlen( $text ) > $wgPreprocessorCacheThreshold );
                if ( $cacheable ) {
-
                        $cacheKey = wfMemcKey( 'preprocess-xml', md5( $text ), $flags );
                        $cacheValue = $wgMemc->get( $cacheKey );
                        if ( $cacheValue ) {
index 308ef44..d1ad39c 100644 (file)
@@ -119,7 +119,6 @@ class Preprocessor_Hash implements Preprocessor {
                        && strlen( $text ) > $wgPreprocessorCacheThreshold;
 
                if ( $cacheable ) {
-
                        $cacheKey = wfMemcKey( 'preprocess-hash', md5( $text ), $flags );
                        $cacheValue = $wgMemc->get( $cacheKey );
                        if ( $cacheValue ) {
index 9062251..d787edb 100644 (file)
@@ -39,5 +39,6 @@ class ProfileSection {
         *
         * @param string $name Name of the function to profile
         */
-       public function __construct( $name ) {}
+       public function __construct( $name ) {
+       }
 }
index 9983fec..c65a3f9 100644 (file)
@@ -145,8 +145,11 @@ abstract class Profiler {
        }
 
        // Kept BC for now, remove when possible
-       public function profileIn( $functionname ) {}
-       public function profileOut( $functionname ) {}
+       public function profileIn( $functionname ) {
+       }
+
+       public function profileOut( $functionname ) {
+       }
 
        /**
         * Mark the start of a custom profiling frame (e.g. DB queries).
index 4984e77..6c58453 100644 (file)
@@ -32,7 +32,7 @@
 function wfGetRusage() {
        if ( !function_exists( 'getrusage' ) ) {
                return false;
-       } elseif ( defined ( 'HHVM_VERSION' ) ) {
+       } elseif ( defined( 'HHVM_VERSION' ) ) {
                return getrusage( 2 /* RUSAGE_THREAD */ );
        } else {
                return getrusage( 0 /* RUSAGE_SELF */ );
index 7da03c1..a562677 100644 (file)
@@ -23,7 +23,7 @@
 
 /**
  * ProfilerSimpleUDP class, that sends out messages for 'udpprofile' daemon
- * (see http://git.wikimedia.org/tree/operations%2Fsoftware.git/master/udpprofile)
+ * (see https://git.wikimedia.org/tree/operations%2Fsoftware.git/master/udpprofile)
  *
  * @ingroup Profiler
  * @since 1.25
index 0a09ff5..273e9ef 100644 (file)
@@ -290,10 +290,14 @@ class ExtensionProcessor implements Processor {
 
        /**
         * @param string $name
-        * @param mixed $value
+        * @param array $value
         * @param array &$array
+        * @throws InvalidArgumentException
         */
        protected function storeToArray( $name, $value, &$array ) {
+               if ( !is_array( $value ) ) {
+                       throw new InvalidArgumentException( "The value for '$name' should be an array" );
+               }
                if ( isset( $array[$name] ) ) {
                        $array[$name] = array_merge_recursive( $array[$name], $value );
                } else {
index d767870..d48a1bd 100644 (file)
@@ -137,7 +137,7 @@ class ExtensionRegistry {
                        if ( !is_array( $info ) ) {
                                throw new Exception( "$path is not a valid JSON file." );
                        }
-                       if ( !isset( $info['manifest_version' ] ) ) {
+                       if ( !isset( $info['manifest_version'] ) ) {
                                // For backwards-compatability, assume a version of 1
                                $info['manifest_version'] = 1;
                        }
index 5784f2a..5967537 100644 (file)
  * @since 1.24
  */
 class DerivativeResourceLoaderContext extends ResourceLoaderContext {
+       const INHERIT_VALUE = -1;
 
        /**
         * @var ResourceLoaderContext
         */
        private $context;
-       protected $modules;
-       protected $language;
-       protected $direction;
-       protected $skin;
-       protected $user;
-       protected $debug;
-       protected $only;
-       protected $version;
-       protected $hash;
-       protected $raw;
+
+       protected $modules = self::INHERIT_VALUE;
+       protected $language = self::INHERIT_VALUE;
+       protected $direction = self::INHERIT_VALUE;
+       protected $skin = self::INHERIT_VALUE;
+       protected $user = self::INHERIT_VALUE;
+       protected $debug = self::INHERIT_VALUE;
+       protected $only = self::INHERIT_VALUE;
+       protected $version = self::INHERIT_VALUE;
+       protected $raw = self::INHERIT_VALUE;
 
        public function __construct( ResourceLoaderContext $context ) {
                $this->context = $context;
        }
 
        public function getModules() {
-               if ( !is_null( $this->modules ) ) {
-                       return $this->modules;
-               } else {
+               if ( $this->modules === self::INHERIT_VALUE ) {
                        return $this->context->getModules();
                }
+               return $this->modules;
        }
 
        /**
@@ -64,11 +64,10 @@ class DerivativeResourceLoaderContext extends ResourceLoaderContext {
        }
 
        public function getLanguage() {
-               if ( !is_null( $this->language ) ) {
-                       return $this->language;
-               } else {
+               if ( $this->language === self::INHERIT_VALUE ) {
                        return $this->context->getLanguage();
                }
+               return $this->language;
        }
 
        /**
@@ -76,16 +75,19 @@ class DerivativeResourceLoaderContext extends ResourceLoaderContext {
         */
        public function setLanguage( $language ) {
                $this->language = $language;
-               $this->direction = null; // Invalidate direction since it might be based on language
+               // Invalidate direction since it is based on language
+               $this->direction = null;
                $this->hash = null;
        }
 
        public function getDirection() {
-               if ( !is_null( $this->direction ) ) {
-                       return $this->direction;
-               } else {
+               if ( $this->direction === self::INHERIT_VALUE ) {
                        return $this->context->getDirection();
                }
+               if ( $this->direction === null ) {
+                       $this->direction = Language::factory( $this->getLanguage() )->getDir();
+               }
+               return $this->direction;
        }
 
        /**
@@ -97,11 +99,10 @@ class DerivativeResourceLoaderContext extends ResourceLoaderContext {
        }
 
        public function getSkin() {
-               if ( !is_null( $this->skin ) ) {
-                       return $this->skin;
-               } else {
+               if ( $this->skin === self::INHERIT_VALUE ) {
                        return $this->context->getSkin();
                }
+               return $this->skin;
        }
 
        /**
@@ -113,11 +114,10 @@ class DerivativeResourceLoaderContext extends ResourceLoaderContext {
        }
 
        public function getUser() {
-               if ( !is_null( $this->user ) ) {
-                       return $this->user;
-               } else {
+               if ( $this->user === self::INHERIT_VALUE ) {
                        return $this->context->getUser();
                }
+               return $this->user;
        }
 
        /**
@@ -130,11 +130,10 @@ class DerivativeResourceLoaderContext extends ResourceLoaderContext {
        }
 
        public function getDebug() {
-               if ( !is_null( $this->debug ) ) {
-                       return $this->debug;
-               } else {
+               if ( $this->debug === self::INHERIT_VALUE ) {
                        return $this->context->getDebug();
                }
+               return $this->debug;
        }
 
        /**
@@ -146,15 +145,14 @@ class DerivativeResourceLoaderContext extends ResourceLoaderContext {
        }
 
        public function getOnly() {
-               if ( !is_null( $this->only ) ) {
-                       return $this->only;
-               } else {
+               if ( $this->only === self::INHERIT_VALUE ) {
                        return $this->context->getOnly();
                }
+               return $this->only;
        }
 
        /**
-        * @param string $only
+        * @param string|null $only
         */
        public function setOnly( $only ) {
                $this->only = $only;
@@ -162,15 +160,14 @@ class DerivativeResourceLoaderContext extends ResourceLoaderContext {
        }
 
        public function getVersion() {
-               if ( !is_null( $this->version ) ) {
-                       return $this->version;
-               } else {
+               if ( $this->version === self::INHERIT_VALUE ) {
                        return $this->context->getVersion();
                }
+               return $this->version;
        }
 
        /**
-        * @param string $version
+        * @param string|null $version
         */
        public function setVersion( $version ) {
                $this->version = $version;
@@ -178,11 +175,10 @@ class DerivativeResourceLoaderContext extends ResourceLoaderContext {
        }
 
        public function getRaw() {
-               if ( !is_null( $this->raw ) ) {
-                       return $this->raw;
-               } else {
+               if ( $this->raw === self::INHERIT_VALUE ) {
                        return $this->context->getRaw();
                }
+               return $this->raw;
        }
 
        /**
index bbe55ab..92b0156 100644 (file)
@@ -1104,9 +1104,9 @@ MESSAGE;
                $module = array(
                        $name,
                        $scripts,
-                       (object) $styles,
-                       (object) $messages,
-                       (object) $templates,
+                       (object)$styles,
+                       (object)$messages,
+                       (object)$templates,
                );
                self::trimArray( $module );
 
index cee7035..2e1752a 100644 (file)
@@ -59,24 +59,26 @@ class ResourceLoaderContext {
                $this->resourceLoader = $resourceLoader;
                $this->request = $request;
 
-               // Interpret request
                // List of modules
                $modules = $request->getVal( 'modules' );
                $this->modules = $modules ? self::expandModuleNames( $modules ) : array();
+
                // Various parameters
-               $this->skin = $request->getVal( 'skin' );
                $this->user = $request->getVal( 'user' );
                $this->debug = $request->getFuzzyBool(
-                       'debug', $resourceLoader->getConfig()->get( 'ResourceLoaderDebug' )
+                       'debug',
+                       $resourceLoader->getConfig()->get( 'ResourceLoaderDebug' )
                );
-               $this->only = $request->getVal( 'only' );
-               $this->version = $request->getVal( 'version' );
+               $this->only = $request->getVal( 'only', null );
+               $this->version = $request->getVal( 'version', null );
                $this->raw = $request->getFuzzyBool( 'raw' );
+
                // Image requests
                $this->image = $request->getVal( 'image' );
                $this->variant = $request->getVal( 'variant' );
                $this->format = $request->getVal( 'format' );
 
+               $this->skin = $request->getVal( 'skin' );
                $skinnames = Skin::getSkinNames();
                // If no skin is specified, or we don't recognize the skin, use the default skin
                if ( !$this->skin || !isset( $skinnames[$this->skin] ) ) {
@@ -157,7 +159,7 @@ class ResourceLoaderContext {
        public function getLanguage() {
                if ( $this->language === null ) {
                        // Must be a valid language code after this point (bug 62849)
-                       $this->language = RequestContext::sanitizeLangCode( $this->request->getVal( 'lang' ) );
+                       $this->language = RequestContext::sanitizeLangCode( $this->getRequest()->getVal( 'lang' ) );
                }
                return $this->language;
        }
@@ -167,7 +169,7 @@ class ResourceLoaderContext {
         */
        public function getDirection() {
                if ( $this->direction === null ) {
-                       $this->direction = $this->request->getVal( 'dir' );
+                       $this->direction = $this->getRequest()->getVal( 'dir' );
                        if ( !$this->direction ) {
                                // Determine directionality based on user language (bug 6100)
                                $this->direction = Language::factory( $this->getLanguage() )->getDir();
@@ -177,7 +179,7 @@ class ResourceLoaderContext {
        }
 
        /**
-        * @return string|null
+        * @return string
         */
        public function getSkin() {
                return $this->skin;
@@ -305,21 +307,21 @@ class ResourceLoaderContext {
         * @return bool
         */
        public function shouldIncludeScripts() {
-               return is_null( $this->getOnly() ) || $this->getOnly() === 'scripts';
+               return $this->getOnly() === null || $this->getOnly() === 'scripts';
        }
 
        /**
         * @return bool
         */
        public function shouldIncludeStyles() {
-               return is_null( $this->getOnly() ) || $this->getOnly() === 'styles';
+               return $this->getOnly() === null || $this->getOnly() === 'styles';
        }
 
        /**
         * @return bool
         */
        public function shouldIncludeMessages() {
-               return is_null( $this->getOnly() );
+               return $this->getOnly() === null;
        }
 
        /**
index d0273c2..f3fae0e 100644 (file)
@@ -65,15 +65,10 @@ class ResourceLoaderEditToolbarModule extends ResourceLoaderFileModule {
        }
 
        /**
-        * @param ResourceLoaderContext $context
-        * @return array
+        * @return bool
         */
-       public function getDefinitionSummary( ResourceLoaderContext $context ) {
-               $summary = parent::getDefinitionSummary( $context );
-               $summary[] = array(
-                       'lessVars' => $this->getLessVars( $context ),
-               );
-               return $summary;
+       public function enableModuleContentVersion() {
+               return true;
        }
 
        /**
index e6c9bd0..b734def 100644 (file)
@@ -513,6 +513,18 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
                return $this->raw;
        }
 
+       /**
+        * Disable module content versioning.
+        *
+        * This class uses getDefinitionSummary() instead, to avoid filesystem overhead
+        * involved with building the full module content inside a startup request.
+        *
+        * @return bool
+        */
+       public function enableModuleContentVersion() {
+               return false;
+       }
+
        /**
         * Helper method to gather file mtimes for getDefinitionSummary.
         *
index bf68fdd..2338c90 100644 (file)
@@ -54,15 +54,16 @@ class ResourceLoaderImage {
                $this->variants = $variants;
 
                // Expand shorthands:
-               // array( "en,de,fr" => "foo.svg" ) → array( "en" => "foo.svg", "de" => "foo.svg", "fr" => "foo.svg" )
+               // array( "en,de,fr" => "foo.svg" )
+               // → array( "en" => "foo.svg", "de" => "foo.svg", "fr" => "foo.svg" )
                if ( is_array( $this->descriptor ) && isset( $this->descriptor['lang'] ) ) {
                        foreach ( array_keys( $this->descriptor['lang'] ) as $langList ) {
                                if ( strpos( $langList, ',' ) !== false ) {
                                        $this->descriptor['lang'] += array_fill_keys(
                                                explode( ',', $langList ),
-                                               $this->descriptor['lang'][ $langList ]
+                                               $this->descriptor['lang'][$langList]
                                        );
-                                       unset( $this->descriptor['lang'][ $langList ] );
+                                       unset( $this->descriptor['lang'][$langList] );
                                }
                        }
                }
@@ -75,11 +76,15 @@ class ResourceLoaderImage {
                } );
                $extensions = array_unique( $extensions );
                if ( count( $extensions ) !== 1 ) {
-                       throw new InvalidArgumentException( "File type for different image files of '$name' not the same" );
+                       throw new InvalidArgumentException(
+                               "File type for different image files of '$name' not the same"
+                       );
                }
                $ext = $extensions[0];
                if ( !isset( self::$fileTypes[$ext] ) ) {
-                       throw new InvalidArgumentException( "Invalid file type for image files of '$name' (valid: svg, png, gif, jpg)" );
+                       throw new InvalidArgumentException(
+                               "Invalid file type for image files of '$name' (valid: svg, png, gif, jpg)"
+                       );
                }
                $this->extension = $ext;
        }
@@ -121,10 +126,10 @@ class ResourceLoaderImage {
                $desc = $this->descriptor;
                if ( is_string( $desc ) ) {
                        return $this->basePath . '/' . $desc;
-               } elseif ( isset( $desc['lang'][ $context->getLanguage() ] ) ) {
-                       return $this->basePath . '/' . $desc['lang'][ $context->getLanguage() ];
-               } elseif ( isset( $desc[ $context->getDirection() ] ) ) {
-                       return $this->basePath . '/' . $desc[ $context->getDirection() ];
+               } elseif ( isset( $desc['lang'][$context->getLanguage()] ) ) {
+                       return $this->basePath . '/' . $desc['lang'][$context->getLanguage()];
+               } elseif ( isset( $desc[$context->getDirection()] ) ) {
+                       return $this->basePath . '/' . $desc[$context->getDirection()];
                } else {
                        return $this->basePath . '/' . $desc['default'];
                }
index 2caca87..8de87f2 100644 (file)
@@ -86,9 +86,11 @@ class ResourceLoaderImageModule extends ResourceLoaderModule {
         *         // List of image files and their options
         *         'images' => array(
         *             [theme name] => array(
-        *                 [file path string],
-        *                 [file path string] => array(
-        *                     'name' => [image name string, defaults to file name],
+        *                 [icon name] => array(
+        *                     'file' => [file path string or array whose values are file path strings
+        *                                    and whose keys are 'default', 'ltr', 'rtl', a single
+        *                                    language code like 'en', or a list of language codes like
+        *                                    'en,de,ar'],
         *                     'variants' => [array of variant name strings, variants
         *                                    available for this image],
         *                 ),
@@ -132,20 +134,30 @@ class ResourceLoaderImageModule extends ResourceLoaderModule {
 
                $prefix = isset( $options['prefix'] ) && $options['prefix'];
                $selector = isset( $options['selector'] ) && $options['selector'];
-               $selectorWithoutVariant = isset( $options['selectorWithoutVariant'] ) && $options['selectorWithoutVariant'];
-               $selectorWithVariant = isset( $options['selectorWithVariant'] ) && $options['selectorWithVariant'];
+               $selectorWithoutVariant = isset( $options['selectorWithoutVariant'] )
+                       && $options['selectorWithoutVariant'];
+               $selectorWithVariant = isset( $options['selectorWithVariant'] )
+                       && $options['selectorWithVariant'];
 
                if ( $selectorWithoutVariant && !$selectorWithVariant ) {
-                       throw new InvalidArgumentException( "Given 'selectorWithoutVariant' but no 'selectorWithVariant'." );
+                       throw new InvalidArgumentException(
+                               "Given 'selectorWithoutVariant' but no 'selectorWithVariant'."
+                       );
                }
                if ( $selectorWithVariant && !$selectorWithoutVariant ) {
-                       throw new InvalidArgumentException( "Given 'selectorWithVariant' but no 'selectorWithoutVariant'." );
+                       throw new InvalidArgumentException(
+                               "Given 'selectorWithVariant' but no 'selectorWithoutVariant'."
+                       );
                }
                if ( $selector && $selectorWithVariant ) {
-                       throw new InvalidArgumentException( "Incompatible 'selector' and 'selectorWithVariant'+'selectorWithoutVariant' given." );
+                       throw new InvalidArgumentException(
+                               "Incompatible 'selector' and 'selectorWithVariant'+'selectorWithoutVariant' given."
+                       );
                }
                if ( !$prefix && !$selector && !$selectorWithVariant ) {
-                       throw new InvalidArgumentException( "None of 'prefix', 'selector' or 'selectorWithVariant'+'selectorWithoutVariant' given." );
+                       throw new InvalidArgumentException(
+                               "None of 'prefix', 'selector' or 'selectorWithVariant'+'selectorWithoutVariant' given."
+                       );
                }
 
                foreach ( $options as $member => $option ) {
@@ -229,23 +241,23 @@ class ResourceLoaderImageModule extends ResourceLoaderModule {
                        $this->loadFromDefinition();
                        $this->imageObjects = array();
                }
-               if ( !isset( $this->imageObjects[ $skin ] ) ) {
-                       $this->imageObjects[ $skin ] = array();
-                       if ( !isset( $this->images[ $skin ] ) ) {
-                               $this->images[ $skin ] = isset( $this->images[ 'default' ] ) ?
-                                       $this->images[ 'default' ] :
+               if ( !isset( $this->imageObjects[$skin] ) ) {
+                       $this->imageObjects[$skin] = array();
+                       if ( !isset( $this->images[$skin] ) ) {
+                               $this->images[$skin] = isset( $this->images['default'] ) ?
+                                       $this->images['default'] :
                                        array();
                        }
-                       foreach ( $this->images[ $skin ] as $name => $options ) {
+                       foreach ( $this->images[$skin] as $name => $options ) {
                                $fileDescriptor = is_string( $options ) ? $options : $options['file'];
 
                                $allowedVariants = array_merge(
                                        is_array( $options ) && isset( $options['variants'] ) ? $options['variants'] : array(),
                                        $this->getGlobalVariants( $context )
                                );
-                               if ( isset( $this->variants[ $skin ] ) ) {
+                               if ( isset( $this->variants[$skin] ) ) {
                                        $variantConfig = array_intersect_key(
-                                               $this->variants[ $skin ],
+                                               $this->variants[$skin],
                                                array_fill_keys( $allowedVariants, true )
                                        );
                                } else {
@@ -259,11 +271,11 @@ class ResourceLoaderImageModule extends ResourceLoaderModule {
                                        $this->localBasePath,
                                        $variantConfig
                                );
-                               $this->imageObjects[ $skin ][ $image->getName() ] = $image;
+                               $this->imageObjects[$skin][$image->getName()] = $image;
                        }
                }
 
-               return $this->imageObjects[ $skin ];
+               return $this->imageObjects[$skin];
        }
 
        /**
@@ -278,21 +290,21 @@ class ResourceLoaderImageModule extends ResourceLoaderModule {
                        $this->loadFromDefinition();
                        $this->globalVariants = array();
                }
-               if ( !isset( $this->globalVariants[ $skin ] ) ) {
-                       $this->globalVariants[ $skin ] = array();
-                       if ( !isset( $this->variants[ $skin ] ) ) {
-                               $this->variants[ $skin ] = isset( $this->variants[ 'default' ] ) ?
-                                       $this->variants[ 'default' ] :
+               if ( !isset( $this->globalVariants[$skin] ) ) {
+                       $this->globalVariants[$skin] = array();
+                       if ( !isset( $this->variants[$skin] ) ) {
+                               $this->variants[$skin] = isset( $this->variants['default'] ) ?
+                                       $this->variants['default'] :
                                        array();
                        }
-                       foreach ( $this->variants[ $skin ] as $name => $config ) {
+                       foreach ( $this->variants[$skin] as $name => $config ) {
                                if ( isset( $config['global'] ) && $config['global'] ) {
-                                       $this->globalVariants[ $skin ][] = $name;
+                                       $this->globalVariants[$skin][] = $name;
                                }
                        }
                }
 
-               return $this->globalVariants[ $skin ];
+               return $this->globalVariants[$skin];
        }
 
        /**
index b905781..d159284 100644 (file)
@@ -49,14 +49,9 @@ class ResourceLoaderJqueryMsgModule extends ResourceLoaderFileModule {
        }
 
        /**
-        * @param ResourceLoaderContext $context
-        * @return array|null
+        * @return bool
         */
-       public function getDefinitionSummary( ResourceLoaderContext $context ) {
-               $summary = parent::getDefinitionSummary( $context );
-               $summary[] = array(
-                       'sanitizerData' => Sanitizer::getRecognizedTagData()
-               );
-               return $summary;
+       public function enableModuleContentVersion() {
+               return true;
        }
 }
index be15008..27c74d7 100644 (file)
@@ -63,11 +63,10 @@ class ResourceLoaderLanguageDataModule extends ResourceLoaderModule {
        }
 
        /**
-        * @param ResourceLoaderContext $context
-        * @return string Hash
+        * @return bool
         */
-       public function getModifiedHash( ResourceLoaderContext $context ) {
-               return md5( serialize( $this->getData( $context ) ) );
+       public function enableModuleContentVersion() {
+               return true;
        }
 
        /**
index 827a573..081c728 100644 (file)
@@ -32,7 +32,6 @@ class ResourceLoaderLanguageNamesModule extends ResourceLoaderModule {
 
        protected $targets = array( 'desktop', 'mobile' );
 
-
        /**
         * @param ResourceLoaderContext $context
         * @return array
@@ -69,11 +68,10 @@ class ResourceLoaderLanguageNamesModule extends ResourceLoaderModule {
        }
 
        /**
-        * @param ResourceLoaderContext $context
-        * @return string Hash
+        * @return bool
         */
-       public function getModifiedHash( ResourceLoaderContext $context ) {
-               return md5( serialize( $this->getData( $context ) ) );
+       public function enableModuleContentVersion() {
+               return true;
        }
 
 }
index ec7ed70..5e7067f 100644 (file)
@@ -293,9 +293,9 @@ abstract class ResourceLoaderModule {
 
        /**
         * Whether the position returned by getPosition() is a default value or comes from the module
-        * definition. This method is meant to be short-lived, and is only useful until classes added via
-        * addModuleStyles with a default value define an explicit position. See getModuleStyles() in
-        * OutputPage for the related migration warning.
+        * definition. This method is meant to be short-lived, and is only useful until classes added
+        * via addModuleStyles with a default value define an explicit position. See getModuleStyles()
+        * in OutputPage for the related migration warning.
         *
         * @return bool
         * @since  1.26
@@ -386,16 +386,21 @@ abstract class ResourceLoaderModule {
                }
 
                $dbr = wfGetDB( DB_SLAVE );
-               $deps = $dbr->selectField( 'module_deps', 'md_deps', array(
+               $deps = $dbr->selectField( 'module_deps',
+                       'md_deps',
+                       array(
                                'md_module' => $this->getName(),
                                'md_skin' => $skin,
-                       ), __METHOD__
+                       ),
+                       __METHOD__
                );
+
                if ( !is_null( $deps ) ) {
                        $this->fileDeps[$skin] = (array)FormatJson::decode( $deps, true );
                } else {
                        $this->fileDeps[$skin] = array();
                }
+
                return $this->fileDeps[$skin];
        }
 
@@ -421,10 +426,13 @@ abstract class ResourceLoaderModule {
                        }
 
                        $dbr = wfGetDB( DB_SLAVE );
-                       $msgBlobMtime = $dbr->selectField( 'msg_resource', 'mr_timestamp', array(
+                       $msgBlobMtime = $dbr->selectField( 'msg_resource',
+                               'mr_timestamp',
+                               array(
                                        'mr_resource' => $this->getName(),
                                        'mr_lang' => $lang
-                               ), __METHOD__
+                               ),
+                               __METHOD__
                        );
                        // If no blob was found, but the module does have messages, that means we need
                        // to regenerate it. Return NOW
@@ -458,9 +466,9 @@ abstract class ResourceLoaderModule {
                // Cache this expensive operation. This calls builds the scripts, styles, and messages
                // content which typically involves filesystem and/or database access.
                if ( !array_key_exists( $contextHash, $this->contents ) ) {
-                       $this->contents[ $contextHash ] = $this->buildContent( $context );
+                       $this->contents[$contextHash] = $this->buildContent( $context );
                }
-               return $this->contents[ $contextHash ];
+               return $this->contents[$contextHash];
        }
 
        /**
@@ -527,7 +535,8 @@ abstract class ResourceLoaderModule {
                                                                $stylePairs[$media] = array();
                                                                foreach ( $style as $cssText ) {
                                                                        if ( is_string( $cssText ) ) {
-                                                                               $stylePairs[$media][] = $rl->filter( 'minify-css', $cssText );
+                                                                               $stylePairs[$media][] =
+                                                                                       $rl->filter( 'minify-css', $cssText );
                                                                        }
                                                                }
                                                        } elseif ( is_string( $style ) ) {
@@ -585,32 +594,61 @@ abstract class ResourceLoaderModule {
         * @return string Hash (should use ResourceLoader::makeHash)
         */
        public function getVersionHash( ResourceLoaderContext $context ) {
+               // The startup module produces a manifest with versions representing the entire module.
+               // Typically, the request for the startup module itself has only=scripts. That must apply
+               // only to the startup module content, and not to the module version computed here.
+               $context = new DerivativeResourceLoaderContext( $context );
+               $context->setModules( array() );
+               // Version hash must cover all resources, regardless of startup request itself.
+               $context->setOnly( null );
+               // Compute version hash based on content, not debug urls.
+               $context->setDebug( false );
+
                // Cache this somewhat expensive operation. Especially because some classes
                // (e.g. startup module) iterate more than once over all modules to get versions.
                $contextHash = $context->getHash();
                if ( !array_key_exists( $contextHash, $this->versionHash ) ) {
 
-                       $summary = $this->getDefinitionSummary( $context );
-                       if ( !isset( $summary['_cacheEpoch'] ) ) {
-                               throw new Exception( 'getDefinitionSummary must call parent method' );
-                       }
-                       $str = json_encode( $summary );
+                       if ( $this->enableModuleContentVersion() ) {
+                               // Detect changes directly
+                               $str = json_encode( $this->getModuleContent( $context ) );
+                       } else {
+                               // Infer changes based on definition and other metrics
+                               $summary = $this->getDefinitionSummary( $context );
+                               if ( !isset( $summary['_cacheEpoch'] ) ) {
+                                       throw new LogicException( 'getDefinitionSummary must call parent method' );
+                               }
+                               $str = json_encode( $summary );
 
-                       $mtime = $this->getModifiedTime( $context );
-                       if ( $mtime !== null ) {
-                               // Support: MediaWiki 1.25 and earlier
-                               $str .= strval( $mtime );
-                       }
+                               $mtime = $this->getModifiedTime( $context );
+                               if ( $mtime !== null ) {
+                                       // Support: MediaWiki 1.25 and earlier
+                                       $str .= strval( $mtime );
+                               }
 
-                       $mhash = $this->getModifiedHash( $context );
-                       if ( $mhash !== null ) {
-                               // Support: MediaWiki 1.25 and earlier
-                               $str .= strval( $mhash );
+                               $mhash = $this->getModifiedHash( $context );
+                               if ( $mhash !== null ) {
+                                       // Support: MediaWiki 1.25 and earlier
+                                       $str .= strval( $mhash );
+                               }
                        }
 
-                       $this->versionHash[ $contextHash ] = ResourceLoader::makeHash( $str );
+                       $this->versionHash[$contextHash] = ResourceLoader::makeHash( $str );
                }
-               return $this->versionHash[ $contextHash ];
+               return $this->versionHash[$contextHash];
+       }
+
+       /**
+        * Whether to generate version hash based on module content.
+        *
+        * If a module requires database or file system access to build the module
+        * content, consider disabling this in favour of manually tracking relevant
+        * aspects in getDefinitionSummary(). See getVersionHash() for how this is used.
+        *
+        * @return bool
+        */
+       public function enableModuleContentVersion() {
+               return false;
        }
 
        /**
@@ -748,8 +786,13 @@ abstract class ResourceLoaderModule {
        protected function validateScriptFile( $fileName, $contents ) {
                if ( $this->getConfig()->get( 'ResourceLoaderValidateJS' ) ) {
                        // Try for cache hit
-                       // Use CACHE_ANYTHING since filtering is very slow compared to DB queries
-                       $key = wfMemcKey( 'resourceloader', 'jsparse', self::$parseCacheVersion, md5( $contents ) );
+                       // Use CACHE_ANYTHING since parsing JS is much slower than a DB query
+                       $key = wfMemcKey(
+                               'resourceloader',
+                               'jsparse',
+                               self::$parseCacheVersion,
+                               md5( $contents )
+                       );
                        $cache = wfGetCache( CACHE_ANYTHING );
                        $cacheEntry = $cache->get( $key );
                        if ( is_string( $cacheEntry ) ) {
@@ -763,7 +806,8 @@ abstract class ResourceLoaderModule {
                        } catch ( Exception $e ) {
                                // We'll save this to cache to avoid having to validate broken JS over and over...
                                $err = $e->getMessage();
-                               $result = "mw.log.error(" . Xml::encodeJsVar( "JavaScript parse error: $err" ) . ");";
+                               $result = "mw.log.error(" .
+                                       Xml::encodeJsVar( "JavaScript parse error: $err" ) . ");";
                        }
 
                        $cache->set( $key, $result );
index ebbeb01..8493f9f 100644 (file)
@@ -50,7 +50,7 @@ class ResourceLoaderOOUIImageModule extends ResourceLoaderImageModule {
                                array_walk( $data['images'], function ( &$value ) use ( $fixPath ) {
                                        if ( is_string( $value['file'] ) ) {
                                                $fixPath( $value['file'] );
-                                       } else if ( is_array( $value['file'] ) ) {
+                                       } elseif ( is_array( $value['file'] ) ) {
                                                array_walk_recursive( $value['file'], $fixPath );
                                        }
                                } );
@@ -69,7 +69,9 @@ class ResourceLoaderOOUIImageModule extends ResourceLoaderImageModule {
                                                if ( !isset( $definition[$key] ) ) {
                                                        $definition[$key] = $data[$key];
                                                } elseif ( $definition[$key] !== $data[$key] ) {
-                                                       throw new Exception( "Mismatched OOUI theme definitions are not supported: trying to load $key of $theme theme" );
+                                                       throw new Exception(
+                                                               "Mismatched OOUI theme definitions are not supported: trying to load $key of $theme theme"
+                                                       );
                                                }
                                                break;
                                }
index 980b7fe..911d953 100644 (file)
@@ -44,13 +44,13 @@ class ResourceLoaderSkinModule extends ResourceLoaderFileModule {
                                        '(min-resolution: 1.5dppx), ' .
                                        '(min-resolution: 144dpi)'
                                ][] = '.mw-wiki-logo { background-image: ' .
-                               CSSMin::buildUrlValue( $logoHD['1.5x'] ) .';' .
+                               CSSMin::buildUrlValue( $logoHD['1.5x'] ) . ';' .
                                'background-size: 135px auto; }';
                        }
                        if ( isset( $logoHD['2x'] ) ) {
                                $styles[
                                        '(-webkit-min-device-pixel-ratio: 2), ' .
-                                       '(min--moz-device-pixel-ratio: 2),'.
+                                       '(min--moz-device-pixel-ratio: 2),' .
                                        '(min-resolution: 2dppx), ' .
                                        '(min-resolution: 192dpi)'
                                ][] = '.mw-wiki-logo { background-image: ' .
index 03f2124..8170cb1 100644 (file)
@@ -54,11 +54,10 @@ class ResourceLoaderSpecialCharacterDataModule extends ResourceLoaderModule {
        }
 
        /**
-        * @param ResourceLoaderContext $context
-        * @return string Hash
+        * @return bool
         */
-       public function getModifiedHash( ResourceLoaderContext $context ) {
-               return md5( serialize( $this->getData() ) );
+       public function enableModuleContentVersion() {
+               return true;
        }
 
        /**
index 8dbed8e..a578ece 100644 (file)
@@ -404,7 +404,7 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
                // Pre-populate versionHash with something because the loop over all modules below includes
                // the startup module (this module).
                // See ResourceLoaderModule::getVersionHash() for usage of this cache.
-               $this->versionHash[ $context->getHash() ] = null;
+               $this->versionHash[$context->getHash()] = null;
 
                return $rl->getCombinedVersion( $context, $rl->getModuleNames() );
        }
index d0f7d44..65d770e 100644 (file)
@@ -30,11 +30,10 @@ class ResourceLoaderUserCSSPrefsModule extends ResourceLoaderModule {
        protected $origin = self::ORIGIN_CORE_INDIVIDUAL;
 
        /**
-        * @param ResourceLoaderContext $context
-        * @return array|int|mixed
+        * @return bool
         */
-       public function getModifiedTime( ResourceLoaderContext $context ) {
-               return wfTimestamp( TS_UNIX, $context->getUserObj()->getTouched() );
+       public function enableModuleContentVersion() {
+               return true;
        }
 
        /**
index 2fd35ad..eba61ed 100644 (file)
  */
 class ResourceLoaderUserDefaultsModule extends ResourceLoaderModule {
 
-       /* Protected Members */
-
        protected $targets = array( 'desktop', 'mobile' );
 
-       /* Methods */
-
        /**
-        * @param ResourceLoaderContext $context
-        * @return string Hash
+        * @return bool
         */
-       public function getModifiedHash( ResourceLoaderContext $context ) {
-               return md5( serialize( User::getDefaultOptions() ) );
+       public function enableModuleContentVersion() {
+               return true;
        }
 
        /**
index aba0fa6..0847109 100644 (file)
@@ -40,11 +40,10 @@ class ResourceLoaderUserOptionsModule extends ResourceLoaderModule {
        }
 
        /**
-        * @param ResourceLoaderContext $context
-        * @return int
+        * @return bool
         */
-       public function getModifiedTime( ResourceLoaderContext $context ) {
-               return wfTimestamp( TS_UNIX, $context->getUserObj()->getTouched() );
+       public function enableModuleContentVersion() {
+               return true;
        }
 
        /**
index 264af5b..a4d94f8 100644 (file)
@@ -224,6 +224,20 @@ class ResourceLoaderWikiModule extends ResourceLoaderModule {
                return $styles;
        }
 
+       /**
+        * Disable module content versioning.
+        *
+        * This class does not support generating content outside of a module
+        * request due to foreign database support.
+        *
+        * See getDefinitionSummary() for meta-data versioning.
+        *
+        * @return bool
+        */
+       public function enableModuleContentVersion() {
+               return false;
+       }
+
        /**
         * @param ResourceLoaderContext $context
         * @return array
@@ -277,7 +291,6 @@ class ResourceLoaderWikiModule extends ResourceLoaderModule {
                $pages = $this->getPages( $context );
                $key = implode( '|', array_keys( $pages ) );
                if ( !isset( $this->titleInfo[$key] ) ) {
-
                        $this->titleInfo[$key] = array();
                        $batch = new LinkBatch;
                        foreach ( $pages as $titleText => $options ) {
index 5087e8d..7d5d38f 100644 (file)
@@ -218,7 +218,7 @@ class SearchHighlighter {
                        }
 
                        // calc by how much to extend existing snippets
-                       $targetchars = intval( ( $contextchars * $contextlines ) / count ( $snippets ) );
+                       $targetchars = intval( ( $contextchars * $contextlines ) / count( $snippets ) );
                }
 
                foreach ( $snippets as $index => $line ) {
index 6c5fbcd..327ef7c 100644 (file)
@@ -650,7 +650,7 @@ abstract class Skin extends ContextSource {
                }
 
                return $this->msg( 'retrievedfrom' )
-                       ->rawParams( '<a dir="ltr" href="' . $url. '">' . $url . '</a>' )
+                       ->rawParams( '<a dir="ltr" href="' . $url . '">' . $url . '</a>' )
                        ->parse();
        }
 
index 312769f..cd5e43c 100644 (file)
@@ -87,7 +87,7 @@ class SkinFallbackTemplate extends BaseTemplate {
                if ( file_exists( "$IP/skins/$skin/skin.json" ) ) {
                        return "wfLoadSkin( '$skin' );";
                } else {
-                       return  "require_once \"\$IP/skins/$skin/$skin.php\";";
+                       return "require_once \"\$IP/skins/$skin/$skin.php\";";
                }
        }
 
index 92409cd..69e1d8c 100644 (file)
@@ -70,7 +70,7 @@ abstract class QueryPage extends SpecialPage {
                                array( 'DeadendPagesPage', 'Deadendpages' ),
                                array( 'DoubleRedirectsPage', 'DoubleRedirects' ),
                                array( 'FileDuplicateSearchPage', 'FileDuplicateSearch' ),
-                               array( 'ListDuplicatedFilesPage', 'ListDuplicatedFiles'),
+                               array( 'ListDuplicatedFilesPage', 'ListDuplicatedFiles' ),
                                array( 'LinkSearchPage', 'LinkSearch' ),
                                array( 'ListredirectsPage', 'Listredirects' ),
                                array( 'LonelyPagesPage', 'Lonelypages' ),
@@ -470,6 +470,18 @@ abstract class QueryPage extends SpecialPage {
                return $this->cachedTimestamp;
        }
 
+       /**
+        * Returns limit and offset, as returned by $this->getRequest()->getLimitOffset().
+        * Subclasses may override this to further restrict or modify limit and offset.
+        *
+        * @since 1.26
+        *
+        * @return int[] list( $limit, $offset )
+        */
+       protected function getLimitOffset() {
+               return $this->getRequest()->getLimitOffset();
+       }
+
        /**
         * This is the actual workhorse. It does everything needed to make a
         * real, honest-to-gosh query page.
@@ -495,7 +507,7 @@ abstract class QueryPage extends SpecialPage {
                $out->setSyndicated( $this->isSyndicated() );
 
                if ( $this->limit == 0 && $this->offset == 0 ) {
-                       list( $this->limit, $this->offset ) = $this->getRequest()->getLimitOffset();
+                       list( $this->limit, $this->offset ) = $this->getLimitOffset();
                }
 
                // @todo Use doQuery()
index df1fa61..9129ee5 100644 (file)
@@ -149,11 +149,11 @@ abstract class SpecialRedirectToSpecial extends RedirectSpecialPage {
  * - limit, offset: Useful for linking to history of one's own user page or
  * user talk page. For example, this would be a link to "the last edit to your
  * user talk page in the year 2010":
- * http://en.wikipedia.org/wiki/Special:MyPage?offset=20110000000000&limit=1&action=history
+ * https://en.wikipedia.org/wiki/Special:MyPage?offset=20110000000000&limit=1&action=history
  *
  * - feed: would allow linking to the current user's RSS feed for their user
  * talk page:
- * http://en.wikipedia.org/w/index.php?title=Special:MyTalk&action=history&feed=rss
+ * https://en.wikipedia.org/w/index.php?title=Special:MyTalk&action=history&feed=rss
  *
  * - preloadtitle: Can be used to provide a default section title for a
  * preloaded new comment on one's own talk page.
@@ -168,7 +168,7 @@ abstract class SpecialRedirectToSpecial extends RedirectSpecialPage {
  * - redlink: Affects the message the user sees if their talk page/user talk
  * page does not currently exist. Avoids confusion for newbies with no user
  * pages over why they got a "permission error" following this link:
- * http://en.wikipedia.org/w/index.php?title=Special:MyPage&redlink=1
+ * https://en.wikipedia.org/w/index.php?title=Special:MyPage&redlink=1
  *
  * - debug: determines whether the debug parameter is passed to load.php,
  * which disables reformatting and allows scripts to be debugged. Useful
index dedfcb6..3786b36 100644 (file)
@@ -572,7 +572,6 @@ class SpecialPageFactory {
                                $context->setTitle( $page->getPageTitle( $par ) );
                        }
                } elseif ( !$page->isIncludable() ) {
-
                        return false;
                }
 
index 6a86af2..f3e896a 100644 (file)
@@ -392,10 +392,10 @@ class AllMessagesTablePager extends TablePager {
                                        );
                                }
 
-                               return $title . ' '
-                               . $this->msg( 'parentheses' )->rawParams( $talk )->escaped()
-                               . ' '
-                               . $this->msg( 'parentheses' )->rawParams( $translation )->escaped();
+                               return $title . ' ' .
+                                       $this->msg( 'parentheses' )->rawParams( $talk )->escaped() .
+                                       ' ' .
+                                       $this->msg( 'parentheses' )->rawParams( $translation )->escaped();
 
                        case 'am_default' :
                        case 'am_actual' :
index 4dd313b..8a9aefd 100644 (file)
@@ -431,16 +431,12 @@ class BlockListPager extends TablePager {
                $lb->setCaller( __METHOD__ );
 
                foreach ( $result as $row ) {
-                       # Usernames and titles are in fact related by a simple substitution of space -> underscore
-                       # The last few lines of Title::secureAndSplit() tell the story.
-                       $name = str_replace( ' ', '_', $row->ipb_address );
-                       $lb->add( NS_USER, $name );
-                       $lb->add( NS_USER_TALK, $name );
+                       $lb->add( NS_USER, $row->ipb_address );
+                       $lb->add( NS_USER_TALK, $row->ipb_address );
 
                        if ( isset( $row->by_user_name ) ) {
-                               $username = str_replace( ' ', '_', $row->by_user_name );
-                               $lb->add( NS_USER, $username );
-                               $lb->add( NS_USER_TALK, $username );
+                               $lb->add( NS_USER, $row->by_user_name );
+                               $lb->add( NS_USER_TALK, $row->by_user_name );
                        }
                }
 
index 47884eb..69b795d 100644 (file)
@@ -188,113 +188,128 @@ class SpecialExport extends SpecialPage {
                        $categoryName = '';
                }
 
-               $form = Xml::openElement( 'form', array( 'method' => 'post',
-                       'action' => $this->getPageTitle()->getLocalURL( 'action=submit' ) ) );
-               $form .= Xml::inputLabel(
-                       $this->msg( 'export-addcattext' )->text(),
-                       'catname',
-                       'catname',
-                       40,
-                       $categoryName
-               ) . '&#160;';
-               $form .= Xml::submitButton(
-                       $this->msg( 'export-addcat' )->text(),
-                       array( 'name' => 'addcat' )
-               ) . '<br />';
-
+               $formDescriptor = array(
+                       'catname' => array(
+                               'type' => 'textwithbutton',
+                               'name' => 'catname',
+                               'horizontal-label' => true,
+                               'label-message' => 'export-addcattext',
+                               'default' => $categoryName,
+                               'size' => 40,
+                               'buttontype' => 'submit',
+                               'buttonname' => 'addcat',
+                               'buttondefault' => $this->msg( 'export-addcat' )->text(),
+                       ),
+               );
                if ( $config->get( 'ExportFromNamespaces' ) ) {
-                       $form .= Html::namespaceSelector(
-                               array(
-                                       'selected' => $nsindex,
-                                       'label' => $this->msg( 'export-addnstext' )->text()
-                               ), array(
+                       $formDescriptor += array(
+                               'nsindex' => array(
+                                       'type' => 'namespaceselectwithbutton',
+                                       'default' => $nsindex,
+                                       'label-message' => 'export-addnstext',
+                                       'horizontal-label' => true,
                                        'name' => 'nsindex',
                                        'id' => 'namespace',
-                                       'class' => 'namespaceselector',
-                               )
-                       ) . '&#160;';
-                       $form .= Xml::submitButton(
-                               $this->msg( 'export-addns' )->text(),
-                               array( 'name' => 'addns' )
-                       ) . '<br />';
+                                       'cssclass' => 'namespaceselector',
+                                       'buttontype' => 'submit',
+                                       'buttonname' => 'addns',
+                                       'buttondefault' => $this->msg( 'export-addns' )->text(),
+                               ),
+                       );
                }
 
                if ( $config->get( 'ExportAllowAll' ) ) {
-                       $form .= Xml::checkLabel(
-                               $this->msg( 'exportall' )->text(),
-                               'exportall',
-                               'exportall',
-                               $request->wasPosted() ? $request->getCheck( 'exportall' ) : false
-                       ) . '<br />';
+                       $formDescriptor += array(
+                               'exportall' => array(
+                                       'type' => 'check',
+                                       'label-message' => 'exportall',
+                                       'name' => 'exportall',
+                                       'id' => 'exportall',
+                                       'default' => $request->wasPosted() ? $request->getCheck( 'exportall' ) : false,
+                               ),
+                       );
                }
 
-               $form .= Xml::element(
-                       'textarea',
-                       array( 'name' => 'pages', 'cols' => 40, 'rows' => 10 ),
-                       $page,
-                       false
+               $formDescriptor += array(
+                       'textarea' => array(
+                               'class' => 'HTMLTextAreaField',
+                               'name' => 'pages',
+                               'nodata' => true,
+                               'cols' => 40,
+                               'rows' => 10,
+                               'default' => $page,
+                       ),
                );
-               $form .= '<br />';
 
                if ( $config->get( 'ExportAllowHistory' ) ) {
-                       $form .= Xml::checkLabel(
-                               $this->msg( 'exportcuronly' )->text(),
-                               'curonly',
-                               'curonly',
-                               $request->wasPosted() ? $request->getCheck( 'curonly' ) : true
-                       ) . '<br />';
+                       $formDescriptor += array(
+                               'curonly' => array(
+                                       'type' => 'check',
+                                       'label-message' => 'exportcuronly',
+                                       'name' => 'curonly',
+                                       'id' => 'curonly',
+                                       'default' => $request->wasPosted() ? $request->getCheck( 'curonly' ) : true,
+                               ),
+                       );
                } else {
                        $out->addWikiMsg( 'exportnohistory' );
                }
 
-               $form .= Xml::checkLabel(
-                       $this->msg( 'export-templates' )->text(),
-                       'templates',
-                       'wpExportTemplates',
-                       $request->wasPosted() ? $request->getCheck( 'templates' ) : false
-               ) . '<br />';
+               $formDescriptor += array(
+                       'templates' => array(
+                               'type' => 'check',
+                               'label-message' => 'export-templates',
+                               'name' => 'templates',
+                               'id' => 'wpExportTemplates',
+                               'default' => $request->wasPosted() ? $request->getCheck( 'templates' ) : false,
+                       ),
+               );
 
                if ( $config->get( 'ExportMaxLinkDepth' ) || $this->userCanOverrideExportDepth() ) {
-                       $form .= Xml::inputLabel(
-                               $this->msg( 'export-pagelinks' )->text(),
-                               'pagelink-depth',
-                               'pagelink-depth',
-                               20,
-                               0
-                       ) . '<br />';
+                       $formDescriptor += array(
+                               'pagelink-depth' => array(
+                                       'type' => 'text',
+                                       'name' => 'pagelink-depth',
+                                       'id' => 'pagelink-depth',
+                                       'label-message' => 'export-pagelinks',
+                                       'default' => '0',
+                                       'size' => 20,
+                               ),
+                       );
                }
 
-               /* Enable this when we can do something useful exporting/importing image information.
-               $form .= Xml::checkLabel(
-                               $this->msg( 'export-images' )->text(),
-                               'images',
-                               'wpExportImages',
-                               false
-                       ) . '<br />';
-               */
-               $form .= Xml::checkLabel(
-                       $this->msg( 'export-download' )->text(),
-                       'wpDownload',
-                       'wpDownload',
-                       $request->wasPosted() ? $request->getCheck( 'wpDownload' ) : true
-               ) . '<br />';
+               $formDescriptor += array(
+                       /* Enable this when we can do something useful exporting/importing image information.
+                       'images' => array(
+                               'type' => 'check',
+                               'name' => 'images',
+                               'id' => 'wpExportImages',
+                               'default' => false,
+                       ),*/
+                       'wpDownload' => array(
+                               'type' => 'check',
+                               'name' =>'wpDownload',
+                               'id' => 'wpDownload',
+                               'default' => $request->wasPosted() ? $request->getCheck( 'wpDownload' ) : true,
+                               'label-message' => 'export-download',
+                       ),
+               );
 
                if ( $config->get( 'ExportAllowListContributors' ) ) {
-                       $form .= Xml::checkLabel(
-                               $this->msg( 'exportlistauthors' )->text(),
-                               'listauthors',
-                               'listauthors',
-                               $request->wasPosted() ? $request->getCheck( 'listauthors' ) : false
-                       ) . '<br />';
+                       $formDescriptor += array(
+                               'listauthors' => array(
+                                       'type' => 'check',
+                                       'label-message' => 'exportlistauthors',
+                                       'default' => $request->wasPosted() ? $request->getCheck( 'listauthors' ) : false,
+                                       'name' => 'listauthors',
+                                       'id' => 'listauthors',
+                               ),
+                       );
                }
 
-               $form .= Xml::submitButton(
-                       $this->msg( 'export-submit' )->text(),
-                       Linker::tooltipAndAccesskeyAttribs( 'export' )
-               );
-               $form .= Xml::closeElement( 'form' );
-
-               $out->addHTML( $form );
+               $htmlForm = HTMLForm::factory( 'div', $formDescriptor, $this->getContext() );
+               $htmlForm->setSubmitTextMsg( 'export-submit' );
+               $htmlForm->prepareForm()->displayForm( false );
                $this->addHelpLink( 'Help:Export' );
        }
 
@@ -320,7 +335,6 @@ class SpecialExport extends SpecialPage {
                if ( $exportall ) {
                        $history = WikiExporter::FULL;
                } else {
-
                        $pageSet = array(); // Inverted index of all pages to look up
 
                        // Split up and normalize input
index e9639e1..d330b0e 100644 (file)
@@ -229,7 +229,7 @@ HTML;
                // writes a script tag (the one loading mediawiki.js). Script tags are synchronous, block
                // each other, and run in order. But they don't nest. The code appended after the startup
                // module runs before the added script tag is parsed and executed.
-               echo Xml::encodeJsCall( 'document.write', array( Html::inlineScript( $code  ) ) );
+               echo Xml::encodeJsCall( 'document.write', array( Html::inlineScript( $code ) ) );
        }
 
        private function plainQUnit() {
index 60225ea..6c7133f 100644 (file)
@@ -109,7 +109,6 @@ class MIMEsearchPage extends QueryPage {
         * Return HTML to put just before the results.
         */
        function getPageHeader() {
-
                return Xml::openElement(
                                'form',
                                array( 'id' => 'specialmimesearch', 'method' => 'get', 'action' => wfScript() )
index 8f14a41..7a7979c 100644 (file)
@@ -236,7 +236,7 @@ class MediaStatisticsPage extends QueryPage {
                                        'mw-mediastats-table-' . strtolower( $mediaType ),
                                        'sortable',
                                        'wikitable'
-                               ))
+                               ) )
                        )
                );
                $this->getOutput()->addHTML( $this->getTableHeaderRow() );
@@ -275,7 +275,7 @@ class MediaStatisticsPage extends QueryPage {
                                array( 'class' => array(
                                        'mw-mediastats-mediatype',
                                        'mw-mediastats-mediatype-' . strtolower( $mediaType )
-                               )),
+                               ) ),
                                // for grep
                                // mediastatistics-header-unknown, mediastatistics-header-bitmap,
                                // mediastatistics-header-drawing, mediastatistics-header-audio,
index 899c736..251a8e0 100644 (file)
@@ -233,7 +233,7 @@ class SpecialNewpages extends IncludableSpecialPage {
                                'name' => 'invert',
                                'label-message' => 'invert',
                                'default' => $nsinvert,
-                               'tooltip' => $this->msg( 'tooltip-invert' )->text(),
+                               'tooltip' => 'invert',
                        ),
                        'tagFilter' => array(
                                'type' => 'tagfilter',
@@ -594,7 +594,7 @@ class NewPagesPager extends ReverseChronologicalPager {
                foreach ( $this->mResult as $row ) {
                        $linkBatch->add( NS_USER, $row->rc_user_text );
                        $linkBatch->add( NS_USER_TALK, $row->rc_user_text );
-                       $linkBatch->add( $row->rc_namespace, $row->rc_title );
+                       $linkBatch->add( $row->page_namespace, $row->page_title );
                }
                $linkBatch->execute();
 
index 0e1ce53..85ce78f 100644 (file)
@@ -67,10 +67,8 @@ class SpecialProtectedtitles extends SpecialPage {
         * @return string
         */
        function formatRow( $row ) {
-
                $title = Title::makeTitleSafe( $row->pt_namespace, $row->pt_title );
                if ( !$title ) {
-
                        return Html::rawElement(
                                'li',
                                array(),
index 64c2cf3..b2305b9 100644 (file)
  * @ingroup SpecialPage
  */
 class SpecialTags extends SpecialPage {
+
+       /**
+        * @var array List of explicitly defined tags
+        */
+       protected $explicitlyDefinedTags;
+
        /**
-        * @var array List of defined tags
+        * @var array List of extension defined tags
         */
-       public $definedTags;
+       protected $extensionDefinedTags;
+
        /**
-        * @var array List of active tags
+        * @var array List of extension activated tags
         */
-       public $activeTags;
+       protected $extensionActivatedTags;
 
        function __construct() {
                parent::__construct( 'Tags' );
@@ -69,9 +76,11 @@ class SpecialTags extends SpecialPage {
                $out->wrapWikiMsg( "<div class='mw-tags-intro'>\n$1\n</div>", 'tags-intro' );
 
                $user = $this->getUser();
+               $userCanManage = $user->isAllowed( 'managechangetags' );
+               $userCanEditInterface = $user->isAllowed( 'editinterface' );
 
                // Show form to create a tag
-               if ( $user->isAllowed( 'managechangetags' ) ) {
+               if ( $userCanManage ) {
                        $fields = array(
                                'Tag' => array(
                                        'type' => 'text',
@@ -108,40 +117,50 @@ class SpecialTags extends SpecialPage {
                        }
                }
 
-               // Whether to show the "Actions" column in the tag list
-               // If any actions added in the future require other user rights, add those
-               // rights here
-               $showActions = $user->isAllowed( 'managechangetags' );
+               // Used to get hitcounts for #doTagRow()
+               $tagStats = ChangeTags::tagUsageStatistics();
 
-               // Write the headers
-               $tagUsageStatistics = ChangeTags::tagUsageStatistics();
+               // Used in #doTagRow()
+               $this->explicitlyDefinedTags = array_fill_keys(
+                       ChangeTags::listExplicitlyDefinedTags(), true );
+               $this->extensionDefinedTags = array_fill_keys(
+                       ChangeTags::listExtensionDefinedTags(), true );
+
+               // List all defined tags, even if they were never applied
+               $definedTags = array_keys( array_merge(
+                       $this->explicitlyDefinedTags, $this->extensionDefinedTags ) );
 
                // Show header only if there exists atleast one tag
-               if ( !$tagUsageStatistics ) {
+               if ( !$tagStats && !$definedTags ) {
                        return;
                }
+
+               // Write the headers
                $html = Xml::tags( 'tr', null, Xml::tags( 'th', null, $this->msg( 'tags-tag' )->parse() ) .
                        Xml::tags( 'th', null, $this->msg( 'tags-display-header' )->parse() ) .
                        Xml::tags( 'th', null, $this->msg( 'tags-description-header' )->parse() ) .
                        Xml::tags( 'th', null, $this->msg( 'tags-source-header' )->parse() ) .
                        Xml::tags( 'th', null, $this->msg( 'tags-active-header' )->parse() ) .
                        Xml::tags( 'th', null, $this->msg( 'tags-hitcount-header' )->parse() ) .
-                       ( $showActions ?
+                       ( $userCanManage ?
                                Xml::tags( 'th', array( 'class' => 'unsortable' ),
                                        $this->msg( 'tags-actions-header' )->parse() ) :
                                '' )
                );
 
                // Used in #doTagRow()
-               $this->explicitlyDefinedTags = array_fill_keys(
-                       ChangeTags::listExplicitlyDefinedTags(), true );
-               $this->extensionDefinedTags = array_fill_keys(
-                       ChangeTags::listExtensionDefinedTags(), true );
                $this->extensionActivatedTags = array_fill_keys(
                        ChangeTags::listExtensionActivatedTags(), true );
 
-               foreach ( $tagUsageStatistics as $tag => $hitcount ) {
-                       $html .= $this->doTagRow( $tag, $hitcount, $showActions );
+               // Insert tags that have been applied at least once
+               foreach ( $tagStats as $tag => $hitcount ) {
+                       $html .= $this->doTagRow( $tag, $hitcount, $userCanManage, $userCanEditInterface );
+               }
+               // Insert tags defined somewhere but never applied
+               foreach ( $definedTags as $tag ) {
+                       if ( !isset( $tagStats[$tag] ) ) {
+                               $html .= $this->doTagRow( $tag, 0, $userCanManage, $userCanEditInterface );
+                       }
                }
 
                $out->addHTML( Xml::tags(
@@ -151,13 +170,12 @@ class SpecialTags extends SpecialPage {
                ) );
        }
 
-       function doTagRow( $tag, $hitcount, $showActions ) {
-               $user = $this->getUser();
+       function doTagRow( $tag, $hitcount, $showActions, $showEditLinks ) {
                $newRow = '';
                $newRow .= Xml::tags( 'td', null, Xml::element( 'code', null, $tag ) );
 
                $disp = ChangeTags::tagDescription( $tag );
-               if ( $user->isAllowed( 'editinterface' ) ) {
+               if ( $showEditLinks ) {
                        $disp .= ' ';
                        $editLink = Linker::link(
                                $this->msg( "tag-$tag" )->inContentLanguage()->getTitle(),
@@ -169,7 +187,7 @@ class SpecialTags extends SpecialPage {
 
                $msg = $this->msg( "tag-$tag-description" );
                $desc = !$msg->exists() ? '' : $msg->parse();
-               if ( $user->isAllowed( 'editinterface' ) ) {
+               if ( $showEditLinks ) {
                        $desc .= ' ';
                        $editDescLink = Linker::link(
                                $this->msg( "tag-$tag-description" )->inContentLanguage()->getTitle(),
@@ -209,10 +227,11 @@ class SpecialTags extends SpecialPage {
                $newRow .= Xml::tags( 'td', array( 'data-sort-value' => $hitcount ), $hitcountLink );
 
                // actions
-               $actionLinks = array();
-               if ( $showActions ) {
+               if ( $showActions ) { // we've already checked that the user had the requisite userright
+                       $actionLinks = array();
+
                        // delete
-                       if ( ChangeTags::canDeleteTag( $tag, $user )->isOK() ) {
+                       if ( ChangeTags::canDeleteTag( $tag )->isOK() ) {
                                $actionLinks[] = Linker::linkKnown( $this->getPageTitle( 'delete' ),
                                        $this->msg( 'tags-delete' )->escaped(),
                                        array(),
@@ -220,7 +239,7 @@ class SpecialTags extends SpecialPage {
                        }
 
                        // activate
-                       if ( ChangeTags::canActivateTag( $tag, $user )->isOK() ) {
+                       if ( ChangeTags::canActivateTag( $tag )->isOK() ) {
                                $actionLinks[] = Linker::linkKnown( $this->getPageTitle( 'activate' ),
                                        $this->msg( 'tags-activate' )->escaped(),
                                        array(),
@@ -228,7 +247,7 @@ class SpecialTags extends SpecialPage {
                        }
 
                        // deactivate
-                       if ( ChangeTags::canDeactivateTag( $tag, $user )->isOK() ) {
+                       if ( ChangeTags::canDeactivateTag( $tag )->isOK() ) {
                                $actionLinks[] = Linker::linkKnown( $this->getPageTitle( 'deactivate' ),
                                        $this->msg( 'tags-deactivate' )->escaped(),
                                        array(),
index 12e103e..ad329d3 100644 (file)
@@ -226,7 +226,7 @@ class SpecialUploadStash extends UnlistedSpecialPage {
         */
        private function outputRemoteScaledThumb( $file, $params, $flags ) {
                // This option probably looks something like
-               // 'http://upload.wikimedia.org/wikipedia/test/thumb/temp'. Do not use
+               // '//upload.wikimedia.org/wikipedia/test/thumb/temp'. Do not use
                // trailing slash.
                $scalerBaseUrl = $this->getConfig()->get( 'UploadStashScalerBaseUrl' );
 
index 8259718..11744f6 100644 (file)
@@ -453,8 +453,7 @@ class LoginForm extends SpecialPage {
         * @return Status
         */
        public function addNewAccountInternal() {
-               global $wgAuth, $wgMemc, $wgAccountCreationThrottle,
-                       $wgMinimalPasswordLength, $wgEmailConfirmToEdit;
+               global $wgAuth, $wgMemc, $wgAccountCreationThrottle, $wgEmailConfirmToEdit;
 
                // If the user passes an invalid domain, something is fishy
                if ( !$wgAuth->validDomain( $this->mDomain ) ) {
index 758e3c0..ab53951 100644 (file)
@@ -249,7 +249,7 @@ class UserrightsPage extends SpecialPage {
                if ( $remove ) {
                        foreach ( $remove as $index => $group ) {
                                if ( !$user->removeGroup( $group ) ) {
-                                       unset($remove[$index]);
+                                       unset( $remove[$index] );
                                }
                        }
                        $newGroups = array_diff( $newGroups, $remove );
@@ -257,7 +257,7 @@ class UserrightsPage extends SpecialPage {
                if ( $add ) {
                        foreach ( $add as $index => $group ) {
                                if ( !$user->addGroup( $group ) ) {
-                                       unset($add[$index]);
+                                       unset( $add[$index] );
                                }
                        }
                        $newGroups = array_merge( $newGroups, $add );
index f17681c..426c752 100644 (file)
@@ -288,7 +288,6 @@ abstract class UploadBase {
                 * If there was no filename or a zero size given, give up quick.
                 */
                if ( $this->isEmptyFile() ) {
-
                        return array( 'status' => self::EMPTY_FILE );
                }
 
@@ -297,7 +296,6 @@ abstract class UploadBase {
                 */
                $maxSize = self::getMaxUploadSize( $this->getSourceType() );
                if ( $this->mFileSize > $maxSize ) {
-
                        return array(
                                'status' => self::FILE_TOO_LARGE,
                                'max' => $maxSize,
@@ -311,7 +309,6 @@ abstract class UploadBase {
                 */
                $verification = $this->verifyFile();
                if ( $verification !== true ) {
-
                        return array(
                                'status' => self::VERIFICATION_ERROR,
                                'details' => $verification
@@ -323,7 +320,6 @@ abstract class UploadBase {
                 */
                $result = $this->validateName();
                if ( $result !== true ) {
-
                        return $result;
                }
 
@@ -331,7 +327,6 @@ abstract class UploadBase {
                if ( !Hooks::run( 'UploadVerification',
                        array( $this->mDestName, $this->mTempPath, &$error ) )
                ) {
-
                        return array( 'status' => self::HOOK_ABORTED, 'error' => $error );
                }
 
@@ -380,7 +375,6 @@ abstract class UploadBase {
                        wfDebug( "mime: <$mime> extension: <{$this->mFinalExtension}>\n" );
                        global $wgMimeTypeBlacklist;
                        if ( $this->checkFileExtension( $mime, $wgMimeTypeBlacklist ) ) {
-
                                return array( 'filetype-badmime', $mime );
                        }
 
@@ -394,7 +388,6 @@ abstract class UploadBase {
                        $ieTypes = $magic->getIEMimeTypes( $this->mTempPath, $chunk, $extMime );
                        foreach ( $ieTypes as $ieType ) {
                                if ( $this->checkFileExtension( $ieType, $wgMimeTypeBlacklist ) ) {
-
                                        return array( 'filetype-bad-ie-mime', $ieType );
                                }
                        }
@@ -413,7 +406,6 @@ abstract class UploadBase {
 
                $status = $this->verifyPartialFile();
                if ( $status !== true ) {
-
                        return $status;
                }
 
@@ -423,7 +415,6 @@ abstract class UploadBase {
                if ( $wgVerifyMimeType ) {
                        # XXX: Missing extension will be caught by validateName() via getTitle()
                        if ( $this->mFinalExtension != '' && !$this->verifyExtension( $mime, $this->mFinalExtension ) ) {
-
                                return array( 'filetype-mime-mismatch', $this->mFinalExtension, $mime );
                        }
                }
@@ -433,7 +424,6 @@ abstract class UploadBase {
                        if ( $this->mFinalExtension == 'svg' || $mime == 'image/svg+xml' ) {
                                $svgStatus = $this->detectScriptInSvg( $this->mTempPath, false );
                                if ( $svgStatus !== false ) {
-
                                        return $svgStatus;
                                }
                        }
@@ -451,7 +441,6 @@ abstract class UploadBase {
 
                Hooks::run( 'UploadVerifyFile', array( $this, $mime, &$status ) );
                if ( $status !== true ) {
-
                        return $status;
                }
 
@@ -480,20 +469,17 @@ abstract class UploadBase {
                $mime = $this->mFileProps['file-mime'];
                $status = $this->verifyMimeType( $mime );
                if ( $status !== true ) {
-
                        return $status;
                }
 
                # check for htmlish code and javascript
                if ( !$wgDisableUploadScriptChecks ) {
                        if ( self::detectScript( $this->mTempPath, $mime, $this->mFinalExtension ) ) {
-
                                return array( 'uploadscripted' );
                        }
                        if ( $this->mFinalExtension == 'svg' || $mime == 'image/svg+xml' ) {
                                $svgStatus = $this->detectScriptInSvg( $this->mTempPath, true );
                                if ( $svgStatus !== false ) {
-
                                        return $svgStatus;
                                }
                        }
@@ -509,12 +495,10 @@ abstract class UploadBase {
                                $errors = $zipStatus->getErrorsArray();
                                $error = reset( $errors );
                                if ( $error[0] !== 'zip-wrong-format' ) {
-
                                        return $error;
                                }
                        }
                        if ( $this->mJavaDetected ) {
-
                                return array( 'uploadjava' );
                        }
                }
@@ -522,7 +506,6 @@ abstract class UploadBase {
                # Scan the uploaded file for viruses
                $virus = $this->detectVirus( $this->mTempPath );
                if ( $virus ) {
-
                        return array( 'uploadvirus', $virus );
                }
 
@@ -1076,7 +1059,6 @@ abstract class UploadBase {
                $chunk = strtolower( $chunk );
 
                if ( !$chunk ) {
-
                        return false;
                }
 
@@ -1100,7 +1082,6 @@ abstract class UploadBase {
 
                # check for HTML doctype
                if ( preg_match( "/<!DOCTYPE *X?HTML/i", $chunk ) ) {
-
                        return true;
                }
 
@@ -1108,7 +1089,6 @@ abstract class UploadBase {
                // PHP/expat will interpret the given encoding in the xml declaration (bug 47304)
                if ( $extension == 'svg' || strpos( $mime, 'image/svg' ) === 0 ) {
                        if ( self::checkXMLEncodingMissmatch( $file ) ) {
-
                                return true;
                        }
                }
index fc59ace..4c099b3 100644 (file)
@@ -241,7 +241,7 @@ class UploadFromUrl extends UploadBase {
                        wfDebugLog(
                                'fileupload',
                                'Short write ' . $this->nbytes . '/' . strlen( $buffer ) .
-                                       ' bytes, aborting with '  . $this->mFileSize . ' uploaded so far'
+                                       ' bytes, aborting with ' . $this->mFileSize . ' uploaded so far'
                        );
                        fclose( $this->mTmpHandle );
                        $this->mTmpHandle = false;
index 0a61be6..b1d88bc 100644 (file)
@@ -1336,7 +1336,7 @@ class Language {
                                case 'xmn':
                                        $usedHijriMonth = true;
                                        if ( !$hijri ) {
-                                               $hijri = self::tsToHijri ( $ts );
+                                               $hijri = self::tsToHijri( $ts );
                                        }
                                        $num = $hijri[1];
                                        break;
@@ -3444,7 +3444,7 @@ class Language {
                                // the string does not have any number part. Eg: .12345
                                return $sign . $groupedNumber;
                        }
-                       $start = $end = ($integerPart) ? strlen( $integerPart[0] ) : 0;
+                       $start = $end = ( $integerPart ) ? strlen( $integerPart[0] ) : 0;
                        while ( $start > 0 ) {
                                $match = $matches[0][$numMatches - 1];
                                $matchLen = strlen( $match );
index 15fc8c0..1b7dbfa 100644 (file)
@@ -61,7 +61,7 @@ class LanguageEo extends Language {
         */
        function iconv( $in, $out, $string ) {
                if ( strcasecmp( $in, 'x' ) == 0 && strcasecmp( $out, 'utf-8' ) == 0 ) {
-                       return preg_replace_callback (
+                       return preg_replace_callback(
                                '/([cghjsu]x?)((?:xx)*)(?!x)/i',
                                array( $this, 'strrtxuCallback' ), $string );
                } elseif ( strcasecmp( $in, 'UTF-8' ) == 0 && strcasecmp( $out, 'x' ) == 0 ) {
index 2379cac..a96b0a9 100644 (file)
@@ -149,10 +149,10 @@ class LanguageFi extends Language {
                );
 
                $final = '';
-               $tokens = explode ( ' ', $str );
+               $tokens = explode( ' ', $str );
                foreach ( $tokens as $item ) {
                        if ( !is_numeric( $item ) ) {
-                               if ( count ( explode( '-', $item ) ) == 3 && strlen( $item ) == 10 ) {
+                               if ( count( explode( '-', $item ) ) == 3 && strlen( $item ) == 10 ) {
                                        list( $yyyy, $mm, $dd ) = explode( '-', $item );
                                        $final .= ' ' . $this->date( "{$yyyy}{$mm}{$dd}000000" );
                                        continue;
index 6b6c95d..ddd866f 100644 (file)
@@ -91,7 +91,7 @@ class LanguageKsh extends Language {
        function convertGrammar( $word, $case ) {
                $lord = strtolower( $word );
                $gender = 'm'; // Nuutnaarel // default
-               if ( preg_match ( '/wiki$/', $lord ) ) {
+               if ( preg_match( '/wiki$/', $lord ) ) {
                        $gender = 'n';  // Dat xyz-wiki
                }
                if ( isset( self::$familygender[$lord] ) ) {
index 1f6bc85..501367a 100644 (file)
        "no-null-revision": "Nun pudo crease una nueva revisión nula pa la páxina «$1»",
        "badtitle": "Títulu incorreutu",
        "badtitletext": "El títulu de páxina solicitáu nun ye válidu, ta baleru o tien enllaces interllingua o interwiki incorreutos.\nPue contener un caráuter o más que nun puen usase nos títulos.",
+       "title-invalid-empty": "El títulu de páxina solicitáu ta baleru o sólo contien el nome d'un espaciu de nomes.",
+       "title-invalid-utf8": "El títulu de páxina solicitáu contien una secuencia UTF-8 inválida.",
+       "title-invalid-interwiki": "El títulu de páxina solicitáu contien un enllaz interwiki que nun puede usase nos títulos.",
+       "title-invalid-talk-namespace": "El títulu de páxina solicitáu fai referencia a una páxina d'alderique que nun puede esistir.",
        "title-invalid-characters": "El títulu de la páxina solicitada contien calteres non válidos: «$1»",
+       "title-invalid-relative": "El títulu contien un camín relativu. Los títulos de páxina relativos (./, ../) son inválidos porque de vezu nun se puede llegar al pasalos a los restoladores web.",
+       "title-invalid-magic-tilde": "El títulu de páxina solicitáu contien una secuencia máxica de tildes (<nowiki>~~~</nowiki>) inválida.",
+       "title-invalid-too-long": "El títulu de páxina solicitáu ye llargu enforma. Nun tien de pasar de $1 {{PLURAL:$1|byte|bytes}} en codificación UTF-8.",
+       "title-invalid-leading-colon": "El títulu de páxina solicitáu contién un caráuter dos puntos inválidu al principiu.",
        "perfcached": "Los datos siguientes tán na caché y seique nun tean anovaos. Hai un máximu {{PLURAL:$1|d'un resultáu disponible|de $1 resultaos disponibles}} na caché.",
        "perfcachedts": "Los datos siguientes tán na caché y anovaronse por última vegada'l $1. Hai un máximu {{PLURAL:$4|d'un resultáu disponible|de $4 resultaos disponibles}} na caché.",
        "querypage-no-updates": "Anguaño los anovamientos d'esta páxina tán desactivaos.\nEstos datos nun van refrescase nestos momentos.",
        "content-model-css": "CSS",
        "content-json-empty-object": "Oxetu baleru",
        "content-json-empty-array": "Matriz balera",
+       "duplicate-args-warning": "<strong>Avisu:</strong> [[:$1]] llama a [[:$2]] con más d'un valor pal parámetru «$3». Sólo va usase l'últimu valor dau.",
        "duplicate-args-category": "Páxines con argumentos duplicaos nes llamaes a plantíes",
        "duplicate-args-category-desc": "La páxina contien llamaes a plantíes qu'usen argumentos duplicaos, como <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> o <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "'''Avisu:''' Esta páxina contien demasiaes llamaes costoses a funciones d'análisis sintácticu.\n\nHabría tener menos de $2 {{PLURAL:$2|llamada|llamaes}}, y agora tien $1 {{PLURAL:$1|llamada|llamaes}}.",
        "badsig": "Firma cruda non válida; comprueba les etiquetes HTML.",
        "badsiglength": "La to robla ye demasiao llarga.\nHa tener menos de $1 {{PLURAL:$1|caráuter|carauteres}}.",
        "yourgender": "¿Qué descripción prefieres?",
-       "gender-unknown": "Prefiero nun dar detalles",
+       "gender-unknown": "Al mentate, el software usará palabres de xéneru neutru siempre que seya posible",
        "gender-male": "Él edita páxines wiki",
        "gender-female": "Ella edita páxines wiki",
        "prefs-help-gender": "Configurar esta preferencia ye opcional. El software usa esti valor pa dirixise a ti y pa mentate a terceros col xéneru gramatical correchu.\nEsta información sedrá pública.",
        "userrights-lookup-user": "Xestión de grupos del usuariu",
        "userrights-user-editname": "Escribi un nome d'usuariu:",
        "editusergroup": "Modificar grupos d'usuariu",
-       "editinguser": "Camudando los permisos del usuariu '''[[User:$1|$1]]''' $2",
+       "editinguser": "Camudando los permisos {{GENDER:$1|del usuariu|de la usuaria}} <strong>[[User:$1|$1]]</strong> $2",
        "userrights-editusergroup": "Editar los grupos d'usuariu",
        "saveusergroups": "Guardar los grupos d'usuariu",
        "userrights-groupsmember": "Miembru de:",
        "uploaddisabledtext": "Les xubíes de ficheros tán desactivaes.",
        "php-uploaddisabledtext": "Les xubíes de ficheros tan desactivaes en PHP.\nPor favor, comprueba la configuración de file_uploads.",
        "uploadscripted": "Esti ficheru contien códigu HTML o scripts que pueden interpretase de mou equivocáu por un navegador.",
+       "upload-scripted-pi-callback": "Nun puede xubise un ficheru que contien instrucciones de procesamientu XML de fueya d'estilu.",
+       "uploaded-script-svg": "Alcontróse l'elementu «$1» que puede recibir scripts nel ficheru SVG xubíu.",
+       "uploaded-hostile-svg": "Alcontróse CSS inseguru nel elementu d'estilu del ficheru SVG xubíu.",
+       "uploaded-event-handler-on-svg": "Nun se permite configurar los atributos de controladores de socesos <code>$1=\"$2\"</code> nos ficheros SVG.",
+       "uploaded-href-attribute-svg": "Nun se permiten los atributos href <code>&lt;$1 $2=\"$3\"&gt;</code> con destín nun llocal (p. ex. http://, javascript:, etc) nos ficheros SVG.",
+       "uploaded-href-unsafe-target-svg": "Alcontróse un \"href\" a un destín inseguru <code>&lt;$1 $2=\"$3\"&gt;</code> nel ficheru SVG xubíu.",
+       "uploaded-animate-svg": "Alcontróse la etiqueta \"animate\" que puede cambiar href, usando l'atributu \"from\" <code>&lt;$1 $2=\"$3\"&gt;</code> nel ficheru SVG xubíu.",
+       "uploaded-setting-event-handler-svg": "Ta torgada la configuración d'atributos del xestor de socesos. Alcontróse <code>&lt;$1 $2=\"$3\"&gt;</code> nel ficheru SVG xubíu.",
+       "uploaded-setting-href-svg": "Usar la etiqueta «set» p'amestar l'atributu «href» al elementu padre ta torgao.",
+       "uploaded-wrong-setting-svg": "Ta torgao usar la etiqueta «set» p'amestar un destín remote/data/script a cualquier atributu. Se alcontróse <code>&lt;set to=\"$1\"&gt;</code> nel ficheru SVG cargáu.",
+       "uploaded-setting-handler-svg": "Tán bloquiaos los ficheros SVG que configuren l'atributu «handler» con remote/data/script. Alcontróse <code>$1=\"$2\"</code> nel ficheru SVG xubíu.",
+       "uploaded-remote-url-svg": "Tán bloquiaos los ficheros SVG que configuren atributos d'estilu con URL remotes. Alcontróse <code>$1=\"$2\"</code> nel ficheru SVG xubíu.",
+       "uploaded-image-filter-svg": "Alcontróse un filtru d'imaxe con URL: <code>&lt;$1 $2=\"$3\"&gt;</code> nel ficheru SVG xubíu.",
        "uploadscriptednamespace": "Esti ficheru SVG contien l'espaciu de nomes illegal «$1»",
        "uploadinvalidxml": "Nun pudo interpretase'l XML del ficheru cargáu.",
        "uploadvirus": "¡El ficheru tien un virus!\nDetalles: $1",
        "unusedimages": "Imáxenes non usaes",
        "wantedcategories": "Categoríes buscaes",
        "wantedpages": "Páxines buscaes",
-       "wantedpages-summary": "Llista de páxines inesistentes con más enllaces a elles, escluyendo les páxines que sólo tienen redireiciones qu'enllacen con elles. Pa ver la llista de páxines inesistentes que tienen redireiciones qu'enllacen con elles, ver [[{{#special:BrokenRedirects}}]].",
+       "wantedpages-summary": "Llista de páxines inesistentes con más enllaces a elles, sacante les páxines que sólo tienen redireiciones qu'enllacen con elles. Pa ver la llista de páxines inesistentes que tienen redireiciones qu'enllacen con elles, ver [[{{#special:BrokenRedirects}}|la llista de redireiciones frañaes]].",
        "wantedpages-badtitle": "Títulu inválidu nel conxuntu de resultaos: $1",
        "wantedfiles": "Archivos buscaos",
        "wantedfiletext-cat": "Los ficheros siguientes tan usándose, pero nun esisten. Ye posible qu'apaezan ficheros de repositorios esternos ensin qu'esistan. Cualesquier falsu positivu tará <del>tacháu</del>. Amás, les páxines qu'inxerten ficheros que nun esisten apaecen na llista de [[:$1]].",
        "log-name-pagelang": "Rexistru de cambios de llingua",
        "log-description-pagelang": "Esti ye un rexistru de los cambios de llingua de les páxines.",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|cambió}} la llingua de la páxina $3 del $4 al $5.",
-       "default-skin-not-found": "¡Vaya! L'aspeutu predetermináu pa la to wiki, definíu en <code dir=\"ltr\">$wgDefaultSkin</code> como <code>$1</code> nun ta disponible.\n\nLa instalación paez qu'incluye {{PLURAL:$4|el siguiente aspeutu|los siguientes aspeutos}}. Llei [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] pa más información sobro cómo {{PLURAL:$4|activalu|activalos y escoyer el predetermináu}}.\n\n$2\n\n; Si acabes d'instalar MediaWiki:\n: Probablemente instalasti dende git, o direutamente'l códigu fonte usando algún otru métodu. Esto ye d'esperar. Intenta instalar dellos aspeutos dende'l [https://www.mediawiki.org/wiki/Category:All_skins direutoriu d'aspeutos de mediawiki.org's], asina:\n:* Descargando [https://www.mediawiki.org/wiki/Download l'instalador tarball], que vien con dellos aspeutos y estensiones. Pues copiar y apegar el direutoriu <code>skins/</code> d'ehí.\n:* Descargando paquetes tar d'aspeutu individuales de [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Clonando unu de los direutorios <code>mediawiki/skins/*</code> via git nel direutoriu <code dir=\"ltr\">skins/</code> de la to instalación de MediaWiki.\n: Facer esto nun tendría d'interferir col to repositoriu git si yes un desendolcador de MediaWiki.\n\n; Si acabes d'anovar MediaWiki:\n: MediaWiki 1.24 y más nuevu yá nun activa automáticamente los aspeutos instalaos (llei [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). Pues apegar {{PLURAL:$5|la llinia siguiente|les llinies siguientes}} en <code>LocalSettings.php</code> p'activar {{PLURAL:$5|l'aspeutu instaláu|tolos aspeutos instalaos}} actualmente:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Si acabes d'editar <code>LocalSettings.php</code>:\n: Vuelvi a comprobar los nomes de los aspeutos por si hai errores d'escritura.",
-       "default-skin-not-found-no-skins": "L'aspeutu predetermináu pa la to wiki, definíu en <code>$wgDefaultSkin</code> como <code>$1</code> nun ta disponible.\n\nNun tienes aspeutos instalaos.\n\n; Si acabes d'instalar MediaWiki:\n: Probablemente instalasti dende git, o'l códigu fonte direutamente usando algún otru métodu. Esto ye d'esperar. MediaWiki 1.24 y más nuevu nun incluye nengún aspeutu nel repositoriu principal. Intenta instalar dellos aspeutos dende'l [https://www.mediawiki.org/wiki/Category:All_skins direutoriu d'aspeutos de mediawiki.org], asina:\n:* Descargando [https://www.mediawiki.org/wiki/Download l'instalador tarball], que vien con dellos aspeutos y estensiones. Pues copiar y apegar el direutoriu <code>skins/</code> d'ehí.\n:* Descargando paquetes tar d'aspeutu individuales de [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Clonando unu de los direutorios <code>mediawiki/skins/*</code> via git nel direutoriu <code dir=\"ltr\">skins/</code> de la to instalación de MediaWiki.\n: Facer esto nun tendría d'interferir col to repositoriu git si yes un desendolcador de MediaWiki. Llei [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] pa más información sobro cómo activar los aspeutos y escoyer el predetermináu.",
+       "default-skin-not-found": "¡Vaya! L'aspeutu predetermináu pa la to wiki, definíu en <code dir=\"ltr\">$wgDefaultSkin</code> como <code>$1</code> nun ta disponible.\n\nLa instalación paez qu'incluye {{PLURAL:$4|el siguiente aspeutu|los siguientes aspeutos}}. Llei [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] pa más información sobro cómo {{PLURAL:$4|activalu|activalos y escoyer el predetermináu}}.\n\n$2\n\n; Si acabes d'instalar MediaWiki:\n: Probablemente instalasti dende git, o direutamente'l códigu fonte usando algún otru métodu. Esto ye d'esperar. Intenta instalar dellos aspeutos dende'l [https://www.mediawiki.org/wiki/Category:All_skins direutoriu d'aspeutos de mediawiki.org's], asina:\n:* Descargando [https://www.mediawiki.org/wiki/Download l'instalador tarball], que vien con dellos aspeutos y estensiones. Pues copiar y apegar el direutoriu <code>skins/</code> d'ehí.\n:* Descargando paquetes tar d'aspeutu individuales de [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Usando Git pa descargar aspeutos].\n: Facer esto nun tendría d'interferir col to repositoriu git si yes un desendolcador de MediaWiki.\n\n; Si acabes d'anovar MediaWiki:\n: MediaWiki 1.24 y más nuevu yá nun activa automáticamente los aspeutos instalaos (llei [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). Pues apegar {{PLURAL:$5|la llinia siguiente|les llinies siguientes}} en <code>LocalSettings.php</code> p'activar {{PLURAL:$5|l'aspeutu instaláu|tolos aspeutos instalaos}}:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Si acabes d'editar <code>LocalSettings.php</code>:\n: Vuelvi a comprobar los nomes de los aspeutos por si hai errores d'escritura.",
+       "default-skin-not-found-no-skins": "L'aspeutu predetermináu pa la to wiki, definíu en <code>$wgDefaultSkin</code> como <code>$1</code> nun ta disponible.\n\nNun tienes aspeutos instalaos.\n\n; Si acabes d'instalar MediaWiki:\n: Probablemente instalasti dende git, o'l códigu fonte direutamente usando algún otru métodu. Esto ye d'esperar. MediaWiki 1.24 y más nuevu nun incluye nengún aspeutu nel repositoriu principal. Intenta instalar dellos aspeutos dende'l [https://www.mediawiki.org/wiki/Category:All_skins direutoriu d'aspeutos de mediawiki.org], asina:\n:* Descargando [https://www.mediawiki.org/wiki/Download l'instalador tarball], que vien con dellos aspeutos y estensiones. Pues copiar y apegar el direutoriu <code>skins/</code> d'ehí.\n:* Descargando paquetes tar d'aspeutu individuales de [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:*  [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Usando Git pa descargar aspeutos].\n: Facer esto nun tendría d'interferir col to repositoriu git si yes un desendolcador de MediaWiki. Llei [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] pa más información sobro cómo activar los aspeutos y escoyer el predetermináu.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (activáu)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''desactiváu''')",
        "mediastatistics": "Estadístiques de multimedia",
index ad81625..6a09f97 100644 (file)
        "confirm_purge_button": "هوبنت",
        "confirm-purge-top": "ذخیره ای صفحه پهک کنت؟",
        "confirm-purge-bottom": "خالک کتن میانگیر یک صفحه باعث بیتن که آخرین نسخهٔ آی پیش دارگ بیت.",
-       "semicolon-separator": ";",
+       "semicolon-separator": "؛&#32;",
        "colon-separator": ":&#32;",
        "imgmultipageprev": "← پیشگین صفحه",
        "imgmultipagenext": "صفحه بعدی →",
index b02bba2..10167c1 100644 (file)
        "badsig": "Няслушны неапрацаваны подпіс; праверце HTML-тэгі.",
        "badsiglength": "Ваш подпіс занадта доўгі.\nПодпіс мусіць быць не даўжэй за $1 {{PLURAL:$1|сымбаль|сымбалі|сымбаляў}}.",
        "yourgender": "Як пра вас пісаць?",
-       "gender-unknown": "Ð\9dе Ð¶Ð°Ð´Ð°Ñ\8e Ð¿Ð°Ð·Ð½Ð°Ñ\87аÑ\86Ñ\8c",
+       "gender-unknown": "Ð\9aалÑ\96 Ð²Ñ\8b Ð±Ñ\83дзеÑ\86е Ð·Ð³Ð°Ð´Ð²Ð°Ñ\86Ñ\86а, Ð¿Ñ\80агÑ\80амнае Ð·Ð°Ð±ÐµÑ\81Ñ\8cпÑ\8fÑ\87Ñ\8dнÑ\8cне Ð±Ñ\83дзе ÐºÐ¾Ð¶Ð½Ñ\8b Ñ\80аз Ð¿Ñ\80Ñ\8b Ð¼Ð°Ð³Ñ\87Ñ\8bмаÑ\81Ñ\8cÑ\86Ñ\96 Ñ\9eжÑ\8bваÑ\86Ñ\8c Ð³ÐµÐ½Ð´Ñ\8dÑ\80на Ð½Ñ\8dÑ\9eÑ\82Ñ\80алÑ\8cнÑ\8bÑ\8f Ñ\81ловÑ\8b",
        "gender-male": "Ён рэдагуе вікістаронкі",
        "gender-female": "Яна рэдагуе вікістаронкі",
        "prefs-help-gender": "Вызначаць гэта неабавязкова.\nАпраграмаваньне выкарыстоўвае гэтае значэньне толькі для граматычна карэктнага звароту да вас.\nГэтая інфармацыя будзе агульнадаступнай.",
        "uploaded-animate-svg": "У загружаным SVG-файле знойдзены тэг «animate», які можа зьмяняць спасылку з дапамогай атрыбуту «from» <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploaded-setting-event-handler-svg": "Усталёўка атрыбутаў апрацоўкі падзеяў заблякаваная, у загружаным SVG-файле знойдзены код <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploaded-setting-href-svg": "Выкарыстаньне тэгу «set» для дадаваньня атрыбуту «href» у бацькоўскі элемэнт заблякаванае.",
+       "uploaded-wrong-setting-svg": "Ужываньне тэгу «set» для дадаваньня ў якасьці мэты аддаленага адрасу/зьвестак/сцэнару для любога атрыбуту заблякаванае. У загружаным SVG-файле знойдзена <code>&lt;set to=\"$1\"&gt;</code>.",
+       "uploaded-setting-handler-svg": "SVG, які выстаўляе атрыбут «handler» з дапамогай аддаленага адрасу/зьвестак/скрыпту, блякуецца. У загружаным SVG-файле знойдзена <code>$1=\"$2\"</code>.",
        "uploadscriptednamespace": "Гэты SVG-файл утрымлівае няслушную прастору назваў «$1»",
        "uploadinvalidxml": "Не атрымалася прааналізаваць XML у загружаным файле.",
        "uploadvirus": "Файл утрымлівае вірус! Падрабязнасьці: $1",
        "logentry-upload-upload": "$1 {{GENDER:$2|загрузіў|загрузіла}} $3",
        "logentry-upload-overwrite": "$1 {{GENDER:$2|загрузіў|загрузіла}} новую вэрсію $3",
        "logentry-upload-revert": "$1 {{GENDER:$2|загрузіў|загрузіла}} $3",
+       "logentry-tag-update-add-revision": "$1 {{GENDER:$2|дадаў|дадала}} {{PLURAL:$7|1=цэтлік|цэтлікі}} $6 да вэрсіі $4 старонкі $3",
+       "logentry-tag-update-add-logentry": "$1 {{GENDER:$2|дадаў|дадала}} {{PLURAL:$7|1=цэтлік|цэтлікі}} $6 да запісу журналу $5 старонкі $3",
+       "logentry-tag-update-remove-revision": "$1 {{GENDER:$2|выдаліў|выдаліла}} {{PLURAL:$9|1=цэтлік|цэтлікі}} $8 з вэрсіі $4 старонкі $3",
+       "logentry-tag-update-remove-logentry": "$1 {{GENDER:$2|выдаліў|выдаліла}} {{PLURAL:$9|1=цэтлік|цэтлікі}} $8 з запісу журналу $5 старонкі $3",
+       "logentry-tag-update-revision": "$1 {{GENDER:$2|абнавіў|абнавіла}} цэтлікі на вэрсіі $4 старонкі $3 ({{PLURAL:$7|дададзена}} $6; {{PLURAL:$9|выдалена}} $8)",
+       "logentry-tag-update-logentry": "$1 {{GENDER:$2|абнавіў|абнавіла}} цэтлікі на запісе журналу $5 старонкі $3 ({{PLURAL:$7|дададзена}} $6; {{PLURAL:$9|выдалена}} $8)",
        "rightsnone": "(няма)",
        "revdelete-summary": "кароткае апісаньне зьменаў",
        "feedback-adding": "Даданьне водгуку на старонку…",
+       "feedback-back": "Назад",
        "feedback-bugcheck": "Выдатна! Толькі праверце, магчыма гэтыя памылкі ўжо [$1 вядомыя].",
        "feedback-bugnew": "Я праверыў. Гэта новая памылка",
        "feedback-bugornote": "Калі Вы гатовы падрабязна апісаць тэхнічную праблему, калі ласка [$1 паведаміце пра памылку]. \nУ адваротным выпадку, Вы можаце выкарыстоўваць простую форму пададзеную ніжэй. Ваш камэнтар будзе дададзены на старонку «[$3 $2]», разам з Вашым іменем удзельніка і выкарыстоўваемым браўзэрам.",
        "feedback-cancel": "Скасаваць",
        "feedback-close": "Выканана",
+       "feedback-external-bug-report-button": "Аформіць тэхнічную задачу",
+       "feedback-dialog-title": "Адаслаць водгук",
+       "feedback-dialog-intro": "Свой водгук Вы можаце адаслаць праз простую форму зьнізу. Ваш камэнтар будзе дададзены на старонку «$1» разам з Вашым іменем.",
+       "feedback-error-title": "Памылка",
        "feedback-error1": "Памылка: невядомы вынік з API",
        "feedback-error2": "Памылка рэдагаваньня",
        "feedback-error3": "Памылка: няма адказу ад API",
index 5b3ab20..70ca42a 100644 (file)
@@ -3,7 +3,8 @@
                "authors": [
                        "Baloch Afghanistan",
                        "Ibrahim khashrowdi",
-                       "Rachitrali"
+                       "Rachitrali",
+                       "Mjbmr"
                ]
        },
        "tog-underline": "لینکانی جهلگا خط کشیتین",
        "confirm-watch-top": "ای دیم بئ شمی دیدارلیست ئا ایزاپه بیئت؟",
        "confirm-unwatch-button": "قبول داشتین",
        "confirm-unwatch-top": "ای دیم شه شمئ دیدارلیست ئا پاک بیئت؟",
+       "semicolon-separator": "؛&#32;",
        "quotation-marks": "\"$1\"",
        "imgmultipageprev": "&rarr; دیمتیری تاکدیم",
        "imgmultipagenext": "بئدین تاکدیم &larr;",
index aa3ea40..210a48c 100644 (file)
        "page-rss-feed": "\"$1\" আরএসএস ফিড",
        "page-atom-feed": "\"$1\" অ্যাটম ফিড",
        "feed-atom": "অ্যাটম",
-       "red-link-title": "$1 (পাতা নেই)",
+       "red-link-title": "$1 (পাতার অস্তিত্ব নেই)",
        "sort-descending": "উল্টো বর্ণক্রমে সাজাও",
        "sort-ascending": "বর্ণানুক্রমে সাজাও",
        "nstab-main": "পাতা",
index 441b043..089a250 100644 (file)
@@ -20,7 +20,8 @@
                        "아라",
                        "Milicevic01",
                        "Macofe",
-                       "Emir Mujadzic"
+                       "Emir Mujadzic",
+                       "Srdjan m"
                ]
        },
        "tog-underline": "Podvuci veze:",
@@ -35,7 +36,7 @@
        "tog-editsectiononrightclick": "Uključite uređivanje odjeljka sa pritiskom na desno dugme miša u naslovu odjeljka",
        "tog-watchcreations": "Dodaj stranice i datoteke koje napravim na moj spisak praćenih članaka",
        "tog-watchdefault": "Dodaj stranice i datoteke koje uređujem na moj spisak praćenih članaka",
-       "tog-watchmoves": "Dodaj stranice i datoteke koje pomjerim na moj spisak praćenih članaka",
+       "tog-watchmoves": "Dodaj stranice i datoteke koje premjestim na moj spisak praćenih članaka",
        "tog-watchdeletion": "Dodaj stranice i datoteke koje izbrišem na moj spisak praćenih članaka",
        "tog-watchrollback": "Sve stranice za koje sam izvršio povrat izmjena stavi na spisak praćenja",
        "tog-minordefault": "Označi sve izmjene malim isprva",
@@ -43,8 +44,8 @@
        "tog-previewonfirst": "Prikaži izgled pri prvoj izmjeni",
        "tog-enotifwatchlistpages": "Pošalji mi e-mail kada se promijeni stranica ili datoteka sa mog spiska praćenih članaka",
        "tog-enotifusertalkpages": "Pošalji mi e-poštu kad se promijeni moja korisnička stranica za razgovor",
-       "tog-enotifminoredits": "Pošalji mi e-poštu također za male izmjene u stranicama i datotekama",
-       "tog-enotifrevealaddr": "Otkrij adresu moje e-pošte u porukama obaviještenja",
+       "tog-enotifminoredits": "Također mi pošalji e-poštu za male izmjene na stranicama i datotekama",
+       "tog-enotifrevealaddr": "Otkrij adresu moje e-pošte u porukama obavještenja",
        "tog-shownumberswatching": "Prikaži broj korisnika koji prate",
        "tog-oldsig": "Postojeći potpis:",
        "tog-fancysig": "Smatraj potpis kao wikitekst (bez automatskog linka)",
@@ -56,7 +57,7 @@
        "tog-watchlisthideliu": "Sakrij promjene prijavljenih korisnika sa liste praćenja",
        "tog-watchlisthideanons": "Sakrij promjene anonimnih korisnika sa liste praćenja",
        "tog-watchlisthidepatrolled": "Sakrij patrolirane izmjene sa spiska praćenja",
-       "tog-ccmeonemails": "Pošalji mi kopije emailova koje pošaljem drugim korisnicima",
+       "tog-ccmeonemails": "Pošalji mi kopije e-pošte koju pošaljem drugim korisnicima",
        "tog-diffonly": "Ne prikazuj sadržaj stranice ispod prikaza razlika",
        "tog-showhiddencats": "Prikaži skrivene kategorije",
        "tog-norollbackdiff": "Nakon vraćanja zanemari prikaz razlika",
@@ -68,8 +69,8 @@
        "editfont-style": "Stil slova područja uređivanja:",
        "editfont-default": "Po postavkama preglednika",
        "editfont-monospace": "Slova sa jednostrukim razmakom",
-       "editfont-sansserif": "Slova bez serifa",
-       "editfont-serif": "Slova serif",
+       "editfont-sansserif": "Beserifni font",
+       "editfont-serif": "Serifni font",
        "sunday": "nedjelja",
        "monday": "ponedjeljak",
        "tuesday": "utorak",
        "newwindow": "(otvara se u novom prozoru)",
        "cancel": "Poništite",
        "moredotdotdot": "Više...",
-       "morenotlisted": "Ovaj spisak nije kompletan.",
+       "morenotlisted": "Ovaj spisak nije potpun.",
        "mypage": "Korisnička stranica",
        "mytalk": "Razgovor",
        "anontalk": "Razgovor za ovu IP adresu",
        "no-null-revision": "Ne mogu napraviti novu ništavnu reviziju za stranicu \"$1\"",
        "badtitle": "Loš naslov",
        "badtitletext": "Zahtjevani naslov stranice je bio neispravan, prazan ili neispravno povezan međujezički ili interviki naslov.",
+       "title-invalid-empty": "Zatraženo ime stranice je prazno ili samo sadrži naziv imenskog prostora.",
+       "title-invalid-utf8": "Vaš zatraženi naziv stranice sadrži nevažeći UTF-8 znak.",
        "title-invalid-interwiki": "Traženi naslov stranice sadrži interwiki link koji ne može biti korišten u naslovima.",
+       "title-invalid-talk-namespace": "Vaš zatraženi naslov stranice se odnosi na stranicu za razgovor koja ne može postojati.",
+       "title-invalid-characters": "Vaš zatraženi naslov stranice sadrži nevažeće znakove: \"$1\".",
+       "title-invalid-leading-colon": "Zahtjevani naslov stranice sadrži nevažeću dvotačku na početku.",
        "perfcached": "Slijedeći podaci su keširani i možda neće biti u potpunosti ažurirani. Keš sadrži najviše {{PLURAL:$1|jedan rezultat|$1 rezultata}}.",
        "perfcachedts": "Sljedeći podaci nalaze se u memoriji i posljednji put ažurirani su $1. Keš sadrži najviše {{PLURAL:$4|jedan rezultat|$4 rezultata}}.",
        "querypage-no-updates": "Ažuriranje ove stranice je isključeno.\nPodaci koji se ovdje nalaze ne moraju biti aktuelni.",
        "missingcommentheader": "'''Podsjetnik:''' Niste napisali temu/naslov za ovaj komentar.\nAko ponovo kliknete na ''{{int:savearticle}}'', Vaše izmjene će biti spašene bez teme/naslova.",
        "summary-preview": "Pregled sažetka:",
        "subject-preview": "Pregled tema/naslova:",
+       "previewerrortext": "Dogodila se greška prilikom prikazivanja vaših izmjena.",
        "blockedtitle": "Korisnik je blokiran",
        "blockedtext": "'''Vaše korisničko ime ili IP adresa je blokirana.'''\n\nBlokada izvršena od strane $1.\nDati razlog je slijedeći: ''$2''.\n\n*Početak blokade: $8\n*Kraj perioda blokade: $6\n*Ime blokiranog korisnika: $7\n\nMožete kontaktirati $1 ili nekog drugog [[{{MediaWiki:Grouppage-sysop}}|administratora]] da biste razgovarali o blokadi.\n\nNe možete koristiti opciju ''Pošalji e-mail korisniku'' osim ako niste unijeli e-mail adresu u [[Special:Preferences|Vaše postavke]].\nVaša trenutna IP adresa je $3, a oznaka blokade je #$5.\nMolimo Vas da navedete gornje podatke pri zahtjevu za deblokadu.",
        "autoblockedtext": "Vaša IP adresa je automatski blokirana jer je korištena od strane drugog korisnika, a blokirao ju je $1.\nNaveden je slijedeći razlog:\n\n:''$2''\n\n* Početak blokade: $8\n* Kraj blokade: $6\n* Blokirani korisnik: $7\n\nMožete kontaktirati $1 ili nekog drugog iz grupe [[{{MediaWiki:Grouppage-sysop}}|administratora]] i zahtijevati da Vas deblokira.\n\nZapamtite da ne možete koristiti opciju \"pošalji e-mail ovom korisniku\" sve dok ne unesete validnu e-mail adresu pri registraciji u Vašim [[Special:Preferences|korisničkim postavkama]] te Vas ne spriječava ga je koristite.\n\nVaša trenutna IP adresa je $3, a ID blokade je $5.\nMolimo da navedete sve gore navedene detalje u zahtjevu za deblokadu.",
        "whitelistedittext": "Da bi ste uređivali stranice, morate se $1.",
        "confirmedittext": "Morate potvrditi Vašu e-mail adresu prije nego počnete mijenjati stranice.\nMolimo da postavite i verifikujete Vašu e-mail adresu putem Vaših [[Special:Preferences|korisničkih opcija]].",
        "nosuchsectiontitle": "Ne mogu pronaći sekciju",
-       "nosuchsectiontext": "Pokušali ste uređivati sekciju koja ne postoji.\nMožda je preusmjerena ili obrisana dok ste pregledavali stranicu.",
+       "nosuchsectiontext": "Pokušali ste uređivati sekciju koja ne postoji.\nMožda je premještena ili obrisana dok ste pregledavali stranicu.",
        "loginreqtitle": "Potrebno je prijavljivanje",
        "loginreqlink": "prijavi se",
        "loginreqpagetext": "Morate $1 da bi ste vidjeli druge strane.",
        "permissionserrors": "Greške pri odobrenju",
        "permissionserrorstext": "Nemate dopuštenje da to uradite, iz {{PLURAL:$1|slijedećeg razloga|slijedećih razloga}}:",
        "permissionserrorstext-withaction": "Nemate dopuštenje da $2, iz {{PLURAL:$1|slijedećeg|slijedećih}} razloga:",
-       "recreate-moveddeleted-warn": "'''Upozorenje: Postavljate stranicu koja je prethodno brisana.'''\n\nRazmotrite da li je nastavljanje uređivanja ove stranice u skladu s pravilima.\nOvdje je naveden zapisnik brisanja i preusmjeravanja s obrazloženjem:",
+       "recreate-moveddeleted-warn": "'''Upozorenje: Postavljate stranicu koja je prethodno brisana.'''\n\nRazmotrite da li je nastavljanje uređivanja ove stranice u skladu s pravilima.\nOvdje je naveden zapisnik brisanja i premještanja s obrazloženjem:",
        "moveddeleted-notice": "Ova stranica je obrisana.\nZapis brisanja i pomjeranja stranice je prikazan ispod kao referenca.",
        "log-fulllog": "Vidi potpuni zapisnik",
        "edit-hook-aborted": "Izmjena je poništena putem interfejsa.\nNije ponuđeno nikakvo objašnjenje.",
        "content-model-css": "CSS",
        "content-json-empty-object": "Prazan objekat",
        "content-json-empty-array": "Prazan niz",
+       "duplicate-args-warning": "<strong>Upozorenje:</strong> [[:$1]] poziva na [[:$2]] sa više od jedne vrijednosti za paramentar \"$3\". Bit će prikazana samo posljednja vrijednosti.",
        "duplicate-args-category": "Stranice sa istim argumentima kod poziva šablona",
        "duplicate-args-category-desc": "Stranica sadrži pozive šablona koji koriste argumente dvojnike, kao što su <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> ili <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "Upozorenje: Ova stranica sadrži previše poziva opterećujućih parserskih funkcija.\n\nTrebalo bi imati manje od $2 {{PLURAL:$2|poziv|poziva}}, a sad ima {{PLURAL:$1|$1 poziv|$1 poziva}}.",
        "history-feed-description": "Historija promjena ove stranice na wikiju",
        "history-feed-item-nocomment": "$1 u $2",
        "history-feed-empty": "Tražena stranica ne postoji.\nMoguće da je izbrisana sa wikija, ili preimenovana.\nPokušajte [[Special:Search|pretražiti wiki]] za slične stranice.",
+       "history-edit-tags": "Uredi oznake izabranih verzija",
        "rev-deleted-comment": "(sažetak izmjene uklonjen)",
        "rev-deleted-user": "(korisničko ime uklonjeno)",
        "rev-deleted-event": "(stavka zapisa obrisana)",
        "prefs-rc": "Podešavanja nedavnih izmjena",
        "prefs-watchlist": "Moji praćeni članci",
        "prefs-editwatchlist": "Uredi spisak praćenja",
+       "prefs-editwatchlist-label": "Uredi unose na spisku praćenja:",
+       "prefs-editwatchlist-edit": "Pregledaj i ukloni članke sa spiska praćenja",
+       "prefs-editwatchlist-raw": "Napredno uređivanje spiska praćenja",
        "prefs-editwatchlist-clear": "Očisti spisak praćenja",
        "prefs-watchlist-days": "Broj dana za prikaz u spisku praćenja:",
        "prefs-watchlist-days-max": "Maximum $1 {{PLURAL:$1|dan|dana}}",
        "recentchangesdays-max": "(najviše $1 {{PLURAL:$1|dan|dana}})",
        "recentchangescount": "Broj uređivanja za prikaz po pretpostavkama:",
        "prefs-help-recentchangescount": "Ovo uključuje nedavne izmjene, historije stranice i zapise.",
+       "prefs-help-watchlist-token2": "Ovo je tajni ključ sažetka vašeg spiska izmjena. Ko god da ga zna, moći će ga čitati. Ne dijelite ga ni s kim. Ako je potrebno, [[Special:ResetTokens|možete ga ponovo postaviti]].",
        "savedprefs": "Vaše postavke su sačuvane.",
        "timezonelegend": "Vremenska zona:",
        "localtime": "Lokalno vrijeme:",
        "prefs-tokenwatchlist": "Žeton",
        "prefs-diffs": "Razlike",
        "prefs-help-prefershttps": "Ova podešavanja će stupiti na snagu pri sljedećoj prijavi.",
+       "prefswarning-warning": "Napravili ste promjene u vašim postavkama koje još uvijek nisu sačuvane. Ako napustite ovu stranicu bez da pritisnete na \"$1\", postavke neće biti ažurirane.",
        "email-address-validity-valid": "Izgleda valjano",
        "email-address-validity-invalid": "Neophodna valjana adresa!",
        "userrights": "Postavke korisničkih prava",
        "right-createtalk": "Pravljenje stranica za razgovor",
        "right-createaccount": "Pravljenje korisničkog računa",
        "right-minoredit": "Označavanje izmjena kao malih",
-       "right-move": "Preusmjeravanje stranica",
+       "right-move": "Premještanje stranica",
        "right-move-subpages": "Preusmjeravanje stranica sa svim podstranicama",
        "right-move-rootuserpages": "Premještanje stranica osnovnih korisnika",
        "right-move-categorypages": "Pomakni stranice kategorije",
        "right-browsearchive": "Pretraživanje obrisanih stranica",
        "right-undelete": "Vraćanje obrisanih stranica",
        "right-suppressrevision": "Pregled, sakrivanje i povratak određenih revizija stranice od svih korisnika",
+       "right-viewsuppressed": "Pregledaj izmjene skrivene od svih korisnika",
        "right-suppressionlog": "Gledanje privatnih zapisa",
        "right-block": "Blokiranje uređivanja drugih korisnika",
        "right-blockemail": "Blokiranje korisnika da šalje e-mail",
        "right-editmyusercss": "Uredite svoje vlastite korisničke CSS datoteke",
        "right-editmyuserjs": "Uredite vlastite korisničke JavaScript datoteke",
        "right-viewmywatchlist": "Pogledaj svoj spisak praćenih stranica",
+       "right-editmywatchlist": "Uredite vlastiti spisak praćenja. Važno je spomenuti da će neke radnje dodati stranice na spisak, čak i bez ovog prava.",
        "right-viewmyprivateinfo": "Pogledajte Vaše privatne podatke (npr, adresa e-pošte, pravo ime)",
        "right-editmyprivateinfo": "Uredite svoje privatne podatke (npr. adresa e-pošte, pravo ime)",
        "right-editmyoptions": "Uredite svoje postavke",
        "right-override-export-depth": "Izvoz stranica uključujući povezane stranice do dubine od 5 linkova",
        "right-sendemail": "Slanje e-maila drugim korisnicima",
        "right-passwordreset": "Pogledaj e-mailove za obnavljanje šifre",
+       "right-managechangetags": "Napravi i briši [[Special:Tags|oznake]] iz baze podataka",
        "newuserlogpage": "Zapis novih korisnika",
        "newuserlogpagetext": "Ovo je zapis o registraciji novih korisnika.",
        "rightslog": "Zapisnik korisničkih prava",
        "action-createtalk": "kreirate stranice za razgovor",
        "action-createaccount": "napravite ovaj korisnički račun",
        "action-minoredit": "da označite ovu izmjenu kao malu",
-       "action-move": "pomjerite ovu stranicu",
-       "action-move-subpages": "pomjerite ovu stranicu, i njene podstranice",
-       "action-move-rootuserpages": "pomjerite stranice osnovnog korisnika",
+       "action-move": "premjestite ovu stranicu",
+       "action-move-subpages": "premjestite ovu stranicu, i njene podstranice",
+       "action-move-rootuserpages": "premjestite stranice osnovnog korisnika",
        "action-move-categorypages": "pomakni stranice kategorije",
-       "action-movefile": "pomjeri ovu datoteku",
+       "action-movefile": "premjesti ovu datoteku",
        "action-upload": "postavljate ovu datoteku",
        "action-reupload": "stavite novu verziju postojeće datoteke",
        "action-reupload-shared": "postavite ovu datoteku iz zajedničke ostave",
        "upload_directory_missing": "Folder za postavljanje ($1) nedostaje i webserver ga ne može napraviti.",
        "upload_directory_read_only": "Folder za postavljanje ($1) na webserveru je postavljen samo za čitanje.",
        "uploaderror": "Greška pri slanju",
-       "upload-recreate-warning": "'''Upozorenje: Datoteka s tim imenom obrisana je ili preusmjerena.'''\nZapisnik brisanja i preusmjeravanja za ovu stranicu dostupan je ovdje:",
+       "upload-recreate-warning": "<strong>Upozorenje: Datoteka s tim imenom je obrisana ili premještena.</strong>\nZapisnik brisanja i premještanja za ovu stranicu dostupan je ovdje:",
        "uploadtext": "Koristite formu ispod za postavljanje datoteka.\nDa bi ste vidjeli ili pretražili ranije postavljene datoteke, pogledajte [[Special:FileList|spisak postavljenih datoteka]], ponovna postavljanja su također zapisana u [[Special:Log/upload|zapisnik postavljanja]], a brisanja u [[Special:Log/delete|zapisnik brisanja]].\n\nDa bi ste prikazali datoteku na stranici, koristite link na jedan od slijedećih načina:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Datoteka.jpg]]</nowiki></code>''' da upotrijebite potpunu veziju datoteke\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Datoteka.png|200px|thumb|lijevo|opis slike]]</nowiki></code>''' da upotrijebite smanjeni prikaz širine 200 piksela unutar okvira, s lijevim poravnanjem i ''opisom slike''.\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Datoteka.ogg]]</nowiki></code>''' za direkno povezivanje datoteke bez njenog prikazivanja",
        "upload-permitted": "Podržane vrste datoteka: $1.",
        "upload-preferred": "Preferirane vrste datoteka: $1.",
        "backend-fail-create": "Ne mogu napraviti datoteku $1.",
        "backend-fail-readonly": "Skladišna osnova \"$1\" je trenutno samo za čitanje. Navedeni razlog je: \"$2\"",
        "backend-fail-synced": "Datoteka \"$1\" je u nekonzistentnom stanju u internom skladištu",
+       "backend-fail-connect": "Ne mogu se povezati sa pozadinskim spremištem \"$1\".",
        "backend-fail-internal": "Došlo je do nepoznate greške u skladišnoj osnovi \"$1\".",
        "backend-fail-contenttype": "Ne mogu da utvrdim kakav sadržaj ima datoteka koju treba da smjestim u \"$1\".",
        "backend-fail-batchsize": "Skladišna osnova je dobila blokadu od $1 {{PLURAL:$1|datotečne operacije|datotečne operacije|datotečnih operacija}}; ograničenje je $2 {{PLURAL:$2|operacija|operacije|operacija}}.",
        "newpages": "Nove stranice",
        "newpages-username": "Korisničko ime:",
        "ancientpages": "Najstarije stranice",
-       "move": "Preusmjeri",
+       "move": "Premjesti",
        "movethispage": "Premjesti ovu stranicu",
        "unusedimagestext": "Slijedeće datoteke postoje ali nisu uključene ni u jednu stranicu.\nMolimo obratite pažnju da druge web stranice mogu biti povezane s datotekom putem direktnog URLa, tako da i pored toga mogu biti prikazane ovdje pored aktivne upotrebe.",
        "unusedcategoriestext": "Sljedeće stranice kategorija postoje iako ih nijedan drugi članak ili kategorija ne koriste.",
        "watchnologin": "Niste prijavljeni",
        "addwatch": "Dodaj na spisak praćenja",
        "addedwatchtext": "Stranica \"[[:$1]]\" je dodata vašem [[Special:Watchlist|spisku praćenih članaka]]. \nBuduće promjene ove stranice i njoj pridružene stranice za razgovor će biti navedene ovde.",
+       "addedwatchtext-short": "Stranica \"$1\" je dodana na vaš spisak praćenja.",
        "removewatch": "Ukloni sa spiska praćenja",
        "removedwatchtext": "Stranica \"[[:$1]]\" je uklonjena iz [[Special:Watchlist|vašeg spiska praćenih članaka]].",
+       "removedwatchtext-short": "Stranica \"$1\" je uklonjena sa vašeg spiska praćenja.",
        "watch": "Prati članak",
        "watchthispage": "Prati ovu stranicu",
        "unwatch": "Ukinite praćenje",
        "delete-edit-reasonlist": "Uredi razloge brisanja",
        "delete-toobig": "Ova stranica ima veliku historiju promjena, preko $1 {{PLURAL:$1|revizije|revizija}}.\nBrisanje takvih stranica nije dopušteno da bi se spriječilo slučajno preopterećenje servera na kojem je {{SITENAME}}.",
        "delete-warning-toobig": "Ova stranica ima veliku historiju izmjena, preko $1 {{PLURAL:$1|izmjene|izmjena}}.\nNjeno brisanje može dovesti do opterećenja operacione baze na {{SITENAME}};\nnastavite s oprezom.",
+       "deleteprotected": "Ne možete obrisati ovu stranicu jer je zaštićena.",
+       "deleting-backlinks-warning": "'''Upozorenje:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Druge stranice]] sadrže link ili vode na stranicu koju brišete.",
        "rollback": "Vrati izmjene",
        "rollbacklink": "vrati",
        "rollbacklinkcount": "vrati $1 {{PLURAL:$1|izmjenu|izmjene|izmjena}}",
        "contributions-title": "Doprinosi korisnika $1",
        "mycontris": "Doprinos",
        "contribsub2": "Za {{GENDER:$3|$1}} ($2)",
+       "contributions-userdoesnotexist": "Korisnički račun \"$1\" nije registrovan.",
        "nocontribs": "Nisu nađene promjene koje zadovoljavaju ove uslove.",
        "uctop": "(trenutno)",
        "month": "Od mjeseca (i ranije):",
        "lockfilenotwritable": "Datoteka zaključavanja baze je zaštićena za pisanje.\nAko želite otključati ili zaključati bazu, ova datoteka mora biti omogućena za pisanje od strane web servera.",
        "databasenotlocked": "Baza podataka nije zaključana.",
        "lockedbyandtime": "(od $1 dana $2 u $3)",
-       "move-page": "Preusmjeravanje $1",
+       "move-page": "Premještanje $1",
        "move-page-legend": "Premjestite stranicu",
-       "movepagetext": "Korištenjem ovog formulara možete preimenovati stranicu, premještajući cijelu historiju na novo ime.\nČlanak pod starim imenom postat će stranica koja preusmjerava na članak pod novim imenom. \nMožete automatski izmijeniti preusmjerenje do izvornog naslova.\nAko se ne odlučite na to, provjerite [[Special:DoubleRedirects|dvostruka]] ili [[Special:BrokenRedirects|neispravna preusmjeravanja]].\nDužni ste provjeriti da svi linkovi i dalje nastave voditi na prave stranice.\n\nImajte na umu da članak '''neće''' biti preusmjeren ako već postoji članak pod imenom na koje ga namjeravate preusmjeriti osim u slučaju stranice za preusmjeravanje koja nema nikakvih starih izmjena.\nTo znači da možete vratiti stranicu na prethodno mjesto ako pogriješite, ali ne možete zamijeniti postojeću stranicu.\n\n'''Pažnja!'''\nOvo može biti drastična i neočekivana promjena kad su u pitanju popularne stranice.\nMolimo da dobro razmislite prije no što preimenujete stranicu.",
+       "movepagetext": "Korištenjem ovog formulara možete preimenovati stranicu, premještajući cijelu historiju na novo ime.\nČlanak pod starim imenom postat će stranica koja preusmjerava na članak pod novim imenom. \nMožete automatski izmijeniti preusmjerenje do izvornog naslova.\nAko se ne odlučite na to, provjerite [[Special:DoubleRedirects|dvostruka]] ili [[Special:BrokenRedirects|neispravna preusmjeravanja]].\nDužni ste provjeriti da svi linkovi i dalje nastave voditi na prave stranice.\n\nImajte na umu da članak '''neće''' biti premješten ako već postoji članak pod imenom na koje ga namjeravate preusmjeriti osim u slučaju stranice za preusmjeravanje koja nema nikakvih starih izmjena.\nTo znači da možete vratiti stranicu na prethodno mjesto ako pogriješite, ali ne možete zamijeniti postojeću stranicu.\n\n'''Pažnja!'''\nOvo može biti drastična i neočekivana promjena kad su u pitanju popularne stranice.\nMolimo da dobro razmislite prije no što premjestite stranicu.",
        "movepagetext-noredirectfixer": "Koristeći donji obrazac, preimenovat ćete stranicu i premjestiti cijelu njenu historiju na novi naziv.\nStari naziv postat će preusmjerenje na novi naziv.\nMolimo da provjerite postoje li [[Special:DoubleRedirects|dvostruka]] ili [[Special:BrokenRedirects|nedovršena preusmjerenja]].\nVi ste za to odgovorni te morate provjeriti jesu li linkovi ispravni i vode li tamo kamo bi trebali voditi.\n\nImajte na umu da stranica '''neće''' biti premještena ako već postoji stranica s tim imenom, osim ako je prazna ili je preusmjerenje ili nema ranije historije.\nOvo znači da možete preimenovati stranicu nazad gdje je ranije bila preimenovana ako ste pogriješili, ali ne možete ponovo preimenovati postojeću stranicu.\n\n'''Pažnja!'''\nImajte na umu da preusmjeravanje popularnog članka može biti\ndrastična i neočekivana promjena za korisnike; molimo da budete sigurni da ste shvatili posljedice prije no što nastavite.",
        "movepagetalktext": "Odgovarajuća stranica za razgovor, ako postoji, će automatski biti premještena istovremeno '''osim:'''\n*Ako premještate stranicu preko imenskih prostora,\n*Neprazna stranica za razgovor već postoji pod novim imenom, ili\n*Odčekirajte donju kutiju.\n\nU tim slučajevima, moraćete ručno da premjestite stranicu ukoliko to želite.",
        "movearticle": "Premjestite stranicu",
        "cant-move-to-user-page": "Nemate dopuštenje da premjestite stranicu na korisničku stranicu (osim na korisničku podstranicu).",
        "newtitle": "Novi naslov",
        "move-watch": "Prati ovu stranicu",
-       "movepagebtn": "pomjerite stranicu",
+       "movepagebtn": "premjestite stranicu",
        "pagemovedsub": "Premještanje uspjelo",
        "movepage-moved": "'''\"$1\" je premještena na \"$2\"'''",
        "movepage-moved-redirect": "Preusmjerenje je napravljeno.",
        "selfmove": "Izvorni i ciljani naziv su isti; strana ne može da se premjesti preko same sebe.",
        "immobile-source-namespace": "Ne mogu premjestiti stranice u imenski prostor \"$1\"",
        "immobile-target-namespace": "Ne mogu se premjestiti stranice u imenski prostor \"$1\"",
-       "immobile-target-namespace-iw": "Međuwiki link nije validno odredište premještanja stranice.",
+       "immobile-target-namespace-iw": "Međuwiki link nije ispravno odredište premještanja stranice.",
        "immobile-source-page": "Ova stranica se ne može premještati.",
-       "immobile-target-page": "Ne može se preusmjeriti na taj odredišni naslov.",
+       "immobile-target-page": "Ne može se premjestiti na taj odredišni naslov.",
        "imagenocrossnamespace": "Ne može se premjestiti datoteka u nedatotečni imenski prostor",
        "nonfile-cannot-move-to-file": "Ne mogu se premjestiti podaci u datotečni imenski prostor",
        "imagetypemismatch": "Ekstenzija nove datoteke ne odgovara njenom tipu",
        "tooltip-ca-unprotect": "Promijeni zaštitu za ovu stranicu",
        "tooltip-ca-delete": "Izbrišite ovu stranicu",
        "tooltip-ca-undelete": "Vratite izmjene koje su načinjene prije brisanja stranice",
-       "tooltip-ca-move": "Pomjerite stranicu",
+       "tooltip-ca-move": "Premjesti ovu stranicu",
        "tooltip-ca-watch": "Dodajte stranicu u listu praćnih članaka",
        "tooltip-ca-unwatch": "Izbrišite stranicu sa liste praćnih članaka",
        "tooltip-search": "Pretraži projekat {{SITENAME}}",
        "pageinfo-contentpage-yes": "Da",
        "pageinfo-protect-cascading-yes": "Da",
        "pageinfo-category-info": "Informacije o kategoriji",
+       "pageinfo-category-total": "Ukupan broj članova",
        "pageinfo-category-pages": "Broj stranica",
        "pageinfo-category-subcats": "Broj podkategorija",
        "pageinfo-category-files": "Broj datoteka",
        "version-entrypoints": "URL Adrese ulazne tačke",
        "version-entrypoints-header-entrypoint": "Ulazna tačka",
        "version-entrypoints-header-url": "URL",
+       "version-libraries-version": "Verzija",
        "redirect-submit": "Idi",
        "redirect-value": "Vrijednost:",
        "redirect-user": "Korisnički ID",
        "tags-tag": "Naziv oznake",
        "tags-display-header": "Vidljivost na spisku izmjena",
        "tags-description-header": "Puni opis značenja",
+       "tags-source-header": "Izvor",
        "tags-active-header": "Aktivna?",
        "tags-hitcount-header": "Označene izmjene",
        "tags-active-yes": "Da",
        "tags-active-no": "Ne",
+       "tags-source-extension": "Definirano preko proširenja",
+       "tags-source-none": "Više se ne koristi",
        "tags-edit": "uređivanje",
        "tags-delete": "izbriši",
        "tags-activate": "aktiviraj",
        "tags-create-no-name": "Morate navesti ime oznake.",
        "tags-create-already-exists": "Oznaka \"$1\" već postoji.",
        "tags-delete-title": "Izbriši oznaku",
+       "tags-delete-reason": "Razlog:",
+       "tags-delete-not-found": "Oznaka \"$1\" ne postoji.",
        "comparepages": "Usporedi stranice",
        "compare-page1": "Stranica 1",
        "compare-page2": "Stranica 2",
        "feedback-bugornote": "Ako ste spremni detaljno opisati tehnički problem, molimo [$1 prijavite \"bug\" (grešku)].\nInače, možete ispuniti jednostavan obrazac ispod. Vaš komentar bit će dodan na stranicu \"[$3 $2]\" zajedno s Vašim korisničkim imenom.",
        "feedback-cancel": "Odustani",
        "feedback-close": "Završeno",
+       "feedback-dialog-title": "Pošalji povratne informacije",
+       "feedback-error-title": "Greška",
        "feedback-error1": "Greška: Neprepoznati rezultat od API",
        "feedback-error2": "Greška: Uređivanje nije uspjelo",
        "feedback-error3": "Greška: Nema odgovora od API",
        "feedback-subject": "Tema:",
        "feedback-submit": "Pošalji",
        "feedback-thanks": "Hvala! Vaša povratna informacija postavljena je na stranicu \"[$2 $1]\".",
+       "feedback-thanks-title": "Hvala!",
        "searchsuggest-search": "Traži",
        "searchsuggest-containing": "sadrži...",
        "api-error-badaccess-groups": "Nemate ovlasti da postavljate datoteke na ovoj wiki.",
        "expand_templates_preview": "Pregled",
        "pagelang-name": "Stranica",
        "pagelang-language": "Jezik",
+       "pagelang-use-default": "Koristi podrazumijevani jezik",
        "pagelang-select-lang": "Izaberi jezik",
        "mediastatistics-table-count": "Broj datoteka",
+       "mediastatistics-table-totalbytes": "Kombinirana veličina",
        "mediastatistics-header-unknown": "Nepoznato",
        "mediastatistics-header-drawing": "Crteži (vektorske slike)",
        "mediastatistics-header-audio": "Zvuk",
index 1103dbd..0ca3544 100644 (file)
        "redirectedfrom": "(ДӀасахьажийна кху $1)",
        "redirectpagesub": "АгӀо-дӀасахьажорг",
        "redirectto": "ДӀасахьажор тӀе:",
-       "lastmodifiedat": "ХӀокху агӀон тӀаьххьаралера хийцам: $2, $1.",
+       "lastmodifiedat": "ХӀокху агӀон тӀаьххьаралера хийцам: $1, $2.",
        "viewcount": "ХӀокху агӀонг хьовсийна $1 {{PLURAL:$1|за}}.",
        "protectedpage": "ГӀароллийца йолу агӀо",
        "jumpto": "Дехьа гӀо:",
index 4d4784c..8f376d5 100644 (file)
        "protectedpagetext": "Ginkandaduhan ang mini nga pahina para indi ma-islan.",
        "viewsourcetext": "Pwede mo makita kag makopya ang ginhalinan sang mini nga pahina:",
        "protectedinterface": "Nagahatag ang mini nga pahina sang teksto nga pangkatapusan (''interface'') para sa software, kag ikandado para mapunggan ang pag-abuso.",
-       "editinginterface": "'''Paandam:''' gin-islan mo ang pahina nga gina-usar nga nagahatag teksto sang interface sa sopwer.\nMakaapekto ang mga gin-islan sa mini nga pahina sa gwaan nga itsura ka interface sang manug-usar sa iban nga mga manug-usar.\nPara sa mga pagtransleyt, palihog konsidera gamit ang [http://translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net], ang MediaWiki proyekto sa paglokalisa.",
+       "editinginterface": "'''Paandam:''' gin-islan mo ang pahina nga gina-usar nga nagahatag teksto sang interface sa sopwer.\nMakaapekto ang mga gin-islan sa mini nga pahina sa gwaan nga itsura ka interface sang manug-usar sa iban nga mga manug-usar.",
        "cascadeprotected": "Ginprotektahan ang mini nga pahina sa pagpangilis, tungod naupod ini sa mga gasunod nga {{PLURAL:$1|pahina, nga|mga pahina, nga}} protektado upod ang \"cascading\" nga pilili-an nga naga-andar:\n$2",
        "namespaceprotected": "Wala ka sang permiso nga magliwat sang mga pahina nga ara sa namespace nga '''$1'''.",
        "ns-specialprotected": "Indi pwede bag-uhon ang mga pinasahi nga pahina.",
index 2ba7c4c..d57bb8d 100644 (file)
        "badsig": "Chybný podpis, zkontrolujte syntaxi HTML.",
        "badsiglength": "Váš podpis je příliš dlouhý. Musí být kratší než $1 {{PLURAL:$1|znak|znaky|znaků}}.",
        "yourgender": "Jak chcete být popisován(a)?",
-       "gender-unknown": "Nechci sdělit.",
+       "gender-unknown": "Software nebude při zmínkách o vás používat konkrétní rod",
        "gender-male": "On upravil článek.",
        "gender-female": "Ona upravila článek.",
        "prefs-help-gender": "Toto nastavení je nepovinné.\nSoftware ho používá pro volbu gramatického rodu, když vás oslovuje nebo vás zmiňuje.\nTato informace je veřejná.",
index 0144f07..6d12710 100644 (file)
        "badsig": "Die Syntax der Signatur ist ungültig; bitte HTML überprüfen.",
        "badsiglength": "Die Signatur darf maximal $1 {{PLURAL:$1|Zeichen}} lang sein.",
        "yourgender": "Welches Geschlecht hast du?",
-       "gender-unknown": "Ich möchte hierzu keine Angabe machen",
+       "gender-unknown": "Beim Erwähnen deiner Person verwendet die Software geschlechtsneutrale Wörter, sofern möglich",
        "gender-male": "Ich bin männlich",
        "gender-female": "Ich bin weiblich",
        "prefs-help-gender": "Dies ist eine freiwillige Angabe.\nDie Software nutzt sie, um dich anzureden sowie als Hinweis für andere durch Verwendung des zutreffenden grammatikalischen Geschlechts.\nDiese Information ist öffentlich.",
index c500755..bd0ff07 100644 (file)
@@ -25,7 +25,7 @@
        "tog-minordefault": "सबै सम्पादनहरूलाई पहिल्लई निर्धारित रुपमी सामान्य चिनो लगाउन्या",
        "tog-previewontop": "सम्पादन बाकस अगि पहिलाकोरूप देखाउन्या",
        "tog-previewonfirst": "पैल्लीको सम्पादनमी झलक धेकाउन्या",
-       "tog-enotifwatchlistpages": "मà¥\87रा à¤§à¥\8dयान à¤¸à¥\82à¤\9aà¥\80मà¥\80 à¤°à¤¹à¥\87याà¤\95ा à¤ªà¤¾à¤¨à¤¾ à¤\85थवा à¤\9aितà¥\8dर à¤¬à¤¦à¤²à¤¿à¤\8fà¤\95ा मुलाई ई-मेल गरियोस्",
+       "tog-enotifwatchlistpages": "मà¥\87रा à¤§à¥\8dयान à¤¸à¥\82à¤\9aà¥\80मà¥\80 à¤°à¤¹à¥\8dयाà¤\95ा à¤ªà¤¾à¤¨à¤¾ à¤\85थवा à¤\9aितà¥\8dर à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤­à¤¯ा मुलाई ई-मेल गरियोस्",
        "tog-enotifusertalkpages": "मेरो कुरडी पानामी परिवर्तन भया मलाई इमेल पठाउन्या",
        "tog-enotifminoredits": "पानाहरू र फाइलहरूमी सामान्य सम्पादन भयालै मुइलाई ई-मेल गरियोस्",
        "tog-enotifrevealaddr": "जानकारी इ-मेलहरूमी मेरो इ-मेल खुलाउन्या",
        "category-subcat-count-limited": "यै श्रेणीमी निम्न {{PLURAL:$1|उपश्रेणी|$1 उपश्रेणीहरू}} छन् ।",
        "category-article-count": "{{PLURAL:$2|यै श्रेणीमी एक मात्र पानो रया छ।|कुल $2 मध्ये यै श्रेणीमी {{PLURAL:$1|पानो|$1 पानाहरू}} रहेका छन् । }}",
        "category-article-count-limited": "निम्न {{PLURAL:$1|पानो|$1 पानाहरू}} ये श्रेणीमी रया छ ।",
-       "category-file-count": "{{PLURAL:$2|यà¥\88 à¤¶à¥\8dरà¥\87णà¥\80मà¥\80 à¤\8fà¤\95 à¤®à¤¾à¤¤à¥\8dर à¤ªà¤¾à¤¨à¥\8b à¤°à¤¯à¤¾ à¤\9b।|à¤\95à¥\81ल $2 à¤®à¤§à¥\8dयà¥\87 à¤¯à¥\88 à¤¶à¥\8dरà¥\87णà¥\80मà¥\80 {{PLURAL:$1|पानà¥\8b|$1 à¤ªà¤¾à¤¨à¤¾हरू}} रहेका छन् । }}",
-       "category-file-count-limited": "निमà¥\8dन {{PLURAL:$1|पानà¥\8b|$1 à¤ªà¤¾à¤¨à¤¾à¤¹à¤°à¥\82}} à¤¯à¥\87 श्रेणीमी रया छ ।",
+       "category-file-count": "{{PLURAL:$2|यà¥\88 à¤¶à¥\8dरà¥\87णà¥\80मà¥\80 à¤\8fà¤\95 à¤®à¤¾à¤¤à¥\8dर à¤«à¤¾à¤\87ल à¤°à¤¯à¤¾ à¤\9b।|à¤\95à¥\81ल $2 à¤®à¤§à¥\8dयà¥\87 à¤¯à¥\88 à¤¶à¥\8dरà¥\87णà¥\80मà¥\80 {{PLURAL:$1|फाà¤\87ल|$1 à¤«à¤¾à¤\87लहरू}} रहेका छन् । }}",
+       "category-file-count-limited": "निमà¥\8dन {{PLURAL:$1|फाà¤\87ल|$1 à¤«à¤¾à¤\87लहरà¥\82}} à¤¯à¥\88 श्रेणीमी रया छ ।",
        "listingcontinuesabbrev": "निरन्तरता...",
        "index-category": "क्रमाङ्कित पानाहरू",
        "noindex-category": "क्रमाङ्कन नगरीयाका पानाहरू",
        "youhavenewmessages": "तमखी लेखा ($2)मी $1 छ।",
        "youhavenewmessagesfromusers": "तमखी लेखा {{PLURAL:$3|प्रयोगकर्ता|$3 प्रयोगकर्तान}} ($2)बठे$1",
        "youhavenewmessagesmanyusers": "तमलाई धेरै प्रयोगकर्ताहरू($2) बठे $1 छ ।",
-       "newmessageslinkplural": "{{PLURAL:$1|à¤\8fà¤\95 à¤¨à¤¯à¤¾à¤\81 à¤°à¥\88बार|999=नयाà¤\81 रैबारहरू}}",
+       "newmessageslinkplural": "{{PLURAL:$1|à¤\8fà¤\95 à¤¨à¥\8cलà¥\8b à¤°à¥\88बार|999=नà¥\8cला रैबारहरू}}",
        "newmessagesdifflinkplural": "छाड्डीबारको {{PLURAL:$1|परिवर्तन|999=परिवर्तनहरू}}",
        "youhavenewmessagesmulti": "तमरा लागि $1 मी  नयाँ रैबारहरू छन्",
        "editsection": "सम्पादन",
        "newarticle": "(नयाँ)",
        "newarticletext": "तमले ऐलसम्म नभयाका पानाको लिंङ्क पहिल्याउनु भयाको छ।\nयो पानो बनौनाखी तल्तिरको कोष्ठमा टाइप गरिदिय ।(और जाण्णाखीलेखा [$1 help page] हेरिदिय )।\nताखाइ सुधिसार आइपुग्या हौ भण्या, ब्राउजरको  '''back''' बटन थिचिहाल ।",
        "anontalkpagetext": "----''यो कुरडी पानो अज्ञात प्रयोगकर्ताको हो जनले अहिलसम्म खाता बनायाकै छैन, अथवा जनले यै पानाको उपयोग गर्दैन।\nयस कारण हामीले उनलाई उनरो आइ पी (IP) ठेगानाले चिन्न सकन्छौ। \nयस्तो आइ पी (IP) ठेगाना धेरै प्रयोगकर्तानको साझा हुनसकन्छ ।\nयदि तमी अज्ञात प्रयोगकर्ता हौ र तमलाई अचाहिँदो टिप्पणी भयाको अनुभव गद्दा छौ भण्या भविष्यमी अन्य अज्ञात प्रयोगकर्तासँगको भ्रमबाट बाँच्न कृपया [[Special:UserLogin/signup|खाता खोल]] अथवा [[Special:UserLogin|प्रवेश गर]] ''",
-       "noarticletext": "यà¥\88 à¤²à¥\87à¤\96मि à¤\90ल à¤\95à¥\87à¤\87 à¤ªà¤¨ à¤ªà¤¾à¤  à¤¨à¤¾à¤\87थà¥\80  à¥¤\nतमलà¥\87 à¤\94र à¤ªà¥\83षà¥\8dठमि\n[[Special:Search/{{PAGENAME}}|यस à¤ªà¥\83षà¥\8dठà¤\95à¥\8b à¤¶à¥\80रà¥\8dषà¤\95à¤\95ि à¤²à¥\87à¤\96ा à¤\96à¥\8bà¤\9c]] à¤\97दà¥\8dद à¤¸à¤\95नà¥\8dà¤\9bà¥\8c à¥¤\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} à¤ªà¤¾à¤¨à¤¾ à¤¸à¤\82बà¤\82धित à¤¢à¤¡à¥\8dडामा à¤\96à¥\8bà¤\9c],\nवा [{{fullurl:{{FULLPAGENAME}}|action=edit}}  à¤¯à¥\88 à¤ªà¤¾à¤¨à¤¾à¤²à¤¾à¤\88 à¤¸à¤\82पादन à¤\97दà¥\8dय्या]</span>.",
+       "noarticletext": "यà¥\88 à¤²à¥\87à¤\96मà¥\80 à¤\85हिल à¤\95à¥\8dयà¥\88 à¤ªà¤¨ à¤ªà¤¾à¤  à¤¨à¤¾à¤\87थà¥\80  à¥¤\nतमलà¥\87 à¤\94र à¤ªà¥\83षà¥\8dठमà¥\80\n[[Special:Search/{{PAGENAME}}|यस à¤ªà¥\83षà¥\8dठà¤\95à¥\8b à¤¶à¥\80रà¥\8dषà¤\95à¤\95à¥\80 à¤²à¥\87à¤\96ा à¤\96à¥\8bà¤\9c]] à¤\97दà¥\8dद à¤¸à¤\95नà¥\8dà¤\9bà¥\8c à¥¤\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} à¤ªà¤¾à¤¨à¤¾ à¤¸à¤®à¥\8dबनà¥\8dधित à¤¢à¤¡à¥\8dडामà¥\80 à¤\96à¥\8bà¤\9c],\nवा [{{fullurl:{{FULLPAGENAME}}|action=edit}}  à¤¯à¥\88 à¤ªà¤¾à¤¨à¤¾à¤²à¤¾à¤\88 à¤¸à¤®à¥\8dपादन à¤\97द्या]</span>.",
        "noarticletext-nopermission": "यै लेखमी अहिल केइ पन पाठ नाइथी  ।\nतमले और पानामी\n[[Special:Search/{{PAGENAME}}|यै पानाको शीर्षककी लेखा खोज]] गद्द सकन्छौ ।\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} पाना सम्बन्धित ढड्डामी खोज्न],\nवा [{{fullurl:{{FULLPAGENAME}}|action=edit}}  यै पानालाई सम्पादन गद्द] सकन्छौ</span>.",
        "userinvalidcssjstitle": "<strong>चेतावनी:</strong> यहाँ कोइपनि \"$1\" नामको खोल नाइथिन् ।\nप्रचलित .css तथा .js पानाहरूले निम्नपद शीर्षक प्रयोग गद्दान्, जस्तै {{ns:user}}:Foo/Vector.css को सट्टामी {{ns:user}}:Foo/vector.css",
        "updated": "नौला",
        "searchprofile-everything": "सबै थोक",
        "searchprofile-advanced": "उन्नत",
        "searchprofile-articles-tooltip": "$1 मी खोज्या",
-       "searchprofile-images-tooltip": "फाà¤\87लहरà¥\81 à¤\96à¥\8bज्या",
+       "searchprofile-images-tooltip": "फाà¤\87लहरà¥\82 à¤\96à¥\8bà¤\9cà¥\8dज्या",
        "searchprofile-everything-tooltip": "सबै सामग्री खोज्या (वार्तालाप लै )",
        "searchprofile-advanced-tooltip": "अनुकुल नेमस्पेसमा खोज्या",
        "search-result-size": "$1 ({{PLURAL:$2|1 शब्द|$2 शब्दहरू}})",
        "right-move-rootuserpages": "मूल(root) प्रयोगकर्ताको पानाहरू साद्या",
        "right-movefile": "फाइलहरूको नाम बदल्न्या",
        "right-upload": "फाइलहरू अपलोड गर्न्या",
+       "right-reupload-shared": "साझा मिडिया भण्डारमी स्थानियरुपमी फाइलहरू अधिक्रमण गर्न्या",
        "right-writeapi": "लेखन API प्रयोग गद्य्या",
        "right-bigdelete": "लामो इतिहास भयाका पानाहरू मेट्ट्या",
        "right-deleterevision": "खुलाइयाको पानाहरू मेटाउन्या र मेटायाको रद्द गद्या",
        "right-suppressionlog": "व्यक्तिगत लगहरू हेद्या",
        "right-block": "अरु प्रयोगकर्तानलाई सम्पादन गद्दाकी ब्लक गर",
        "right-editprotected": "\"{{int:protect-level-sysop}}\" को हैसियतले सुरक्षित पानाहरू सम्पादन गद्या",
+       "right-editusercssjs": "अन्य प्रयोगकर्ताको सी.एस.एस. रे जाभास्क्रिप्ट फाइलहरू सम्पादन गद्या",
+       "right-editusercss": "अन्य प्रयोगकर्ताको सी. एस. एस. फाइलहरू सम्पादन गद्या",
        "right-edituserjs": "अरु प्रयोकर्ताका जाभास्क्रिप्ट फाइलहरू सम्पादन गर्न्या",
        "right-rollback": "पछिल्लो प्रयोगकर्ताको सम्पादनहरूलाई छरितो रुपमी पछाडि पर्काउन्या",
        "right-markbotedits": "पछाडि फर्काउन्या सम्पादनहरूलाई बोट सम्पादनकारुपमी चिनो लगाउन्या",
        "recentchanges-label-unpatrolled": "यो सम्पादन यैलसम्म गस्ती गरियाको नाइथी",
        "recentchanges-label-plusminus": "यति बाइटहरू संख्याले पानाको आकार फेरबदल  भयाको छ",
        "recentchanges-legend-heading": "'''आदर्श वाक्य:'''",
-       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|list of new pages]] यैलाई लै हेरिदिय)",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|नौला पानाको सूची]] यैलाई लै हेरिदिय)",
        "rclistfrom": "$3 $2 देखिका नयाँ परिवर्तनहरू देखाउन्या",
        "rcshowhideminor": "$1 सानतिनो सम्पादन",
        "rcshowhideminor-show": "धेकाइदिय",
        "recentchangeslinked-to": "यैको सट्टा यो पानासित जोडियाका पानानको परिवर्तन धेकाउन्या",
        "upload": "चित्र अपलोड गर",
        "uploadbtn": "फाइल अपलोड गर्न्या",
+       "upload-recreate-warning": "'''चेतावनी: त्यस नाममी रह्याका फाइलहरू सारियाको या हटायाको छ।'''\n\nयै पानाको सारियाको र हटायाको लग तमरो सहजताको लागि दियाको छ।",
        "filedesc": "सारांश:",
+       "large-file": "यो सिफारिस गर्याछकि फाइलहरूको आकार $1 भन्दा ठूला हुनु हुँदैन;\nयै फाइलको आकार $2 छ ।",
+       "uploadstash-nofiles": "तमरा कोइ पनि स्टाश गर्याका फाइलहरू नाइथिन् ।",
+       "uploadstash-refresh": "फाइलहरूको सूची ताजा गर्न्या",
        "license-header": "कोइ केइ नाइथिन",
+       "listfiles-summary": "यै खास पानाले अपलोड गर्याका सबै फाइलहरू धेकाउन्छ ।",
        "imgfile": "चित्र",
        "listfiles_count": "संस्करणहरू",
        "file-anchor-link": "फाइल",
        "nolinkstoimage": "यो चित्रसित लिंकभयाकि कोइ पाना नाइथी",
        "sharedupload-desc-here": "यो फाइल $1 बठे हो र और  परियोजनाहरू बठे पन प्रयोग गद्द सकिन्याछ । \nताखाइ यैको [$2 फ़ाइल विवरण पानो]मि रयाका विवरण तल्तिर दियाको छ।",
        "upload-disallowed-here": "तमलाई यो फाइल अधिलेखन गद्द नाइसक्का ।",
+       "filedelete-maintenance": "रखरखाव चलिरह्याको हुनाले अस्थायी रुपमी फाइलहरू मेट्ट्या र मेट्याकोलाई पुनर्बहाली गर्न निष्क्रिय गरियाकोछ।",
+       "mimesearch-summary": "MIME-प्रकार अनुसार फाइलहरू खोज्न यै पानाको प्रयोग गद्द सकिन्याछ ।\nइनपुट: फाइलको प्रकार/उपप्रकार, उदा. <code>image/jpeg</code>।",
        "randompage": "कोइ एक लेख",
        "statistics-header-pages": "पानानको तथ्याङ्क",
        "statistics-header-edits": "सम्पादनहरूको तथ्याङ्क",
        "undeletepage": "मेट्याका पानाहरू हेद्या र पूर्वरुपमी फर्काउन्या",
        "undeletehistory": "यदि कुनै पानालाई पुन: स्थापन गरायौ भण्या सम्पूर्ण संस्करणहरू इतिहासमी पुन:स्थापन हुन्याछन् ।\nयदि यै नामबठे  नयाँ पानो निर्माण भैसक्याको छ भण्या पुन: स्थापित संस्करणहरू पूर्व इतिहासको रुपमी स्थापित हुन्याछन् ।",
        "undeleterevdel": "यदि यो मल्लो पानो बणन्छ  या फाइल संस्करणहरू आंशिक मेटियाका छन् भण्या मेट्न्या काम रद्द गरिन्या छैन।\nत्यै अवस्थामी तमीले छनौटमी अन्तिम मेटियाको नयाँ संस्करण नलुकाउन्यामी चिनो लगाउनु पडन्छ ।",
+       "undeletedrevisions-files": "{{PLURAL:$1|एउटा संशोधन|$1 संशोधनहरू}} र {{PLURAL:$2|एउटा फाइल|$2 फाइलहरू}} पुनर्स्थापित गरियो",
        "undeletedfiles": "{{PLURAL:$1|१ फाइल|$1 फाइलहरू }} पूर्वस्थितिमी ल्याइयो",
        "undelete-header": "भर्खरै मेटायाका पानाहरू हेद्दाकीलाई [[Special:Log/delete|मेटायाका लग]]मी जाओ।",
        "undelete-search-prefix": "सुरुवाती शब्द अनुसार पानाहरू खोज",
        "show-big-image-preview": "यै पूर्व रुपको आकार: $1।",
        "show-big-image-other": "और {{PLURAL:$2|resolution|रिजोल्युशनहरु}}: $1।",
        "show-big-image-size": "$1 × $2 पिक्सल",
+       "newimages": "नौला फाइलहरूको ग्यालरी",
        "imagelisttext": " '''$1''' {{PLURAL:$1|फाइल|फाइलहरू}} को निम्न सुची ,क्रमवद्ध $2.",
+       "newimages-summary": "यै खास पानाले अन्तिम अपलोड गर्याका फाइलहरू धेकाउँन्छ ।",
        "days": "{{PLURAL:$1|$1 दिन|$1 दिनहरू}}",
        "metadata": "मेटाडेटा",
        "metadata-help": "यै फाइलमि अतिरिक्त जानकारीहरु छन्, यैलाई बनाउन सम्भवतः डिजिटल क्यामेरा और स्क्यानर प्रयोग गरियाको हुनसकन्छ । यदि यै फाइललाई खास अवस्थाबठे फेरबदल गरियाको हो भण्या यै फाइलले  सब्बै विवरण प्रतिबिम्बित गद्द सक्यानाइथी ।",
        "logentry-move-move": "$1 {{GENDER:$2|द्वारा}} $3 पृष्ठलाई $4 मि सारियो",
        "logentry-newusers-create": "प्रयोगकर्ता खाता $1 {{GENDER:$2|खोलियो}}",
        "logentry-upload-upload": "$1 ले $3 {{GENDER:$2|अपलोड अरेका छन्}}",
-       "searchsuggest-search": "खोज"
+       "searchsuggest-search": "खोज",
+       "api-error-duplicate": "यै साइटमी पहिलीबठे यस्तै सामग्री {{PLURAL:$1|भयाको [$2 अर्को फाइल छ]|भयाका  [$2 केहि अरु फाइलहरू छन्]}} ।",
+       "api-error-duplicate-archive": "यै साइटमी पहिलेबाट यस्तै सामग्री {{PLURAL:$1|भयाको [$2 अर्को फाइल थियो]|भयाका  [$2 केहि अरु फाइलहरू थिए]}} ।\nतर {{PLURAL:$1|यो मेट्याको थियो|यी मेटायाका थिए}} ।",
+       "api-error-duplicate-archive-popup-title": "पैल्ली  {{PLURAL:$1|मेट्याको फाइलको|मेट्याका फाइलहरूको}} नकल प्रति बनाउन्या।",
+       "api-error-duplicate-popup-title": "{{PLURAL:$1|फाइल|फाइलहरू}} नकल प्रति बनाउन्या"
 }
index 94874e4..542c387 100644 (file)
        "badsig": "Invalid raw signature.\nCheck HTML tags.",
        "badsiglength": "Your signature is too long.\nIt must not be more than $1 {{PLURAL:$1|character|characters}} long.",
        "yourgender": "How do you prefer to be described?",
-       "gender-unknown": "I prefer not to say",
+       "gender-unknown": "When mentioning you, the software will use gender neutral words whenever possible",
        "gender-male": "He edits wiki pages",
        "gender-female": "She edits wiki pages",
        "prefs-help-gender": "Setting this preference is optional.\nThe software uses its value to address you and to mention you to others using the appropriate grammatical gender.\nThis information will be public.",
index 83fe0b1..c936f7c 100644 (file)
        "expansion-depth-exceeded-warning": "La página ha sobrepasado el límite de profundidad de expansión",
        "parser-unstrip-loop-warning": "Se ha detectado un bucle en la función \"unstrip\"",
        "parser-unstrip-recursion-limit": "Se ha superado el límite de recursividad de la función \"unstrip\" ($1)",
-       "converter-manual-rule-error": "Se ha detectado un error en una regla de conversión de lenguaje manual",
+       "converter-manual-rule-error": "Se ha detectado un error en una regla manual de conversión de idioma",
        "undo-success": "Puedes deshacer la edición. Antes de deshacer la edición, comprueba la siguiente comparación para verificar que realmente es lo que quieres hacer, y entonces guarda los cambios para así efectuar la reversión.",
        "undo-failure": "No se ha podido deshacer la edición ya que otro usuario ha realizado una edición intermedia.",
        "undo-norev": "No se ha podido deshacer la edición porque no existe o ha sido borrada.",
        "badsig": "El código de tu firma no es válido; comprueba las etiquetas HTML.",
        "badsiglength": "Tu firma es muy larga.\nDebe contener un máximo de {{PLURAL:$1|un carácter|$1 caracteres}}.",
        "yourgender": "Sexo:",
-       "gender-unknown": "Prefiero no especificarlo",
+       "gender-unknown": "Al mencionarte, el software usará palabras de género neutro siempre que sea posible",
        "gender-male": "Masculino",
        "gender-female": "Femenino",
        "prefs-help-gender": "Este campo es opcional. El software lo utiliza para dirigirse a ti con el género gramatical apropiado. Esta información será pública.",
        "email": "Correo electrónico",
-       "prefs-help-realname": "El nombre real es opcional. Si lo proporcionas, se usará para dar atribución a tu trabajo.",
+       "prefs-help-realname": "El nombre real es opcional.\nSi lo proporcionas, se usará para dar atribución a tu trabajo.",
        "prefs-help-email": "La dirección de correo electrónico es opcional, pero es necesaria para el restablecimiento de tu contraseña, en caso de que la olvides.",
        "prefs-help-email-others": "También puedes permitir que otros usuarios te contacten por correo a través de un enlace en tus páginas de usuario y de discusión.\nTu dirección de correo no se revela cuando otros usuarios te contactan.",
        "prefs-help-email-required": "Es necesario proporcionar una dirección de correo electrónico.",
        "upload-proto-error": "Protocolo incorrecto",
        "upload-proto-error-text": "Para subir archivos desde otra página la URL debe comenzar por <code>http://</code> o <code>ftp://</code>.",
        "upload-file-error": "Error interno al subir el archivo",
-       "upload-file-error-text": "Ha ocurrido un error interno mientras se intentaba crear un fichero temporal en el servidor. Por favor, contacta con un [[Special:ListUsers/sysop|administrador]].",
+       "upload-file-error-text": "Ha ocurrido un error interno mientras se intentaba crear un archivo temporal en el servidor. Contacta con un [[Special:ListUsers/sysop|administrador]].",
        "upload-misc-error": "Error desconocido en la subida",
-       "upload-misc-error-text": "Ha ocurrido un error durante la subida. Por favor verifica que la URL es válida y accesible e inténtalo de nuevo. Si el problema persiste, contacta con un [[Special:ListUsers/sysop|administrador]].",
+       "upload-misc-error-text": "Ha ocurrido un error durante la subida.\nVerifica que la URL es válida y accesible e inténtalo de nuevo.\nSi el problema persiste, contacta con un [[Special:ListUsers/sysop|administrador]].",
        "upload-too-many-redirects": "La URL contenía demasiadas redirecciones",
        "upload-http-error": "Ha ocurrido un error HTTP: $1",
        "upload-copy-upload-invalid-domain": "No se pueden realizar cargas remotas desde este dominio.",
index ae1397b..084a036 100644 (file)
        "uploaddisabledtext": "Faili üleslaadimine on keelatud.",
        "php-uploaddisabledtext": "Failide üleslaadmine on PHP seadetes keelatud.\nPalun vaata <code>file_uploads</code> sätet.",
        "uploadscripted": "See fail sisaldab HTML- või skriptikoodi, mida veebilehitseja võib valesti kuvada.",
-       "upload-scripted-pi-callback": "Üles ei saa laadida faili, mis sisaldab XML-laadilehe protsessikäsku.",
+       "upload-scripted-pi-callback": "Üles ei saa laadida faili, mis sisaldab XML-laadilehe töötluskäsku.",
        "uploaded-script-svg": "Üleslaaditud SVG-failist leiti skriptitav element \"$1\".",
        "uploaded-hostile-svg": "Üleslaaditud SVG-faili laadielemendist leiti ebaturvaline CSS.",
        "uploaded-event-handler-on-svg": "Sündmuse halduse atribuutide <code>$1=\"$2\"</code> seadmine pole SVG-failis lubatud.",
index 5cf94e5..5f9f1d6 100644 (file)
        "pager-older-n": "{{PLURAL:$1|zaharragoa den 1|zaharragoak diren $1}}",
        "suppress": "Gain-ikuspena",
        "querypage-disabled": "Orrialde berezi hau desgaituta dago funtzionamendu arrazoiengatik.",
+       "apihelp": "API laguntza",
        "apihelp-no-such-module": "Ez da \"$1\" modulua aurkitu.",
        "booksources": "Iturri liburuak",
        "booksources-search-legend": "Liburuen bilaketa",
        "mediastatistics-table-mimetype": "MIME mota",
        "mediastatistics-table-count": "Fitxategi kopurua",
        "mediastatistics-header-unknown": "Ezezaguna",
+       "mediastatistics-header-bitmap": "Bit-mapako irudiak",
+       "mediastatistics-header-drawing": "Marrazkiak (irudi bektorialak)",
        "mediastatistics-header-video": "Bideoak",
        "json-error-syntax": "Sintaxi-errorea",
        "special-characters-group-latin": "Latina",
        "special-characters-group-persian": "Persiera",
        "special-characters-group-hebrew": "Hebreera",
        "special-characters-group-bangla": "Bangla",
+       "special-characters-group-tamil": "Tamil",
        "special-characters-group-telugu": "Telugu",
        "special-characters-group-sinhala": "Sinhala",
        "special-characters-group-gujarati": "Guajarati",
        "special-characters-group-thai": "Thaiera",
        "special-characters-group-lao": "Laosera",
-       "special-characters-group-khmer": "Khmerrera"
+       "special-characters-group-khmer": "Khmerrera",
+       "special-characters-title-minus": "minus zeinua"
 }
index 724162c..b5fedf5 100644 (file)
        "special-characters-group-telugu": "télougou",
        "special-characters-group-sinhala": "cingalais",
        "special-characters-group-gujarati": "gujarâtî",
-       "special-characters-group-devanagari": "Devanagari",
+       "special-characters-group-devanagari": "vanagari",
        "special-characters-group-thai": "thaï",
        "special-characters-group-lao": "laotien",
        "special-characters-group-khmer": "khmer",
-       "special-characters-title-endash": "tiret anglais",
-       "special-characters-title-emdash": "tiret em",
+       "special-characters-title-endash": "tiret demi-cadratin",
+       "special-characters-title-emdash": "tiret cadratin",
        "special-characters-title-minus": "signe moins"
 }
index 311d190..c58d94a 100644 (file)
        "ok": "Aceptar",
        "retrievedfrom": "Traído desde \"$1\"",
        "youhavenewmessages": "{{PLURAL:$3|Ten}} $1 ($2).",
-       "youhavenewmessagesfromusers": "{{PLURAL:$4|Ten} $1 {{PLURAL:$3|doutro usuario|de $3 usuarios}} ($2).",
+       "youhavenewmessagesfromusers": "{{PLURAL:$4|Ten}} $1 {{PLURAL:$3|doutro usuario|de $3 usuarios}} ($2).",
        "youhavenewmessagesmanyusers": "Ten $1 de moitos usuarios ($2).",
        "newmessageslinkplural": "{{PLURAL:$1|unha mensaxe nova|999=mensaxes novas}}",
        "newmessagesdifflinkplural": "{{PLURAL:$1|última modificación|999=últimas modificacións}}",
        "badsig": "Sinatura non válida; comprobe o código HTML utilizado.",
        "badsiglength": "A súa sinatura é demasiado longa.\nHa de ter menos {{PLURAL:$1|dun carácter|de $1 caracteres}}.",
        "yourgender": "Cal das seguintes oracións referidas a vostede é a máis axeitada?",
-       "gender-unknown": "Prefiro non indicalo",
+       "gender-unknown": "Ao mencionarlle, o software empregará verbas de xénero neutral sempre que sexa posible",
        "gender-male": "El edita as páxinas do wiki",
        "gender-female": "Ela edita as páxinas do wiki",
        "prefs-help-gender": "Definir esta preferencia é opcional.\nO software usa este valor para dirixirse á súa persoa e para facerlle mencións mediante o xénero gramatical axeitado.\nEsta información será pública.",
        "recentchangeslinked-page": "Nome da páxina:",
        "recentchangeslinked-to": "Mostrar os cambios relacionados das páxinas que ligan coa dada",
        "upload": "Subir un ficheiro",
-       "uploadbtn": "Subir o ficheiro",
+       "uploadbtn": "Subir un ficheiro",
        "reuploaddesc": "Cancelar a carga e volver ao formulario de carga",
        "upload-tryagain": "Enviar a descrición do ficheiro modificada",
        "uploadnologin": "Non accedeu ao sistema",
index bdd92b3..d7a1ab7 100644 (file)
@@ -96,6 +96,7 @@
        "actions": "Karvaio",
        "namespaces": "Nanv-thollam",
        "variants": "Dusre",
+       "navigation-heading": "Dixa-niontron suchi",
        "errorpagetitle": "Chuk",
        "returnto": "$1 hanga porot voch.",
        "tagline": "{{SITENAME}} savn",
        "permalink": "Togpi zodd",
        "print": "Chap",
        "view": "Poloi",
-       "edit": "Sudar",
+       "view-foreign": "$1-hacher polloi",
+       "edit": "Bodol",
        "create": "Roch",
+       "create-local": "Thollavem vornon zod",
        "editthispage": "Hem pan bodol",
        "create-this-page": "Ho pan roch",
        "delete": "Vogllai",
        "otherlanguages": "Dusrea bhasanim",
        "redirectedfrom": "($1 savn porot dixent)",
        "redirectpagesub": "Punornirdexan pan",
+       "redirectto": "Hanga ponornirdeshit kor:",
        "lastmodifiedat": "Hem pan xevtim $1 disa, $2 vazta bodolelem.",
        "jumpto": "Hangachean voch",
        "jumptonavigation": "Dixa-niontronn",
        "copyrightpage": "{{ns:project}}:Prat-hokk",
        "currentevents": "Chalu ghoddnneo",
        "currentevents-url": "Project:Chalu ghoddneo",
-       "disclaimers": "Chotraio",
-       "disclaimerpage": "Project:Sadeo chotraio",
-       "edithelp": "Sudarunk palov",
+       "disclaimers": "Nhoikarnio",
+       "disclaimerpage": "Project:Sadeo nhoikarnio",
+       "edithelp": "Bodlunk adar",
        "mainpage": "Mukhel Pan",
        "mainpage-description": "Mukhel Pan",
        "portal": "Somudaik proves-dar",
        "ok": "Zait",
        "retrievedfrom": "\"$1\" savn prapt kelam",
        "youhavenewmessages": "Tumkam $1 ($2) asat.",
-       "editsection": "sudar",
-       "editold": "sudar",
+       "editsection": "bodol",
+       "editold": "bodol",
        "viewsourceold": "mull poloi",
-       "editlink": "sudar",
+       "editlink": "bodol",
        "viewsourcelink": "mull polloi",
-       "editsectionhint": "khondd sudar: $1",
+       "editsectionhint": "Khond bodol: $1",
        "toc": "Suchi potr",
        "showtoc": "dakhoi",
        "hidetoc": "lipoi",
        "viewsource": "Mull polloi",
        "welcomeuser": "Ievkar, $1!",
        "yourname": "Vapuddpeachem nanv:",
+       "userlogin-yourname": "Vangdiachem nanv",
+       "userlogin-yourname-ph": "Tujem 'vangdeachem nanv' boroi",
        "yourpassword": "Gupitutor:",
        "userlogin-yourpassword": "Gupitutor",
+       "userlogin-yourpassword-ph": "Tujem gupitutor boroi",
+       "createacct-yourpassword-ph": "Gupitutor boroi",
        "yourpasswordagain": "Gupit utor porot boroi:",
+       "createacct-yourpasswordagain": "Gupitutrachi khatri kor",
+       "createacct-yourpasswordagain-ph": "Gupitutor porot boroi",
        "remembermypassword": "Hea internet browseran mhojem sotrachem ugdas dovor (chodan chod $1 {{PLURAL:$1|disak|disank}})",
-       "login": "Sotrromb kor",
-       "nav-login-createaccount": "Sotrrombh kor / khato roch",
+       "userlogin-remembermypassword": "Mhojem sotr chalu dovor",
+       "login": "Sotroromb kor",
+       "nav-login-createaccount": "Sotrrombh kor / khatem roch",
        "userlogin": "Sotrrombh kor / khatem roch",
        "logout": "Bhair podd",
        "userlogout": "Sotracho xevott",
+       "userlogin-noaccount": "Tuje kode khatem na?",
+       "userlogin-joinproject": "{{SITENAME}}-hacho vangdi za",
        "nologin": "Tuje kodde khatem na? $1.",
        "nologinlink": "Novem khatem ughodd",
        "createaccount": "Khatem roch",
        "gotaccount": "Tuje kodem khatem asa? $1.",
        "gotaccountlink": "Sotrorombh kor",
        "userlogin-resetlink": "Sotrorombh korpacheo bariksai visorlai?",
+       "userlogin-resetpassword-link": "Gupitutor visorlo?",
+       "userlogin-helplink2": "Sotrorombh korunk adar",
+       "createacct-emailoptional": "Email potto (sokti na)",
+       "createacct-email-ph": "Tuzo email potto boroi",
+       "createacct-captcha": "Suraksha topasni",
+       "createacct-imgcaptcha-ph": "Voir dixta to mozkur boroi",
+       "createacct-submit": "Tujem khatem roch",
+       "createacct-benefit-heading": "{{SITENAME}} tujea bhaxen lokani kel'la",
+       "createacct-benefit-body1": "{{PLURAL:$1|bodlop|bodlopam}}",
+       "createacct-benefit-body2": "{{PLURAL:$1|pan|panam}}",
+       "createacct-benefit-body3": "halincheo {{PLURAL:$1|yogdan diupi}}",
        "mailmypassword": "Novem gupitutor",
        "loginlanguagelabel": "Bhas: $1",
+       "pt-login": "Sotrorombh kor",
+       "pt-login-button": "Sotrorombh kor",
+       "pt-createaccount": "Khatem roch",
+       "pt-userlogout": "Sotracho xevott",
+       "passwordreset": "Novem gupitutor",
        "bold_sample": "Datt mozkur",
        "bold_tip": "Datt mozkur",
        "italic_sample": "Palso mozkur",
        "hr_tip": "Adhvem rang (Komi uzar kor)",
        "summary": "Sar:",
        "subject": "Vishoy:",
-       "minoredit": "Hem ek dhaktem sudarop",
+       "minoredit": "Hem ek dhaktem bodol",
        "watchthis": "Hea panar nodor dovor",
        "savearticle": "Pan samball",
        "preview": "Zholok",
        "showpreview": "Zholok dakhoi",
        "showdiff": "Bodolpam dakhoi",
-       "anoneditwarning": "'''Chotrai:''' Tuven sotrorombh korunk nai.\nTuzo internet potteachi nond panachem itihasan zatelem.",
+       "anoneditwarning": "<strong>Chotrai:</strong> Tuven sotrorombh korunk nai. Tu bodlopam korit zalear tuzo internet potto soglleank polleunk zatelem. Tu <strong>[$1 sotrorombh korit]</strong> vo <strong>[$2 kont rochit]</strong> zalear, tujeo bodlopam tuzo vagddiachem nanvak zoddteleo ani anik-ui faide asat.",
+       "loginreqlink": "sotrorombh kor",
        "newarticle": "(Novem)",
        "newarticletext": "Tuven ek zoddache patlav kelai, zachem pan azun rochunk na.\nPan rochunk, khallchea chovkottan boroi (anik mahitik [$1 adar pan] polloi).\nTu hangasor chukin pavlai zalear tujea internet browser-achi '''Fatim'' vo '''Back''' butao dab.",
        "noarticletext": "Sodheak hem pan rinte asa.\nTujean dusrea panani [[Special:Search/{{PAGENAME}}|hea panache nanv sodunk zata]], <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} sombondhi sotrani sodunk zata], vo [{{fullurl:{{FULLPAGENAME}}|action=edit}} hem pan sudharunk zata]</span>.",
        "noarticletext-nopermission": "Sodheak hem pan rinte asa.\nTujean dusrea panani [[Special:Search/{{PAGENAME}}|hea panache nanv sodunk zata]], vo <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} sombondhi sotrani sodunk zata], pun tuka hem pan rochunk porvangi na.",
        "previewnote": "'''Hi fokot ek zholok mhonn ugddas dhor.'''\nTujim bodolpam azun sambhallun dovrunk nant!",
-       "editing": "$1 sudarop",
-       "editingsection": "(Vibhag) $1 sudar",
+       "editing": "$1 bodolta",
+       "creating": "$1 rochta",
+       "editingsection": "(Khond) $1 sudar",
        "templatesused": "Hea panant uzar {{PLURAL:$1|kel'lo sancho|kel'le sanche}}:",
        "template-protected": "(rakhlelem)",
        "template-semiprotected": "(ordhem rakhun dovorlelem)",
        "revdel-restore": "Disnnem bodol",
        "revertmerge": "Doxim kor",
        "history-title": "\"$1\" hachea uzollnnecho itihas",
+       "difference-title": "\"$1\"-chea avruttint ontor",
        "lineno": "Line ank $1:",
        "compareselectedversions": "Nivodloleo uzollneo comparar kor",
        "editundo": "rod'd kor",
+       "diff-multi-sameuser": "(Heach vangdian {{PLURAL:$1|kel'lo modlo ek bodlop dakhounk na|kel'le modle $1 bodlopam dakhounk nan}})",
        "searchresults": "Sodacho nikal",
        "searchresults-title": "\"$1\" -khatir sodacho nikal",
        "prevn": "adlem {{PLURAL:$1|$1}}",
        "search-suggest": "mhonnunk sodi: $1",
        "searchrelated": "sombondit",
        "searchall": "soglle",
+       "search-showingresults": "{{PLURAL:$4|<strong>$3</strong> modlean <strong>$1</strong> porinam|<strong>$3</strong> modlean porinam <strong>$1 - $2</strong>}}",
        "search-nonefound": "Tujea sodak mell khata toslem kai porinam nan.",
        "preferences": "Posondeo",
        "mypreferences": "Posonti",
        "prefs-help-email": "Email potto sokticho na, pun tum gupitutor visroxi zalear gupitutor punorsthapon korunk email pottechi goroz podta.",
        "prefs-help-email-others": "Tujean dusreank tujea vapurpeacho panar vo bhasabhasache panar aslele eke email zodde vorvim tuje xim sompork korunk diunk zata.\nDusre tuje xim sompork kortat tednam tuzo email potto tankam kollchenam.",
        "group-all": "(soglle)",
+       "right-writeapi": "Borovpeache API-cho upeog",
        "newuserlogpage": "Vapurpi rochnnechem sotr",
        "action-edit": "hem pan sudar",
        "nchanges": "$1 {{PLURAL:$1|bodlop|bodlopam}}",
+       "enhancedrc-history": "itihas",
        "recentchanges": "Halincho bodol",
        "recentchanges-legend": "Hallinch zalleo bodlopancheo poryay",
+       "recentchanges-summary": "Hea wikicher halinch zal'le bodlopancher nodor dovor.",
        "recentchanges-feed-description": "Wiki'k kel'le halinche bodlopancher hea vhawa vorvim nodor dovor.",
-       "recentchanges-label-newpage": "Hea sudaran ek novem pan rochlam",
-       "recentchanges-label-minor": "Ho ek dhaktto sudar",
+       "recentchanges-label-newpage": "Hea bodlopan ek novem pan rochlam",
+       "recentchanges-label-minor": "Ho ek dhaktto bodlop",
        "recentchanges-label-bot": "Hem bodlop eka robotan kel'lem",
        "recentchanges-label-unpatrolled": "Hem sudharop azun topasunk nam",
-       "rcnotefrom": "Sokoil <strong>$2<strong> savn zalelim bodolpam dileant ( <strong>$1<strong> meren dakhoileant).",
+       "recentchanges-label-plusminus": "Hea panacho akar itlea baitani bodollo",
+       "recentchanges-legend-heading": "\"Kunji:\"",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|nove pananchi suchi]]-ui polloi)",
+       "rcnotefrom": "Sokoil <strong>$3, $4<strong> savnsavn {{PLURAL:$5|zalelem bodlop dilam|zalelim bodolpam dileant}} (<strong>$1<strong> meren {{PLURAL:$5|dakhoilam|dakhoileant}}).",
        "rclistfrom": "$3 $2 savn suru zatelim novim bodolpam dakhoi",
-       "rcshowhideminor": "$1 dhaktteo sudarnneo",
+       "rcshowhideminor": "$1 dhaktteo bodlopam",
+       "rcshowhideminor-show": "Dakhoi",
+       "rcshowhideminor-hide": "Lipoi",
        "rcshowhidebots": "$1 robot",
+       "rcshowhidebots-show": "Dakhoi",
+       "rcshowhidebots-hide": "Lipoi",
        "rcshowhideliu": "$1 nond zalele vapuddpi",
+       "rcshowhideliu-hide": "Lipoi",
        "rcshowhideanons": "$1 nanv-naslelim vapurpi",
+       "rcshowhideanons-show": "Dakhoi",
+       "rcshowhideanons-hide": "Lipoi",
        "rcshowhidepatr": "$1 topaslele sudharop",
-       "rcshowhidemine": "Mhojem sudarop $1",
+       "rcshowhidemine": "Mhojeo bodlopam $1",
+       "rcshowhidemine-show": "Dakhoi",
+       "rcshowhidemine-hide": "Lipoi",
        "rclinks": "Xevtiche $2 disanim zal'le $1 bodlopam dakhoi<br />$3",
        "diff": "frk",
        "hist": "iti",
        "minoreditletter": "d",
        "newpageletter": "N",
        "boteditletter": "r",
+       "rc-change-size-new": "$1 {{PLURAL:$1|byte|byti}} bodol kel'lea uprant",
        "rc-enhanced-expand": "Bariksann dakhoi",
        "rc-enhanced-hide": "Bariksann lipoi",
        "recentchangeslinked": "Sombondit bodolpam",
        "watchthisupload": "Hea faylar dixtt dovor",
        "license": "Porvangi",
        "license-header": "Porvangi",
+       "imgfile": "fail",
        "file-anchor-link": "Fail",
        "filehist": "Failicho itihas",
-       "filehist-help": " Tea vellar aslelea rupan pollonvk tarikh/vellar koll mar",
+       "filehist-help": "Tea vellar aslelea rupan pollonvk tarikh/vellar click kor",
        "filehist-revert": "Nimanea avruttik porot vor",
        "filehist-current": "chalont",
        "filehist-datetime": "Tarikh/Vell",
        "linkstoimage": "{{PLURAL:$1|Hem pan|$1 Him panam}} hea failik {{PLURAL:$1|zoddtta|zoddttat}}",
        "nolinkstoimage": "Hea failik zoddpi panam nant",
        "sharedupload-desc-here": "Hi fail $1, hachi ani dusreo projectanim haka uzar korunk zata.\nHachem [$2 failichem vivron panan] asleli vivron khala dilea:",
+       "upload-disallowed-here": "Tu hea faili voir borounk xokonai",
        "filedelete-otherreason": "Dusrem/aniki karon:",
        "randompage": "Khoincheim pan",
        "statistics": "Ankddevari",
        "pager-older-n": "{{PLURAL:$1|adlem 1|adlim $1}}",
        "booksources": "Pustokachem mull",
        "booksources-search-legend": "Pustokachim mullam sod",
+       "booksources-search": "Sod",
        "speciallogtitlelabel": "Vishoi vo vapurpi:",
        "log": "Sotram",
        "allpages": "Sogllim panam",
        "dellogpage": "Vogllaoneche sotr",
        "deleteotherreason": "Dusrem/aniki karon:",
        "rollbacklink": "kovoll",
+       "rollbacklinkcount": "$1 {{PLURAL:$1|bodlop|bodlopam}} kovoll",
        "protectlogpage": "Surokxitechem sotr",
        "protectedarticle": "rakhlelem \"[[$1]]\"",
        "protect-otherreason": "Dusrem/aniki karon:",
        "undeleteviewlink": "polloi",
        "namespace": "Nanv-tholl",
        "invert": "Nonddni urfattoi",
+       "tooltip-invert": "Vinchlele nanvtholla (ani khunnailam zalear sombondhit nanvtholla) bhitorlea pananim kel'le bodlopam lipounk hem boks khunnai",
+       "namespace_association": "Sombondhit nanvtholl",
+       "tooltip-namespace_association": "Vinchlele nanvthollache sombondhit bhasabhas vo vixoiacho nanvthollakui gheupak hem boks khunnai",
        "blanknamespace": "(Mukhel)",
        "contributions": "{{GENDER:$1|Vapuddpi}} borovpam",
        "contributions-title": "$1 hea vapuddpean kelelim borovpam",
        "tooltip-pt-preferences": "Tumcheo avddi",
        "tooltip-pt-watchlist": "Bodlachea dekhrekh korpachea panachi volleri",
        "tooltip-pt-mycontris": "Tujea borovpanchi suchi",
-       "tooltip-pt-login": "Tumkam sotrrombh korunk protsavan asa; em soktichem nhoi",
+       "tooltip-pt-login": "Tumkam sotrormbh korunk protsavan asa; em soktichem nhoi",
        "tooltip-pt-logout": "Sotracho xevott",
+       "tooltip-pt-createaccount": "Sotrorombh kelear borem; pun toxi sokti nam",
        "tooltip-ca-talk": "Mozkurachea vixoiavoir bhasabhas",
-       "tooltip-ca-edit": "Tumchean hem pan sudarunk zata. Upkar korun sambhallche adim zholok butanv vapor",
+       "tooltip-ca-edit": "Tumchean hem pan bodlunk zata. Upkar korun sambhallche adim zholok butanv vapor",
        "tooltip-ca-addsection": "Novo vibhag suru kor",
        "tooltip-ca-viewsource": "Hem pan rakhun dovorlam.\nTujean tachem mull pollonv ieta",
        "tooltip-ca-history": "Hea panacheo adleo uzollnneo",
        "tooltip-n-currentevents": "Chalu ghoddneachea fattbhuichi mahiti sod",
        "tooltip-n-recentchanges": "Wikint halinch bodol keleleachi volleri",
        "tooltip-n-randompage": "Khoincheim ek pan uktem kor",
-       "tooltip-n-help": "sodpachem tholl",
+       "tooltip-n-help": "Sodpachem tholl",
        "tooltip-t-whatlinkshere": "Hanga zoddlelea sogllea wiki pananchi volleri",
        "tooltip-t-recentchangeslinked": "Hea panak zoddlelea panachim halinchim bodolpam",
        "tooltip-feed-atom": "Hea panak Atom purovnni",
        "tooltip-t-permalink": "Hea panache uzollnnek togpi zodd",
        "tooltip-ca-nstab-main": "Suchi pan polloi",
        "tooltip-ca-nstab-user": "Vapuddpeachem pan polloi",
-       "tooltip-ca-nstab-special": "Hem ek kherit pan, tujeam hem pan sudarunk zaina",
+       "tooltip-ca-nstab-special": "Hem ek kherit pan, tujeam hem pan bodlunk zaina",
        "tooltip-ca-nstab-project": "Project-achem pan polloi",
        "tooltip-ca-nstab-image": "Failichem pan polloi",
        "tooltip-ca-nstab-template": "Saacho polloi",
        "tooltip-rollback": "\"Kovllop\" hea panachea xevttachea borovpa kodde kea kollant portota.",
        "tooltip-undo": "\"Rodd' kor\" sudharop portita ani sudharopak Zholok ritin ukodta. Tem saran karon zoddunk dita.",
        "tooltip-summary": "Mottvo sar ghal",
+       "simpleantispam-label": "Spam-virudh topasni.\nHem bhori <strong>NAKAI</strong>",
        "pageinfo-toolboxlink": "Panachi mahiti",
-       "previousdiff": "←  Adlo sudar",
+       "previousdiff": "←  Adlo bodlop",
        "nextdiff": "Fuddlem bodlop →",
        "file-info-size": "$1 × $2 pixelam, failicho akar: $3, MIME prokar: $4",
        "file-nohires": "Odhik bariksai na.",
        "svg-long-desc": "SVG fail, nanvak $1 × $2 pixeli, failcho akar: $3",
        "show-big-image": "Mull fail",
+       "show-big-image-preview": "Hea dakhovnicho akar: $1",
+       "show-big-image-other": "Her {{PLURAL:$2|bariksai}}: $1.",
+       "show-big-image-size": "$1 × $2 piksel",
        "bad_image_list": "Akar oso asa:\n\nFokot suchicheo vostu (*-chean suru zateleo) dheanant ghevcheo\nTech vollir, uprantli zoddnni opvad dhorpant ieta,mhonnche zoim pana failichea ek vollint asunk xoktat.",
        "metadata": "Metadata",
        "metadata-help": "Hea failin anikui mahiti asa, hi fail korunk uzar kel'le digital camera vo scanner sun tem aila zait.\nZori tor hi failik bodol'lam zalear kai mahiti bodololem failik sarkem mell khaina zait.",
        "metadata-fields": "Metadata chovkott konsollttoch, hea sondexant metadata molleantlea murtipanachea dakhovnnent aspav astolo.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
+       "exif-orientation": "Obhivinyas",
+       "exif-xresolution": "Advem bariksai",
+       "exif-yresolution": "Ubem bariksai",
+       "exif-datetime": "Failichem bodolpachem tarikh ani vell",
+       "exif-make": "Camera utpadok",
+       "exif-model": "Cameracho modelacho ank",
+       "exif-software": "Vapurlelo software",
+       "exif-exifversion": "Exif-achi avrutti",
+       "exif-colorspace": "Rongacho zago",
+       "exif-datetimeoriginal": "Mahiti-nirmitichi tarikh ani vell",
+       "exif-datetimedigitized": "Fail rochpachem tarikh ani vell",
+       "exif-orientation-1": "Samanya",
        "namespacesall": "sogllem",
        "monthsall": "sogllem",
        "watchlisttools-view": "Sombondhi bodlopam polloi",
        "watchlisttools-edit": "Sadurvolleri polloi ani sudar",
        "watchlisttools-raw": "Sadurvollerichi mull-an bodol kor",
+       "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|uloi]])",
        "duplicate-defaultsort": "'''Chotrai:''' Falta anukraman mukhel ''$2'' rodd korta adhlem falta anukraman mukhel ''$1'', haka.",
        "specialpages": "Khaxelim Panam",
        "external_image_whitelist": " #Hi voll asa toxich dovor<pre>\n#Khala sodpache sache (''regular expressions'') ghal (fokot // modem voita poi tem bhag)\n#Hanche borobor bhaile zodlele murt comparar kel'le zatele\n#Mell khatat tim murt koxeo distele, na zalear fokot mortek ek zodd distele\n#Jeo voll #-an suru zatele tem vivek mhunn manlele zatele\n#Hanga vhodle and dhakte okxora modem forok podona\n\n#Soglle sodpache sache hea volla voir ghal. Hi voll asa toxich dovor</pre>",
        "tag-filter": "[[Special:Tags|Dospi]] challni:",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Khunoptako|Khunoptake}}]]: $2)",
+       "logentry-delete-delete": "$1-an {{GENDER:$2|kadun udoile}} pan $3",
+       "logentry-move-move": "$1{{GENDER:$2|-an}} $3 panak $4 haloilea",
+       "logentry-newusers-create": "Vapurpeacho kont $1 {{GENDER:$2|rochlam}}",
+       "logentry-upload-upload": "$1-an $3 {{GENDER:$2|upload kela}}",
        "searchsuggest-search": "Sod"
 }
index 84ba22c..8dd1977 100644 (file)
        "badsig": "અવૈધ કાચી સહી\nHTML નાકું ચકાસો",
        "badsiglength": "તમારી સહી વધુ પડતી લાંબી છે.\nતે $1 {{PLURAL:$1|અક્ષર|અક્ષરો}} કરતા વધુ લાંબી ન હોવી જોઇએ.",
        "yourgender": "તમે કેવી રીતે ઓળખાવવાનું પસંદ કરો છો?",
-       "gender-unknown": "હà«\81àª\82 àªµàª¿àª\97તà«\8b àª¨ àª\86પવાનà«\81àª\82 àªªàª¸àª\82દ àª\95રà«\81àª\82 àª\9bà«\81àª\82",
+       "gender-unknown": "તમારà«\8b àª\89લà«\8dલà«\87àª\96 àª\95રતà«\80 àªµàª\96તà«\87, àª¶àª\95à«\8dય àª¹àª¶à«\87 àª¤à«\8dયાàª\82 àª¸à«\89ફà«\8dàª\9fવà«\85ર àª²àª¿àª\82àª\97 àª¤àª\9fસà«\8dથ àª¶àª¬à«\8dદà«\8bનà«\8b àªªà«\8dરયà«\8bàª\97 àª\95રશà«\87.",
        "gender-male": "તેણે વિકિ પાનાંઓમાં ફેરફાર કર્યા",
        "gender-female": "તેણીએ વિકિ પાનાંઓમાં ફેરફાર કર્યા",
        "prefs-help-gender": "આ પસંદગી ગોઠવવી વૈકલ્પિક છે.  \nસોફ્ટવેર આ વિગત આપને વ્યાકરણની રીતે લિંગ ઓળખ દ્વારા સંબોધવા માટે વાપરશે.\nઆ માહિતી જન સમુદાય માટે જાહેર હશે.",
        "userrights-lookup-user": "સભ્ય સમુહો નું પ્રબંધન કરો",
        "userrights-user-editname": "સભ્યનામ દાખલ કરો:",
        "editusergroup": "સભ્ય સમુહો સંપાદીત કરો",
-       "editinguser": "સભ્ય '''[[User:$1|$1]]''' ના વપરાશકર્તા અધિકારો બદલો $2",
+       "editinguser": "{{GENDER:$1|સભ્ય}} <strong>[[User:$1|$1]]</strong> ના વપરાશકર્તા અધિકારો બદલો $2",
        "userrights-editusergroup": "સભ્ય સમુહો સંપાદીત કરો",
        "saveusergroups": "સભ્ય સમુહો સાચવો",
        "userrights-groupsmember": "સભ્યપદ:",
        "wantedtemplates": "ઇચ્છિત ઢાંચા",
        "mostlinked": "સૌથી વધુ કડીઓ દ્વારા જોડાયેલ પાનું",
        "mostlinkedcategories": "સૌથી વધુ શ્રેણીઓ દ્વારા જોડાયેલ પાનું",
-       "mostlinkedtemplates": "સૌથી વધુ જોડાયેલ પાનાંઓ",
+       "mostlinkedtemplates": "સૌથી વધુ જોડાયેલાં પાનાંઓ",
        "mostcategories": "સૌથી વધુ શ્રેણીઓ ધરાવતાં પાનાં",
        "mostimages": "સૌથી વધુ કડીઓ દ્વારા જોડાયેલી ફાઇલ",
        "mostinterwikis": "સૌથી વધુ આંતરવિકી કડીઓ ધરાવતાં પાના",
        "tooltip-ca-talk": "અનુક્રમણિકાનાં પાના વિષે ચર્ચા",
        "tooltip-ca-edit": "આપ આ પાનામાં ફેરફાર કરી શકો છો, કાર્ય સુરક્ષિત કરતાં પહેલાં 'ઝલક' બટન ઉપર ક્લિક કરીને જોઇ લેશો",
        "tooltip-ca-addsection": "નવો વિભાગ ઉમેરો",
-       "tooltip-ca-viewsource": "àª\86 àªªàª¾àª¨à«\81 àª¸à«\81રàª\95à«\8dષિત àª\9bà«\87.\nતમà«\87 àª¤à«\87નà«\8b àª¸à«\8dતà«\8dરà«\8bત àª\9cà«\8bàª\87 àª¶àª\95à«\8b àª\9bà«\8b",
+       "tooltip-ca-viewsource": "આ પાનુ સુરક્ષિત છે.\nતમે તેનો સ્રોત જોઇ શકો છો",
        "tooltip-ca-history": "આ પાનાનાં અગાઉનાં ફેરફારો",
        "tooltip-ca-protect": "આ પાનું સુરક્ષિત કરો",
        "tooltip-ca-unprotect": "આ પાનું રક્ષણ બદલો",
index 9ae1e44..8b71a64 100644 (file)
        "badsig": "חתימה מסוגננת שגויה.\nנא לבדוק את תגיות ה־HTML.",
        "badsiglength": "חתימתך ארוכה מדי.\nאורך החתימה המרבי הוא {{PLURAL:$1|תו אחד|$1 תווים}}.",
        "yourgender": "איזה תיאור מתאים לך?",
-       "gender-unknown": "×\90×\99× ×\99 ×¨×\95צ×\94 ×\9c×\95×\9eר",
+       "gender-unknown": "×\91×\90×\96×\9b×\95ר×\99×\9d ×©×\9c×\9a ×\91×\9e×\9eשק, ×\94×\9eער×\9bת ×ª×©×ª×\9eש ×\91×\9e×\99×\93ת ×\94×\90פשר ×\91×\9cש×\95×\9f ×©×\90×\99× ×\94 ×ª×\9c×\95×\99ת־×\9e×\92×\93ר",
        "gender-male": "הוא עורך דפים בוויקי",
        "gender-female": "היא עורכת דפים בוויקי",
        "prefs-help-gender": "אין חובה למלא העדפה זו.\nהמערכת משתמשת במידע זה כדי לפנות אליך/אלייך ולציין את שם המשתמש שלך במין הדקדוקי הנכון.\nהמידע יהיה ציבורי.",
index 630adae..41493fe 100644 (file)
        "badsig": "गलत कच्चा हस्ताक्षर।\nHTML टैग की जाँच करें।",
        "badsiglength": "यह हस्ताक्षर बहुत बड़ा है।\nयह $1 {{PLURAL:$1|कैरैक्टर}} से अधिक का नहीं होना चाहिए।",
        "yourgender": "आप स्वयं को कैसे वर्णित करना चाहेंगे?",
-       "gender-unknown": "मà¥\88à¤\82 à¤µà¤°à¥\8dणन à¤¨à¤¹à¥\80à¤\82 à¤\95रना à¤\9aाहà¥\82à¤\81गा",
+       "gender-unknown": "à¤\86पà¤\95ा à¤µà¤°à¥\8dणन à¤\95रतà¥\87 à¤¸à¤®à¤¯, à¤\9cहाà¤\81 à¤¤à¤\95 à¤¸à¤®à¥\8dभव à¤¹à¥\8bà¤\97ा à¤¸à¥\89फ़à¥\8dà¤\9fवà¥\87यर à¤²à¤¿à¤\82à¤\97 à¤¤à¤\9fसà¥\8dथ à¤¶à¤¬à¥\8dदà¥\8bà¤\82 à¤\95ा à¤ªà¥\8dरयà¥\8bà¤\97 à¤\95रà¥\87गा",
        "gender-male": "मैं सम्पादन करता हूँ।",
        "gender-female": "मैं सम्पादन करती हूँ।",
        "prefs-help-gender": "यह जानकारी देना वैकल्पिक है।\nयह सॉफ़्टवेयर में लिंग के आधार पर आपके लिए सही संबोधन हेतु प्रयुक्त होता है।\nयह जानकारी सार्वजनिक होगी।",
        "uploaded-script-svg": "अपलोड की गयी एसवीजी फ़ाइल में स्क्रीप्ट अवयव \"$1\" पाया गया।",
        "uploaded-hostile-svg": "अपलोड की गयी एसवीजी फाइल के शैली अवयव में असुरक्षित सीएसएस पायी गयी।",
        "uploaded-event-handler-on-svg": "सेटिंग ईवेंट हैंडलर (आयोजन प्रबन्धनकर्ता वरियता) <code>$1=\"$2\"</code> एसवीजी फ़ाइल में अनुमत नहीं है।",
-       "uploaded-href-attribute-svg": "गैर-स्थानीय लक्ष्य के साथ एचआरईऍफ श्रेय (Href attributes) <code>&lt;$1 $2=\"$3\"&gt;</code> (उदाहरण के लिए http://, जावास्क्रीप्ट:, इत्यादि) एसवीजी फाइल में अनुमत नहीं हैं।",
+       "uploaded-href-attribute-svg": "गैर-स्थानीय लक्ष्य के साथ एचआरईऍफ श्रेय (href attributes) <code>&lt;$1 $2=\"$3\"&gt;</code> (उदाहरण के लिए http://, जावास्क्रीप्ट:, इत्यादि) एसवीजी फाइल में अनुमत नहीं हैं।",
        "uploaded-href-unsafe-target-svg": "अपलोड की गयी फ़ाइल में असुरक्षित लक्ष्य <code>&lt;$1 $2=\"$3\"&gt;</code> पाये गए।",
        "uploaded-animate-svg": "चिप्पि \"animate\" पायी गई जिससे href परिवर्तित हो सकता है, अपलोड की गयी फ़ाइल में \"from\" विशेषता <code>&lt;$1 $2=\"$3\"&gt;</code> काम में ली जा रही है।",
        "uploadscriptednamespace": "इस एस॰वी॰जी फ़ाइल में अमान्य नामस्थान \"$1\" है।",
        "unusedimages": "अप्रयुक्त फ़ाइलें",
        "wantedcategories": "वांछित श्रेणियाँ",
        "wantedpages": "जो पृष्ठ चाहिये",
-       "wantedpages-summary": "जिसअनुपस्थित पृष्ठों की सूचीमें उनसे जुड़े अधिकांश कड़ियाँ हैं सिवाय उन पृष्ठों के जिनमें केवल अनुप्रेषित कड़ियाँ जुड़ती हों। अनुपस्थित पृष्ठों की सूची के लिए जिनमें केवल अनुप्रेषित कड़ियाँ जुड़ती हों, देखिए [[{{#special:BrokenRedirects}}]]।",
+       "wantedpages-summary": "जिसअनुपस्थित पृष्ठों की सूचीमें उनसे जुड़े अधिकांश कड़ियाँ हैं सिवाय उन पृष्ठों के जिनमें केवल अनुप्रेषित कड़ियाँ जुड़ती हों। अनुपस्थित पृष्ठों की सूची के लिए जिनमें केवल अनुप्रेषित कड़ियाँ जुड़ती हों, [[{{#special:BrokenRedirects}}|टूटे हुये पुनर्निर्देशों की सूची]] देखें।",
        "wantedpages-badtitle": "परिणामों में अवैध शीर्षक: $1",
        "wantedfiles": "वांछित फ़ाइलें",
        "wantedfiletext-cat": "निम्न फ़ाइलें प्रयुक्त हैं पर मौजूद नहीं हैं। बाहरी भंडारों की फ़ाइलें मौजूद होने के बावजूद सूची में हो सकती हैं। ऐसी कोई भी गलत प्रविष्टियाँ <del>काटी हुई</del> होंगी। साथ ही, जो पृष्ठ ऐसी फ़ाइलों का प्रयोग करते हैं जो मौजूद नहीं हैं, उनकी सूची [[:$1]] में है।",
index 2118f89..de47187 100644 (file)
@@ -61,7 +61,7 @@
        "sunday": "Domingo",
        "monday": "Lunes",
        "tuesday": "Martes",
-       "wednesday": "Miyerkoles",
+       "wednesday": "Miyerkules",
        "thursday": "Huebes",
        "friday": "Biyernes",
        "saturday": "Sabado",
        "subcategories": "Mga Subkategorya",
        "category-media-header": "Medya sa ika-\"$1\" nga categorya",
        "category-empty": "\"Ang ini nga categorya wala sang panid ukon medya karon.\"",
-       "hidden-categories": "{{PLURAL:$1|Tago nga kategorya|Tago nga mga kategorya}}",
+       "hidden-categories": "{{PLURAL:$1|Tinago nga kategorya|Tinago nga mga kategorya}}",
        "hidden-category-category": "Nakatago nga mga categorya",
-       "category-subcat-count": "{{PLURAL:$2|Ini nga kategorya ay may sang amo lang ni nga unod sa mga nagasunod nga subkategorya.|Ini nga kategorya ay may ara nagasunod {{PLURAL:$1|subkategorya|$1 mga subkategorya}}, sa $2 kabilugan.}}",
+       "category-subcat-count": "{{PLURAL:$2|Ang ini nga kategorya may ara sing mga subkategorya nga nagakasunod.|Ang ini nga kategorya may ara sing {{PLURAL:$1|ka subkategorya}}, sa kabilugan nga $2.}}",
        "category-subcat-count-limited": "Ang ini nga categorya may yara sang masunod nga mga {{PLURAL:$1|subcategorya|$1 mga subcategorya}}.",
-       "category-article-count": "{{PLURAL:$2|Ini nga kategorya ay may sang amo lang ni nga unod sa mga nagasunod nga pahina.|Ang mga nagasunod {{PLURAL:$1|pahina ay|$1 mga pahina ay}} sa sini nga kategroya, sa $2 kabilugan.}}",
+       "category-article-count": "{{PLURAL:$2|Ang ini nga kategorya nagakaunod lamang sing nagakasunod nga panid.|Ang mga nagakasunod nga {{PLURAL:$1|ka panid}} yara sa sini nga kategroya, sa kabilugan nga $2.}}",
        "category-article-count-limited": "Ang masunod nga {{PLURAL:$1|panid|$1 mga panid}} yara sa categorya karon.",
        "category-file-count": "{{PLURAL:$2|Ang ini nga categorya may yara lamang sang masunod nga hilera.|Ang masunod nga {{PLURAL:$1|hilera|$1 mga hilera}} yari sa sini nga categorya, halin sa kabug-osan nga $2.}}",
        "category-file-count-limited": "Ang masunod nga {{PLURAL:$1|hilera|$1 mga hilera}} ara sa categorya karon.",
-       "listingcontinuesabbrev": "cont.",
+       "listingcontinuesabbrev": "pdyn",
        "index-category": "Naka-index nga mga panid",
        "noindex-category": "Wala naka-index nga mga panid",
        "broken-file-category": "Mga panid nga may guba nga link sang hilera",
        "mypage": "Akon Panid",
        "mytalk": "Paghisayranay",
        "anontalk": "Paghisayranay sang sining IP address",
-       "navigation": "Nabigasyon",
+       "navigation": "Paglayag",
        "and": "&#32;kag",
        "qbfind": "Pangita",
        "qbbrowse": "Magbasa-basa",
        "faq": "Mga masami pamangkoton",
        "faqpage": "Project:MMP",
        "actions": "Mga hulag",
-       "namespaces": "Hulut-ngalan",
+       "namespaces": "Mga Luang-ngalan",
        "variants": "Mga Sahi",
-       "navigation-heading": "Pililian pangnabigasyon",
+       "navigation-heading": "Pililian panglayag",
        "errorpagetitle": "Sala/Eror",
        "returnto": "Balik sa $1.",
        "tagline": "Halin sa {{SITENAME}}",
        "searchbutton": "Pangita-a",
        "go": "Lakat",
        "searcharticle": "Kadto",
-       "history": "Pahina historya",
-       "history_short": "Saysay",
+       "history": "Maragtas sang panid",
+       "history_short": "Maragtas",
        "updatedmarker": "ginbag-o halin sang akon pinaka-ulihe nga pagbisita",
        "printableversion": "Balalhagon nga bersiyon",
-       "permalink": "Permanente nga tabid",
+       "permalink": "Dayon nga tabid",
        "print": "I-imprinta",
        "view": "Lantawon",
        "view-foreign": "Lantawon sa $1",
-       "edit": "Ilisan",
+       "edit": "Liwaton",
        "create": "Himuon",
        "editthispage": "Islan ini nga pahina",
        "create-this-page": "Himuon ang ini nga panid",
        "categorypage": "Lantawon ang panid sang categorya",
        "viewtalkpage": "Lantawon ang gina-istroyahan",
        "otherlanguages": "Sa iban nga pamulong",
-       "redirectedfrom": "(Gindirek liwat halin $1)",
+       "redirectedfrom": "(Nagpadulong halin sa $1)",
        "redirectpagesub": "I-direktahon ang pahina",
-       "lastmodifiedat": "Ang ini nga pahina na-islan lang sang nagligad nga $1, sa $2.",
+       "lastmodifiedat": "Ang ini nga panid nailisan sang nagligad nga $1, takna $2.",
        "viewcount": "Ang ini nga panid ginsudlan sang {{PLURAL:$1|maka-isa|ika-$1 nga beses}}.",
        "protectedpage": "Ginapangapinan nga panid",
        "jumpto": "Lumpat sa:",
-       "jumptonavigation": "nabigasyon",
+       "jumptonavigation": "paglayag",
        "jumptosearch": "pangitaa",
        "view-pool-error": "Nagapangayo kami sang pasaylo kay ang mga server tuman ka loaded sa sini nga tion.\nTuman ka damo nga manuggamit ang luyag makakita sang sini nga panid.\nPalihog maghulat sang malip-ot nga tini-on bag-o magsulod sa sini nga pahina liwat.\n\n$1",
        "pool-timeout": "Pag-untat nagahulat para sa kandado",
        "aboutpage": "Project:Nahanungod",
        "copyright": "Ang unod nga abeylabol nga naga paidalum $1.",
        "copyrightpage": "{{ns:project}}:Kapirayts",
-       "currentevents": "Mga Hitabo Subong",
-       "currentevents-url": "Project:Nagakatabo sa karon nga tinion",
+       "currentevents": "Mga hitabo subong",
+       "currentevents-url": "Project:Mga hitabo subong",
        "disclaimers": "Mga Pagpahangup",
        "disclaimerpage": "Project:Kabilugan nga pagpahangup",
-       "edithelp": "Bulig sa pag Ilis",
+       "edithelp": "Bulig sa pagliwat",
        "mainpage": "Puno nga Panid",
-       "mainpage-description": "Mayor nga Panid",
+       "mainpage-description": "Puno nga panid",
        "policy-url": "Project:Patakaran",
-       "portal": "Portal sang Banwa",
-       "portal-url": "Project:Lulutsan sang banwa",
+       "portal": "Ganghaan sang banwa",
+       "portal-url": "Project:Ganghaan sang banwa",
        "privacy": "Pagsulundan sa pangkinaugalingon",
        "privacypage": "Project:Pagsulundan sa pangkinaugalingon",
        "badaccess": "Permiso sala/eror",
        "newmessageslinkplural": "{{PLURAL:$1|isa ka bag-o nga mensahe|bag-o nga mga mensahe}}",
        "newmessagesdifflinkplural": "pinaka-ulihi nga {{PLURAL:$1|pagbag-o|mga pagbag-o}}",
        "youhavenewmessagesmulti": "May mga bag-ong mensahe ka sa $1",
-       "editsection": "ilisan",
-       "editold": "ilisan",
+       "editsection": "liwaton",
+       "editold": "liwaton",
        "viewsourceold": "lantawon ang ginhalinan",
-       "editlink": "islan",
-       "viewsourcelink": "tan-awon ang ginhalinan",
-       "editsectionhint": "Ilisan ining bahin: $1",
+       "editlink": "liwaton",
+       "viewsourcelink": "lantawon ang ginhalinan",
+       "editsectionhint": "Liwaton ining bahin: $1",
        "toc": "Kaundan",
        "showtoc": "ipakita",
        "hidetoc": "pagatagu-on",
        "red-link-title": "$1 (wala pa nahimo ining panid)",
        "sort-descending": "Himuson nga nagapanaog",
        "sort-ascending": "Himuson nga nagapasaka",
-       "nstab-main": "Pahina",
+       "nstab-main": "Panid",
        "nstab-user": "Panid sang Manog-gamit",
        "nstab-media": "Panid sang medya",
-       "nstab-special": "Espesyal nga pahina",
+       "nstab-special": "Pinasahi nga mga panid",
        "nstab-project": "Pahina sang proyekto",
-       "nstab-image": "File",
+       "nstab-image": "Tangkas",
        "nstab-mediawiki": "Mensahe",
        "nstab-template": "Templeyt",
        "nstab-help": "Panid sang pagbulig",
        "cannotdelete": "Ang panid ukon hilera nga \"$1\" indi mahimo nga pagapanason.\nMahimo nga napanas na ini sang iban.",
        "cannotdelete-title": "Indi mahimo nga dulaon ang panid nga \"$1\"",
        "delete-hook-aborted": "Ang pag-ilis gin-untat sang taga.\nWala ini naghatag sang ano man nga eksplenasyon.",
-       "badtitle": "Malain nga titulo",
+       "badtitle": "Malain nga panig-ulo",
        "badtitletext": "Ang ginapangayo mo nga titulo ka pahina ay sala, blangko, ukon indi ensakto ang pagtabid sang inter-lengwahe o inter-wiki na titulo.\nSiguro may-ara ini sang isa ukon madamo nga karakter nga indi ginabaton kag ginagamit sa titulo.",
        "perfcached": "Ang masunod nga datos nakatago lamang kag mahimo nga indi bag-o. May maksimum nga {{PLURAL:$1|isa ka resulta nga|$1 mga resulta nga}} ara sa nakatago nga datos.",
        "perfcachedts": "Ang masunod nga datos nakatago lamang, kag pinaka-ulihe nga ginbag-o sang $1. May maksimum nga {{PLURAL:$4|isa ka resulta nga|$4 mga resulta nga}} ara sa nakatago nga datos.",
        "bold_tip": "Dukot nga teksto",
        "italic_sample": "Gahilay nga teksto",
        "italic_tip": "Gahilay nga teksto",
-       "link_sample": "Titulo na Tabid",
+       "link_sample": "Panig-ulo sang tabid",
        "link_tip": "Sulodlon nga tabid",
-       "extlink_sample": "http://www.example.com titulo tabid",
+       "extlink_sample": "http://www.example.com panig-ulo sang tabid",
        "extlink_tip": "Sa guha nga Tabid (tandaan http:// prefiks)",
        "headline_sample": "Teksto sang pangunang-dinalang",
        "headline_tip": "Lebel 2 pangunang-dinalan",
        "hr_tip": "Gapahigda nga linya (gamiton laka lang)",
        "summary": "Kabilogan:",
        "subject": "Ginatukoy/Pangulong-dinalang:",
-       "minoredit": "Ini menor nga pag-ilis",
+       "minoredit": "Diutay lang ini nga pagliwat",
        "watchthis": "Bantayan ining panid",
-       "savearticle": "Tiponon ining panid",
+       "savearticle": "Pitaka ining panid",
        "preview": "Ipakita subong",
        "showpreview": "Ipakita nga daan",
-       "showdiff": "Ipakita ang inislan",
+       "showdiff": "Ipakita ang gin-ilisan",
        "blankarticle": "<strong>Pahibalo:</strong> Ang panid nga imo ginahimo wala sing unod. Kon imo tum-ukon liwat ang \"{{int:savearticle}}\", ang panid pagahimuon nga wala sing unod.",
        "anoneditwarning": "<strong>Pahibalo:</strong> Wala ka nakasulod. Kitaon sa publiko ang imo nga IP address kon ikaw maghimo sang pagbaylo. Kon ikaw <strong>[$ magsulod]</strong> ukon <strong>[$ maghimo sing account]</strong>, ang imo mga ginhimo nga pagbaylo ipahanungod sa imo nga username, kaupod sang iban pa nga kapuslanan.",
        "anonpreviewwarning": "''Wala ka pa nakasulod. Igasulat ang imo IP adres sa historya sini nga inislan na pahina.''",
        "nosuchsectiontitle": "Indi makit-an ang seksyon",
        "nosuchsectiontext": "Gintilawan mo nga mag-ilis sang seksyon nga wala naga-eksister.\nMahimo nga ini ginsaylo na ukon ginpanas samtang nagalantaw ka sang panid.",
        "loginreqtitle": "Kinahanglan magsulod",
-       "loginreqlink": "mag sulod",
+       "loginreqlink": "magsulod",
        "loginreqpagetext": "Kinahanglan mo nga mag-$1 agod nga makita ang iban nga mga panid.",
        "accmailtitle": "Napadala na ang pasword.",
        "accmailtext": "May pasword nga wala ginpilian nga ginhimo para kay [[User talk:$1|$1]] nga ginpadala sa $2.\n\nAng pasword para sa sini nga bag-o nga akawnt mahimo ma-ilisan sa ''[[Special:ChangePassword|ilisan ang pasword]]'' nga panid pagkatapos magsulod.",
        "newarticle": "(Bag-o)",
-       "newarticletext": "Nagbukas ka sang isa ka tabid pakadto sa isa ka pahina nga wala pa nahimo.\nPara maghimo sang sina na pahina, sugod ka lang sa pagtayp sa sulod sang kahon nga makit an mo sa idalum (tan-awa ang [$1 bulig nga pahina] para sa dugang nga impormasyon).\nPero kung nakasulod nga aksidente lamang, palihog lang i-klik sa imo internet nga may ngalan ukon simbolo nga '''back''' button.",
+       "newarticletext": "Nagbukas ka sang isa ka tabid padulong sa isa ka panid nga wala pa nahimo.\nAgud mahimo ang panid, magsugod ka lang sa pagsulat sa sulod sang kahon nga makit-an mo sa idalum (tan-awa ang [$1 bulig nga pahina] para sa dugang nga ihibalo).\nUgaling kon ikaw nagtalang lamang diri, palihog lang tum-uka ang pityong nga <strong>balik</strong> sa imo nga palalayagan.",
        "anontalkpagetext": "----''Ini ang panid para sa pagtalakay sa wala makilala-an nga manuggamit nga wala pa nakatuga sang akawnt, ukon wala nagagamit sang isa.\nAmo nga kinahanglan naton mag-gamit sang IP adres nga de numero agod nga mahibaluan naton siya.\nAng amo sini nga adres sang IP mahimo nga pagasaluhan sang madamo nga manuggamit.\nKon ikaw manuggamit nga wala makilal-i kag nabatyagan mo nga may mga komento nga wala man sing labot nga ginapakadto sa imo, palihog [[Special:UserLogin/signup|maghimo ka sang akawnt]] ukon [[Special:UserLogin|magsulod]] para malikawan ang iban pa nga pagsala sa iban pa nga wala makilal-an nga manuggamit.''",
-       "noarticletext": "Wala subong sang teksto ang ini nga pahina.\nPwede ka [[Special:Search/{{PAGENAME}}|mangita para sa titulo sang ini nga pahina]] sa iban man nga pahina,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} mangita ka sang kaparehas nga logs],\no [{{fullurl:{{FULLPAGENAME}}|action=edit}} islan ini nga pahina]</span>.",
-       "noarticletext-nopermission": "Wala subong sang teksto ang sini nga panid.\nPwede ka [[Special:Search/{{PAGENAME}}|mangita para sa titulo sang ini nga panid]] sa iban man nga panid,\nukon <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} mangita ka sang kaparehas nga logs]</span>.",
+       "noarticletext": "Wala unod ining panid.\nSarang ka [[Special:Search/{{PAGENAME}}|magpangita sining panig-ulo]] sa iban nga mga panid,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} pangitaa sa nagakaangot nga pagkitan],\no [{{fullurl:{{FULLPAGENAME}}|action=edit}} ilisan ining panid]</span>.",
+       "noarticletext-nopermission": "Wala unod ining panid.\nSarang ka mag-[[Special:Search/{{PAGENAME}}|pangitaa ang ini nga panig-ulo]] sa iban nga mga panid,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} pangitaa sa nagakaangot nga pagkitan],\no [{{fullurl:{{FULLPAGENAME}}|action=edit}} ilisan ining panid]</span>, ugaling wala ka ginapahanugutan nga maghimo sining panid.",
        "missing-revision": "Ang ini nga pag-ilis nga #$1 sang panid nga ginhinanglan nga \"{{FULLPAGENAME}}\" wala naga-eksister.\n\nIni kalabanan ginabuhat sang nagasunod nga wala na mabag-o nga link sang hisayranay sa isa ka panid nga gindula na.\nAng mga detalye mahimo nga makita sa [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].",
        "userpage-userdoesnotexist": "Ang akawnt sang manuggamit nga \"<nowiki>$1</nowiki>\" wala pa marehistro.\nPalihog tsek kon luyag mo nga himuon/ilisan ang ini nga panid.",
        "userpage-userdoesnotexist-view": "Ang akawnt sang manuggamit nga \"$1\" wala pa marehistro.",
        "session_fail_preview_html": "'''Nagapangayo kami sang pasaylo! Indi namon ma-proseso ang imo pag-ilis tungod sang pagkadula sang datos sang sesyon.'''\n\n''Kay ang {{SITENAME}} may ara sang hilaw nga HTML nga ginapasugtan, ang pagtan-aw gintago bilang pagpanghanda batok sa mga pag-atake sang JavaScript.''\n\n'''Kon ini lehitimo nga paghimakas, palihog tilawi liwat.'''\nKon indi man sa gihapon mag-gana, tilawi  [[Special:UserLogout|mag-guha]] kag magsulod liwat dayon.",
        "token_suffix_mismatch": "'''Ang imo pag-ilis wala ginbaton tungod nga ang imo kleyente nag-guba sang mga letra sa token sang pag-ilis.'''\nAng pag-ilis wala ginbaton agod to nga malikawan ang kalainan sang mga teksto sa panid.\nIni nagakatabo kon kaisa kon nagagamit ka sang nakabase sa web nga serbisyo proxy nga madamo sing lusot.",
        "edit_form_incomplete": "'''Ang iban nga bahin sang formas sa pag-ilis wala nakalab-ot sa serber; palihog verificar kon ang imo pag-ilis santo man sa gihapon kag tilawi liwat.'''",
-       "editing": "Gina-islan $1",
+       "editing": "Ginaliwat ang $1",
        "creating": "Ginabuhat ang $1",
-       "editingsection": "Gina-Islan $1 (seksiyon)",
+       "editingsection": "Ginaliwat ang $1 (bahin)",
        "editingcomment": "Gina-islan ang $1 (bag-o nga bahin)",
        "editconflict": "May pagpamatok sa pag-ilis: $1",
        "explainconflict": "May yara sang iban nga nag-ilis sang sini nga panid umpisa nga imo ini gin-ilisan.\nAng lugar sang ibabaw nga teksto may yara sang teksto sang panid kon ano ini karon naga-eksister.\nAng imo mga pagbag-o ginapakita sa may lugar sang idalom nga teksto.\nMahimo nga kinahanglan mo pa nga tabidon ang imo mga pagbag-o sa mga naga-eksiter nga nga teksto.\nAng mga teksto '''lamang''' nga yara sa lugar sang ibabaw nga teksto ang matipon kon imo pagatum-ukon ang \"{{int:savearticle}}\".",
        "nohistory": "Wala sang kasaysayan sang pag-ilis sang sini nga panid.",
        "currentrev": "Mga Inislan Subong",
        "currentrev-asof": "Bag-o nga rebisyon sang $1",
-       "revisionasof": "Ang Pagliwat sang $1",
+       "revisionasof": "Ginliwat sang $1",
        "revision-info": "Ang pag-ilis ni $1 halin sang $2",
-       "previousrevision": "← Daan nga rebisyon",
+       "previousrevision": "← Daan nga pagliwat",
        "nextrevision": "Mas bag-o nga rebisyon →",
        "currentrevisionlink": "Mga Inislan Subong",
-       "cur": "karon",
+       "cur": "sub",
        "next": "dason",
        "last": "ulihi",
        "page_first": "pinaka-una",
        "rev-suppressed-unhide-diff": "Ang isa sang mga pagbag-o sang sini nga diff '''ginpahugotan'''.\nMakita ang mga detalye sa [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log sang pagpahugot].\nMakita mo man ini sa gihapon [$1 lantawon ang ini nga diff] kon luyag mo pa magpadayon.",
        "rev-deleted-diff-view": "Ang isa sa mga pagbag-o sa sini nga diff '''ginpanas'''.\nMakita mo ini nga diff; makita ang mga detalye sa [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log sang pagpanas].",
        "rev-suppressed-diff-view": "Ang isa sa mga pagbag-o sa sini nga diff '''ginpahugotan'''.\nMakita mo ini nga diff; makita ang mga detalye sa [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log sang pagpahugot].",
-       "rev-delundel": "pakita/tagu-on",
+       "rev-delundel": "ilisan ang makita",
        "rev-showdeleted": "ipakita",
        "revisiondelete": "Panason/indi pagpanason ang mga pagbag-o",
        "revdelete-nooldid-title": "Sala nga natuyo bag-ohon",
        "difference-title": "Kinalain sang mga pagbag-o sa \"$1\"",
        "difference-title-multipage": "Kinalain sang mga panid nga \"$1\" kag \"$2\"",
        "difference-multipage": "(Kinala-in sang mga panid)",
-       "lineno": "Linya $1:",
+       "lineno": "Iras nga ika-$1:",
        "compareselectedversions": "I-kompara ang pinilian nga mga rebisyon",
        "showhideselectedversions": "Ipakita/taguon ang mga ginpili nga pagbag-o",
-       "editundo": "bawi-on ang pag ilis",
+       "editundo": "bawion ang ginbuhat",
        "diff-multi-manyusers": "({{PLURAL:$1|Isa ka tunga-tunga nga pagbag-o|$1 ka tunga-tunga nga mga pagbag-o}} sang masobra $2 ka {{PLURAL:$2|manuggamit|mga manuggamit}} nga wala ginpakita)",
        "difference-missing-revision": "May {{PLURAL:$2|isa ka pagbag-o|$2 ka mga pagbag-o}} san sini nga kinalain ($1) ang wala makita.\n\nIni kalabanan ginabuhat sang nagasunod nga wala na mabag-o nga link sang isa ka panid nga gindula na.\nAng mga detalye mahimo nga makita sa [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].",
-       "searchresults": "Resulta sang Pagpangita",
-       "searchresults-title": "Resulta sang Pagpangita para \"$1\"",
+       "searchresults": "Bunga sang pagpangita",
+       "searchresults-title": "Bunga sang pagpangita sing \"$1\"",
        "titlematches": "Mga pareho nga titulo sang panid",
        "textmatches": "Mga pareho nga teksto sang panid",
        "notextmatches": "Wala sang pahina nga parehas teksto",
-       "prevn": "antes {{PLURAL:$1|$1}}",
-       "nextn": "dasun {{PLURAL:$1|$1}}",
+       "prevn": "nagligad nga {{PLURAL:$1|$1}}",
+       "nextn": "dason nga {{PLURAL:$1|$1}}",
        "prevn-title": "Nagligad nga $1 {{PLURAL:$1|resulta|mga resulta}}",
        "nextn-title": "Madason nga $1 {{PLURAL:$1|resulta|mga resulta}}",
-       "shown-title": "Magpakita sing $1 ka {{PLURAL:$1|resulta|mga resulta}} kada panid",
-       "viewprevnext": "Tan-awon ($1 {{int:pipe-separator}} $2) ($3)",
+       "shown-title": "Magpakita sing $1 ka {{PLURAL:$1|resulta|mga resulta}} sa tagsa ka panid",
+       "viewprevnext": "Lantawon ($1 {{int:pipe-separator}} $2) ($3)",
        "searchmenu-exists": "'''May yara sang panid nga ginhingalanan nga \"[[:$1]]\" sa sini nga wiki.'''",
        "searchmenu-new": "<strong>Himua ang panid nga \"[[:$1]]\" sa ini nga wiki!</strong> {{PLURAL:$2|0=|Linglinga man ang panid nga nakit-an sa imo nga pagpanglaghap.|Linglinga man ang mga bunga-panglaghap nga nakit-an.}}",
-       "searchprofile-articles": "Mga panid sang unod",
+       "searchprofile-articles": "Mga panid sang kaundan",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Tanan-tanan",
-       "searchprofile-advanced": "Mas mauna",
+       "searchprofile-advanced": "Masanyog",
        "searchprofile-articles-tooltip": "Pangitaa sa $1",
-       "searchprofile-images-tooltip": "Mangita sang mga hilera",
-       "searchprofile-everything-tooltip": "Pangitaon ang tanan nga kaundan (dala na ang mga panid sang pag-estorya)",
-       "searchprofile-advanced-tooltip": "Pangitaon sa pahungod nga espasyo sang pangalan",
-       "search-result-size": "$1 ({{PLURAL:$2|1 pulong|$2 pulong}})",
+       "searchprofile-images-tooltip": "Magpangita sang mga tangkas",
+       "searchprofile-everything-tooltip": "Pangitaon ang tanan nga kaundan (dala na ang mga panid sang paghisayranay)",
+       "searchprofile-advanced-tooltip": "Pangitaon sa napili nga luang-ngalan",
+       "search-result-size": "$1 ({{PLURAL:$2|1 ka pulong|$2 ka pulong}})",
        "search-result-category-size": "{{PLURAL:$1|1 ka miyembro|$1 ka mga miyembro}} ({{PLURAL:$2|1 ka subcategoriya|$2 ka mga subcategoriya}}, {{PLURAL:$3|1 ka hilera|$3 ka mga hilera}})",
-       "search-redirect": "(gindirekta liwat $1)",
+       "search-redirect": "(ginpadulong halin sa $1)",
        "search-section": "(seksiyon $1)",
        "search-suggest": "Ang buot mo silingon: $1",
        "search-interwiki-caption": "Mga Utod proyekto",
        "right-bot": "Mahimo nga isa ka proseso nga awtomatiko",
        "right-nominornewtalk": "Wala nga dyutay nga pagbag-o sa mga panid sang diskusyon para makasugod sang isa ka abiso nagasiling nga may bag-ong mensahe.",
        "right-apihighlimits": "Mag-usar sang mas mataas nga limitasyon para sa mga pamangkot sa API.",
-       "right-writeapi": "Pag-usar sang ginsulat nga API",
+       "right-writeapi": "Paggamit sang API sang pagsulat",
        "right-delete": "Panason ang panid",
        "right-bigdelete": "Panason ang mga panid nga may daku nga maragtas",
        "right-deletelogentry": "Panason kag indi panason ang mga partikular nga mga log entries",
        "right-sendemail": "Magpadala sang email sa iban nga naga-usar",
        "right-passwordreset": "Tan-awa ang mga email sang password reset",
        "right-managechangetags": "Maghimo kag magdula sing [[Special:Tags|mga tag]] halin sa database.",
-       "newuserlogpage": "Naga-usar nga ginhimo log",
+       "newuserlogpage": "Pagkitan sang paghimo sang taggamit",
        "newuserlogpagetext": "Ini ang isa ka log sang mga ginhimo sang naga-usar",
        "rightslog": "Karapatan sang naga-usar log",
        "rightslogtext": "Ini ang lista sang mga ginbag-o nga mga kinamatarong sang naga-usar.",
        "nchanges": "$1 {{PLURAL:$1|bag-ohon|mga ginbag-o}}",
        "enhancedrc-history": "maragtas",
        "recentchanges": "Mga pinakaulihi nga gin-ilisan",
-       "recentchanges-legend": "Mga pililian sa bag-o lang na himo",
-       "recentchanges-summary": "La-uton ang pina gid ka bag-o nga nahimo sa may wiki sa ini nga feed",
+       "recentchanges-legend": "Pililian sang pinakaulihi nga gin-ilisan",
+       "recentchanges-summary": "Tumbukon ang pinakaulihi nga pag-ilis sa wiki sa sining panid.",
        "recentchanges-feed-description": "La-uton ang pina gid ka bag-o nga nahimo sa may wiki sa ini nga feed.",
-       "recentchanges-label-newpage": "Ang sini nga pagbag-o nakahimo sang bag-o nga panid",
-       "recentchanges-label-minor": "Diotay ilis ini",
-       "recentchanges-label-bot": "Ang sini nga pagbag-o ginubra sang isa ka bot",
-       "recentchanges-label-unpatrolled": "Ang sini nga pagbag-o indi pa ginbantayan",
+       "recentchanges-label-newpage": "Ang ini nga pagliwat naghimo sang bag-o nga panid",
+       "recentchanges-label-minor": "Diutay lang ini nga pagliwat",
+       "recentchanges-label-bot": "Ang ini nga pagliwat ginbuhat sang isa ka bot",
+       "recentchanges-label-unpatrolled": "Ang ini nga pagliwat wala pa ginabantayan",
        "rcnotefrom": "Yara sa idalum ang mga guinbag-o halin '''$2''' (tubtub '''$1''' ang ginpagwa).",
        "rclistfrom": "Ipakita ang bag-o lang nahimo halin sa $3 $2",
-       "rcshowhideminor": "$1 menor nga mga inislan",
+       "rcshowhideminor": "$1 ang mga diutay nga pagliwat",
        "rcshowhideminor-hide": "Itaguon",
-       "rcshowhidebots": "$1 bots",
+       "rcshowhidebots": "$1 mga bot",
        "rcshowhidebots-show": "Ipakita",
        "rcshowhideliu": "$1 mga ga-usar nga naka sulod",
        "rcshowhideliu-hide": "Itaguon",
-       "rcshowhideanons": "$1 di nagpakilala nga mga ga-usar",
+       "rcshowhideanons": "$1 ang tago nga mga taggamit",
        "rcshowhideanons-hide": "Itaguon",
        "rcshowhidepatr": "$1 ginabantyan nga pagbag-o",
-       "rcshowhidemine": "$1 akon mga inislan",
+       "rcshowhidemine": "$1 ang akon mga pagliwat",
        "rcshowhidemine-hide": "Itaguon",
-       "rclinks": "Ipakita ang nagligad $1 nga nabag-o lang sang $2 adlaw<br />$3",
-       "diff": "diff",
-       "hist": "hist",
+       "rclinks": "Ipakita ang ulihi nga $1 ka mga gin-ilisan sa sulod sang $2 ka adlaw<br />$3",
+       "diff": "knln",
+       "hist": "ngkltb",
        "hide": "Tago",
        "show": "Pakita",
        "minoreditletter": "m",
        "number_of_watching_users_pageview": "[$1 ginabantayan {{PLURAL:$1|naga-usar|mga naga-usar}}]",
        "rc_categories": "Limitahan ang mga kategorya (ibulag lakip sang \"|\")",
        "rc_categories_any": "Bisan ano",
-       "rc-change-size-new": "$1 {{PLURAL:$1|byte|mga byte}} pagkatapos sang pagbag-o",
+       "rc-change-size-new": "$1 {{PLURAL:$1|byte|mga byte}} pagkatapos sang pag-ilis",
        "newsectionsummary": "/* $1 */ bag-o nga seksyon",
        "rc-enhanced-expand": "Ipakita ang mga detalye",
        "rc-enhanced-hide": "Tagu-on ang mga detalye",
        "rc-old-title": "orihinal nga ginhimo bilang \"$1\"",
-       "recentchangeslinked": "May labot nga pag-ilis",
+       "recentchangeslinked": "Nagakaangot nga pag-ilis",
        "recentchangeslinked-feed": "May labot nga pag-ilis",
-       "recentchangeslinked-toolbox": "May labot nga pag-ilis",
-       "recentchangeslinked-title": "Mga ginlain nga kapareho kay \"$1\"",
-       "recentchangeslinked-summary": "Ini ang mga lista sang mga bag-o lang gid nga nahimo nga mga pahina nga gintabid halin sa gin klaro nga pahina (o mga katapo sa mga kategorya nga gin klaro).\nMga Pahina sa [[Special:Watchlist|imo lista-lantaw]] ay '''dukot'''.",
+       "recentchangeslinked-toolbox": "Nagakaangot nga pagbaylo",
+       "recentchangeslinked-title": "Mga pag-ilis angot sa \"$1\"",
+       "recentchangeslinked-summary": "Ini ang listahan sang mga pagpang-ilis sa mga panid nga nagatabid sa natuhoy nga panid (ukon sa mga katapu sang natuhoy nga kategorya). Makita nga <strong>dukot</strong> ang mga panid sa [[Special:Watchlist|imo balantayan]]",
        "recentchangeslinked-page": "Ngalan ka Pahina:",
        "recentchangeslinked-to": "Ipakita ang mga naglain na pahina nga gin tabid sa nahatagan nga pahina",
-       "upload": "Uplod file",
+       "upload": "Ilulan ang tangkas",
        "uploadbtn": "Karga file",
        "reuploaddesc": "Kanselahon ang pag-karga kag magbalik sa porma sang pag-karga.",
        "upload-tryagain": "Ipasa ang ginlarawan nga ginbag-o nga file",
        "upload-file-error-text": "May nahitabo nga kasayupan sa sulod sing nagtinguha nga maghimo sang temporaryo nga file sa server.",
        "license": "Pagpanglisensya",
        "license-header": "Pagpanglisensya",
-       "file-anchor-link": "File",
-       "filehist": "Historya file",
-       "filehist-help": "I-klik sa may petsa/oras para makita ang file sa ina nga oras.",
+       "file-anchor-link": "Tangkas",
+       "filehist": "Maragtas sang tangkas",
+       "filehist-help": "Tum-uka ang petsa/takna agud makita ang tangkas sang sadto nga tinion.",
        "filehist-revert": "Ibalik",
        "filehist-current": "subong",
-       "filehist-datetime": "Petsa/Oras",
+       "filehist-datetime": "Petsa/Takna",
        "filehist-thumb": "Thumbnail",
-       "filehist-thumbtext": "Thumbnail para sa bersiyon sang $1",
+       "filehist-thumbtext": "Thumbnail sang bersiyon sadtong $1",
        "filehist-user": "Taggamit",
        "filehist-dimensions": "Tinaksan",
-       "filehist-comment": "Komentar",
-       "imagelinks": "Pagusar sang file",
-       "linkstoimage": "Ang nagakasunod {{PLURAL:$1|pahina nga mga tabid|$1 mga pahina mga tabid}} sa sini nga file:",
+       "filehist-comment": "Magpanghinun-anon",
+       "imagelinks": "Paggamit sang tangkas",
+       "linkstoimage": "Ang nagakasunod nga {{PLURAL:$1|ka panid nagatabid}} sa sini nga tangkas:",
        "nolinkstoimage": "Waay sing panid nga nakasugpon sa sini nga file.",
        "sharedupload": "Ini nga file gikan sa $1 kag pwede ma usar sang iban nga mga proyekto.",
-       "sharedupload-desc-here": "Ang sini nga file amo halin sa $1 kag pwede ini mausar sa lain nga mga proyekto. Ang ginalarawan sang iya nga [$2 panid sang paglarawan sang file] amo ang ginpagwa sa idalum.",
+       "sharedupload-desc-here": "Ang ini nga tangkas naghalin sa $1 kag basi ginagamit man sang iban nga mga proyekto. Ang paglarawan sa iya nga [$2 panid sang paglarawan sang tangkas] amo ang ginapakita sa idalum.",
        "uploadnewversion-linktext": "Uplod sang bag-o nga bersiyon sang sini nga file",
        "filedelete-submit": "Panason",
        "randompage": "Bisan ano nga panid",
        "statistics": "Mga Statistik",
        "brokenredirects-edit": "ilisan",
        "brokenredirects-delete": "panason",
-       "nbytes": "$1 {{PLURAL:$1|byte|bytes}}",
+       "nbytes": "$1 {{PLURAL:$1|ka byte}}",
        "nmembers": "$1 {{PLURAL:$1|membro|mga membro}}",
        "prefixindex": "Tanan nga mga pahina nga may-ara prefiks",
        "usercreated": "{{GENDER:$3|Ginhimo}} sa $1 kag $2",
        "allpagesfrom": "Ipakita ang mga pahina sugod sa:",
        "allpagesto": "Ipakita ang mga pahina nga nagakatapos sa:",
        "allarticles": "Tanan nga mga pahina",
-       "allpagessubmit": "Sige",
+       "allpagessubmit": "Kadto",
        "categories": "Mga kategorya",
        "linksearch": "Eksternal na mga tabid",
        "linksearch-ok": "Pangita-a",
        "undeletelink": "tan-aw/ginbalik",
        "undeleteviewlink": "Tan-awa",
        "undelete-search-submit": "Pangita-a",
-       "namespace": "Ngalan-espasyo:",
-       "invert": "Suli-on ang seleksiyon",
+       "namespace": "Luang-ngalan:",
+       "invert": "Sulion ang ginpili",
        "blanknamespace": "(Puno)",
        "contributions": "Mga kontribusyon sang {{GENDER:$1|naga-usar}}",
        "contributions-title": "Mga Kontribusyon sang Naga-Usar para $1",
        "blocklist-reason": "Rason:",
        "ipblocklist-submit": "Pangita-a",
        "emailblock": "Gintapna ang e-mail",
-       "blocklink": "harang",
+       "blocklink": "lambaton",
        "unblocklink": "di pagpugong",
        "change-blocklink": "pagbag-o sang pugong",
        "contribslink": "amot",
        "allmessages": "Mga mensahe sang sistema",
        "allmessagesname": "Ngalan",
        "allmessagesdefault": "Ang gindestino nga teksto",
-       "thumbnail-more": "Padaku-on",
+       "thumbnail-more": "Padakuon",
        "thumbnail_error": "May ara sala sa paghimo sang thumbnail: $1",
        "import-options-wrong": "Sala {{PLURAL:$2|pili|mga pagpilian}}: <nowiki>$1</nowiki>",
        "import-rootpage-invalid": "Ang ginhatag nga gingikanan nga panid indi mabaton ang iya nga titulo.",
        "tooltip-pt-mytalk": "Ang imo pahina sang paghisayranay",
        "tooltip-pt-anontalk": "Istorya kapin sa mga pagbag-o nga ginhimo sa ip address nga ini",
        "tooltip-pt-preferences": "Akon pagpalabi",
-       "tooltip-pt-watchlist": "Ang lista sang mga pahina nga imo ginabantayan para bag-ohon",
+       "tooltip-pt-watchlist": "Listahan sang mga panid nga ginabantayan angot sa mga pag-ilis",
        "tooltip-pt-mycontris": "Lista sang imo kontribusyon",
-       "tooltip-pt-login": "Ginaabi-abi ikaw nga magsulod; apang, indi ini kinahanglanon",
+       "tooltip-pt-login": "Ginaagda ikaw nga magsulod; apang, indi ini kinahanglanon gid",
        "tooltip-pt-logout": "Mag guha",
        "tooltip-pt-createaccount": "Ginaagda ka nga maghimo sing akawnt kag magsulod; ugaling, indi ini kinahanglanon gid",
        "tooltip-ca-talk": "Paghisayranay nahanungod sini nga panid",
-       "tooltip-ca-edit": "Puede nimo islan ang unod sang sini nga panid. Palihog gamit sang preview button antes permanentehon ang gin ilisan.",
-       "tooltip-ca-addsection": "Magsugod sang bag-o nga seksiyon",
-       "tooltip-ca-viewsource": "Naprotektahan ang ini nga pahina.\nPwede mo matan-aw ang iya ginhalinan",
-       "tooltip-ca-history": "Nagligad nga rebisyon sa sini nga pahina",
+       "tooltip-ca-edit": "Sarang mo maliwat ining panid. Palihog gamita ang pityong-tika bag-o pitakon",
+       "tooltip-ca-addsection": "Magsugod sang bag-o nga bahin",
+       "tooltip-ca-viewsource": "Naprotektahan ang ini nga panid.\nSarang mo malantaw ang iya nga ginhalinan",
+       "tooltip-ca-history": "Nagligad nga pag-ilis sining panid",
        "tooltip-ca-protect": "Protektahan ini nga pahina",
        "tooltip-ca-unprotect": "Ilisan ang pagpangapin sa sini nga panid",
        "tooltip-ca-delete": "Panason ini nga pahina",
        "tooltip-ca-undelete": "Ibalik ang mga paglain nga ginhimo sa panid nga ini antes nga ini ginpanas.",
        "tooltip-ca-move": "Saylohon ining panid",
-       "tooltip-ca-watch": "I-dugang ini nga pahina sa imo listahan sang palangitaon",
+       "tooltip-ca-watch": "Idugang ining panid sa imo nga balantayan",
        "tooltip-ca-unwatch": "Kuhaon ini nga pahina sa imo lista sang ginabantayan",
        "tooltip-search": "Pangitaa sa {{SITENAME}}",
        "tooltip-search-go": "Kadto sa panid nga nagahingadlan sini kon nabuhat na",
-       "tooltip-search-fulltext": "Pangitaon ang mga panid nga nagaunod sini",
+       "tooltip-search-fulltext": "Pangitaon ang mga panid nga nagaunod sining sulat",
        "tooltip-p-logo": "Duawa ang puno nga panid",
-       "tooltip-n-mainpage": "Magdu-aw sa Mayor nga Panid",
-       "tooltip-n-mainpage-description": "Bisitahon ang Mayor nga Panid",
-       "tooltip-n-portal": "Nahanungod sa proyekto, kon ano ang imo mahimo, diin makapangita",
-       "tooltip-n-currentevents": "Pangita-on sa likod sang impormasyon sa bag-o lang nga nagkalatabo",
+       "tooltip-n-mainpage": "Duawa ang puno nga panid",
+       "tooltip-n-mainpage-description": "Duawa ang puno nga panid",
+       "tooltip-n-portal": "Nahanungod sa proyekto, kon ano ang imo mahimo, kon diin makapangita",
+       "tooltip-n-currentevents": "Magpangita sing hinun-anon angot sa mga hitabo subong",
        "tooltip-n-recentchanges": "Listahan sang mga pinakaulihi nga pag-ilis sa wiki",
-       "tooltip-n-randompage": "Mag-load sing bisan ano nga panid",
-       "tooltip-n-help": "Ang lugar agud makatukib",
-       "tooltip-t-whatlinkshere": "Listahan sang tanan nga panid sang wiki nga naga tabid diri",
-       "tooltip-t-recentchangeslinked": "Bag-o lang gid nahimo nga mga pahina nga gin tabid halin sa sini nga pahina",
+       "tooltip-n-randompage": "Magkarga sing bisan ano nga panid",
+       "tooltip-n-help": "Ang lugar agud makahibalo",
+       "tooltip-t-whatlinkshere": "Listahan sang tanan nga panid sang wiki nga nagatabid diri",
+       "tooltip-t-recentchangeslinked": "Mga pinakaulihi nga pag-ilis sa mga panid nga nagatabid sa ining panid",
        "tooltip-feed-rss": "RSS feed para sa ini nga pahina",
-       "tooltip-feed-atom": "Atom feed para sa ini nga pahina",
+       "tooltip-feed-atom": "Atom feed sining panid",
        "tooltip-t-contributions": "Lantawon ang listahan sang mga nakontribyut sa sini nga naga-usar",
        "tooltip-t-emailuser": "Ipadala ang e-mail sa sini nga naga-usar",
-       "tooltip-t-upload": "Mag karga mga files",
+       "tooltip-t-upload": "Ilulan ang mga tangkas",
        "tooltip-t-specialpages": "Lista sang tanan nga pinasahi nga panid",
        "tooltip-t-print": "Balalhagon nga sahi sini nga panid",
-       "tooltip-t-permalink": "Permanente nga tabid sa sini nga rebisyon sang pahina",
-       "tooltip-ca-nstab-main": "Tan-awon ang unod sang pahina",
+       "tooltip-t-permalink": "Dayon nga tabid sa sining pagbaylo sang panid",
+       "tooltip-ca-nstab-main": "Lantawon ang panid sang kaundan",
        "tooltip-ca-nstab-user": "Tan-awon ang pahina sang naga-usar",
        "tooltip-ca-nstab-media": "Tan-awon ang panid sang midya.",
-       "tooltip-ca-nstab-special": "Espesyal ini nga pahina, indi mo ini ma islan sang iya kaugalingon nga pahina",
+       "tooltip-ca-nstab-special": "Pinasahi ining panid, indi mo sarang maliwat ang panid",
        "tooltip-ca-nstab-project": "Tan-awon ang pahina ka proyekto",
-       "tooltip-ca-nstab-image": "Tan-awon ang pahina sang file",
+       "tooltip-ca-nstab-image": "Lantawon ang panid sang tangkas",
        "tooltip-ca-nstab-mediawiki": "Tan-awon ang mensahe sang sistema",
        "tooltip-ca-nstab-template": "Tan-awon ang templeyt",
        "tooltip-ca-nstab-help": "Tan-awon ang panid sang bulig",
-       "tooltip-ca-nstab-category": "Tan-awon ang pahina nga kategorya",
+       "tooltip-ca-nstab-category": "Lantawon ang panid sang mga kategorya",
        "tooltip-minoredit": "Markahan ini bilang menor nga pag-ilis",
-       "tooltip-save": "Permanentehon ang imo gin islan",
+       "tooltip-save": "Pamitakon ang imo gin-ilisan",
        "tooltip-preview": "Prebyu mo anay ang imo ginbag-o, palihog gamiton mo ini antes mo i-save!",
-       "tooltip-diff": "Ipakita ang mga bag-o nga nahimo mo sa teksto",
+       "tooltip-diff": "Ipakita ang mga pag-ilis nga imo ginbuhat sa kaundan",
        "tooltip-compareselectedversions": "Lantawa ang ginalian sang duwa ka napilian nga rebisyon sa sini nga pahina",
        "tooltip-watch": "Idugang ini nga pahina sa imo lista nga ginabantayan",
        "tooltip-watchlistedit-normal-submit": "Pagpanason ang mga titulo",
        "tooltip-watchlistedit-raw-submit": "Iupdate ang listahan sang mga ginatan-aw.",
        "tooltip-recreate": "Liwat nga himuon ang panid bisan ini napanas na",
        "tooltip-upload": "Sugdan ang pagkarga",
-       "tooltip-rollback": "\"Panumbalik\" ginabalik ang (mga) na-islan sa sini nga pahina sa pinaka ulihi nga kontributor sa isa lang ka klik",
-       "tooltip-undo": "\"Indi pag-obrahon\" ginabalik ang gin-islan kag gabukas sa isaln form sa may prebyu mode.\nGapasugot sa pagdugang sang rason sa kabilugan.",
+       "tooltip-rollback": "Ang \"Panumbalik\" nagabawi sing (mga) pagliwat sa sini nga panid sang pinakaulihi nga tag-amot sa isa lang ka tum-ok",
+       "tooltip-undo": "Ang \"Bawion\" nagabawi sang ginliwat kag ginabuksan ang liliwatan nga nagatulutika. Sarang makadugang sing kabangdanan sa bilidlan.",
        "tooltip-preferences-save": "kon pagpalabi",
        "tooltip-summary": "Maghatag sing diutay nga eksplikasyon",
        "anonymous": "Indi kilala {{PLURAL:$1|tagagamit|mga tagagamit}} sang {{SITENAME}}",
        "siteuser": "Tiggamit {{SITENAME}} sang $1",
-       "pageinfo-toolboxlink": "Tuhoy s sini nga panid",
-       "previousdiff": "← Mas daan nga na-islan",
-       "nextdiff": "Mas bag-o nga gin-islan →",
-       "file-info-size": "$1 × $2 piksel, kadakuon sang file: $3, MIME type: $4",
+       "pageinfo-toolboxlink": "Pagpahantup sang panid",
+       "previousdiff": "← Labing daan nga pagliwat",
+       "nextdiff": "Labing bag-o nga pagliwat →",
+       "file-info-size": "$1 × $2 piksel, kadakuon sang tangkas: $3, sahi sang MIME: $4",
        "file-nohires": "Wala sang yara na taas nga resolusyon.",
        "svg-long-desc": "SVG file, nominalya $1 × $2 piksels, kadakuon sang file: $3",
        "show-big-image": "Kabilogan nga resolusyon",
        "ilsubmit": "Pangita-a",
        "bad_image_list": "Ang sulundan nga sulundon:\n\nAmo lang gid nga lista sang mga gamit (mga linya nga gasugod sa *)ang ginapasugtan.\nAng una nga tabid sa isa ka linya ay kilanlan naga tabid sa law-ay nga file.\nAno man nga pasunod nga tabid sa parehas nga linya ay ginasugtan bilang eksepsiyon, i.e. mga pahina nga kun diin ang file naga pasunod.",
        "metadata": "Metadata",
-       "metadata-help": "Ang ini nga file may ara dugang nga impormasyon, posible nga gindugang halin sa kamera nga digital ukon skaner para mahimo siya ukon na digitayz siya.\nKung ang ini nga file ginliwat halin sa orihinal nga porma, basi indi gina pakita ang naliwat nga file sang iban nga mga detalye.",
+       "metadata-help": "Ang ini nga tangkas may ara dugang nga hinun-anon, damlag nga gindugang halin sa kamera nga digital ukon skaner agud mahimo ukon mangin digital ini.\nKon ang ini nga tangkas ginliwat humalin sa iya orihinal kahimtangan, ti basi ang iban nga detalye wala nagapakita sang bilog nga ginliwat nga tangkas.",
        "metadata-expand": "Ipakita ang mga dugang nga detalye",
        "metadata-collapse": "Tagu-on ang mga dugang nga detalye",
-       "metadata-fields": "Ang mga imahen sang EXIF metadata fields nga nalista sa ini nga mensahe ay pagadal-on sa mga laragway nga gina pakita sa pahina kun ang metadata table ay narumpag.\nAng iban ay pagataguon sang default.\n* himo\n* modelo\n* datetimeoriginal\n* tyempo sang exposure\n* fnumber\n* isospeedratings\n* focallength\n* artista\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
+       "metadata-fields": "Ang mga metadata field sang mga dagway nga nalista sa ining mensahe igalakip sa dagay-panid sang dagway kon ang latok sang metadata maghabuyo.\nAng iban pagataguon dayon.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
        "exif-software": "Gingamit nga software",
        "exif-exifversion": "Bersyon sang Exif",
        "exif-lightsource": "Ginghalinan sang sanag",
index 2a1a8ac..503adb2 100644 (file)
@@ -29,7 +29,8 @@
                        "לערי ריינהארט",
                        "아라",
                        "Macofe",
-                       "Fraxinus"
+                       "Fraxinus",
+                       "Srdjan m"
                ]
        },
        "tog-underline": "Podcrtane poveznice",
        "notextmatches": "Nema pronađenih stranica prema tekstu članka",
        "prevn": "prethodnih {{PLURAL:$1|$1}}",
        "nextn": "sljedećih {{PLURAL:$1|$1}}",
+       "prev-page": "prethodna stranica",
+       "next-page": "sljedeća stranica",
        "prevn-title": "$1 {{PLURAL:$1|prethodni rezultat|prethodna rezultata|prethodnih rezultata}}",
        "nextn-title": "$1 {{PLURAL:$1|sljedeći rezultat|sljedeća rezultata|sljedećih rezultata}}",
        "shown-title": "Prikaži $1 {{PLURAL:$1|rezultat|rezultata|rezultata}} po stranici",
        "upload-permitted": "Dopušteni {{PLURAL:$2|tip|tipovi}} datoteka: $1.",
        "upload-preferred": "Poželjni {{PLURAL:$2|tip|tipovi}} datoteka: $1.",
        "upload-prohibited": "Zabranjeni {{PLURAL:$2|tip|tipovi}} datoteka: $1.",
-       "uploadlogpage": "Evidencija_postavljanja",
+       "uploadlogpage": "Evidencija postavljanja",
        "uploadlogpagetext": "Dolje je popis nedavno postavljenih slika.",
        "filename": "Ime datoteke",
        "filedesc": "Sažetak",
        "listfiles-delete": "izbriši",
        "listfiles-summary": "Ova stranica pokazuje sve postavljene datoteke.\nKad je filtriran po suradniku, popis prikazuje samo one datoteke čije je posljednje inačice postavio taj suradnik.",
        "listfiles_search_for": "Traži ime slike:",
+       "listfiles-userdoesnotexist": "Suradnički račun \"$1\" nije registriran.",
        "imgfile": "datoteka",
        "listfiles": "Popis slika",
        "listfiles_thumb": "Smanjeni pregled",
index f4231f8..77b3fd3 100644 (file)
        "powersearch-remember": "Lagipen ti napili para kadagiti masakbayan a panagbiruk",
        "search-external": "Akinruar a panagbiruk",
        "searchdisabled": "Nabaldado ti panagbiruk iti {{SITENAME}}.\nMabalinmo itan ti agbiruk idiay Google.\nLaglagipem laeng a dagiti pagsurotan a linaon ti {{SITENAME}} ket mabalin a baak.",
-       "search-error": "Adda maysa a biddut a napasamak bayat nga agbirbiruk:$1",
+       "search-error": "Adda napasamak a biddut bayat nga agbirbiruk: $1",
        "preferences": "Kakaykayatan",
        "mypreferences": "Kakaykayatan",
        "prefs-edits": "Bilang dagiti inurnos:",
index 351f294..d12ede8 100644 (file)
@@ -83,7 +83,8 @@
                        "Toadino2",
                        "Purodha",
                        "TecnoMaster",
-                       "Alexmar983"
+                       "Alexmar983",
+                       "Federico Mugnaini"
                ]
        },
        "tog-underline": "Sottolinea i collegamenti:",
        "badsig": "Errore nella firma non standard, verificare i tag HTML.",
        "badsiglength": "La firma scelta è troppo lunga, non deve superare $1 {{PLURAL:$1|carattere|caratteri}}.",
        "yourgender": "Come riferirsi a te?",
-       "gender-unknown": "Indifferente",
+       "gender-unknown": "Nel menzionarti, il software utilizzerà parole di genere neutrale ogni volta che sarà possibile",
        "gender-male": "È registrato su {{SITENAME}}",
        "gender-female": "È registrata su {{SITENAME}}",
        "prefs-help-gender": "L'impostazione di questa preferenza è opzionale.\nIl software utilizza questo valore per rivolgersi a te e menzionarti agli altri usando il genere grammaticale appropriato.\nQuesta informazione sarà pubblica.",
        "uploadscripted": "Questo file contiene codice HTML o di script, che potrebbe essere interpretato erroneamente da un browser web.",
        "uploaded-script-svg": "Trovato elemento di script \"$1\" nel file caricato in formato SVG.",
        "uploaded-hostile-svg": "Trovato CSS non sicuro nell'elemento di stile del file in formato SVG caricato.",
+       "uploaded-event-handler-on-svg": "Impostazione gestione eventi ed attributi <code>$1=\"$2\"</code> non è consentito in file SGV",
+       "uploaded-href-attribute-svg": "Attributi href <code>&lt;$1 $2=\"$3\"&gt;</code> com un bersaglio non locale (e.g. http://, javascript:, etc) non sono permessi file SGV",
+       "uploaded-href-unsafe-target-svg": "Trovati href ad un bersaglio non sicuro <code>&lt;$1 $2=\"$3\"&gt;</code> caricato nel file SVG",
        "uploaded-image-filter-svg": "Trovato filtro immagine con URL: <code>&lt;$1 $2=\"$3\"&gt;</code> nel file in formato SVG caricato.",
        "uploadscriptednamespace": "Questo file SVG contiene un namespace '$1' non consentito",
        "uploadinvalidxml": "Il codice XML nel file caricato non può essere elaborato.",
index 18b18dd..00ee265 100644 (file)
        "markedaspatrolledtext": "არჩეული ვერსია [[:$1]] მონიშნულია როგორც პატრულირებული",
        "rcpatroldisabled": "ბოლო ცვლილებების პატრულირება აკრძალულია",
        "rcpatroldisabledtext": "ბოლო ცვლილებების პატრულირების შესაძლებლობა ამ მომენტისთვის გათიშულია",
-       "markedaspatrollederror": "შეუძლებელია ამ სტატიის მოhttp://translatewiki.net/w/i.php?title=MediaWiki:Markedaspatrollederror/ka&action=edit&loadgroup=core&loadtask=untranslatedნიშნვნა პატრულირებულად.",
+       "markedaspatrollederror": "შეუძლებელია ამ სტატიის მონიშვნა პატრულირებულად.",
        "markedaspatrollederrortext": "თქვენ უნდა მონიშნოთ ვერსია, რომელიც პატრულირებულად ჩაითვლება.",
        "markedaspatrollederror-noautopatrol": "თქვენ ვერ მონიშნავთ თქვენივე შესწორებებს პატრულირებულად.",
        "markedaspatrollednotify": "ეს ცვლილება გვერდზე „$1“ პატრულირებულად მოინიშნა.",
index 78b706e..f41a574 100644 (file)
@@ -42,7 +42,7 @@
        "tog-shownumberswatching": "បង្ហាញ​ចំនួនអ្នកប្រើប្រាស់​ដែលតាមដាន​ទំព័រនេះ",
        "tog-oldsig": "ហត្ថលេខាមានហើយ៖",
        "tog-fancysig": "ចុះហត្ថលេខា​ជា​អត្ថបទវិគី​ (ដោយ​គ្មានតំណភ្ជាប់​ស្វ័យប្រវត្តិ)",
-       "tog-uselivepreview": "ប្រើប្រាស់​ការមើលមុនរហ័ស (ស្ថិតក្រោមការពិសោធន៍នៅឡើយ)",
+       "tog-uselivepreview": "ប្រើប្រាស់​ការមើលមុនរហ័ស",
        "tog-forceeditsummary": "សូមរំលឹកខ្ញុំ​កាលបើខ្ញុំទុកប្រអប់ចំណារពន្យល់ឱ្យនៅទំនេរ",
        "tog-watchlisthideown": "លាក់​កំណែប្រែ​របស់ខ្ញុំ​ពី​បញ្ជីតាមដាន",
        "tog-watchlisthidebots": "លាក់កំណែប្រែ​របស់​រូបយន្ត​ពី​បញ្ជីតាមដាន",
        "disclaimers": "ការបដិសេធ",
        "disclaimerpage": "Project:ការបដិសេធ​ទូទៅ",
        "edithelp": "ជំនួយ​ក្នុងការកែប្រែ",
+       "helppage-top-gethelp": "ជំនួយ​",
        "mainpage": "ទំព័រដើម",
        "mainpage-description": "ទំព័រដើម",
        "policy-url": "Project:គោលការណ៍",
        "viewsourcetext": "អ្នកអាចមើលនិងចម្លងកូដរបស់ទំព័រនេះ៖",
        "viewyourtext": "អ្នកអាចមើលនិងចម្លងកូដរបស់'''ការកែប្រែរបស់អ្នក'''មកកាន់ទំព័រនេះ៖",
        "protectedinterface": "ទំព័រនេះផ្ដល់នូវអត្ថបទអន្តរមុខសម្រាប់សូហ្វវែរនៅក្នុងវិគីនេះ និងត្រូវបានចាក់សោដើម្បីចៀសវាងការបំពាន។\nដើម្បីបន្ថែមឬផ្លាស់ប្ដូរការបកប្រែសំរាប់វិគីទាំងអស់ សូមប្រើប្រាស់ [//translatewiki.net/ translatewiki.net] ដែលជាគំរោងបកប្រែរបស់MediaWiki។",
-       "editinginterface": "'''ប្រយ័ត្ន៖''' អ្នកកំពុងតែកែប្រែទំព័រដែលបានប្រើប្រាស់​ដើម្បីផ្ដល់ជូនអន្តរមុខសម្រាប់សូហ្វវែរ។ បំលាស់ប្ដូរចំពោះទំព័រនេះ​នឹងប៉ះពាល់ដល់ទ្រង់ទ្រាយរបស់ទំព័រអន្តរមុខសំរាប់អ្នកប្រើប្រាស់​ជាច្រើន ដែលប្រើប្រាស់វិគីនេះ។",
+       "editinginterface": "<strong>ប្រយ័ត្ន៖</strong> អ្នកកំពុងតែកែប្រែទំព័រដែលបានប្រើប្រាស់​ដើម្បីផ្ដល់ជូនអន្តរមុខសម្រាប់សូហ្វវែរ។ បន្លាស់ប្ដូរចំពោះទំព័រនេះ​នឹងប៉ះពាល់ដល់ទ្រង់ទ្រាយរបស់ទំព័រអន្តរមុខសំរាប់អ្នកប្រើប្រាស់​ជាច្រើននាក់ ដែលប្រើប្រាស់វិគីនេះ។",
        "translateinterface": "ដើម្បីបន្ថែមឬកែប្រែការបកប្រែសម្រាប់វិគីទាំងអស់ សូមប្រើប្រាស់ [//translatewiki.net/ translatewiki.net] ដែលជាគម្រោងបកប្រែវិគីមេឌា។",
        "cascadeprotected": "ទំព័រនេះត្រូវបានការពារពីការការប្រែដោយសារវាមាន{{PLURAL:$1|ទំព័រ, ដែលមាន}} ដែលត្រូវបានការពារជាមួយជំរើស\"ជាបណ្ដាក់\"៖\n$2",
        "namespaceprotected": "អ្នកមិនមានសិទ្ធិកែប្រែទំព័រក្នុងប្រភេទ'''$1'''ទេ។",
        "wrongpassword": "ពាក្យសម្ងាត់​ដែលបានវាយបញ្ចូល​មិនត្រឹមត្រូវទេ។\n\nសូមព្យាយាម​ម្តងទៀត។",
        "wrongpasswordempty": "ពាក្យសម្ងាត់មិនបានវាយបញ្ចូលទេ។\n\nសូមព្យាយាម​ម្តងទៀត។",
        "passwordtooshort": "ពាក្យសម្ងាត់ត្រូវ​មាន​យ៉ាងតិចណាស់​ {{PLURAL:$1|១ តួអក្សរ|$1តួអក្សរ}}។",
+       "passwordtoolong": "ពាក្យសម្ងាត់មិនអាចវែងជាង{{PLURAL:$1|1 តួ|$1 តួ}}ទេ។",
        "password-name-match": "ពាក្យសម្ងាត់ត្រូវតែខុសគ្នាពីអត្តនាមរបស់អ្នក។",
        "password-login-forbidden": "ហាមប្រាមមិនអោយប្រើអត្តនាមនិងពាក្យសម្ងាត់នេះ។",
        "mailmypassword": "កំណត់​ពាក្យសម្ងាត់​សាឡើងវិញ",
        "preview": "មើលជាមុន",
        "showpreview": "បង្ហាញ​ការមើលជាមុន",
        "showdiff": "បង្ហាញ​បន្លាស់ប្ដូរ",
+       "blankarticle": "<strong>ប្រយ័ត្ន៖</strong> ទំព័រដែលអ្នកកំពុងបង្កើតជាទំព័រទទេ។\nបើសិនជាអ្នកចុច \"{{int:savearticle}}\" ម្ដងទៀត ទំព័រនេះនឹងត្រូវរក្សាទុកដោយគ្មានខ្លឹមសារខាងក្នុង។",
        "anoneditwarning": "'''ប្រយ័ត្ន ៖''' អ្នកមិនបានកត់ឈ្មោះចូល​ទេ។ អាសយដ្ឋានIPរបស់អ្នក​នឹងត្រូវបាន​កត់ត្រាទុក​ក្នុងប្រវត្តិកែប្រែ​នៃទំព័រ​នេះ។ បើសិនជាអ្នក <strong>[$1 កត់ឈ្មោះចូល]</strong> ឬ <strong>[$2 បង្កើតគណនី]</strong> នោះការកែប្រែរបស់អ្នកនឹងត្រូវភ្ចាប់ជាមួយអត្តនាមរបស់អ្នកផង នឹងមានផលប្រយោជន៍ផ្សេងទៀតផង។",
        "anonpreviewwarning": "<em>អ្នកមិនបានកត់ឈ្មោះចូល​ទេ។ ប្រសិនបើអ្នកធ្វើការរក្សាទុក នោះអាសយដ្ឋានIPរបស់អ្នក​នឹងត្រូវបាន​កត់ត្រាទុក​ក្នុងប្រវត្តិកែប្រែ​នៃទំព័រ​នេះ។</em>",
        "missingsummary": "'''រំលឹក៖''' អ្នកមិនទាន់បានផ្ដល់ចំណារពន្យល់អំពីកំណែប្រែនេះទេ។\n\nបើសិនជាអ្នកចុច '''រក្សាទុក''' ម្ដងទៀតនោះកំណែប្រែរបស់អ្នកនឹងត្រូវរក្សាទុកដោយគ្មានចំណារពន្យល់។",
        "missingcommentheader": "'''រំលឹក៖''' អ្នកមិនទាន់បានផ្ដល់ឱ្យនូវ ប្រធានបទ/ចំណងជើង របស់មតិយោបល់នេះទេ។\nបើសិនជាអ្នកចុច \"{{int:savearticle}}\" ម្ដងទៀតនោះកំណែប្រែរបស់អ្នកនឹងត្រូវរក្សាទុកដោយគ្មានវា។",
        "summary-preview": "ការមើលជាមុនរបស់ចំណារពន្យល់:",
        "subject-preview": "ការមើលជាមុនរបស់ប្រធានបទ/ចំណងជើង:",
+       "previewerrortext": "មានបញ្ហាកើតឡើងពេលព្យាយាមើលជាមុនបន្លាស់ប្ដូររបស់អ្នក។",
        "blockedtitle": "អ្នកប្រើនេះត្រូវបានហាមឃាត់ហើយ",
        "blockedtext": "'''ឈ្មោះគណនីឬអាសយដ្ឋានIPរបស់អ្នកស្ថិតក្រោមការហាមឃាត់ហើយ។'''\n\nការហាមឃាត់ត្រូវបានធ្វើដោយ $1\n\nដោយសំអាងលើហេតុផល ''$2''។\n\n\n* ចាប់ផ្ដើមការហាមឃាត់ ៖ $8\n* ផុតកំណត់ការហាមឃាត់ ៖ $6\n* គណនីហាមឃាត់់ ៖ $7\n\n\nអ្នកអាចទាក់ទងទៅ $1 ឬ [[{{MediaWiki:Grouppage-sysop}}|អ្នកអភិបាល]]ដទៃទៀតដើម្បីពិភាក្សាពីការហាមឃាត់នេះ ។\n\nអ្នកមិនអាចប្រើប្រាស់មុខងារ \"អ៊ីមែលទៅអ្នកប្រើប្រាស់នេះ\" បានទេ លើកលែងតែអាសយដ្ឋានអ៊ីមែលត្រឹមត្រូវមួយ​ត្រូវបានផ្ដល់អោយក្នុង[[Special:Preferences|ចំណង់ចំណូលចិត្ត]]​របស់លោកអ្នកហើយលោកអ្នកមិនត្រូវបានគេហាមឃាត់មិនឱ្យប្រើប្រាស់មុខងារនោះ។\n\nអាសយដ្ឋានIPបច្ចុប្បន្នរបស់លោកអ្នកគឺ $3 និងអត្តលេខហាមឃាត់គឺ #$5 ។\n\nសូមបញ្ចូលព័ត៌មានលំអិតទាំងអស់ខាងលើនេះ ក្នុងអ៊ីមែលទាក់ទងនឹងបញ្ហានេះ។",
        "autoblockedtext": "អាសយដ្ឋានIPរបស់អ្នកបានត្រូវហាមឃាត់ដោយស្វ័យប្រវត្តិ ព្រោះវាត្រូវបានប្រើប្រាស់ដោយអ្នកប្រើប្រាស់ម្នាក់ទៀត ដែលត្រូវបានហាមឃាត់ដោយ $1 ។\n\nមូលហេតុលើកឡើង៖\n\n:''$2''\n\n* ការចាប់ផ្តើមហាមឃាត់៖ $8\n* ពេលផុតកំណត់ហាមឃាត់៖ $6\n* គណនីហាមឃាត់៖ $7\n\nអ្នកអាចទាក់ទង $1 ឬ[[{{MediaWiki:Grouppage-sysop}}|អ្នកអភិបាល]]ណាម្នាក់ ដើម្បីពិភាក្សាអំពីការហាមឃាត់នេះ។\n\nសូមកត់សម្គាល់ថាអ្នកមិនអាចប្រើប្រាស់មុខងារ \"អ៊ីមែលអ្នកប្រើប្រាស់នេះ\" បានទេ លុះត្រាតែមានអាសយដ្ឋានអ៊ីមែលត្រឹមត្រូវមួយ បានចុះឈ្មោះក្នុង[[Special:Preferences|ចំណង់ចំណូលចិត្ត]]របស់អ្នក ហើយអ្នកមិនត្រូវបានហាមឃាត់មិនឱ្យប្រើប្រាស់មុខងារនោះ ។\n\nអាសយដ្ឋានIPបច្ចុប្បន្នរបស់អ្នកគឺ $3។ អត្តលេខហាមឃាត់គឺ #$5។\nសូមបញ្ចូលព័ត៌មានលំអិតទាំងអស់ខាងលើនេះ ក្នុងអ៊ីមែលទាក់ទងនឹងបញ្ហានេះ។",
        "history-feed-empty": "ទំព័រដែលអ្នកបានស្នើមិនមានទេ។\nប្រហែលជាវាត្រូវបានគេលុបចោលពីវីគីឬ​ត្រូវបានគេដាក់ឈ្មោះថ្មី។\nសូមសាក [[Special:Search|ស្វែងរកនៅក្នុងវិគី]] ដើម្បីរកទំព័រថ្មីដែលមានការទាក់ទិន។",
        "rev-deleted-comment": "(ចំណារពន្យល់ត្រូវបានដកចេញ)",
        "rev-deleted-user": "(អត្តនាមត្រូវបានលុបចេញ)",
-       "rev-deleted-event": "(á\9e\80á\9f\86á\9e\8eá\9e\8fá\9f\8bá\9e á\9f\81á\9e\8fá\9e»á\9e\9fá\9e\80á\9e\98á\9f\92á\9e\98á\9e\97á\9e¶á\9e\96ត្រូវបានដកចេញ)",
+       "rev-deleted-event": "(á\9e\9fá\9f\81á\9e\85á\9e\80á\9f\92á\9e\8aá\9e¸á\9e\9bá\9e\98á\9f\92á\9e¢á\9e·á\9e\8fá\9e¢á\9f\86á\9e\96á\9e¸á\9e\80á\9f\86á\9e\8eá\9e\8fá\9f\8bá\9e á\9f\81á\9e\8fá\9e»ត្រូវបានដកចេញ)",
        "rev-deleted-user-contribs": "[បានលុបចេញអត្តនាមឬអាសដ្ឋានIP នេះហើយ - ការកែប្រែលាក់មិនអោយអ្នករួមចំណែកដទៃមើលឃើញ]",
        "rev-deleted-text-permission": "កំណែ​ប្រែ​នៃ​ទំព័រ​នេះ​ត្រូវ​បាន'''​លុបចោល'''​។\nប្រហែល​ជា​មាន​ព័ត៌មាន​លម្អិត​នៅ​ក្នុង​[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} កំណត់​ហេតុ​នៃ​ការ​លុប​ចោល]។",
        "rev-deleted-text-unhide": "កំណែ​ប្រែ​នៃ​ទំព័រ​នេះ​ត្រូវ​បាន'''​លុបចោល'''​។\nប្រហែល​ជា​មាន​ព័ត៌មាន​លម្អិត​នៅ​ក្នុង​[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} កំណត់​ហេតុ​នៃ​ការ​លុបចោល​]។\nអ្នក​នៅ​តែ​អាច​[$1 មើល​កំណែ​នេះ​]ប្រសិន​បើ​អ្នក​ចង់​។",
        "revdelete-legend": "ដាក់កំហិតគំហើញ",
        "revdelete-hide-text": "បិទបាំងអត្ថបទកំណែប្រែ",
        "revdelete-hide-image": "បិទបាំងខ្លឹមសារនៃឯកសារ",
-       "revdelete-hide-name": "á\9e\94á\9e·á\9e\91á\9e\94á\9e¶á\9f\86á\9e\84á\9e\9fá\9e\80á\9e\98á\9f\92á\9e\98á\9e\97á\9e¶á\9e\96á\9e\93á\9e·á\9e\84á\9e\82á\9f\84á\9e\9bá\9e\8aá\9f\85",
+       "revdelete-hide-name": "á\9e\9bá\9e¶á\9e\80á\9f\8bá\9e\82á\9f\84á\9e\9bá\9e\8aá\9f\85á\9e\93á\9e·á\9e\84á\9e\94á\9f\89á\9e¶á\9e\9aá\9f\89á\9e¶á\9e\98á\9f\89á\9f\82á\9e\8f",
        "revdelete-hide-comment": "កែប្រែចំណារពន្យល់",
        "revdelete-hide-user": "អត្តនាម​ឬអាសយដ្ឋានIPរបស់អ្នកកែប្រែ",
        "revdelete-hide-restricted": "ដាក់កំហិត​ទិន្នន័យ​ពី​អ្នកអភិបាល ក៏​ដូចជា​អ្នក​ដទៃ​ទៀត",
        "notextmatches": "គ្មានអត្ថបទទំព័រណាមួយដែលមានខ្លឹមសារផ្គូផ្គងនឹងឃ្លាឬពាក្យនេះទេ",
        "prevn": "មុន {{PLURAL:$1|$1}}",
        "nextn": "បន្ទាប់ {{PLURAL:$1|$1}}",
+       "prev-page": "ទំព័រមុន",
+       "next-page": "ទំព័របន្ទាប់",
        "prevn-title": "$1 {{PLURAL:$1|លទ្ធផល|លទ្ធផល}}មុន",
        "nextn-title": "$1 {{PLURAL:$1|លទ្ឋផល|លទ្ឋផល}}​បន្ទាប់​",
        "shown-title": "បង្ហាញ $1 {{PLURAL:$1|លទ្ធផល|លទ្ធផល}}ក្នុងមួយទំព័រ",
        "powersearch-togglelabel": "គូសធីក៖",
        "powersearch-toggleall": "ទាំងអស់",
        "powersearch-togglenone": "ទទេ",
+       "powersearch-remember": "ចងចាំការជ្រើសរើសសម្រាប់ការស្វែងរកលើកក្រោយ",
        "search-external": "ស្វែងរកនៅខាងក្រៅ",
        "searchdisabled": "ឧបករណ៍​ស្វែងរក​របស់​{{SITENAME}} មិនបានអនុញ្ញាត​។\nក្នុង​ពេល​ឥឡូវ​នេះ​ អ្នកអាច​ស្វែង​រក​តាម​រយៈ​ Google បាន​។\nសូមចងចាំ​ថា​ លិបិក្រម​នៃ​មាតិការ​របស់​{{SITENAME}} អាចហួស​សម័យ​។​",
        "search-error": "មានបញ្ហាពេលកំពុងស្វែងរក៖ $1",
        "prefs-personal": "ប្រវត្តិរូប",
        "prefs-rc": "បន្លាស់​ប្ដូរ​ថ្មីៗ",
        "prefs-watchlist": "បញ្ជីតាមដាន",
+       "prefs-editwatchlist": "កែប្រែបញ្ជីតាមដាន",
+       "prefs-editwatchlist-label": "កែប្រែវត្ថុនៅក្នុងទំព័រតាមដានរបស់អ្នក",
+       "prefs-editwatchlist-edit": "មើលនិងដកចេញចំណងជើងនានានៅក្នុងបញ្ជីតាមដានរបស់អ្នក",
+       "prefs-editwatchlist-raw": "កែប្រែបញ្ជីតាមដានឆៅ",
+       "prefs-editwatchlist-clear": "ជម្រះបញ្ចីតាមដានរបស់អ្នក",
        "prefs-watchlist-days": "ចំនួនថ្ងៃត្រូវបង្ហាញក្នុងបញ្ជីតាមដាន៖",
        "prefs-watchlist-days-max": "អតិបរមា $1 {{PLURAL:$1|ថ្ងៃ|ថ្ងៃ}}",
        "prefs-watchlist-edits": "ចំនួនអតិបរមានៃបំលាស់ប្តូរត្រូវបង្ហាញក្នុងបញ្ជីតាមដានដែលបានពង្រីក៖",
        "guesstimezone": "បំពេញពីកម្មវិធីរាវរក",
        "timezoneregion-africa": "អាហ្វ្រិក",
        "timezoneregion-america": "អាមេរិក",
-       "timezoneregion-antarctica": "á\9e¢á\9e\84á\9f\8bá\9e\8fá\9e¶á\9e\80á\9e\8fិក",
-       "timezoneregion-arctic": "á\9e¢á\9e¶á\9e\80á\9e\8fិក",
+       "timezoneregion-antarctica": "á\9e¢á\9e\84á\9f\8bá\9e\8fá\9e¶á\9e\80á\9e\91ិក",
+       "timezoneregion-arctic": "á\9e¢á\9e¶á\9e\80á\9e\91ិក",
        "timezoneregion-asia": "អាស៊ី",
        "timezoneregion-atlantic": "មហាសមុទ្រអាត្លង់ទិក",
        "timezoneregion-australia": "អូស្ត្រាលី",
        "prefs-info": "ព័ត៌មានផ្ទាល់​ខ្លួន",
        "prefs-i18n": "ភាសា",
        "prefs-signature": "ហត្ថលេខា​",
-       "prefs-dateformat": "á\9e\91á\9f\86រង់កាលបរិច្ឆេទ",
-       "prefs-timeoffset": "á\9e\80á\9f\82á\9e\94á\9f\92á\9e\9aá\9f\82ម៉ោង",
+       "prefs-dateformat": "á\9e\91á\9e\98á\9f\92រង់កាលបរិច្ឆេទ",
+       "prefs-timeoffset": "á\9e\82á\9e\98á\9f\92á\9e\9bá\9e¶á\9e\8fម៉ោង",
        "prefs-advancedediting": "ជម្រើសទូទៅ​",
        "prefs-editor": "អ្នកកែប្រែ",
        "prefs-preview": "មើលជាមុន",
-       "prefs-advancedrc": "á\9e\87á\9f\86រើសថ្នាក់ខ្ពស់",
-       "prefs-advancedrendering": "á\9e\87á\9f\86រើសថ្នាក់ខ្ពស់",
-       "prefs-advancedsearchoptions": "á\9e\87á\9f\86រើសថ្នាក់ខ្ពស់",
-       "prefs-advancedwatchlist": "á\9e\87á\9f\86រើសថ្នាក់ខ្ពស់",
-       "prefs-displayrc": "á\9e\87á\9f\86រើសការបង្ហាញ",
-       "prefs-displaywatchlist": "á\9e\87á\9f\86រើសការបង្ហាញ",
+       "prefs-advancedrc": "á\9e\87á\9e\98á\9f\92រើសថ្នាក់ខ្ពស់",
+       "prefs-advancedrendering": "á\9e\87á\9e\98á\9f\92រើសថ្នាក់ខ្ពស់",
+       "prefs-advancedsearchoptions": "á\9e\87á\9e\98á\9f\92រើសថ្នាក់ខ្ពស់",
+       "prefs-advancedwatchlist": "á\9e\87á\9e\98á\9f\92រើសថ្នាក់ខ្ពស់",
+       "prefs-displayrc": "á\9e\87á\9e\98á\9f\92រើសការបង្ហាញ",
+       "prefs-displaywatchlist": "á\9e\87á\9e\98á\9f\92រើសការបង្ហាញ",
        "prefs-tokenwatchlist": "កូនសោរ",
        "prefs-diffs": "ភាពខុសគ្នា",
        "prefs-help-prefershttps": "ចំណង់ចំណូលចិត្តនេះនឹងមានប្រសិទ្ធិភាពពេលអ្នកកត់ឈ្មោះចូលលើកក្រោយ។",
        "userrights-lookup-user": "គ្រប់គ្រងក្រុមអ្នកប្រើប្រាស់",
        "userrights-user-editname": "បញ្ចូលអត្តនាម៖",
        "editusergroup": "កែប្រែក្រុមអ្នកប្រើប្រាស់",
-       "editinguser": "á\9e\94á\9f\92á\9e\8aá\9e¼á\9e\9aá\9e\9fá\9e·á\9e\91á\9f\92á\9e\92á\9e\9aá\9e\94á\9e\9fá\9f\8bá\9e¢á\9f\92á\9e\93á\9e\80á\9e\94á\9f\92á\9e\9aá\9e¾á\9e\94á\9f\92á\9e\9aá\9e¶á\9e\9fá\9f\8b '''[[User:$1|$1]]''' $2",
+       "editinguser": "á\9e\94á\9f\92á\9e\8aá\9e¼á\9e\9aá\9e\9fá\9e·á\9e\91á\9f\92á\9e\92á\9e·á\9e\9aá\9e\94á\9e\9fá\9f\8b{{GENDER:$1|á\9e¢á\9f\92á\9e\93á\9e\80á\9e\94á\9f\92á\9e\9aá\9e¾á\9e\94á\9f\92á\9e\9aá\9e¶á\9e\9fá\9f\8b}} <strong>[[User:$1|$1]]</strong> $2",
        "userrights-editusergroup": "កែប្រែក្រុមអ្នកប្រើប្រាស់",
        "saveusergroups": "រក្សាក្រុមអ្នកប្រើប្រាស់ទុក",
        "userrights-groupsmember": "ក្រុមសមាជិកភាព៖",
        "right-protect": "ប្ដូរកម្រិតការពាររួចកែប្រែទំព័រដែលបានការពារជាថ្នាក់",
        "right-editprotected": "កែប្រែទំព័រដែលបានការពារដោយ \"{{int:protect-level-sysop}}\"",
        "right-editsemiprotected": "កែប្រែទំព័រដែលបានការពារដោយ \"{{int:protect-level-autoconfirmed}}\"",
+       "right-editcontentmodel": "កែប្រែខ្លឹមសារគំរូរបស់ទំព័រមួយ",
        "right-editinterface": "កែប្រែអន្តរមុខអ្នកប្រើប្រាស់",
        "right-editusercssjs": "កែប្រែឯកសារ CSS និង JS របស់អ្នកប្រើប្រាស់ផ្សេងទៀត",
        "right-editusercss": "កែប្រែឯកសារ CSS របស់អ្នកប្រើប្រាស់ផ្សេងទៀត",
        "action-createpage": "បង្កើតទំព័រនានា",
        "action-createtalk": "បង្កើតទំព័រពិភាក្សានានា",
        "action-createaccount": "បង្កើតគណនីអ្នកប្រើប្រាស់នេះ",
+       "action-history": "មើលប្រវត្តិទំព័រនេះ",
        "action-minoredit": "ចំណាំកំណែប្រែនេះថាជាកំណែប្រែតិចតួច",
        "action-move": "ប្ដូរទីតាំងទំព័រនេះ",
        "action-move-subpages": "ប្ដូរទីតាំងទំព័រនេះព្រមទាំងអនុទំព័ររបស់វា",
        "action-viewmywatchlist": "មើលបញ្ជីតាមដានរបស់អ្នក",
        "action-viewmyprivateinfo": "មើលព័ត៌មានឯកជនរបស់អ្នក",
        "action-editmyprivateinfo": "កែប្រែព័ត៌មានឯកជនរបស់អ្នក",
+       "action-editcontentmodel": "កែប្រែខ្លឹមសារគំរូរបស់ទំព័រមួយ",
        "nchanges": "$1 {{PLURAL:$1|បន្លាស់ប្ដូរ|បន្លាស់ប្ដូរ}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|គិតតាំងពីការបើកមើលចុងក្រោយ}}",
        "enhancedrc-history": "ប្រវត្តិ",
-       "recentchanges": "á\9e\94á\9f\86លាស់ប្ដូរថ្មីៗ",
+       "recentchanges": "á\9e\94á\9e\93á\9f\92លាស់ប្ដូរថ្មីៗ",
        "recentchanges-legend": "ជម្រើសនានា​ សម្រាប់ការបង្ហាញបន្លាស់ប្ដូរថ្មីៗ",
        "recentchanges-summary": "តាមដានរាល់បំលាស់ប្ដូរថ្មីៗបំផុតចំពោះវិគីនៅលើទំព័រនេះ។",
+       "recentchanges-noresult": "គ្មានកំណែប្រែក្នុងរយៈពេលដែលបានផ្ដល់អោយដែលត្រូវនឹងលក្ខខណ្ឌទាំងនេះទេ។",
        "recentchanges-feed-description": "តាមដាន​បន្លាស់ប្ដូរថ្មីៗ​បំផុត​នៃ​វិគី​នេះក្នុង​មតិព័ត៌មាន​នេះ​។",
        "recentchanges-label-newpage": "ការកែប្រែនេះបានបង្កើតទំព័រថ្មីមួយ",
        "recentchanges-label-minor": "នេះជាការកែប្រែតិចតួចមួយប៉ុណ្ណោះ",
        "recentchanges-label-plusminus": "ទំហំទំព័រត្រូវបានផ្លាស់ប្ដូរគិតជាចំនួនបៃ",
        "recentchanges-legend-heading": "''កំណត់សម្គាល់៖'''",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (មើលផងដែរនូវ [[Special:NewPages|បញ្ជីទំព័រថ្មី]])",
-       "rcnotefrom": "ខាងក្រោមនេះជាបន្លាស់ប្ដូរនានាគិតចាប់តាំងពី '''$2''' (បង្ហាញអតិបរមាចំនួន '''$1''')។",
+       "rcnotefrom": "ខាងក្រោមនេះជាបន្លាស់ប្ដូរនានាគិតចាប់តាំងពី <strong>$4 $3</strong> (បង្ហាញអតិបរមាចំនួន <strong>$1</strong>)។",
        "rclistfrom": "បង្ហាញបន្លាស់ប្ដូរថ្មីៗចាប់តាំងពី $3 $2",
        "rcshowhideminor": "$1កំណែប្រែ​តិចតួច",
        "rcshowhideminor-show": "បង្ហាញ​",
        "show": "បង្ហាញ",
        "minoreditletter": "តិច",
        "newpageletter": "ថ្មី",
-       "boteditletter": "á\9e\9aá\9e¼á\9e\94á\9e\99á\9e\93á\9f\92á\9e\8f",
+       "boteditletter": "យន្ត",
        "number_of_watching_users_pageview": "[មាន{{PLURAL:$1|អ្នកប្រើប្រាស់|អ្នកប្រើប្រាស់}}$1នាក់កំពុងមើល]",
        "rc_categories": "កម្រិតទីតាំងចំណាត់ថ្នាក់ក្រុម(ខណ្ឌដោយសញ្ញា \"|\")",
        "rc_categories_any": "មួយណាក៏បាន",
        "license": "អាជ្ញាបណ្ណ",
        "license-header": "ការដាក់​អាជ្ញាប័ណ្ណ",
        "nolicense": "គ្មាន",
+       "licenses-edit": "កែប្រែជម្រើសអាជ្ញាប័ណ្ឌ",
        "license-nopreview": "(មិនទាន់មានការបង្ហាញការមើលជាមុនទេ)",
-       "upload_source_url": "(URL ត្រឹមត្រូវនិងបើកចំហជាសាធារណៈ)",
-       "upload_source_file": "(ឯកសារក្នុងកុំព្យូទ័ររបស់អ្នក)",
+       "upload_source_url": "(ឯកសារដែលអ្នកជ្រើសរើសពីURLត្រឹមត្រូវនិងបើកចំហជាសាធារណៈ)",
+       "upload_source_file": "(á\9e¯á\9e\80á\9e\9fá\9e¶á\9e\9aá\9e\8aá\9f\82á\9e\9bá\9e¢á\9f\92á\9e\93á\9e\80á\9e\87á\9f\92á\9e\9aá\9e¾á\9e\9aá\9e¾á\9e\9fá\9e\96á\9e¸á\9e\80á\9f\92á\9e\93á\9e»á\9e\84á\9e\80á\9e»á\9f\86á\9e\96á\9f\92á\9e\99á\9e¼á\9e\91á\9f\90á\9e\9aá\9e\9aá\9e\94á\9e\9fá\9f\8bá\9e¢á\9f\92á\9e\93á\9e\80)",
        "listfiles-delete": "លុបចោល",
        "listfiles-summary": "ទំព័រពិសេស​នេះ​បង្ហាញ​គ្រប់​ឯកសារ​ដែល​បានផ្ទុកឡើង។",
        "listfiles_search_for": "ស្វែងរកឈ្មោះមេឌា៖",
+       "listfiles-userdoesnotexist": "គណនីអ្នកប្រើប្រាស់ដែលមានឈ្មោះ \"$1\"មិនទាន់បានចុះឈ្មោះទេ។",
        "imgfile": "ឯកសារ",
        "listfiles": "បញ្ជីរូបភាព",
        "listfiles_thumb": "កូនរូបភាព",
        "download": "ទាញយក",
        "unwatchedpages": "ទំព័រមិនត្រូវបានតាមដាន",
        "listredirects": "បញ្ជីនៃការបញ្ជូនបន្ត",
+       "listduplicatedfiles": "បញ្ជីឯកសារជាន់គ្នា",
        "unusedtemplates": "ទំព័រគំរូ​ដែលលែងត្រូវបានប្រើ",
        "unusedtemplatestext": "ទំព័រ​នេះ​មាន​រាយ​នាម​ទំព័រ​ទាំង​អស់​នៅ​ក្នុង​ប្រភេទ​{{ns:template}} ដែល​មិន​បាន​រាប់​បញ្ជូល​ក្នុង​ទំព័រ​ដទៃ​ទៀត​។\nសូម​ចងចាំ​ក្នុង​ការ​ត្រួត​ពិនិត្យ​​តំណ​ភ្ជាប់​ផ្សេង​ៗ​ទៀត​ដែល​ភ្ជាប់​មក​ទំព័រ​គំរូ​មុន​នឹង​លុប​វា​ចោល​។",
        "unusedtemplateswlh": "តំណភ្ជាប់ផ្សេងៗទៀត",
        "randomincategory": "ទំព័រចៃដន្យក្នុងចំណាត់ថ្នាក់ក្រុម",
        "randomincategory-invalidcategory": "\"$1\" មិនមែនជាឈ្មោះចំណាតក្រុមត្រឹមត្រូវ។",
        "randomincategory-nopages": "គ្មានទំព័រណាមួយក្នុងចំណាត់ថ្នាក់ក្រុម [[:Category:$1|$1]] ទេ។",
+       "randomincategory-category": "ចំណាត់ថ្នាក់ក្រុម៖",
+       "randomincategory-legend": "ទំព័រចៃដន្យក្នុងចំណាត់ថ្នាក់ក្រុម",
        "randomredirect": "ទំព័របញ្ជូនបន្តចៃដន្យ",
        "randomredirect-nopages": "គ្មានទំព័របញ្ជូនបន្តណាមួយនៅក្នុងប្រភេទ \"$1\" ទេ។",
        "statistics": "ស្ថិតិ",
        "ninterwikis": "$1 {{PLURAL:$1|អន្តរវិគី|អន្តរវិគី}}",
        "nlinks": "$1 {{PLURAL:$1|តំណភ្ជាប់|តំណភ្ជាប់}}",
        "nmembers": "$1{{PLURAL:$1|សមាជិក|សមាជិក}}",
+       "nmemberschanged": "$1 → $2 {{PLURAL:$2|សមាជិក|សមាជិក}}",
        "nrevisions": "$1 {{PLURAL:$1|កំណែប្រែ}}",
        "nviews": "$1 {{PLURAL:$1|ការចូលមើល}}",
        "nimagelinks": "ត្រូវបានប្រើនៅលើទំព័រចំនួន $1។",
        "ntransclusions": "ត្រូវបានប្រើនៅលើទំព័រចំនួន $1",
        "specialpage-empty": "គ្មានលទ្ធផលសម្រាប់របាយណ៍នេះទេ។",
        "lonelypages": "ទំព័រកំព្រា",
-       "lonelypagestext": "ទំព័រដូចតទៅនេះមិនត្រូវបានភ្ជាប់ពីទំព័រដទៃនៅក្នុង {{SITENAME}}ទេ។",
+       "lonelypagestext": "á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\8aá\9e¼á\9e\85á\9e\8fá\9e\91á\9f\85á\9e\93á\9f\81á\9f\87á\9e\98á\9e·á\9e\93á\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\94á\9e¶á\9e\93á\9e\97á\9f\92á\9e\87á\9e¶á\9e\94á\9f\8bá\9e¬á\9e\99á\9f\84á\9e\84á\9e\98á\9e\80á\9e\96á\9e¸á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\8aá\9e\91á\9f\83á\9e\93á\9f\85á\9e\80á\9f\92á\9e\93á\9e»á\9e\84 {{SITENAME}}á\9e\91á\9f\81á\9f\94",
        "uncategorizedpages": "ទំព័រគ្មានចំណាត់ថ្នាក់ក្រុម",
        "uncategorizedcategories": "ចំណាត់ថ្នាក់ក្រុមដែលមិនត្រូវបានចាត់ជាថ្នាក់",
        "uncategorizedimages": "រូបភាពគ្មានចំណាត់ថ្នាក់ក្រុម",
        "uncategorizedtemplates": "ទំព័រគំរូគ្មានចំណាត់ថ្នាក់ក្រុម",
-       "unusedcategories": "á\9e\85á\9f\86á\9e\8eá\9e¶á\9e\8fá\9f\8bá\9e\90á\9f\92á\9e\93á\9e¶á\9e\80á\9f\8bá\9e\80á\9f\92á\9e\9aá\9e»á\9e\98á\9e\8aá\9f\82á\9e\9bá\9e\98á\9e·á\9e\93á\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\94á\9e¶á\9e\93á\9e\94á\9f\92á\9e\9aá\9e¾á\9e\94á\9f\92á\9e\9aá\9e¶á\9e\9fá\9f\8b",
-       "unusedimages": "ឯកសារ(មេឌា​ រូបភាព)ដែលមិនត្រូវបានប្រើប្រាស់",
-       "wantedcategories": "á\9e\85á\9f\86á\9e\8eá\9e¶á\9e\8fá\9f\8bá\9e\90á\9f\92á\9e\93á\9e¶á\9e\80á\9f\8bá\9e\80á\9f\92á\9e\9aá\9e»á\9e\98á\9e\8aá\9f\82á\9e\9bá\9e\82á\9f\92á\9e\9aá\9e\94á\9f\8bá\9e\82á\9f\92á\9e\93á\9e¶á\9e\85á\9e\84á\9f\8bá\9e\94á\9e¶á\9e\93",
-       "wantedpages": "á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aâ\80\8bá\9e\8aá\9f\82á\9e\9bâ\80\8bá\9e\82á\9f\92á\9e\9aá\9e\94á\9f\8bá\9e\82á\9f\92á\9e\93á\9e¶â\80\8bá\9e\85á\9e\84á\9f\8bá\9e\94á\9e¶á\9e\93",
+       "unusedcategories": "á\9e\85á\9f\86á\9e\8eá\9e¶á\9e\8fá\9f\8bá\9e\90á\9f\92á\9e\93á\9e¶á\9e\80á\9f\8bá\9e\80á\9f\92á\9e\9aá\9e»á\9e\98á\9e\98á\9e·á\9e\93á\9e\94á\9f\92á\9e\9aá\9e¾",
+       "unusedimages": "ឯកសារមិនប្រើ",
+       "wantedcategories": "á\9e\85á\9f\86á\9e\8eá\9e¶á\9e\8fá\9f\8bá\9e\90á\9f\92á\9e\93á\9e¶á\9e\80á\9f\8bá\9e\80á\9f\92á\9e\9aá\9e»á\9e\98á\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\80á\9e¶á\9e\9a",
+       "wantedpages": "á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aâ\80\8bá\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\80á\9e¶á\9e\9a",
        "wantedpages-badtitle": "ចំណងជើង​មិន​ត្រឹមត្រូវ​នៅ​ក្នុង​សំនុំ​លទ្ធផល​៖ $1",
-       "wantedfiles": "á\9e¯á\9e\80á\9e\9fá\9e¶á\9e\9aá\9e\85á\9e\84á\9f\8bá\9e\94á\9e¶á\9e\93",
-       "wantedtemplates": "á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\82á\9f\86á\9e\9aá\9e¼á\9e\85á\9e\84á\9f\8bá\9e\94á\9e¶á\9e\93",
+       "wantedfiles": "á\9e¯á\9e\80á\9e\9fá\9e¶á\9e\9aá\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\80á\9e¶á\9e\9a",
+       "wantedtemplates": "á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\82á\9f\86á\9e\9aá\9e¼á\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\80á\9e¶á\9e\9a",
        "mostlinked": "ទំព័រដែលត្រូវបានតភ្ជាប់មកច្រើនបំផុត",
        "mostlinkedcategories": "ចំណាត់ថ្នាក់ក្រុមដែលត្រូវបានតភ្ជាប់មកច្រើនបំផុត",
        "mostlinkedtemplates": "ទំព័រគំរូ​ដែលត្រូវបានប្រើប្រាស់​ច្រើនបំផុត",
        "deadendpages": "ទំព័រ​ទាល់",
        "deadendpagestext": "ទំព័រដូចតទៅនេះមិនតភ្ជាប់ទៅទំព័រដទៃទៀតក្នុង {{SITENAME}} ទេ។",
        "protectedpages": "ទំព័រដែលត្រូវបានការពារ",
-       "protectedpages-indef": "á\9e\9fá\9f\86រាប់តែការការពារដែលមិនកំណត់ប៉ុណ្ណោះ",
-       "protectedpages-summary": "á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\93á\9f\81á\9f\87á\9e\9aá\9e¶á\9e\99á\9e\94á\9e\89á\9f\92á\9e\87á\9e¸á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\8aá\9f\82á\9e\9bá\9e\80á\9f\86á\9e\96á\9e»á\9e\84á\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\94á\9e¶á\9e\93á\9e\80á\9e¶á\9e\9aá\9e\96á\9e¶á\9e\9aá\9f\94 á\9e\9fá\9e\98á\9f\92á\9e\9aá\9e¶á\9e\94á\9f\8bá\9e\94á\9e\89á\9f\92á\9e\87á\9e¸á\9e\85á\9f\86á\9e\8eá\9e\84á\9e\87á\9e¾á\9e\84á\9e\91á\9e¶á\9f\86á\9e\84á\9e¡á\9e¶á\9e\99á\9e\8aá\9f\82á\9e\9bá\9e\9fá\9f\92á\9e\90á\9e·á\9e\93នៅក្រោមការការពារមិនអោយបង្កើត សូមមើលនៅ [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]]។",
-       "protectedpages-cascade": "á\9e\9fá\9f\86រាប់ការការពារជាថ្នាក់ប៉ុណ្ណោះ​",
+       "protectedpages-indef": "á\9e\9fá\9e\98á\9f\92រាប់តែការការពារដែលមិនកំណត់ប៉ុណ្ណោះ",
+       "protectedpages-summary": "á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\93á\9f\81á\9f\87á\9e\9aá\9e¶á\9e\99á\9e\94á\9e\89á\9f\92á\9e\87á\9e¸á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\8aá\9f\82á\9e\9bá\9e\80á\9f\86á\9e\96á\9e»á\9e\84á\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\94á\9e¶á\9e\93á\9e\80á\9e¶á\9e\9aá\9e\96á\9e¶á\9e\9aá\9f\94 á\9e\9fá\9e\98á\9f\92á\9e\9aá\9e¶á\9e\94á\9f\8bá\9e\94á\9e\89á\9f\92á\9e\87á\9e¸á\9e\85á\9f\86á\9e\8eá\9e\84á\9e\87á\9e¾á\9e\84á\9e\91á\9e¶á\9f\86á\9e\84á\9e¡á\9e¶á\9e\99á\9e\8aá\9f\82á\9e\9bá\9e\9fá\9f\92á\9e\90á\9e·á\9e\8fនៅក្រោមការការពារមិនអោយបង្កើត សូមមើលនៅ [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]]។",
+       "protectedpages-cascade": "á\9e\9fá\9e\98á\9f\92រាប់ការការពារជាថ្នាក់ប៉ុណ្ណោះ​",
        "protectedpages-noredirect": "លាក់ការបញ្ជូនបន្ត",
        "protectedpagesempty": "​មិន​មាន​ទំព័រ​ណា​ដែល​ត្រូវបាន​ការពារ ជាមួយប៉ារ៉ាម៉ែត​ទាំងនេះទេ។",
        "protectedpages-timestamp": "ត្រាពេលវេលា",
        "protectedpages-unknown-timestamp": "មិនស្គាល់",
        "protectedpages-unknown-performer": "អ្នកប្រើប្រាស់មិនស្គាល់",
        "protectedtitles": "ចំណងជើងត្រូវបានការពារ",
-       "protectedtitles-summary": "á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\93á\9f\81á\9f\87á\9e\9aá\9e¶á\9e\99á\9e\94á\9e\89á\9f\92á\9e\87á\9e¸á\9e\85á\9f\86á\9e\8eá\9e\84á\9e\87á\9e¾á\9e\84á\9e\91á\9e¶á\9f\86á\9e\84á\9e¡á\9e¶á\9e\99á\9e\8aá\9f\82á\9e\9bá\9e\9fá\9f\92á\9e\90á\9e·á\9e\93នៅក្រោមការការពារមិនអោយបង្កើត។ សម្រាប់បញ្ជីទំព័រដែលកំពុងត្រូវបានការពារ សូមមើលនៅ [[{{#special:ProtectedPages}}|{{int:protectedpages}}]]។",
+       "protectedtitles-summary": "á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\93á\9f\81á\9f\87á\9e\9aá\9e¶á\9e\99á\9e\94á\9e\89á\9f\92á\9e\87á\9e¸á\9e\85á\9f\86á\9e\8eá\9e\84á\9e\87á\9e¾á\9e\84á\9e\91á\9e¶á\9f\86á\9e\84á\9e¡á\9e¶á\9e\99á\9e\8aá\9f\82á\9e\9bá\9e\9fá\9f\92á\9e\90á\9e·á\9e\8fនៅក្រោមការការពារមិនអោយបង្កើត។ សម្រាប់បញ្ជីទំព័រដែលកំពុងត្រូវបានការពារ សូមមើលនៅ [[{{#special:ProtectedPages}}|{{int:protectedpages}}]]។",
        "protectedtitlesempty": "មិន​មាន​ចំណងជើង​ណា​ដែល​ត្រូវ​បាន​ការពារ​ជាមួយនឹង​ប៉ារ៉ាម៉ែត​ទាំងនេះ​ទេ​នាពេលថ្មីៗនេះ។",
        "listusers": "បញ្ជីអ្នកប្រើប្រាស់",
        "listusers-editsonly": "បង្ហាញតែអ្នកប្រើប្រាស់ដែលបានកែប្រែអត្ថបទប៉ុណ្ណោះ",
        "emailccsubject": "ច្បាប់ចម្លងនៃសារដែលអ្នកផ្ញើទៅកាន់ $1 ៖ $2",
        "emailsent": "អ៊ីមែលត្រូវបានផ្ញើទៅហើយ",
        "emailsenttext": "សារអ៊ីមែលរបស់អ្នកត្រូវបានផ្ញើរួចហើយ។",
-       "emailuserfooter": "អ៊ីមែលនេះត្រូវបានផ្ញើដោយ$1ទៅកាន់$2ដោយប្រើមុខងារ\"អ៊ីមែលអ្នកប្រើប្រាស់\"របស់{{SITENAME}}។",
-       "usermessage-summary": "á\9e\91á\9e»á\9e\80á\9e\9fá\9e¶á\9e\9a",
+       "emailuserfooter": "អ៊ីមែលនេះត្រូវបានផ្ញើដោយ$1ទៅកាន់$2ដោយប្រើមុខងារ\"{{int:emailpage}}\"របស់{{SITENAME}}។",
+       "usermessage-summary": "á\9e\91á\9e\98á\9f\92á\9e\9bá\9e¶á\9e\80á\9f\8bá\9e\9fá\9e¶á\9e\9aá\9e\80á\9f\92á\9e\93á\9e»á\9e\84á\9e\94á\9f\92á\9e\9aá\9e\96á\9f\90á\9e\93á\9f\92á\9e\92",
        "usermessage-editor": "ប្រព័ន្ធផ្ញើសារ",
        "watchlist": "បញ្ជីតាមដាន",
        "mywatchlist": "បញ្ជីតាមដាន​",
        "unwatchthispage": "ឈប់តាមដាន",
        "notanarticle": "មិនមែនជាទំព័រមាតិកា",
        "notvisiblerev": "ការកែតម្រូវត្រូវបានលុបចោល",
-       "watchlist-details": "{{PLURAL:$1|$1 page|ទំព័រ $1}}នៅក្នុងបញ្ជីតាមដានរបស់អ្នក ដោយមិនរាប់បញ្ចូលទំព័រពិភាក្សា។",
+       "watchlist-details": "{{PLURAL:$1|$1 ទំព័រ១|ទំព័រចំនួន $1}}នៅក្នុងបញ្ជីតាមដានរបស់អ្នក ដោយមិនរាប់បញ្ចូលទំព័រពិភាក្សា។",
        "wlheader-enotif": "បើកប្រើការផ្ដល់ដំណឹងតាមរយៈអ៊ីមែល។",
        "wlheader-showupdated": "ទំព័រដែលត្រូវបានផ្លាស់ប្តូរតាំងពីពេលចូលមើលចុងក្រោយរបស់អ្នក ត្រូវបានបង្ហាញជា '''អក្សរដិត'''។",
-       "wlnote": "ខាងក្រោមនេះជា {{PLURAL:$1|បំលាស់ប្តូរចុងក្រោយ|'''$1'''បំលាស់ប្តូរចុងក្រោយ}}ក្នុងរយះពេល{{PLURAL:$2|'''$2'''ម៉ោង}}ចុងក្រោយ គិតចាប់ពី $3, $4។",
+       "wlnote": "ខាងក្រោមនេះ {{PLURAL:$1|ជាបន្លាស់ប្ដូរចុងក្រោយ|ជាបន្លាស់ប្ដូរចុងក្រោយចំនួន <strong>$1</strong>}} នៅក្នុងរយៈពេល{{PLURAL:$2|១ម៉ោង|<strong>$2</strong> ម៉ោង}} គិតចាប់ពីម៉ោង $4 ថ្ងៃ $3។",
        "wlshowlast": "បង្ហាញ $1ម៉ោងចុងក្រោយ $2ថ្ងៃចុងក្រោយ",
        "watchlist-options": "ជម្រើសនានាក្នុងបញ្ជីតាមដាន",
        "watching": "កំពុង​តាមដាន...",
        "confirmdeletetext": "អ្នកប្រុងនឹងលុបចោលទាំងស្រុង នូវទំព័រមួយដោយរួមបញ្ចូលទាំងប្រវត្តិកែប្រែរបស់វាផង។\nសូមអ្នកអះអាងថា អ្នកពិតជាមានចេតនាធ្វើបែបហ្នឹង និងថាអ្នកបានយល់ច្បាស់ពីផលវិបាកទាំងឡាយដែលអាចកើតមាន និង​សូមអះអាងថា អ្នកធ្វើស្របតាម [[{{MediaWiki:Policy-url}}|គោលការណ៍]]។",
        "actioncomplete": "សកម្មភាពបានសម្រេច",
        "actionfailed": "សកម្មភាព​មិនបានសម្រេច",
-       "deletedtext": "\"$1\"á\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\94á\9e¶á\9e\93á\9e\9bá\9e»á\9e\94á\9e\85á\9f\84á\9e\9bá\9e\9aá\9e½á\9e\85á\9e á\9e¾á\9e\99á\9f\94\n\ná\9e\9fá\9e¼á\9e\98á\9e\98á\9e¾á\9e\9b$2á\9e\9fá\9f\86រាប់បញ្ជីនៃការលុបចោលនាពេលថ្មីៗ។",
+       "deletedtext": "\"$1\"á\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\94á\9e¶á\9e\93á\9e\9bá\9e»á\9e\94á\9e\85á\9f\84á\9e\9bá\9e\9aá\9e½á\9e\85á\9e á\9e¾á\9e\99á\9f\94\n\ná\9e\9fá\9e¼á\9e\98á\9e\98á\9e¾á\9e\9b$2á\9e\9fá\9e\98á\9f\92រាប់បញ្ជីនៃការលុបចោលនាពេលថ្មីៗ។",
        "dellogpage": "កំណត់ហេតុនៃការលុបចោល",
        "dellogpagetext": "ខាងក្រោមជាបញ្ជីនៃការលុបចោលថ្មីៗបំផុត។",
        "deletionlog": "កំណត់ហេតុនៃការលុបចោល",
        "revertpage": "បានត្រឡប់កំណែប្រែដោយ[[Special:Contributions/$2|$2]] ([[User talk:$2|Talk]]) ទៅកំណែប្រែចុងក្រោយដោយ [[User:$1|$1]]",
        "rollback-success": "កំណែ​ដែល​ត្រូវ​បាន​ត្រឡប់​ដោយ​ $1។\nបាន​ផ្លាស់​ប្ដូរ​ទៅ​កំណែ​ចុង​ក្រោយ​វិញ​ដោយ $2។",
        "protectlogpage": "កំណត់ហេតុនៃការការពារ",
-       "protectlogtext": "á\9e\81á\9e¶á\9e\84á\9e\80á\9f\92á\9e\9aá\9f\84á\9e\98á\9e\93á\9f\81á\9f\87á\9e\87á\9e¶á\9e\94á\9e\89á\9f\92á\9e\87á\9e¸á\9e\93á\9f\83á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\8aá\9f\82á\9e\9bá\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\94á\9e¶á\9e\93á\9e\85á\9e¶á\9e\80á\9f\8bá\9e\9fá\9f\84á\9e\93á\9e·á\9e\84á\9e\8aá\9f\84á\9f\87á\9e\9fá\9f\84á\9f\94\n\ná\9e\9fá\9e¼á\9e\98á\9e\98á\9e¾á\9e\9b [[Special:ProtectedPages|á\9e\94á\9e\89á\9f\92á\9e\87á\9e¸á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\94á\9e¶á\9e\93á\9e\80á\9e¶á\9e\9aá\9e\96á\9e¶á\9e\9a]] á\9e\9fá\9f\86រាប់បញ្ជីការការពារទំព័រដែលកំពុងនៅមានសុពលភាពនៅពេលនេះ។",
+       "protectlogtext": "á\9e\81á\9e¶á\9e\84á\9e\80á\9f\92á\9e\9aá\9f\84á\9e\98á\9e\93á\9f\81á\9f\87á\9e\87á\9e¶á\9e\94á\9e\89á\9f\92á\9e\87á\9e¸á\9e\93á\9f\83á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\8aá\9f\82á\9e\9bá\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\94á\9e¶á\9e\93á\9e\85á\9e¶á\9e\80á\9f\8bá\9e\9fá\9f\84á\9e\93á\9e·á\9e\84á\9e\8aá\9f\84á\9f\87á\9e\9fá\9f\84á\9f\94\n\ná\9e\9fá\9e¼á\9e\98á\9e\98á\9e¾á\9e\9b [[Special:ProtectedPages|á\9e\94á\9e\89á\9f\92á\9e\87á\9e¸á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\94á\9e¶á\9e\93á\9e\80á\9e¶á\9e\9aá\9e\96á\9e¶á\9e\9a]] á\9e\9fá\9e\98á\9f\92រាប់បញ្ជីការការពារទំព័រដែលកំពុងនៅមានសុពលភាពនៅពេលនេះ។",
        "protectedarticle": "បានការពារ\"[[$1]]\"",
        "modifiedarticleprotection": "បានផ្លាស់ប្តូរកម្រិតការពារនៃ\"[[$1]]\"",
        "unprotectedarticle": "ដកការការពារពី \"[[$1]]\"",
        "protect-locked-access": "គណនីរបស់អ្នកគ្មានការអនុញ្ញាតក្នុងការផ្លាស់ប្ដូរ កម្រិតកាពារទំព័រ ។\nនេះជាការកំណត់បច្ចុប្បន្ន ចំពោះទំព័រ '''$1''' ៖",
        "protect-cascadeon": "បច្ចុប្បន្នទំព័រនេះត្រូវបានការពារ ព្រោះវាបានស្ថិតក្នុង {{PLURAL:$1|ទំព័រដែលមាន}} ការការពារជាថ្នាក់​។\n\nអ្នកអាចផ្លាស់ប្តូរកម្រិតការពារនៃ ទំព័រ ប៉ុន្តែវានឹងមិនប៉ះពាល់ដល់ការការពារជាថ្នាក់ទេ។",
        "protect-default": "អនុញ្ញាត​អ្នក​ប្រើ​ប្រាស់​ទាំង​អស់​",
-       "protect-fallback": "á\9e\9fá\9f\86រាប់តែអ្នកដែលមានការអនុញ្ញាត \"$1\"",
-       "protect-level-autoconfirmed": "á\9e\9fá\9f\86រាប់តែអ្នកប្រើប្រាស់ដែលបានបញ្ជាក់ទទួលស្គាល់ដោយស្វ័យប្រវត្តិ",
+       "protect-fallback": "á\9e\9fá\9e\98á\9f\92រាប់តែអ្នកដែលមានការអនុញ្ញាត \"$1\"",
+       "protect-level-autoconfirmed": "á\9e\9fá\9e\98á\9f\92រាប់តែអ្នកប្រើប្រាស់ដែលបានបញ្ជាក់ទទួលស្គាល់ដោយស្វ័យប្រវត្តិ",
        "protect-level-sysop": "សម្រាប់តែអភិបាល",
        "protect-summary-cascade": "ការពារជា​ថ្នាក់",
        "protect-expiring": "ផុតកំណត់ $1 (UTC)",
        "sp-contributions-search": "ស្វែងរកការរួមចំណែក",
        "sp-contributions-username": "អាសយដ្ឋានIP ឬអត្តនាម៖",
        "sp-contributions-toponly": "បង្ហាញតែការកែប្រែណាដែលជាកំណែថ្មីៗជាងគេប៉ុណ្ណោះ",
+       "sp-contributions-newonly": "បង្ហាញតែកំណែប្រែដែលជាការបង្កើតទំព័រ",
        "sp-contributions-submit": "ស្វែងរក",
        "whatlinkshere": "អ្វី​ដែលភ្ជាប់មកទីនេះ",
        "whatlinkshere-title": "ទំព័រនានាដែល​តភ្ជាប់​ទៅ \"$1\"",
        "tooltip-pt-mycontris": "បញ្ជី​នៃ​ការរួមចំណែក​របស់​អ្នក",
        "tooltip-pt-login": "អ្នកត្រូវបានលើកទឹកចិត្តឱ្យកត់ឈ្មោះចូល។ ប៉ុន្តែនេះមិនមែនជាការបង្ខំទេ។",
        "tooltip-pt-logout": "កត់ឈ្មោះចេញ",
+       "tooltip-pt-createaccount": "អ្នកត្រូវបានលើកទឹកចិត្តបង្កើតគណនីនិងកត់ឈ្មោះចូល។ ប៉ុន្តែនេះមិនមែនជាការបង្ខំទេ។",
        "tooltip-ca-talk": "ការពិភាក្សា​អំពីទំព័រខ្លឹមសារ​នេះ",
        "tooltip-ca-edit": "អ្នកអាច​កែប្រែ​ទំព័រ​នេះ ។ សូមប្រើប្រាស់​ប៊ូតុង 'បង្ហាញការមើលមុន' មុននឹង​រក្សាទុក​វា  ។",
        "tooltip-ca-addsection": "ចាប់​ផ្ដើមផ្នែកថ្មីមួយក្នុងទំព័រពិភាក្សានេះ",
        "size-megabytes": "$1មេកាបៃ",
        "size-gigabytes": "$1ជីកាបៃ",
        "lag-warn-normal": "បំលាស់ប្តូរថ្មីជាង {{PLURAL:$1|second|វិនាទី}}អាចមិនត្រូវបានបង្ហាញក្នុងបញ្ជីនេះ​។",
-       "lag-warn-high": "á\9e\8aá\9f\84á\9e\99á\9e\9fá\9e¶á\9e\9aá\9e\94á\9f\92á\9e\9aá\9e\96á\9f\90á\9e\93á\9f\92á\9e\92á\9e\94á\9f\86á\9e\9aá\9e¾á\9e\80á\9e¶á\9e\9aá\9e\98á\9e¼á\9e\9bá\9e\8aá\9f\92á\9e\8bá\9e¶á\9e\93á\9e\91á\9e·á\9e\93á\9f\92á\9e\93á\9e\93á\9f\90á\9e\99á\9e\98á\9e¶á\9e\93á\9e\97á\9e¶á\9e\96á\9e\99á\9eºá\9e\8fá\9e\99á\9f\89á\9e¶á\9e\9cá\9e\81á\9f\92á\9e\9bá\9e¶á\9f\86á\9e\84 á\9e\94á\9f\86á\9e\9bá\9e¶á\9e\9fá\9f\8bá\9e\94á\9f\92á\9e\8aá\9e¼á\9e\9aá\9e\8aá\9f\82á\9e\9bá\9e\90á\9f\92á\9e\98á\9e¸á\9e\87á\9e¶á\9e\84 $1 á\9e\9cá\9e·á\9e\93á\9e¶á\9e\91á\9e¸á\9e\98á\9e·á\9e\93á\9e¢á\9e¶á\9e\85á\9e\94á\9e\84á\9f\92á\9e á\9e¶á\9e\89á\9e\94á\9e¶á\9e\93á\9e\91á\9f\81á\9e\93á\9f\85á\9e\80á\9f\92á\9e\93á\9e»á\9e\84á\9e\94á\9e\89á\9f\92á\9e\87á\9e¸á\9e\93á\9f\81á\9f\87។",
+       "lag-warn-high": "á\9e\8aá\9f\84á\9e\99á\9e\9fá\9e¶á\9e\9aá\9e\94á\9f\92á\9e\9aá\9e\96á\9f\90á\9e\93á\9f\92á\9e\92á\9e\94á\9f\86á\9e\9aá\9e¾á\9e\80á\9e¶á\9e\9aá\9e\98á\9e¼á\9e\9bá\9e\8aá\9f\92á\9e\8bá\9e¶á\9e\93á\9e\91á\9e·á\9e\93á\9f\92á\9e\93á\9e\93á\9f\90á\9e\99á\9e\98á\9e¶á\9e\93á\9e\97á\9e¶á\9e\96á\9e\99á\9eºá\9e\8fá\9e\99á\9f\89á\9e¶á\9e\9cá\9e\81á\9f\92á\9e\9bá\9e¶á\9f\86á\9e\84 á\9e\94á\9e\93á\9f\92á\9e\9bá\9e¶á\9e\9fá\9f\8bá\9e\94á\9f\92á\9e\8aá\9e¼á\9e\9aá\9e\8aá\9f\82á\9e\9bá\9e\90á\9f\92á\9e\98á\9e¸á\9e\87á\9e¶á\9e\84 $1 á\9e\9cá\9e·á\9e\93á\9e¶á\9e\91á\9e¸á\9e\98á\9e·á\9e\93á\9e¢á\9e¶á\9e\85á\9e\94á\9e\84á\9f\92á\9e á\9e¶á\9e\89á\9e\93á\9f\85á\9e\80á\9f\92á\9e\93á\9e»á\9e\84á\9e\94á\9e\89á\9f\92á\9e\87á\9e¸á\9e\93á\9f\81á\9f\87á\9e\94á\9e¶á\9e\93á\9e\91á\9f\81។",
        "watchlistedit-normal-title": "កែប្រែបញ្ជីតាមដាន",
        "watchlistedit-normal-legend": "ដកចំណងជើងចេញពីបញ្ជីតាមដាន",
        "watchlistedit-normal-explain": "ចំណងជើងក្នុងបញ្ជីតាមដានរបស់អ្នកត្រូវបានបង្ហាញខាងក្រោម។\n\nដើម្បីដកចេញនូវចំណងជើងណាមួយ សូមចុច\"{{int:Watchlistedit-normal-submit}}\"។\n\nអ្នកអាច[[Special:EditWatchlist/raw|កែប្រែបញ្ជីឆៅ]]ផងដែរ។",
        "tags-tag": "ឈ្មោះ​ស្លាក",
        "tags-display-header": "Appearance លើ​បញ្ជី​បំលាស់​ប្ដូរ​",
        "tags-description-header": "បរិយាយពេញលេញ​នៃអត្ថន័យ​",
+       "tags-source-header": "ប្រភព",
        "tags-active-header": "សកម្ម?",
        "tags-hitcount-header": "បំលាស់​ប្ដូរ​ដែលមានស្លាក​",
+       "tags-actions-header": "សកម្មភាព",
        "tags-active-yes": "បាទ/ចាស",
        "tags-active-no": "ទេ",
+       "tags-source-none": "គ្មានគេប្រើទៀតទេ",
        "tags-edit": "កែប្រែ",
-       "tags-hitcount": "$1 {{PLURAL:$1|បំលាស់ប្ដូរ|បំលាស់ប្ដូរ}}",
+       "tags-delete": "លុបចោល",
+       "tags-activate": "បើកប្រើ",
+       "tags-deactivate": "បិទមិនប្រើ",
+       "tags-hitcount": "$1 {{PLURAL:$1|បន្លាស់ប្ដូរ|បន្លាស់ប្ដូរ}}",
        "comparepages": "ប្រៀបធៀបទំព័រ",
        "compare-page1": "ទំព័រ ១",
        "compare-page2": "ទំព័រ ២",
        "logentry-rights-rights": "$1 {{GENDER:$2|បានផ្លាស់ប្ដូរ}}សមាជិកភាពរបស់ $3 ពី $4 ទៅជា $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|បានផ្លាស់ប្ដូរ}}សមាជិកភាពរបស់ $3",
        "logentry-rights-autopromote": "$1 {{GENDER:$2|ត្រូវបានតំឡើង}}សមាជិកភាពពី $4 ជា $5 ដោយស្វ័យប្រវត្តិ",
+       "logentry-upload-upload": "$1 {{GENDER:$2|បានផ្ទុកឡើង}} $3",
        "rightsnone": "(ទទេ)",
        "revdelete-summary": "កែប្រែចំណារពន្យល់",
        "feedback-adding": "កំពុងបន្ថែមមតិយោបល់ទៅលើទំព័រ...",
        "special-characters-group-persian": "អក្សរពែក្ស",
        "special-characters-group-hebrew": "អក្សរហេប៊្រូ",
        "special-characters-group-bangla": "អក្សរបេងក្លា",
+       "special-characters-group-tamil": "អក្សរតាមិល",
        "special-characters-group-telugu": "អក្សរតិលគ្គ",
        "special-characters-group-sinhala": "អក្សរស៊ិនហាឡា",
        "special-characters-group-gujarati": "អក្សរគុចរទី",
        "special-characters-group-thai": "អក្សរថៃ",
        "special-characters-group-lao": "អក្សរឡាវ",
-       "special-characters-group-khmer": "អក្សរខ្មែរ"
+       "special-characters-group-khmer": "អក្សរខ្មែរ",
+       "special-characters-title-minus": "សញ្ញាដក"
 }
index 4cadd83..5c753cc 100644 (file)
@@ -48,7 +48,8 @@
                        "SeoJeongHo",
                        "Banwol",
                        "Ysjbserver",
-                       "LiteHell"
+                       "LiteHell",
+                       "Lefion"
                ]
        },
        "tog-underline": "링크에 밑줄:",
        "unusedimages": "사용하지 않는 파일 목록",
        "wantedcategories": "필요한 분류 목록",
        "wantedpages": "필요한 문서 목록",
+       "wantedpages-summary": "다른 문서들에 링크는 걸려 있지만 존재하지 않는 문서들 중, 넘겨주기 문서를 제외한 목록입니다.\n존재하지 않는 문서로 넘겨주는 문서 목록을 보려면 [[{{#special:BrokenRedirects}}|the list of broken redirects]]를 참고하세요.",
        "wantedpages-badtitle": "문서 제목이 잘못되었습니다: $1",
        "wantedfiles": "필요한 파일 목록",
        "wantedfiletext-cat": "다음 파일은 쓰이고는 있지만 없는 파일입니다. 바깥 저장소에 있는 파일은 실제로는 있지만 여기 올라 있을 수 있습니다. 그런 오류는 <del>삭제선</del>이 그어질 것입니다. 또한 없는 파일을 포함하고 있는 문서는 [[:$1]]에 올라 있습니다.",
index 59dab17..0285261 100644 (file)
        "nonunicodebrowser": "<strong>Opjepaß:</strong>\nDinge Brauser kann nit öhntlesch met däm <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"a standard for the consistent encoding, representation, and handling of text expressed in most of the world's writing systems\">UNICODE</i> un singe Bochstahbe ömjonn.\nBes esu johd un nemm ene andere Brauser för heh di Sigg!",
        "editingold": "'''Opjepaß:<br />\nDo bes en ahle, övverhollte, Väsjohn vun dä Sigg heh aam ändere.\nWann De di avschpeischere deihs,\nwi se es,\ndann jonn all di Ännderonge fleute,\ndi zikdämm aan dä Sigg jemaht wohde sin.\nAlsu:\nBes De verhaftesch secher, wat_De mähs?\n'''",
        "yourdiff": "Ungerscheide",
-       "copyrightwarning": "Ding Beidräch stonn unger de [[$2]], süch $1. Wann De nit han wells, dat Dinge Tex ömjemodelt weed, un söns wohin verdeilt, dun en hee nit speichere. Mem Avspeichere sähs De och zo, dat et vun Dir selvs es, un/oder Do dat Rääch häs, en hee zo verbreide. Wann et nit stemmp, oder Do kanns et nit nohwiese, kann Dich dat en dr Bau bränge!",
-       "copyrightwarning2": "De Beidräch {{GRAMMAR:en|{{SITENAME}}}} künne vun andere Metmaacher ömjemodelt\noder fottjeschmesse wääde. Wann Der dat nit rääch es, schriev nix. Et es och nüdich, dat et vun Dir selvs es, oder dat Do dat Rääch häs, et hee öffentlich wigger ze jevve. Süch $1. Wann et nit stemmp, oder Do kanns et nit nohwiese, künnt Dich dat en dr Bau bränge!",
+       "copyrightwarning": "Ding Beidrähsch schtonn unger de $2, süch $1. Wann De nit han wells, dat Dinge Tex ömjemodelt weed, un söns wohin verdeilt, dun en hee nit speichere. Mem Avspeichere sähs De och zo, dat et vun Dir selvs es, un/oder Do dat Rääch häs, en hee zo verbreide. Wann et nit stemmp, oder Do kanns et nit nohwiese, kann Dich dat en dr Bau bränge!",
+       "copyrightwarning2": "De Beidrähsch {{GRAMMAR:en|{{SITENAME}}}} künne vun andere Metmaacher ömjemodelt\noder fottjeschmesse wääde. Wann Der dat nit rääch es, schriev nix. Et es och nüdich, dat et vun Dir selvs es, oder dat Do dat Rääch häs, et hee öffentlich wigger ze jevve. Süch $1. Wann et nit stemmp, oder Do kanns et nit nohwihse, künnt Dich dat en dr Bau bränge!",
        "longpageerror": "'''Janz schlemme Fähler:'''\nDä Tex, dä De heh jescheck häs, dä es {{PLURAL:$1|ein|$1|kei}} Kilobyte jruuß.\nDat {{PLURAL:$2|es mieh wie ei|sin mieh wie $2|es kei}} Kilobyte. Dat künne mer nit speichere!",
        "readonlywarning": "'''Opjepass:'''\nDe Daatebank es jesperrt woode, wo Do ald am Ändere wohs.\nDä.\nJetz kanns De Ding Änderunge nit mieh faßhallde lohße.\nDun se bei Dir om Rechner faßhalde un versöhg et schpäder noch ens.\n\nNävvebei, dä Datenbank-Köbes hät för et Sperre och ene Jrund aanjejovve: $1",
        "protectedpagewarning": "<strong>Opjepass: Di Sigg heh es jähje Veränderonge jeschöz. Blohß de Wikki-Köbeße künne se änndere.</strong>\nHeh kütt der neuste Enndraach em Logbohch för di Sigg:",
        "badsig": "Di Ungeschreff jëijd_esu nit — luer noh dem HTML do_dren un maach et rėshtėsh.",
        "badsiglength": "Ding „Ungerschref“ es zoo lang. Et dörve nit nieh wi {{PLURAL:$1|eij|$1|keij}} Zeische do dren sin.",
        "yourgender": "Wi wells De, dat et Wiki övver Desch kalle deiht:",
-       "gender-unknown": "Dä Metmaacher Su-wi-De-heiß schriiv em Wiki met.",
+       "gender-unknown": "Wann övver Desch jeschwadt weed, dann der ohne dorschbleck ze lohße, ov Kääl udder Weesch bes, esu wi: „dä Metmaacher Su-wi-De-heiß schriiv em Wiki met.“",
        "gender-male": "Dä Su-wi-De-heiß schriiv och em Wiki met.",
        "gender-female": "Dat Su-wi-De-heiß schriiv heh em Wiki met.",
        "prefs-help-gender": "* Moß mer nit aanjävve, un dat kritt de janne Welt ze sinn, nit nur Do allein.",
        "namespace_association": "mem zohjehühreje Appachtemang",
        "tooltip-namespace_association": "Maach e Höhksche, öm dat Appachtemang, wat zom ußjewählte Appachtemang doh zohjehööt — entweeder de Klaafsigge udder de nomaale Sigge — zohsäzlesch ußzewähle.",
        "blanknamespace": "(Atikkele)",
-       "contributions": "{{GENDER:$1|Däm Metmaacher|Däm|Däm Metmaacher|Dä Metmaacherėn|Däm}} $1 {{GENDER:$1|singe|singe|singe|iere|singe}} Beidräch",
-       "contributions-title": "Beidräsch fum  $1",
+       "contributions": "{{GENDER:$1|Däm Metmaacher|Däm|Däm Metmaacher|Dä Metmaacherėn|Däm}} $1 {{GENDER:$1|singe|singe|singe|iere|singe}} Beidrähsch",
+       "contributions-title": "Beidrähsch fum  $1",
        "mycontris": "Beidrähch",
        "contribsub2": "För {{GENDER:$3|dä|et|dä Metmaacher|de|dat}} $1: $1 ($2)",
        "contributions-userdoesnotexist": "Ene Metmaacher mem Nahme „$1“ ham_mer nit.",
        "year": "Beß Johr:",
        "sp-contributions-newbies": "Nor neu Metmaacher ier Beidräg zeije",
        "sp-contributions-newbies-sub": "För neu Metmaacher",
-       "sp-contributions-newbies-title": "Neu Metmaacher ier Beidräsch",
+       "sp-contributions-newbies-title": "Neu Metmaacher ier Beidrähsch",
        "sp-contributions-blocklog": "Logbohch met de Metmaacher ier Schpärre",
        "sp-contributions-suppresslog": "verschtoche Beidrääch",
        "sp-contributions-deleted": "Fottjeschmesse Beidrääsch",
        "blocklink": "schpärre",
        "unblocklink": "widder freijevve",
        "change-blocklink": "Sperr ändere",
-       "contribslink": "Beidräch",
+       "contribslink": "Beidrähsch",
        "emaillink": "Scheck en <span lang=\"en\">e-mail</span>",
        "autoblocker": "Bes automattisch jesperrt. Ding <i lang=\"en\" xml:lang=\"en\">IP</i>_Adress wood vör kootem noch vun däm Metmaacher „[[User:$1|$1]]“ jebruch. Dä es jesperrt woode wäje: „$2“",
        "blocklogpage": "Logbohch met Metmaacher-Schpärre",
        "others": "ander",
        "siteusers": "{{PLURAL:$2|däm|de|keine}} {{PLURAL:$2|Metmaacher|Metmaachere|Metmaacher}} $1 aan {{GRAMMAR:Dat|{{SITENAME}}}}",
        "anonusers": "{{PLURAL:$2|dä|de|keine}} nameloose Metmaacher $1 vun de translatewiki.net",
-       "creditspage": "Övver de Metmaacher un dänne ehr Beidräsch för heh di Sigg",
+       "creditspage": "Övver de Metmaacher un dänne ehr Beidrähsch för heh di Sigg",
        "nocredits": "För di Sigg ham_mer nix en de Leß.",
        "spamprotectiontitle": "SPAM_Schotz",
        "spamprotectiontext": "De Sigg, di de avschpeicchere wells, di weed vun onsem Projramm zom Schoz jähje der <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"„för jewöhnlesch angmaß övverdrahre Nohreeschte udder Meddeijlonge, di wä se kritt jaa nit han well,“\">SPAM</i> nit durchjelooße. Dat kütt mihts vun enem Link op en främde Sigg, di op de \n„Schwazze Leß“ schteiht.",
index d3d05e2..d9e7d9f 100644 (file)
        "watchlisttools-view": "Mutationes paginarum observatarum inspicere",
        "watchlisttools-edit": "Indicem paginarum observatarum inspicere vel recensere",
        "watchlisttools-raw": "Indicem paginarum observatarum quasi textum recensere",
+       "hebrew-calendar-m4": "Tebeth",
+       "hebrew-calendar-m8": "Iar",
        "hebrew-calendar-m11": "Ab",
+       "hebrew-calendar-m4-gen": "Tebeth",
+       "hebrew-calendar-m8-gen": "Iar",
+       "hebrew-calendar-m11-gen": "Ab",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|disputatio]])",
        "version": "Versio",
        "version-specialpages": "Paginae speciales",
index 6bbfa60..8608546 100644 (file)
        "badsig": "D'Syntax vun Ärer Ënnerschrëft ass net korrekt; iwwerpréift w.e.g. den HTML Code.",
        "badsiglength": "Är Ënnerschrëft ass ze laang.\nSi muss manner wéi $1 {{PLURAL:$1|Zeechen|Zeechen}} hunn.",
        "yourgender": "Wéi wëllt Dir beschriwwe ginn?",
-       "gender-unknown": "Ech wëll dat net preziséieren",
+       "gender-unknown": "Wann Dir ernimmt gëtt da benotzt D'Software do wou et méiglech ass geschlechtsneutral Wierder",
        "gender-male": "Hien ännert Wikisäiten",
        "gender-female": "Si ännert Wikisäiten",
        "prefs-help-gender": "Fakultativ:\nD'Software benotzt seng Wäerter fir Iech unzeschwätzen a fir vun Iech vis-a-vis vun Aneren grammatesch ''Gender-korrekt'' ze schwätzen. \n\nDës Informatioun ass ëffentlech.",
index afa57a7..bebdd92 100644 (file)
@@ -69,8 +69,8 @@
        "thu": "پن شمه",
        "fri": "جمه",
        "sat": "شمه",
-       "january": "جانويه",
-       "february": "فوریه",
+       "january": "جانڤیە",
+       "february": "فئڤریە",
        "march": "مارش",
        "april": "آبريل",
        "may_long": "ما",
@@ -94,7 +94,7 @@
        "november-gen": "نوامر",
        "december-gen": "دسامر",
        "jan": "جانویه",
-       "feb": "فوریه",
+       "feb": "فئڤریە",
        "mar": "مارش",
        "apr": "آبريل",
        "may": "ما",
        "returnto": "ورگشت وه $1.",
        "tagline": "د {{SITENAME}}",
        "help": "هومياری",
-       "search": "پی چوری",
+       "search": "پئی جوٙری",
        "searchbutton": "پی جوری",
        "go": "رو",
        "searcharticle": "رو",
        "history": "ويرگار بلگه",
        "history_short": "ويرگار",
        "updatedmarker": "د آخرین دیئن مه وه هنگوم سازی کو",
-       "printableversion": "نسقه پلا بيئنی",
+       "printableversion": "نوسقە پئلا بیئنی",
        "permalink": "هوم پیوند هميشئی",
        "print": "پلا كردن",
        "view": "ديئن",
        "unprotectthispage": "پر و پیم کردن د ای بلگه نه آلشت بكيد",
        "newpage": "بلگه نو",
        "talkpage": "دباره ای بلگه قصه بكيد",
-       "talkpagelinktext": "چک چنه",
+       "talkpagelinktext": "چأک چئنە",
        "specialpage": "بلگه ويجه",
        "personaltools": "اوزاريا شصقی",
        "articlepage": "ديئن مینونه بلگه",
        "pool-errorunknown": "خطا نادیار",
        "pool-servererror": "پول سنتر خذمتگه د دسرس نئ($1).",
        "poolcounter-usage-error": "خطار وه کار گرتن:$1",
-       "aboutsite": "دبارÙ\87 {{SITENAME}}",
-       "aboutpage": "پروجه:دباره",
+       "aboutsite": "دئبارÛ\95 {{SITENAME}}",
+       "aboutpage": "پوروجە:دئبارە",
        "copyright": "مینونه د دسرس هئ سی $1 مر وه شلک هنی نوشته بوئه",
        "copyrightpage": "{{ان اس:پروجه}}:کپی رایت",
        "currentevents": "پيشومدل تازه باو",
        "currentevents-url": "پروجه:پيشومدل تازه باو",
-       "disclaimers": "تیه پوشکاریا",
+       "disclaimers": "تیە پوٙشکاریا",
        "disclaimerpage": "پروجه:منكر بيئن کلی",
        "edithelp": "هومياری سی ويرايشت",
        "helppage-top-gethelp": "هومياری",
-       "mainpage": "سرآسÙ\88Ù\86Ù\87",
+       "mainpage": "سأرآسÙ\88Ù\99Ù\86Û\95",
        "mainpage-description": "سرآسونه",
        "policy-url": "پروجه:خط و مش",
        "portal": "درآسونه کومله یکی",
        "portal-url": "پروجه:سرآسونه کومله یکی",
-       "privacy": "Ù¾Ù\88Ù\84تÛ\8cÚ© Ø±Ø§Ø²Û\8cÙ\86Ù\87 داری",
+       "privacy": "Ù¾Ù\88Ù\99Ù\84تÛ\8cÚ© Ø±Ø§Ø²Û\8cÙ\86Û\95 داری",
        "privacypage": "پروجه: خط مشی رازینه کاری کردن",
        "badaccess": "خطا :صلاداری کو",
        "badaccess-group0": "شما صلا انجوم کاری که حاستیت نارین",
        "newmessageslinkplural": "{{PLURAL:$1|یه گل پیغوم تازه|999=پیغومیا تازه}}",
        "newmessagesdifflinkplural": "آخر {{PLURAL:$1|آلشت|آلشتیا}}",
        "youhavenewmessagesmulti": "شما یه گل پیغوم تازه د $1 داریتو",
-       "editsection": "ويرايشت",
+       "editsection": "ڤیرایئشت",
        "editold": "ويرايشت",
        "viewsourceold": "سرچشمه نه بوينيت",
        "editlink": "ويرايشت",
        "viewsourcelink": "سرچشمه نه بوينيت",
-       "editsectionhint": "ويرايشت يه گل بهرجا:$1",
+       "editsectionhint": "ڤیرایئشت یئ گئل بأرجا:$1",
        "toc": "مینونه یا",
        "showtoc": "نشو دئن",
        "hidetoc": "قام كردن",
        "page-atom-feed": "هوال حون Atom سی $1",
        "feed-atom": "اتم",
        "feed-rss": "آر اس اس",
-       "red-link-title": "$1(بلگه وجود ناره)",
+       "red-link-title": "$1(بألگە ڤوجوٙد نارە)",
        "sort-descending": "كم بيئن سرجاخود",
        "sort-ascending": "زياد بيئن سرجاخود",
        "nstab-main": "بلگه",
        "nosuchaction": "چنی کنشتگری وجود ناره",
        "nosuchactiontext": "کاری که وا یو آر ال مشقص بیه معتور نئ.\nشایت شما یو آر ال نه دروس ننشتیته، یا یه گل هوم پیوند نادرست وارد بیه.\nوه شاید وه یه گل سیسریک د نرم افزار وه کار گرته بیه وا {{نوم مالگه}} هشاره داشتوه.",
        "nosuchspecialpage": "چنی بلگه خاصی وجود ناره",
-       "nospecialpagetext": "<strong>شما سی یه گل بلگه نامعتور درحاست داشتیته.</strong>\nیه گل نوم گه سی  اعتوار بلگه یا بوئه د [[ویجه:بلگه یا ویجه|{{رقم:بلگه یا ویجه}}]] پیدا با.",
+       "nospecialpagetext": "<strong>شما سی یه گل بلگه نامعتور درحاست داشتیته.</strong>\nیه گل نوم گه سی  اعتوار بلگه یا بوئه د [[Special:SpecialPages|{{int:specialpages}}]] پیدا با.",
        "error": "خطا",
        "databaseerror": "خطا د جاگه دونسمنيا",
        "databaseerror-text": "یه خطا جست کردن د رسینه جا پیش اوما.یه ممکنه یه در کار ونن د نرم اوزار پیش بیاره",
        "undo-failure": "سی ری به ری بیئن ای ویرایشت وا ویرایشتیا مینجایی، نبوئه ای ویرایشت نه خومثی بکیت.",
        "undo-norev": "نبوئه ای ویرایشت نه خومثی بکیت سی یه که یا وجود ناره یا پاکسا بیه.",
        "undo-nochange": "وه نظر میا که ای ویرایشت د ایسنیا خومثی بیه.",
-       "undo-summary": "خومثی بیئن وانئری وا $1[[ویجه:هومیاریا/$2|$2]] ([[چک چنه کاریار:$2|چک چنه]])",
+       "undo-summary": "خومثی بیئن وانئری وا $1 [[Special:Contributions/$2|$2]] ([[User talk:$2|چک چنه]])",
        "undo-summary-username-hidden": "خومثی بیئن وانئری $1 وا یه گل کاریار قام بیه",
        "cantcreateaccounttitle": "نبوئه حساو راس بکید",
        "cantcreateaccount-text": "حساو دروس بیه و ا ای تیرنشون آی پی(<strong>$1</strong>) وه دس ای [[کاریار:$3|$3]] قلف بیه.\n\n\nدلیل دئه بیه وا $3 ها د<em>$2</em>",
        "rc_categories": "دسه یا نه محدود کو(وا \"|\" جگا بوئن",
        "rc_categories_any": "هرکوم",
        "rc-change-size": "$1",
-       "rc-change-size-new": "$1 {{PLURAL:$1|بایت|بایتیا}} نها آلشتکاری",
+       "rc-change-size-new": "$1 {{PLURAL:$1|بایت|بایتیا}} نئها آلئشتکاری",
        "newsectionsummary": "/* $1 */ بهرجا تازه",
        "rc-enhanced-expand": "جزيات نشون بيئه",
        "rc-enhanced-hide": "جزياته قام كو",
        "confirm-watch-top": "ای بلگه نه د سیل برگتو اضاف می کید؟",
        "confirm-unwatch-button": "خوئه",
        "confirm-unwatch-top": "ای بلگه نه د سیل برگتو ؤرمیداریت؟",
-       "semicolon-separator": ";&#32;",
+       "semicolon-separator": "؛&#32;",
        "comma-separator": ",&#32;",
        "colon-separator": ":&#32;",
        "pipe-separator": "&#32;|&#32;",
        "table_pager_empty": "هیچ نتیجه ای نئ",
        "autosumm-blank": "بلگه حالی",
        "autosumm-replace": "مینونه وا \"َ$1\" جاگزین بی",
-       "autoredircomment": "بلگه واگردونی بیه سی[[$1]]",
+       "autoredircomment": "بلگه واگردونی بیه سی [[$1]]",
        "autosumm-new": "راست کردن بلگه وه دس \"$1\"",
        "autosumm-newblank": "بلگه حالی دروس بیه",
        "lag-warn-normal": "شایت آلشتیا تازه تر د $1 {{PLURAL:$1|ثانیه|ثانیه یا}} د ای نومگه دیاری نکن.",
diff --git a/languages/i18n/luz.json b/languages/i18n/luz.json
new file mode 100644 (file)
index 0000000..c1aabec
--- /dev/null
@@ -0,0 +1,691 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Bonevarluri",
+                       "علی ساکی لرستانی",
+                       "Mjbmr"
+               ]
+       },
+       "tog-underline": "لینکیا خط وه دومن",
+       "tog-hideminor": "قائم کردن ویرایشه یل کیچک مئن تغییره یل نو",
+       "tog-hidepatrolled": "قائم کردن ویرایشه یل کیچک مئن تغییره یل نو",
+       "tog-newpageshidepatrolled": "قائم کردن بلگه یل گشت مئنه لیست بلگه یل نو",
+       "tog-extendwatchlist": "گپ کردن بلگه یل  پیگیری یل سی نشو دائن تموم تغییره یل ، نه فقط هونو که جدید وابون",
+       "tog-usenewrc": "تغییره یل جمی توسط بلگه مئنه تغییره یل نو و نوم بلگه پیگیری",
+       "tog-numberheadings": "شماره وندن خودکار سی سرخط یل",
+       "tog-showtoolbar": "نشو دائن تولبار ویرایش",
+       "tog-editondblclick": "ویرایس بلگه یل با دو کلیژ",
+       "tog-editsectiononrightclick": "فعال کردن ویرایس قسمتل با یه کلیژ ری نوم او قسمت",
+       "tog-watchcreations": "وندن بلگه یلی ک مو ساختمه و فایلل ک مو بار کردمه مئنه نوم بلگه پیگیری",
+       "tog-watchdefault": "وندن بلگه یل و فایلل ک مو هونونه ساختمه مئنه نوم بلگه پیگیری",
+       "tog-watchmoves": "وندن بلگه یل و فایلل ک مو هونونه انتقال دامه مئنه نوم بلگه پیگیری",
+       "tog-watchdeletion": "وندن بلگه یل و فایلل ک مو هونونه حذف کردمه مئنه نوم بلگه پیگیری",
+       "tog-minordefault": "علامت دائن وه تغییره یل تموم نبیه",
+       "tog-previewontop": "نشو دائن پیش نمایش قبل یوکه جعبه یا کادر اصلاح وابوه",
+       "tog-previewonfirst": "نشو دائن پیش نمایش مئن اصلاح اول",
+       "tog-enotifwatchlistpages": "ایمیل و مو به یوکه یه بلگه یا فایل مئن نوم بلگه پیگیری مه تغییر کرد",
+       "tog-enotifusertalkpages": "ایمیل و مو به یوکه بلگه بحث مو تغییر کرد",
+       "tog-enotifminoredits": "ایمیل و مو به حتی سی اطلاحات تموم نبیه فایلل و بلگه یل",
+       "tog-enotifrevealaddr": "نشو دائن ایمیل مو مئن ایمیلل دونسمنی _ خه وری",
+       "tog-shownumberswatching": "نشو دائن شماره کاروران در حال تماشا",
+       "tog-oldsig": "هی دیسه امضا",
+       "tog-fancysig": " وا امضا چی ویکی متن برخورد کو ( بدون لینک اتوماتیک )",
+       "tog-uselivepreview": "زه پیش نمویش زه نَ استفاده کُ",
+       "tog-forceeditsummary": "و مو یادآوری سریع کُ هنگام اصلاح خالی و کوتاه",
+       "tog-watchlisthideown": "قائم کردن اصلاحات مو زه نوم بلگه پیگیری یل",
+       "tog-watchlisthidebots": "قائم کردن اصلاحات بوت زه نوم بلگه پیگیری یل",
+       "tog-watchlisthideminor": "قائم کردن اصلاحات کیچیک زه نوم بلگه پیگیری یل",
+       "tog-watchlisthideliu": "قائم کردن اصلاحاتی ک توسط کاوری یل داخل سیستم وابیده انجام وابیه زه نوم بلگه پیگیری یل",
+       "tog-watchlisthideanons": "قائم کردن اصلاحات انجام وابیه توسط کاروری یل داخل سیستم نوابیه زه نوم بلگه پیگیری",
+       "tog-watchlisthidepatrolled": "قائم کردن اصلاحات گشت زه نوم بلگه پیگیری",
+       "tog-ccmeonemails": "ارسال کوپی ایمیللی ک مو سی کاروری یل دیه ارسال کردم سی مو",
+       "tog-diffonly": "نشو نده بلگه ای که چیا متفاوت و زبر داره",
+       "tog-showhiddencats": "نشو دائن دسه بنی یل قائم وابیده",
+       "tog-norollbackdiff": "حذف تفاوت بدیکه عقبگرد انجام وابی",
+       "tog-useeditwarning": "منه هشدار بی وقتی که مو بلگه ای ک درحال ویرایش وابینه بدون ذخیره تغییرل ترک کردم",
+       "tog-prefershttps": "همیشه زه یه اتصال امن وقتی وارد وابی منه سیستم استفاده کو",
+       "underline-always": "همیشه",
+       "underline-never": "هیچ وقت",
+       "underline-default": "پوسته و یا مرورگر وطور پیش فرض",
+       "editfont-style": "ویرایس فونت استایل ولات",
+       "editfont-default": "مرورگر وطور پیش فرض",
+       "editfont-monospace": "فونت هم عرض",
+       "editfont-sansserif": "فونت بدون سریف",
+       "editfont-serif": "فونت سریف",
+       "sunday": "یه شمه",
+       "monday": "دوشمه",
+       "tuesday": "سه‌شمه",
+       "wednesday": "چار شمه",
+       "thursday": "پشمه",
+       "friday": "جومَ",
+       "saturday": "شَمه",
+       "sun": "یه شمه",
+       "mon": "دوشمه",
+       "tue": "سه‌شمه",
+       "wed": "چارشمه",
+       "thu": "پشمه",
+       "fri": "جومَ",
+       "sat": "شمه",
+       "january": "اول قهاره",
+       "february": "لرشگون",
+       "march": "ئنهزنون",
+       "april": "نوروزماه",
+       "may_long": "گلبارماه",
+       "june": "جورش",
+       "july": "میوه رسون",
+       "august": "مه گرمه",
+       "september": "شنیارون",
+       "october": "مالبارکنون",
+       "november": "آو سردکنون",
+       "december": "آو رجکنون",
+       "january-gen": "اول قهاره",
+       "february-gen": "لرشگون",
+       "march-gen": "ئنهزنون",
+       "april-gen": "نوروزماه",
+       "may-gen": "گلبارماه",
+       "june-gen": "جورش",
+       "july-gen": "میوه رسون",
+       "august-gen": "مه گرمه",
+       "september-gen": "شنیارون",
+       "october-gen": "مالبارکنون",
+       "november-gen": "آو سردکنون",
+       "december-gen": "آو رجکنون",
+       "jan": "ژانویه",
+       "feb": "فوریه",
+       "mar": "مارس",
+       "apr": "آوریل",
+       "may": "گلبار ماه",
+       "jun": "جورش",
+       "jul": "میوه رسون",
+       "aug": "اوت",
+       "sep": "سپتامبر",
+       "oct": "اکتبر",
+       "nov": "نوامبر",
+       "dec": "دسامبر",
+       "january-date": "ژانویه $1",
+       "february-date": "فوریه $1",
+       "march-date": "مارس $1",
+       "april-date": "آوریل $1",
+       "may-date": "می $1",
+       "june-date": "جون $1",
+       "july-date": "جولای $1",
+       "august-date": "اوت $1",
+       "september-date": "سپتامبر $1",
+       "october-date": "اکتبر $1",
+       "november-date": "نوامبر $1",
+       "december-date": "دسامبر $1",
+       "pagecategories": "{{PLURAL:$1|دسه|دسه یل}}",
+       "category_header": "بلگه یل مئن دسه \"$1\"",
+       "subcategories": "دسه یل فرعی",
+       "category-media-header": "مدیا مئن دسه \"$1\"",
+       "category-empty": "ای دسه الآن هیچ بلگه یا مدیا ناره",
+       "hidden-categories": "{{PLURAL:$1|دسه قائم|دسه یل قائم}}",
+       "hidden-category-category": "دسه بنی یل قائم",
+       "category-subcat-count": "{{PLURAL:$2|ای دسه فقط دسه یل فرعی دومنه داره.|ای دسه چیه یل دومنه داره {{PLURAL:$1|دسه فرعی|$1 دسه یل فرعی}}, بیشتر زه $2 کل.}}",
+       "category-subcat-count-limited": "ای دسه چیه یل دومنه داره {{PLURAL:$1|دسه فرعی|$1 دسه یل فرعی}}.",
+       "category-article-count": "{{PLURAL:$2|ای دسه فقط  بلگه یل دومنه داره .|دومن الذکر{{PLURAL:$1|بلگه هس|$1 بلگه هسن}} مئن ای دسه, بیشتر زه$2 کل.}}",
+       "category-article-count-limited": "دومن الذکر {{PLURAL:$1|بلگه هس|$1 بلگه هسن}} د او دسه جریانی.",
+       "category-file-count": "{{PLURAL:$2|ای دسه فقط فایلل دومنه داره.|دومن الذکر{{PLURAL:$1|فایل هس|$1 فایلل هسن}} دای دسه, بیشترزه$2 کل.}}",
+       "category-file-count-limited": "دومن الذکر {{PLURAL:$1|فایل هس|$1 فایلل هسن}} د او دسه جریانی.",
+       "listingcontinuesabbrev": "دنباله",
+       "index-category": "بلگه یل ایندکس وابیده",
+       "noindex-category": "بلگه یل ایندکس نوابیده",
+       "broken-file-category": "بلگه یل وا فایلل لینک اشکسه",
+       "about": "درباره",
+       "article": "بلگه محتوا",
+       "newwindow": "(د یه پنجره دیه وا کو )",
+       "cancel": "لغو",
+       "moredotdotdot": "بیشتر...",
+       "morenotlisted": "ای نوم بلگه کامل نی",
+       "mypage": "بلگه",
+       "mytalk": "گپ",
+       "anontalk": "سی ای آدرس آی پی گپ بزه",
+       "navigation": "هدایت کردن",
+       "and": "&#32;و",
+       "qbfind": "سیل کردن",
+       "qbbrowse": "نوم بلگه",
+       "qbedit": "اصلاح",
+       "qbpageoptions": "ای بلگه",
+       "qbmyoptions": "بلگه مو",
+       "faq": "اف آی کیو \" سوالل متداول \"",
+       "faqpage": "Project:اف آی کیو \" سوالل متداول \"",
+       "actions": "عملیه یل",
+       "namespaces": "همدرنگل",
+       "variants": "انواع",
+       "navigation-heading": "منو ناو وری",
+       "errorpagetitle": "خطا",
+       "returnto": "بازگشت وه $1.",
+       "tagline": "از {{نوم جا}}",
+       "help": "هومیاری",
+       "search": "جستن",
+       "searchbutton": "جستن",
+       "go": "رو",
+       "searcharticle": "رو",
+       "history": "ویرگارل بلگه",
+       "history_short": "تاریخچه یل",
+       "updatedmarker": "بروز وابی تا موقع آخرین سیل کردن مو",
+       "printableversion": "ورژن سی چاپ بیئنی",
+       "permalink": "لینکل تا ابد",
+       "print": "چاپ",
+       "view": "نما",
+       "view-foreign": "نما مئن  $1",
+       "edit": "ویرایش",
+       "edit-local": "اصلاح توضیحتل محلی",
+       "create": "درست کردن",
+       "create-local": "وندن توضیحتل محلی",
+       "editthispage": "اصلاح ای بلگه",
+       "create-this-page": "درست کو ای بلگه نه",
+       "delete": "حذف",
+       "deletethispage": "حذف کو ای بلگه نه",
+       "undeletethispage": "حذف نکو ای بلگه نه",
+       "undelete_short": "ورگردونی {{PLURAL:$1|یه اصلاح|$1 اصلاحل}}",
+       "viewdeleted_short": "نما {{PLURAL:$1|یه اصلاح حذف وابیه|$1 اصلاحل حذف وابیه}}",
+       "protect": "حفاظت کردن",
+       "protect_change": "تغییر بی",
+       "protectthispage": "ای بلگنه حفاظت کو",
+       "unprotect": "تغییر دائن حالت حفاظت",
+       "unprotectthispage": "تغییر دائن حالت حفاظت ای بلگه",
+       "newpage": "بلگه نو",
+       "talkpage": "گپ زئن ای بلگه",
+       "talkpagelinktext": "گپ",
+       "specialpage": "بلگه مخصوص",
+       "personaltools": "اوزارگل سی خوت",
+       "articlepage": "سل کردن محتوا ای بلگه",
+       "talk": "قسه",
+       "views": "سلابل",
+       "toolbox": "اوزارگه",
+       "userpage": "دیئن بلگه کارور",
+       "projectpage": "دیئن بلگه پروجه",
+       "imagepage": "دیئن بلگه فایل",
+       "mediawikipage": "دیئن بلگه پیوم",
+       "templatepage": "دیئن بلگه قالب",
+       "viewhelppage": "دیئن بلگه هومیاری",
+       "categorypage": "دیئن بلگه دسه بنی",
+       "viewtalkpage": "دیئن گپل",
+       "otherlanguages": "مئن زوونه یل دیه",
+       "redirectedfrom": "(تصحیح مجدد زه $1)",
+       "redirectpagesub": "بلگه تصحیح و هدایت زه مجدد",
+       "redirectto": "تغییر دائن مسیر وه:",
+       "lastmodifiedat": "ای بلگه اخیرا تغییر واصلاح وابیه مئنه $1, مئنه $2.",
+       "viewcount": "ای بلگه قابل دسترسی وابیه {{PLURAL:$1|یه بار|$1 مدتل}}.",
+       "protectedpage": "بلگه حفاظت وابیه",
+       "jumpto": "پریدن وه:",
+       "jumptonavigation": "هدایت کردن",
+       "jumptosearch": "جستن",
+       "view-pool-error": "وبشید ، سرور بیش زه حد بارگیری وابیه .\nکارورل زیادی ایخن ای بلگنه سل کنن.\nلطفا یه لحظه واسیت قبلیکه به خیت ای بلگنه مجددا سل کیت.\n$1",
+       "generic-pool-error": "وبشید ، سرور بیش زه حد بارگیری وابیه .\nکارورل زیادی ایخن ای منوبنه سل کنن.\nلطفا یه لحظه واسیت قبلیکه به خیت ای منوبنه مجددا سل کیت.",
+       "pool-timeout": "پایان زمون اتنظار سی قفل",
+       "pool-queuefull": "صف استخر پر هسی",
+       "pool-errorunknown": "خطا ناشناخته",
+       "pool-servererror": "شمارنده سرویس استخر ور تیه نی ($1).",
+       "aboutsite": "پروجه : درباره",
+       "aboutpage": "Project:درباره",
+       "copyright": "مطلب دومن $ 1 هس نکه خلاف هونو ذکر وابی.",
+       "copyrightpage": "{{ns:project}}:کپی رایت",
+       "currentevents": "اتفاقل جاری",
+       "currentevents-url": "Project:اتفاقات جاری",
+       "disclaimers": "انکار کننده یل",
+       "disclaimerpage": "Project:انکار کاروران",
+       "edithelp": "هومیاری سی اصلاح",
+       "mainpage": "بلگه اصلی",
+       "mainpage-description": "پیج اصلی",
+       "policy-url": "Project:خط مشی",
+       "portal": "درگاه کاروران",
+       "portal-url": "Project:درگاه کاروران",
+       "privacy": "خط مشی رازداری",
+       "privacypage": "Project:خط مشی رازداری",
+       "badaccess": "خطا دسترسی",
+       "badaccess-group0": "ایسا اجازه انجام کاری که ایخستیده ندارین",
+       "badaccess-groups": "او کاری که ایسا درخواست کردین فقط سی کارورانیه که مئنه ای  گروهن  {{PLURAL:$2|آن گروه|یکی زه گروه یل}}: $1.",
+       "versionrequired": "یه نسخه زه نیازمندی یل ویکی مدیا\n$1",
+       "versionrequiredtext": "یه نسخه زه ویکی مدیا($1) نیازمند ه وه استفاده زه ای بلگه\nبویین :[[مخصوص:نسخه|نسخه مخصوص]].",
+       "ok": "خووه",
+       "retrievedfrom": "بازیافت از\"$1\"",
+       "youhavenewmessages": "پیوم نو داری $1 ($2).",
+       "youhavenewmessagesfromusers": "{{PLURAL:$4|ایشا داریت}} $1 زه {{PLURAL:$3|یه کارور دیه|$3 کارورل}} ($2).",
+       "youhavenewmessagesmanyusers": "ایشا $1 زه کارورل دیه داریت ($2).",
+       "newmessageslinkplural": "{{PLURAL:$1|یه پیوم نو|999=پیومل نو}}",
+       "newmessagesdifflinkplural": "آخر {{PLURAL:$1|تغییر|999=تغییرل}}",
+       "youhavenewmessagesmulti": "ایشا پیوم نو داریت مئنه\n$1",
+       "editsection": "اصلاح",
+       "editold": "اصلاح",
+       "viewsourceold": "دیئن منبع",
+       "editlink": "اصلاح",
+       "viewsourcelink": "دیئن منبع",
+       "editsectionhint": "اصلاح یه قسمت: $1",
+       "toc": "محتوا یل",
+       "showtoc": "نمایش",
+       "hidetoc": "قائم",
+       "collapsible-collapse": "سقوط",
+       "collapsible-expand": "ببن",
+       "thisisdeleted": "دیئن یا ورگردوندن $1؟",
+       "viewdeleted": "دیئن$1؟",
+       "restorelink": " {{PLURAL:$1|یه اصلاح حذف وابیه|$1 اصلاحل حذف وابیه}}",
+       "feedlinks": "تغذیه:",
+       "feed-invalid": "اشتراک  زه راه  تایپ باطله",
+       "feed-unavailable": "فید پیوند ور تیه نی",
+       "site-rss-feed": "خبرخو RSS سی $1",
+       "site-atom-feed": "خبرخو Atom سی $1",
+       "page-rss-feed": "خبرخو RSS سی «$1»",
+       "page-atom-feed": "خبرخو Atom سی «$1»",
+       "red-link-title": "(بلگه وجود ناره) $1",
+       "sort-descending": "مرتب سازی وا صعودی",
+       "sort-ascending": "مرتب سازی وا صعودی",
+       "nstab-main": "پیج",
+       "nstab-user": "بلگه کارور",
+       "nstab-media": "بلگه مدیا",
+       "nstab-special": "پیجئل مخصوص",
+       "nstab-project": "بلگه پروجه",
+       "nstab-image": "فایل",
+       "nstab-mediawiki": "پیوم",
+       "nstab-template": "الگو",
+       "nstab-help": "بلگه هومیاری",
+       "nstab-category": "دسه",
+       "nosuchaction": "چنی دستوری موجود نی",
+       "nosuchspecialpage": "چنو بلگه مخصوصی نی",
+       "error": "خطا",
+       "databaseerror": "خطا دیتابیس",
+       "databaseerror-textcl": "خطا مئنه پرس  و جو پایگاه داده رخ دابی.",
+       "databaseerror-query": "سل کردن:$1",
+       "databaseerror-function": "عملکرد:$1",
+       "databaseerror-error": "خطا:$1",
+       "readonly": "پایگاه داده بسته وابی",
+       "enterlockreason": "یه دلیل سی قفل کردن وارد کو ، از جمله برآورد زمونی که قفل منتشر  خواهد وابی",
+       "missingarticle-rev": "(تجدید نظر#:$1)",
+       "missingarticle-diff": "(تفاوت:$1،$2)",
+       "internalerror": "خطا داخلی",
+       "internalerror_info": "خطا داخلی:$1",
+       "filecopyerror": "نیوا قایلنه کپی کی \"$1\" تا \"$2\"",
+       "filerenameerror": "نیوا نوم قایلنه تغییر بی \"$1\" به \"$2\"",
+       "filedeleteerror": "نیوا فایلنه حذف کی \"$1\"",
+       "directorycreateerror": "نیوا پوشه بسازی \"$1\"",
+       "filenotfound": "نیوا فایلنه پیداس کی \"$1\"",
+       "unexpected": "ارزش ناگهونی: \"$1\"=\"$2\"",
+       "formerror": "خطا:نیوا فرمنه ارسال کیت.",
+       "badarticleerror": "ای عمل نیوا ری ای بلگه اجرا وابی.",
+       "cannotdelete-title": "نیوا بلگنه حذف کی \"$1\"",
+       "badtitle": "عنوان بد",
+       "badtitletext": "عنوان درخواستی نامعتبر، خالی، یا عنوانی بین زوونی یا بین‌ویکی‌ای با پیوند نادرسته\nو ممکنه  یه یا چند کاراکتر داشته بوه که مئن عنوان مربوط نوا زش استفاده کنین",
+       "viewsource": "دیئن منبع",
+       "viewsource-title": "دیئن منبع سی $1",
+       "actionthrottled": "عمل متوقف وابی",
+       "protectedpagetext": "ای بلگه سیکه اصلاح یا دیهر عملل ریش انجام نبی محافظت وابیه",
+       "viewsourcetext": "ایشا ترین بوینین وکپی کنین منبع ای بلگنه:",
+       "mycustomcssprotected": "ایشا اجازه ناریت سی اصلاح کردن ای بلگه سی اس اس",
+       "mycustomjsprotected": "ایشا اجازه ناریت سی اصلاح کردن ای بلگه جاوا اسکریپت",
+       "myprivateinfoprotected": "ایشا اجازه ناریت سی اصلاح کردن اطلاعات شصخی خوتون",
+       "mypreferencesprotected": "ایشا اجازه ناریت سی اصلاح کردن تنظیمات خوتون",
+       "ns-specialprotected": "بلگه یل مخصوص نیوا اصلاح بوان",
+       "exception-nologin": "نوایته",
+       "exception-nologin-text-manual": "لطفا $1 تا بترید به ای بلگه یا عمل دسترسی پیدا کنیت",
+       "virus-scanfailed": "اسکن انجام نبی (کد $1)",
+       "virus-unknownscanner": "آنتی ویروس ناشناخته",
+       "welcomeuser": "خش اومیت، $1!",
+       "yourname": "نوم کارور:",
+       "userlogin-yourname": "نوم کارور",
+       "userlogin-yourname-ph": "نوم خوتونه وارد بکیت",
+       "createacct-another-username-ph": "نوم کارورنه وار بکیت",
+       "yourpassword": "رمز:",
+       "userlogin-yourpassword": "رمز",
+       "userlogin-yourpassword-ph": "رمز خوتونه وارد بکیت",
+       "createacct-yourpassword-ph": "رمزنه وارد بکیت",
+       "yourpasswordagain": "مجددا رمزنه تایپ بکیت",
+       "createacct-yourpasswordagain": "تایید رمز",
+       "createacct-yourpasswordagain-ph": "رمزنه مجددا وارد بکیت",
+       "userlogin-remembermypassword": "منه تو نگه دار",
+       "userlogin-signwithsecure": "د اتصال ایمن استفاده کو",
+       "yourdomainname": "دومین کارو:",
+       "password-change-forbidden": "ایشا نیتریت مئنه ای ویکی رمزه یلنه اصلاح بکیت",
+       "login": "اویدن وه سیستم",
+       "nav-login-createaccount": "اوییدن وه سیستم / درست کردن اکانت",
+       "userlogin": "اوییدن وه سیستم / درست کردن اکانت",
+       "userloginnocreate": "اویدن وه سیستم",
+       "logout": "رهدن زه سیستم",
+       "userlogout": "رهدن زه سیستم",
+       "notloggedin": "نوایته",
+       "userlogin-noaccount": "اکانت ناریت؟",
+       "userlogin-joinproject": "ملحق شو وه {{SITENAME}}",
+       "nologin": "اکانت ناریت؟ $1.",
+       "nologinlink": "راست کردن یه حساو کاروری",
+       "createaccount": "درست کردن اکانت",
+       "gotaccount": "اکانت داریت؟ $1.",
+       "gotaccountlink": "اویدن وه سیستم",
+       "userlogin-resetlink": "مشخصه یل ورود خوتونه نونیت؟",
+       "userlogin-resetpassword-link": "رمزتونه نونیت؟",
+       "userlogin-helplink2": "هومیاری وا اوییدن وه سیستم",
+       "userlogin-createanother": "یه اکانت دیه بساز",
+       "createacct-emailrequired": "آدرس ایمیل",
+       "createacct-emailoptional": "آدرس ایمیل (واخوتونی)",
+       "createacct-email-ph": "آدرس ایمیل خوتونه وارد بکیت",
+       "createacct-another-email-ph": "آدرس ایمیلنه وارد بکیت",
+       "createacct-realname": "نوم راسکی (واخوتونی)",
+       "createaccountreason": "دلیل:",
+       "createacct-reason": "دلیل",
+       "createacct-reason-ph": "سیچه داریت یه اکانت دیه ایسازیت",
+       "createacct-captcha": "چک کردن امنیتی",
+       "createacct-imgcaptcha-ph": "ای نشتنه ک دومن سیل کی وارد کو",
+       "createacct-submit": "اکانت خوتونه بسازیت",
+       "createacct-another-submit": "یه اکانت دیه بساز",
+       "createacct-benefit-heading": "{{SITENAME}} وا کسایی مث خوتون ساخته بیه",
+       "createacct-benefit-body1": "{{PLURAL:$1|اصلاح|اصلاحل}}",
+       "createacct-benefit-body2": "{{PLURAL:$1|بلگه|بلگه یل}}",
+       "createacct-benefit-body3": "اخیرا {{PLURAL:$1|هومیارنده|هومیارنده یل}}",
+       "badretype": "رمزنه ک وارد کیت وایک جور نیوان",
+       "userexists": "نوم کاروری ک وارد کیت الان در حال استفاده هسس\nلطفا یه نوم دیه انتخاب کیت",
+       "loginerror": "خطا ورود",
+       "createacct-error": "خطا حین ساختن اکانت",
+       "createaccounterror": "نیوا اکانتنه بسازیت: $1",
+       "noname": "ایشا یه نوم کارور معتبر مشخص نکردیته",
+       "loginsuccesstitle": "اویدن وا بخت وتوفیق وه سیستم",
+       "loginsuccess": "''' ایشا اویدن وه مئنه سایت {{SITENAME}} و عنوان \"$1\".'''",
+       "nosuchusershort": "کاروری وا ای نوم نی\"$1\".\nحروف نومنه چک کنین.",
+       "nouserspecified": "ایشا واسی یه نوم کارور مشخص کیت",
+       "login-userblocked": "ای کارور بسته وابید.اجازه ورود ناریت.",
+       "wrongpassword": "رمز وارد وابیده درست نی.\nلطفا دوباره سعی کنین.",
+       "wrongpasswordempty": "رمز وارد وابیده عقیم یامبهم بی.\nلطفا دوباره سعی کنین.",
+       "password-name-match": "ایشا واسی وا نوم کاروریت متفاوت وابی.",
+       "password-login-forbidden": "استفاده زه ای نوم کارور و رمز ممنوع وابی.",
+       "mailmypassword": "تعویض رمز",
+       "passwordremindertitle": "رمز موقتی تازه سی {{SITENAME}}",
+       "noemail": "آدرس ایمیلی ظبط نوابی سی کارور \"$1\".",
+       "noemailcreate": "ایشا واسی یه آدرس ایمیل معتبر آماده کیت.",
+       "passwordsent": "یه رمز تازه ارسال وابید وه نشانی ایمیل ثبت وابده سی \"$1\".\nلطفا بعد از دریافت آن داخل سیستم بوین.",
+       "mailerror": "خطا ارسال ایمیل: $1",
+       "emailauthenticated": "آدرس ایمی ایشا تایید وابی ری $2 مئنه $3",
+       "emailconfirmlink": "آدرس ایمیل خوتونه تایید بکیت",
+       "cannotchangeemail": "اکانت آدرسل ایمیلل نیوا تغییر وابی مئنه ای ویکی.",
+       "emaildisabled": "ای سایت نیتره ایمیل ارسا کنه.",
+       "accountcreated": "اکانت ساخته بی",
+       "createaccount-title": "اکانت سازی سی {{SITENAME}}",
+       "login-abort-generic": "ورود ایشا ناموفق وابی - سقط وابی",
+       "loginlanguagelabel": "زوون:$1",
+       "pt-login": "اویدن وه سیستم",
+       "pt-login-button": "اویدن وه سیستم",
+       "pt-createaccount": "درست کردن اکانت",
+       "pt-userlogout": "رهدن زه سیستم",
+       "changepassword": "تغییر رمز",
+       "resetpass_announce": "سی پایان ورود ، ایشا واسی یه رمز جدید سیخوت به ونی.",
+       "resetpass_header": "تغییر رمز اکانت",
+       "oldpassword": "رمز قبلی:",
+       "newpassword": "رمز نو:",
+       "retypenew": "تایپ دوباره رمز:",
+       "resetpass_submit": "وندن رمز و اوییدن وه سیستم",
+       "changepassword-success": "رمز ایشا وا موفقیت تغییر وابی",
+       "resetpass_forbidden": "رمزل نیوا تغییر کنن",
+       "resetpass-no-info": "ایشا واسی وارد بویت تا وه بلگه ای پوشه دسترسی داشته بوین.",
+       "resetpass-submit-loggedin": "تغییر رمز",
+       "resetpass-submit-cancel": "لغو",
+       "resetpass-recycled": "خواهشا رمز خوتونه مجددا وه چیکه زه ای رمز الانی تونه بنیت",
+       "resetpass-temp-password": "رمز جایگزین",
+       "resetpass-expired": "رمز ایشانه اعتبار ناره.لطفا یه رمز نو سیخوتون بونیت.",
+       "passwordreset": "تعویض رمز",
+       "bold_sample": "متن گپ نما",
+       "bold_tip": "متن گپ نما",
+       "italic_sample": "متن شکسته",
+       "italic_tip": "متن شکسته",
+       "link_sample": "عنوان لینک",
+       "link_tip": "لینک داخلی",
+       "extlink_sample": "http://www.example.com عنوان لینک",
+       "extlink_tip": "(به خاطر بسپار http:// prefix)\nلینک خارجی",
+       "headline_sample": "سرخط متن",
+       "headline_tip": "2سرخط یکسان",
+       "nowiki_sample": "متن شکل نداده یافرمت نوابیده را ایچو بنین",
+       "nowiki_tip": "زه فرمت کردن یا شکل دادن ویکی چشم پوشی کن",
+       "image_tip": "فایل محاط وابید",
+       "media_tip": "لینک فایل",
+       "sig_tip": "امضای ایسا و برچسب زمان",
+       "hr_tip": "خط افقی (کم استفاده کنین)",
+       "summary": "خلاصه:",
+       "minoredit": "ای یه اصلاح کچک وابی",
+       "watchthis": "پیگیری ای بلگه",
+       "savearticle": "بلگه ضبط بوه",
+       "showpreview": "پیش‌نمایش",
+       "showdiff": "نشودائن تغییرات",
+       "anoneditwarning": "<strong>هشدار:</strong> ایشا نوایته مئنه سیستم. آی پی ایشا سی عومو قابل رویت هی ار اصلاحی بکنیت. ار ایشا <strong>[$1 ورود]</strong> یا <strong>[$2 درست کردن یه حسآو]</strong>, اصلاحل ایشا به حسآو کاروری ایشا گذاشته ایوان وا منفعل حسآول دیه..",
+       "loginreqlink": "اویدن وه سیستم",
+       "newarticletext": "ایشا یه لینک وه یه بلگنه که هنی وجود نارنه دنبال کردیته.\nسی درست کردن ای بلگه،نوشتنه مئنه جعبه زیر شروع کنیت(بینیتو [$1 help page] سی اصلاعات اضافی).\nار ایشا وا خطا ایچه هیسیت، ری <strong>back</strong> button مرورگر ایشا کلیژ کیت.",
+       "noarticletext": "د حال جاری متنی مئنه ای بلگه نیسس.\nایشا ایترید [[Special:Search/{{PAGENAME}}|جستن سی عنوان ای بلگه]] مئنه بلگه یل دیه.\n<کلاس دهانه=\"لینکل ساده\">[{{آدرس کامل سایت:{{#مخصوص:نمایه یل}}|بلگه={{FULLPAGENAMEE}}}} جستن سی نمایل مربوط], یا [{{آدرس کامل سایت:{{FULLPAGENAME}}|اقدام=اصلاح}} اصلاح کو ای بلگنه]</دهانه>.",
+       "noarticletext-nopermission": "د حال جاری متنی مئنه ای بلگه نیسس.\nایشا ایترید [[Special:Search/{{PAGENAME}}|search for this page title]] مئنه بلگل دیه، یا <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} search the related logs]</span>، ولی ایشا نیترید ای بلگنه درس بکنیت.",
+       "editing": "درحال اصلاح $1",
+       "creating": "درست کردن $1",
+       "editingsection": "درحال اصلاح $1 (قسمت)",
+       "templatesused": "{{PLURAL:$1|قالب|قالبل}} اسفاده بیه مئنه ای بلگه:",
+       "template-protected": "(تحت حمایت)",
+       "template-semiprotected": "(نیمه حمایت وابیده)",
+       "hiddencategories": "ای بلگه عضو {{PLURAL:$1|1 دسه بنی قائم|$1 دسه بنی یل قائم}} هیسس :",
+       "permissionserrorstext-withaction": "ایشا اجازه ناریت که $2, سی ای {{PLURAL:$1|دلیل|دلیلل}}:",
+       "moveddeleted-notice": "ای بلگه حذف وابیده.\nحذف و انتقال سیاهه ای بلگه فراهم وابیده دومن سرچشمه.",
+       "viewpagelogs": "نشودائن نمایه ها سی ای بلگه",
+       "currentrev-asof": "آخرین نسخه تا $1",
+       "revisionasof": "اصلاح $1",
+       "revision-info": "نسخه $1 توسط {{GENDER:$6|$2}}$7",
+       "previousrevision": "← اصلاح قبلی",
+       "nextrevision": "نسخه جدیدتر →",
+       "currentrevisionlink": "آخرین نسخه",
+       "cur": "فعلی",
+       "last": "قبلی",
+       "rev-delundel": "قابلیت تغییر دائن",
+       "history-title": "تاریخچه اصلاحل $1",
+       "difference-title": "تفاوت میان تجدید نطرل \"$1\"",
+       "lineno": "سطر $1:",
+       "editundo": "لغو",
+       "diff-multi-sameuser": "({{PLURAL:$1|یه نسخه متوسط|$1 نسخه یل متوسط}} توسط کارور مشابه نشو نوابیه)",
+       "searchresults": "نتیجه یل جستن",
+       "searchresults-title": "نتایج جستن سی \"$1\"",
+       "prevn": "قبلی {{PLURAL:$1|$1}}",
+       "nextn": "بعدی {{PLURAL:$1|$1}}",
+       "nextn-title": "بعدی $1 {{PLURAL:$1|نتیجه|نتیجه یل}}",
+       "shown-title": "نشو دائن $1 {{PLURAL:$1|نتیجه|نتیجه یل}} د هر بلگه",
+       "viewprevnext": "مشاهده ($1 {{int:pipe-separator}} $2) ($3)",
+       "searchmenu-new": "<strong>درست کو ای بلگنه \"[[:$1]]\" مئنه ای ویکی!</strong> {{PLURAL:$2|0=|همچنین سل کو بلگه ای که وا جستن پیداش کردیه.|همچنین سل کو نتایج جستنه.}}",
+       "searchprofile-articles": "بلگه محتوا",
+       "searchprofile-images": "چندرسانه ای",
+       "searchprofile-everything": "همه چیا",
+       "searchprofile-advanced": "پیشرفته",
+       "searchprofile-articles-tooltip": "جستن مئنه $1",
+       "searchprofile-images-tooltip": "جستن سی فایلل",
+       "searchprofile-everything-tooltip": "جستن سی محتوا(شامل بلگل گپ)",
+       "searchprofile-advanced-tooltip": "جستن مئنه همدرنگل سفارشی",
+       "search-result-size": "$1 ({{PLURAL:$2|1 کلمه|$2 کلمه یل}})",
+       "search-redirect": "(تغییر مسیر $1)",
+       "search-section": "(قسمت $1)",
+       "search-suggest": "آیا منطور ایشا ای بی:$1",
+       "searchall": "همه",
+       "search-showingresults": "{{PLURAL:$4|نتیجه <strong>$1</strong> ز <strong>$3</strong>|نتیجه یل <strong>$1 - $2</strong> ز <strong>$3</strong>}}",
+       "search-nonefound": "نتیجه ای مرتبط وا هونی که در خواست دیته نی.",
+       "mypreferences": "تنظیمات",
+       "right-writeapi": "استفاده د نوشتن به صورت API",
+       "newuserlogpage": "سیاهه درست کردن حسآو",
+       "enhancedrc-history": "سرچشمه یل",
+       "recentchanges": "تغییرل جدید",
+       "recentchanges-legend": "گزینه یل تغییرات اخیر",
+       "recentchanges-summary": "شیار تغییرات اخیر مئنه ای بلگه به ویکی .",
+       "recentchanges-label-newpage": "ای اصلاح یه بلگه نو ایسازه",
+       "recentchanges-label-minor": "ای یه اصلاح کچک وابی",
+       "recentchanges-label-bot": "ای اصلاح توسط یه روبات انجام وابیه",
+       "recentchanges-label-unpatrolled": "ای اصلاح هنو گشت نوابیده",
+       "recentchanges-label-plusminus": "اندازه بلگه وا ای تعداد بایت تغییر داده بیه",
+       "recentchanges-legend-heading": "'''آلشتیا ایسنی :'''",
+       "recentchanges-legend-newpage": "{{عضول انجومن:تغییرل اخیر-برچسب-بلگه نو}} (هنی سل کو [[Special:NewPages|لیست بلگل نو]])",
+       "rclistfrom": "نشودادن تغییرات نو وا شروع زه $3 $2",
+       "rcshowhideminor": "اصلاحات کوچیک $1",
+       "rcshowhideminor-show": "نشو دائن",
+       "rcshowhideminor-hide": "قائم کردن",
+       "rcshowhidebots": "$1 ربات‌ل یا بوتل",
+       "rcshowhidebots-show": "نشو دائن",
+       "rcshowhidebots-hide": "قائم کردن",
+       "rcshowhideliu": "$1 حسآول وارد وابیده",
+       "rcshowhideliu-hide": "قائم کردن",
+       "rcshowhideanons": "$1 کاروران داخل نوابیده",
+       "rcshowhideanons-show": "نشو دائن",
+       "rcshowhideanons-hide": "قائم کردن",
+       "rcshowhidemine": "$1 اصلاحات مو",
+       "rcshowhidemine-show": "نشو دائن",
+       "rcshowhidemine-hide": "قائم کردن",
+       "rclinks": "نشودادن آخرین $1 تغییر در $2 روز اخیر؛ $3",
+       "diff": "تفاوت",
+       "hist": "گزارشت",
+       "hide": "قائم کردن",
+       "show": "نشو دائن",
+       "minoreditletter": "رز",
+       "newpageletter": "تا",
+       "boteditletter": "ر",
+       "rc-change-size-new": "$1 {{PLURAL:$1|بایت|بایتل}} بعد تغییر",
+       "recentchangeslinked": "تغییرل مربوط",
+       "recentchangeslinked-toolbox": "تغییرل مربوط",
+       "recentchangeslinked-title": "تغییرهای مرتبط با $1",
+       "recentchangeslinked-summary": " ای بلگه خاص تغییرات اخیر مئنه بلگل لینک وابیده وه ای بلگنه نشو اده.\nبلگلی که مئنه [[Special:Watchlist|لیست پیگیری یل]] ایشا هیسن به شکل '''سیاه''' نشو داده ابون.",
+       "recentchangeslinked-page": "نوم بلگه:",
+       "recentchangeslinked-to": "نشو دائن تغییرات بلگلی که و بلگه داده بیه لینک داده شدنه به جای",
+       "upload": "بلم گیر کردن فایلل",
+       "filedesc": "خلاصه",
+       "license-header": "صدور مجوز",
+       "imgfile": "فایل",
+       "file-anchor-link": "فایل",
+       "filehist": "تاریخچه فایل",
+       "filehist-help": "رو تاریخ‌ها کلیک کنیت تا نسخه مرتبط را بینیت.",
+       "filehist-current": "جاری",
+       "filehist-datetime": "تاریخ/زمان",
+       "filehist-thumb": "کچک",
+       "filehist-thumbtext": "کچک سی نسخه از تا $1",
+       "filehist-user": "کارور",
+       "filehist-dimensions": "ابعاد",
+       "filehist-comment": "توضیح",
+       "imagelinks": "استفاده د فایل",
+       "linkstoimage": "ذیل الذکر {{PLURAL:$1|لینکل بلگه|$1 لینک بلگل}} به ای فایل:",
+       "nolinkstoimage": "بلگه یلی که وه ای فایل لینک دائنه نی.",
+       "sharedupload-desc-here": "ای فایل از $1 اومائه و شاید د پروجه یل دیه مورد استفاده وابین.\nتوضیحتل ری [$2 بلگه توضیح فایل] دومن نشو وابیه .",
+       "upload-disallowed-here": "ایشا نیترید ای فایلنه بنویسید",
+       "randompage": "پیج اتفاقی",
+       "nbytes": "$1 {{PLURAL:$1|بایت|بایتل}}",
+       "nmembers": "$1 {{PLURAL:$1|عضو|اعضول}}",
+       "newpages": "پیجئل جدید",
+       "pager-older-n": "{{PLURAL:$1|قدیمی تر 1|قدیمی تر $1}}",
+       "booksources": "منوبع کتآو",
+       "booksources-search-legend": "جستن سی منوبع کتآو",
+       "booksources-search": "جستن",
+       "log": "نمایه ها",
+       "allarticles": "همه بلگل",
+       "allpagessubmit": "رو",
+       "categories": "دسه یل",
+       "mywatchlist": "فهرست پیگیری یل",
+       "watch": "پی‌گیری",
+       "dellogpage": "نمایه حذف",
+       "rollbacklink": "عقب گرد",
+       "rollbacklinkcount": "ورگرد $1 {{PLURAL:$1|اصلاح|اصلاحل}}",
+       "protectlogpage": "نمایه حفاظت وحمایت",
+       "namespace": "همدرنگل:",
+       "invert": "انتخاب برعکس بوه",
+       "tooltip-invert": "انتخاب کو ای جعبنه سی قائم کردن تغییرل بلگلی که همدرنگلشو انتخاب وابین(و همدرنگل مرتبط ار انتخاب وابین)",
+       "namespace_association": "همدرنگل مرتبط",
+       "tooltip-namespace_association": "انتخاب کو ای جعبنه سیکه گپ یا موضوع همدرنگ مرتبط وا همدرنگل انتخاب وابینه قرار بنی.",
+       "blanknamespace": "(اصلی)",
+       "contributions": "{{GENDER:$1|کارور}} سهمل",
+       "mycontris": "مشارکتل",
+       "month": "در این ماه (و قبل زه آن):",
+       "year": "در ای سال (وقبل زه آن):",
+       "whatlinkshere": "لینک یل ای بلگه",
+       "whatlinkshere-title": "بلگل که لینک دائنه به \"$1\"",
+       "whatlinkshere-page": "بلگه",
+       "linkshere": "لینک بلگل ذیل الذکر به '''[[:$1]]''':",
+       "isredirect": "بلگه تغییر مسیر",
+       "istemplate": "استفاده‌ وابیده داخل بلگه",
+       "isimage": "لینک فایل",
+       "whatlinkshere-prev": "{{PLURAL:$1|قبلی |مورد قبلی$1}}",
+       "whatlinkshere-next": "{{PLURAL:$1|بعدی |مورد بعدی $1}}",
+       "whatlinkshere-links": "← لینکل",
+       "whatlinkshere-hideredirs": "$1 تغییرل مسیر",
+       "whatlinkshere-hidetrans": "$1 تراگنجایش",
+       "whatlinkshere-hidelinks": "$1 لینکل",
+       "whatlinkshere-filters": "فیلترل",
+       "blocklink": "بسه وابو",
+       "contribslink": "شراکتل",
+       "movelogpage": "نمایه جابجایی",
+       "export": "بلگل صادره یل",
+       "thumbnail-more": "گپ کردن",
+       "tooltip-pt-userpage": "حسآو کاروری ایشا",
+       "tooltip-pt-mytalk": "بلگه گپ ایشا",
+       "tooltip-pt-preferences": "اولویتل مو",
+       "tooltip-pt-watchlist": "لیست بلگلی که ایشا تغییرات هونونه  دنبال اکنین",
+       "tooltip-pt-mycontris": "لیست مشارکتل ایشا",
+       "tooltip-pt-login": "توصیه وابوه که وه سیستم داخل بوین. اما اجباری نیسس",
+       "tooltip-pt-logout": "رهدن زه سیستم",
+       "tooltip-pt-createaccount": "توصیه وابوه که حساب کاروری درست بکنیت یا وارد بوین. اما اجباری نیسس",
+       "tooltip-ca-talk": "صحبت د بلگه محتوا",
+       "tooltip-ca-edit": "ایسا ترین ای پیجنه ویرایش کنین.لطفا قبل ویرایش ای پیج از دکمه پیش نمایش استفاده کنین",
+       "tooltip-ca-addsection": "آغاز کردن یه قسمت نو",
+       "tooltip-ca-viewsource": "ای بلگه  تحت حمایته ایساترین منبعسه بوینین",
+       "tooltip-ca-history": "ویرگار",
+       "tooltip-ca-move": "جابجاکردن ای بلگه",
+       "tooltip-ca-watch": "اضاف کردن ای بلگه به لیست پیگیری یلت",
+       "tooltip-search": "جستن {{نوم جا}}",
+       "tooltip-search-go": "رو مئنه بلگه ای وا ای نوم ار هیسس",
+       "tooltip-search-fulltext": "جستن پیجئل هنه سی ای نشته",
+       "tooltip-p-logo": "رهدن د پیج اصلی",
+       "tooltip-n-mainpage": "رو د پیج اصلی",
+       "tooltip-n-mainpage-description": "رهدن د پیج اصلی",
+       "tooltip-n-portal": "درباره پروجه ، کارینه ک تری کنی ، ینه جا سی جستن چیزل",
+       "tooltip-n-currentevents": "پیداکردن اطلاعات زمینه یاسابقه اطلاعات در اتفاقات جاری",
+       "tooltip-n-recentchanges": "سیائل تغییرل آخری مئن ای ویکی",
+       "tooltip-n-randompage": "سوار کردن یه پیج اتفاقی",
+       "tooltip-n-help": "ینه جا سی فهمیدن",
+       "tooltip-t-whatlinkshere": "فهرست همه بلگه یل ویکی که ایچو لینک دارن",
+       "tooltip-t-recentchangeslinked": "تغییرل آخر مئن پیجئل ک لینک دانه و ای پیج",
+       "tooltip-feed-atom": "تغذیه کوچیک ترین جزء  ای بلگه",
+       "tooltip-t-contributions": "یه لیس ز مشارکت کننده یل و مقاله دهنده یل ای بلگه",
+       "tooltip-t-upload": "بلم گیر کردن فایلل",
+       "tooltip-t-specialpages": "ورقل ویجه",
+       "tooltip-t-print": "ورژن چاپ بینل ای پیج",
+       "tooltip-t-permalink": "لینکل تا ابد وه ای ورژن ای پیج",
+       "tooltip-ca-nstab-main": "سل کردن محتوا پیج",
+       "tooltip-ca-nstab-user": "دیئن بلگه کارور",
+       "tooltip-ca-nstab-special": "ای بلگه مخصوصه وایسا نترین خود ای بلگنه اصلاح کنین",
+       "tooltip-ca-nstab-project": "دیئن بلگه پروجه",
+       "tooltip-ca-nstab-image": "دیئن بلگه فایل",
+       "tooltip-ca-nstab-template": "دیئن قالب",
+       "tooltip-ca-nstab-category": "دیئن بلگه دسه بنی",
+       "tooltip-save": "ضبط کردن تغییراتت",
+       "tooltip-preview": " دیئن تغییرات ، لطفا قبل ضبط کردن د ای خدمت استفاده کنیت!",
+       "tooltip-diff": "دیدن تغییراتی که ایسا من ای متن انجام دادینه",
+       "tooltip-rollback": "\"اعاده\" برگرداندن به وضع اولیه سی ای بلگه که سی مشارکت  آخر اصلاح وابیده وا یک کلیک",
+       "tooltip-undo": "\"لغو\"ورگشت ای اصلاح و وا ویدن فرم اصلاح مئنه پیش نمایش.اجازه ایده که یه دلیل وه خلاصه اضافه بکنی.",
+       "tooltip-summary": "یه خلاصه کوچکی بنویس",
+       "simpleantispam-label": "انتخاب آنتی-اسپم\nپر <strong>نکنید</strong> اینه مئن!",
+       "pageinfo-toolboxlink": "اطلاعات بلگه",
+       "previousdiff": "← اصلاح قدیمی",
+       "nextdiff": "اصلاح جدیدتر→",
+       "file-info-size": "$1 × $2 پیکسل, اندازه فایل: $3, MIME نوع: $4",
+       "file-nohires": "قابلیت تفکیک بالاتری در دسترس نی.",
+       "svg-long-desc": "SVG فایل, تقریبا$1 × $2 پیکسل, اندازه فایل: $3",
+       "show-big-image": "اندازه اصلی",
+       "show-big-image-preview": "اندازه ای پیش نمایش:$1.",
+       "show-big-image-other": "دیه {{PLURAL:$2|تفکیک پذیری|تفکیک پذیری یل}}: $1.",
+       "show-big-image-size": "$1 × $2 پیکسلل",
+       "metadata": "فراداده",
+       "metadata-help": " ای فایل دارای اطلاعات اضافه‌ای هی که احتمالاً با دوربین دیجیتالی‌ یا پویشگری که سی ایجاد یا دیجیتالی‌کردن هو به کار رهده اضاف وابیده . ایر فایل زه وضعیت اولیه اس تغییر داده وابیده بوه ممکنه همه توضیحات موجود اطلاعات عکس را منعکس نکنه",
+       "metadata-fields": "زمینه یل عسک فراداده که مئنه ای پیوم لیس وابینه ، قرار وابی گرتن ری بلگه نومایش عسک وقتی که جدول فراداده فروریخت.\nبقیه قائم میشن به صورت پیش فرض.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
+       "exif-orientation": "گرایش",
+       "exif-xresolution": "تفکیک پذیری افقی",
+       "exif-yresolution": "تفکیک پذیری عمودی",
+       "exif-datetime": "تغییرات تاریخ و زمان فایل",
+       "exif-make": "کمپانی سازنده دوربین",
+       "exif-model": "مدل دوربین",
+       "exif-software": "نرم افزار مورد استفاده",
+       "exif-exifversion": "نسخه Exif",
+       "exif-colorspace": "فضای رنگ",
+       "exif-datetimeoriginal": "تاریخ و زمان تولید داده یل",
+       "exif-datetimedigitized": "تاریخ و زمان دیجیتالی وابیدن",
+       "exif-orientation-1": "عادی",
+       "namespacesall": "همه",
+       "monthsall": "همه",
+       "semicolon-separator": "؛&#32;",
+       "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|گپ]])",
+       "specialpages": "پیجئل مخصوص",
+       "tag-filter": "[[Special:Tags|برچسب]] فیلتر:",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|برچسب|برچسبل}}]]: $2)",
+       "logentry-delete-delete": "$1 {{GENDER:$2|حذف وابیده}} بلگه $3",
+       "logentry-move-move": "$1 {{GENDER:$2|انتقال داده بیه}} بلگه $3 به $4",
+       "logentry-newusers-create": "حسآو کارور $1 وابیه {{GENDER:$2|درست }}",
+       "logentry-upload-upload": "$1 {{GENDER:$2|بارگذاری وابیده}} $3",
+       "searchsuggest-search": "جستن"
+}
index d01fead..f7562e6 100644 (file)
@@ -11,7 +11,8 @@
                        "Wisdom",
                        "Zorigt",
                        "לערי ריינהארט",
-                       "아라"
+                       "아라",
+                       "Sembuk"
                ]
        },
        "tog-underline": "Линкүүдийн доогуур зураас зур:",
        "tooltip-pt-mycontris": "Таны оруулсан хувь нэмрийн жагсаалт",
        "tooltip-pt-login": "Заавал хийх ёстой зүйл биш боловч таныг нэвтрэхийг зөвлөж байна.",
        "tooltip-pt-logout": "Гарах",
+       "tooltip-pt-createaccount": "Заавал шаарлагатай биш боловч та бүртгүүлж, нэвтэрч орно уу.",
        "tooltip-ca-talk": "Хуудсыг зөвшин хэлэлцэх",
        "tooltip-ca-edit": "Та энэ хуудсыг засч янзалж болно. Хадгалахаасаа өмнө урьдчилан харах товчийг дардаг юм шүү.",
        "tooltip-ca-addsection": "Шинэ сэдвээр ярьж эхлэх",
index 4ed5b63..7f498e9 100644 (file)
@@ -61,7 +61,7 @@
        "tog-watchdefault": "Legg til sider og filer jeg endrer på i min overvåkingsliste",
        "tog-watchmoves": "Legg til sider og filer jeg flytter til min overvåkingsliste",
        "tog-watchdeletion": "Legg til sider og filer jeg sletter i min overvåkingsliste",
-       "tog-watchrollback": "Legg til sider jeg har utført tilbakestilling på i min overvåkningsliste",
+       "tog-watchrollback": "Legg til sider hvor jeg har utført tilbakestilling i min overvåkningsliste",
        "tog-minordefault": "Merk i utgangspunktet alle redigeringer som mindre",
        "tog-previewontop": "Vis forhåndsvisningen over redigeringsboksen",
        "tog-previewonfirst": "Vis forhåndsvisning når du begynner å redigere",
index 655d130..d8660a7 100644 (file)
@@ -40,7 +40,7 @@
        "tog-minordefault": "सबै सम्पादनहरूलाई पूर्वनिर्धारित रुपमा सामान्य चिनो लगाउने",
        "tog-previewontop": "सम्पादन सन्दुक अघि पूर्वरुप देखाउने",
        "tog-previewonfirst": "पहिलो सम्पादनमा पूर्वरुप देखाउने",
-       "tog-enotifwatchlistpages": "मà¥\87रà¥\8b à¤¨à¤¿à¤\97रानà¥\80 à¤¸à¥\82à¤\9aà¥\80मा à¤°à¤¹à¥\87à¤\95ा à¤ªà¥\83षà¥\8dठ à¤\85थवा à¤«à¤¾à¤\87लहरà¥\81 परिवर्तन भएपछी मलाई ई-मेल गरियोस्",
+       "tog-enotifwatchlistpages": "मà¥\87रà¥\8b à¤¨à¤¿à¤\97रानà¥\80 à¤¸à¥\82à¤\9aà¥\80मा à¤°à¤¹à¥\87à¤\95ा à¤ªà¥\83षà¥\8dठ à¤\85थवा à¤«à¤¾à¤\87लहरà¥\82 परिवर्तन भएपछी मलाई ई-मेल गरियोस्",
        "tog-enotifusertalkpages": "मेरो प्रयोगकर्ता वार्ता पृष्ठ परिवर्तन भएपछी मलाई ई-मेल गर्ने",
        "tog-enotifminoredits": "पृष्ठहरू र फाइलहरूमा सामान्य सम्पादन भएमा पनि मलाई ई-मेल गर्ने",
        "tog-enotifrevealaddr": "जानकारी इ-मेलहरूमा मेरो इ-मेल खुलाउने",
        "category-subcat-count-limited": "यो श्रेणीमा निम्न {{PLURAL:$1|उपश्रेणी|$1 उपश्रेणीहरू}} छन् ।",
        "category-article-count": "{{PLURAL:$2|यो श्रेणीमा एक मात्र पृष्ठरहेको छ।|कुल $2 मध्ये यो श्रेणीमा {{PLURAL:$1|पृष्ठ|$1 पृष्ठहरू}} रहेका छन् । }}",
        "category-article-count-limited": "निम्न {{PLURAL:$1|पृष्ठ|$1 पृष्ठहरू}} यस श्रेणीमा रहेको ।",
-       "category-file-count": "{{PLURAL:$2|यà¥\8b à¤¶à¥\8dरà¥\87णà¥\80मा à¤¨à¤¿à¤®à¥\8dन à¤«à¤¾à¤\87ल à¤®à¤¾à¤¤à¥\8dर à¤\9b à¥¤|निमà¥\8dन à¤¶à¥\8dरà¥\87णà¥\80मा {{PLURAL:$1|फाà¤\87ल|$1 à¤«à¤¾à¤\87लहरà¥\81}} , कुल  $2 मध्ये रहेको ।}}",
-       "category-file-count-limited": "निमà¥\8dन  {{PLURAL:$1|फाà¤\87ल|$1 à¤«à¤¾à¤\87लहरà¥\81}} यस श्रेणीमा रहेको ।",
+       "category-file-count": "{{PLURAL:$2|यà¥\8b à¤¶à¥\8dरà¥\87णà¥\80मा à¤¨à¤¿à¤®à¥\8dन à¤«à¤¾à¤\87ल à¤®à¤¾à¤¤à¥\8dर à¤\9b à¥¤|निमà¥\8dन à¤¶à¥\8dरà¥\87णà¥\80मा {{PLURAL:$1|फाà¤\87ल|$1 à¤«à¤¾à¤\87लहरà¥\82}} , कुल  $2 मध्ये रहेको ।}}",
+       "category-file-count-limited": "निमà¥\8dन  {{PLURAL:$1|फाà¤\87ल|$1 à¤«à¤¾à¤\87लहरà¥\82}} यस श्रेणीमा रहेको ।",
        "listingcontinuesabbrev": "निरन्तरता...",
        "index-category": "क्रमाङ्कित पृष्ठहरू",
        "noindex-category": "क्रमाङ्कन नगरिएका पृष्ठहरू",
        "newarticle": "(नयाँ)",
        "newarticletext": "तपाईँले अहिले सम्म नभएको पृष्ठको लिंङ्क पहिल्याउनु भएको छ।\nयो पृष्ठ निर्माण गर्न तलको कोष्ठमा टाइप गर्नुहोस्  ।(थप जानकारीको लागि [$1 help page] हेर्नुहोस् )।\nयहाँ त्यत्तिकै आइपुग्नु भएको हो भने , ब्राउजरको  '''back''' बटन थिच्नुहोस ।",
        "anontalkpagetext": "----''यो वार्तालाप पृष्ठ अज्ञात प्रयोगकर्ताको हो जसले अहिलेसम्म खाता बनाएकै छैन, अथवा जसले यस पृष्ठको उपयोग गर्दैन।\nयस कारण हामीले उसलाई उसको आइ पी (IP) ठेगानाले चिन्न सक्छौं। \nयस्तो आइ पी (IP) ठेगाना धेरै प्रयोगकर्ताहरूको साझा हुनसक्छ।\nयदि तपाईं अज्ञात प्रयोगकर्ता हुनुहुन्छ र तपाईंमाथि अचाहिँदो टिप्पणी भएको अनुभव गर्नुहुन्छ भने भविष्यमा अन्य अज्ञात प्रयोगकर्तासितको भ्रमबाट बाँच्न कृपया [[Special:UserLogin/signup|खाता खोल्नुहोस्]] अथवा [[Special:UserLogin|प्रवेश गर्नुहोस्]] ''",
-       "noarticletext": "यस à¤²à¥\87à¤\96मा à¤\85हिलà¥\87 à¤\95à¥\87हि à¤ªà¤¨à¤¿ à¤ªà¤¾à¤  à¤\9bà¥\88न à¥¤\nतपाà¤\88लà¥\87 à¤\85नà¥\8dय à¤ªà¥\83षà¥\8dठमा [[Special:Search/{{PAGENAME}}|यस à¤ªà¥\83षà¥\8dठà¤\95à¥\8b à¤¶à¥\80रà¥\8dषà¤\95à¤\95à¥\8b à¤²à¤¾à¤\97ि à¤\96à¥\8bà¤\9c]] à¤\97रà¥\8dन à¤¸à¤\95à¥\8dनà¥\81हà¥\81नà¥\8dà¤\9b à¥¤\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} à¤ªà¥\83षà¥\8dठ à¤¸à¤\82बà¤\82धित à¤¢à¤¡à¥\8dडामा à¤\96à¥\8bà¤\9c],\nवा [{{fullurl:{{FULLPAGENAME}}|action=edit}}  à¤¯à¤¸à¥\88 à¤ªà¥\83षà¥\8dठलाà¤\88 à¤¸à¤\82पादन गर्ने]</span>.",
+       "noarticletext": "यस à¤²à¥\87à¤\96मा à¤\85हिलà¥\87 à¤\95à¥\87हि à¤ªà¤¨à¤¿ à¤ªà¤¾à¤  à¤\9bà¥\88न à¥¤\nतपाà¤\88à¤\82लà¥\87 à¤\85नà¥\8dय à¤ªà¥\83षà¥\8dठमा [[Special:Search/{{PAGENAME}}|यस à¤ªà¥\83षà¥\8dठà¤\95à¥\8b à¤¶à¥\80रà¥\8dषà¤\95à¤\95à¥\8b à¤²à¤¾à¤\97ि à¤\96à¥\8bà¤\9c]] à¤\97रà¥\8dन à¤¸à¤\95à¥\8dनà¥\81हà¥\81नà¥\8dà¤\9b à¥¤\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} à¤ªà¥\83षà¥\8dठ à¤¸à¤®à¥\8dबनà¥\8dधित à¤¢à¤¡à¥\8dडामा à¤\96à¥\8bà¤\9c],\nवा [{{fullurl:{{FULLPAGENAME}}|action=edit}}  à¤¯à¤¸à¥\88 à¤ªà¥\83षà¥\8dठलाà¤\88 à¤¸à¤®à¥\8dपादन गर्ने]</span>.",
        "noarticletext-nopermission": "यस लेखमा अहिले कुनै पनि पाठ छैन ।\nतपाईंले अन्य पृष्ठमा [[Special:Search/{{PAGENAME}}|यस पृष्ठको शीर्षकको लागि खोज]] गर्न सक्नुहुन्छ,\nअथवा <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|पृष्ठ={{FULLPAGENAMEE}}}} सम्बन्धित लगहरू खोज्न सक्नुहुनेछ ]</span> तर तपाईंलाई नयाँ पृष्ठ बनाउने अधिकार छैन।",
        "missing-revision": "\"{{FULLPAGENAME}}\" पृष्ठको अवतरण #$1 रहेको छैन।\n\nसामान्य रूपमा यसो एउटा हटाइएको पृष्ठको पुरानो लिङ्कमा क्लिक गर्दा हुन्छ।\nअधिक जानकारीको लागि तपाईं [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} हटाएको लग] हेर्न सक्नुहुन्छ।",
        "userpage-userdoesnotexist": "प्रयोगकर्ताको खाता  \"<nowiki>$1</nowiki>\" दर्ता गरिएको छैन ।\nतपाईँले पृष्ठ निर्माण/सम्पादन गर्न चाहनु भएको भए जाँच गर्नुहोस् ।",
        "searchprofile-everything": "सब थोक",
        "searchprofile-advanced": "उन्नत",
        "searchprofile-articles-tooltip": "$1 मा खोज्ने",
-       "searchprofile-images-tooltip": "फाà¤\87लहरà¥\81 खोज्ने",
+       "searchprofile-images-tooltip": "फाà¤\87लहरà¥\82 खोज्ने",
        "searchprofile-everything-tooltip": "सबै सामग्री खोज्ने (वार्तालाप समेत )",
        "searchprofile-advanced-tooltip": "अनुकुल नेमस्पेसमा खोज्ने",
        "search-result-size": "$1 ({{PLURAL:$2|1 शब्द|$2 शब्दहरू}})",
        "right-upload": "फाइलहरू उर्ध्वभरण गर्ने",
        "right-reupload": "रहेका फाइललाई अधिलेखन गर्ने",
        "right-reupload-own": "आफैले अपलोड  गर्नुभएको रहिआएको फाइल अधिलेखन गर्ने",
-       "right-reupload-shared": "साà¤\9dा à¤®à¤¿à¤¡à¤¿à¤¯à¤¾ à¤­à¤£à¥\8dडारमा à¤¸à¥\8dथानियरà¥\81पमा à¤«à¤¾à¤\87लहरà¥\81 अधिक्रमण गर्ने",
+       "right-reupload-shared": "साà¤\9dा à¤®à¤¿à¤¡à¤¿à¤¯à¤¾ à¤­à¤£à¥\8dडारमा à¤¸à¥\8dथानियरà¥\81पमा à¤«à¤¾à¤\87लहरà¥\82 अधिक्रमण गर्ने",
        "right-upload_by_url": "URL बाट फाइल उर्ध्वभरण गर्ने",
        "right-purge": "साइटको क्याश( cache) निश्चित नगरिकनै पर्ज(Purge) गर्ने",
        "right-autoconfirmed": "आइपी दर सीमाले असर नपार्ने",
        "right-editsemiprotected": "\"{{int:protect-level-autoconfirmed}}\" अनुरूप सुरक्षित गरिएको पृष्ठहरूलाई सम्पादन गर्नुहोस्",
        "right-editcontentmodel": "पृष्ठको सामग्री नमुना सम्पादन",
        "right-editinterface": "प्रयोगकर्ता अन्तरमोहडा सम्पादन गर्ने",
-       "right-editusercssjs": "पà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताà¤\95à¥\8b CSS à¤° JS à¤«à¤¾à¤\87लहरà¥\81 सम्पादन गर्ने",
-       "right-editusercss": "पà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताà¤\95à¥\8b CSS à¤«à¤¾à¤\87लहरà¥\81 सम्पादन गर्ने",
+       "right-editusercssjs": "à¤\85रà¥\81 à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताà¤\95à¥\8b CSS à¤° JS à¤«à¤¾à¤\87लहरà¥\82 सम्पादन गर्ने",
+       "right-editusercss": "à¤\85रà¥\81 à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताà¤\95à¥\8b CSS à¤«à¤¾à¤\87लहरà¥\82 सम्पादन गर्ने",
        "right-edituserjs": "अरु प्रयोकर्ताको जाभास्क्रिप्ट फाइलहरू सम्पादन गर्ने",
        "right-editmyusercss": "तपाईँको आफ्नो CSS फाइलहरू सम्पादन गर्नुहोस्",
        "right-editmyuserjs": "तपाईँको आफ्नो जाभा स्क्रिप्ट फाइलहरू सम्पादन गर्ने",
        "recentchanges-label-unpatrolled": "यो सम्पादन अहिले सम्म गस्ती गरिएको छैन",
        "recentchanges-label-plusminus": "यति बाइटहरू संख्याले पृष्ठको आकार परिवर्तन भएको छ",
        "recentchanges-legend-heading": "'''आदर्श वाक्य:'''",
-       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|list of new pages]] यो पनि हेर्नुहोस्)",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|नयाँ पृष्ठहरूको सूची]] यो पनि हेर्नुहोस्)",
        "recentchanges-legend-plusminus": "(''±१२३'')",
        "rcnotefrom": "तल <strong>$2</strong> देखि (<strong>$1</strong> सम्म) {{PLURAL:$5|भएका परिवर्तनहरू देखाइएको छ|भएका परिवर्तनहरू देखाइन्छ}}।",
        "rclistfrom": "$3 $2 देखिका नयाँ परिवर्तनहरू देखाउनु",
        "upload_directory_missing": "उर्ध्वभरण डाइरेक्टरी ($1) हराइरहेको छ र वेवसर्भरले नयाँ डाइरेक्टरी निर्माणगर्न असमर्थ भयो ।",
        "upload_directory_read_only": "उर्ध्व भरण डाइरेक्टरी ($1) वेवसर्भर द्वारा लेख्य छैन ।",
        "uploaderror": "उर्ध्वभरण त्रुटि",
-       "upload-recreate-warning": "'''à¤\9aà¥\87तावनà¥\80: à¤¤à¥\8dयस à¤¨à¤¾à¤®à¤®à¤¾ à¤°à¤¹à¥\87à¤\95ा à¤«à¤¾à¤\87लहरà¥\81 à¤¸à¤¾à¤°à¤¿à¤\8fà¤\95à¥\8b à¤¯à¤¾ à¤¹à¤\9fाà¤\87à¤\8fà¤\95à¥\8b à¤\9b।'''\n\nयस à¤ªà¥\83षà¥\8dठà¤\95à¥\8b à¤¸à¤¾à¤°à¤¿à¤\8fà¤\95à¥\8b à¤° à¤¹à¤\9fाà¤\87à¤\8fà¤\95à¥\8b à¤²à¤\97 à¤¤à¤ªà¤¾à¤\88को सहजताको लागि दिइएको छ।",
+       "upload-recreate-warning": "'''à¤\9aà¥\87तावनà¥\80: à¤¤à¥\8dयस à¤¨à¤¾à¤®à¤®à¤¾ à¤°à¤¹à¥\87à¤\95ा à¤«à¤¾à¤\87लहरà¥\82 à¤¸à¤¾à¤°à¤¿à¤\8fà¤\95à¥\8b à¤¯à¤¾ à¤¹à¤\9fाà¤\87à¤\8fà¤\95à¥\8b à¤\9b।'''\n\nयस à¤ªà¥\83षà¥\8dठà¤\95à¥\8b à¤¸à¤¾à¤°à¤¿à¤\8fà¤\95à¥\8b à¤° à¤¹à¤\9fाà¤\87à¤\8fà¤\95à¥\8b à¤²à¤\97 à¤¤à¤ªà¤¾à¤\88à¤\82को सहजताको लागि दिइएको छ।",
        "uploadtext": "फाइल अपलोड गर्न निम्न फारम प्रयोग गर्नुहोस्।\nहेर्नुहोस्- पहिला अपलोड गरिएका [[Special:FileList|फाइलहरूको सूची]] , पुनः अपलोड गरिएका [[Special:Log/upload|अपलोड लग]]मा, मेटिएका फाइलहरू [[Special:Log/delete|मेटिएको लग]]मा।\n\nपृष्ठमा फाइल संलग्न गर्न तल दिएका फारमहरूमध्ये एउटामा लिङ्क गराउनुहोस्:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>'''पूर्ण आकारको फाइल प्रयोग गर्न\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|alt text]]</nowiki></code>''' 200 पिक्सलको देब्रेपट्टि मार्जिन गरेर फाइलको बर्णनसहित प्रयोग गर्न\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' फाइल नदेखाई सिंधै फाइलसित लिङ्क गरी प्रयोग गर्न",
        "upload-permitted": "अनुमति पाएका फाइल {{PLURAL:$2|प्रकार|प्रकारहरू}}:$1।",
        "upload-preferred": "चाहिएका पाएका फाइल {{PLURAL:$2|प्रकार|प्रकारहरू}}:$1।",
        "unknown-error": "एउटा अज्ञात त्रुटि भयो।",
        "tmp-create-error": "अस्थायी फाइल सृजना गर्न सकिएन।",
        "tmp-write-error": "अस्थायी फाइल लेख्दै गर्दा त्रुटि।",
-       "large-file": "यà¥\8b à¤¸à¤¿à¤«à¤¾à¤°à¤¿à¤¸ à¤\97रिनà¥\8dà¤\9b à¤\95ि à¤«à¤¾à¤\87लहरà¥\81  $1 भन्दा ठूला हुनु हुँदैन;\nयो फाइल $2 छ।",
+       "large-file": "यà¥\8b à¤¸à¤¿à¤«à¤¾à¤°à¤¿à¤¸ à¤\97रिनà¥\8dà¤\9b à¤\95ि à¤«à¤¾à¤\87लहरà¥\82  $1 भन्दा ठूला हुनु हुँदैन;\nयो फाइल $2 छ।",
        "largefileserver": "उर्ध्वभरण गरिएको फाइल सर्भरमा निर्धारित सीमा भन्दा ठूलो छ।",
        "emptyfile": "तपाईले उर्ध्वभरण गर्नुभएको फाइल रित्तो छ।\nयो फाइलनाम गलत राखिएको कारणले भएको हुनसक्छ\nयो फाइल साच्चै उर्ध्वभरण गर्नेकुरामा निश्चित हुनुहोस् ।",
        "windows-nonascii-filename": "विशेष वर्ण सहितका फाइलनामहरु यस विकिद्वारा समर्थित छैनन् ।",
        "uploadstash": "उर्ध्वभरण स्टाश",
        "uploadstash-summary": "यो पृष्ठ ती फाइलहरूलाई पहुँच प्रदान गर्छ जुन अपलोड गरिएको छ ‍‌‍‌(वा अपलोड प्रक्रियामा रहेको छ) तर विकिमा अहिले पनि प्रकासित गरिएको छैन। यो फाइलहरू अपलोड गरेको प्रयोगकर्ता वाहेक कसैको लागि पनि उपलब्ध छैन।",
        "uploadstash-clear": "स्टाश गरिएका फाइल हटाउने",
-       "uploadstash-nofiles": "तपाà¤\88à¤\95ा à¤\95à¥\81नà¥\88 à¤ªà¤¨à¤¿ à¤¸à¥\8dà¤\9fाश à¤\97रिà¤\8fà¤\95ा à¤«à¤¾à¤\87लहरà¥\81 छैनन् ।",
+       "uploadstash-nofiles": "तपाà¤\88à¤\82à¤\95ा à¤\95à¥\81नà¥\88 à¤ªà¤¨à¤¿ à¤¸à¥\8dà¤\9fाश à¤\97रिà¤\8fà¤\95ा à¤«à¤¾à¤\87लहरà¥\82 छैनन् ।",
        "uploadstash-badtoken": "दिइएको कार्य असफलभयो , तपाईको सम्पादन अधिकार समाप्त भयो । पुन: प्रयास गर्नुहोस् ।",
        "uploadstash-errclear": "फाइल हटाउने कार्य असफल भयो ।",
-       "uploadstash-refresh": "फाà¤\87लहरà¥\81à¤\95à¥\8b à¤¸à¥\81à¤\9aà¥\80 à¤¤à¤¾à¤\9cा à¤ªर्ने",
+       "uploadstash-refresh": "फाà¤\87लहरà¥\82à¤\95à¥\8b à¤¸à¥\82à¤\9aà¥\80 à¤¤à¤¾à¤\9cा à¤\97र्ने",
        "invalid-chunk-offset": "अमान्य चंक अफसेट",
        "img-auth-accessdenied": "पहुँच अस्वीकार",
        "img-auth-nopathinfo": "PATH_INFO छैन। तपाईंको सर्भरले यो जानकारी पठाउन सेट गरिएको छैन। यो सिजिआइ-आधारित हुन् सक्छ र img_auth लाई स्वीकार गर्दैन। https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization हेर्नुहोस।",
        "upload_source_url": "(तपाईंद्वारा छानिएको फाइल एक मान्य, सार्वजनिक रूपले उपलब्ध युआरयलबाट)",
        "upload_source_file": "(तपाईँले आफ्नो कम्प्युटरबाट छानेको फाइल)",
        "listfiles-delete": "मेट्ने",
-       "listfiles-summary": "यस à¤µà¤¿à¤¶à¥\87ष à¤ªà¥\83षà¥\8dठलà¥\87 à¤\89रà¥\8dधà¥\8dवभरण à¤\97रिà¤\95ा à¤¸à¤¬à¥\88 à¤«à¤¾à¤\87लहरà¥\81 à¤¦à¥\87à¤\96ाà¤\89à¤\81à¤\9b।",
+       "listfiles-summary": "यस à¤µà¤¿à¤¶à¥\87ष à¤ªà¥\83षà¥\8dठलà¥\87 à¤\89रà¥\8dधà¥\8dवभरण à¤\97रिà¤\95ा à¤¸à¤¬à¥\88 à¤«à¤¾à¤\87लहरà¥\82 à¤¦à¥\87à¤\96ाà¤\89à¤\81à¤\9b ।",
        "listfiles_search_for": "मिडिया नामको लागि खोज्नुहोस:",
        "listfiles-userdoesnotexist": "प्रयोगकर्ता खाता \"$1\" दर्ता गरिएको छैन।",
        "imgfile": "फाइल",
        "filedelete-reason-otherlist": "अरु कारण",
        "filedelete-reason-dropdown": "*मेट्नुका सामान्य कारणहरु\n** कपी राइट उल्लघन\n** सारिएको फाइल",
        "filedelete-edit-reasonlist": "मेट्नका कारण संपादन गर्नुहोस्।",
-       "filedelete-maintenance": "रà¤\96रà¤\96ाव à¤\9aलिरहà¥\87à¤\95à¥\8b à¤¹à¥\81à¤\81दा à¤\85सà¥\8dथायà¥\80 à¤°à¥\81पमा à¤«à¤¾à¤\87लहरà¥\81 मेटाउने र मेटाइएकोलाई पुनर्बहाली गर्न निष्क्रिय गरिएकोछ।",
+       "filedelete-maintenance": "रà¤\96रà¤\96ाव à¤\9aलिरहà¥\87à¤\95à¥\8b à¤¹à¥\81à¤\81दा à¤\85सà¥\8dथायà¥\80 à¤°à¥\81पमा à¤«à¤¾à¤\87लहरà¥\82 मेटाउने र मेटाइएकोलाई पुनर्बहाली गर्न निष्क्रिय गरिएकोछ।",
        "filedelete-maintenance-title": "फाइल मेट्न सकिएन",
        "mimesearch": "MIME खोज",
-       "mimesearch-summary": "MIME-पà¥\8dरà¤\95ार à¤\85नà¥\81सार à¤«à¤¾à¤\87लहरà¥\81 खोज्न यस पृष्ठको प्रयोग गर्न सकिन्छ।\nइनपुट: फाइलको प्रकार/उपप्रकार, उदा. <code>image/jpeg</code>।",
+       "mimesearch-summary": "MIME-पà¥\8dरà¤\95ार à¤\85नà¥\81सार à¤«à¤¾à¤\87लहरà¥\82 खोज्न यस पृष्ठको प्रयोग गर्न सकिन्छ।\nइनपुट: फाइलको प्रकार/उपप्रकार, उदा. <code>image/jpeg</code>।",
        "mimetype": "MIME प्रकार:",
        "download": "डाउनलोड",
        "unwatchedpages": "ध्यान नदिइएका पृष्ठहरू",
        "undeleteinvert": " चयन उल्ट्याउने",
        "undeletecomment": "कारण :",
        "undeletedrevisions": "{{PLURAL:$1|एउटा संशोधन|$1 संशोधनहरु}} पुनर्स्थापित गरियो",
-       "undeletedrevisions-files": "{{PLURAL:$1|à¤\8fà¤\89à¤\9fा à¤¸à¤\82शà¥\8bधन|$1 à¤¸à¤\82शà¥\8bधनहरà¥\81}} à¤° {{PLURAL:$2|à¤\8fà¤\89à¤\9fा à¤«à¤¾à¤\87ल|$2 à¤«à¤¾à¤\87लहरà¥\81}} पुनर्स्थापित गरियो",
+       "undeletedrevisions-files": "{{PLURAL:$1|à¤\8fà¤\89à¤\9fा à¤¸à¤\82शà¥\8bधन|$1 à¤¸à¤\82शà¥\8bधनहरà¥\82}} à¤° {{PLURAL:$2|à¤\8fà¤\89à¤\9fा à¤«à¤¾à¤\87ल|$2 à¤«à¤¾à¤\87लहरà¥\82}} पुनर्स्थापित गरियो",
        "undeletedfiles": "{{PLURAL:$1|१ फाइल|$1 फाइलहरू }} पूर्वस्थितिमा ल्याइयो",
        "cannotundelete": "मेटाएको रद्द गर्ने काम असफल भयो:\n$1",
        "undeletedpage": "'''$1लाई पूर्वावस्थामा ल्याइयो'''\nभर्खरै मेटाइएको रिकर्डहरु र पुनर्स्थापनाहरु हेर्न [[Special:Log/delete|मेटाइएको लग]]मा जानुहोस्।",
        "file-info-png-frames": "$1 {{PLURAL:$1|फ्रेम|फ्रेमहरु}}",
        "file-no-thumb-animation": "<strong>टिप्पणी: प्राविधिक सीमाको कारण, यस फाइलको थम्बनेल एनिमेटेड गर्न सकिदैन।</strong>",
        "file-no-thumb-animation-gif": "<strong>सूचना:प्राविधिक समस्याहरूको कारण यस फाइल जस्तै अधिक रिजोल्युसन जीआइयफ चित्रहरूको थम्बनेल ऐनिमेटेड हुँदैन।</strong>",
-       "newimages": "नयाà¤\81 à¤«à¤¾à¤\87लहरà¥\81को ग्यालरी",
+       "newimages": "नयाà¤\81 à¤«à¤¾à¤\87लहरà¥\82को ग्यालरी",
        "imagelisttext": " '''$1''' {{PLURAL:$1|फाइल|फाइलहरू}} को निम्न सूची ,क्रमवद्ध $2.",
-       "newimages-summary": "यस à¤µà¤¿à¤¶à¥\87ष à¤ªà¥\83षà¥\8dठलà¥\87 à¤\85नà¥\8dतिम à¤\89रà¥\8dधà¥\8dवभरण à¤\97रिà¤\95ा à¤«à¤¾à¤\87लहरà¥\81 देखाउँछ ।",
+       "newimages-summary": "यस à¤µà¤¿à¤¶à¥\87ष à¤ªà¥\83षà¥\8dठलà¥\87 à¤\85नà¥\8dतिम à¤\89रà¥\8dधà¥\8dवभरण à¤\97रिà¤\8fà¤\95ा à¤«à¤¾à¤\87लहरà¥\82 देखाउँछ ।",
        "newimages-legend": "फिल्टर",
        "newimages-label": "फाइल अथवा (यसको एउटा अंश)को नाम:",
        "newimages-showbots": "बोटहरूद्वारा गरिएको अपलोड देखाउने",
        "api-error-badaccess-groups": "यस विकिमा तपाईंलाई फाइल अपलोड गर्ने अनुमति छैन।",
        "api-error-badtoken": "आन्तरिक समस्याः खराब टोकन ।",
        "api-error-copyuploaddisabled": "यस सर्वरमा URL द्वारा अपलोड गर्ने व्यवस्था निस्क्रिय गरिएकोछ।",
-       "api-error-duplicate": "यस à¤¸à¤¾à¤\87à¤\9fमा à¤ªà¤¹à¤¿à¤²à¥\87बाà¤\9f à¤¯à¤¸à¥\8dतà¥\88 à¤¸à¤¾à¤®à¤\97à¥\8dरà¥\80 {{PLURAL:$1|भà¤\8fà¤\95à¥\8b [$2 à¤\85रà¥\8dà¤\95à¥\8b à¤«à¤¾à¤\87ल à¤\9b]|भà¤\8fà¤\95ा  [$2 à¤\95à¥\87हि à¤\85रà¥\81 à¤«à¤¾à¤\87लहरà¥\81 छन्]}} ।",
-       "api-error-duplicate-archive": "यस à¤¸à¤¾à¤\87à¤\9fमा à¤ªà¤¹à¤¿à¤²à¥\87बाà¤\9f à¤¯à¤¸à¥\8dतà¥\88 à¤¸à¤¾à¤®à¤\97à¥\8dरà¥\80 {{PLURAL:$1|भà¤\8fà¤\95à¥\8b [$2 à¤\85रà¥\8dà¤\95à¥\8b à¤«à¤¾à¤\87ल à¤¥à¤¿à¤¯à¥\8b]|भà¤\8fà¤\95ा  [$2 à¤\95à¥\87हि à¤\85रà¥\81 à¤«à¤¾à¤\87लहरà¥\81 थिए]}} ।\nतर {{PLURAL:$1|यो मेटाइएको थियो|यी मेटाइएका थिए}} ।",
-       "api-error-duplicate-archive-popup-title": "पहिलà¥\87  {{PLURAL:$1|मà¥\87à¤\9fाà¤\87à¤\8fà¤\95à¥\8b à¤«à¤¾à¤\87लà¤\95à¥\8b|मà¥\87à¤\9fाà¤\87à¤\8fà¤\95ा à¤«à¤¾à¤\87लहरà¥\81को}} नकल प्रति बनाउने।",
-       "api-error-duplicate-popup-title": "{{PLURAL:$1|फाà¤\87ल|फाà¤\87लहरà¥\81}} नकल प्रति बनाउने",
+       "api-error-duplicate": "यस à¤¸à¤¾à¤\87à¤\9fमा à¤ªà¤¹à¤¿à¤²à¥\87बाà¤\9f à¤¯à¤¸à¥\8dतà¥\88 à¤¸à¤¾à¤®à¤\97à¥\8dरà¥\80 {{PLURAL:$1|भà¤\8fà¤\95à¥\8b [$2 à¤\85रà¥\8dà¤\95à¥\8b à¤«à¤¾à¤\87ल à¤\9b]|भà¤\8fà¤\95ा  [$2 à¤\95à¥\87हि à¤\85रà¥\81 à¤«à¤¾à¤\87लहरà¥\82 छन्]}} ।",
+       "api-error-duplicate-archive": "यस à¤¸à¤¾à¤\87à¤\9fमा à¤ªà¤¹à¤¿à¤²à¥\87बाà¤\9f à¤¯à¤¸à¥\8dतà¥\88 à¤¸à¤¾à¤®à¤\97à¥\8dरà¥\80 {{PLURAL:$1|भà¤\8fà¤\95à¥\8b [$2 à¤\85रà¥\8dà¤\95à¥\8b à¤«à¤¾à¤\87ल à¤¥à¤¿à¤¯à¥\8b]|भà¤\8fà¤\95ा  [$2 à¤\95à¥\87हि à¤\85रà¥\81 à¤«à¤¾à¤\87लहरà¥\82 थिए]}} ।\nतर {{PLURAL:$1|यो मेटाइएको थियो|यी मेटाइएका थिए}} ।",
+       "api-error-duplicate-archive-popup-title": "पहिलà¥\87  {{PLURAL:$1|मà¥\87à¤\9fाà¤\87à¤\8fà¤\95à¥\8b à¤«à¤¾à¤\87लà¤\95à¥\8b|मà¥\87à¤\9fाà¤\87à¤\8fà¤\95ा à¤«à¤¾à¤\87लहरà¥\82को}} नकल प्रति बनाउने।",
+       "api-error-duplicate-popup-title": "{{PLURAL:$1|फाà¤\87ल|फाà¤\87लहरà¥\82}} नकल प्रति बनाउने",
        "api-error-empty-file": "तपाईंले बुझाएको फाइल खालि छ।",
        "api-error-emptypage": "नयाँ तयार गर्दै, खाली पृष्ठ तयार गर्न अनुमति छैन ।",
        "api-error-fetchfileerror": "आन्तरिक समस्याः फाइल तान्दा केही कुरा गलत भएछ ।",
index 48cc5e4..8329f56 100644 (file)
@@ -6,7 +6,8 @@
                        "Shirayuki",
                        "Xqt",
                        "לערי ריינהארט",
-                       "아라"
+                       "아라",
+                       "Purodha"
                ]
        },
        "tog-underline": "Gleecher unnerleine:",
index 18ac424..a83fec2 100644 (file)
        "directorynotreadableerror": "Ścieżka \"$1\" nie jest odczytywalna.",
        "filenotfound": "Nie można znaleźć pliku „$1”.",
        "unexpected": "Nieoczekiwana wartość „$1”=„$2”.",
-       "formerror": "Błąd: nie można wysłać formularza",
+       "formerror": "Błąd: nie można wysłać formularza.",
        "badarticleerror": "Dla tej strony ta operacja nie może być wykonana.",
        "cannotdelete": "Nie można usunąć strony lub pliku „$1”.\nMożliwe, że zostało to już zrobione przez kogoś innego.",
        "cannotdelete-title": "Strona „$1” nie może być usunięta.",
        "missingsummary": "'''Uwaga:''' Nie wprowadz{{GENDER:|iłeś|iłaś|ono}} opisu zmian.\nJeżeli nie chcesz go wprowadzać, naciśnij przycisk „Zapisz” jeszcze raz.",
        "selfredirect": "<strong>Ostrzeżenie:</strong> Przekierowujesz tę stronę do niej samej.\nByć może został przez Ciebie wybrany zły cel przekierowania lub edytujesz niewłaściwą stronę.\nJeżeli ponownie klikniesz „{{int:savearticle}}”, przekierowanie zostanie utworzone.",
        "missingcommenttext": "Wprowadź komentarz poniżej.",
-       "missingcommentheader": "'''Uwaga''' â\80\93 treÅ\9bÄ\87 tytuÅ\82u lub nagÅ\82ówka komentarza jest pusta.\nJeÅ\9bli ponownie klikniesz â\80\9e{{int:savearticle}}â\80\9c, zmiany zostaną zapisane bez niego.",
+       "missingcommentheader": "'''Uwaga''' â\80\93 treÅ\9bÄ\87 tytuÅ\82u lub nagÅ\82ówka komentarza jest pusta.\nJeÅ\9bli ponownie klikniesz â\80\9e{{int:savearticle}}â\80\9d, zmiany zostaną zapisane bez niego.",
        "summary-preview": "Podgląd opisu:",
        "subject-preview": "Podgląd nagłówka:",
        "previewerrortext": "Wystąpił błąd podczas próby podglądu Twoich zmian.",
        "img-auth-public": "Funkcja img_auth.php służy do pobierania plików z prywatnej wiki.\nPonieważ ta wiki została skonfigurowana jako publiczna dla zapewnienia optymalnego bezpieczeństwa img_auth.php została wyłączona.",
        "img-auth-noread": "Użytkownik nie ma dostępu do odczytu „$1”.",
        "http-invalid-url": "Niepoprawny adres URL: $1",
-       "http-invalid-scheme": "Adresy â\80\9e$1â\80\9c nie są obsługiwane.",
+       "http-invalid-scheme": "Adresy â\80\9e$1â\80\9d nie są obsługiwane.",
        "http-request-error": "Nieudane żądanie HTTP ze względu na nieznany błąd.",
        "http-read-error": "Błąd odczytu HTTP.",
        "http-timed-out": "Przekroczony czas żądania HTTP.",
        "emailuser-title-notarget": "Wyślij wiadomość e‐mail",
        "emailpage": "Wyślij e‐mail do użytkownika",
        "emailpagetext": "Możesz użyć poniższego formularza, aby wysłać wiadomość e‐mail do {{GENDER:$1|tego użytkownika|tej użytkowniczki}}.\nAdres e‐mailowy, który został przez Ciebie wprowadzony w [[Special:Preferences|Twoich preferencjach]], zostanie umieszczony w polu „Od”, dzięki czemu odbiorca będzie mógł Ci odpowiedzieć.",
-       "defemailsubject": "{{SITENAME}} â\80\93 eâ\80\90mail od użytkownika â\80\9e$1â\80\9c",
+       "defemailsubject": "{{SITENAME}} â\80\93 eâ\80\90mail od użytkownika â\80\9e$1â\80\9d",
        "usermaildisabled": "E‐mail użytkownika jest wyłączony",
        "usermaildisabledtext": "Nie możesz wysyłać e‐maili do innych użytkowników tej wiki",
        "noemailtitle": "Brak adresu e‐mail",
        "immobile-target-page": "Nie można przenieść pod wskazany tytuł.",
        "bad-target-model": "Strona docelowa używa innego modelu zawartości. Konwersja $1 → $2 nie jest możliwa.",
        "imagenocrossnamespace": "Nie można przenieść grafiki do przestrzeni nazw nie przeznaczonej dla grafik",
-       "nonfile-cannot-move-to-file": "Nie można przenieÅ\9bÄ\87 obiektu nie bÄ\99\85cego plikiem do przestrzeni nazw â\80\9e{{ns:file}}â\80\9c",
+       "nonfile-cannot-move-to-file": "Nie można przenieÅ\9bÄ\87 obiektu nie bÄ\99\85cego plikiem do przestrzeni nazw â\80\9e{{ns:file}}â\80\9d",
        "imagetypemismatch": "Nowe rozszerzenie nazwy pliku jest innego typu niż zawartość",
        "imageinvalidfilename": "Nazwa pliku docelowego jest nieprawidłowa",
        "fix-double-redirects": "Zaktualizuj wszystkie przekierowania wskazujące na stary tytuł",
        "import-upload": "Prześlij dane w formacie XML",
        "import-token-mismatch": "Utracono dane sesji. Proszę spróbować ponownie.",
        "import-invalid-interwiki": "Nie można importować z podanej wiki.",
-       "import-error-edit": "Strona â\80\9e$1â\80\9c nie została zaimportowana ponieważ nie jesteś uprawniony do jej edytowania.",
-       "import-error-create": "Strona â\80\9e$1â\80\9c nie została zaimportowana ponieważ nie jesteś uprawniony do jej utworzenia.",
+       "import-error-edit": "Strona â\80\9e$1â\80\9d nie została zaimportowana ponieważ nie jesteś uprawniony do jej edytowania.",
+       "import-error-create": "Strona â\80\9e$1â\80\9d nie została zaimportowana ponieważ nie jesteś uprawniony do jej utworzenia.",
        "import-error-interwiki": "Strona „$1” nie została zaimportowana, ponieważ jej nazwa jest zarezerwowana do linków zewnętrznych (interwiki).",
        "import-error-special": "Strona „$1” nie została zaimportowana, ponieważ należy do specjalnej przestrzeni nazw, która nie zezwala na strony.",
        "import-error-invalid": "Strona „$1” nie została zaimportowana, ponieważ jej nazwa jest nieprawidłowa na tej wiki.",
index 6ad83be..e2522ca 100644 (file)
        "badsig": "Assinatura inválida; verifique o código HTML utilizado.",
        "badsiglength": "A sua assinatura é demasiado longa.\nNão deverá conter mais de $1 {{PLURAL:$1|carácter|caracteres}}.",
        "yourgender": "Como prefere ser descrito?",
-       "gender-unknown": "Prefiro não dizer",
+       "gender-unknown": "Ao mencioná-lo, o software irá utilizar palavras de género neutro sempre que possível",
        "gender-male": "Ele edita páginas wiki",
        "gender-female": "Ela edita páginas wiki",
        "prefs-help-gender": "Esta preferência é opcional.\nO software usa o seu valor para o endereçar e para o mencionar a outros usando o género gramatical apropriado.\nEsta informação será pública.",
index 1b7a78a..486c144 100644 (file)
        "passwordreset-email": "{{Identical|E-mail address}}",
        "passwordreset-emailtitle": "Used as subject (title) of email.",
        "passwordreset-emailtext-ip": "Be consistent with {{msg-mw|Passwordreset-emailtext-user}}.\n\nParameters:\n* $1 - an IP address\n* $2 - message {{msg-mw|Passwordreset-emailelement}} repeated $3 times\n* $3 - the number of repetitions in $2\n* $4 - base URL of the wiki\n* $5 - number of days",
-       "passwordreset-emailtext-user": "Be consistent with {{msg-mw|Passwordreset-emailtext-ip}}.\n\nParameters:\n* $1 - a user name\n* $2 - message {{msg-mw|Passwordreset-emailelement|notext=1}} repeated $3 times\n* $3 - the number of repetitions in $2\n* $4 - base URL of the wiki\n* $5 - number of days",
+       "passwordreset-emailtext-user": "Be consistent with {{msg-mw|Passwordreset-emailtext-ip}}.\n\nParameters:\n* $1 - a user name, no GENDER suport.\n* $2 - message {{msg-mw|Passwordreset-emailelement|notext=1}} repeated $3 times\n* $3 - the number of repetitions in $2\n* $4 - base URL of the wiki\n* $5 - number of days",
        "passwordreset-emailelement": "This is a body of a password reset email to allow them into the system with a new password. Parameters:\n* $1 - the user's login name. This parameter can be used for GENDER.\n* $2 - the temporary password given by the system",
        "passwordreset-emailsent": "Used in [[Special:PasswordReset]].\n\nSee also:\n* {{msg-mw|Passwordreset-emailsent-capture}}\n* {{msg-mw|Passwordreset-emailerror-capture}}",
        "passwordreset-emailsent-capture": "Used in [[Special:PasswordReset]].\n\nSee also:\n* {{msg-mw|Passwordreset-emailsent}}\n* {{msg-mw|Passwordreset-emailerror-capture}}",
        "badsig": "Error message displayed when entering invalid signature in user preferences",
        "badsiglength": "Warning message that is displayed on [[Special:Preferences]] when trying to save a signature that is too long.\n\nParameters\n* $1 - the maximum number of characters that is allowed in a signature (multi-byte characters are counted as one character)",
        "yourgender": "Used in [[Special:Preferences]], first tab, in the Internationalisation section.\nThis may be customized for other languages. This should sound like a question, the answer to which can be selected in one of these:\n* {{msg-mw|gender-unknown}}\n* {{msg-mw|gender-male}}\n* {{msg-mw|gender-female}}\nThe idea is that this preference is used for speaking to the user and about the user, and the label and the preference are supposed to demonstrate it.",
-       "gender-unknown": "Used in [[Special:Preferences]], first tab, as one of the selectable options of the {{msg-mw|Yourgender}} prompt. Choosing it indicates that the grammatical gender of the user name is not to be made public, cannot be determined, or matches none of the other choices preset in the select.\n\nThis may appropriately customized for your language. It should sound like a reply to {{msg-mw|yourgender}}.",
+       "gender-unknown": "Used in [[Special:Preferences]], first tab, as one of the selectable options of the {{msg-mw|Yourgender}} prompt. Choosing it indicates that the grammatical gender of the user name is gender neutral or unknown.\n\nThis may be appropriately customized for your language. It should sound like a reply to {{msg-mw|yourgender}}.",
        "gender-male": "Used in [[Special:Preferences]], first tab, as one of the selectable options of the {{msg-mw|Yourgender}} prompt.\nChoosing it indicates that the grammatical gender of the user name should be \"male\" for those languages having a \"normal\" male grammatical gender.\n\nYou have to customize this example for your language if needed to have a sentence which varies depending on the grammatical gender.\nThe wording must demonstrate the actual usage of the option. It should sound like a reply to {{msg-mw|Yourgender}}.\n\nFor example, if the verb \"I edit\" in your language is different in masculine and feminine, translate \"I edit\" in masculine here.\nIf your language does not make a distinction at all, use sentences like \"he is male/a man\".",
        "gender-female": "Used in [[Special:Preferences]], first tab, as one of the selectable options of the {{msg-mw|Yourgender}} prompt.\nChoosing it indicates that the grammatical gender of the user name should be \"female\" for those languages having a \"normal\" female grammatical gender.\n\nYou have to customize this example for your language if needed to have a sentence which varies depending on the grammatical gender.\nThe wording must demonstrate the actual usage of the option. It should sound like a reply to {{msg-mw|Yourgender}}.\n\nFor example, if the verb \"I edit\" in your language is different in masculine and feminine, translate \"I edit\" in feminine here.\nIf your language does not make a distinction at all, use sentences like \"she is female/woman\".",
        "prefs-help-gender": "Used as additional description for {{msg-mw|yourgender}} field in [[Special:Preferences]], section {{msg-mw|prefs-i18n}}.",
        "deletedarticle": "This is a ''logentry'' message. Parameters:\n* $1 - deleted page name\n{{Identical|Deleted}}",
        "suppressedarticle": "Part of a [[mw:Manual:RevisionDelete|RevisionDelete]] log entry. Parameters:\n* $1 - suppressed page name\n{{Identical|Suppressed}}",
        "undeletedarticle": "This is a ''logentry'' message. Parameters:\n* $1 - restored (undeleted) page name",
-       "patrol-log-line": "Text of notes on entries in the [http://translatewiki.net/w/i.php?title=Special%3ALog&type=patrol&user=&page=&year=&month=-1 patrol log].\nParameters:\n* $1 - the link whose text is {{msg-mw|patrol-log-diff}}\n* $2 - the name of the page\n* $3 - appears to be {{msg-mw|Patrol-log-auto}} (at least sometimes)\n\nThe message appears after the name of the patroller.",
+       "patrol-log-line": "Text of notes on entries in the [{{FULLURL:Special:Log|type=patrol}} patrol log].\nParameters:\n* $1 - the link whose text is {{msg-mw|patrol-log-diff}}\n* $2 - the name of the page\n* $3 - appears to be {{msg-mw|Patrol-log-auto}} (at least sometimes)\n\nThe message appears after the name of the patroller.",
        "patrol-log-auto": "Automated edit summary when patrolling.\n\n{{Identical|Automatic}}",
        "patrol-log-diff": "The text of the diff link in {{msg-mw|Patrol-log-line}} (inside <code>$1</code> there).\n\nParameters:\n* $1 - revision ID\n{{Identical|Revision}}",
        "1movedto2": "{{ignored}}This is ''logentry'' message only used on IRC. Parameters:\n* $1 - the original page name\n* $2 - the destination page name\nSee also:\n* {{msg-mw|1movedto2 redir}}",
index c11c172..1496d42 100644 (file)
        "badsig": "Semnătură brută incorectă; verificați tagurile HTML.",
        "badsiglength": "Semnătura este prea lungă.\nLungimea trebuie să fie mai mică de $1 {{PLURAL:$1|caracter|caractere}}.",
        "yourgender": "Cum preferați să se facă referire la dumneavoastră?",
-       "gender-unknown": "Prefer să nu menționez",
+       "gender-unknown": "Când face referire la dumnevoastră, software-ul va utiliza cuvinte la genul neutru oricând va fi posibil",
        "gender-male": "El modifică pagini wiki",
        "gender-female": "Ea modifică pagini wiki",
        "prefs-help-gender": "Stabilirea acestei preferințe este opțională.\nAcest software folosește datele pentru a vi se adresa și pentru a face referire la dumneavoastră utilizând genul gramatical corespunzător.\nAceastă informație va fi publică.",
        "uploaddisabledtext": "Încărcările de fișiere sunt dezactivate.",
        "php-uploaddisabledtext": "Încărcarea de fișiere este dezactivată în PHP.\nVă rugăm să verificați setările din file_uploads.",
        "uploadscripted": "Fișierul conține HTML sau cod script care poate fi interpretat în mod eronat de un browser.",
-       "upload-scripted-pi-callback": "Nu se poate încărca un fișier care conține instrucțiuni de procesare a foii de stil xml.",
+       "upload-scripted-pi-callback": "Nu se poate încărca un fișier care conține instrucțiuni de procesare a foii de stil XML.",
        "uploaded-script-svg": "S-a găsit elementul „$1” scriptabil în fișierul SVG încărcat.",
        "uploaded-hostile-svg": "S-a descoperit CSS vulnerabil în elementul de stil al fișierului SVG încărcat.",
        "uploaded-event-handler-on-svg": "Setarea atributelor <code>$1=„$2”</code> de gestionare a evenimentului nu este permisă pentru fișierele SVG.",
index 87f2044..15690b5 100644 (file)
        "badsig": "'A firme grezze jè sbagliete.\nCondrolle le tag HTML.",
        "badsiglength": "'A firme jè troppe longhe.\nAddà essere assaje assaje sotte a $1 {{PLURAL:$1|carattere|carattere}}.",
        "yourgender": "Sesse:",
-       "gender-unknown": "Non apirte",
+       "gender-unknown": "Quanne parlane de te, 'u software ause 'u genere neutrale cumme parole ce jè possibbile",
        "gender-male": "Maschele",
        "gender-female": "Femmene",
        "prefs-help-gender": "Opzionale: ausate pe l'indirizzamende corrette d'u sesse jndr'à 'u softwer. Sta 'mbormazione jè pubbleche.",
        "uploaddisabledtext": "Le carecaminde de le file sonde disabbilitete.",
        "php-uploaddisabledtext": "Le carecaminde de file sonde disabilitate in PHP.<br />\nPe piacere verifiche le 'mbostaziune d'u ''file_uploads''.",
        "uploadscripted": "Stu file condene HTML o codece de script ca ponne essere inderpretete jndr'à 'nu mode sbagliete da le browser.",
-       "upload-scripted-pi-callback": "Non ge pozze carecà 'nu file ca téne istruziune de processe de xml-stylesheet.",
+       "upload-scripted-pi-callback": "Non ge pozze carecà 'nu file ca téne istruziune de processe de XML-stylesheet.",
        "uploaded-script-svg": "Acchiate elemende pe script \"$1\" jndr'à 'u file SVG carecate.",
        "uploaded-hostile-svg": "Acchiate 'nu CSS insecure ndr'à l'elemende de stile d'u file SVG carecate.",
+       "uploaded-event-handler-on-svg": "'A 'mbostazione de le attribute de gestione de l'evende <code>$1=\"$2\"</code> non ge se pò ffà cu le file SVG.",
        "uploadscriptednamespace": "Stu file SVG tène 'nu namespace illegale '$1'",
        "uploadinvalidxml": "L'XML jndr'à 'u file carecate non ge pò essere analizzate.",
        "uploadvirus": "Alanga toje, 'u file condiene 'nu virus! Dettaglie: $1",
index afeccc7..b06fe21 100644 (file)
        "cachedspecial-viewing-cached-ts": "Вы просматриваете кэшированную версию этой страницы, которая может серьёзно отличаться от текущей версии.",
        "cachedspecial-refresh-now": "Просмотреть последнюю версию.",
        "categories": "Категории",
-       "categoriespagetext": "{{PLURAL:$1|1=Следующая категория содержит|Следующие категории содержат}} страницы или медиа-файлы.\nЗдесь не показаны [[Special:UnusedCategories|неиспользуемые категории]].\nСм. также [[Special:WantedCategories|список требуемых категорий]].",
+       "categoriespagetext": "{{PLURAL:$1|1=Следующая категория содержит|Следующие категории содержат}} страницы или медиафайлы.\nЗдесь не показаны [[Special:UnusedCategories|неиспользуемые категории]].\nСм. также [[Special:WantedCategories|список требуемых категорий]].",
        "categoriesfrom": "Показать категории, начинающиеся с:",
        "special-categories-sort-count": "упорядочить по количеству",
        "special-categories-sort-abc": "упорядочить по алфавиту",
        "tooltip-t-permalink": "Постоянная ссылка на эту версию страницы",
        "tooltip-ca-nstab-main": "Просмотр основной страницы",
        "tooltip-ca-nstab-user": "Персональная страница участника",
-       "tooltip-ca-nstab-media": "Медиа-файл",
+       "tooltip-ca-nstab-media": "Медиафайл",
        "tooltip-ca-nstab-special": "Это служебная страница, она недоступна для редактирования",
        "tooltip-ca-nstab-project": "Страница проекта",
        "tooltip-ca-nstab-image": "Страница файла",
        "exif-ycbcrpositioning-1": "Центрированный",
        "exif-ycbcrpositioning-2": "CO-sited",
        "exif-dc-contributor": "Соавторы",
-       "exif-dc-coverage": "Пространственные или временные рамки медиа",
+       "exif-dc-coverage": "Пространственные или временные рамки медиафайлов",
        "exif-dc-date": "Дата(ы)",
        "exif-dc-publisher": "Издатель",
        "exif-dc-relation": "Связанные медиа",
        "exif-dc-rights": "Права",
-       "exif-dc-source": "Исходное медиа",
-       "exif-dc-type": "Тип медиа",
+       "exif-dc-source": "Исходный медиафайл",
+       "exif-dc-type": "Тип медиафайла",
        "exif-rating-rejected": "Отклонено",
        "exif-isospeedratings-overflow": "Более 65535",
        "exif-iimcategory-ace": "Искусство, культура и развлечения",
index 0a99ca1..6b38049 100644 (file)
        "uploaddisabledtext": "Билэлэри суруттарар көҥүллэммэт.",
        "php-uploaddisabledtext": "PHP туруорууларыгар билэни киллэрии араарыллыбыт. Бука диэн, file_uploads туруоруутун көр.",
        "uploadscripted": "Бу билэ HTML эбэтэр скрипт куодтаах эбит. Интэриниэт көрдөрөр бырагыраамма ону сыыһа ааҕыан сөп.",
+       "upload-scripted-pi-callback": "XML истиилин табылыыссатын таҥастыыр туһунан ыйыылаах-кэрдиилээх билэни хачайдыыр табыллыбата.",
+       "uploaded-script-svg": "Хачайдаммыт SVG-билэҕэ сценарийы өйүүр куттааллаах «$1» элэмиэн көһүннэ.",
+       "uploaded-image-filter-svg": "Хачайдаммыт SVG-билэҕэ маннык URL-аадырыстаах ойуу сиидэтэ көстүбүт <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploadscriptednamespace": "Бу SVG-билэ алҕастаах аат даллаах эбит: '$1'",
        "uploadinvalidxml": "Хачайдаммит билэҕэ XML анаалыстанар кыаҕа суох.",
        "uploadvirus": "Бу билэ вирустаах! Көр: $1",
        "listfiles-delete": "сотуу",
        "listfiles-summary": "Бу анал сирэй киллэриллибит билэлэри барытын көрдөрөр.",
        "listfiles_search_for": "Миэдьийэни (ойууну) аатынан көрдөтүү:",
+       "listfiles-userdoesnotexist": "\"$1\" кыттааччы аата бэлиэтэниллибэтэх.",
        "imgfile": "билэ",
        "listfiles": "Билэлэр",
        "listfiles_thumb": "Ойуучаан",
        "randomredirect": "Түбэспиччэ утаарыы",
        "randomredirect-nopages": "Бу аат далыгар($1) көһөрөр ыйынньыктар суохтар.",
        "statistics": "Статистика",
-       "statistics-header-pages": "СиÑ\80Ñ\8dй Ñ\81Ñ\82аÑ\82ииÑ\81Ñ\82иката",
-       "statistics-header-edits": "Ð\9aөннөÑ\80Ò¯Ò¯ Ñ\81Ñ\82аÑ\82ииÑ\81Ñ\82иката",
-       "statistics-header-users": "Ð\9aÑ\8bÑ\82Ñ\82ааÑ\87Ñ\87Ñ\8bлаÑ\80 Ñ\81Ñ\82аÑ\82ииÑ\81Ñ\82икалара",
+       "statistics-header-pages": "СиÑ\80Ñ\8dй Ñ\8bÑ\81Ñ\82аÑ\82Ñ\8bÑ\8bÑ\81Ñ\82Ñ\8bката",
+       "statistics-header-edits": "Ð\9aөннөÑ\80Ò¯Ò¯ Ñ\8bÑ\81Ñ\82аÑ\82Ñ\8bÑ\8bÑ\81Ñ\82Ñ\8bката",
+       "statistics-header-users": "Ð\9aÑ\8bÑ\82Ñ\82ааÑ\87Ñ\87Ñ\8bлаÑ\80 Ñ\8bÑ\81Ñ\82аÑ\82Ñ\8bÑ\8bÑ\81Ñ\82Ñ\8bкалара",
        "statistics-header-hooks": "Атын статистика",
        "statistics-articles": "Ыстатыйалар ахсааннара",
        "statistics-pages": "Сирэйдэр",
        "unusedimages": "Туттулубатах билэлэр",
        "wantedcategories": "Көрдөнүллэр категориялар",
        "wantedpages": "Көрдөнүллэр сирэйдэр",
+       "wantedpages-summary": "Элбэх ыстатыйа сигэнэр гынан баран, суох сирэйдэр испииһэктэрэ (кинилэргэ утаарар сирэйдэр ааҕыллыбатылар). Утаарар сирэйдээх гынан баран, сурулла илик сирэйдэр испииһэктэрин манна көр [[{{#special:BrokenRedirects}}|үлэлээбэт утаарылар]].",
        "wantedpages-badtitle": "Көрдөбүл түмүгэр сыыһалаах аат баар: $1",
        "wantedfiles": "Көрдөммүт билэлэр",
        "wantedfiletext-cat": "Манна көстөр билэлэри суохтарын үрдүнэн тутта сатыыллар. Бу тиһиликкэ таска сытар билэлэр алҕас киириэхтэрин сөп. Оннук алҕастык киирбиттэр <del>сотуунан</del> бэлиэтэниэхтэрэ. Маны таһынан суох билэлэргэ сигэнэр сирэйдэр манна көстөллөр: [[:$1]].",
+       "wantedfiletext-cat-noforeign": "Манна ааттаммыт билэлэргэ сигэнэллэр, ол эрээри кинилэр суохтар (сурулла иликтэр биитэр сотуллубуттар). Ону тэҥэ бу испииһэги көр [[:$1]].",
        "wantedfiletext-nocat": "Манна көстөр билэлэри суохтарын үрдүнэн тутта сатыыллар. Бу тиһиликкэ таска сытар билэлэр алҕас киириэхтэрин сөп. Оннук алҕастык киирбиттэр <del>сотуунан</del> бэлиэтэниэхтэрэ.",
+       "wantedfiletext-nocat-noforeign": "Бу билэлэргэ сигэнэллэр, ол эрэн кинилэр суохтар.",
        "wantedtemplates": "Көрдөнөр халыыптар",
        "mostlinked": "Саамай элбэх сирэй сигэнэр сирэйдэрэ",
        "mostlinkedcategories": "Саамай элбэх сирэй сигэнэр категориялара",
-       "mostlinkedtemplates": "Саамай Ñ\8dлбÑ\8dÑ\85Ñ\82ик Ñ\82Ñ\83Ñ\82Ñ\82Ñ\83ллаÑ\80 Ñ\85алÑ\8bÑ\8bпÑ\82ар",
+       "mostlinkedtemplates": "Саамай Ñ\8dлбÑ\8dÑ\85Ñ\82ик Ñ\82Ñ\83Ñ\82Ñ\82Ñ\83ллаÑ\80 Ñ\81иÑ\80Ñ\8dйдÑ\8dр",
        "mostcategories": "Элбэх категорияҕа киирэр ыстатыйалар",
        "mostimages": "Саамай элбэхтик сигэниллэр билэлэр",
        "mostinterwikis": "Ордук элбэх интервики-сигэлээх сирэйдэр",
index 374fda5..19f6302 100644 (file)
@@ -31,7 +31,8 @@
                        "Ата",
                        "Macofe",
                        "TomášPolonec",
-                       "Mikulas1"
+                       "Mikulas1",
+                       "Hromoslav"
                ]
        },
        "tog-underline": "Podčiarkovať odkazy:",
        "tog-watchdefault": "Pridávať stránky a súbory, ktoré upravím medzi sledované",
        "tog-watchmoves": "Pridávať stránky a súbory, ktoré presuniem medzi sledované",
        "tog-watchdeletion": "Pridávať stránky a súbory, ktoré zmažem medzi sledované",
+       "tog-watchrollback": "Pridať stránky na ktorých som použil rollback do môjho zoznamu sledovaných stránok",
        "tog-minordefault": "Označovať všetky zmeny štandardne ako drobné",
        "tog-previewontop": "Zobrazovať náhľad pred textovým poľom úprav, nie až za ním",
        "tog-previewonfirst": "Zobraziť náhľad pred prvou úpravou",
-       "tog-enotifwatchlistpages": "Upozorniť ma emailom, keď sa zmení stránka alebo súbor z môjho zoznamu sledovaných",
-       "tog-enotifusertalkpages": "Upozorniť ma emailom po zmene mojej používateľskej diskusnej stránky",
-       "tog-enotifminoredits": "Upozorniť ma emailom aj na drobné úpravy stránok a súborov",
+       "tog-enotifwatchlistpages": "Upozorniť ma e-mailom, keď sa zmení stránka alebo súbor z môjho zoznamu sledovaných",
+       "tog-enotifusertalkpages": "Upozorniť ma e-mailom po zmene mojej používateľskej diskusnej stránky",
+       "tog-enotifminoredits": "Upozorniť ma e-mailom aj na drobné úpravy stránok a súborov",
        "tog-enotifrevealaddr": "Zobraziť moju emailovú adresu v emailoch s upozorneniami",
        "tog-shownumberswatching": "Zobraziť počet používateľov sledujúcich stránku",
        "tog-oldsig": "Súčasný podpis:",
@@ -66,7 +68,7 @@
        "tog-watchlisthideliu": "Skryť úpravy prihlásených používateľov zo zoznamu sledovaných stránok",
        "tog-watchlisthideanons": "Skryť úpravy anonymných používateľov zo zoznamu sledovaných stránok",
        "tog-watchlisthidepatrolled": "Skryť strážené úpravy Zozname sledovaných stránok",
-       "tog-ccmeonemails": "Posielať mi kópie mojich emailov, ktoré pošlem ostatným používateľom",
+       "tog-ccmeonemails": "Posielať mi kópie e-mailov, ktoré pošlem ostatným používateľom",
        "tog-diffonly": "Nezobrazovať obsah stránky pod rozdielmi",
        "tog-showhiddencats": "Zobraziť skryté kategórie",
        "tog-norollbackdiff": "Vynechať rozdiel po vykonaní rollbacku",
        "october-date": "$1. októbra",
        "november-date": "$1. novembra",
        "december-date": "$1. decembra",
-       "pagecategories": "{{PLURAL:$1|Kategória|Kategórie|Kategórií}}",
+       "pagecategories": "{{PLURAL:$1|Kategória|Kategórie}}",
        "category_header": "Stránky v kategórii „$1“",
        "subcategories": "Podkategórie",
        "category-media-header": "Multimediálne súbory v kategórii „$1“",
        "wrongpassword": "Zadané heslo je nesprávne. Prosím, skúste to znova.",
        "wrongpasswordempty": "Zadané heslo bolo prázdne. Prosím, skúste to znova.",
        "passwordtooshort": "Heslo musí mať dĺžku aspoň $1 {{PLURAL:$1|znak|znaky|znakov}}.",
+       "passwordtoolong": "Heslá nemôžu byť dlhšie než {{PLURAL:$1|1 znak|$1 znaky|$1 znakov}}.",
        "password-name-match": "Vaše heslo musí byť iné ako vaše používateľské meno.",
        "password-login-forbidden": "Použitie tohto používateľského mena a hesla bolo zakázané.",
        "mailmypassword": "Obnoviť heslo",
        "anoneditwarning": "<strong>Upozornenie:</strong> Nie ste prihlásený.\nAk uložíte akúkoľvek úpravu vaša IP adresa bude zverejnená v histórii tejto stránky. Ak sa <strong>[$1 prihlásite]</strong> alebo si <strong>[$2 vytvoríte účet]</strong>, budú vaše úpravy priradené k vášmu používateľskému menu a získate i ďalšie výhody.",
        "anonpreviewwarning": "''Nie ste prihlásený. Uložením zaznamenáte svoju IP adresu do histórie úprav tejto stránky.''",
        "missingsummary": "'''Pripomienka:''' Neposkytli ste zhrnutie úprav. Ak kliknete znova na Uložiť, vaše úpravy sa uložia bez zhrnutia úprav.",
+       "selfredirect": "<strong>Upozornenie:</strong> Snažíte sa túto stránku presmerovať samú na seba.\nMožno ste zadali chybný cieľ presmerovania, alebo editujete nesprávnu stránku.\nAk znova kliknete na „{{int:savearticle}}“, bude presmerovanie aj napriek tomu vytvorené.",
        "missingcommenttext": "Prosím, dolu napíšte komentár.",
        "missingcommentheader": "'''Pripomienka:''' Neposkytli ste predmet/hlavičku tohto komentára.\nAk znova kliknete na tlačidlo „{{int:savearticle}}“, vaša úprava sa uloží bez nej.",
        "summary-preview": "Náhľad zhrnutia:",
        "subject-preview": "Náhľad predmetu/hlavičky:",
+       "previewerrortext": "Pri pokuse o zobrazenie náhľadu došlo k chybe.",
        "blockedtitle": "Používateľ je zablokovaný",
        "blockedtext": "'''Vaše používateľské meno alebo IP adresa bola zablokovaná.'''\n\nZablokoval vás správca $1. Udáva tento dôvod:<br />''$2''\n\n* Blokovanie začalo: $8\n* Blokovanie vyprší: $6\n* Kto mal byť zablokovaný: $7\n\nMôžete kontaktovať $1 alebo s jedného z ďalších [[{{MediaWiki:Grouppage-sysop}}|správcov]] a prediskutovať blokovanie.\nUvedomte si, že nemôžete použiť funkciu „{{int:Emailuser}}“, pokiaľ nemáte registrovanú platnú e-mailovú adresu vo svojich [[Special:Preferences|nastaveniach]].\nVaša IP adresa je $3 a ID blokovania je #$5.\nProsím, uveďte oba tieto údaje do každej správy, ktorú posielate.",
        "autoblockedtext": "Vaša IP adresa bola automaticky zablokovaná, pretože ju používa iný používateľ, ktorého zablokoval $1.\nUdaný dôvod zablokovania:\n\n:''$2''\n\n* Blokovanie začalo: $8\n* Blokovanie vyprší: $6\n* Blokovanie sa týka: $7\n\nAk potrebujete informácie o blokovaní, môžete kontaktovať $1 alebo niektorého iného\n[[{{MediaWiki:Grouppage-sysop}}|správcu]].\n\nPozn.: Nemôžete použiť funkciu „{{int:emailuser}}“, ak ste si vo svojich\n[[Special:Preferences|používateľských nastaveniach]] nezaregistrovali platnú emailovú adresu.\n\nVaša aktuálna IP adresa je $3. ID vášho blokovania je $5.\nProsím, uveďte tieto podrobnosti v akýchkoľvek otázkach, ktoré sa opýtate.",
        "invalid-content-data": "Neplatné dáta obsahu",
        "content-not-allowed-here": "Obsah „$1“ nie je povolený na stránke [[$2]]",
        "editwarning-warning": "Ak opustíte túto stránku, môžete tým stratiť všetky vykonané zmeny.\nAk ste prihlásený, toto upozornenie môžete vypnúť v sekcii „{{int:prefs-editing}}“ svojich nastavení.",
+       "editpage-notsupportedcontentformat-title": "Obsahový formát nieje podporovaný",
        "content-model-wikitext": "wikitext",
        "content-model-text": "čistý text",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "content-json-empty-object": "Prázdny objekt",
+       "content-json-empty-array": "Prázdne pole",
        "duplicate-args-category": "Stránky s duplicitnými parametrami pri volaniach šablón",
        "duplicate-args-category-desc": "Stránka obsahuje volania šablóny používajúce duplicitné parametere, ako napríklad <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> alebo <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "Upozornenie: Táto stránka obsahuje príliš mnoho volaní funkcií syntaktického analyzátora, ktoré nadmerne zaťažujú server.\n\nObsahuje $1 {{PLURAL:$1|volanie|volania|volaní}}. Mala by obsahovať menej ako $2 {{PLURAL:$1|volanie|volania|volaní}}.",
        "history-feed-description": "História úprav pre túto stránku na wiki",
        "history-feed-item-nocomment": "$1 na $2",
        "history-feed-empty": "Požadovaná stránka neexistuje.\nMožno bola zmazaná z wiki alebo premenovaná.\nSkúste [[Special:Search|vyhľadávať na wiki]] relevantné nové stránky.",
+       "history-edit-tags": "Upraviť značky vybraných revízií",
        "rev-deleted-comment": "(zhrnutie úprav odstránené)",
        "rev-deleted-user": "(používateľské meno odstránené)",
        "rev-deleted-event": "(činnosť odstránená zo záznamu)",
        "editundo": "vrátiť",
        "diff-empty": "(Žiaden rozdiel)",
        "diff-multi-sameuser": "({{PLURAL:$1|Jedna medziľahlá úprava|$1 medziľahlé úpravy|$1 medziľahlých úprav}} od rovnakého používateľa.)",
+       "diff-multi-otherusers": "({{PLURAL:$1|Jedna medziľahlá úprava|$1 medziľahlé úpravy|$1 medziľahlých úprav}} od {{PLURAL:$2|jedného ďalšieho používateľa|$2 ďalších používateľov}} {{PLURAL:$1|nie je zobrazená|nie sú zobrazené|nie je zobrazených}})",
        "diff-multi-manyusers": "({{PLURAL:$1|$1 medziľahlá revízia|$1 medziľahlé revízie|$1 medziľahlých revízií}} od viac ako {{PLURAL:$2|$2 používateľa|$2 používateľov}} {{PLURAL:$1|nie je zobrazená|nie sú zobrazené|nie je zobrazených}})",
        "difference-missing-revision": "{{PLURAL:$2|$2 revízia|$2 revízie|$2 revízií}} pre požadovaný rozdiel ($1) {{PLURAL:$2|neexistuje|neexistujú|neexistuje}}.\n\nPravdepodobne ste nasledovali zastaraný odkaz na rozdiel revízií, z ktorých niektorá bola medzičasom odstránená.\nPodrobnosti nájdete v [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} zázname zmazaní].",
        "searchresults": "Výsledky vyhľadávania",
        "notextmatches": "V textoch stránok nebola nájdená zhoda",
        "prevn": "{{PLURAL:$1|predošlá|predošlé|predošlých}} $1",
        "nextn": "{{PLURAL:$1|ďalšia|ďalšie|ďalších}} $1",
+       "prev-page": "predošlá stránka",
+       "next-page": "ďalšia stránka",
        "prevn-title": "{{PLURAL:$1|Predošlý $1 výsledok|Predošlé $1 výsledky|Predošlých $1 výsledkov}}",
        "nextn-title": "{{PLURAL:$1|Ďalší $1 výsledok|Ďalšie $1 výsledky|Ďalších $1 výsledkov}}",
        "shown-title": "Zobraziť $1 {{PLURAL:$1|výsledok|výsledky|výsledkov}} na stránku",
        "search-result-category-size": "{{PLURAL:$1|1 člen|$1 členovia|$1 členov}} ({{PLURAL:$2|1 podkategória|$2 podkategórie|$2 podkategórií}}, {{PLURAL:$3|1 súbor|$3 súbory|$3 súborov}})",
        "search-redirect": "(presmerovanie $1)",
        "search-section": "(sekcia $1)",
+       "search-category": "($1 kategória)",
        "search-suggest": "Mali ste na mysli „$1“?",
        "search-interwiki-caption": "Sesterské projekty",
        "search-interwiki-default": "$1 výsledkov:",
        "searchrelated": "súvisiace",
        "searchall": "všetko",
        "showingresults": "Nižšie {{PLURAL:$1|je zobrazený jeden výsledok|sú zobrazené '''1''' výsledky|je zobrazených '''$1''' výsledkov}}, počnúc od  #<b>$2</b>.",
-       "search-showingresults": "{{PLURAL:$4|Výsledok <strong>$1</strong> z <strong>$3</strong>|Výsledky <strong>$1 - $2</strong> z <strong>$3</strong>}}",
+       "showingresultsinrange": "Nižšie {{PLURAL:$1|je zobrazený|sú zobrazené|je zobrazených}} max strong>$1</strong> {{PLURAL:$1|výsledok|výsledky|výsledkov}} v rozsahu #<strong>$2</strong> – #<strong>$3</strong>.",
+       "search-showingresults": "{{PLURAL:$4|Výsledok <strong>$1</strong> z <strong>$3</strong>|Výsledky <strong>$1 – $2</strong> z <strong>$3</strong>}}",
        "search-nonefound": "Vyhľadávanie nenašlo žiadne výsledky.",
        "powersearch-legend": "Pokročilé hľadanie",
        "powersearch-ns": "Hľadať v menných priestoroch:",
        "powersearch-togglelabel": "Skontrolovať:",
        "powersearch-toggleall": "Všetky",
        "powersearch-togglenone": "Žiadne",
+       "powersearch-remember": "Zapamätať si výber pre budúce vyhľadávania",
        "search-external": "Externé vyhľadávanie",
        "searchdisabled": "Prepáčte! Fulltextové vyhľadávanie bolo dočasne vypnuté z dôvodu preťaženia. Zatiaľ môžete použiť hľadanie pomocou Google, ktoré však nemusí byť aktuálne.",
        "search-error": "Pri hľadaní sa vyskytla chyba:$1",
        "preferences": "Nastavenia",
        "mypreferences": "Nastavenia",
        "prefs-edits": "Počet úprav:",
+       "prefsnologintext2": "Ak chcete zmeniť prílohy, prosím prihláste sa",
        "prefs-skin": "Vzhľad",
        "skin-preview": "Náhľad",
        "datedefault": "štandardný",
        "prefs-personal": "Profil",
        "prefs-rc": "Posledné úpravy",
        "prefs-watchlist": "Sledované stránky",
+       "prefs-editwatchlist": "Upraviť zoznam sledovaných stránok",
+       "prefs-editwatchlist-label": "Upraviť položky vášho zoznamu sledovaných:",
+       "prefs-editwatchlist-edit": "Zobraziť a odstrániť položky",
+       "prefs-editwatchlist-raw": "Upraviť textovú verziu zoznamu",
+       "prefs-editwatchlist-clear": "Vyprázdniť zoznam sledovaných stránok",
        "prefs-watchlist-days": "Koľko dní zobrazovať v sledovaných stránkach:",
        "prefs-watchlist-days-max": "Najviac $1 {{PLURAL:$1|deň|dni|dní}}",
        "prefs-watchlist-edits": "Počet úprav, ktorý sa zobrazí v rozšírenom zozname sledovaných:",
        "prefs-resetpass": "Zmeniť heslo",
        "prefs-changeemail": "Zmeniť email",
        "prefs-setemail": "Nastaviť emailovú adresu",
-       "prefs-email": "Možnosti emailu",
+       "prefs-email": "Možnosti e-mailu",
        "prefs-rendering": "Vzhľad",
        "saveprefs": "Uložiť nastavenia",
        "restoreprefs": "Obnoviť všetky predvolené nastavenia (vo všetkých sekciách)",
        "prefs-custom-js": "Vlastný JS",
        "prefs-common-css-js": "Spoločné CSS/JS pre všetky témy vzhľadu:",
        "prefs-reset-intro": "Túto stránku môžete použiť na vrátenie predvolených hodnôt vašich nastavení.\nTúto operáciu nemožno vrátiť.",
-       "prefs-emailconfirm-label": "Potvrdenie emailu:",
+       "prefs-emailconfirm-label": "Overenie e-emailu:",
        "youremail": "Váš e-mail²",
        "username": "{{GENDER:$1|Používateľské meno}}:",
        "prefs-memberingroups": "{{GENDER:$2|Člen|Členovia}} {{PLURAL:$1|skupiny|skupín}}:",
        "prefs-help-gender": "Nastavenie tejto voľby nie je povinné.\nSoftvér používa toto nastavenie na správne oslovenie a označenie vás ostatným v závislosti od gramatického rodu. Táto informácia bude verejná.",
        "email": "E-mail",
        "prefs-help-realname": "¹ Skutočné meno (nepovinné): ak sa rozhodnete ho poskytnúť, bude použité na označenie vašej práce.",
-       "prefs-help-email": "Emailová adresa je nepovinný údaj, ale je potrebná v prípade, že ak zabudnete heslo, môžete si na email vyžiadať nové.",
-       "prefs-help-email-others": "Môžete tiež umožniť ostatným kontaktovať vás prostredníctvom vašej používateľskej alebo diskusnej stránky bez nutnosti odhaliť vašu identitu.",
+       "prefs-help-email": "E-mailová adresa je nepovinný údaj, umožní ale zaslanie nového hesla v prípade, že svoje heslo zabudnete.",
+       "prefs-help-email-others": "Môžete tiež umožniť ostatným kontaktovať vás e-mailom pomocou odkazu z vašej používateľskej alebo diskusnej stránky, bez nutnosti odhaliť vašu identitu.",
        "prefs-help-email-required": "Vyžaduje sa e-mailová adresa.",
        "prefs-info": "Základné informácie",
        "prefs-i18n": "Internacionalizácia",
        "prefs-advancedwatchlist": "Rozšírené možnosti",
        "prefs-displayrc": "Možnosti zobrazenia",
        "prefs-displaywatchlist": "Možnosti zobrazenia",
+       "prefs-tokenwatchlist": "Token",
        "prefs-diffs": "Rozdiely",
        "prefs-help-prefershttps": "Táto voľba sa prejaví pri vašom ďalšom prihlásení.",
        "email-address-validity-valid": "Formát e-mailovej adresa vyzerá byť správny",
        "action-viewmywatchlist": "zobraziť zoznam sledovaných stránok",
        "action-viewmyprivateinfo": "zobraziť vaše súkromné údaje",
        "action-editmyprivateinfo": "upraviť vaše súkromné údaje",
+       "action-managechangetags": "vytvorte a odstráňte značky z databázy",
        "nchanges": "$1 {{PLURAL:$1|úprava|úpravy|úprav}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|od poslednej návštevy}}",
        "enhancedrc-history": "história",
        "rcshowhidebots": "$1 botov",
        "rcshowhidebots-show": "Zobraziť",
        "rcshowhidebots-hide": "Skryť",
-       "rcshowhideliu": "$1 registrovaní užívatelia",
+       "rcshowhideliu": "$1 registrovaných používateľov",
        "rcshowhideliu-show": "Zobraziť",
        "rcshowhideliu-hide": "Skryť",
        "rcshowhideanons": "$1 anonymných používateľov",
        "listfiles-delete": "zmazať",
        "listfiles-summary": "Táto špeciálna stránka zobrazuje všetky nahrané súbory.",
        "listfiles_search_for": "Hľadať názov súboru:",
+       "listfiles-userdoesnotexist": "Používateľské konto „$1“ nie je zaregistrované.",
        "imgfile": "súbor",
        "listfiles": "Zoznam obrázkov",
        "listfiles_thumb": "Náhľad",
        "logempty": "V zázname neboli nájdené zodpovedajúce položky.",
        "log-title-wildcard": "Hľadať názvy začínajúce týmto textom",
        "showhideselectedlogentries": "Zobraziť/skryť vybraté položky záznamu",
+       "log-edit-tags": "Editovať značky zvolených položiek záznamu",
        "allpages": "Všetky stránky",
        "nextpage": "Ďalšia stránka ($1)",
        "prevpage": "Predchádzajúca stránka ($1)",
        "trackingcategories-msg": "Sledovacia kategória",
        "trackingcategories-name": "Názov správy",
        "trackingcategories-desc": "Kritériá pre zaradenie do kategórie",
-       "noindex-category-desc": "Stránka nieje indexovaná robotmi, pretože obsahuje magické slovo <code><nowiki>__NOINDEX__</nowiki></code> a je v mennom priestore, v ktorom je tento príznak povolený.",
+       "noindex-category-desc": "Stránka nie je indexovaná robotmi, pretože obsahuje magické slovo <code><nowiki>__NOINDEX__</nowiki></code> a je v mennom priestore, v ktorom je tento príznak povolený.",
+       "index-category-desc": "Stránka obsahuje magické slovo <code><nowiki>__INDEX__</nowiki></code> (a je v mennom prostore, v ktorom je tento príznak povolený), takže je indexovaná robotmi, hoci by normálne nebola.",
+       "post-expand-template-inclusion-category-desc": "Stránka je po rozbalení všetkých šablón väčšia než <code>$wgMaxArticleSize</code>, takže niektoré šablóny nemohli byť rozbalené.",
+       "post-expand-template-argument-category-desc": "Stránka je po rozbalení parametrov šablón (niečo v trojitých zátvorkách, napr. <code>{{{Foo}}}</code>) väčšia než <code>$wgMaxArticleSize</code>.",
+       "expensive-parserfunction-category-desc": "Stránka používa priveľa náročných funkcií syntaktického analyzátoru (ako <code>#ifexist</code>). Pozri [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
+       "broken-file-category-desc": "Stránka obsahuje nefunkčný odkaz na súbor (odkaz na neexistujúci súbor).",
+       "hidden-category-category-desc": "Kategória vo svojom zdrojovom kóde obsahuje <code><nowiki>__HIDDENCAT__</nowiki></code>, čo má za následok, že sa na stránkach medzi odkazmi na kategórie implicitne nezobrazuje.",
        "trackingcategories-nodesc": "Popis nie je k dispozícii.",
        "trackingcategories-disabled": "Kategória je vypnutá",
        "mailnologin": "Žiadna adresa na zaslanie",
        "emailccsubject": "Kópia správy pre $1: $2",
        "emailsent": "E-mail bol odoslaný",
        "emailsenttext": "Vaša e-mailová správa bola odoslaná.",
-       "emailuserfooter": "Tento email poslal $1 používateľovi $2 pomocou funkcie „Email používateľovi” na {{GRAMMAR:lokál|{{SITENAME}}}}.",
+       "emailuserfooter": "Tento e-mail poslal/-a/ $1 používateľovi $2 pomocou funkcie „E-mail používateľovi” na {{GRAMMAR:lokál|{{SITENAME}}}}.",
        "usermessage-summary": "Zanechanie správy systému.",
        "usermessage-editor": "Správy systému",
        "watchlist": "Sledované stránky",
        "watchnologin": "Nie ste prihlásený/á",
        "addwatch": "Pridať do zoznamu sledovaných stránok",
        "addedwatchtext": "Stránka „[[:$1]]“ bola pridaná do vášho zoznamu [[Special:Watchlist|sledovaných stránok]].\nBudú tam uvedené aj budúce úpravy tejto stránky a jej diskusie.",
+       "addedwatchtext-short": "Stránka „$1“ bola pridaná do vášho zoznamu sledovaných.",
        "removewatch": "Odstrániť zo zoznamu sledovaných",
        "removedwatchtext": "Stránka „[[:$1]]“ bola odstránená z vášho [[Special:Watchlist|zoznamu sledovaných stránok]].",
+       "removedwatchtext-short": "Stránka „$1“ bola odstránená z vášho zoznamu sledovaných.",
        "watch": "Sledovať",
        "watchthispage": "Sledovať túto stránku",
        "unwatch": "Nesledovať",
        "protect-locked-blocked": "Nemôžete meniť úroveň ochrany, kým ste zablokovaný.\nTu sú aktuálne nastavenia stránky '''$1''':",
        "protect-locked-dblock": "Nie je možné zmeniť úroveň ochrany z dôvodu aktívneho zámku databázy.\nTu sú aktuálne nastavenia stránky '''$1''':",
        "protect-locked-access": "Váš účet nemá oprávnenie meniť úroveň ochrany stránky.\nTu sú aktuálne nastavenia stránky '''$1''':",
-       "protect-cascadeon": "Táto stránka je momentálne zamknutá, lebo je použitá na {{PLURAL:$1|nasledovnej stránke, ktorá má|nasledovných stránkach, ktoré majú}} zapnutú kaskádovú ochranu. Môžete zmeniť úroveň ochrany tejto stránky, ale neovplyvní to kaskádovú ochranu.",
+       "protect-cascadeon": "Táto stránka je momentálne zamknutá, lebo je použitá na {{PLURAL:$1|nasledovnej stránke, ktorá má|nasledovných stránkach, ktoré majú}} zapnutú kaskádovú ochranu. Zmeny úrovne ochrany tejto stránky neovplyvnia kaskádovú ochranu.",
        "protect-default": "Povoliť všetkých používateľov",
        "protect-fallback": "Povoliť iba používateľov s oprávnením „$1“",
        "protect-level-autoconfirmed": "Povoliť iba používateľov s potvrdeným emailom",
        "protect-othertime": "Iný čas:",
        "protect-othertime-op": "iný čas",
        "protect-existing-expiry": "Súčasný čas ukončenia: $2, $3",
+       "protect-existing-expiry-infinity": "Súčasný čas ukončenia: do odvolania",
        "protect-otherreason": "Iný/ďalší dôvod:",
        "protect-otherreason-op": "Iný/ďalší dôvod",
        "protect-dropdown": "* Bežné dôvody zamknutia\n** Nadmerný vandalizmus\n** Nadmerný spam\n** Neproduktívne upravovacie vojny\n** Veľmi často naštevovaná stránka",
        "namespace": "Menný priestor:",
        "invert": "Invertovať výber",
        "tooltip-invert": "Zaškrtnite, ak chcete skryť zmeny na stránkach vo vybranom mennom priestore (a súvisiaci menný priestor ak je zaškrtnuté)",
+       "tooltip-whatlinkshere-invert": "Zaškrtnutím tohoto políčka skryjete odkazy zo stránok vo zvolenom mennom priestore.",
        "namespace_association": "Asociovaný menný priestor",
        "tooltip-namespace_association": "Zaškrtnite, ak chcete zahrnúť aj diskusné stránky alebo predmetový menný priestor spojený s vybraným menným priestorom",
        "blanknamespace": "(Hlavný)",
        "contributions-title": "Príspevky používateľa pre $1",
        "mycontris": "Príspevky",
        "contribsub2": "Príspevky {{GENDER:$3|$1}} ($2)",
+       "contributions-userdoesnotexist": "Používateľské konto „$1“ nie je zaregistrované.",
        "nocontribs": "Neboli nájdené úpravy, ktoré by zodpovedali týmto kritériám.",
        "uctop": "(aktuálne)",
        "month": "Mesiac:",
        "sp-contributions-blocked-notice-anon": "Táto IP adresa je momentálne zablokovaná.\nNižšie si môžete pozrieť najnovšiu položku záznamu blokovaní:",
        "sp-contributions-search": "Hľadať príspevky",
        "sp-contributions-username": "IP adresa alebo meno používateľa:",
-       "sp-contributions-toponly": "Zobraziť iba posledné revízie",
+       "sp-contributions-toponly": "Zobraziť len posledné revízie",
+       "sp-contributions-newonly": "Zobraziť len založenia stránok",
        "sp-contributions-submit": "Hľadať",
        "whatlinkshere": "Odkazy na túto stránku",
        "whatlinkshere-title": "Stránky odkazujúce na „$1“",
        "blockipsuccesstext": "[[Special:Contributions/$1|$1]] bol zablokovaný.<br />\n[[Special:BlockList|IP block list]] obsahuje zoznam blokovaní.",
        "ipb-blockingself": "Chystáte sa zablokovať sám seba! Ste si istí, že to chcete urobiť?",
        "ipb-confirmhideuser": "Chystáte sa zablokovať používateľa so zapnutou funkciou „skryť používateľa“. Tým sa potlačí meno používateľa vo všetkých zoznamoch a záznamoch. Ste si istí, že chcete urobiť?",
+       "ipb-confirmaction": "Ak ste si {{GENDER:|istý|istá|istí}}, že to chcete urobiť, zaškrtnite prepínač „{{int:ipb-confirm}}“ nižšie.",
        "ipb-edit-dropdown": "Upraviť dôvody pre blokovanie",
        "ipb-unblock-addr": "Odblokovať $1",
        "ipb-unblock": "Odblokovať používateľa alebo IP adresu",
        "unblocked": "[[User:$1|$1]] bol odblokovaný",
        "unblocked-range": "$1 bol odblokovaný",
        "unblocked-id": "Blokovanie $1 bolo odstránené",
+       "unblocked-ip": "Adresa [[Special:Contributions/$1|$1]] bola odblokovaná.",
        "blocklist": "Zablokovaní používatelia",
        "ipblocklist": "Zablokovaní používatelia",
        "ipblocklist-legend": "Nájsť zablokovaného používateľa",
        "movepagetalktext": "Príslušná diskusná stránka (ak existuje) bude premiestnená spolu so samotnou stránkou; '''nestane sa tak, iba ak:'''\n*už existuje Diskusná stránka pod týmto novým menom, alebo\n*nezaškrtnete nižšie sa nachádzajúci textový rámček.\n\nV takých prípadoch budete musieť, ak si to želáte, premiestniť alebo zlúčiť stránku ručne.",
        "movearticle": "Presunúť stránku",
        "moveuserpage-warning": "'''Upozornenie:''' Chystáte sa presunúť používateľskú stránku. Pamätajte, že týmto presuniete iba stránku a používateľ ''nebude'' premenovaný.",
+       "movecategorypage-warning": "<strong>Upozornenie:</strong> Chystáte sa presunúť stránku kategórie. Uvedomte si, že presunutá bude iba táto stránka a že žiadne stránky v pôvodnej kategórii <em>nebudú</em> do novej kategórie automaticky preradené.",
        "movenologintext": "Musíte byť registrovaný používateľ a [[Special:UserLogin|prihlásený]], aby ste mohli presunúť stránku.",
-       "movenotallowed": "Nemáte povolenie presúvať stránky.",
+       "movenotallowed": "Nemáte oprávnenie presúvať stránky.",
        "movenotallowedfile": "Nemáte oprávnenie presúvať súbory.",
-       "cant-move-user-page": "Nemáte povolenie presúvať koreňové stránky používateľov.",
+       "cant-move-user-page": "Nemáte oprávnenie presúvať koreňové stránky používateľov.",
        "cant-move-to-user-page": "Nemáte oprávnenie presunúť stránku na stránku používateľa (iba na podstránku používateľa).",
+       "cant-move-category-page": "Nemáte oprávnenie presúvať stránky kategórií.",
+       "cant-move-to-category-page": "Nemáte oprávnenie presunúť stránku na stránku kategórie.",
        "newtitle": "Na nový názov:",
        "move-watch": "Sledovať túto stránku",
        "movepagebtn": "Presunúť stránku",
        "javascripttest": "Testovanie JavaScriptu",
        "javascripttest-pagetext-noframework": "Táto stránka je vyhradená pre testy JavaScriptu.",
        "javascripttest-pagetext-unknownframework": "Neznáma testovacia platfoma „$1“.",
+       "javascripttest-pagetext-unknownaction": "Neznáma akcia: „$1“.",
        "javascripttest-pagetext-frameworks": "Prosím vyberte jednu z nasledovných testovacích platforiem: $1",
        "javascripttest-pagetext-skins": "Vyberte tému vzhľadu, na ktorej chcete spustiť testy:",
        "javascripttest-qunit-intro": "Pozri [$1 dokumentácia testovania] na mediawiki.org.",
        "tooltip-n-mainpage-description": "Navštíviť hlavnú stránku",
        "tooltip-n-portal": "O projekte, ako môžete prispieť, kde čo nájsť",
        "tooltip-n-currentevents": "Aktuálne udalosti a ich pozadie",
-       "tooltip-n-recentchanges": "Zoznam posledných úprav na wiki",
+       "tooltip-n-recentchanges": "Zoznam posledných úprav na tejto wiki",
        "tooltip-n-randompage": "Zobraziť náhodnú stránku",
-       "tooltip-n-help": "Miesto, kde sa môžete dozvedieť",
+       "tooltip-n-help": "Miesto, kde nájdete pomoc",
        "tooltip-t-whatlinkshere": "Zoznam všetkých wiki stránok, ktoré sem odkazujú",
        "tooltip-t-recentchangeslinked": "Posledné úpravy v stránkach, na ktoré odkazuje táto stránka",
        "tooltip-feed-rss": "RSS feed pre túto stránku",
        "tooltip-feed-atom": "Kanál Atom pre túto stránku",
        "tooltip-t-contributions": "Pozrieť si zoznam príspevkov od tohto používateľa",
        "tooltip-t-emailuser": "Poslať e-mail tomuto používateľovi",
+       "tooltip-t-info": "Viac informácií o tejto stránke",
        "tooltip-t-upload": "Nahranie súborov",
        "tooltip-t-specialpages": "Zoznam všetkých špeciálnych stránok",
        "tooltip-t-print": "Verzia tejto stránky pre tlač",
        "pageinfo-protect-cascading-yes": "Áno",
        "pageinfo-protect-cascading-from": "Zámky pochádzajú z kaskádových zamknutí",
        "pageinfo-category-info": "Informácie o kategórii",
+       "pageinfo-category-total": "Celkový počet členov",
        "pageinfo-category-pages": "Počet stránok",
        "pageinfo-category-subcats": "Počet podkategórií",
        "pageinfo-category-files": "Počet súborov",
        "patrol-log-page": "Záznam strážení",
        "patrol-log-header": "Toto je záznam strážených revízií.",
        "log-show-hide-patrol": "záznam stráženia $1",
+       "log-show-hide-tag": "záznam značiek $1",
        "deletedrevision": "Zmazať staré verzie $1",
        "filedeleteerror-short": "Chyba pri mazaní súboru: $1",
        "filedeleteerror-long": "Vyskytli sa chyby pri mazaní súboru:\n\n$1",
        "confirmemail_loggedin": "Vaša e-mailová adresa bola potvrdená.",
        "confirmemail_subject": "{{SITENAME}} - potvrdenie e-mailovej adresy",
        "confirmemail_body": "Niekto, pravdepodobne vy z IP adresy $1, zaregistroval účet\n„$2“ s touto e-mailovou adresou na {{GRAMMAR:lokál|{{SITENAME}}}}.\n\nPre potvrdenie, že tento účet skutočne patrí vám a pre aktivovanie\ne-mailových funkcií na {{GRAMMAR:lokál|{{SITENAME}}}}, otvorte tento odkaz vo vašom prehliadači:\n\n$3\n\nAk ste to *neboli* vy, otvorte tento odkaz,\nčím zrušíte potvrdenie emailovej adresy:\n\n$5\n\nTento potvrdzovací kód vyprší $4.",
-       "confirmemail_body_changed": "Niekto, pravdepodobne vy, z IP adresy $1,\nzmenil emailovú adresu účtu „$2“ na túto adresu na {{GRAMMAR:lokál|{{SITENAME}}}}.\n\nAby ste potvrdili, že tento účet skutočne patrí vám a znova\naktivovali funkcie emailu na{{GRAMMAR:lokál|{{SITENAME}}}},\notvorte nasledovný odkaz v prehliadači:\n\n$3\n\nAk vám účet *nepatrí*, otvorte namiesto toho tento odkaz,\nktorý zruší potvrdenie emailovej adresy:\n\n$5\n\nPlatnosť tohto potvrdzovacieho kódu vyprší $4.",
+       "confirmemail_body_changed": "Niekto, pravdepodobne vy, z IP adresy $1,\nzmenil e-mailovú adresu účtu „$2“ na túto adresu na {{GRAMMAR:lokál|{{SITENAME}}}}.\n\nAby ste potvrdili, že tento účet skutočne patrí vám a znova\naktivovali funkcie emailu na{{GRAMMAR:lokál|{{SITENAME}}}},\notvorte nasledovný odkaz v prehliadači:\n\n$3\n\nAk vám účet *nepatrí*, otvorte namiesto toho tento odkaz,\nktorý zruší potvrdenie emailovej adresy:\n\n$5\n\nPlatnosť tohoto potvrdzovacieho kódu vyprší $4.",
        "confirmemail_body_set": "Niekto, pravdepodobne vy, z IP adresy $1\nnastavil e-mailovú adresu účtu „$2“ na túto adresu na {{GRAMMAR:genitív|{{SITENAME}}}}.\n\nAk chcete potvrdiť, že tento účet skutočne patrí vám a aktivovať\ne-mailové funkcie na {{GRAMMAR:genitív|{{SITENAME}}}}, otvorte tento odkaz vo vašom prehliadači:\n\n$3\n\nAk účet nie je *nepatrí* patrí k vám, nasledujte tento odkaz,\nktorý zruší potvrdenie e-mailovej adresy:\n\n$5\n\nPlatnosť tohto potvrdzovacieho kódu vyprší $4.",
        "confirmemail_invalidated": "Potvrdenie emailovej adresy bolo zrušené",
        "invalidateemail": "Zrušiť potvrdenie emailovej adresy",
        "lag-warn-high": "Kvôli dlhšej odozve databázového servera nemusia byť úpravy za {{PLURAL:$1|poslednú sekundu|posledné $1 sekundy|posledných $1 sekúnd}} v tomto zozname zobrazené.",
        "watchlistedit-normal-title": "Upraviť zoznam sledovaných stránok",
        "watchlistedit-normal-legend": "Odstrániť všetky stránky zo zoznamu sledovaných stránok",
-       "watchlistedit-normal-explain": "Nižšie sú zobrazené stránky z vášho zoznamu sledovaných stránok.\nAk chcete odstrániť položku, začiarknite políčko vedľa nej a kliknite na „{{int:Watchlistedit-normal-submit}}“. Tiež môžete [[Special:EditWatchlist/raw|upravovať nespracovaný zoznam]].",
+       "watchlistedit-normal-explain": "Nižšie sú zobrazené stránky z vášho zoznamu sledovaných stránok.\nAk chcete odstrániť položku, zaškrtnite políčko vedľa nej a kliknite na „{{int:Watchlistedit-normal-submit}}“. Môžete tiež [[Special:EditWatchlist/raw|upraviť textovú verziu zoznamu]].",
        "watchlistedit-normal-submit": "Odstrániť položky",
        "watchlistedit-normal-done": "{{PLURAL:$1|jedna položka bola odstránená|$1 položky boli odstránené|$1 položiek bolo odstránených}} z vášho zoznamu sledovaných stránok:",
-       "watchlistedit-raw-title": "Upravovať nespracovaný zoznam sledovaných stránok",
-       "watchlistedit-raw-legend": "Upravovať nespracovaný zoznam sledovaných stránok",
-       "watchlistedit-raw-explain": "Nižšie sú zobrazené stránky z vášho zoznamu sledovaných stránok.\nAk chcete upravovať položky, pridajte alebo odstráňte ich zo zoznamu tak, aby na každom riadku bola práve jedna.\nPo skončení kliknite na „{{int:Watchlistedit-raw-submit}}“.\nTiež môžete [[Special:EditWatchlist|použiť štandardný editor]].",
+       "watchlistedit-raw-title": "Upraviť textovú verziu zoznamu sledovaných",
+       "watchlistedit-raw-legend": "Upraviť textovú verziu zoznamu sledovaných",
+       "watchlistedit-raw-explain": "Nižšie sú zobrazené stránky z vášho zoznamu sledovaných stránok.\nAk chcete upravovať položky, pridajte alebo odstráňte ich zo zoznamu tak, aby na každom riadku bola práve jedna.\nPo skončení kliknite na „{{int:Watchlistedit-raw-submit}}“.\nMôžete tiež [[Special:EditWatchlist|použiť štandardný editor]].",
        "watchlistedit-raw-titles": "Stránky:",
        "watchlistedit-raw-submit": "Aktualizovať zoznam sledovaných stránok",
        "watchlistedit-raw-done": "Váš zoznam sledovaných stránok bol aktualizovaný.",
        "watchlistedit-clear-submit": "Vyprázdniť zoznam sledovaných stránok (natrvalo!)",
        "watchlistedit-clear-done": "Váš zoznam sledovaných stránok bol vyprázdnený.",
        "watchlistedit-clear-removed": "{{PLURAL:$1|Bol odstránený jeden názov|Boli odstránené $1 názvy|Bolo odstránených $1 názvov}}:",
+       "watchlistedit-too-many": "Zoznam obsahuje priveľa stránok na zobrazenie.",
        "watchlisttools-clear": "Vyprázdniť zoznam sledovaných stránok",
        "watchlisttools-view": "Zobraziť súvisiace zmeny",
        "watchlisttools-edit": "Zobraziť a upraviť zoznam sledovaných stránok",
-       "watchlisttools-raw": "Upraviť nespracovaný zoznam sledovaných stránok",
+       "watchlisttools-raw": "Upraviť textovú verziu zoznamu sledovaných stránok",
        "iranian-calendar-m1": "Farvardín",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|diskusia]])",
        "duplicate-defaultsort": "Upozornenie: Štandardný kláves na zoraďovanie „$2“ nahrádza starý kláves „$1“.",
        "tags-active-no": "Nie",
        "tags-edit": "upraviť",
        "tags-hitcount": "$1 {{PLURAL:$1|úprava|úpravy|úprav}}",
+       "tags-deactivate-reason": "Dôvod:",
+       "tags-edit-title": "Upraviť značky",
+       "tags-edit-new-tags": "Nové značky:",
+       "tags-edit-remove": "Odstrániť tieto značky:",
+       "tags-edit-chosen-placeholder": "Vyberte niektoré značky",
+       "tags-edit-reason": "Dôvod",
        "comparepages": "Porovnať stránky",
        "compare-page1": "Stránka 1",
        "compare-page2": "Stránka 2",
        "htmlform-chosen-placeholder": "Vyberte možnosť",
        "htmlform-cloner-create": "Pridať ďalšie",
        "htmlform-cloner-delete": "Odstrániť",
+       "htmlform-cloner-required": "Je povinná najmenej jedna hodnota.",
        "sqlite-has-fts": "$1 s podporou vyhľadávania v plnom texte",
        "sqlite-no-fts": "$1 bez podpory vyhľadávania v plnom texte",
        "logentry-delete-delete": "$1 zmazal stránku $3",
        "revdelete-uname-unhid": "používateľské meno odkryté",
        "revdelete-restricted": "obmedzenia správcov použité",
        "revdelete-unrestricted": "obmedzenia správcov odstránené",
+       "logentry-block-block": "$1 {{GENDER:$2|zablokoval|zablokovala}} {{GENDER:$4|používateľa|používateľku}} $3 s časom ukončenia $5 $6",
+       "logentry-block-unblock": "$1 {{GENDER:$2|odblokoval|odblokovala}} {{GENDER:$4|používateľa|používateľku}} $3",
+       "logentry-block-reblock": "$1 {{GENDER:$2|zmenil|zmenila}} nastavenia bloku {{GENDER:$4|používateľa|používateľky}} $3 s časom ukončenia $5 $6",
+       "logentry-suppress-block": "$1 {{GENDER:$2|zablokoval|zablokovala}} {{GENDER:$4|používateľa|používateľku}} $3 s časom ukončenia $5 $6",
+       "logentry-suppress-reblock": "$1 {{GENDER:$2|zmenil|zmenila}} nastavenia bloku {{GENDER:$4|používateľa|používateľky}} $3 s časom ukončenia $5 $6",
        "logentry-move-move": "$1 premiestnil stránku $3 na $4",
        "logentry-move-move-noredirect": "$1 premiestnil stránku $3 na $4, ale neponechal presmerovanie",
        "logentry-move-move_redir": "$1 premiestnil stránku $3 na $4 prostredníctvom presmerovania",
        "feedback-bugornote": "Ak ste pripravený podrobne popísať technický problém, prosím pošlite [$1 hlásenie o chybe]. \nV opačnom prípade môžete použiť zjednodušený formulár nižšie. Váš komentár sa pridá na stránku „[$3 $2]“ spolu s vašim používateľským meno a prehliadačom, ktorý používate.",
        "feedback-cancel": "Zrušiť",
        "feedback-close": "Hotovo",
+       "feedback-error-title": "Chyba",
        "feedback-error1": "Chyba: Nerozpoznaný výsledok z API",
        "feedback-error2": "Chyba: Úprava sa nepodarila",
        "feedback-error3": "Chyba: Žiadna odpoveď z API",
        "feedback-subject": "Predmet:",
        "feedback-submit": "Odoslať",
        "feedback-thanks": "Ďakujeme. Váš komentár bol odoslaný na stránku „[$2 $1]“.",
+       "feedback-thanks-title": "Ďakujeme",
+       "feedback-useragent": "Prehliadač:",
        "searchsuggest-search": "Hľadať",
        "searchsuggest-containing": "obsahuje...",
        "api-error-badaccess-groups": "Nemáte oprávnenie nahrávať súbory na tejto wiki.",
        "expand_templates_input": "Vstupný text:",
        "expand_templates_output": "Výsledok",
        "expand_templates_xml_output": "XML výstup",
+       "expand_templates_html_output": "Surový HTML výstup",
        "expand_templates_ok": "OK",
        "expand_templates_remove_comments": "Odstrániť komentáre",
        "expand_templates_remove_nowiki": "Potlačiť značky <nowiki> vo výsledku",
        "expand_templates_generate_xml": "Zobraziť strom XML",
+       "expand_templates_generate_rawhtml": "Zobraziť surové HTML",
        "expand_templates_preview": "Náhľad",
        "pagelang-name": "Stránka",
        "pagelang-language": "Jazyk",
        "mediastatistics-header-text": "Text",
        "mediastatistics-header-executable": "Spustiteľné súbory",
        "mediastatistics-header-archive": "Komprimované formáty",
+       "json-error-state-mismatch": "Nesprávny alebo poškodený JSON",
+       "json-error-syntax": "Syntaktická chyba",
        "headline-anchor-title": "Odkaz na túto sekciu",
        "special-characters-group-latin": "Latinka",
        "special-characters-group-latinextended": "Latina rozšírené",
        "special-characters-group-persian": "Perzský",
        "special-characters-group-hebrew": "Hebrejské",
        "special-characters-group-bangla": "Bengálčina",
+       "special-characters-group-tamil": "Tamilčina",
        "special-characters-group-telugu": "Telugčina",
-       "special-characters-group-sinhala": "sinhalčina",
-       "special-characters-group-gujarati": "gudžarátčina",
+       "special-characters-group-sinhala": "Sinhalčina",
+       "special-characters-group-gujarati": "Gudžarátčina",
+       "special-characters-group-devanagari": "Dévanágarí",
        "special-characters-group-thai": "Thajské",
        "special-characters-group-lao": "Laoské",
-       "special-characters-group-khmer": "Khmer"
+       "special-characters-group-khmer": "Khmer",
+       "special-characters-title-endash": "pomlčka",
+       "special-characters-title-emdash": "dlhá pomlčka",
+       "special-characters-title-minus": "mínus"
 }
index b2b4911..60bb78a 100644 (file)
        "content-model-css": "CSS",
        "content-json-empty-object": "Prazen objekt",
        "content-json-empty-array": "Prazno polje",
+       "duplicate-args-warning": "<strong>Opozorilo:</strong> [[:$1]] kliče [[:$2]] z več kot eno vrednostjo za parameter »$3«. Uporabili bomo samo zadnjo navedeno vrednost.",
        "duplicate-args-category": "Strani s podvojenimi argumenti v klicih predlog",
        "duplicate-args-category-desc": "Stran vsebuje klice predlog, ki vsebujejo dvojnike argumentov, kot sta <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> ali <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "'''Opozorilo:''' Ta stran vsebuje preveč klicev funkcije razčlenjevalnika kode.\n\nStran naj bi vsebovala manj kot $2 {{PLURAL:$2|klic|klica|klice|klicev}}, trenutno {{PLURAL:$1|je v uporabi $1 klic|sta v uporabi $1 klica|so v uporabi $1 klici|je v uporabi $1 klicev}}.",
        "showhideselectedversions": "Prikaži/skrij izbrane redakcije",
        "editundo": "razveljavi",
        "diff-empty": "(Ni razlike)",
-       "diff-multi-sameuser": "({{PLURAL:$1|1=Vmesna redakcija|$1 vmesna redakcija|$1 vmesni redakciji|$1 vmesne redakcije|$1 vmesnih redakcij}} istega uporabnika ni prikazana)",
-       "diff-multi-otherusers": "({{PLURAL:$1|1=Vmesna redakcija|$1 vmesna redakcija|$1 vmesni redakciji|$1 vmesne redakcije|$1 vmesnih redakcij}} {{PLURAL:$2|1=drugega uporabnika|$2 uporabnikov}} ni prikazana)",
+       "diff-multi-sameuser": "({{PLURAL:$1|1=Vmesna redakcija|$1 vmesna redakcija|$1 vmesni redakciji|$1 vmesne redakcije|$1 vmesnih redakcij}} istega uporabnika {{PLURAL:$1|ni prikazana|nista prikazani|niso prikazane|ni prikazanih}})",
+       "diff-multi-otherusers": "({{PLURAL:$1|1=Vmesna redakcija|$1 vmesna redakcija|$1 vmesni redakciji|$1 vmesne redakcije|$1 vmesnih redakcij}} {{PLURAL:$2|1=drugega uporabnika|$2 uporabnikov}} {{PLURAL:$1|ni prikazana|nista prikazani|niso prikazane|ni prikazanih}})",
        "diff-multi-manyusers": "({{PLURAL:$1|$1 vmesna redakcija|$1 vmesni redakciji|$1 vmesne redakcije|$1 vmesnih redakcij}} več kot $2 {{PLURAL:$2|uporabnika|uporabnikov}} {{PLURAL:$1|ni prikazana|nista prikazani|niso prikazane|ni prikazanih}})",
        "difference-missing-revision": "{{PLURAL:$2|Ene redakcije|$2 redakcij}} razlike ($1) {{PLURAL:$2|nisem}} našel.\n\nPo navadi se to zgodi, ko sledite zastareli povezavi na razliko redakcij strani, ki jo je nekdo izbrisal.\nPodrobnosti lahko najdete v [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} dnevniku brisanja].",
        "searchresults": "Izid iskanja",
        "badsig": "Neveljaven surovi podpis; preverite oznake HTML.",
        "badsiglength": "Vaš podpis je preobsežen.\nNe sme biti daljši od $1 {{PLURAL:$1|znaka|znakov}}.",
        "yourgender": "Kako vam je ljubše, da vas opišemo?",
-       "gender-unknown": "ne želim navesti",
+       "gender-unknown": "Ko boste omenjeni, bo programje uporabilo nevtralen spol, kjer je to mogoče",
        "gender-male": "On ureja wikistrani.",
        "gender-female": "Ona ureja wikistrani.",
        "prefs-help-gender": "Nastavitev ni obvezna.\nProgramje uporablja njeno vrednost za vaše naslavljanje in omenjanje v ustreznem slovničnem spolu.\nPodatek bo javno prikazan.",
        "uploaddisabledtext": "Nalaganje datotek je onemogočeno.",
        "php-uploaddisabledtext": "Nalaganje datotek je onemogočeno v PHP.\nProsimo preverite file_uploads nastavitev.",
        "uploadscripted": "Datoteka vsebuje HTML- ali skriptno kodo, ki bi jo lahko brskalnik razlagal napačno.",
+       "upload-scripted-pi-callback": "Ne moremo naložiti datoteke, ki vsebuje navodila za slogovno obdelavo XML.",
+       "uploaded-script-svg": "V naloženi datoteki SVG smo našli skriptni element »$1«.",
+       "uploaded-hostile-svg": "V slogovnem elementu naložene datoteke SVG smo našli nevaren CSS.",
+       "uploaded-event-handler-on-svg": "Določevanje atributov za dogodke <code>$1=\"$2\"</code> v datotekah SVG ni dovoljeno.",
+       "uploaded-href-attribute-svg": "Atributi href <code>&lt;$1 $2=\"$3\"&gt;</code> z nelokalnimi cilji (npr. http://, javascript: idr.) v datotekah SVG niso dovoljeni.",
+       "uploaded-href-unsafe-target-svg": "V naloženi datoteki SVG smo našli href z nevarnim ciljem <code>&lt;$1 $2=\"$3\"&gt;</code>.",
+       "uploaded-animate-svg": "V naloženi datoteki SVG smo našli oznako »animate«, ki lahko spreminja href z uporabo atributa »from« <code>&lt;$1 $2=\"$3\"&gt;</code>.",
+       "uploaded-setting-event-handler-svg": "Določevanje atributov za dogodke je blokirano; v naloženi datoteki SVG smo našli <code>&lt;$1 $2=\"$3\"&gt;</code>.",
+       "uploaded-setting-href-svg": "Uporaba oznake »set« za določevanje atributa »href« starševskega elementa je blokirano.",
+       "uploaded-wrong-setting-svg": "Uporaba oznake »set« za dodajanje oddaljenega/podatkovnega/skriptnega cilja kateremu koli atributu je blokirano. V naloženi datoteki SVG smo našli <code>&lt;set to=\"$1\"&gt;</code>.",
+       "uploaded-setting-handler-svg": "SVG, ki nastavi atribut »handler« z oddaljenim/podatkovnim/skriptom ciljem, je blokiran. V naloženi datoteki SVG smo našli <code>$1=\"$2\"</code>.",
+       "uploaded-remote-url-svg": "SVG, ki določi kateri koli slogovni atribut z oddaljenim URL-jem, je blokiran. V naloženi datoteki SVG smo našli <code>$1=\"$2\"</code>.",
+       "uploaded-image-filter-svg": "V naloženi datoteki SVG smo našli slikovni filter z URL-jem: <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploadscriptednamespace": "Datoteka SVG vsebuje nedovoljen imenski prostor »$1«",
        "uploadinvalidxml": "XML v naloženi datoteki ne moremo razčleniti.",
        "uploadvirus": "Datoteka vsebuje virus!\nPodrobnosti: $1",
index 877c32c..b94f561 100644 (file)
        "currentrev": "Текућа измена",
        "currentrev-asof": "Текућа измена од $2 у $3",
        "revisionasof": "Измена од $2 у $3",
-       "revision-info": "Измена од $1; {{GENDER:$6|$2}}$7",
+       "revision-info": "Измена од $1 коју је {{GENDER:$6|уредио $2|уредила $2}}$7",
        "previousrevision": "← Старија измена",
        "nextrevision": "Новија измена →",
        "currentrevisionlink": "Текућа измена",
index 6c1ba97..42fc130 100644 (file)
        "currentrev": "Tekuća izmena",
        "currentrev-asof": "Tekuća izmena od $2 u $3",
        "revisionasof": "Izmena od $2 u $3",
-       "revision-info": "Izmena od $1; {{GENDER:$6|$2}}$7",
+       "revision-info": "Izmena od $1 koju je {{GENDER:$6|uredio $2|uredila $2}}$7",
        "previousrevision": "← Starija izmena",
        "nextrevision": "Novija izmena →",
        "currentrevisionlink": "Tekuća izmena",
index 6a32a73..ecb2e46 100644 (file)
@@ -10,7 +10,8 @@
                        "Sociologist",
                        "Xexdof",
                        "Arystanbek",
-                       "6ahodir"
+                       "6ahodir",
+                       "Таржимон"
                ]
        },
        "tog-underline": "Havolalarning tagiga chizish:",
index 9fd1173..d1699a3 100644 (file)
        "badsig": "错误的原始签名。请检查HTML标签。",
        "badsiglength": "签名过长。请不超过$1个字符。",
        "yourgender": "您希望使用什么性别称呼?",
-       "gender-unknown": "我不愿意指明",
+       "gender-unknown": "当提及您时,软件将使用性别中性的词汇(只要可能)",
        "gender-male": "他",
        "gender-female": "她",
        "prefs-help-gender": "该设置为可选项。软件根据该值在称呼您及对他人提及您时使用适当的语法性别。该信息会被公开。",
index 46d0f16..39f7b1e 100644 (file)
        "uploaddisabledtext": "已停用檔案上傳。",
        "php-uploaddisabledtext": "PHP 已停用檔案上傳。\n請檢查 file_uploads 設定。",
        "uploadscripted": "此檔案包含可能會被網頁瀏覽器錯誤執行的 HTML 或 Script。",
-       "upload-scripted-pi-callback": "無法上傳包含 xml-stylesheet 處理命令的檔案。",
+       "upload-scripted-pi-callback": "無法上傳包含 XML-stylesheet 處理命令的檔案。",
        "uploaded-script-svg": "於已上傳的 SVG 檔案中找到可程式的腳本標籤 \"$1\"。",
        "uploaded-hostile-svg": "於已上傳的 SVG 檔案的樣式標籤中找到不安全的 CSS。",
        "uploaded-event-handler-on-svg": "不允許在 SVG 檔案設定 event-handler 屬性 <code>$1=\"$2\"</code>。",
-       "uploaded-href-attribute-svg": "不允許在 SVG 檔案中的 Href 屬性 <code>&lt;$1 $2=\"$3\"&gt;</code> 使用非本地的目標  (例如 http://, javascript:, 等)。",
+       "uploaded-href-attribute-svg": "不允許在 SVG 檔案中的 href 屬性 <code>&lt;$1 $2=\"$3\"&gt;</code> 使用非本地的目標  (例如 http://, javascript:, 等)。",
        "uploaded-href-unsafe-target-svg": "於已上傳的 SVG 檔案中找到 href 連結至不安全的目標 <code>&lt;$1 $2=\"$3\"&gt;</code>。",
        "uploaded-animate-svg": "於已上傳的 SVG 檔案中找到 \"animate\" 標籤可能會使用 \"from\" 屬性 <code>&lt;$1 $2=\"$3\"&gt;</code> 更改 href。",
        "uploaded-setting-event-handler-svg": "於已上傳的 SVG 檔案中找到 <code>&lt;$1 $2=\"$3\"&gt;</code>,已禁止設定 event-handler 屬性。",
index 9f86bd6..4591312 100644 (file)
@@ -8,4 +8,4 @@
  *
  */
 
-$fallback = 'aeb-arab';
\ No newline at end of file
+$fallback = 'aeb-arab';
index 1043496..8f0088e 100644 (file)
@@ -10,4 +10,4 @@
 
 $fallback = 'ar';
 
-$rtl = true;
\ No newline at end of file
+$rtl = true;
index d684ed5..4adf154 100644 (file)
@@ -8,4 +8,4 @@
  *
  */
 
-$fallback = 'gom-deva';
\ No newline at end of file
+$fallback = 'gom-deva';
index 58fc505..b5cc343 100644 (file)
@@ -28,4 +28,4 @@ $namespaceNames = array(
        NS_HELP_TALK        => 'मजत_चर्चा',
        NS_CATEGORY         => 'श्रेणी',
        NS_CATEGORY_TALK    => 'श्रेणी_चर्चा',
-);
\ No newline at end of file
+);
index 0ca2a49..b0a4ca7 100644 (file)
@@ -48,8 +48,6 @@ $datePreferences = array(
 
 $defaultDateFormat = 'pnt';
 
-
-
 $dateFormats = array(
        'pnt time' => 'H:i',
        'pnt date' => 'j xg Y',
index 0b77578..4772071 100644 (file)
@@ -60,4 +60,4 @@ class CheckComposerLockUpToDate extends Maintenance {
 }
 
 $maintClass = 'CheckComposerLockUpToDate';
-require_once RUN_MAINTENANCE_IF_MAIN;
\ No newline at end of file
+require_once RUN_MAINTENANCE_IF_MAIN;
index 8adae2d..b7fe80b 100644 (file)
@@ -56,7 +56,8 @@ class ConvertExtensionToRegistration extends Maintenance {
        public function __construct() {
                parent::__construct();
                $this->mDescription = 'Converts extension entry points to the new JSON registration format';
-               $this->addArg( 'path', 'Location to the PHP entry point you wish to convert', /* $required = */ true );
+               $this->addArg( 'path', 'Location to the PHP entry point you wish to convert',
+                       /* $required = */ true );
                $this->addOption( 'skin', 'Whether to write to skin.json', false, false );
        }
 
@@ -95,7 +96,8 @@ class ConvertExtensionToRegistration extends Maintenance {
                        }
 
                        if ( isset( $this->custom[$realName] ) ) {
-                               call_user_func_array( array( $this, $this->custom[$realName] ), array( $realName, $value, $vars ) );
+                               call_user_func_array( array( $this, $this->custom[$realName] ),
+                                       array( $realName, $value, $vars ) );
                        } elseif ( in_array( $realName, $globalSettings ) ) {
                                $this->json[$realName] = $value;
                        } elseif ( array_key_exists( $realName, $this->noLongerSupportedGlobals ) ) {
@@ -133,7 +135,9 @@ class ConvertExtensionToRegistration extends Maintenance {
        protected function handleExtensionFunctions( $realName, $value ) {
                foreach ( $value as $func ) {
                        if ( $func instanceof Closure ) {
-                               $this->error( "Error: Closures cannot be converted to JSON. Please move your extension function somewhere else.", 1 );
+                               $this->error( "Error: Closures cannot be converted to JSON. " .
+                                       "Please move your extension function somewhere else.", 1
+                               );
                        }
                }
 
@@ -182,7 +186,7 @@ class ConvertExtensionToRegistration extends Maintenance {
                $this->json[$realName] = $out;
        }
 
-       protected function handleCredits( $realName, $value) {
+       protected function handleCredits( $realName, $value ) {
                $keys = array_keys( $value );
                $this->json['type'] = $keys[0];
                $values = array_values( $value );
@@ -197,7 +201,9 @@ class ConvertExtensionToRegistration extends Maintenance {
                foreach ( $value as $hookName => $handlers ) {
                        foreach ( $handlers as $func ) {
                                if ( $func instanceof Closure ) {
-                                       $this->error( "Error: Closures cannot be converted to JSON. Please move the handler for $hookName somewhere else.", 1 );
+                                       $this->error( "Error: Closures cannot be converted to JSON. " .
+                                               "Please move the handler for $hookName somewhere else.", 1
+                                       );
                                }
                        }
                }
@@ -229,7 +235,6 @@ class ConvertExtensionToRegistration extends Maintenance {
                                }
                        }
 
-
                        $this->json[$realName][$name] = $data;
                }
                if ( $defaults ) {
index 1c71dc0..145c924 100644 (file)
@@ -17,7 +17,9 @@ class ExportSites extends Maintenance {
        public function __construct() {
                $this->mDescription = 'Exports site definitions the sites table to XML file';
 
-               $this->addArg( 'file', 'A file to write the XML to (see docs/sitelist.txt). Use "php://stdout" to write to stdout.', true );
+               $this->addArg( 'file', 'A file to write the XML to (see docs/sitelist.txt). ' .
+                       'Use "php://stdout" to write to stdout.', true
+               );
 
                parent::__construct();
        }
@@ -34,7 +36,7 @@ class ExportSites extends Maintenance {
 
                $handle = fopen( $file, 'w' );
 
-               if ( !$handle )  {
+               if ( !$handle ) {
                        $this->error( "Failed to open $file for writing.\n", 1 );
                }
 
@@ -51,4 +53,4 @@ class ExportSites extends Maintenance {
 }
 
 $maintClass = 'ExportSites';
-require_once( RUN_MAINTENANCE_IF_MAIN );
+require_once RUN_MAINTENANCE_IF_MAIN;
index 7abb8d7..7cd2000 100644 (file)
@@ -17,7 +17,9 @@ class ImportSites extends Maintenance {
        public function __construct() {
                $this->mDescription = 'Imports site definitions from XML into the sites table.';
 
-               $this->addArg( 'file', 'An XML file containing site definitions (see docs/sitelist.txt). Use "php://stdin" to read from stdin.', true );
+               $this->addArg( 'file', 'An XML file containing site definitions (see docs/sitelist.txt). ' .
+                       'Use "php://stdin" to read from stdin.', true
+               );
 
                parent::__construct();
        }
@@ -49,4 +51,4 @@ class ImportSites extends Maintenance {
 }
 
 $maintClass = 'ImportSites';
-require_once( RUN_MAINTENANCE_IF_MAIN );
+require_once RUN_MAINTENANCE_IF_MAIN;
index 7e73e64..96c05a1 100644 (file)
@@ -23,6 +23,7 @@
                                "classes": [
                                        "mw.Title",
                                        "mw.Uri",
+                                       "mw.RegExp",
                                        "mw.messagePoster.*",
                                        "mw.notification",
                                        "mw.Notification_",
index 08af11a..9cf7b2b 100644 (file)
@@ -18,7 +18,7 @@ class ValidateRegistrationFile extends Maintenance {
                        $this->error( "$path is not a valid JSON file.", 1 );
                }
                if ( !isset( $data->manifest_version ) ) {
-                       $this->output("Warning: No manifest_version set, assuming 1.\n" );
+                       $this->output( "Warning: No manifest_version set, assuming 1.\n" );
                        // For backwards-compatability assume 1
                        $data->manifest_version = 1;
                }
@@ -39,7 +39,7 @@ class ValidateRegistrationFile extends Maintenance {
                                . ExtensionRegistry::MANIFEST_VERSION . "\n" );
                }
                $retriever = new JsonSchema\Uri\UriRetriever();
-               $schema = $retriever->retrieve('file://' . $schemaPath );
+               $schema = $retriever->retrieve( 'file://' . $schemaPath );
 
                $validator = new JsonSchema\Validator();
                $validator->check( $data, $schema );
index 7c2a9df..d75c8a1 100644 (file)
@@ -148,7 +148,7 @@ return array(
                'scripts' => 'resources/src/jquery/jquery.accessKeyLabel.js',
                'dependencies' => array(
                        'jquery.client',
-                       'jquery.mwExtension',
+                       'mediawiki.RegExp',
                ),
                'messages' => array( 'brackets', 'word-separator' ),
                'targets' => array( 'mobile', 'desktop' ),
@@ -247,7 +247,7 @@ return array(
        ),
        'jquery.highlightText' => array(
                'scripts' => 'resources/src/jquery/jquery.highlightText.js',
-               'dependencies' => 'jquery.mwExtension',
+               'dependencies' => 'mediawiki.RegExp',
                'targets' => array( 'desktop', 'mobile' ),
        ),
        'jquery.hoverIntent' => array(
@@ -309,7 +309,7 @@ return array(
                'styles' => 'resources/src/jquery/jquery.tablesorter.css',
                'messages' => array( 'sort-descending', 'sort-ascending' ),
                'dependencies' => array(
-                       'jquery.mwExtension',
+                       'mediawiki.RegExp',
                        'mediawiki.language.months',
                ),
        ),
@@ -820,7 +820,10 @@ return array(
        ),
        'mediawiki.api' => array(
                'scripts' => 'resources/src/mediawiki.api/mediawiki.api.js',
-               'dependencies' => 'mediawiki.util',
+               'dependencies' => array(
+                       'mediawiki.util',
+                       'user.tokens',
+               ),
                'targets' => array( 'desktop', 'mobile' ),
        ),
        'mediawiki.api.category' => array(
@@ -835,7 +838,6 @@ return array(
                'dependencies' => array(
                        'mediawiki.api',
                        'mediawiki.Title',
-                       'user.tokens',
                ),
                'targets' => array( 'desktop', 'mobile' ),
        ),
@@ -856,7 +858,6 @@ return array(
                'scripts' => 'resources/src/mediawiki.api/mediawiki.api.watch.js',
                'dependencies' => array(
                        'mediawiki.api',
-                       'user.tokens',
                ),
        ),
        'mediawiki.content.json' => array(
@@ -953,7 +954,7 @@ return array(
        'mediawiki.htmlform' => array(
                'scripts' => 'resources/src/mediawiki/mediawiki.htmlform.js',
                'dependencies' => array(
-                       'jquery.mwExtension',
+                       'mediawiki.RegExp',
                        'jquery.byteLimit',
                ),
                'messages' => array(
@@ -977,6 +978,7 @@ return array(
                'scripts' => 'resources/src/mediawiki/mediawiki.inspect.js',
                'dependencies' => array(
                        'jquery.byteLength',
+                       'mediawiki.RegExp',
                        'json',
                ),
                'targets' => array( 'desktop', 'mobile' ),
@@ -1019,6 +1021,10 @@ return array(
                'scripts' => 'resources/src/mediawiki/mediawiki.notify.js',
                'targets' => array( 'desktop', 'mobile' ),
        ),
+       'mediawiki.RegExp' => array(
+               'scripts' => 'resources/src/mediawiki/mediawiki.RegExp.js',
+               'targets' => array( 'desktop', 'mobile' ),
+       ),
        'mediawiki.pager.tablePager' => array(
                'styles' => 'resources/src/mediawiki/mediawiki.pager.tablePager.less',
                'position' => 'top',
@@ -1084,7 +1090,7 @@ return array(
                'scripts' => 'resources/src/mediawiki/mediawiki.util.js',
                'dependencies' => array(
                        'jquery.accessKeyLabel',
-                       'jquery.mwExtension',
+                       'mediawiki.RegExp',
                        'mediawiki.notify',
                ),
                'position' => 'top', // For $wgPreloadJavaScriptMwUtil
@@ -1376,7 +1382,7 @@ return array(
                        'mediawiki.page.startup',
                        'mediawiki.util',
                        'jquery.accessKeyLabel',
-                       'jquery.mwExtension',
+                       'mediawiki.RegExp',
                ),
                'messages' => array(
                        'watch',
index 37203fb..8320b37 100644 (file)
@@ -112,10 +112,13 @@ return call_user_func( function () {
 
                if ( substr( $name, 0, 5 ) === 'icons' ) {
                        $module['selectorWithoutVariant'] = '.oo-ui-icon-{name}, .mw-ui-icon-{name}:before';
-                       $module['selectorWithVariant'] = '.oo-ui-image-{variant} .oo-ui-icon-{name}, .oo-ui-image-{variant}.oo-ui-icon-{name}, .mw-ui-icon-{name}-{variant}:before, .mw-ui-hovericon:hover .mw-ui-icon-{name}-{variant}-hover:before, .mw-ui-hovericon.mw-ui-icon-{name}-{variant}-hover:hover:before';
+                       $module['selectorWithVariant'] = '.oo-ui-image-{variant} .oo-ui-icon-{name}, 
+                               .oo-ui-image-{variant}.oo-ui-icon-{name}, .mw-ui-icon-{name}-{variant}:before,
+                               .mw-ui-hovericon:hover .mw-ui-icon-{name}-{variant}-hover:before,
+                               .mw-ui-hovericon.mw-ui-icon-{name}-{variant}-hover:hover:before';
                }
 
-               $modules[ "oojs-ui.styles.$name" ] = $module;
+               $modules["oojs-ui.styles.$name"] = $module;
        }
 
        return $modules;
index 058a149..493920d 100644 (file)
@@ -10,7 +10,8 @@
                        "زكريا",
                        "مشعل الحربي",
                        "ترجمان05",
-                       "Abanima"
+                       "Abanima",
+                       "محمد أحمد عبد الفتاح"
                ]
        },
        "ooui-outline-control-move-down": "انقل العنصر للأسفل",
@@ -24,5 +25,7 @@
        "ooui-dialog-process-error": "حدث خطأ",
        "ooui-dialog-process-dismiss": "أغلق",
        "ooui-dialog-process-retry": "حاول مرة أخرى",
-       "ooui-dialog-process-continue": "استمر"
+       "ooui-dialog-process-continue": "استمر",
+       "ooui-selectfile-not-supported": "تحديد الملفات غير مدعوم",
+       "ooui-selectfile-placeholder": "لم يختر أي ملف"
 }
index d50e62d..f0fae3c 100644 (file)
@@ -19,5 +19,6 @@
        "ooui-dialog-message-reject": "Mégse",
        "ooui-dialog-process-dismiss": "Elrejt",
        "ooui-dialog-process-retry": "Próbáld újra",
-       "ooui-dialog-process-continue": "Folytatás"
+       "ooui-dialog-process-continue": "Folytatás",
+       "ooui-selectfile-placeholder": "Nincs fájl kiválasztva"
 }
index 0ff8af8..387d736 100644 (file)
@@ -12,7 +12,8 @@
                        "Minerva Titani",
                        "Raoli",
                        "Una giornata uggiosa '94",
-                       "Ontsed"
+                       "Ontsed",
+                       "Alexmar983"
                ]
        },
        "ooui-outline-control-move-down": "Sposta in basso",
@@ -26,5 +27,7 @@
        "ooui-dialog-process-error": "Qualcosa è andato storto",
        "ooui-dialog-process-dismiss": "Nascondi",
        "ooui-dialog-process-retry": "Riprova",
-       "ooui-dialog-process-continue": "Continua"
+       "ooui-dialog-process-continue": "Continua",
+       "ooui-selectfile-not-supported": "La selezione del file non è supportata",
+       "ooui-selectfile-placeholder": "Nessun file è selezionato"
 }
index ef92e49..bc3cf0b 100644 (file)
@@ -15,5 +15,8 @@
        "ooui-dialog-process-error": "Не эсе да табсыз кетди",
        "ooui-dialog-process-dismiss": "Джаб",
        "ooui-dialog-process-retry": "Энтда сынаб кёр",
-       "ooui-dialog-process-continue": "Бардыр"
+       "ooui-dialog-process-continue": "Бардыр",
+       "ooui-selectfile-not-supported": "Файл сайлау тутулмайды",
+       "ooui-selectfile-placeholder": "Бир файл да сайланмагъанды",
+       "ooui-semicolon-separator": ";"
 }
index 7c7b176..8eba859 100644 (file)
@@ -31,5 +31,6 @@
        "ooui-dialog-process-error": "Er is iets misgegaan",
        "ooui-dialog-process-dismiss": "Sluiten",
        "ooui-dialog-process-retry": "Opnieuw proberen",
-       "ooui-dialog-process-continue": "Doorgaan"
+       "ooui-dialog-process-continue": "Doorgaan",
+       "ooui-selectfile-placeholder": "Er is geen bestand geselecteerd"
 }
index 3fd8d36..3f59200 100644 (file)
@@ -14,7 +14,8 @@
                        "Spring Roll Conan",
                        "Waihorace",
                        "Cwlin0416",
-                       "LNDDYL"
+                       "LNDDYL",
+                       "Shangkuanlc"
                ]
        },
        "ooui-outline-control-move-down": "項目下移",
@@ -28,5 +29,7 @@
        "ooui-dialog-process-error": "發生不明錯誤",
        "ooui-dialog-process-dismiss": "關閉",
        "ooui-dialog-process-retry": "再試一次",
-       "ooui-dialog-process-continue": "繼續"
+       "ooui-dialog-process-continue": "繼續",
+       "ooui-selectfile-not-supported": "無法支援所選擇的檔案",
+       "ooui-selectfile-placeholder": "沒有選擇檔案"
 }
index 13e9d27..34991fd 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.11.4
+ * OOjs UI v0.11.5
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2015 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2015-06-09T22:03:21Z
+ * Date: 2015-06-17T00:59:03Z
  */
 @-webkit-keyframes oo-ui-progressBarWidget-slide {
        from {
 .oo-ui-buttonElement-frameless.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
        margin-left: 0.25em;
 }
+.oo-ui-buttonElement-frameless > input.oo-ui-buttonElement-button {
+       padding-left: 0.25em;
+       color: #333333;
+}
+.oo-ui-buttonElement-frameless > input.oo-ui-buttonElement-button:hover,
+.oo-ui-buttonElement-frameless > input.oo-ui-buttonElement-button:focus {
+       color: #000000;
+}
 .oo-ui-buttonElement-frameless.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
        color: #087ecc;
 }
 .oo-ui-fieldLayout > .oo-ui-popupButtonWidget:last-child {
        margin-right: 0;
 }
-.oo-ui-fieldLayout-disabled .oo-ui-labelElement-label {
+.oo-ui-fieldLayout-disabled > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label {
        color: #cccccc;
 }
 .oo-ui-actionFieldLayout-input,
        display: inline-block;
        vertical-align: middle;
 }
+.oo-ui-buttonInputWidget > button,
+.oo-ui-buttonInputWidget > input {
+       border: 0;
+       padding: 0;
+       background-color: transparent;
+}
 .oo-ui-dropdownInputWidget {
        position: relative;
        vertical-align: middle;
index 9bdac7b..e19c127 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.11.4
+ * OOjs UI v0.11.5
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2015 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2015-06-09T22:03:14Z
+ * Date: 2015-06-17T00:58:56Z
  */
 /**
  * @class
index 72cc1e3..76aeeac 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.11.4
+ * OOjs UI v0.11.5
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2015 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2015-06-09T22:03:21Z
+ * Date: 2015-06-17T00:59:03Z
  */
 @-webkit-keyframes oo-ui-progressBarWidget-slide {
        from {
        margin-left: 0.25em;
        margin-right: 0.25em;
 }
+.oo-ui-buttonElement-frameless > input.oo-ui-buttonElement-button {
+       padding-left: 0.25em;
+       padding-right: 0.25em;
+       color: #333333;
+}
+.oo-ui-buttonElement-frameless.oo-ui-widget-enabled > input.oo-ui-buttonElement-button,
 .oo-ui-buttonElement-frameless.oo-ui-widget-enabled > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
        color: #555555;
 }
+.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > input.oo-ui-buttonElement-button,
 .oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
        color: #444444;
 }
 .oo-ui-fieldLayout > .oo-ui-popupButtonWidget:last-child {
        margin-right: 0;
 }
-.oo-ui-fieldLayout-disabled .oo-ui-labelElement-label {
+.oo-ui-fieldLayout-disabled > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label {
        color: #cccccc;
 }
 .oo-ui-actionFieldLayout-input,
        display: inline-block;
        vertical-align: middle;
 }
+.oo-ui-buttonInputWidget > button,
+.oo-ui-buttonInputWidget > input {
+       border: 0;
+       padding: 0;
+       background-color: transparent;
+}
 .oo-ui-checkboxInputWidget {
        position: relative;
        line-height: 1.6em;
index db175a5..bb4e8a9 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.11.4
+ * OOjs UI v0.11.5
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2015 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2015-06-09T22:03:14Z
+ * Date: 2015-06-17T00:58:56Z
  */
 /**
  * @class
index e824a8f..b4bb365 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.11.4
+ * OOjs UI v0.11.5
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2015 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2015-06-09T22:03:14Z
+ * Date: 2015-06-17T00:58:56Z
  */
 ( function ( OO ) {
 
@@ -13724,7 +13724,6 @@ OO.ui.RadioSelectInputWidget = function OoUiRadioSelectInputWidget( config ) {
        this.setOptions( config.options || [] );
        this.$element
                .addClass( 'oo-ui-radioSelectInputWidget' )
-               .empty()
                .append( this.radioSelectWidget.$element );
 };
 
@@ -14477,6 +14476,14 @@ OO.ui.ComboBoxWidget.prototype.getMenu = function () {
        return this.menu;
 };
 
+/**
+ * Get the combobox's text input widget.
+ * @return {OO.ui.TextInputWidget} Text input widget
+ */
+OO.ui.ComboBoxWidget.prototype.getInput = function () {
+       return this.input;
+};
+
 /**
  * Handle input change events.
  *
@@ -16894,8 +16901,10 @@ OO.mixinClass( OO.ui.RadioSelectWidget, OO.ui.mixin.TabIndexedElement );
  * @cfg {OO.ui.TextInputWidget} [input] Text input used to implement option highlighting for menu items that match
  *  the text the user types. This config is used by {@link OO.ui.ComboBoxWidget ComboBoxWidget}
  *  and {@link OO.ui.mixin.LookupElement LookupElement}
- * @cfg {OO.ui.Widget} [widget] Widget associated with the menu’s active state. If the user clicks the mouse
- *  anywhere on the page outside of this widget, the menu is hidden.
+ * @cfg {OO.ui.Widget} [widget] Widget associated with the menu's active state. If the user clicks the mouse
+ *  anywhere on the page outside of this widget, the menu is hidden. For example, if there is a button
+ *  that toggles the menu's visibility on click, the menu will be hidden then re-shown when the user clicks
+ *  that button, unless the button (or its parent widget) is passed in here.
  * @cfg {boolean} [autoHide=true] Hide the menu when the mouse is pressed outside the menu.
  */
 OO.ui.MenuSelectWidget = function OoUiMenuSelectWidget( config ) {
index 1f12f2a..d4be285 100644 (file)
                        "ltr": "images/icons/lock-ltr.svg",
                        "rtl": "images/icons/lock-rtl.svg"
                }, "variants": [ "destructive" ] },
+               "ongoingConversation": { "file": {
+                       "ltr": "images/icons/ongoingConversation-ltr.svg",
+                       "rtl": "images/icons/ongoingConversation-rtl.svg"
+               } },
                "star": { "file": "images/icons/star.svg" },
                "trash": { "file": "images/icons/trash.svg" },
                "trashUndo": { "file": {
index d385eb1..a311de0 100644 (file)
@@ -25,7 +25,7 @@
                "advanced": { "file": "images/icons/advanced.svg" },
                "alert": { "file": "images/icons/alert.svg", "variants": [ "warning" ] },
                "cancel": { "file": "images/icons/cancel.svg" },
-               "check": { "file": "images/icons/check.svg", "variants": [ "constructive", "progressive" ] },
+               "check": { "file": "images/icons/check.svg", "variants": [ "constructive", "progressive", "destructive" ] },
                "circle": { "file": "images/icons/circle.svg", "variants": [ "constructive" ] },
                "close": { "file": {
                        "ltr": "images/icons/close-ltr.svg",
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-destructive.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-destructive.png
new file mode 100644 (file)
index 0000000..9577504
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-destructive.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-destructive.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-destructive.svg
new file mode 100644 (file)
index 0000000..7e09e65
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #D11D13 }</style>
+    <g id="check">
+        <path d="M17 7.5L9.5 15 6 11.5 4.5 13l5 5L20 7.5c-.706-.706-2.294-.706-3 0z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-ltr-invert.png
new file mode 100644 (file)
index 0000000..5db6cf8
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-ltr-invert.svg
new file mode 100644 (file)
index 0000000..5385f32
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg width="24" height="24" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><style>* { fill: #FFFFFF }</style>
+    <g id="ongoing-conversation" fill-rule="evenodd">
+        <path d="M17.8 18.6H2.5l2.7-2.7V6h15.3v9.9c0 1.53-1.17 2.7-2.7 2.7zm-7.542-4.95c0 .405-.135.675-.405.945-.27.27-.607.405-.945.405-.405 0-.675-.135-.945-.405-.27-.27-.405-.607-.405-.945 0-.338.135-.675.405-.945.27-.27.608-.405.945-.405.338 0 .675.135.945.405.27.27.405.607.405.945zm4.05 0c0 .405-.135.675-.405.945-.27.27-.607.405-.945.405-.405 0-.675-.135-.945-.405-.27-.27-.405-.607-.405-.945 0-.338.135-.675.405-.945.27-.27.608-.405.945-.405.338 0 .675.135.945.405.27.27.405.607.405.945zm4.05 0c0 .405-.135.675-.405.945-.27.27-.607.405-.945.405-.405 0-.675-.135-.945-.405-.27-.27-.405-.607-.405-.945 0-.338.135-.675.405-.945.27-.27.608-.405.945-.405.338 0 .675.135.945.405.27.27.405.607.405.945z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-ltr.png
new file mode 100644 (file)
index 0000000..eff32eb
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-ltr.svg
new file mode 100644 (file)
index 0000000..5d4b3ac
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg width="24" height="24" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
+    <g id="ongoing-conversation" fill-rule="evenodd">
+        <path d="M17.8 18.6H2.5l2.7-2.7V6h15.3v9.9c0 1.53-1.17 2.7-2.7 2.7zm-7.542-4.95c0 .405-.135.675-.405.945-.27.27-.607.405-.945.405-.405 0-.675-.135-.945-.405-.27-.27-.405-.607-.405-.945 0-.338.135-.675.405-.945.27-.27.608-.405.945-.405.338 0 .675.135.945.405.27.27.405.607.405.945zm4.05 0c0 .405-.135.675-.405.945-.27.27-.607.405-.945.405-.405 0-.675-.135-.945-.405-.27-.27-.405-.607-.405-.945 0-.338.135-.675.405-.945.27-.27.608-.405.945-.405.338 0 .675.135.945.405.27.27.405.607.405.945zm4.05 0c0 .405-.135.675-.405.945-.27.27-.607.405-.945.405-.405 0-.675-.135-.945-.405-.27-.27-.405-.607-.405-.945 0-.338.135-.675.405-.945.27-.27.608-.405.945-.405.338 0 .675.135.945.405.27.27.405.607.405.945z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-rtl-invert.png
new file mode 100644 (file)
index 0000000..dd93100
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-rtl-invert.svg
new file mode 100644 (file)
index 0000000..451f247
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg width="24" height="24" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><style>* { fill: #FFFFFF }</style>
+    <g id="ongoing-conversation" fill-rule="evenodd">
+        <path d="M5.2 18.6h15.3l-2.7-2.7V6H2.5v9.9c0 1.53 1.17 2.7 2.7 2.7zm7.542-4.95c0 .405.135.675.405.945.27.27.607.405.945.405.405 0 .675-.135.945-.405.27-.27.405-.607.405-.945 0-.337-.135-.675-.405-.945-.27-.27-.608-.405-.945-.405-.338 0-.675.135-.945.405-.27.27-.405.607-.405.945zm-4.05 0c0 .405.135.675.405.945.27.27.608.405.945.405.405 0 .675-.135.945-.405.27-.27.405-.607.405-.945 0-.337-.135-.675-.405-.945-.27-.27-.608-.405-.945-.405-.338 0-.675.135-.945.405-.27.27-.405.608-.405.945zm-4.05 0c0 .405.135.675.405.945.27.27.608.405.945.405.405 0 .675-.135.945-.405.27-.27.405-.607.405-.945 0-.337-.135-.675-.405-.945-.27-.27-.607-.405-.945-.405-.337 0-.675.135-.945.405-.27.27-.405.608-.405.945z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-rtl.png
new file mode 100644 (file)
index 0000000..9a22767
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/ongoingConversation-rtl.svg
new file mode 100644 (file)
index 0000000..9e5b7f6
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg width="24" height="24" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
+    <g id="ongoing-conversation" fill-rule="evenodd">
+        <path d="M5.2 18.6h15.3l-2.7-2.7V6H2.5v9.9c0 1.53 1.17 2.7 2.7 2.7zm7.542-4.95c0 .405.135.675.405.945.27.27.607.405.945.405.405 0 .675-.135.945-.405.27-.27.405-.607.405-.945 0-.337-.135-.675-.405-.945-.27-.27-.608-.405-.945-.405-.338 0-.675.135-.945.405-.27.27-.405.607-.405.945zm-4.05 0c0 .405.135.675.405.945.27.27.608.405.945.405.405 0 .675-.135.945-.405.27-.27.405-.607.405-.945 0-.337-.135-.675-.405-.945-.27-.27-.608-.405-.945-.405-.338 0-.675.135-.945.405-.27.27-.405.608-.405.945zm-4.05 0c0 .405.135.675.405.945.27.27.608.405.945.405.405 0 .675-.135.945-.405.27-.27.405-.607.405-.945 0-.337-.135-.675-.405-.945-.27-.27-.607-.405-.945-.405-.337 0-.675.135-.945.405-.27.27-.405.608-.405.945z"/>
+    </g>
+</svg>
index 867c25e..1ac34a5 100644 (file)
@@ -112,7 +112,7 @@ function getAccessKeyLabel( element ) {
  */
 function updateTooltipOnElement( element, titleElement ) {
        var array = ( mw.msg( 'word-separator' ) + mw.msg( 'brackets' ) ).split( '$1' ),
-               regexp = new RegExp( $.map( array, $.escapeRE ).join( '.*?' ) + '$' ),
+               regexp = new RegExp( $.map( array, mw.RegExp.escape ).join( '.*?' ) + '$' ),
                oldTitle = titleElement.title,
                rawTitle = oldTitle.replace( regexp, '' ),
                newTitle = rawTitle,
index 1338218..8deb669 100644 (file)
@@ -3,7 +3,7 @@
  * TODO: Add a function for restoring the previous text.
  * TODO: Accept mappings for converting shortcuts like WP: to Wikipedia:.
  */
-( function ( $ ) {
+( function ( $, mw ) {
 
        $.highlightText = {
 
@@ -29,7 +29,7 @@
                                // non latin characters can make regex think a new word has begun: do not use \b
                                // http://stackoverflow.com/questions/3787072/regex-wordwrap-with-utf8-characters-in-js
                                // look for an occurrence of our pattern and store the starting position
-                               match = node.data.match( new RegExp( '(^|\\s)' + $.escapeRE( pat ), 'i' ) );
+                               match = node.data.match( new RegExp( '(^|\\s)' + mw.RegExp.escape( pat ), 'i' ) );
                                if ( match ) {
                                        pos = match.index + match[1].length; // include length of any matched spaces
                                        // create the span wrapper for the matched text
@@ -70,4 +70,4 @@
                } );
        };
 
-}( jQuery ) );
+}( jQuery, mediaWiki ) );
index e6e33ad..5484212 100644 (file)
@@ -1,9 +1,11 @@
 /*
  * JavaScript backwards-compatibility alternatives and other convenience functions
+ *
+ * @deprecated since 1.26 Dated collection of miscellaneous utilities. Methods are
+ *  either trivially inline, obsolete, or have a better place elsewhere.
  */
-( function ( $ ) {
-
-       $.extend( {
+( function ( $, mw ) {
+       $.each( {
                trimLeft: function ( str ) {
                        return str === null ? '' : str.toString().replace( /^\s+/, '' );
                },
@@ -14,9 +16,6 @@
                ucFirst: function ( str ) {
                        return str.charAt( 0 ).toUpperCase() + str.slice( 1 );
                },
-               escapeRE: function ( str ) {
-                       return str.replace( /([\\{}()|.?*+\-\^$\[\]])/g, '\\$1' );
-               },
                isDomElement: function ( el ) {
                        return !!el && !!el.nodeType;
                },
@@ -28,7 +27,7 @@
                                return true;
                        }
                        // the for-loop could potentially contain prototypes
-                       // to avoid that we check it's length first
+                       // to avoid that we check its length first
                        if ( v.length === 0 ) {
                                return true;
                        }
                        }
                        return true;
                }
+       }, function ( key, value ) {
+               mw.log.deprecate( $, key, value );
        } );
 
-}( jQuery ) );
+       mw.log.deprecate( $, 'escapeRE', function ( str ) {
+               return str.replace( /([\\{}()|.?*+\-\^$\[\]])/g, '\\$1' );
+       }, 'Use mediawiki.RegExp instead.' );
+
+} )( jQuery, mediaWiki );
index 3278ad5..c8e3cb3 100644 (file)
                        // Construct regex for number identification
                        for ( i = 0; i < ascii.length; i++ ) {
                                ts.transformTable[localised[i]] = ascii[i];
-                               digits.push( $.escapeRE( localised[i] ) );
+                               digits.push( mw.RegExp.escape( localised[i] ) );
                        }
                }
                digitClass = '[' + digits.join( '', digits ) + ']';
                for ( i = 0; i < 12; i++ ) {
                        name = mw.language.months.names[i].toLowerCase();
                        ts.monthNames[name] = i + 1;
-                       regex.push( $.escapeRE( name ) );
+                       regex.push( mw.RegExp.escape( name ) );
                        name = mw.language.months.genitive[i].toLowerCase();
                        ts.monthNames[name] = i + 1;
-                       regex.push( $.escapeRE( name ) );
+                       regex.push( mw.RegExp.escape( name ) );
                        name = mw.language.months.abbrev[i].toLowerCase().replace( '.', '' );
                        ts.monthNames[name] = i + 1;
-                       regex.push( $.escapeRE( name ) );
+                       regex.push( mw.RegExp.escape( name ) );
                }
 
                // Build piped string
index 8e7b168..29c533d 100644 (file)
                        data = {},
                        timer = null;
 
+               function stashEdit( token ) {
+                       data = $form.serializeObject();
+
+                       pending = api.post( {
+                               action: 'stashedit',
+                               token: token,
+                               title: mw.config.get( 'wgPageName' ),
+                               section: data.wpSection,
+                               sectiontitle: '',
+                               text: data.wpTextbox1,
+                               contentmodel: data.model,
+                               contentformat: data.format,
+                               baserevid: data.parentRevId
+                       } );
+               }
+
                /* Has the edit body text changed since the last stashEdit() call? */
                function isChanged() {
                        // Normalize line endings to CRLF, like $.fn.serializeObject does.
                                pending.abort();
                        }
 
-                       data = $form.serializeObject();
-                       pending = api.postWithToken( 'edit', {
-                               action: 'stashedit',
-                               title: mw.config.get( 'wgPageName' ),
-                               section: data.wpSection,
-                               sectiontitle: '',
-                               text: data.wpTextbox1,
-                               contentmodel: data.model,
-                               contentformat: data.format,
-                               baserevid: data.parentRevId
-                       } );
+                       api.getToken( 'edit' ).then( stashEdit );
                }
 
                function onKeyPress( e ) {
index d252f0e..50f280a 100644 (file)
@@ -86,7 +86,7 @@
                        if ( actionPaths.hasOwnProperty( key ) ) {
                                parts = actionPaths[key].split( '$1' );
                                for ( i = 0; i < parts.length; i++ ) {
-                                       parts[i] = $.escapeRE( parts[i] );
+                                       parts[i] = mw.RegExp.escape( parts[i] );
                                }
                                m = new RegExp( parts.join( '(.+)' ) ).exec( url );
                                if ( m && m[1] ) {
diff --git a/resources/src/mediawiki/mediawiki.RegExp.js b/resources/src/mediawiki/mediawiki.RegExp.js
new file mode 100644 (file)
index 0000000..1da4ab4
--- /dev/null
@@ -0,0 +1,22 @@
+( function ( mw ) {
+       /**
+        * @class mw.RegExp
+        */
+       mw.RegExp = {
+               /**
+                * Escape string for safe inclusion in regular expression
+                *
+                * The following characters are escaped:
+                *
+                *     \ { } ( ) | . ? * + - ^ $ [ ]
+                *
+                * @since 1.26
+                * @static
+                * @param {string} str String to escape
+                * @return {string} Escaped string
+                */
+               escape: function ( str ) {
+                       return str.replace( /([\\{}()|.?*+\-\^$\[\]])/g, '\\$1' );
+               }
+       };
+}( mediaWiki ) );
index 4a4a97e..7fdaa6e 100644 (file)
                        $ul = $( this ).prev( 'ul.mw-htmlform-cloner-ul' );
 
                        html = $ul.data( 'template' ).replace(
-                               new RegExp( $.escapeRE( $ul.data( 'uniqueId' ) ), 'g' ),
+                               new RegExp( mw.RegExp.escape( $ul.data( 'uniqueId' ) ), 'g' ),
                                'clone' + ( ++cloneCounter )
                        );
 
index 22d3cbb..31cd6c4 100644 (file)
                 */
                grep: function ( pattern ) {
                        if ( typeof pattern.test !== 'function' ) {
-                               // Based on Y.Escape.regex from YUI v3.15.0
-                               pattern = new RegExp( pattern.replace( /[\-$\^*()+\[\]{}|\\,.?\s]/g, '\\$&' ), 'g' );
+                               pattern = new RegExp( mw.RegExp.escape( pattern ), 'g' );
                        }
 
                        return $.grep( inspect.getLoadedModules(), function ( moduleName ) {
index 6723e5f..13bf455 100644 (file)
                                url = location.href;
                        }
                        // Get last match, stop at hash
-                       var     re = new RegExp( '^[^#]*[&?]' + $.escapeRE( param ) + '=([^&#]*)' ),
+                       var     re = new RegExp( '^[^#]*[&?]' + mw.RegExp.escape( param ) + '=([^&#]*)' ),
                                m = re.exec( url );
                        if ( m ) {
                                // Beware that decodeURIComponent is not required to understand '+'
index 223019c..325b20e 100644 (file)
@@ -51,7 +51,7 @@ abstract class ResourceLoaderTestCase extends MediaWikiTestCase {
 
                $globals = array();
                foreach ( self::getSettings() as $key => $value ) {
-                       $globals[ 'wg' . $key ] = $value;
+                       $globals['wg' . $key] = $value;
                }
                $this->setMwGlobals( $globals );
        }
@@ -102,6 +102,10 @@ class ResourceLoaderTestModule extends ResourceLoaderModule {
        public function isRaw() {
                return $this->isRaw;
        }
+
+       public function enableModuleContentVersion() {
+               return true;
+       }
 }
 
 class ResourceLoaderFileModuleTestModule extends ResourceLoaderFileModule {
index 1974162..7b0de86 100644 (file)
@@ -38,9 +38,13 @@ class BlockTest extends MediaWikiLangTestCase {
                        $oldBlock->delete();
                }
 
-               $this->block = new Block( 'UTBlockee', $user->getID(), 0,
-                       'Parce que', 0, false, time() + 100500
+               $blockOptions = array(
+                       'address' => 'UTBlockee',
+                       'user' => $user->getID(),
+                       'reason' => 'Parce que',
+                       'expiry' => time() + 100500,
                );
+               $this->block = new Block( $blockOptions );
                $this->madeAt = wfTimestamp( TS_MW );
 
                $this->block->insert();
@@ -151,22 +155,19 @@ class BlockTest extends MediaWikiLangTestCase {
                );
 
                // Foreign perspective (blockee not on current wiki)...
-               $block = new Block(
-                       /* $address */ $username,
-                       /* $user */ 14146,
-                       /* $by */ 0,
-                       /* $reason */ 'crosswiki block...',
-                       /* $timestamp */ wfTimestampNow(),
-                       /* $auto */ false,
-                       /* $expiry */ $this->db->getInfinity(),
-                       /* anonOnly */ false,
-                       /* $createAccount */ true,
-                       /* $enableAutoblock */ true,
-                       /* $hideName (ipb_deleted) */ true,
-                       /* $blockEmail */ true,
-                       /* $allowUsertalk */ false,
-                       /* $byName */ 'MetaWikiUser'
+               $blockOptions = array(
+                       'address' => $username,
+                       'user' => 14146,
+                       'reason' => 'crosswiki block...',
+                       'timestamp' => wfTimestampNow(),
+                       'expiry' => $this->db->getInfinity(),
+                       'createAccount' => true,
+                       'enableAutoblock' => true,
+                       'hideName' => true,
+                       'blockEmail' => true,
+                       'byText' => 'MetaWikiUser',
                );
+               $block = new Block( $blockOptions );
                $block->insert();
 
                // Reload block from DB
@@ -208,22 +209,19 @@ class BlockTest extends MediaWikiLangTestCase {
                $this->db->update( 'user', array( 'user_id' => 14146 ), array( 'user_id' => $user->getId() ) );
 
                // Foreign perspective (blockee not on current wiki)...
-               $block = new Block(
-                       /* $address */ 'UserOnForeignWiki',
-                       /* $user */ 14146,
-                       /* $by */ 0,
-                       /* $reason */ 'crosswiki block...',
-                       /* $timestamp */ wfTimestampNow(),
-                       /* $auto */ false,
-                       /* $expiry */ $this->db->getInfinity(),
-                       /* anonOnly */ false,
-                       /* $createAccount */ true,
-                       /* $enableAutoblock */ true,
-                       /* $hideName (ipb_deleted) */ true,
-                       /* $blockEmail */ true,
-                       /* $allowUsertalk */ false,
-                       /* $byName */ 'MetaWikiUser'
+               $blockOptions = array(
+                       'address' => 'UserOnForeignWiki',
+                       'user' => 14146,
+                       'reason' => 'crosswiki block...',
+                       'timestamp' => wfTimestampNow(),
+                       'expiry' => $this->db->getInfinity(),
+                       'createAccount' => true,
+                       'enableAutoblock' => true,
+                       'hideName' => true,
+                       'blockEmail' => true,
+                       'byText' => 'MetaWikiUser',
                );
+               $block = new Block( $blockOptions );
 
                $res = $block->insert( $this->db );
                $this->assertTrue( (bool)$res['id'], 'Block succeeded' );
@@ -367,4 +365,56 @@ class BlockTest extends MediaWikiLangTestCase {
                $block = Block::chooseBlock( $xffblocks, $list );
                $this->assertEquals( $exResult, $block->mReason, 'Correct block type for XFF header ' . $xff );
        }
+
+       public function testDeprecatedConstructor() {
+               $this->hideDeprecated( 'Block::__construct with multiple arguments' );
+               $username = 'UnthinkablySecretRandomUsername';
+               $reason = 'being irrational';
+
+               # Set up the target
+               $u = User::newFromName( $username );
+               if ( $u->getID() == 0 ) {
+                       $u->setPassword( 'TotallyObvious' );
+                       $u->addToDatabase();
+               }
+               unset( $u );
+
+               # Make sure the user isn't blocked
+               $this->assertNull(
+                       Block::newFromTarget( $username ),
+                       "$username should not be blocked"
+               );
+
+               # Perform the block
+               $block = new Block(
+                       /* address */ $username,
+                       /* user */ 0,
+                       /* by */ 0,
+                       /* reason */ $reason,
+                       /* timestamp */ 0,
+                       /* auto */ false,
+                       /* expiry */ 0
+               );
+               $block->insert();
+
+               # Check target
+               $this->assertEquals(
+                       $block->getTarget()->getName(),
+                       $username,
+                       "Target should be set properly"
+               );
+
+               # Check supplied parameter
+               $this->assertEquals(
+                       $block->mReason,
+                       $reason,
+                       "Reason should be non-default"
+               );
+
+               # Check default parameter
+               $this->assertFalse(
+                       (bool)$block->prevents( 'createaccount' ),
+                       "Account creation should not be blocked by default"
+               );
+       }
 }
index f2c9cb4..6808105 100644 (file)
@@ -76,7 +76,7 @@ class LinkFilterTest extends MediaWikiLangTestCase {
                        array( 'https://', '*.com', 'https://name:pass@secure.com/index.html' ),
                        array( 'http://', 'name:pass@test.com', 'http://test.com' ),
                        array( 'http://', 'test.com', 'http://name:pass@test.com' ),
-                       array( 'http://', '*.test.com', 'http://a.b.c.test.com/dir/dir/file?a=6'),
+                       array( 'http://', '*.test.com', 'http://a.b.c.test.com/dir/dir/file?a=6' ),
                        array( null, 'http://*.test.com', 'http://www.test.com' ),
                        array( 'mailto:', 'name@mail.test123.com', 'mailto:name@mail.test123.com' ),
                        array( '',
@@ -122,8 +122,8 @@ class LinkFilterTest extends MediaWikiLangTestCase {
                        array( '', 'git://github.com/prwef/abc-def.git', 'git://github.com/prwef/abc-def.git' ),
                        array( 'git://', 'github.com/', 'git://github.com/prwef/abc-def.git' ),
                        array( 'git://', '*.github.com/', 'git://a.b.c.d.e.f.github.com/prwef/abc-def.git' ),
-                       array( '', 'gopher://*.test.com/', 'gopher://gopher.test.com/0/v2/vstat'),
-                       array( 'telnet://', '*.test.com', 'telnet://shell.test.com/~home/'),
+                       array( '', 'gopher://*.test.com/', 'gopher://gopher.test.com/0/v2/vstat' ),
+                       array( 'telnet://', '*.test.com', 'telnet://shell.test.com/~home/' ),
 
                        //
                        // The following only work in PHP >= 5.3.7, due to a bug in parse_url which eats
@@ -243,10 +243,10 @@ class LinkFilterTest extends MediaWikiLangTestCase {
                        array( 'http://*.test.*' ),
                        array( 'http://*test.com' ),
                        array( 'https://*' ),
-                       array( '*://test.com'),
+                       array( '*://test.com' ),
                        array( 'mailto:name:pass@t*est.com' ),
-                       array( 'http://*:888/'),
-                       array( '*http://'),
+                       array( 'http://*:888/' ),
+                       array( '*http://' ),
                        array( 'test.com/*/index' ),
                        array( 'test.com/dir/index?arg=*' ),
                );
index 9501e45..0ef2fa6 100644 (file)
@@ -57,7 +57,7 @@ class MovePageTest extends MediaWikiTestCase {
                        WikiPage::factory( $oldTitle )->getRevision()
                );
                $this->assertNotNull(
-                       WikiPage::factory( $newTitle)->getRevision()
+                       WikiPage::factory( $newTitle )->getRevision()
                );
        }
 }
index 6c6d95e..7dddf77 100644 (file)
@@ -244,36 +244,36 @@ document.write("\u003Cscript src=\"http://127.0.0.1:8080/w/load.php?debug=false\
                        'test.foo' => new ResourceLoaderTestModule( array(
                                'script' => 'mw.test.foo( { a: true } );',
                                'styles' => '.mw-test-foo { content: "style"; }',
-                       )),
+                       ) ),
                        'test.bar' => new ResourceLoaderTestModule( array(
                                'script' => 'mw.test.bar( { a: true } );',
                                'styles' => '.mw-test-bar { content: "style"; }',
-                       )),
+                       ) ),
                        'test.baz' => new ResourceLoaderTestModule( array(
                                'script' => 'mw.test.baz( { a: true } );',
                                'styles' => '.mw-test-baz { content: "style"; }',
-                       )),
+                       ) ),
                        'test.quux' => new ResourceLoaderTestModule( array(
                                'script' => 'mw.test.baz( { token: 123 } );',
                                'styles' => '/* pref-animate=off */ .mw-icon { transition: none; }',
                                'group' => 'private',
-                       )),
+                       ) ),
                        'test.raw' => new ResourceLoaderTestModule( array(
                                'script' => 'mw.test.baz( { token: 123 } );',
                                'isRaw' => true,
-                       )),
+                       ) ),
                        'test.noscript' => new ResourceLoaderTestModule( array(
                                'styles' => '.mw-test-noscript { content: "style"; }',
                                'group' => 'noscript',
-                       )),
+                       ) ),
                        'test.group.bar' => new ResourceLoaderTestModule( array(
                                'styles' => '.mw-group-bar { content: "style"; }',
                                'group' => 'bar',
-                       )),
+                       ) ),
                        'test.group.foo' => new ResourceLoaderTestModule( array(
                                'styles' => '.mw-group-foo { content: "style"; }',
                                'group' => 'foo',
-                       )),
+                       ) ),
                ) );
                $links = $method->invokeArgs( $out, $args );
                // Strip comments to avoid variation due to wgDBname in WikiID and cache key
@@ -286,19 +286,19 @@ document.write("\u003Cscript src=\"http://127.0.0.1:8080/w/load.php?debug=false\
  * MessageBlobStore that doesn't do anything
  */
 class NullMessageBlobStore extends MessageBlobStore {
-       public function get ( ResourceLoader $resourceLoader, $modules, $lang ) {
+       public function get( ResourceLoader $resourceLoader, $modules, $lang ) {
                return array();
        }
 
-       public function insertMessageBlob ( $name, ResourceLoaderModule $module, $lang ) {
+       public function insertMessageBlob( $name, ResourceLoaderModule $module, $lang ) {
                return false;
        }
 
-       public function updateModule ( $name, ResourceLoaderModule $module, $lang ) {
+       public function updateModule( $name, ResourceLoaderModule $module, $lang ) {
                return;
        }
 
-       public function updateMessage ( $key ) {
+       public function updateMessage( $key ) {
        }
        public function clear() {
        }
index c013f4f..291ed31 100644 (file)
@@ -372,7 +372,7 @@ class StatusTest extends MediaWikiLangTestCase {
                );
 
                $status = new Status();
-               $status->warning( new Message( 'fooBar!', array( 'foo', 'bar' )  ) );
+               $status->warning( new Message( 'fooBar!', array( 'foo', 'bar' ) ) );
                $testCases['1MessageWarning'] = array(
                        $status,
                        "<fooBar!>",
@@ -449,7 +449,7 @@ class StatusTest extends MediaWikiLangTestCase {
 //             );
 
                $status = new Status();
-               $status->warning( new Message( 'fooBar!', array( 'foo', 'bar' )  ) );
+               $status->warning( new Message( 'fooBar!', array( 'foo', 'bar' ) ) );
                $testCases['1MessageWarning'] = array(
                        $status,
                        array( 'foo', 'bar' ),
index fd10ae7..f588ed6 100644 (file)
@@ -753,8 +753,14 @@ class TitlePermissionTest extends MediaWikiLangTestCase {
                $prev = time();
                $now = time() + 120;
                $this->user->mBlockedby = $this->user->getId();
-               $this->user->mBlock = new Block( '127.0.8.1', 0, $this->user->getId(),
-                       'no reason given', $prev + 3600, 1, 0 );
+               $this->user->mBlock = new Block( array(
+                       'address' => '127.0.8.1',
+                       'by' => $this->user->getId(),
+                       'reason' => 'no reason given',
+                       'timestamp' => $prev + 3600,
+                       'auto' => true,
+                       'expiry' => 0
+               ) );
                $this->user->mBlock->mTimestamp = 0;
                $this->assertEquals( array( array( 'autoblockedtext',
                                '[[User:Useruser|Useruser]]', 'no reason given', '127.0.0.1',
@@ -770,8 +776,14 @@ class TitlePermissionTest extends MediaWikiLangTestCase {
                global $wgLocalTZoffset;
                $wgLocalTZoffset = -60;
                $this->user->mBlockedby = $this->user->getName();
-               $this->user->mBlock = new Block( '127.0.8.1', 0, $this->user->getId(),
-                       'no reason given', $now, 0, 10 );
+               $this->user->mBlock = new Block( array(
+                       'address' => '127.0.8.1',
+                       'by' => $this->user->getId(),
+                       'reason' => 'no reason given',
+                       'timestamp' => $now,
+                       'auto' => false,
+                       'expiry' => 10,
+               ) );
                $this->assertEquals( array( array( 'blockedtext',
                                '[[User:Useruser|Useruser]]', 'no reason given', '127.0.0.1',
                                'Useruser', null, '23:00, 31 December 1969', '127.0.8.1',
index a8cffd1..a2c6f23 100644 (file)
@@ -145,7 +145,7 @@ class TitleTest extends MediaWikiTestCase {
                                        }
                                )
                        )
-               ));
+               ) );
        }
 
        /**
index d98eec6..880572b 100644 (file)
@@ -68,7 +68,7 @@ class ApiBlockTest extends ApiTestCase {
         * @expectedException UsageException
         * @expectedExceptionMessage The token parameter must be set
         */
-       public function testBlockingActionWithNoToken( ) {
+       public function testBlockingActionWithNoToken() {
                $this->doApiRequest(
                        array(
                                'action' => 'block',
index 865f1c2..fa528da 100644 (file)
@@ -218,7 +218,7 @@ class ApiEditPageTest extends ApiTestCase {
                        'section' => 'new',
                        'text' => 'test',
                        'summary' => 'header',
-               ));
+               ) );
 
                $this->assertEquals( 'Success', $re['edit']['result'] );
                // Check the page text is correct
@@ -235,7 +235,7 @@ class ApiEditPageTest extends ApiTestCase {
                        'section' => 'new',
                        'text' => 'test',
                        'summary' => 'header',
-               ));
+               ) );
 
                $this->assertEquals( 'Success', $re2['edit']['result'] );
                $text = WikiPage::factory( Title::newFromText( $name ) )
index e8ef180..ee1a954 100644 (file)
@@ -71,7 +71,7 @@ class ApiMainTest extends ApiTestCase {
                        new FauxRequest( array( 'action' => 'query', 'meta' => 'siteinfo' ) )
                );
                $modules = $api->getModuleManager()->getNamesWithClasses();
-               foreach( $modules as $name => $class ) {
+               foreach ( $modules as $name => $class ) {
                        $this->assertArrayHasKey(
                                $class,
                                $classes,
index 1ed571c..f894f87 100644 (file)
@@ -871,8 +871,12 @@ class ApiResultTest extends MediaWikiTestCase {
                                array( 'Types' => array( 'AssocAsObject' => true ) ),
                                (object)array(
                                        'defaultArray' => array( 'b', 'c', 'a', ApiResult::META_TYPE => 'array' ),
-                                       'defaultAssoc' => (object)array( 'x' => 'a', 1 => 'b', 0 => 'c', ApiResult::META_TYPE => 'assoc' ),
-                                       'defaultAssoc2' => (object)array( 2 => 'a', 3 => 'b', 0 => 'c', ApiResult::META_TYPE => 'assoc' ),
+                                       'defaultAssoc' => (object)array( 'x' => 'a',
+                                               1 => 'b', 0 => 'c', ApiResult::META_TYPE => 'assoc'
+                                       ),
+                                       'defaultAssoc2' => (object)array( 2 => 'a', 3 => 'b',
+                                               0 => 'c', ApiResult::META_TYPE => 'assoc'
+                                       ),
                                        'array' => array( 'a', 'c', 'b', ApiResult::META_TYPE => 'array' ),
                                        'BCarray' => array( 'a', 'c', 'b', ApiResult::META_TYPE => 'array' ),
                                        'BCassoc' => (object)array( 'a', 'b', 'c', ApiResult::META_TYPE => 'assoc' ),
@@ -960,8 +964,12 @@ class ApiResultTest extends MediaWikiTestCase {
                                array( 'Types' => array( 'ArmorKVP' => 'name', 'AssocAsObject' => true ) ),
                                (object)array(
                                        'defaultArray' => array( 'b', 'c', 'a', ApiResult::META_TYPE => 'array' ),
-                                       'defaultAssoc' => (object)array( 'x' => 'a', 1 => 'b', 0 => 'c', ApiResult::META_TYPE => 'assoc' ),
-                                       'defaultAssoc2' => (object)array( 2 => 'a', 3 => 'b', 0 => 'c', ApiResult::META_TYPE => 'assoc' ),
+                                       'defaultAssoc' => (object)array( 'x' => 'a', 1 => 'b',
+                                               0 => 'c', ApiResult::META_TYPE => 'assoc'
+                                       ),
+                                       'defaultAssoc2' => (object)array( 2 => 'a', 3 => 'b',
+                                               0 => 'c', ApiResult::META_TYPE => 'assoc'
+                                       ),
                                        'array' => array( 'a', 'c', 'b', ApiResult::META_TYPE => 'array' ),
                                        'BCarray' => array( 'a', 'c', 'b', ApiResult::META_TYPE => 'array' ),
                                        'BCassoc' => (object)array( 'a', 'b', 'c', ApiResult::META_TYPE => 'assoc' ),
@@ -1203,7 +1211,8 @@ class ApiResultTest extends MediaWikiTestCase {
                        if ( preg_match( '/Use of ApiResult::\S+ was deprecated in MediaWiki \d+.\d+\./', $errstr ) ) {
                                return true;
                        }
-                       if ( preg_match( '/Use of ApiMain to ApiResult::__construct was deprecated in MediaWiki \d+.\d+\./', $errstr ) ) {
+                       if ( preg_match( '/Use of ApiMain to ApiResult::__construct ' .
+                               'was deprecated in MediaWiki \d+.\d+\./', $errstr ) ) {
                                return true;
                        }
                        return false;
@@ -1521,7 +1530,8 @@ class ApiResultTest extends MediaWikiTestCase {
 
                $result = new ApiResult( 8388608 );
                $result->setMainForContinuation( $main );
-               $result->beginContinuation( '||mock2', array_slice( $allModules, 0, 2 ), array( 'mock1', 'mock2' ) );
+               $result->beginContinuation( '||mock2', array_slice( $allModules, 0, 2 ),
+                       array( 'mock1', 'mock2' ) );
                try {
                        $result->setContinueParam( $allModules[1], 'm2continue', 1 );
                        $this->fail( 'Expected exception not thrown' );
@@ -1537,7 +1547,8 @@ class ApiResultTest extends MediaWikiTestCase {
                        $this->fail( 'Expected exception not thrown' );
                } catch ( UnexpectedValueException $ex ) {
                        $this->assertSame(
-                               'Module \'mocklist\' called ApiContinuationManager::addContinueParam but was not passed to ApiContinuationManager::__construct',
+                               'Module \'mocklist\' called ApiContinuationManager::addContinueParam ' .
+                                       'but was not passed to ApiContinuationManager::__construct',
                                $ex->getMessage(),
                                'Expected exception'
                        );
@@ -1565,13 +1576,14 @@ class ApiResultTest extends MediaWikiTestCase {
 
                try {
                        $arr = array();
-                       ApiResult::setValue( $arr, 'foo',  new ApiResultTestSerializableObject(
+                       ApiResult::setValue( $arr, 'foo', new ApiResultTestSerializableObject(
                                new ApiResultTestStringifiableObject()
                        ) );
                        $this->fail( 'Expected exception not thrown' );
                } catch ( UnexpectedValueException $ex ) {
                        $this->assertSame(
-                               'ApiResultTestSerializableObject::serializeForApiResult() returned an object of class ApiResultTestStringifiableObject',
+                               'ApiResultTestSerializableObject::serializeForApiResult() ' .
+                                       'returned an object of class ApiResultTestStringifiableObject',
                                $ex->getMessage(),
                                'Expected exception'
                        );
@@ -1579,18 +1591,19 @@ class ApiResultTest extends MediaWikiTestCase {
 
                try {
                        $arr = array();
-                       ApiResult::setValue( $arr, 'foo',  new ApiResultTestSerializableObject( NAN ) );
+                       ApiResult::setValue( $arr, 'foo', new ApiResultTestSerializableObject( NAN ) );
                        $this->fail( 'Expected exception not thrown' );
                } catch ( UnexpectedValueException $ex ) {
                        $this->assertSame(
-                               'ApiResultTestSerializableObject::serializeForApiResult() returned an invalid value: Cannot add non-finite floats to ApiResult',
+                               'ApiResultTestSerializableObject::serializeForApiResult() ' .
+                                       'returned an invalid value: Cannot add non-finite floats to ApiResult',
                                $ex->getMessage(),
                                'Expected exception'
                        );
                }
 
                $arr = array();
-               ApiResult::setValue( $arr, 'foo',  new ApiResultTestSerializableObject(
+               ApiResult::setValue( $arr, 'foo', new ApiResultTestSerializableObject(
                        array(
                                'one' => new ApiResultTestStringifiableObject( '1' ),
                                'two' => new ApiResultTestSerializableObject( 2 ),
index 2c2370a..e9dff9f 100644 (file)
@@ -16,7 +16,7 @@ class ApiUnblockTest extends ApiTestCase {
        /**
         * @expectedException UsageException
         */
-       public function testWithNoToken( ) {
+       public function testWithNoToken() {
                $this->doApiRequest(
                        array(
                                'action' => 'unblock',
index 5f061b5..61b992b 100644 (file)
@@ -131,7 +131,7 @@ class ApiQueryTest extends ApiTestCase {
                );
                $queryApi = new ApiQuery( $api, 'query' );
                $modules = $queryApi->getModuleManager()->getNamesWithClasses();
-               foreach( $modules as $name => $class ) {
+               foreach ( $modules as $name => $class ) {
                        $this->assertArrayHasKey(
                                $class,
                                $classes,
index 06973b0..4aa3e30 100644 (file)
@@ -30,7 +30,7 @@ class HashConfigTest extends MediaWikiTestCase {
        public function testGet() {
                $conf = new HashConfig( array(
                        'one' => '1',
-               ));
+               ) );
                $this->assertEquals( '1', $conf->get( 'one' ) );
                $this->setExpectedException( 'ConfigException', 'HashConfig::get: undefined option' );
                $conf->get( 'two' );
index cccfe7b..8a9d2ab 100644 (file)
@@ -138,7 +138,7 @@ class JsonContentTest extends MediaWikiLangTestCase {
                                '<tr><th>0</th><td class="value">"bar"</td></tr></tbody></table>'
                        ),
                        array(
-                               (object)array( '<script>alert("evil!")</script>'),
+                               (object)array( '<script>alert("evil!")</script>' ),
                                '<table class="mw-json"><tbody><tr><th>0</th><td class="value">"' .
                                '&lt;script>alert("evil!")&lt;/script>"' .
                                '</td></tr></tbody></table>',
index b4292a6..42ea58e 100644 (file)
@@ -181,7 +181,7 @@ class DatabaseMysqlBaseTest extends MediaWikiTestCase {
                                array( 'Tables_in_' => 'view2' ),
                                array( 'Tables_in_' => 'myview' ),
                                false  # no more rows
-                       ));
+                       ) );
                return $db;
        }
        /**
index 3bea9b3..a546bec 100644 (file)
@@ -69,11 +69,11 @@ class ArrayDiffFormatterTest extends MediaWikiTestCase {
 
                $otherTestCases = array();
                $otherTestCases[] = array(
-                       $this->getMockDiff( array( $this->getMockDiffOp( 'add', array( ), array( 'a1' ) ) ) ),
+                       $this->getMockDiff( array( $this->getMockDiffOp( 'add', array(), array( 'a1' ) ) ) ),
                        array( array( 'action' => 'add', 'new' => 'a1', 'newline' => 1 ) ),
                );
                $otherTestCases[] = array(
-                       $this->getMockDiff( array( $this->getMockDiffOp( 'add', array( ), array( 'a1', 'a2' ) ) ) ),
+                       $this->getMockDiff( array( $this->getMockDiffOp( 'add', array(), array( 'a1', 'a2' ) ) ) ),
                        array(
                                array( 'action' => 'add', 'new' => 'a1', 'newline' => 1 ),
                                array( 'action' => 'add', 'new' => 'a2', 'newline' => 2 ),
index ef0f2a9..f11fda3 100644 (file)
@@ -178,7 +178,7 @@ class MWExceptionTest extends MediaWikiTestCase {
                $this->setMwGlobals( array( 'wgLogExceptionBacktrace' => true ) );
 
                $json = json_decode(
-                       MWExceptionHandler::jsonSerializeException( new $exClass())
+                       MWExceptionHandler::jsonSerializeException( new $exClass() )
                );
                $this->assertObjectHasAttribute( $key, $json,
                        "JSON serialized exception is missing key '$key'"
index 2c7f50c..3b5347c 100644 (file)
@@ -6,7 +6,7 @@
  */
 class HtmlAutoCompleteSelectFieldTest extends MediaWikiTestCase {
 
-       var $options = array(
+       public $options = array(
                'Bulgaria'     => 'BGR',
                'Burkina Faso' => 'BFA',
                'Burundi'      => 'BDI',
index a91cc95..32b150c 100644 (file)
@@ -212,7 +212,7 @@ class ArrayUtilsTest extends PHPUnit_Framework_TestCase {
                                array(),
                                array( 1 => 1 ),
                                array( 1 ),
-                               array( 1 => 1),
+                               array( 1 => 1 ),
                        ),
                        array(
                                array(),
index 9220732..a9d3cc1 100644 (file)
@@ -26,7 +26,9 @@ class ObjectFactoryTest extends PHPUnit_Framework_TestCase {
        public function testClosureExpansionDisabled() {
                $obj = ObjectFactory::getObjectFromSpec( array(
                        'class' => 'ObjectFactoryTest_Fixture',
-                       'args' => array( function (){ return 'unwrapped'; }, ),
+                       'args' => array( function() {
+                               return 'unwrapped';
+                       }, ),
                        'closure_expansion' => false,
                ) );
                $this->assertInstanceOf( 'Closure', $obj->args[0] );
@@ -39,7 +41,9 @@ class ObjectFactoryTest extends PHPUnit_Framework_TestCase {
        public function testClosureExpansionEnabled() {
                $obj = ObjectFactory::getObjectFromSpec( array(
                        'class' => 'ObjectFactoryTest_Fixture',
-                       'args' => array( function (){ return 'unwrapped'; }, ),
+                       'args' => array( function() {
+                               return 'unwrapped';
+                       }, ),
                        'closure_expansion' => true,
                ) );
                $this->assertInternalType( 'string', $obj->args[0] );
@@ -47,7 +51,9 @@ class ObjectFactoryTest extends PHPUnit_Framework_TestCase {
 
                $obj = ObjectFactory::getObjectFromSpec( array(
                        'class' => 'ObjectFactoryTest_Fixture',
-                       'args' => array( function (){ return 'unwrapped'; }, ),
+                       'args' => array( function() {
+                               return 'unwrapped';
+                       }, ),
                ) );
                $this->assertInternalType( 'string', $obj->args[0] );
                $this->assertSame( 'unwrapped', $obj->args[0] );
@@ -56,5 +62,7 @@ class ObjectFactoryTest extends PHPUnit_Framework_TestCase {
 
 class ObjectFactoryTest_Fixture {
        public $args;
-       public function __construct( /*...*/ ) { $this->args = func_get_args(); }
+       public function __construct( /*...*/ ) {
+               $this->args = func_get_args();
+       }
 }
index 2440fc0..77b188c 100644 (file)
@@ -255,43 +255,43 @@ class XhprofTest extends PHPUnit_Framework_TestCase {
         */
        protected function getXhprofFixture( array $opts = array() ) {
                $xhprof = new Xhprof( $opts );
-               $xhprof->loadRawData( array (
-                       'foo==>bar' => array (
+               $xhprof->loadRawData( array(
+                       'foo==>bar' => array(
                                'ct' => 2,
                                'wt' => 57,
                                'cpu' => 92,
                                'mu' => 1896,
                                'pmu' => 0,
                        ),
-                       'foo==>strlen' => array (
+                       'foo==>strlen' => array(
                                'ct' => 2,
                                'wt' => 21,
                                'cpu' => 141,
                                'mu' => 752,
                                'pmu' => 0,
                        ),
-                       'bar==>bar@1' => array (
+                       'bar==>bar@1' => array(
                                'ct' => 1,
                                'wt' => 18,
                                'cpu' => 19,
                                'mu' => 752,
                                'pmu' => 0,
                        ),
-                       'main()==>foo' => array (
+                       'main()==>foo' => array(
                                'ct' => 1,
                                'wt' => 304,
                                'cpu' => 307,
                                'mu' => 4008,
                                'pmu' => 0,
                        ),
-                       'main()==>xhprof_disable' => array (
+                       'main()==>xhprof_disable' => array(
                                'ct' => 1,
                                'wt' => 8,
                                'cpu' => 10,
                                'mu' => 768,
                                'pmu' => 392,
                        ),
-                       'main()' => array (
+                       'main()' => array(
                                'ct' => 1,
                                'wt' => 353,
                                'cpu' => 351,
@@ -311,7 +311,7 @@ class XhprofTest extends PHPUnit_Framework_TestCase {
         */
        protected function assertArrayStructure( $struct, $actual, $label = null ) {
                $this->assertInternalType( 'array', $actual, $label );
-               $this->assertCount( count($struct), $actual, $label );
+               $this->assertCount( count( $struct ), $actual, $label );
                foreach ( $struct as $key => $type ) {
                        $this->assertArrayHasKey( $key, $actual );
                        $this->assertInternalType( $type, $actual[$key] );
index 3e284c8..47a83b3 100644 (file)
@@ -66,9 +66,9 @@ class WANObjectCacheTest extends MediaWikiTestCase {
 
        public function testSetOver() {
                $key = wfRandomString();
-               for ( $i=0; $i<3; ++$i ) {
+               for ( $i = 0; $i < 3; ++$i ) {
                        $value = wfRandomString();
-                       $this->cache->set($key, $value, 3);
+                       $this->cache->set( $key, $value, 3 );
 
                        $this->assertEquals( $this->cache->get( $key ), $value );
                }
@@ -249,4 +249,4 @@ class WANObjectCacheTest extends MediaWikiTestCase {
                $t4 = $this->cache->getCheckKeyTime( $key );
                $this->assertEquals( $t3, $t4, 'Check key time did not change' );
        }
-}
\ No newline at end of file
+}
index 2df5568..a79c9a8 100644 (file)
@@ -14,7 +14,7 @@ class ExtensionProcessorTest extends MediaWikiTestCase {
         *
         * @var array
         */
-       static $default = array(
+       public static $default = array(
                'name' => 'FooBar',
        );
 
diff --git a/tests/phpunit/includes/resourceloader/DerivativeResourceLoaderContextTest.php b/tests/phpunit/includes/resourceloader/DerivativeResourceLoaderContextTest.php
new file mode 100644 (file)
index 0000000..0d11f62
--- /dev/null
@@ -0,0 +1,78 @@
+<?php
+
+/**
+ * @group ResourceLoader
+ */
+class DerivativeResourceLoaderContextTest extends PHPUnit_Framework_TestCase {
+
+       protected static function getResourceLoaderContext() {
+               $resourceLoader = new ResourceLoader();
+               $request = new FauxRequest( array(
+                               'lang' => 'zh',
+                               'modules' => 'test.context',
+                               'only' => 'scripts',
+                               'skin' => 'fallback',
+                               'target' => 'test',
+               ) );
+               return new ResourceLoaderContext( $resourceLoader, $request );
+       }
+
+       public function testGet() {
+               $context = self::getResourceLoaderContext();
+               $derived = new DerivativeResourceLoaderContext( $context );
+
+               $this->assertEquals( $derived->getLanguage(), 'zh' );
+               $this->assertEquals( $derived->getModules(), array( 'test.context' ) );
+               $this->assertEquals( $derived->getOnly(), 'scripts' );
+               $this->assertEquals( $derived->getSkin(), 'fallback' );
+               $this->assertEquals( $derived->getHash(), 'zh|ltr|fallback||||||scripts|' );
+       }
+
+       public function testSetLanguage() {
+               $context = self::getResourceLoaderContext();
+               $derived = new DerivativeResourceLoaderContext( $context );
+
+               $derived->setLanguage( 'nl' );
+               $this->assertEquals( $derived->getLanguage(), 'nl' );
+
+               $derived->setLanguage( 'he' );
+               $this->assertEquals( $derived->getDirection(), 'rtl' );
+       }
+
+       public function testSetModules() {
+               $context = self::getResourceLoaderContext();
+               $derived = new DerivativeResourceLoaderContext( $context );
+
+               $derived->setModules( array( 'test.override' ) );
+               $this->assertEquals( $derived->getModules(), array( 'test.override' ) );
+       }
+
+       public function testSetOnly() {
+               $context = self::getResourceLoaderContext();
+               $derived = new DerivativeResourceLoaderContext( $context );
+
+               $derived->setOnly( 'styles' );
+               $this->assertEquals( $derived->getOnly(), 'styles' );
+
+               $derived->setOnly( null );
+               $this->assertEquals( $derived->getOnly(), null );
+       }
+
+       public function testSetSkin() {
+               $context = self::getResourceLoaderContext();
+               $derived = new DerivativeResourceLoaderContext( $context );
+
+               $derived->setSkin( 'override' );
+               $this->assertEquals( $derived->getSkin(), 'override' );
+       }
+
+       public function testGetHash() {
+               $context = self::getResourceLoaderContext();
+               $derived = new DerivativeResourceLoaderContext( $context );
+
+               $derived->setLanguage( 'nl' );
+               // Assert that subclass is able to clear parent class "hash" member
+               $this->assertEquals( $derived->getHash(), 'nl|ltr|fallback||||||scripts|' );
+       }
+
+}
index 358d2a1..9d97b28 100644 (file)
@@ -158,7 +158,7 @@ class ResourceLoaderFileModuleTest extends ResourceLoaderTestCase {
         * @covers ResourceLoaderFileModule::getStyles
         * @covers ResourceLoaderFileModule::getStyleFiles
         */
-       public function testMixedCssAnnotations(  ) {
+       public function testMixedCssAnnotations() {
                $basePath = __DIR__ . '/../../data/css';
                $testModule = new ResourceLoaderFileModule( array(
                        'localBasePath' => $basePath,
index 72a2d6a..490f5c6 100644 (file)
@@ -23,7 +23,7 @@ mw.loader.addSource( {
 } );mw.loader.register( [
     [
         "test.blank",
-        "XyCC+PSK"
+        "wvTifjse"
     ]
 ] );',
                        ) ),
@@ -40,17 +40,17 @@ mw.loader.addSource( {
 } );mw.loader.register( [
     [
         "test.blank",
-        "XyCC+PSK"
+        "wvTifjse"
     ],
     [
         "test.group.foo",
-        "XyCC+PSK",
+        "wvTifjse",
         [],
         "x-foo"
     ],
     [
         "test.group.bar",
-        "XyCC+PSK",
+        "wvTifjse",
         [],
         "x-bar"
     ]
@@ -68,7 +68,7 @@ mw.loader.addSource( {
 } );mw.loader.register( [
     [
         "test.blank",
-        "XyCC+PSK"
+        "wvTifjse"
     ]
 ] );'
                        ) ),
@@ -90,7 +90,7 @@ mw.loader.addSource( {
 } );mw.loader.register( [
     [
         "test.blank",
-        "XyCC+PSK",
+        "wvTifjse",
         [],
         null,
         "example"
@@ -126,11 +126,11 @@ mw.loader.addSource( {
 } );mw.loader.register( [
     [
         "test.x.core",
-        "XyCC+PSK"
+        "wvTifjse"
     ],
     [
         "test.x.polyfill",
-        "XyCC+PSK",
+        "wvTifjse",
         [],
         null,
         null,
@@ -138,7 +138,7 @@ mw.loader.addSource( {
     ],
     [
         "test.y.polyfill",
-        "XyCC+PSK",
+        "wvTifjse",
         [],
         null,
         null,
@@ -146,7 +146,7 @@ mw.loader.addSource( {
     ],
     [
         "test.z.foo",
-        "XyCC+PSK",
+        "wvTifjse",
         [
             0,
             1,
@@ -222,36 +222,36 @@ mw.loader.addSource( {
 } );mw.loader.register( [
     [
         "test.blank",
-        "XyCC+PSK"
+        "wvTifjse"
     ],
     [
         "test.x.core",
-        "XyCC+PSK"
+        "wvTifjse"
     ],
     [
         "test.x.util",
-        "XyCC+PSK",
+        "wvTifjse",
         [
             1
         ]
     ],
     [
         "test.x.foo",
-        "XyCC+PSK",
+        "wvTifjse",
         [
             1
         ]
     ],
     [
         "test.x.bar",
-        "XyCC+PSK",
+        "wvTifjse",
         [
             2
         ]
     ],
     [
         "test.x.quux",
-        "XyCC+PSK",
+        "wvTifjse",
         [
             3,
             4,
@@ -260,25 +260,25 @@ mw.loader.addSource( {
     ],
     [
         "test.group.foo.1",
-        "XyCC+PSK",
+        "wvTifjse",
         [],
         "x-foo"
     ],
     [
         "test.group.foo.2",
-        "XyCC+PSK",
+        "wvTifjse",
         [],
         "x-foo"
     ],
     [
         "test.group.bar.1",
-        "XyCC+PSK",
+        "wvTifjse",
         [],
         "x-bar"
     ],
     [
         "test.group.bar.2",
-        "XyCC+PSK",
+        "wvTifjse",
         [],
         "x-bar",
         "example"
@@ -344,8 +344,8 @@ mw.loader.addSource( {
                $this->assertEquals(
 'mw.loader.addSource({"local":"/w/load.php"});'
 . 'mw.loader.register(['
-. '["test.blank","XyCC+PSK"],'
-. '["test.min","XyCC+PSK",[0],null,null,'
+. '["test.blank","wvTifjse"],'
+. '["test.min","wvTifjse",[0],null,null,'
 . '"return!!(window.JSON\u0026\u0026JSON.parse\u0026\u0026JSON.stringify);"'
 . ']]);',
                        $module->getModuleRegistrations( $context ),
@@ -367,11 +367,11 @@ mw.loader.addSource( {
 } );mw.loader.register( [
     [
         "test.blank",
-        "XyCC+PSK"
+        "wvTifjse"
     ],
     [
         "test.min",
-        "XyCC+PSK",
+        "wvTifjse",
         [
             0
         ],
index ca7307e..cc20e7f 100644 (file)
@@ -16,7 +16,7 @@ class ResourceLoaderTest extends ResourceLoaderTestCase {
                                },
                        ),
                        'wgResourceLoaderLESSImportPaths' => array(
-                               dirname( dirname( __DIR__  ) ) . '/data/less/common',
+                               dirname( dirname( __DIR__ ) ) . '/data/less/common',
                        ),
                        'wgResourceLoaderLESSVars' => array(
                                'foo'  => '2px',
index 49a9633..bebc093 100644 (file)
@@ -32,7 +32,7 @@ class HashSiteStoreTest extends MediaWikiTestCase {
        public function testGetSites() {
                $expectedSites = array();
 
-               foreach( TestSites::getSites() as $testSite ) {
+               foreach ( TestSites::getSites() as $testSite ) {
                        $siteId = $testSite->getGlobalId();
                        $expectedSites[$siteId] = $testSite;
                }
index 19dd0aa..7be19ef 100644 (file)
@@ -53,7 +53,7 @@ class SiteExporterTest extends PHPUnit_Framework_TestCase {
                $exporter->exportSites( array( $foo, $acme ) );
 
                fseek( $tmp, 0 );
-               $xml = fread( $tmp, 16*1024 );
+               $xml = fread( $tmp, 16 * 1024 );
 
                $this->assertContains( '<sites ', $xml );
                $this->assertContains( '<site>', $xml );
@@ -133,7 +133,7 @@ class SiteExporterTest extends PHPUnit_Framework_TestCase {
                $exporter->exportSites( $sites );
 
                fseek( $tmp, 0 );
-               $xml = fread( $tmp, 16*1024 );
+               $xml = fread( $tmp, 16 * 1024 );
 
                $actualSites = new SiteList();
                $store = $this->newSiteStore( $actualSites );
index 64b195d..b11b1a9 100644 (file)
@@ -141,12 +141,12 @@ class SiteImporterTest extends PHPUnit_Framework_TestCase {
        /**
         * @dataProvider provideImportFromXML
         */
-       public function testImportFromXML( $xml, array $expectedSites, $errorCount = 0 )  {
+       public function testImportFromXML( $xml, array $expectedSites, $errorCount = 0 ) {
                $importer = $this->newSiteImporter( $expectedSites, $errorCount );
                $importer->importFromXML( $xml );
        }
 
-       public function testImportFromXML_malformed()  {
+       public function testImportFromXML_malformed() {
                $this->setExpectedException( 'Exception' );
 
                $store = $this->getMock( 'SiteStore' );
@@ -154,7 +154,7 @@ class SiteImporterTest extends PHPUnit_Framework_TestCase {
                $importer->importFromXML( 'THIS IS NOT XML' );
        }
 
-       public function testImportFromFile()  {
+       public function testImportFromFile() {
                $foo = Site::newForType( Site::TYPE_UNKNOWN );
                $foo->setGlobalId( 'Foo' );
 
index 599d2a3..10b7e28 100644 (file)
@@ -59,7 +59,7 @@ class ForeignTitleTest extends MediaWikiTestCase {
                $this->assertEquals( $expectedText, $title->getText() );
        }
 
-       public function testUnknownNamespaceCheck( ) {
+       public function testUnknownNamespaceCheck() {
                $title = new ForeignTitle( null, 'this', 'that' );
 
                $this->assertEquals( false, $title->isNamespaceIdKnown() );
@@ -67,7 +67,7 @@ class ForeignTitleTest extends MediaWikiTestCase {
                $this->assertEquals( 'that', $title->getText() );
        }
 
-       public function testUnknownNamespaceError( ) {
+       public function testUnknownNamespaceError() {
                $this->setExpectedException( 'MWException' );
                $title = new ForeignTitle( null, 'this', 'that' );
                $title->getNamespaceId();
index cd0d0b1..1e5f9d0 100644 (file)
@@ -158,7 +158,7 @@ class MediaWikiPageLinkRendererTest extends MediaWikiTestCase {
                                function ( TitleValue $title ) {
                                        return str_replace( '_', ' ', "$title" );
                                }
-                       ));
+                       ) );
 
                $renderer = new MediaWikiPageLinkRenderer( $formatter, '/' );
                $actual = $renderer->renderWikitextLink( $title, $text );
index 65464c4..04b8f48 100644 (file)
@@ -360,17 +360,17 @@ class IPTest extends PHPUnit_Framework_TestCase {
        public static function provideIsPublic() {
                return array(
                        array( false, 'fc00::3' ), # RFC 4193 (local)
-                       array( false, 'fc00::ff'), # RFC 4193 (local)
-                       array( false, '127.1.2.3'), # loopback
-                       array( false, '::1'), # loopback
-                       array( false, 'fe80::1'), # link-local
-                       array( false, '169.254.1.1'), # link-local
-                       array( false, '10.0.0.1'), # RFC 1918 (private)
-                       array( false, '172.16.0.1'), # RFC 1918 (private)
-                       array( false, '192.168.0.1'), # RFC 1918 (private)
-                       array( true, '2001:5c0:1000:a::133'), # public
-                       array( true, 'fc::3'), # public
-                       array( true, '00FC::') # public
+                       array( false, 'fc00::ff' ), # RFC 4193 (local)
+                       array( false, '127.1.2.3' ), # loopback
+                       array( false, '::1' ), # loopback
+                       array( false, 'fe80::1' ), # link-local
+                       array( false, '169.254.1.1' ), # link-local
+                       array( false, '10.0.0.1' ), # RFC 1918 (private)
+                       array( false, '172.16.0.1' ), # RFC 1918 (private)
+                       array( false, '192.168.0.1' ), # RFC 1918 (private)
+                       array( true, '2001:5c0:1000:a::133' ), # public
+                       array( true, 'fc::3' ), # public
+                       array( true, '00FC::' ) # public
                );
        }
 
index 3fa56d7..71e0583 100644 (file)
@@ -18,7 +18,7 @@ class LanguageArqTest extends LanguageClassesTestCase {
 
        public static function provideNumber() {
                return array(
-                       array( '1.234.567', '1234567'),
+                       array( '1.234.567', '1234567' ),
                        array( '-12,89', -12.89 ),
                        );
        }
index 7fc9997..6c4839e 100644 (file)
@@ -633,7 +633,7 @@ class TextPassDumperDatabaselessTest extends MediaWikiLangTestCase {
         */
        function testBufferSizeSetting( $expected, $size, $msg ) {
                $dumper = new TextPassDumperAccessor( array( "--buffersize=" . $size ) );
-               $this->assertEquals( $expected, $dumper->getBufferSize(), $msg);
+               $this->assertEquals( $expected, $dumper->getBufferSize(), $msg );
        }
 
        /**
index d18ab73..34e3fb4 100755 (executable)
@@ -220,7 +220,9 @@ foreach ( array(
        'PHPUnit/Runner/Version.php',
        'PHPUnit/Autoload.php'
 ) as $includePath ) {
+       // @codingStandardsIgnoreStart
        @include_once $includePath;
+       // @codingStandardsIgnoreEnd
        if ( class_exists( 'PHPUnit_TextUI_Command' ) ) {
                $ok = true;
                break;
index 51d31aa..ccf5393 100644 (file)
@@ -19,11 +19,11 @@ class AvailableRightsTest extends PHPUnit_Framework_TestCase {
 
                $rights = User::getAllRights();
 
-               foreach( $wgGroupPermissions as $permissions ) {
+               foreach ( $wgGroupPermissions as $permissions ) {
                        $rights = array_merge( $rights, array_keys( $permissions ) );
                }
 
-               foreach( $wgRevokePermissions as $permissions ) {
+               foreach ( $wgRevokePermissions as $permissions ) {
                        $rights = array_merge( $rights, array_keys( $permissions ) );
                }
 
index 9093797..c6f3a23 100644 (file)
@@ -66,6 +66,7 @@ return array(
                        'tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js',
                        'tests/qunit/suites/resources/mediawiki/mediawiki.jscompat.test.js',
                        'tests/qunit/suites/resources/mediawiki/mediawiki.messagePoster.factory.test.js',
+                       'tests/qunit/suites/resources/mediawiki/mediawiki.RegExp.test.js',
                        'tests/qunit/suites/resources/mediawiki/mediawiki.template.test.js',
                        'tests/qunit/suites/resources/mediawiki/mediawiki.test.js',
                        'tests/qunit/suites/resources/mediawiki/mediawiki.Title.test.js',
@@ -108,6 +109,7 @@ return array(
                        'mediawiki.api.watch',
                        'mediawiki.jqueryMsg',
                        'mediawiki.messagePoster',
+                       'mediawiki.RegExp',
                        'mediawiki.Title',
                        'mediawiki.toc',
                        'mediawiki.Uri',
diff --git a/tests/qunit/suites/resources/mediawiki/mediawiki.RegExp.test.js b/tests/qunit/suites/resources/mediawiki/mediawiki.RegExp.test.js
new file mode 100644 (file)
index 0000000..2388497
--- /dev/null
@@ -0,0 +1,38 @@
+( function ( mw, $ ) {
+       QUnit.module( 'mediawiki.RegExp' );
+
+       QUnit.test( 'escape', 16, function ( assert ) {
+               var specials, normal;
+
+               specials = [
+                       '\\',
+                       '{',
+                       '}',
+                       '(',
+                       ')',
+                       '[',
+                       ']',
+                       '|',
+                       '.',
+                       '?',
+                       '*',
+                       '+',
+                       '-',
+                       '^',
+                       '$'
+               ];
+
+               normal = [
+                       'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
+                       'abcdefghijklmnopqrstuvwxyz',
+                       '0123456789'
+               ].join( '' );
+
+               $.each( specials, function ( i, str ) {
+                       assert.propEqual( str.match( new RegExp( mw.RegExp.escape( str ) ) ), [ str ], 'Match ' + str );
+               } );
+
+               assert.equal( mw.RegExp.escape( normal ), normal, 'Alphanumerals are left alone' );
+       } );
+
+}( mediaWiki, jQuery ) );
index 6d3ac2f..16f458b 100644 (file)
@@ -695,7 +695,7 @@ class DelayedParserTest {
         * @throws MWException
         */
        public function unleash( &$parserTest ) {
-               if ( !( $parserTest instanceof ParserTest || $parserTest instanceof NewParserTest )     ) {
+               if ( !( $parserTest instanceof ParserTest || $parserTest instanceof NewParserTest ) ) {
                        throw new MWException( __METHOD__ . " must be passed an instance of ParserTest or "
                                . "NewParserTest classes\n" );
                }
index 40f3754..c4e690e 100644 (file)
--- a/thumb.php
+++ b/thumb.php
@@ -89,7 +89,6 @@ function wfThumbHandle404() {
 function wfStreamThumb( array $params ) {
        global $wgVaryOnXFP;
 
-
        $headers = array(); // HTTP headers to send
 
        $fileName = isset( $params['f'] ) ? $params['f'] : '';
@@ -235,7 +234,7 @@ function wfStreamThumb( array $params ) {
                $imsUnix = strtotime( $imsString );
                MediaWiki\restoreWarnings();
                if ( wfTimestamp( TS_UNIX, $img->getTimestamp() ) <= $imsUnix ) {
-                       HttpStatus::header( 304  );
+                       HttpStatus::header( 304 );
                        return;
                }
        }