Merge "SpecialTrackingCategories: Read from the extension registry"
authorKunal Mehta <legoktm@gmail.com>
Fri, 23 Jan 2015 19:09:21 +0000 (19:09 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Fri, 23 Jan 2015 19:09:21 +0000 (19:09 +0000)
192 files changed:
CREDITS
Gruntfile.js [new file with mode: 0644]
RELEASE-NOTES-1.25
autoload.php
composer.json
docs/extension.schema.json
docs/kss/Makefile
docs/kss/README.txt
docs/kss/styleGuideModules.txt [new file with mode: 0644]
docs/mwlogger.txt
includes/DefaultSettings.php
includes/DeferredStringifier.php [deleted file]
includes/GlobalFunctions.php
includes/Linker.php
includes/OutputPage.php
includes/ProtectionForm.php
includes/Revision.php
includes/Title.php
includes/User.php
includes/WebRequest.php
includes/api/ApiEditPage.php
includes/api/ApiMain.php
includes/api/ApiQueryRevisionsBase.php
includes/api/ApiQueryUserInfo.php
includes/api/i18n/be-tarask.json
includes/api/i18n/cs.json
includes/api/i18n/en.json
includes/api/i18n/es.json
includes/api/i18n/eu.json
includes/api/i18n/frc.json [new file with mode: 0644]
includes/api/i18n/hsb.json [new file with mode: 0644]
includes/api/i18n/pt.json
includes/api/i18n/zh-hans.json
includes/api/i18n/zh-hant.json
includes/changes/RecentChange.php
includes/content/JsonContent.php
includes/db/DatabaseMysqlBase.php
includes/debug/logger/Factory.php [new file with mode: 0644]
includes/debug/logger/Logger.php
includes/debug/logger/NullSpi.php
includes/debug/logger/Spi.php
includes/debug/logger/legacy/Logger.php
includes/debug/logger/legacy/Spi.php
includes/debug/logger/monolog/SamplingHandler.php
includes/debug/logger/monolog/Spi.php
includes/deferred/LinksUpdate.php
includes/deferred/SqlDataUpdate.php
includes/diff/DifferenceEngine.php
includes/exception/MWExceptionHandler.php
includes/filebackend/FileBackend.php
includes/filebackend/SwiftFileBackend.php
includes/filebackend/filejournal/FileJournal.php
includes/filebackend/lockmanager/LockManagerGroup.php
includes/filebackend/lockmanager/MemcLockManager.php
includes/filebackend/lockmanager/RedisLockManager.php
includes/htmlform/HTMLCheckField.php
includes/htmlform/HTMLForm.php
includes/htmlform/HTMLFormField.php
includes/htmlform/HTMLFormFieldCloner.php
includes/htmlform/VFormHTMLForm.php [new file with mode: 0644]
includes/installer/Installer.php
includes/installer/WebInstallerPage.php
includes/installer/i18n/be-tarask.json
includes/installer/i18n/bgn.json [new file with mode: 0644]
includes/installer/i18n/ca.json
includes/installer/i18n/de.json
includes/installer/i18n/en.json
includes/installer/i18n/frc.json
includes/installer/i18n/he.json
includes/installer/i18n/nap.json
includes/installer/i18n/pl.json
includes/installer/i18n/pt.json
includes/installer/i18n/qqq.json
includes/installer/i18n/si.json
includes/installer/i18n/vi.json
includes/installer/i18n/zh-hans.json
includes/jobqueue/Job.php
includes/jobqueue/JobRunner.php
includes/libs/DeferredStringifier.php [new file with mode: 0644]
includes/libs/virtualrest/ParsoidVirtualRESTService.php
includes/page/Article.php
includes/page/ImagePage.php
includes/page/WikiPage.php
includes/registration/ExtensionProcessor.php
includes/skins/QuickTemplate.php
includes/specialpage/FormSpecialPage.php
includes/specials/SpecialActiveusers.php
includes/specials/SpecialChangeEmail.php
includes/specials/SpecialJavaScriptTest.php
includes/specials/SpecialPageLanguage.php
includes/specials/SpecialPasswordReset.php
includes/specials/SpecialUndelete.php
includes/specials/SpecialUpload.php
includes/specials/SpecialUserrights.php
includes/templates/Usercreate.php
includes/templates/Userlogin.php
languages/Names.php
languages/i18n/awa.json
languages/i18n/az.json
languages/i18n/be-tarask.json
languages/i18n/bg.json
languages/i18n/bgn.json [new file with mode: 0644]
languages/i18n/bn.json
languages/i18n/bs.json
languages/i18n/ca.json
languages/i18n/ce.json
languages/i18n/cs.json
languages/i18n/da.json
languages/i18n/de.json
languages/i18n/diq.json
languages/i18n/en.json
languages/i18n/eo.json
languages/i18n/es.json
languages/i18n/et.json
languages/i18n/eu.json
languages/i18n/fa.json
languages/i18n/fi.json
languages/i18n/fr.json
languages/i18n/frc.json
languages/i18n/gsw.json
languages/i18n/he.json
languages/i18n/hif-latn.json
languages/i18n/hsb.json
languages/i18n/ia.json
languages/i18n/it.json
languages/i18n/ja.json
languages/i18n/ka.json
languages/i18n/kk-cyrl.json
languages/i18n/ko.json
languages/i18n/lb.json
languages/i18n/lrc.json
languages/i18n/lt.json
languages/i18n/lv.json
languages/i18n/ml.json
languages/i18n/nap.json
languages/i18n/nb.json
languages/i18n/nds-nl.json
languages/i18n/nl.json
languages/i18n/pl.json
languages/i18n/pt-br.json
languages/i18n/pt.json
languages/i18n/qqq.json
languages/i18n/ro.json
languages/i18n/roa-tara.json
languages/i18n/ru.json
languages/i18n/si.json
languages/i18n/sl.json
languages/i18n/sr-ec.json
languages/i18n/sr-el.json
languages/i18n/su.json
languages/i18n/sv.json
languages/i18n/uk.json
languages/i18n/ur.json
languages/i18n/vi.json
languages/i18n/vro.json
languages/i18n/yi.json
languages/i18n/yue.json
languages/i18n/zh-hans.json
languages/i18n/zh-hant.json
languages/messages/MessagesBgn.php [new file with mode: 0644]
languages/messages/MessagesPl.php
maintenance/Maintenance.php
maintenance/convertExtensionToRegistration.php
maintenance/jsduck/eg-iframe.html
package.json [new file with mode: 0644]
resources/Resources.php
resources/lib/oojs-ui/i18n/roa-tara.json
resources/lib/oojs-ui/oojs-ui-mediawiki.css
resources/lib/oojs-ui/oojs-ui-mediawiki.js
resources/lib/oojs-ui/oojs-ui-mediawiki.svg.css
resources/lib/oojs-ui/oojs-ui.js
resources/src/jquery/jquery.tablesorter.js
resources/src/mediawiki.action/mediawiki.action.view.redirect.js
resources/src/mediawiki.special/mediawiki.special.import.js
resources/src/mediawiki.special/mediawiki.special.upload.js
resources/src/mediawiki.special/mediawiki.special.userlogin.common.js
resources/src/mediawiki.ui/components/checkbox.less
resources/src/mediawiki.ui/components/radio.less
resources/src/mediawiki/mediawiki.content.json.css
resources/src/mediawiki/mediawiki.cookie.js
resources/src/mediawiki/mediawiki.inspect.js
resources/src/mediawiki/mediawiki.js
tests/frontend/Gruntfile.js [deleted file]
tests/frontend/package.json [deleted file]
tests/phpunit/includes/SanitizerTest.php
tests/phpunit/includes/UserTest.php
tests/phpunit/includes/content/JsonContentTest.php
tests/phpunit/includes/libs/DeferredStringifierTest.php [new file with mode: 0644]
tests/phpunit/includes/parser/ParserOutputTest.php
tests/phpunit/includes/registration/ExtensionProcessorTest.php
tests/qunit/suites/resources/mediawiki/mediawiki.cookie.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.test.js

diff --git a/CREDITS b/CREDITS
index 730e54d..f58fabb 100644 (file)
--- a/CREDITS
+++ b/CREDITS
@@ -20,6 +20,7 @@ following names for their contribution to the product.
 * Brad Jorsch
 * Brian Wolff
 * Brion Vibber
+* Bryan Davis
 * Bryan Tong Minh
 * Chad Horohoe
 * Charles Melbye
diff --git a/Gruntfile.js b/Gruntfile.js
new file mode 100644 (file)
index 0000000..9cf89d0
--- /dev/null
@@ -0,0 +1,111 @@
+/*jshint node:true */
+module.exports = function ( grunt ) {
+       grunt.loadNpmTasks( 'grunt-contrib-jshint' );
+       grunt.loadNpmTasks( 'grunt-contrib-watch' );
+       grunt.loadNpmTasks( 'grunt-banana-checker' );
+       grunt.loadNpmTasks( 'grunt-jscs' );
+       grunt.loadNpmTasks( 'grunt-jsonlint' );
+       grunt.loadNpmTasks( 'grunt-karma' );
+
+       var wgServer = process.env.MW_SERVER,
+               wgScriptPath = process.env.MW_SCRIPT_PATH;
+
+       grunt.initConfig( {
+               pkg: grunt.file.readJSON( 'package.json' ),
+               jshint: {
+                       options: {
+                               jshintrc: true
+                       },
+                       all: [
+                               '*.js',
+                               '{includes,languages,resources,skins,tests}/**/*.js'
+                       ]
+               },
+               jscs: {
+                       all: [
+                               '<%= jshint.all %>',
+                               // Auto-generated file with JSON (double quotes)
+                               '!tests/qunit/data/mediawiki.jqueryMsg.data.js',
+                               // Skip functions are stored as script files but wrapped in a function when
+                               // executed. node-jscs trips on the would-be "Illegal return statement".
+                               '!resources/src/*-skip.js'
+
+                       // Exclude all files ignored by jshint
+                       ].concat( grunt.file.read( '.jshintignore' ).split( '\n' ).reduce( function ( patterns, pattern ) {
+                               // Filter out empty lines
+                               if ( pattern.length && pattern[0] !== '#' ) {
+                                       patterns.push( '!' + pattern );
+                               }
+                               return patterns;
+                       }, [] ) )
+               },
+               jsonlint: {
+                       all: [
+                               '.jscsrc',
+                               '{languages,maintenance,resources}/**/*.json',
+                               'package.json'
+                       ]
+               },
+               banana: {
+                       core: 'languages/i18n/',
+                       api: 'includes/api/i18n/',
+                       installer: 'includes/installer/i18n/'
+               },
+               watch: {
+                       files: [
+                               '<%= jscs.all %>',
+                               '<%= jsonlint.all %>',
+                               '.jshintignore',
+                               '.jshintrc'
+                       ],
+                       tasks: 'test'
+               },
+               karma: {
+                       options: {
+                               proxies: ( function () {
+                                       var obj = {};
+                                       // Set up a proxy for requests to relative urls inside wgScriptPath. Uses a
+                                       // property accessor instead of plain obj[wgScriptPath] assignment as throw if
+                                       // unset. Running grunt normally (e.g. npm test), should not fail over this.
+                                       // This ensures 'npm test' works out of the box, statically, on a git clone
+                                       // without MediaWiki fully installed or some environment variables set.
+                                       Object.defineProperty( obj, wgScriptPath, {
+                                               enumerable: true,
+                                               get: function () {
+                                                       if ( !wgServer ) {
+                                                               grunt.fail.fatal( 'MW_SERVER is not set' );
+                                                       }
+                                                       if ( !wgScriptPath ) {
+                                                               grunt.fail.fatal( 'MW_SCRIPT_PATH is not set' );
+                                                       }
+                                                       return wgServer + wgScriptPath;
+                                               }
+                                       } );
+                                       return obj;
+                               }() ),
+                               files: [ {
+                                       pattern: wgServer + wgScriptPath + '/index.php?title=Special:JavaScriptTest/qunit/export',
+                                       watched: false,
+                                       included: true,
+                                       served: false
+                               } ],
+                               frameworks: [ 'qunit' ],
+                               reporters: [ 'dots' ],
+                               singleRun: true,
+                               autoWatch: false
+                       },
+                       main: {
+                               browsers: [ 'Chrome' ]
+                       },
+                       more: {
+                               browsers: [ 'Chrome', 'Firefox' ]
+                       }
+               }
+       } );
+
+       grunt.registerTask( 'lint', ['jshint', 'jscs', 'jsonlint', 'banana'] );
+       grunt.registerTask( 'qunit', 'karma:main' );
+
+       grunt.registerTask( 'test', ['lint'] );
+       grunt.registerTask( 'default', 'test' );
+};
index 2aa066c..f0c00f3 100644 (file)
@@ -93,7 +93,7 @@ production.
 * The following libraries are now required:
 ** psr/log
    This library provides the interfaces set by the PSR-3 standard (http://www.php-fig.org/psr/psr-3/)
-   which are used by MediaWiki interally by the MWLogger class.
+   which are used by MediaWiki internally via the MWLoggerFactory class.
    See the structured logging RfC (https://www.mediawiki.org/wiki/Requests_for_comment/Structured_logging)
    for more background information.
 ** cssjanus/cssjanus
@@ -128,6 +128,9 @@ production.
   on action=info about a file page does not list file links anymore.
 * (T78637) Search bar is not autofocused unless it is empty so that proper scrolling using arrow keys is possible.
 * (T50853) Database::makeList() modified to handle 'NULL' separately when building IN clause
+* (T85192) Captcha position modified in Usercreate template. As a result:
+** extrafields parameter added to Usercreate.php to insert additional data
+** 'extend' method added to QuickTemplate to append additional values to any field of data array
 
 === Action API changes in 1.25 ===
 * (T67403) XML tag highlighting is now only performed for formats
@@ -306,6 +309,17 @@ changes to languages because of Bugzilla reports.
   rather than as strings that must be prepended or appended to $comment.
 * (T30950, T31025) RFC, PMID, and ISBN "magic links" can no longer contain
   newlines; but they can contain &nbsp; and other non-newline whitespace.
+* The 'mediawiki.action.edit' ResourceLoader module no longer generates the edit
+  toolbar, which has been moved to a separate 'mediawiki.toolbar' module. If you
+  relied on this behavior, update your scripts' dependencies.
+* HTMLForm's 'vform' display style has been separated to a subclass. Therefore:
+  * HTMLForm::isVForm() is now deprecated.
+  * You can no longer do this:
+      $form = new HTMLForm( … );
+      $form->setDisplayFormat( 'vform' ); // throws exception
+    Instead, do this:
+      $form = HTMLForm::factory( 'vform', … );
+* Deprecated Revision methods getRawUser(), getRawUserText() and getRawComment().
 
 == Compatibility ==
 
index 674d4b0..11b5266 100644 (file)
@@ -292,7 +292,7 @@ $wgAutoloadLocalClasses = array(
        'DateFormatter' => __DIR__ . '/includes/parser/DateFormatter.php',
        'DeadendPagesPage' => __DIR__ . '/includes/specials/SpecialDeadendpages.php',
        'DeferrableUpdate' => __DIR__ . '/includes/deferred/DeferredUpdates.php',
-       'DeferredStringifier' => __DIR__ . '/includes/DeferredStringifier.php',
+       'DeferredStringifier' => __DIR__ . '/includes/libs/DeferredStringifier.php',
        'DeferredUpdates' => __DIR__ . '/includes/deferred/DeferredUpdates.php',
        'DeleteAction' => __DIR__ . '/includes/actions/DeleteAction.php',
        'DeleteArchivedFiles' => __DIR__ . '/maintenance/deleteArchivedFiles.php',
@@ -690,6 +690,7 @@ $wgAutoloadLocalClasses = array(
        'MWHookException' => __DIR__ . '/includes/Hooks.php',
        'MWHttpRequest' => __DIR__ . '/includes/HttpFunctions.php',
        'MWLogger' => __DIR__ . '/includes/debug/logger/Logger.php',
+       'MWLoggerFactory' => __DIR__ . '/includes/debug/logger/Factory.php',
        'MWLoggerLegacyLogger' => __DIR__ . '/includes/debug/logger/legacy/Logger.php',
        'MWLoggerLegacySpi' => __DIR__ . '/includes/debug/logger/legacy/Spi.php',
        'MWLoggerMonologHandler' => __DIR__ . '/includes/debug/logger/monolog/Handler.php',
@@ -1269,6 +1270,7 @@ $wgAutoloadLocalClasses = array(
        'UsersPager' => __DIR__ . '/includes/specials/SpecialListusers.php',
        'UtfNormal' => __DIR__ . '/includes/normal/UtfNormal.php',
        'UzConverter' => __DIR__ . '/languages/classes/LanguageUz.php',
+       'VFormHTMLForm' => __DIR__ . '/includes/htmlform/VFormHTMLForm.php',
        'ValidateRegistrationFile' => __DIR__ . '/maintenance/validateRegistrationFile.php',
        'ViewAction' => __DIR__ . '/includes/actions/ViewAction.php',
        'VirtualRESTService' => __DIR__ . '/includes/libs/virtualrest/VirtualRESTService.php',
index 519274d..1e75e6c 100644 (file)
        "require": {
                "cssjanus/cssjanus": "1.1.1",
                "leafo/lessphp": "0.5.0",
-               "oojs/oojs-ui": "0.6.2",
+               "oojs/oojs-ui": "0.6.3",
                "php": ">=5.3.3",
                "psr/log": "1.0.0",
                "wikimedia/cdb": "1.0.1",
-               "wikimedia/composer-merge-plugin": "0.5.0"
+               "wikimedia/composer-merge-plugin": "0.5.0",
+               "zordius/lightncandy": "0.18"
        },
        "require-dev": {
                "justinrainbow/json-schema": "~1.3",
index 4b29872..4583559 100644 (file)
@@ -7,10 +7,6 @@
                        "type": "string",
                        "description": "The extension's canonical name."
                },
-               "info-files": {
-                       "type": "array",
-                       "description": "A list of filenames that should be loaded, in addition to this one"
-               },
                "type": {
                        "type": "string",
                        "description": "The extension's type, as an index to $wgExtensionCredits.",
@@ -39,9 +35,6 @@
                        },
                        "additionalItems": false
                },
-               "path": {
-                       "type": "string"
-               },
                "version": {
                        "type": "string",
                        "description": "The version of this release of the extension."
                        "type": "object",
                        "description": "ResourceLoader import paths"
                },
+               "ConfigRegistry": {
+                       "type": "object",
+                       "description": "Registry of factory functions to create Config objects"
+               },
                "namespaces": {
                        "type": "object",
                        "description": "Method to add extra namespaces",
index 31feec1..0024d98 100644 (file)
@@ -4,9 +4,9 @@ kss: kssnodecheck
 # Generates CSS of mediawiki.ui and mediawiki.ui.button using ResourceLoader, then applies it to the
 # KSS style guide
        $(eval KSS_RL_TMP := $(shell mktemp /tmp/tmp.XXXXXXXXXX))
-# Keep module names in strict alphabetical order, so CSS loads in the same order as ResourceLoader's addModuleStyles does; this can affect rendering.
+       $(eval MODULE_STR := $(shell paste -sd "|"  < styleGuideModules.txt))
 # See OutputPage::makeResourceLoaderLink.
-       @curl -sG "${MEDIAWIKI_LOAD_URL}?modules=mediawiki.legacy.commonPrint|mediawiki.legacy.shared|mediawiki.ui|mediawiki.ui.anchor|mediawiki.ui.button|mediawiki.ui.checkbox|mediawiki.ui.radio|mediawiki.ui.icon|mediawiki.ui.input|mediawiki.ui.text&only=styles" > $(KSS_RL_TMP)
+       @curl -sG "${MEDIAWIKI_LOAD_URL}?modules=${MODULE_STR}&only=styles" > $(KSS_RL_TMP)
        @node_modules/.bin/kss-node ../../resources/src/mediawiki.ui static/ --css $(KSS_RL_TMP) -t styleguide-template
        @rm $(KSS_RL_TMP)
 
index c383af9..76cfb62 100644 (file)
@@ -17,3 +17,5 @@ If MediaWiki is running on localhost, you can omit MEDIAWIKI_LOAD_URL.
 To rebuild without opening the web browser, run:
 
 MEDIAWIKI_LOAD_URL=mediawiki_hostname/w/load.php make
+
+When modifying styleGuideModules.txt, keep the list in strict alphabetical order (with no extra formatting), so CSS loads in the same order as ResourceLoader's addModuleStyles does; this can affect rendering.
diff --git a/docs/kss/styleGuideModules.txt b/docs/kss/styleGuideModules.txt
new file mode 100644 (file)
index 0000000..79212c0
--- /dev/null
@@ -0,0 +1,10 @@
+mediawiki.legacy.commonPrint
+mediawiki.legacy.shared
+mediawiki.ui
+mediawiki.ui.anchor
+mediawiki.ui.button
+mediawiki.ui.checkbox
+mediawiki.ui.radio
+mediawiki.ui.icon
+mediawiki.ui.input
+mediawiki.ui.text
index aab9599..ecc3626 100644 (file)
@@ -1,28 +1,30 @@
-MWLogger implements a PSR-3 [0] compatible message logging system.
+MWLoggerFactory implements a PSR-3 [0] compatible message logging system.
 
-The MWLogger class is actually a thin wrapper around any PSR-3 LoggerInterface
-implementation. Named MWLogger instances can be obtained from the
-MWLogger::getInstance() static method. MWLogger expects a class implementing
-the MWLoggerSpi interface to act as a factory for new MWLogger instances.
+Named Psr\Log\LoggerInterface instances can be obtained from the
+MWLoggerFactory::getInstance() static method. MWLoggerFactory expects a class
+implementing the MWLoggerSpi interface to act as a factory for new
+Psr\Log\LoggerInterface instances.
 
-The "Spi" in MWLoggerSpi stands for "service provider interface". An SPI is
-a API intended to be implemented or extended by a third party. This software
+The "Spi" in MWLoggerSpi stands for "service provider interface". A SPI is
+an API intended to be implemented or extended by a third party. This software
 design pattern is intended to enable framework extension and replaceable
-components. It is specifically used in the MWLogger service to allow alternate
-PSR-3 logging implementations to be easily integrated with MediaWiki.
+components. It is specifically used in the MWLoggerFactory service to allow
+alternate PSR-3 logging implementations to be easily integrated with
+MediaWiki.
 
-The MWLogger::getInstance() static method is the means by which most code
-acquires an MWLogger instance. This in turn delegates creation of MWLogger
-instances to a class implementing the MWLoggerSpi service provider interface.
+The MWLoggerFactory::getInstance() static method is the means by which most
+code acquires a Psr\Log\LoggerInterface instance. This in turn delegates
+creation of Psr\Log\LoggerInterface instances to a class implementing the
+MWLoggerSpi service provider interface.
 
 The service provider interface allows the backend logging library to be
 implemented in multiple ways. The $wgMWLoggerDefaultSpi global provides the
 classname of the default MWLoggerSpi implementation to be loaded at runtime.
 This can either be the name of a class implementing the MWLoggerSpi with
 a zero argument constructor or a callable that will return an MWLoggerSpi
-instance. Alternately the MWLogger::registerProvider method can be called
-to inject an MWLoggerSpi instance into MWLogger and bypass the use of this
-configuration variable.
+instance. Alternately the MWLoggerFactory::registerProvider method can be
+called to inject an MWLoggerSpi instance into MWLoggerFactory and bypass the
+use of this configuration variable.
 
 The MWLoggerLegacySpi class implements a service provider to generate
 MWLoggerLegacyLogger instances. The MWLoggerLegacyLogger class implements the
@@ -33,18 +35,17 @@ DefaultSettings.php. It's usage should be transparent for users who are not
 ready or do not wish to switch to a alternate logging platform.
 
 The MWLoggerMonologSpi class implements a service provider to generate
-MWLogger instances that use the Monolog [1] logging library. See the PHP docs
-(or source) for MWLoggerMonologSpi for details on the configuration of this
-provider. The default configuration installs a null handler that will silently
-discard all logging events. The documentation provided by the class describes
-a more feature rich logging configuration.
+Psr\Log\LoggerInterface instances that use the Monolog [1] logging library.
+See the PHP docs (or source) for MWLoggerMonologSpi for details on the
+configuration of this provider. The default configuration installs a null
+handler that will silently discard all logging events. The documentation
+provided by the class describes a more feature rich logging configuration.
 
 == Classes ==
-; MWLogger
-: PSR-3 compatible logger that wraps any \Psr\Log\LoggerInterface
-  implementation
+; MWLoggerFactory
+: Factory for Psr\Log\LoggerInterface loggers
 ; MWLoggerSpi
-: Service provider interface for MWLogger factories
+: Service provider interface for MWLoggerFactory
 ; MWLoggerNullSpi
 : MWLoggerSpi for creating instances that discard all log events
 ; MWLoggerLegacySpi
@@ -64,7 +65,7 @@ a more feature rich logging configuration.
 == Globals ==
 ; $wgMWLoggerDefaultSpi
 : Specification for creating the default service provider interface to use
-  with MWLogger
+  with MWLoggerFactory
 
 [0]: https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md
 [1]: https://github.com/Seldaek/monolog
index 6d399cf..8060983 100644 (file)
@@ -270,6 +270,16 @@ $wgFavicon = '/favicon.ico';
  */
 $wgAppleTouchIcon = false;
 
+/**
+ * Value for the referrer policy meta tag.
+ * One of 'never', 'default', 'origin', 'always'. Setting it to false just
+ * prevents the meta tag from being output.
+ * See http://www.w3.org/TR/referrer-policy/ for details.
+ *
+ * @since 1.25
+ */
+$wgReferrerPolicy = false;
+
 /**
  * The local filesystem path to a temporary directory. This is not required to
  * be web accessible.
@@ -5271,16 +5281,16 @@ $wgDebugDumpSqlLength = 500;
 $wgDebugLogGroups = array();
 
 /**
- * Default service provider for creating MWLogger instances.
+ * Default service provider for creating Psr\Log\LoggerInterface instances.
  *
  * The value should be an array suitable for use with
  * ObjectFactory::getObjectFromSpec(). The created object is expected to
  * implement the MWLoggerSpi interface. See ObjectFactory for additional
  * details.
  *
- * Alternately the MWLogger::registerProvider method can be called to inject
- * an MWLoggerSpi instance into MWLogger and bypass the use of this
- * configuration variable entirely.
+ * Alternately the MWLoggerFactory::registerProvider method can be called to
+ * inject an MWLoggerSpi instance into MWLoggerFactory and bypass the use of
+ * this configuration variable entirely.
  *
  * @since 1.25
  * @var array $wgMWLoggerDefaultSpi
diff --git a/includes/DeferredStringifier.php b/includes/DeferredStringifier.php
deleted file mode 100644 (file)
index bd32949..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-<?php
-/**
- * Class that defers a slow string generation until the string is actually needed.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- */
-
-/**
- * @since 1.25
- */
-class DeferredStringifier {
-       /** @var callable Callback used for result string generation */
-       private $callback;
-       /** @var array */
-       private $params;
-       /** @var string */
-       private $result;
-
-       /**
-        * @param callable $callback Callback that gets called by __toString
-        * @param mixed $param,... Parameters to the callback
-        */
-       public function __construct( $callback /*...*/ ) {
-               $this->params = func_get_args();
-               array_shift( $this->params );
-               $this->callback = $callback;
-       }
-
-       /**
-        * Returns a string generated by callback
-        *
-        * @return string
-        */
-       public function __toString() {
-               if ( $this->result === null ) {
-                       $this->result = call_user_func_array( $this->callback, $this->params );
-               }
-               return $this->result;
-       }
-}
index a1c39fb..2025e17 100644 (file)
@@ -1078,7 +1078,7 @@ function wfDebug( $text, $dest = 'all', array $context = array() ) {
                $context['prefix'] = $wgDebugLogPrefix;
        }
 
-       $logger = MWLogger::getInstance( 'wfDebug' );
+       $logger = MWLoggerFactory::getInstance( 'wfDebug' );
        $logger->debug( $text, $context );
 }
 
@@ -1182,7 +1182,7 @@ function wfDebugLog(
                MWDebug::debugMsg( "[{$logGroup}] {$text}\n" );
        }
 
-       $logger = MWLogger::getInstance( $logGroup );
+       $logger = MWLoggerFactory::getInstance( $logGroup );
        $context['private'] = ( $dest === 'private' );
        $logger->info( $text, $context );
 }
@@ -1196,7 +1196,7 @@ function wfDebugLog(
  * @param array $context Additional logging context data
  */
 function wfLogDBError( $text, array $context = array() ) {
-       $logger = MWLogger::getInstance( 'wfLogDBError' );
+       $logger = MWLoggerFactory::getInstance( 'wfLogDBError' );
        $logger->error( trim( $text ), $context );
 }
 
@@ -1259,7 +1259,7 @@ function wfLogWarning( $msg, $callerOffset = 1, $level = E_USER_WARNING ) {
  */
 function wfErrorLog( $text, $file, array $context = array() ) {
        wfDeprecated( __METHOD__, '1.25' );
-       $logger = MWLogger::getInstance( 'wfErrorLog' );
+       $logger = MWLoggerFactory::getInstance( 'wfErrorLog' );
        $context['destination'] = $file;
        $logger->info( trim( $text ), $context );
 }
@@ -1334,7 +1334,7 @@ function wfLogProfilingData() {
 
        $ctx['output'] = $profiler->getOutput();
 
-       $log = MWLogger::getInstance( 'profileoutput' );
+       $log = MWLoggerFactory::getInstance( 'profileoutput' );
        $log->info( "Elapsed: {elapsed}; URL: <{url}>\n{output}", $ctx );
 }
 
@@ -2147,10 +2147,12 @@ function wfVarDump( $var ) {
  */
 function wfHttpError( $code, $label, $desc ) {
        global $wgOut;
-       $wgOut->disable();
        header( "HTTP/1.0 $code $label" );
        header( "Status: $code $label" );
-       $wgOut->sendCacheControl();
+       if ( $wgOut ) {
+               $wgOut->disable();
+               $wgOut->sendCacheControl();
+       }
 
        header( 'Content-type: text/html; charset=utf-8' );
        print "<!doctype html>" .
@@ -4024,7 +4026,7 @@ function wfGetLangConverterCacheStorage() {
  * @param string|null $deprecatedVersion Optionally mark hook as deprecated with version number
  *
  * @return bool True if no handler aborted the hook
- * @deprecated 1.25
+ * @deprecated 1.25 - use Hooks::run
  */
 function wfRunHooks( $event, array $args = array(), $deprecatedVersion = null ) {
        return Hooks::run( $event, $args, $deprecatedVersion );
index 7840868..f220eba 100644 (file)
@@ -1605,7 +1605,7 @@ class Linker {
         * @return string HTML fragment
         */
        public static function revComment( Revision $rev, $local = false, $isPublic = false ) {
-               if ( $rev->getRawComment() == "" ) {
+               if ( $rev->getComment( Revision::RAW ) == "" ) {
                        return "";
                }
                if ( $rev->isDeleted( Revision::DELETED_COMMENT ) && $isPublic ) {
@@ -1870,7 +1870,7 @@ class Linker {
                $editCount = 0;
                $moreRevs = false;
                foreach ( $res as $row ) {
-                       if ( $rev->getRawUserText() != $row->rev_user_text ) {
+                       if ( $rev->getUserText( Revision::RAW ) != $row->rev_user_text ) {
                                if ( $verify &&
                                        ( $row->rev_deleted & Revision::DELETED_TEXT
                                                || $row->rev_deleted & Revision::DELETED_USER
index 4e14b7b..4101d09 100644 (file)
@@ -3284,6 +3284,13 @@ class OutputPage extends ContextSource {
                        'content' => "MediaWiki $wgVersion",
                ) );
 
+               if ( $config->get( 'ReferrerPolicy' ) !== false ) {
+                       $tags['meta-referrer'] = Html::element( 'meta', array(
+                               'name' => 'referrer',
+                               'content' => $config->get( 'ReferrerPolicy' )
+                       ) );
+               }
+
                $p = "{$this->mIndexPolicy},{$this->mFollowPolicy}";
                if ( $p !== 'index,follow' ) {
                        // http://www.robotstxt.org/wc/meta-user.html
@@ -3786,12 +3793,13 @@ class OutputPage extends ContextSource {
         * This function takes a number of message/argument specifications, wraps them in
         * some overall structure, and then parses the result and adds it to the output.
         *
-        * In the $wrap, $1 is replaced with the first message, $2 with the second, and so
-        * on. The subsequent arguments may either be strings, in which case they are the
-        * message names, or arrays, in which case the first element is the message name,
-        * and subsequent elements are the parameters to that message.
+        * In the $wrap, $1 is replaced with the first message, $2 with the second,
+        * and so on. The subsequent arguments may be either
+        * 1) strings, in which case they are message names, or
+        * 2) arrays, in which case, within each array, the first element is the message
+        *    name, and subsequent elements are the parameters to that message.
         *
-        * Don't use this for messages that are not in users interface language.
+        * Don't use this for messages that are not in the user's interface language.
         *
         * For example:
         *
@@ -3802,7 +3810,7 @@ class OutputPage extends ContextSource {
         *    $wgOut->addWikiText( "<div class='error'>\n"
         *        . wfMessage( 'some-error' )->plain() . "\n</div>" );
         *
-        * The newline after opening div is needed in some wikitext. See bug 19226.
+        * The newline after the opening div is needed in some wikitext. See bug 19226.
         *
         * @param string $wrap
         */
index 76ad252..4eae1ce 100644 (file)
@@ -209,11 +209,11 @@ class ProtectionForm {
                if ( $this->mTitle->getRestrictionTypes() === array() ) {
                        // No restriction types available for the current title
                        // this might happen if an extension alters the available types
-                       $out->setPageTitle( wfMessage(
+                       $out->setPageTitle( $this->mContext->msg(
                                'protect-norestrictiontypes-title',
                                $this->mTitle->getPrefixedText()
                        ) );
-                       $out->addWikiText( wfMessage( 'protect-norestrictiontypes-text' )->text() );
+                       $out->addWikiText( $this->mContext->msg( 'protect-norestrictiontypes-text' )->plain() );
 
                        // Show the log in case protection was possible once
                        $this->showLogExtract( $out );
@@ -240,12 +240,12 @@ class ProtectionForm {
                # the protection settings at this time
                if ( $this->disabled ) {
                        $out->setPageTitle(
-                               wfMessage( 'protect-title-notallowed',
+                               $this->mContext->msg( 'protect-title-notallowed',
                                        $this->mTitle->getPrefixedText() )
                        );
                        $out->addWikiText( $out->formatPermissionsErrorMessage( $this->mPermErrors, 'protect' ) );
                } else {
-                       $out->setPageTitle( wfMessage( 'protect-title', $this->mTitle->getPrefixedText() ) );
+                       $out->setPageTitle( $this->mContext->msg( 'protect-title', $this->mTitle->getPrefixedText() ) );
                        $out->addWikiMsg( 'protect-text',
                                wfEscapeWikiText( $this->mTitle->getPrefixedText() ) );
                }
@@ -279,7 +279,7 @@ class ProtectionForm {
                $reasonstr = $this->mReasonSelection;
                if ( $reasonstr != 'other' && $this->mReason != '' ) {
                        // Entry from drop down menu + additional comment
-                       $reasonstr .= wfMessage( 'colon-separator' )->text() . $this->mReason;
+                       $reasonstr .= $this->mContext->msg( 'colon-separator' )->text() . $this->mReason;
                } elseif ( $reasonstr == 'other' ) {
                        $reasonstr = $this->mReason;
                }
@@ -342,10 +342,11 @@ class ProtectionForm {
         * @return string HTML form
         */
        function buildForm() {
-               $user = $this->mContext->getUser();
-               $output = $this->mContext->getOutput();
-               $lang = $this->mContext->getLanguage();
-               $cascadingRestrictionLevels = $this->mContext->getConfig()->get( 'CascadingRestrictionLevels' );
+               $context = $this->mContext;
+               $user = $context->getUser();
+               $output = $context->getOutput();
+               $lang = $context->getLanguage();
+               $cascadingRestrictionLevels = $context->getConfig()->get( 'CascadingRestrictionLevels' );
                $out = '';
                if ( !$this->disabled ) {
                        $output->addModules( 'mediawiki.legacy.protect' );
@@ -356,7 +357,7 @@ class ProtectionForm {
                }
 
                $out .= Xml::openElement( 'fieldset' ) .
-                       Xml::element( 'legend', null, wfMessage( 'protect-legend' )->text() ) .
+                       Xml::element( 'legend', null, $context->msg( 'protect-legend' )->text() ) .
                        Xml::openElement( 'table', array( 'id' => 'mwProtectSet' ) ) .
                        Xml::openElement( 'tbody' );
 
@@ -367,7 +368,7 @@ class ProtectionForm {
                foreach ( $this->mRestrictions as $action => $selected ) {
                        // Messages:
                        // restriction-edit, restriction-move, restriction-create, restriction-upload
-                       $msg = wfMessage( 'restriction-' . $action );
+                       $msg = $context->msg( 'restriction-' . $action );
                        $out .= "<tr><td>" .
                        Xml::openElement( 'fieldset' ) .
                        Xml::element( 'legend', null, $msg->exists() ? $msg->text() : $action ) .
@@ -375,23 +376,23 @@ class ProtectionForm {
                                "<tr><td>" . $this->buildSelector( $action, $selected ) . "</td></tr><tr><td>";
 
                        $mProtectexpiry = Xml::label(
-                               wfMessage( 'protectexpiry' )->text(),
+                               $context->msg( 'protectexpiry' )->text(),
                                "mwProtectExpirySelection-$action"
                        );
                        $mProtectother = Xml::label(
-                               wfMessage( 'protect-othertime' )->text(),
+                               $context->msg( 'protect-othertime' )->text(),
                                "mwProtect-$action-expires"
                        );
 
                        $expiryFormOptions = '';
                        if ( $this->mExistingExpiry[$action] ) {
                                if ( $this->mExistingExpiry[$action] == 'infinity' ) {
-                                       $existingExpiryMessage = wfMessage( 'protect-existing-expiry-infinity' );
+                                       $existingExpiryMessage = $context->msg( 'protect-existing-expiry-infinity' );
                                } else {
-                                       $timestamp = $lang->timeanddate( $this->mExistingExpiry[$action], true );
-                                       $d = $lang->date( $this->mExistingExpiry[$action], true );
-                                       $t = $lang->time( $this->mExistingExpiry[$action], true );
-                                       $existingExpiryMessage = wfMessage( 'protect-existing-expiry', $timestamp, $d, $t );
+                                       $timestamp = $lang->userTimeAndDate( $this->mExistingExpiry[$action], $user );
+                                       $d = $lang->userDate( $this->mExistingExpiry[$action], $user );
+                                       $t = $lang->userTime( $this->mExistingExpiry[$action], $user );
+                                       $existingExpiryMessage = $context->msg( 'protect-existing-expiry', $timestamp, $d, $t );
                                }
                                $expiryFormOptions .=
                                        Xml::option(
@@ -402,7 +403,7 @@ class ProtectionForm {
                        }
 
                        $expiryFormOptions .= Xml::option(
-                               wfMessage( 'protect-othertime-op' )->text(),
+                               $context->msg( 'protect-othertime-op' )->text(),
                                "othertime"
                        ) . "\n";
                        foreach ( explode( ',', $scExpiryOptions ) as $option ) {
@@ -464,7 +465,7 @@ class ProtectionForm {
                                        <td></td>
                                        <td class="mw-input">' .
                                                Xml::checkLabel(
-                                                       wfMessage( 'protect-cascade' )->text(),
+                                                       $context->msg( 'protect-cascade' )->text(),
                                                        'mwProtect-cascade',
                                                        'mwProtect-cascade',
                                                        $this->mCascade, $this->disabledAttrib
@@ -477,12 +478,12 @@ class ProtectionForm {
                # Add manual and custom reason field/selects as well as submit
                if ( !$this->disabled ) {
                        $mProtectreasonother = Xml::label(
-                               wfMessage( 'protectcomment' )->text(),
+                               $context->msg( 'protectcomment' )->text(),
                                'wpProtectReasonSelection'
                        );
 
                        $mProtectreason = Xml::label(
-                               wfMessage( 'protect-otherreason' )->text(),
+                               $context->msg( 'protect-otherreason' )->text(),
                                'mwProtect-reason'
                        );
 
@@ -521,7 +522,7 @@ class ProtectionForm {
                                <tr>
                                        <td></td>
                                        <td class='mw-input'>" .
-                                               Xml::checkLabel( wfMessage( 'watchthis' )->text(),
+                                               Xml::checkLabel( $context->msg( 'watchthis' )->text(),
                                                        'mwProtectWatch', 'mwProtectWatch',
                                                        $user->isWatched( $this->mTitle ) || $user->getOption( 'watchdefault' ) ) .
                                        "</td>
@@ -532,7 +533,7 @@ class ProtectionForm {
                                        <td></td>
                                        <td class='mw-submit'>" .
                                                Xml::submitButton(
-                                                       wfMessage( 'confirm' )->text(),
+                                                       $context->msg( 'confirm' )->text(),
                                                        array( 'id' => 'mw-Protect-submit' )
                                                ) .
                                        "</td>
@@ -545,7 +546,7 @@ class ProtectionForm {
                        $title = Title::makeTitle( NS_MEDIAWIKI, 'Protect-dropdown' );
                        $link = Linker::link(
                                $title,
-                               wfMessage( 'protect-edit-reasonlist' )->escaped(),
+                               $context->msg( 'protect-edit-reasonlist' )->escaped(),
                                array(),
                                array( 'action' => 'edit' )
                        );
@@ -600,14 +601,14 @@ class ProtectionForm {
         */
        private function getOptionLabel( $permission ) {
                if ( $permission == '' ) {
-                       return wfMessage( 'protect-default' )->text();
+                       return $this->mContext->msg( 'protect-default' )->text();
                } else {
                        // Messages: protect-level-autoconfirmed, protect-level-sysop
-                       $msg = wfMessage( "protect-level-{$permission}" );
+                       $msg = $this->mContext->msg( "protect-level-{$permission}" );
                        if ( $msg->exists() ) {
                                return $msg->text();
                        }
-                       return wfMessage( 'protect-fallback', $permission )->text();
+                       return $this->mContext->msg( 'protect-fallback', $permission )->text();
                }
        }
 
index c8015e6..90cc35a 100644 (file)
@@ -826,9 +826,11 @@ class Revision implements IDBAccessObject {
         * Fetch revision's user id without regard for the current user's permissions
         *
         * @return string
+        * @deprecated since 1.25, use getUser( Revision::RAW )
         */
        public function getRawUser() {
-               return $this->mUser;
+               wfDeprecated( __METHOD__, '1.25' );
+               return $this->getUser( self::RAW );
        }
 
        /**
@@ -850,7 +852,15 @@ class Revision implements IDBAccessObject {
                } elseif ( $audience == self::FOR_THIS_USER && !$this->userCan( self::DELETED_USER, $user ) ) {
                        return '';
                } else {
-                       return $this->getRawUserText();
+                       if ( $this->mUserText === null ) {
+                               $this->mUserText = User::whoIs( $this->mUser ); // load on demand
+                               if ( $this->mUserText === false ) {
+                                       # This shouldn't happen, but it can if the wiki was recovered
+                                       # via importing revs and there is no user table entry yet.
+                                       $this->mUserText = $this->mOrigUserText;
+                               }
+                       }
+                       return $this->mUserText;
                }
        }
 
@@ -858,17 +868,11 @@ class Revision implements IDBAccessObject {
         * Fetch revision's username without regard for view restrictions
         *
         * @return string
+        * @deprecated since 1.25, use getUserText( Revision::RAW )
         */
        public function getRawUserText() {
-               if ( $this->mUserText === null ) {
-                       $this->mUserText = User::whoIs( $this->mUser ); // load on demand
-                       if ( $this->mUserText === false ) {
-                               # This shouldn't happen, but it can if the wiki was recovered
-                               # via importing revs and there is no user table entry yet.
-                               $this->mUserText = $this->mOrigUserText;
-                       }
-               }
-               return $this->mUserText;
+               wfDeprecated( __METHOD__, '1.25' );
+               return $this->getUserText( self::RAW );
        }
 
        /**
@@ -898,9 +902,11 @@ class Revision implements IDBAccessObject {
         * Fetch revision comment without regard for the current user's permissions
         *
         * @return string
+        * @deprecated since 1.25, use getComment( Revision::RAW )
         */
        public function getRawComment() {
-               return $this->mComment;
+               wfDeprecated( __METHOD__, '1.25' );
+               return $this->getComment( self::RAW );
        }
 
        /**
@@ -936,7 +942,7 @@ class Revision implements IDBAccessObject {
                $dbr = wfGetDB( DB_SLAVE );
                return RecentChange::newFromConds(
                        array(
-                               'rc_user_text' => $this->getRawUserText(),
+                               'rc_user_text' => $this->getUserText( Revision::RAW ),
                                'rc_timestamp' => $dbr->timestamp( $this->getTimestamp() ),
                                'rc_this_oldid' => $this->getId()
                        ),
index bb4d04e..2d0cfda 100644 (file)
@@ -4098,12 +4098,11 @@ class Title {
                        'rev_timestamp < ' . $dbr->addQuotes( $dbr->timestamp( $new->getTimestamp() ) )
                );
                if ( $max !== null ) {
-                       $res = $dbr->select( 'revision', '1',
+                       return $dbr->selectRowCount( 'revision', '1',
                                $conds,
                                __METHOD__,
                                array( 'LIMIT' => $max + 1 ) // extra to detect truncation
                        );
-                       return $res->numRows();
                } else {
                        return (int)$dbr->selectField( 'revision', 'count(*)', $conds, __METHOD__ );
                }
@@ -4154,17 +4153,19 @@ class Title {
                }
                // No DB query needed if $old and $new are the same or successive revisions:
                if ( $old->getId() === $new->getId() ) {
-                       return ( $old_cmp === '>' && $new_cmp === '<' ) ? array() : array( $old->getRawUserText() );
+                       return ( $old_cmp === '>' && $new_cmp === '<' ) ?
+                               array() :
+                               array( $old->getUserText( Revision::RAW ) );
                } elseif ( $old->getId() === $new->getParentId() ) {
                        if ( $old_cmp === '>=' && $new_cmp === '<=' ) {
-                               $authors[] = $old->getRawUserText();
-                               if ( $old->getRawUserText() != $new->getRawUserText() ) {
-                                       $authors[] = $new->getRawUserText();
+                               $authors[] = $old->getUserText( Revision::RAW );
+                               if ( $old->getUserText( Revision::RAW ) != $new->getUserText( Revision::RAW ) ) {
+                                       $authors[] = $new->getUserText( Revision::RAW );
                                }
                        } elseif ( $old_cmp === '>=' ) {
-                               $authors[] = $old->getRawUserText();
+                               $authors[] = $old->getUserText( Revision::RAW );
                        } elseif ( $new_cmp === '<=' ) {
-                               $authors[] = $new->getRawUserText();
+                               $authors[] = $new->getUserText( Revision::RAW );
                        }
                        return $authors;
                }
index 7ca7d80..dd199ee 100644 (file)
@@ -3008,20 +3008,24 @@ class User implements IDBAccessObject {
         * Add the user to the given group.
         * This takes immediate effect.
         * @param string $group Name of the group to add
+        * @return bool
         */
        public function addGroup( $group ) {
-               if ( Hooks::run( 'UserAddGroup', array( $this, &$group ) ) ) {
-                       $dbw = wfGetDB( DB_MASTER );
-                       if ( $this->getId() ) {
-                               $dbw->insert( 'user_groups',
-                                       array(
-                                               'ug_user' => $this->getID(),
-                                               'ug_group' => $group,
-                                       ),
-                                       __METHOD__,
-                                       array( 'IGNORE' ) );
-                       }
+               if ( !Hooks::run( 'UserAddGroup', array( $this, &$group ) ) ) {
+                       return false;
+               }
+
+               $dbw = wfGetDB( DB_MASTER );
+               if ( $this->getId() ) {
+                       $dbw->insert( 'user_groups',
+                               array(
+                                       'ug_user' => $this->getID(),
+                                       'ug_group' => $group,
+                               ),
+                               __METHOD__,
+                               array( 'IGNORE' ) );
                }
+
                $this->loadGroups();
                $this->mGroups[] = $group;
                // In case loadGroups was not called before, we now have the right twice.
@@ -3034,31 +3038,39 @@ class User implements IDBAccessObject {
                $this->mRights = null;
 
                $this->invalidateCache();
+
+               return true;
        }
 
        /**
         * Remove the user from the given group.
         * This takes immediate effect.
         * @param string $group Name of the group to remove
+        * @return bool
         */
        public function removeGroup( $group ) {
                $this->load();
-               if ( Hooks::run( 'UserRemoveGroup', array( $this, &$group ) ) ) {
-                       $dbw = wfGetDB( DB_MASTER );
-                       $dbw->delete( 'user_groups',
-                               array(
-                                       'ug_user' => $this->getID(),
-                                       'ug_group' => $group,
-                               ), __METHOD__ );
-                       // Remember that the user was in this group
-                       $dbw->insert( 'user_former_groups',
-                               array(
-                                       'ufg_user' => $this->getID(),
-                                       'ufg_group' => $group,
-                               ),
-                               __METHOD__,
-                               array( 'IGNORE' ) );
+               if ( !Hooks::run( 'UserRemoveGroup', array( $this, &$group ) ) ) {
+                       return false;
                }
+
+               $dbw = wfGetDB( DB_MASTER );
+               $dbw->delete( 'user_groups',
+                       array(
+                               'ug_user' => $this->getID(),
+                               'ug_group' => $group,
+                       ), __METHOD__
+               );
+               // Remember that the user was in this group
+               $dbw->insert( 'user_former_groups',
+                       array(
+                               'ufg_user' => $this->getID(),
+                               'ufg_group' => $group,
+                       ),
+                       __METHOD__,
+                       array( 'IGNORE' )
+               );
+
                $this->loadGroups();
                $this->mGroups = array_diff( $this->mGroups, array( $group ) );
 
@@ -3068,6 +3080,8 @@ class User implements IDBAccessObject {
                $this->mRights = null;
 
                $this->invalidateCache();
+
+               return true;
        }
 
        /**
@@ -4739,7 +4753,7 @@ class User implements IDBAccessObject {
                if ( $action === true ) {
                        $action = 'byemail';
                } elseif ( $action === false ) {
-                       if ( $this->getName() == $wgUser->getName() ) {
+                       if ( $this->equals( $wgUser ) ) {
                                $action = 'create';
                        } else {
                                $action = 'create2';
@@ -5024,4 +5038,15 @@ class User implements IDBAccessObject {
                        return Status::newFatal( 'badaccess-group0' );
                }
        }
+
+       /**
+        * Checks if two user objects point to the same user.
+        *
+        * @since 1.25
+        * @param User $user
+        * @return bool
+        */
+       public function equals( User $user ) {
+               return $this->getName() === $user->getName();
+       }
 }
index e931f28..f86a454 100644 (file)
@@ -207,9 +207,9 @@ class WebRequest {
         * @return array
         */
        public static function detectProtocol() {
-               if ( ( isset( $_SERVER['HTTPS'] ) && $_SERVER['HTTPS'] == 'on' ) ||
+               if ( ( !empty( $_SERVER['HTTPS'] ) && $_SERVER['HTTPS'] !== 'off' ) ||
                        ( isset( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) &&
-                       $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https' ) ) {
+                       $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https' ) ) {
                        return 'https';
                } else {
                        return 'http';
index f663cc6..8ad2ad9 100644 (file)
@@ -252,7 +252,7 @@ class ApiEditPage extends ApiBase {
                        'format' => $contentFormat,
                        'model' => $contentHandler->getModelID(),
                        'wpEditToken' => $params['token'],
-                       'wpIgnoreBlankSummary' => '',
+                       'wpIgnoreBlankSummary' => true,
                        'wpIgnoreBlankArticle' => true,
                        'wpIgnoreSelfRedirect' => true,
                );
@@ -462,7 +462,6 @@ class ApiEditPage extends ApiBase {
                        case EditPage::AS_CONFLICT_DETECTED:
                                $this->dieUsageMsg( 'editconflict' );
 
-                       // case EditPage::AS_SUMMARY_NEEDED: Can't happen since we set wpIgnoreBlankSummary
                        case EditPage::AS_TEXTBOX_EMPTY:
                                $this->dieUsageMsg( 'emptynewsection' );
 
@@ -487,6 +486,7 @@ class ApiEditPage extends ApiBase {
                                break;
 
                        case EditPage::AS_SUMMARY_NEEDED:
+                               // Shouldn't happen since we set wpIgnoreBlankSummary, but just in case
                                $this->dieUsageMsg( 'summaryrequired' );
 
                        case EditPage::AS_END:
index 82ed295..9a98054 100644 (file)
@@ -554,6 +554,7 @@ class ApiMain extends ApiBase {
 
                        $response->header( "Access-Control-Allow-Origin: $originHeader" );
                        $response->header( 'Access-Control-Allow-Credentials: true' );
+                       $response->header( "Timing-Allow-Origin: $originHeader" ); # http://www.w3.org/TR/resource-timing/#timing-allow-origin
 
                        if ( !$preflight ) {
                                $response->header( 'Access-Control-Expose-Headers: MediaWiki-API-Error, Retry-After, X-Database-Lag' );
index a658309..281f838 100644 (file)
@@ -179,9 +179,9 @@ abstract class ApiQueryRevisionsBase extends ApiQueryGeneratorBase {
                        }
                        if ( $revision->userCan( Revision::DELETED_USER, $user ) ) {
                                if ( $this->fld_user ) {
-                                       $vals['user'] = $revision->getRawUserText();
+                                       $vals['user'] = $revision->getUserText( Revision::RAW );
                                }
-                               $userid = $revision->getRawUser();
+                               $userid = $revision->getUser( Revision::RAW );
                                if ( !$userid ) {
                                        $vals['anon'] = '';
                                }
@@ -228,7 +228,7 @@ abstract class ApiQueryRevisionsBase extends ApiQueryGeneratorBase {
                                $anyHidden = true;
                        }
                        if ( $revision->userCan( Revision::DELETED_COMMENT, $user ) ) {
-                               $comment = $revision->getRawComment();
+                               $comment = $revision->getComment( Revision::RAW );
 
                                if ( $this->fld_comment ) {
                                        $vals['comment'] = $comment;
index fed5a33..aa38564 100644 (file)
@@ -167,9 +167,9 @@ class ApiQueryUserInfo extends ApiQueryBase {
                if ( isset( $this->prop['unreadcount'] ) ) {
                        $dbr = $this->getQuery()->getNamedDB( 'watchlist', DB_SLAVE, 'watchlist' );
 
-                       $sql = $dbr->selectSQLText(
+                       $count = $dbr->selectRowCount(
                                'watchlist',
-                               array( 'dummy' => 1 ),
+                               '1',
                                array(
                                        'wl_user' => $user->getId(),
                                        'wl_notificationtimestamp IS NOT NULL',
@@ -177,7 +177,6 @@ class ApiQueryUserInfo extends ApiQueryBase {
                                __METHOD__,
                                array( 'LIMIT' => self::WL_UNREAD_LIMIT )
                        );
-                       $count = $dbr->selectField( array( 'c' => "($sql)" ), 'COUNT(*)' );
 
                        if ( $count >= self::WL_UNREAD_LIMIT ) {
                                $vals['unreadcount'] = self::WL_UNREAD_LIMIT . '+';
index aa92f1c..d50831a 100644 (file)
@@ -45,5 +45,9 @@
        "apihelp-createaccount-param-password": "Пароль (ігнаруецца, калі выстаўлена $1mailpassword).",
        "apihelp-createaccount-param-domain": "Дамэн для вонкавай аўтэнтыфікацыі (неабавязкова).",
        "apihelp-createaccount-param-token": "Маркер стварэньня рахунку, атрыманы пры першым запыце.",
-       "apihelp-createaccount-param-email": "Адрас электроннай пошты ўдзельніка (неабавязкова)."
+       "apihelp-createaccount-param-email": "Адрас электроннай пошты ўдзельніка (неабавязкова).",
+       "apihelp-createaccount-param-realname": "Сапраўднае імя ўдзельніка (неабавязкова).",
+       "apihelp-createaccount-param-mailpassword": "Калі ўсталяванае любое значэньне, выпадковы пароль будзе дасланы карыстальніку на электронную пошту.",
+       "apihelp-createaccount-param-reason": "Неабавязковая прычына стварэньня рахунку, якая будзе запісаная ў журнал.",
+       "apihelp-createaccount-param-language": "Моўны код, які будзе выстаўлены ўдзельніку па змоўчаньні (неабавязкова, па змоўчаньні мова зьместу)."
 }
index 57b450a..14fae0c 100644 (file)
@@ -2,7 +2,8 @@
        "@metadata": {
                "authors": [
                        "Mormegil",
-                       "YjM"
+                       "YjM",
+                       "Juandev"
                ]
        },
        "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/API:Main_page Dokumentace]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/API:FAQ FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api E-mailová konference]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Oznámení k API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Chyby a požadavky]\n</div>\n<strong>Stav:</strong> Všechny funkce uvedené na této stránce by měly fungovat, ale API se stále aktivně vyvíjí a může se kdykoli změnit. Upozornění na změny získáte přihlášením se k [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ e-mailové konferenci mediawiki-api-announce].\n\n<strong>Chybné požadavky:</strong> Pokud jsou do API zaslány chybné požadavky, bude vrácena HTTP hlavička s klíčem „MediaWiki-API-Error“ a hodnota této hlavičky a chybový kód budou nastaveny na stejnou hodnotu. Více informací najdete na stránce https://www.mediawiki.org/wiki/API:Errors_and_warnings.",
        "apihelp-block-param-anononly": "Zablokovat pouze anonymní uživatele (tj. zakázat editovat anonymně z této IP).",
        "apihelp-block-param-nocreate": "Nedovolit registraci nových uživatelů.",
        "apihelp-block-param-noemail": "Zakázat uživateli posílat e-maily prostřednictvím wiki. (Vyžaduje oprávnění „blockemail“.)",
+       "apihelp-block-param-hidename": "Skrýt uživatelské jméno v knize zablokování. (Vyžaduje oprávnění „hideuser“.)",
        "apihelp-block-param-allowusertalk": "Povolit uživateli editovat svou vlastní diskusní stránku (závisí na $wgBlockAllowsUTEdit).",
        "apihelp-block-param-reblock": "Pokud již uživatel blokován je, přepsat současný blok.",
        "apihelp-block-param-watchuser": "Sledovat uživatelskou a diskusní stranu tohoto uživatele nebo adresy IP.",
+       "apihelp-block-example-ip-simple": "Zablokovat IP 192.0.2.5 na tři dny s důvodem „First strike“",
        "apihelp-block-example-user-complex": "Trvale zablokovat uživatele Vandal s odůvodněním „Vandalism“ a bránit vytváření nových účtů a e-mailování",
        "apihelp-compare-description": "Vrátí rozdíl dvou stránek.\n\nVe „from“ a „to“ musíte zadat číslo revize, název stránky nebo ID stránky.",
        "apihelp-compare-param-fromtitle": "Název první stránky k porovnání.",
        "apihelp-createaccount-param-realname": "Skutečné jméno uživatele (nepovinné).",
        "apihelp-createaccount-param-mailpassword": "Pokud je nastaveno na libovolnou hodnotu, zašle se náhodně vygenerované heslo na e-mail uživatele.",
        "apihelp-delete-description": "Smazat stránku.",
+       "apihelp-edit-param-minor": "Malá editace.",
+       "apihelp-edit-param-notminor": "Nemalá editace.",
+       "apihelp-edit-param-bot": "Označit tuto editaci jako editaci bota.",
+       "apihelp-edit-param-createonly": "Needitovat stránku, pokud již existuje.",
+       "apihelp-edit-param-watch": "Přidat stránku na váš seznam sledovaných stránek.",
+       "apihelp-edit-param-unwatch": "Odstranit stránku z vašeho seznamu sledovaných stránek.",
        "apihelp-help-description": "Zobrazuje nápovědu k uvedeným modulům.",
        "apihelp-help-param-modules": "Moduly, pro které se má zobrazit nápověda (hodnoty parametrů action= a format= nebo „main“). Submoduly lze zadávat pomocí „+“.",
        "apihelp-help-param-submodules": "Zahrnout nápovědu pro podmoduly uvedeného modulu.",
index cba687b..c83058d 100644 (file)
        "apihelp-query+filearchive-param-dir": "The direction in which to list.",
        "apihelp-query+filearchive-param-sha1": "SHA1 hash of image. Overrides $1sha1base36.",
        "apihelp-query+filearchive-param-sha1base36": "SHA1 hash of image in base 36 (used in MediaWiki).",
-       "apihelp-query+filearchive-param-prop": "Which image information to get:\n;sha1:Adds SHA-1 hash for the image.\n;timestamp:Adds timestamp for the uploaded version.\n;user:Adds user who uploaded the image version.\n;size:Adds the size of the image in bytes and the height, width and page count (if applicable).\n;dimensions:Alias for size.\n;description:Adds description the image version.\n;parseddescription:Parse the description on the version.\n;mime:Adds MIME of the image.\n;mediatype:Adds the media type of the image.\n;metadata:Lists Exif metadata for the version of the image.\n;bitdepth:Adds the bit depth of the version.\n;archivename:Adds the file name of the archive version for non-latest versions.",
+       "apihelp-query+filearchive-param-prop": "Which image information to get:\n;sha1:Adds SHA-1 hash for the image.\n;timestamp:Adds timestamp for the uploaded version.\n;user:Adds user who uploaded the image version.\n;size:Adds the size of the image in bytes and the height, width and page count (if applicable).\n;dimensions:Alias for size.\n;description:Adds description the image version.\n;parseddescription:Parse the description on the version.\n;mime:Adds MIME of the image.\n;mediatype:Adds the media type of the image.\n;metadata:Lists Exif metadata for the version of the image.\n;bitdepth:Adds the bit depth of the version.\n;archivename:Adds the filename of the archive version for non-latest versions.",
        "apihelp-query+filearchive-example-simple": "Show a list of all deleted files",
 
        "apihelp-query+filerepoinfo-description": "Return meta information about image repositories configured on the wiki.",
        "apihelp-query+imageinfo-paramvalue-prop-metadata":"Lists Exif metadata for the version of the file.",
        "apihelp-query+imageinfo-paramvalue-prop-commonmetadata":"Lists file format generic metadata for the version of the file.",
        "apihelp-query+imageinfo-paramvalue-prop-extmetadata":"Lists formatted metadata combined from multiple sources. Results are HTML formatted.",
-       "apihelp-query+imageinfo-paramvalue-prop-archivename":"Adds the file name of the archive version for non-latest versions.",
+       "apihelp-query+imageinfo-paramvalue-prop-archivename":"Adds the filename of the archive version for non-latest versions.",
        "apihelp-query+imageinfo-paramvalue-prop-bitdepth":"Adds the bit depth of the version.",
        "apihelp-query+imageinfo-paramvalue-prop-uploadwarning":"Used by the Special:Upload page to get information about an existing file. Not intended for use outside MediaWiki core.",
        "apihelp-query+imageinfo-param-limit": "How many file revisions to return per file.",
index 4550a75..7964b15 100644 (file)
@@ -18,6 +18,9 @@
        "apihelp-compare-param-fromtitle": "Primer título para comparar",
        "apihelp-createaccount-description": "Crear una nueva cuenta de usuario.",
        "apihelp-createaccount-param-name": "Nombre de usuario.",
+       "apihelp-createaccount-param-email": "Dirección de correo electrónico del usuario (opcional).",
+       "apihelp-createaccount-param-realname": "Nombre verdadero del usuario (opcional).",
+       "apihelp-createaccount-example-pass": "Crear cuenta de usuario «testuser» con la contraseña «test123»",
        "apihelp-delete-description": "Borrar una página.",
        "apihelp-delete-param-watch": "Añadir esta página a tu lista de seguimiento.",
        "apihelp-delete-param-unwatch": "Borrar esta página de tu lista de seguimiento.",
        "apihelp-edit-param-notminor": "Edición no menor.",
        "apihelp-edit-param-bot": "Marcar esta edición como de bot.",
        "apihelp-edit-param-createonly": "No editar la página si ya existe.",
+       "apihelp-edit-param-nocreate": "Producir un error si la página no existe.",
        "apihelp-edit-param-watch": "Añadir la página a tu lista de seguimiento.",
        "apihelp-edit-param-unwatch": "Quitar la página de tu lista de seguimiento.",
        "apihelp-edit-example-edit": "Editar una página",
+       "apihelp-edit-example-prepend": "Anteponer _&#95;NOTOC_&#95; a una página",
+       "apihelp-edit-example-undo": "Deshacer intervalo de revisiones 13579-13585 con resumen automático",
        "apihelp-emailuser-description": "Enviar un mensaje de correo electrónico a un usuario.",
+       "apihelp-emailuser-param-target": "Cuenta de usuario destinatario.",
+       "apihelp-emailuser-param-subject": "Encabezamiento de asunto.",
+       "apihelp-emailuser-param-text": "Cuerpo del mensaje.",
+       "apihelp-emailuser-param-ccme": "Enviarme una copia de este mensaje.",
        "apihelp-expandtemplates-param-title": "Título de la página.",
        "apihelp-expandtemplates-param-text": "Sintaxis wiki que se convertirá.",
        "apihelp-feedcontributions-description": "Devuelve el canal de contribuciones de un usuario.",
        "apihelp-feedcontributions-param-year": "A partir del año (y anteriores).",
        "apihelp-feedcontributions-param-month": "A partir del mes (y anteriores).",
        "apihelp-feedcontributions-param-deletedonly": "Mostrar solo las contribuciones borradas.",
+       "apihelp-feedrecentchanges-param-feedformat": "El formato del canal.",
+       "apihelp-feedrecentchanges-param-from": "Mostrar los cambios realizados a partir de entonces.",
        "apihelp-feedrecentchanges-param-hideminor": "Ocultar cambios menores.",
+       "apihelp-feedrecentchanges-param-hidebots": "Ocultar los cambios realizados por bots.",
+       "apihelp-feedrecentchanges-param-hideanons": "Ocultar los cambios realizados por usuarios anónimos.",
+       "apihelp-feedrecentchanges-param-hideliu": "Ocultar los cambios realizados por usuarios registrados.",
+       "apihelp-feedrecentchanges-param-hidepatrolled": "Ocultar los cambios patrullados.",
+       "apihelp-feedrecentchanges-param-hidemyself": "Ocultar los cambios realizados por ti.",
+       "apihelp-feedrecentchanges-param-tagfilter": "Filtrar por etiquetas.",
+       "apihelp-feedrecentchanges-param-target": "Mostrar solo los cambios en las páginas enlazadas en esta.",
+       "apihelp-feedrecentchanges-param-showlinkedto": "Mostrar los cambios en páginas enlazadas con la página seleccionada.",
+       "apihelp-feedrecentchanges-example-simple": "Mostrar los cambios recientes",
+       "apihelp-feedrecentchanges-example-30days": "Mostrar los cambios recientes limitados a 30 días",
+       "apihelp-feedwatchlist-description": "Devuelve el canal de una lista de seguimiento.",
+       "apihelp-feedwatchlist-param-feedformat": "El formato del canal.",
+       "apihelp-filerevert-description": "Revertir el archivo a una versión anterior.",
+       "apihelp-filerevert-param-filename": "Nombre de archivo final, sin el prefijo Archivo:",
+       "apihelp-filerevert-param-comment": "Comentario de carga.",
+       "apihelp-help-example-main": "Ayuda del módulo principal",
+       "apihelp-help-example-recursive": "Toda la ayuda en una página",
+       "apihelp-help-example-help": "Ayuda del módulo de ayuda en sí",
+       "apihelp-imagerotate-description": "Girar una o más imágenes.",
        "apihelp-import-param-summary": "Resumen de importación.",
+       "apihelp-import-param-xml": "Se cargó el archivo XML.",
+       "apihelp-import-param-rootpage": "Importar como subpágina de esta página.",
        "apihelp-login-param-name": "Nombre de usuario.",
        "apihelp-login-param-password": "Contraseña.",
        "apihelp-login-param-domain": "Dominio (opcional).",
+       "apihelp-login-example-login": "Acceder",
+       "apihelp-logout-description": "Salir y vaciar los datos de la sesión.",
+       "apihelp-logout-example-logout": "Cerrar la sesión del usuario actual",
        "apihelp-move-description": "Mover una página.",
+       "apihelp-move-param-reason": "Motivo del traslado.",
+       "apihelp-move-param-movetalk": "Trasladar la página de discusión si existe.",
+       "apihelp-move-param-movesubpages": "Trasladar las subpáginas si procede.",
+       "apihelp-move-param-noredirect": "No crear una redirección.",
+       "apihelp-move-param-watch": "Añadir la página y su redirección a tu lista de seguimiento.",
+       "apihelp-move-param-unwatch": "Quitar la página y su redirección de tu lista de seguimiento.",
+       "apihelp-move-param-ignorewarnings": "Ignorar cualquier aviso.",
+       "apihelp-opensearch-description": "Buscar en el wiki mediante el protocolo OpenSearch.",
        "apihelp-opensearch-param-search": "Buscar cadena.",
        "apihelp-options-example-reset": "Restablecer todas las preferencias",
        "apihelp-patrol-example-rcid": "Patrullar un cambio reciente",
        "apihelp-patrol-example-revid": "Patrullar una revisión",
+       "apihelp-protect-param-reason": "Motivo de la (des)protección.",
        "apihelp-protect-example-protect": "Proteger una página",
+       "apihelp-query+allimages-param-sha1": "Suma SHA1 de la imagen. Invalida $1sha1base36.",
+       "apihelp-query+allimages-param-sha1base36": "Suma SHA1 de la imagen en base 36 (usada en MediaWiki).",
        "apihelp-query+allusers-param-activeusers": "Solo listar usuarios activos en {{PLURAL:$1|el último día|los $1 últimos días}}.",
        "apihelp-query+images-description": "Devuelve todos los archivos contenidos en las páginas dadas.",
        "apihelp-query+search-param-info": "Qué metadatos devolver.",
index e3e46e2..ca6f4c8 100644 (file)
@@ -10,6 +10,7 @@
        "apihelp-imagerotate-description": "Irudi bat edo gehiago biratu.",
        "apihelp-login-param-password": "Pasahitza.",
        "apihelp-login-param-domain": "Domeinua (hautazkoa).",
+       "apihelp-login-example-login": "Saioa hasi",
        "apihelp-move-description": "Orrialde bat mugitu",
        "apihelp-protect-example-protect": "Orrialde bat babestu",
        "api-help-main-header": "Modulu nagusia",
diff --git a/includes/api/i18n/frc.json b/includes/api/i18n/frc.json
new file mode 100644 (file)
index 0000000..27ff6dd
--- /dev/null
@@ -0,0 +1,19 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Hangmanwa7id"
+               ]
+       },
+       "apihelp-block-description": "Bloquer un useur.",
+       "apihelp-createaccount-param-name": "Nom d'useur.",
+       "apihelp-createaccount-param-password": "Mot de passe (ignoré si $1mailpassword est défini).",
+       "apihelp-createaccount-param-domain": "Domaine pour l’authentification externe (optional).",
+       "apihelp-delete-description": "Effacer une page.",
+       "apihelp-delete-param-title": "Titre de la page que tu veux effacer. Impossible de l’user avec $1pageid.",
+       "apihelp-delete-example-simple": "Effacer la Page principale",
+       "apihelp-emailuser-description": "Emailer un useur.",
+       "apihelp-expandtemplates-param-title": "Titre de la page.",
+       "apihelp-login-param-name": "Nom d’useur.",
+       "apihelp-login-param-password": "Mot de passe.",
+       "apihelp-login-param-domain": "Domaine (optional)."
+}
diff --git a/includes/api/i18n/hsb.json b/includes/api/i18n/hsb.json
new file mode 100644 (file)
index 0000000..b25ae9b
--- /dev/null
@@ -0,0 +1,8 @@
+{
+       "@metadata": {
+               "authors": [
+                       "J budissin"
+               ]
+       },
+       "apihelp-main-param-format": "Wudawanski format"
+}
index f6c9a61..99aeb0f 100644 (file)
@@ -10,6 +10,7 @@
        "apihelp-main-param-format": "O formato de saída.",
        "apihelp-block-description": "Bloquear um utilizador.",
        "apihelp-block-param-user": "Nome de utilizador(a), endereço ou gama de IP que pretende bloquear.",
+       "apihelp-block-param-reason": "Motivo do bloqueio.",
        "apihelp-block-param-nocreate": "Impedir criação de contas.",
        "apihelp-createaccount-description": "Criar uma nova conta.",
        "apihelp-createaccount-param-name": "Nome de utilizador(a).",
        "apihelp-edit-param-minor": "Edição menor.",
        "apihelp-edit-param-bot": "Marcar esta edição como robô.",
        "apihelp-edit-example-edit": "Editar uma página",
+       "apihelp-emailuser-description": "Enviar correio eletrónico a utilizador.",
+       "apihelp-emailuser-param-subject": "Assunto.",
+       "apihelp-emailuser-param-text": "Texto.",
        "apihelp-expandtemplates-param-title": "Título da página.",
+       "apihelp-feedcontributions-param-feedformat": "O formato do feed.",
        "apihelp-feedcontributions-param-deletedonly": "Mostrar apenas contribuições eliminadas.",
        "apihelp-feedcontributions-param-showsizediff": "Mostrar diferença de tamanho entre edições.",
+       "apihelp-feedrecentchanges-param-feedformat": "O formato do feed.",
        "apihelp-feedrecentchanges-param-limit": "Número máximo de resultados a apresentar.",
        "apihelp-feedrecentchanges-param-from": "Mostrar alterações desde então.",
        "apihelp-feedrecentchanges-param-hideminor": "Ocultar edições menores.",
        "api-help-param-deprecated": "Obsoleto.",
        "api-help-param-required": "Este parâmetro é obrigatório.",
        "api-help-param-multi-separate": "Separe os valores com \"|\".",
+       "api-help-param-default": "Padrão: $1",
+       "api-help-param-default-empty": "Padrão: <span class=\"apihelp-empty\">(vazio)</span>",
        "api-help-param-no-description": "<span class=\"apihelp-empty\">(sem descrição)</span>",
        "api-help-examples": "{{PLURAL:$1|Exemplo|Exemplos}}:",
+       "api-help-permissions": "{{PLURAL:$1|Permissão|Permissiões}}:",
+       "api-help-permissions-granted-to": "{{PLURAL:$1|Concedida a|Concedidas a}}: $2",
        "api-credits-header": "Créditos",
        "api-credits": "Programadores API:\n* Roan Kattouw (programador principal Set 2007–2009)\n* Victor Vasiliev\n* Bryan Tong Minh\n* Sam Reed\n* Yuri Astrakhan (criador, programador-líder Set 2006–Set 2007)\n* Brad Jorsch (programador-líder 2013–presente)\n\nPor favor, envie os seus comentários, sugestões e perguntas para mediawiki-api@lists.wikimedia.org ou reporte um erro técnico em https://phabricator.wikimedia.org/."
 }
index a60fa56..01b2718 100644 (file)
@@ -7,7 +7,8 @@
                        "Papapasan",
                        "LNDDYL",
                        "Shizhao",
-                       "Yfdyh000"
+                       "Yfdyh000",
+                       "JuneAugsut"
                ]
        },
        "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [https://www.mediawiki.org/wiki/API:Main_page/zh 文档]\n* [https://www.mediawiki.org/wiki/API:FAQ/zh 常见问题]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api 邮件列表]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API公告]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R 程序错误与功能请求]\n</div>\n<strong>状态信息:</strong> 本页所展示的所有特性都应正常工作,但是API仍在开发当中,将会随时变化。请订阅[https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ mediawiki-api-announce 邮件列表]以便获得更新通知。\n\n<strong>错误请求:</strong> 当API收到错误请求时,HTTP header将会返回一个包含\"MediaWiki-API-Error\"的值,随后header的值与error code将会送回并设置为相同的值。详细信息请参阅 https://www.mediawiki.org/wiki/API:Errors_and_warnings 。",
@@ -81,7 +82,7 @@
        "apihelp-edit-param-bot": "标记此编辑为机器人编辑。",
        "apihelp-edit-param-basetimestamp": "基础修订的时间戳,用于检测编辑冲突。也许可以通过[[Special:ApiHelp/query+revisions|action=query&prop=revisions&rvprop=timestamp]]得到。",
        "apihelp-edit-param-starttimestamp": "您开始编辑过程的时间戳,用于检测编辑冲突。当开始编辑过程时(例如当加载要编辑的页面时)使用[[Special:ApiHelp/main|curtimestamp]]可能取得一个适当的值。",
-       "apihelp-edit-param-recreate": "覆盖有关同时删除的条目的任何错误。",
+       "apihelp-edit-param-recreate": "覆盖有关该页面在此期间已被删除的任何错误。",
        "apihelp-edit-param-createonly": "不要编辑页面,如果已经存在。",
        "apihelp-edit-param-nocreate": "如果该页面不存在,则抛出一个错误。",
        "apihelp-edit-param-watch": "将页面加入您的监视列表。",
        "apihelp-filerevert-description": "回退一个文件至某一旧版本。",
        "apihelp-filerevert-param-filename": "目标文件名,不包含前缀“File:”。",
        "apihelp-filerevert-param-comment": "上传评论。",
+       "apihelp-filerevert-param-archivename": "恢复到修订版存档名称。",
        "apihelp-filerevert-example-revert": "回退Wiki.png至2011-03-05T15:27:40Z的版本",
        "apihelp-help-description": "显示指定模块的帮助。",
        "apihelp-help-param-submodules": "包括给定名称模块的子模块的帮助。",
        "apihelp-query+allimages-example-B": "显示以字母“B”开始的文件列表",
        "apihelp-query+allimages-example-mimetypes": "显示带MIME类型<kbd>image/png</kbd>或<kbd>image/gif</kbd>的文件列表",
        "apihelp-query+allimages-example-generator": "显示有关4个以“T”开头的文件的信息",
+       "apihelp-query+alllinks-param-namespace": "要列举的名字空间。",
+       "apihelp-query+alllinks-param-limit": "总共要返回多少个项目。",
+       "apihelp-query+alllinks-param-dir": "列出方向。",
+       "apihelp-query+alllinks-example-unique": "列出唯一的链接标题",
        "apihelp-query+alllinks-example-generator": "获取包含这些链接的页面",
        "apihelp-query+allmessages-description": "返回来自该站点的消息。",
        "apihelp-query+allmessages-param-messages": "要输出的哪些消息。\"*\" (默认值) 表示所有消息。",
        "apihelp-query+allmessages-param-prefix": "返回带有该前缀的消息。",
        "apihelp-query+allmessages-example-ipb": "显示以“ipb-”开始的消息",
        "apihelp-query+allmessages-example-de": "显示德语版的“八月”和“首页”消息",
+       "apihelp-query+allpages-param-namespace": "要列举的名字空间。",
        "apihelp-query+allpages-param-filterredir": "要列出哪些页面。",
        "apihelp-query+allpages-param-minsize": "限于至少这么多字节的页面。",
        "apihelp-query+allpages-param-maxsize": "限于至多这么多字节的页面。",
        "api-format-title": "MediaWiki API 结果",
        "api-format-prettyprint-header": "您正在查看$1格式的HTML表示。HTML对调试很有用,但不适合应用程序使用。\n\n指定格式参数以更改输出格式。要查看$1格式的非HTML表示,设置format=$2。\n\n参见[https://www.mediawiki.org/wiki/Special:MyLanguage/API 完整文档],或[[Special:ApiHelp/main|API帮助]]以获取更多信息。",
        "api-orm-param-props": "要查询的字段。",
+       "api-orm-param-limit": "返回的总行数。",
        "api-help-title": "MediaWiki API 帮助",
        "api-help-lead": "这是自动生成的MediaWiki API文档页面。\n\n文档和例子:https://www.mediawiki.org/wiki/API:Main_page/zh",
        "api-help-main-header": "主模块",
index 1dedfdd..460ee1f 100644 (file)
        "apihelp-expandtemplates-description": "展開所有於 wikitext 中模板。",
        "apihelp-expandtemplates-param-title": "頁面標題。",
        "apihelp-expandtemplates-param-text": "要轉換的 Wikitext。",
+       "apihelp-feedrecentchanges-example-simple": "顯示近期變動",
+       "apihelp-feedrecentchanges-example-30days": "顯示近期30天內的變動",
+       "apihelp-filerevert-param-comment": "上載意見。",
+       "apihelp-help-example-main": "主模組使用說明",
+       "apihelp-import-param-xml": "上載的 XML 檔。",
+       "apihelp-import-param-interwikisource": "用於跨 wiki 匯入:匯入的來源 wiki。",
+       "apihelp-import-param-interwikipage": "用於跨 wiki 匯入:匯入的頁面。",
+       "apihelp-import-param-fullhistory": "用於跨 wiki 匯入:完整匯入歷史,而不只是最新版本。",
+       "apihelp-import-param-templates": "用於跨 wiki 匯入:匯入一切包含的模板。",
+       "apihelp-import-param-namespace": "用於跨 wiki 匯入:匯入至此命名空間。",
+       "apihelp-import-param-rootpage": "匯入作為此頁面的子頁面。",
        "apihelp-login-param-name": "使用者名稱。",
+       "apihelp-login-param-password": "密碼。",
+       "apihelp-login-param-domain": "網域名稱(可選)。",
        "apihelp-login-example-login": "登入",
+       "apihelp-logout-description": "登出並清除 session 資料。",
+       "apihelp-logout-example-logout": "登出當前使用者",
        "apihelp-move-description": "移動頁面。",
        "apihelp-opensearch-param-search": "搜尋字串。",
        "apihelp-options-example-reset": "重設所有偏好設定",
index c719d8d..86cd1d7 100644 (file)
@@ -450,7 +450,7 @@ class RecentChange {
                }
                // Users without the 'autopatrol' right can't patrol their
                // own revisions
-               if ( $user->getName() == $this->getAttribute( 'rc_user_text' )
+               if ( $user->getName() === $this->getAttribute( 'rc_user_text' )
                        && !$user->isAllowed( 'autopatrol' )
                ) {
                        $errors[] = array( 'markedaspatrollederror-noautopatrol' );
index df90f22..1d9ee33 100644 (file)
@@ -2,8 +2,6 @@
 /**
  * JSON Content Model
  *
- * This class requires the root structure to be an object (not primitives or arrays).
- *
  * @file
  *
  * @author Ori Livneh <ori@wikimedia.org>
@@ -41,7 +39,10 @@ class JsonContent extends TextContent {
        }
 
        /**
-        * Decodes the JSON string into a PHP object.
+        * Decodes the JSON string.
+        *
+        * Note that this parses it without casting objects to associative arrays.
+        * Objects and arrays are kept as distinguishable types in the PHP values.
         *
         * @return Status
         */
@@ -56,7 +57,7 @@ class JsonContent extends TextContent {
         * @return bool Whether content is valid.
         */
        public function isValid() {
-               return $this->getData()->isGood() && is_object( $this->getData()->getValue() );
+               return $this->getData()->isGood();
        }
 
        /**
@@ -103,7 +104,7 @@ class JsonContent extends TextContent {
                // FIXME: WikiPage::doEditContent generates parser output before validation.
                // As such, native data may be invalid (though output is discarded later in that case).
                if ( $generateHtml && $this->isValid() ) {
-                       $output->setText( $this->objectTable( $this->getData()->getValue() ) );
+                       $output->setText( $this->rootValueTable( $this->getData()->getValue() ) );
                        $output->addModuleStyles( 'mediawiki.content.json' );
                } else {
                        $output->setText( '' );
@@ -111,9 +112,35 @@ class JsonContent extends TextContent {
        }
 
        /**
-        * Construct an HTML representation of a JSON object.
+        * Construct HTML table representation of any JSON value.
         *
-        * Called recursively via valueCell().
+        * See also valueCell, which is similar.
+        *
+        * @param mixed $val
+        * @return string HTML.
+        */
+       protected function rootValueTable( $val ) {
+               if ( is_object( $val ) ) {
+                       return self::objectTable( $val );
+               }
+
+               if ( is_array( $val ) ) {
+                       // Wrap arrays in another array so that they're visually boxed in a container.
+                       // Otherwise they are visually indistinguishable from a single value.
+                       return self::arrayTable( array( $val ) );
+               }
+
+               return Html::rawElement( 'table', array( 'class' => 'mw-json mw-json-single-value' ),
+                       Html::rawElement( 'tbody', array(),
+                               Html::rawElement( 'tr', array(),
+                                       Html::element( 'td', array(), self::primitiveValue( $val ) )
+                               )
+                       )
+               );
+       }
+
+       /**
+        * Create HTML table representing a JSON object.
         *
         * @param stdClass $mapping
         * @return string HTML
@@ -134,26 +161,25 @@ class JsonContent extends TextContent {
                        );
                }
                return Html::rawElement( 'table', array( 'class' => 'mw-json' ),
-                       Html::rawElement( 'tbody', array(), join( "\n", $rows ) )
+                       Html::rawElement( 'tbody', array(), join( '', $rows ) )
                );
        }
 
        /**
-        * Construct HTML representation of a single key-value pair.
+        * Create HTML table row representing one object property.
+        *
         * @param string $key
         * @param mixed $val
         * @return string HTML.
         */
        protected function objectRow( $key, $val ) {
-               $th = Xml::elementClean( 'th', array(), $key );
+               $th = Html::element( 'th', array(), $key );
                $td = self::valueCell( $val );
                return Html::rawElement( 'tr', array(), $th . $td );
        }
 
        /**
-        * Constructs an HTML representation of a JSON array.
-        *
-        * Called recursively via valueCell().
+        * Create HTML table representing a JSON array.
         *
         * @param array $mapping
         * @return string HTML
@@ -179,7 +205,8 @@ class JsonContent extends TextContent {
        }
 
        /**
-        * Construct HTML representation of a single array value.
+        * Create HTML table row representing the value in an array.
+        *
         * @param mixed $val
         * @return string HTML.
         */
@@ -189,7 +216,8 @@ class JsonContent extends TextContent {
        }
 
        /**
-        * Construct HTML representation of a single value.
+        * Construct HTML table cell representing any JSON value.
+        *
         * @param mixed $val
         * @return string HTML.
         */
@@ -197,15 +225,26 @@ class JsonContent extends TextContent {
                if ( is_object( $val ) ) {
                        return Html::rawElement( 'td', array(), self::objectTable( $val ) );
                }
+
                if ( is_array( $val ) ) {
                        return Html::rawElement( 'td', array(), self::arrayTable( $val ) );
                }
+
+               return Html::element( 'td', array( 'class' => 'value' ), self::primitiveValue( $val ) );
+       }
+
+       /**
+        * Construct text representing a JSON primitive value.
+        *
+        * @param mixed $val
+        * @return string Text.
+        */
+       protected function primitiveValue( $val ) {
                if ( is_string( $val ) ) {
-                       $val = '"' . $val . '"';
-               } else {
-                       $val = FormatJson::encode( $val );
+                       // Don't FormatJson::encode for strings since we want quotes
+                       // and new lines to render visually instead of escaped.
+                       return '"' . $val . '"';
                }
-
-               return Xml::elementClean( 'td', array( 'class' => 'value' ), $val );
+               return FormatJson::encode( $val );
        }
 }
index f02aa93..7b903d6 100644 (file)
@@ -126,19 +126,25 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
                        $this->reportConnectionError( "Error setting character set" );
                }
 
+               // Abstract over any insane MySQL defaults
+               $set = array( 'group_concat_max_len = 262144' );
                // Set SQL mode, default is turning them all off, can be overridden or skipped with null
                if ( is_string( $wgSQLMode ) ) {
-                       $mode = $this->addQuotes( $wgSQLMode );
+                       $set[] = 'sql_mode = ' . $this->addQuotes( $wgSQLMode );
+               }
+
+               if ( $set ) {
                        // Use doQuery() to avoid opening implicit transactions (DBO_TRX)
-                       $success = $this->doQuery( "SET sql_mode = $mode", __METHOD__ );
+                       $success = $this->doQuery( 'SET ' . implode( ', ', $set ), __METHOD__ );
                        if ( !$success ) {
                                wfLogDBError(
-                                       "Error setting sql_mode to $mode on server {db_server}",
+                                       'Error setting MySQL variables on server {db_server} (check $wgSQLMode)',
                                        $this->getLogContext( array(
                                                'method' => __METHOD__,
                                        ) )
                                );
-                               $this->reportConnectionError( "Error setting sql_mode to $mode" );
+                               $this->reportConnectionError(
+                                       'Error setting MySQL variables on server {db_server} (check $wgSQLMode)' );
                        }
                }
 
diff --git a/includes/debug/logger/Factory.php b/includes/debug/logger/Factory.php
new file mode 100644 (file)
index 0000000..2660b92
--- /dev/null
@@ -0,0 +1,115 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+
+/**
+ * PSR-3 logger instance factory.
+ *
+ * Creation of \Psr\Log\LoggerInterface instances is managed via the
+ * MWLoggerFactory::getInstance() static method which in turn delegates to the
+ * currently registered service provider.
+ *
+ * A service provider is any class implementing the MWLoggerSpi interface.
+ * There are two possible methods of registering a service provider. The
+ * MWLoggerFactory::registerProvider() static method can be called at any time
+ * to change the service provider. If MWLoggerFactory::getInstance() is called
+ * before any service provider has been registered, it will attempt to use the
+ * $wgMWLoggerDefaultSpi global to bootstrap MWLoggerSpi registration.
+ * $wgMWLoggerDefaultSpi is expected to be an array usable by
+ * ObjectFactory::getObjectFromSpec() to create a class.
+ *
+ * @see MWLoggerSpi
+ * @since 1.25
+ * @author Bryan Davis <bd808@wikimedia.org>
+ * @copyright © 2014 Bryan Davis and Wikimedia Foundation.
+ */
+class MWLoggerFactory {
+
+       /**
+        * Service provider.
+        * @var MWLoggerSpi $spi
+        */
+       private static $spi;
+
+
+       /**
+        * Register a service provider to create new \Psr\Log\LoggerInterface
+        * instances.
+        *
+        * @param MWLoggerSpi $provider Provider to register
+        */
+       public static function registerProvider( MWLoggerSpi $provider ) {
+               self::$spi = $provider;
+       }
+
+
+       /**
+        * Get the registered service provider.
+        *
+        * If called before any service provider has been registered, it will
+        * attempt to use the $wgMWLoggerDefaultSpi global to bootstrap
+        * MWLoggerSpi registration. $wgMWLoggerDefaultSpi is expected to be an
+        * array usable by ObjectFactory::getObjectFromSpec() to create a class.
+        *
+        * @return MWLoggerSpi
+        * @see registerProvider()
+        * @see ObjectFactory::getObjectFromSpec()
+        */
+       public static function getProvider() {
+               if ( self::$spi === null ) {
+                       global $wgMWLoggerDefaultSpi;
+                       $provider = ObjectFactory::getObjectFromSpec(
+                               $wgMWLoggerDefaultSpi
+                       );
+                       self::registerProvider( $provider );
+               }
+               return self::$spi;
+       }
+
+
+       /**
+        * Get a named logger instance from the currently configured logger factory.
+        *
+        * @param string $channel Logger channel (name)
+        * @return \Psr\Log\LoggerInterface
+        */
+       public static function getInstance( $channel ) {
+               if ( !interface_exists( '\Psr\Log\LoggerInterface' ) ) {
+                       $message = <<<TXT
+MediaWiki requires the <a href="https://github.com/php-fig/log">PSR-3 logging library</a> to be present. This library is not embedded directly in MediaWiki's git repository and must be installed separately by the end user.
+
+Please see <a href="https://www.mediawiki.org/wiki/Download_from_Git#Fetch_external_libraries">mediawiki.org</a> for help on installing the required components.
+TXT;
+                       echo $message;
+                       trigger_error( $message, E_USER_ERROR );
+                       die( 1 );
+               }
+
+               return self::getProvider()->getLogger( $channel );
+       }
+
+
+       /**
+        * Construction of utility class is not allowed.
+        */
+       private function __construct() {
+               // no-op
+       }
+}
index 960faef..27cf0cd 100644 (file)
  * @file
  */
 
-if ( !interface_exists( '\Psr\Log\LoggerInterface' ) ) {
-       $message = <<<TXT
-MediaWiki requires the <a href="https://github.com/php-fig/log">PSR-3 logging library</a> to be present. This library is not embedded directly in MediaWiki's git repository and must be installed separately by the end user.
-
-Please see <a href="https://www.mediawiki.org/wiki/Download_from_Git#Fetch_external_libraries">mediawiki.org</a> for help on installing the required components.
-TXT;
-       echo $message;
-       trigger_error( $message, E_USER_ERROR );
-       die( 1 );
-}
 
 /**
- * PSR-3 logging service.
- *
- * This class provides a service interface for logging system events. The
- * MWLogger class itself is intended to be a thin wrapper around another PSR-3
- * compliant logging library. Creation of MWLogger instances is managed via
- * the MWLogger::getInstance() static method which in turn delegates to the
- * currently registered service provider.
+ * Backwards compatibility stub for usage from before the introduction of
+ * MWLoggerFactory.
  *
- * A service provider is any class implementing the MWLoggerSpi interface.
- * There are two possible methods of registering a service provider. The
- * MWLogger::registerProvider() static method can be called at any time to
- * change the service provider. If MWLogger::getInstance() is called before
- * any service provider has been registered, it will attempt to use the
- * $wgMWLoggerDefaultSpi global to bootstrap MWLoggerSpi registration.
- * $wgMWLoggerDefaultSpi is expected to be an array usable by
- * ObjectFactory::getObjectFromSpec() to create a class.
- *
- * @see MWLoggerSpi
- * @since 1.25
- * @author Bryan Davis <bd808@wikimedia.org>
- * @copyright © 2014 Bryan Davis and Wikimedia Foundation.
+ * @deprecated since 1.25 Use MWLoggerFactory
+ * @todo This class should be removed before the 1.25 final release.
  */
-class MWLogger implements \Psr\Log\LoggerInterface {
-
-       /**
-        * Service provider.
-        * @var MWLoggerSpi $spi
-        */
-       protected static $spi;
-
-
-       /**
-        * Wrapped PSR-3 logger instance.
-        *
-        * @var \Psr\Log\LoggerInterface $delegate
-        */
-       protected $delegate;
-
-
-       /**
-        * @param \Psr\Log\LoggerInterface $logger
-        */
-       public function __construct( \Psr\Log\LoggerInterface $logger ) {
-               $this->delegate = $logger;
-       }
-
+class MWLogger {
 
        /**
-        * Logs with an arbitrary level.
-        *
-        * @param string|int $level
-        * @param string $message
-        * @param array $context
-        */
-       public function log( $level, $message, array $context = array() ) {
-               $this->delegate->log( $level, $message, $context );
-       }
-
-
-       /**
-        * System is unusable.
-        *
-        * @param string $message
-        * @param array $context
-        */
-       public function emergency( $message, array $context = array() ) {
-               $this->log( \Psr\Log\LogLevel::EMERGENCY, $message, $context );
-       }
-
-
-       /**
-        * Action must be taken immediately.
-        *
-        * Example: Entire website down, database unavailable, etc. This should
-        * trigger the SMS alerts and wake you up.
-        *
-        * @param string $message
-        * @param array $context
-        */
-       public function alert( $message, array $context = array() ) {
-               $this->log( \Psr\Log\LogLevel::ALERT, $message, $context );
-       }
-
-
-       /**
-        * Critical conditions.
-        *
-        * Example: Application component unavailable, unexpected exception.
-        *
-        * @param string $message
-        * @param array $context
-        */
-       public function critical( $message, array $context = array( ) ) {
-               $this->log( \Psr\Log\LogLevel::CRITICAL, $message, $context );
-       }
-
-
-       /**
-        * Runtime errors that do not require immediate action but should typically
-        * be logged and monitored.
-        *
-        * @param string $message
-        * @param array $context
-        */
-       public function error( $message, array $context = array( ) ) {
-               $this->log( \Psr\Log\LogLevel::ERROR, $message, $context );
-       }
-
-
-       /**
-        * Exceptional occurrences that are not errors.
-        *
-        * Example: Use of deprecated APIs, poor use of an API, undesirable things
-        * that are not necessarily wrong.
-        *
-        * @param string $message
-        * @param array $context
-        */
-       public function warning( $message, array $context = array() ) {
-               $this->log( \Psr\Log\LogLevel::WARNING, $message, $context );
-       }
-
-
-       /**
-        * Normal but significant events.
-        *
-        * @param string $message
-        * @param array $context
-        */
-       public function notice( $message, array $context = array() ) {
-               $this->log( \Psr\Log\LogLevel::NOTICE, $message, $context );
-       }
-
-
-       /**
-        * Interesting events.
-        *
-        * Example: User logs in, SQL logs.
-        *
-        * @param string $message
-        * @param array $context
-        */
-       public function info( $message, array $context = array() ) {
-               $this->log( \Psr\Log\LogLevel::INFO, $message, $context );
-       }
-
-
-       /**
-        * Detailed debug information.
-        *
-        * @param string $message
-        * @param array $context
-        */
-       public function debug( $message, array $context = array() ) {
-               $this->log( \Psr\Log\LogLevel::DEBUG, $message, $context );
-       }
-
-
-       /**
-        * Register a service provider to create new MWLogger instances.
+        * Register a service provider to create new \Psr\Log\LoggerInterface
+        * instances.
         *
         * @param MWLoggerSpi $provider Provider to register
+        * @deprecated since 1.25 Use MWLoggerFactory::registerProvider()
         */
        public static function registerProvider( MWLoggerSpi $provider ) {
-               self::$spi = $provider;
+               MWLoggerFactory::registerProvider( $provider );
        }
 
 
@@ -209,26 +51,22 @@ class MWLogger implements \Psr\Log\LoggerInterface {
         * @return MWLoggerSpi
         * @see registerProvider()
         * @see ObjectFactory::getObjectFromSpec()
+        * @deprecated since 1.25 Use MWLoggerFactory::getProvider()
         */
        public static function getProvider() {
-               if ( self::$spi === null ) {
-                       global $wgMWLoggerDefaultSpi;
-                       $provider = ObjectFactory::getObjectFromSpec(
-                               $wgMWLoggerDefaultSpi
-                       );
-                       self::registerProvider( $provider );
-               }
-               return self::$spi;
+               return MWLoggerFactory::getProvider();
        }
 
+
        /**
         * Get a named logger instance from the currently configured logger factory.
         *
         * @param string $channel Logger channel (name)
-        * @return MWLogger
+        * @return \Psr\Log\LoggerInterface
+        * @deprecated since 1.25 Use MWLoggerFactory::getInstance()
         */
        public static function getInstance( $channel ) {
-               return self::getProvider()->getLogger( $channel );
+               return MWLoggerFactory::getInstance( $channel );
        }
 
 }
index f725b64..617842c 100644 (file)
  * @file
  */
 
+
 /**
- * MWLogger service provider that creates \Psr\Log\NullLogger instances.
- * A NullLogger silently discards all log events sent to it.
+ * MWLoggerFactory service provider that creates \Psr\Log\NullLogger
+ * instances. A NullLogger silently discards all log events sent to it.
  *
  * Usage:
  * @code
@@ -29,7 +30,7 @@
  * );
  * @endcode
  *
- * @see MWLogger
+ * @see MWLoggerFactory
  * @since 1.25
  * @author Bryan Davis <bd808@wikimedia.org>
  * @copyright © 2014 Bryan Davis and Wikimedia Foundation.
@@ -51,7 +52,7 @@ class MWLoggerNullSpi implements MWLoggerSpi {
         * Get a logger instance.
         *
         * @param string $channel Logging channel
-        * @return MWLogger Logger instance
+        * @return \Psr\Log\NullLogger Logger instance
         */
        public function getLogger( $channel ) {
                return $this->singleton;
index cd4af9c..cd9f17f 100644 (file)
  */
 
 /**
- * Service provider interface for MWLogger implementation libraries.
+ * Service provider interface for \Psr\Log\LoggerInterface implementation
+ * libraries.
  *
  * MediaWiki can be configured to use a class implementing this interface to
- * create new MWLogger instances via either the $wgMWLoggerDefaultSpi global
- * variable or code that constructs an instance and registeres it via the
- * MWLogger::registerProvider() static method.
+ * create new \Psr\Log\LoggerInterface instances via either the
+ * $wgMWLoggerDefaultSpi global variable or code that constructs an instance
+ * and registers it via the MWLoggerFactory::registerProvider() static method.
  *
- * @see MWLogger
+ * @see MWLoggerFactory
  * @since 1.25
  * @author Bryan Davis <bd808@wikimedia.org>
  * @copyright © 2014 Bryan Davis and Wikimedia Foundation.
@@ -37,7 +38,7 @@ interface MWLoggerSpi {
         * Get a logger instance.
         *
         * @param string $channel Logging channel
-        * @return MWLogger Logger instance
+        * @return \Psr\Log\LoggerInterface Logger instance
         */
        public function getLogger( $channel );
 
index 0737770..be46c27 100644 (file)
@@ -31,7 +31,7 @@
  * See documentation in DefaultSettings.php for detailed explanations of each
  * variable.
  *
- * @see MWLogger
+ * @see MWLoggerFactory
  * @since 1.25
  * @author Bryan Davis <bd808@wikimedia.org>
  * @copyright © 2014 Bryan Davis and Wikimedia Foundation.
index b8813aa..79d4f24 100644 (file)
@@ -19,7 +19,8 @@
  */
 
 /**
- * MWLogger service provider that creates MWLoggerLegacyLogger instances.
+ * MWLoggerFactory service provider that creates MWLoggerLegacyLogger
+ * instances.
  *
  * Usage:
  * @code
@@ -28,7 +29,7 @@
  * );
  * @endcode
  *
- * @see MWLogger
+ * @see MWLoggerFactory
  * @since 1.25
  * @author Bryan Davis <bd808@wikimedia.org>
  * @copyright © 2014 Bryan Davis and Wikimedia Foundation.
@@ -45,7 +46,7 @@ class MWLoggerLegacySpi implements MWLoggerSpi {
         * Get a logger instance.
         *
         * @param string $channel Logging channel
-        * @return MWLogger Logger instance
+        * @return \Psr\Log\LoggerInterface Logger instance
         */
        public function getLogger( $channel ) {
                if ( !isset( $this->singletons[$channel] ) ) {
index 6f6aa72..a9f83b0 100644 (file)
@@ -40,7 +40,7 @@ use Monolog\Formatter\FormatterInterface;
  *         'class' => 'MWLoggerMonologSamplingHandler',
  *         'args' => array(
  *           function() {
- *             return MWLogger::getProvider()->getHandler( 'some-handler');
+ *             return MWLoggerFactory::getProvider()->getHandler( 'some-handler');
  *           },
  *           2, // emit logs with a 1:2 chance
  *         ),
index 121dbe4..68acf1d 100644 (file)
@@ -19,7 +19,8 @@
  */
 
 /**
- * MWLogger service provider that creates loggers implemented by Monolog.
+ * MWLoggerFactory service provider that creates loggers implemented by
+ * Monolog.
  *
  * Configured using an array of configuration data with the keys 'loggers',
  * 'processors', 'handlers' and 'formatters'.
@@ -29,8 +30,8 @@
  * section.
  *
  * Configuration will most typically be provided in the $wgMWLoggerDefaultSpi
- * global configuration variable used by MWLogger to construct its default SPI
- * provider:
+ * global configuration variable used by MWLoggerFactory to construct its
+ * default SPI provider:
  * @code
  * $wgMWLoggerDefaultSpi = array(
  *   'class' => 'MWLoggerMonologSpi',
@@ -152,7 +153,7 @@ class MWLoggerMonologSpi implements MWLoggerSpi {
         * name will return the cached instance.
         *
         * @param string $channel Logging channel
-        * @return MWLogger Logger instance
+        * @return \Psr\Log\LoggerInterface Logger instance
         */
        public function getLogger( $channel ) {
                if ( !isset( $this->singletons['loggers'][$channel] ) ) {
@@ -163,7 +164,7 @@ class MWLoggerMonologSpi implements MWLoggerSpi {
                                $this->config['loggers']['@default'];
 
                        $monolog = $this->createLogger( $channel, $spec );
-                       $this->singletons['loggers'][$channel] = new MWLogger( $monolog );
+                       $this->singletons['loggers'][$channel] = $monolog;
                }
 
                return $this->singletons['loggers'][$channel];
index 822c964..9c377df 100644 (file)
@@ -58,12 +58,6 @@ class LinksUpdate extends SqlDataUpdate {
        /** @var array Map of arbitrary name to value */
        public $mProperties;
 
-       /** @var DatabaseBase Database connection reference */
-       public $mDb;
-
-       /** @var array SELECT options to be used */
-       public $mOptions;
-
        /** @var bool Whether to queue jobs for recursive updates */
        public $mRecursive;
 
index 7ec61ea..5823b2e 100644 (file)
@@ -31,7 +31,7 @@
  *       the beginTransaction() and commitTransaction() methods.
  */
 abstract class SqlDataUpdate extends DataUpdate {
-       /** @var DatabaseBase Database connection reference */
+       /** @var IDatabase Database connection reference */
        protected $mDb;
 
        /** @var array SELECT options to be used (array) */
@@ -53,9 +53,7 @@ abstract class SqlDataUpdate extends DataUpdate {
        public function __construct( $withTransaction = true ) {
                parent::__construct();
 
-               // @todo Get connection only when it's needed? Make sure that doesn't
-               // break anything, especially transactions!
-               $this->mDb = wfGetDB( DB_MASTER );
+               $this->mDb = wfGetLB()->getLazyConnectionRef( DB_MASTER );
 
                $this->mWithTransaction = $withTransaction;
                $this->mHasTransaction = false;
index 90a2785..7b2ba0d 100644 (file)
@@ -487,7 +487,7 @@ class DifferenceEngine extends ContextSource {
                                        array( 'USE INDEX' => 'rc_timestamp' )
                                );
 
-                               if ( $change && $change->getPerformer()->getName() !== $user->getName() ) {
+                               if ( $change && !$change->getPerformer()->equals( $user ) ) {
                                        $rcid = $change->getAttribute( 'rc_id' );
                                } else {
                                        // None found or the page has been created by the current user.
@@ -962,7 +962,7 @@ class DifferenceEngine extends ContextSource {
                        $users = $this->mNewPage->getAuthorsBetween( $oldRev, $newRev, $limit );
                        $numUsers = count( $users );
 
-                       if ( $numUsers == 1 && $users[0] == $newRev->getRawUserText() ) {
+                       if ( $numUsers == 1 && $users[0] == $newRev->getUserText( Revision::RAW ) ) {
                                $numUsers = 0; // special case to say "by the same user" instead of "by one other user"
                        }
 
index 5ea9359..77ab6ad 100644 (file)
@@ -83,8 +83,7 @@ class MWExceptionHandler {
                                }
                        }
                } else {
-                       $message = "Unexpected non-MediaWiki exception encountered, of type \"" .
-                               get_class( $e ) . "\"";
+                       $message = "Exception encountered, of type \"" . get_class( $e ) . "\"";
 
                        if ( $wgShowExceptionDetails ) {
                                $message .= "\n" . MWExceptionHandler::getLogMessage( $e ) . "\nBacktrace:\n" .
@@ -437,6 +436,11 @@ TXT;
                        'message' => $e->getMessage(),
                );
 
+               if ( $e instanceof ErrorException && ( error_reporting() & $e->getSeverity() ) === 0 ) {
+                       // Flag surpressed errors
+                       $exceptionData['suppressed'] = true;
+               }
+
                // Because MediaWiki is first and foremost a web application, we set a
                // 'url' key unconditionally, but set it to null if the exception does
                // not occur in the context of a web request, as a way of making that
@@ -482,18 +486,23 @@ TXT;
         * Log an exception that wasn't thrown but made to wrap an error.
         *
         * @since 1.25
-        * @param Exception $e
+        * @param ErrorException $e
        */
-       protected static function logError( Exception $e ) {
+       protected static function logError( ErrorException $e ) {
                global $wgLogExceptionBacktrace;
 
-               $log = self::getLogMessage( $e );
-               if ( $wgLogExceptionBacktrace ) {
-                       wfDebugLog( 'error', $log . "\n" . $e->getTraceAsString() );
-               } else {
-                       wfDebugLog( 'error', $log );
+               // The set_error_handler callback is independent from error_reporting.
+               // Filter out unwanted errors manually (e.g. when wfSuppressWarnings is active).
+               if ( ( error_reporting() & $e->getSeverity() ) !== 0 ) {
+                       $log = self::getLogMessage( $e );
+                       if ( $wgLogExceptionBacktrace ) {
+                               wfDebugLog( 'error', $log . "\n" . $e->getTraceAsString() );
+                       } else {
+                               wfDebugLog( 'error', $log );
+                       }
                }
 
+               // Include all errors in the json log (surpressed errors will be flagged)
                $json = self::jsonSerializeException( $e, false, FormatJson::ALL_OK );
                if ( $json !== false ) {
                        wfDebugLog( 'error-json', $json, 'private' );
index 8c0a61a..9504112 100644 (file)
@@ -1491,7 +1491,7 @@ abstract class FileBackend {
  * @ingroup FileBackend
  * @since 1.23
  */
-class FileBackendException extends MWException {
+class FileBackendException extends Exception {
 }
 
 /**
index 2637b5a..836fd49 100644 (file)
@@ -937,6 +937,7 @@ class SwiftFileBackend extends FileBackendStore {
                                        // Convert various random Swift dates to TS_MW
                                        'mtime'  => $this->convertSwiftDate( $object->last_modified, TS_MW ),
                                        'size'   => (int)$object->bytes,
+                                       'sha1'   => null,
                                        // Note: manifiest ETags are not an MD5 of the file
                                        'md5'    => ctype_xdigit( $object->hash ) ? $object->hash : null,
                                        'latest' => false // eventually consistent
@@ -1064,6 +1065,7 @@ class SwiftFileBackend extends FileBackendStore {
                        $tmpFiles[$path] = $tmpFile;
                }
 
+               $isLatest = ( $this->isRGW || !empty( $params['latest'] ) );
                $opts = array( 'maxConnsPerHost' => $params['concurrency'] );
                $reqs = $this->http->runMulti( $reqs, $opts );
                foreach ( $reqs as $path => $op ) {
@@ -1078,6 +1080,10 @@ class SwiftFileBackend extends FileBackendStore {
                                        $this->onError( null, __METHOD__,
                                                array( 'src' => $path ) + $ep, $rerr, $rcode, $rdesc );
                                }
+                               // Set the file stat process cache in passing
+                               $stat = $this->getStatFromHeaders( $rhdrs );
+                               $stat['latest'] = $isLatest;
+                               $this->cheapCache->set( $path, 'stat', $stat );
                        } elseif ( $rcode === 404 ) {
                                $tmpFiles[$path] = false;
                        } else {
@@ -1510,25 +1516,8 @@ class SwiftFileBackend extends FileBackendStore {
                        if ( $rcode === 200 || $rcode === 204 ) {
                                // Update the object if it is missing some headers
                                $rhdrs = $this->addMissingMetadata( $rhdrs, $path );
-                               // Fetch all of the custom metadata headers
-                               $metadata = array();
-                               foreach ( $rhdrs as $name => $value ) {
-                                       if ( strpos( $name, 'x-object-meta-' ) === 0 ) {
-                                               $metadata[substr( $name, strlen( 'x-object-meta-' ) )] = $value;
-                                       }
-                               }
-                               // Fetch all of the custom raw HTTP headers
-                               $headers = $this->sanitizeHdrs( array( 'headers' => $rhdrs ) );
-                               $stat = array(
-                                       // Convert various random Swift dates to TS_MW
-                                       'mtime' => $this->convertSwiftDate( $rhdrs['last-modified'], TS_MW ),
-                                       // Empty objects actually return no content-length header in Ceph
-                                       'size'  => isset( $rhdrs['content-length'] ) ? (int)$rhdrs['content-length'] : 0,
-                                       'sha1'  => $rhdrs['x-object-meta-sha1base36'],
-                                       // Note: manifiest ETags are not an MD5 of the file
-                                       'md5'   => ctype_xdigit( $rhdrs['etag'] ) ? $rhdrs['etag'] : null,
-                                       'xattr' => array( 'metadata' => $metadata, 'headers' => $headers )
-                               );
+                               // Load the stat array from the headers
+                               $stat = $this->getStatFromHeaders( $rhdrs );
                                if ( $this->isRGW ) {
                                        $stat['latest'] = true; // strong consistency
                                }
@@ -1544,6 +1533,34 @@ class SwiftFileBackend extends FileBackendStore {
                return $stats;
        }
 
+       /**
+        * @param array $rhdrs
+        * @return array
+        */
+       protected function getStatFromHeaders( array $rhdrs ) {
+               // Fetch all of the custom metadata headers
+               $metadata = array();
+               foreach ( $rhdrs as $name => $value ) {
+                       if ( strpos( $name, 'x-object-meta-' ) === 0 ) {
+                               $metadata[substr( $name, strlen( 'x-object-meta-' ) )] = $value;
+                       }
+               }
+               // Fetch all of the custom raw HTTP headers
+               $headers = $this->sanitizeHdrs( array( 'headers' => $rhdrs ) );
+               return array(
+                       // Convert various random Swift dates to TS_MW
+                       'mtime' => $this->convertSwiftDate( $rhdrs['last-modified'], TS_MW ),
+                       // Empty objects actually return no content-length header in Ceph
+                       'size'  => isset( $rhdrs['content-length'] ) ? (int)$rhdrs['content-length'] : 0,
+                       'sha1'  => isset( $rhdrs['x-object-meta-sha1base36'] )
+                               ? $rhdrs['x-object-meta-sha1base36']
+                               : null,
+                       // Note: manifiest ETags are not an MD5 of the file
+                       'md5'   => ctype_xdigit( $rhdrs['etag'] ) ? $rhdrs['etag'] : null,
+                       'xattr' => array( 'metadata' => $metadata, 'headers' => $headers )
+               );
+       }
+
        /**
         * @return array|null Credential map
         */
@@ -1598,7 +1615,7 @@ class SwiftFileBackend extends FileBackendStore {
                        }
                        // Ceph RGW does not use <account> in URLs (OpenStack Swift uses "/v1/<account>")
                        if ( substr( $this->authCreds['storage_url'], -3 ) === '/v1' ) {
-                               $this->isRGW = true; // take advantage of strong consistency
+                               $this->isRGW = true; // take advantage of strong consistency in Ceph
                        }
                }
 
index c065148..4ee5222 100644 (file)
@@ -57,14 +57,14 @@ abstract class FileJournal {
         *
         * @param array $config
         * @param string $backend A registered file backend name
-        * @throws MWException
+        * @throws Exception
         * @return FileJournal
         */
        final public static function factory( array $config, $backend ) {
                $class = $config['class'];
                $jrn = new $class( $config );
                if ( !$jrn instanceof self ) {
-                       throw new MWException( "Class given is not an instance of FileJournal." );
+                       throw new Exception( "Class given is not an instance of FileJournal." );
                }
                $jrn->backend = $backend;
 
index 19fc4fe..c72863e 100644 (file)
@@ -78,17 +78,17 @@ class LockManagerGroup {
         * Register an array of file lock manager configurations
         *
         * @param array $configs
-        * @throws MWException
+        * @throws Exception
         */
        protected function register( array $configs ) {
                foreach ( $configs as $config ) {
                        $config['domain'] = $this->domain;
                        if ( !isset( $config['name'] ) ) {
-                               throw new MWException( "Cannot register a lock manager with no name." );
+                               throw new Exception( "Cannot register a lock manager with no name." );
                        }
                        $name = $config['name'];
                        if ( !isset( $config['class'] ) ) {
-                               throw new MWException( "Cannot register lock manager `{$name}` with no class." );
+                               throw new Exception( "Cannot register lock manager `{$name}` with no class." );
                        }
                        $class = $config['class'];
                        unset( $config['class'] ); // lock manager won't need this
@@ -105,11 +105,11 @@ class LockManagerGroup {
         *
         * @param string $name
         * @return LockManager
-        * @throws MWException
+        * @throws Exception
         */
        public function get( $name ) {
                if ( !isset( $this->managers[$name] ) ) {
-                       throw new MWException( "No lock manager defined with the name `$name`." );
+                       throw new Exception( "No lock manager defined with the name `$name`." );
                }
                // Lazy-load the actual lock manager instance
                if ( !isset( $this->managers[$name]['instance'] ) ) {
@@ -126,11 +126,11 @@ class LockManagerGroup {
         *
         * @param string $name
         * @return array
-        * @throws MWException
+        * @throws Exception
         */
        public function config( $name ) {
                if ( !isset( $this->managers[$name] ) ) {
-                       throw new MWException( "No lock manager defined with the name `$name`." );
+                       throw new Exception( "No lock manager defined with the name `$name`." );
                }
                $class = $this->managers[$name]['class'];
 
@@ -155,7 +155,7 @@ class LockManagerGroup {
         * Throws an exception if no lock manager could be found.
         *
         * @return LockManager
-        * @throws MWException
+        * @throws Exception
         */
        public function getAny() {
                return isset( $this->managers['default'] )
index 16d3de1..24d96e0 100644 (file)
@@ -61,7 +61,7 @@ class MemcLockManager extends QuorumLockManager {
         *                    each having an odd-numbered list of server names (peers) as values.
         *   - memcConfig   : Configuration array for ObjectCache::newFromParams. [optional]
         *                    If set, this must use one of the memcached classes.
-        * @throws MWException
+        * @throws Exception
         */
        public function __construct( array $config ) {
                parent::__construct( $config );
@@ -80,7 +80,7 @@ class MemcLockManager extends QuorumLockManager {
                        if ( $cache instanceof MemcachedBagOStuff ) {
                                $this->bagOStuffs[$name] = $cache;
                        } else {
-                               throw new MWException(
+                               throw new Exception(
                                        'Only MemcachedBagOStuff classes are supported by MemcLockManager.' );
                        }
                }
index 90e0581..90e62e6 100644 (file)
@@ -62,7 +62,7 @@ class RedisLockManager extends QuorumLockManager {
         *   - srvsByBucket : Array of 1-16 consecutive integer keys, starting from 0,
         *                    each having an odd-numbered list of server names (peers) as values.
         *   - redisConfig  : Configuration for RedisConnectionPool::__construct().
-        * @throws MWException
+        * @throws Exception
         */
        public function __construct( array $config ) {
                parent::__construct( $config );
index 5f70362..e54f748 100644 (file)
@@ -20,28 +20,19 @@ class HTMLCheckField extends HTMLFormField {
                        $attr['class'] = $this->mClass;
                }
 
-               if ( $this->mParent->isVForm() ) {
-                       // Nest checkbox inside label.
-                       return Html::rawElement( 'label',
-                               array(
-                                       'class' => 'mw-ui-checkbox-label'
-                               ),
-                               Xml::check( $this->mName, $value, $attr ) . $this->mLabel );
-               } else {
-                       $chkLabel = Xml::check( $this->mName, $value, $attr )
-                       . '&#160;'
-                       . Html::rawElement( 'label', array( 'for' => $this->mID ), $this->mLabel );
-
-                       if ( $wgUseMediaWikiUIEverywhere ) {
-                               $chkLabel = Html::rawElement(
-                                       'div',
-                                       array( 'class' => 'mw-ui-checkbox' ),
-                                       $chkLabel
-                               );
-                       }
+               $chkLabel = Xml::check( $this->mName, $value, $attr )
+               . '&#160;'
+               . Html::rawElement( 'label', array( 'for' => $this->mID ), $this->mLabel );
 
-                       return $chkLabel;
+               if ( $wgUseMediaWikiUIEverywhere || $this->mParent instanceof VFormHTMLForm ) {
+                       $chkLabel = Html::rawElement(
+                               'div',
+                               array( 'class' => 'mw-ui-checkbox' ),
+                               $chkLabel
+                       );
                }
+
+               return $chkLabel;
        }
 
        /**
index dc73522..908fdf2 100644 (file)
@@ -207,9 +207,40 @@ class HTMLForm extends ContextSource {
                'table',
                'div',
                'raw',
+       );
+
+       /**
+        * Available formats in which to display the form
+        * @var array
+        */
+       protected $availableSubclassDisplayFormats = array(
                'vform',
        );
 
+       /**
+        * Construct a HTMLForm object for given display type. May return a HTMLForm subclass.
+        *
+        * @throws MWException When the display format requested is not known
+        * @param string $displayFormat
+        * @param mixed $arguments... Additional arguments to pass to the constructor.
+        * @return HTMLForm
+        */
+       public static function factory( $displayFormat/*, $arguments...*/ ) {
+               $arguments = func_get_args();
+               array_shift( $arguments );
+
+               switch ( $displayFormat ) {
+                       case 'vform':
+                               $reflector = new ReflectionClass( 'VFormHTMLForm' );
+                               return $reflector->newInstanceArgs( $arguments );
+                       default:
+                               $reflector = new ReflectionClass( 'HTMLForm' );
+                               $form = $reflector->newInstanceArgs( $arguments );
+                               $form->setDisplayFormat( $displayFormat );
+                               return $form;
+               }
+       }
+
        /**
         * Build a new HTMLForm from an array of field attributes
         *
@@ -233,6 +264,11 @@ class HTMLForm extends ContextSource {
                        $this->mMessagePrefix = $context;
                }
 
+               // Evil hack for mobile :(
+               if ( !$this->getConfig()->get( 'HTMLFormAllowTableFormat' ) && $this->displayFormat === 'table' ) {
+                       $this->displayFormat = 'div';
+               }
+
                // Expand out into a tree.
                $loadedDescriptor = array();
                $this->mFlatFields = array();
@@ -246,12 +282,7 @@ class HTMLForm extends ContextSource {
                                $this->mUseMultipart = true;
                        }
 
-                       $field = self::loadInputFromParameters( $fieldname, $info, $this );
-
-                       // vform gets too much space if empty labels generate HTML.
-                       if ( $this->isVForm() ) {
-                               $field->setShowEmptyLabel( false );
-                       }
+                       $field = static::loadInputFromParameters( $fieldname, $info, $this );
 
                        $setSection =& $loadedDescriptor;
                        if ( $section ) {
@@ -286,10 +317,24 @@ class HTMLForm extends ContextSource {
         * @return HTMLForm $this for chaining calls (since 1.20)
         */
        public function setDisplayFormat( $format ) {
+               if (
+                       in_array( $format, $this->availableSubclassDisplayFormats ) ||
+                       in_array( $this->displayFormat, $this->availableSubclassDisplayFormats )
+               ) {
+                       throw new MWException( 'Cannot change display format after creation, ' .
+                               'use HTMLForm::factory() instead' );
+               }
+
                if ( !in_array( $format, $this->availableDisplayFormats ) ) {
                        throw new MWException( 'Display format must be one of ' .
                                print_r( $this->availableDisplayFormats, true ) );
                }
+
+               // Evil hack for mobile :(
+               if ( !$this->getConfig()->get( 'HTMLFormAllowTableFormat' ) && $format === 'table' ) {
+                       $format = 'div';
+               }
+
                $this->displayFormat = $format;
 
                return $this;
@@ -301,20 +346,17 @@ class HTMLForm extends ContextSource {
         * @return string
         */
        public function getDisplayFormat() {
-               $format = $this->displayFormat;
-               if ( !$this->getConfig()->get( 'HTMLFormAllowTableFormat' ) && $format === 'table' ) {
-                       $format = 'div';
-               }
-               return $format;
+               return $this->displayFormat;
        }
 
        /**
         * Test if displayFormat is 'vform'
         * @since 1.22
+        * @deprecated since 1.25
         * @return bool
         */
        public function isVForm() {
-               return $this->displayFormat === 'vform';
+               return false;
        }
 
        /**
@@ -337,7 +379,7 @@ class HTMLForm extends ContextSource {
                if ( isset( $descriptor['class'] ) ) {
                        $class = $descriptor['class'];
                } elseif ( isset( $descriptor['type'] ) ) {
-                       $class = self::$typeMappings[$descriptor['type']];
+                       $class = static::$typeMappings[$descriptor['type']];
                        $descriptor['class'] = $class;
                } else {
                        $class = null;
@@ -362,7 +404,7 @@ class HTMLForm extends ContextSource {
         * @return HTMLFormField Instance of a subclass of HTMLFormField
         */
        public static function loadInputFromParameters( $fieldname, $descriptor, HTMLForm $parent = null ) {
-               $class = self::getClassFromDescriptor( $fieldname, $descriptor );
+               $class = static::getClassFromDescriptor( $fieldname, $descriptor );
 
                $descriptor['fieldname'] = $fieldname;
                if ( $parent ) {
@@ -790,19 +832,6 @@ class HTMLForm extends ContextSource {
                # For good measure (it is the default)
                $this->getOutput()->preventClickjacking();
                $this->getOutput()->addModules( 'mediawiki.htmlform' );
-               if ( $this->isVForm() ) {
-                       // This is required for VForm HTMLForms that use that style regardless
-                       // of wgUseMediaWikiUIEverywhere (since they pre-date it).
-                       // When wgUseMediaWikiUIEverywhere is removed, this should be consolidated
-                       // with the addModuleStyles in SpecialPage->setHeaders.
-                       $this->getOutput()->addModuleStyles( array(
-                               'mediawiki.ui',
-                               'mediawiki.ui.button',
-                               'mediawiki.ui.input',
-                       ) );
-                       // @todo Should vertical form set setWrapperLegend( false )
-                       // to hide ugly fieldsets?
-               }
 
                $html = ''
                        . $this->getErrors( $submitResult )
@@ -818,18 +847,10 @@ class HTMLForm extends ContextSource {
        }
 
        /**
-        * Wrap the form innards in an actual "<form>" element
-        *
-        * @param string $html HTML contents to wrap.
-        *
-        * @return string Wrapped HTML.
+        * Get HTML attributes for the `<form>` tag.
+        * @return array
         */
-       function wrapForm( $html ) {
-
-               # Include a <fieldset> wrapper for style, if requested.
-               if ( $this->mWrapperLegend !== false ) {
-                       $html = Xml::fieldset( $this->mWrapperLegend, $html );
-               }
+       protected function getFormAttributes() {
                # Use multipart/form-data
                $encType = $this->mUseMultipart
                        ? 'multipart/form-data'
@@ -844,12 +865,23 @@ class HTMLForm extends ContextSource {
                if ( !empty( $this->mId ) ) {
                        $attribs['id'] = $this->mId;
                }
+               return $attribs;
+       }
 
-               if ( $this->isVForm() ) {
-                       array_push( $attribs['class'], 'mw-ui-vform', 'mw-ui-container' );
+       /**
+        * Wrap the form innards in an actual "<form>" element
+        *
+        * @param string $html HTML contents to wrap.
+        *
+        * @return string Wrapped HTML.
+        */
+       function wrapForm( $html ) {
+               # Include a <fieldset> wrapper for style, if requested.
+               if ( $this->mWrapperLegend !== false ) {
+                       $html = Xml::fieldset( $this->mWrapperLegend, $html );
                }
 
-               return Html::rawElement( 'form', $attribs, $html );
+               return Html::rawElement( 'form', $this->getFormAttributes(), $html );
        }
 
        /**
@@ -905,21 +937,10 @@ class HTMLForm extends ContextSource {
 
                        $attribs['class'] = array( 'mw-htmlform-submit' );
 
-                       if ( $this->isVForm() || $useMediaWikiUIEverywhere ) {
+                       if ( $useMediaWikiUIEverywhere ) {
                                array_push( $attribs['class'], 'mw-ui-button', $this->mSubmitModifierClass );
                        }
 
-                       if ( $this->isVForm() ) {
-                               // mw-ui-block is necessary because the buttons aren't necessarily in an
-                               // immediate child div of the vform.
-                               // @todo Let client specify if the primary submit button is progressive or destructive
-                               array_push(
-                                       $attribs['class'],
-                                       'mw-ui-big',
-                                       'mw-ui-block'
-                               );
-                       }
-
                        $buttons .= Xml::submitButton( $this->getSubmitText(), $attribs ) . "\n";
                }
 
@@ -928,7 +949,8 @@ class HTMLForm extends ContextSource {
                                'input',
                                array(
                                        'type' => 'reset',
-                                       'value' => $this->msg( 'htmlform-reset' )->text()
+                                       'value' => $this->msg( 'htmlform-reset' )->text(),
+                                       'class' => ( $useMediaWikiUIEverywhere ? 'mw-ui-button' : null ),
                                )
                        ) . "\n";
                }
@@ -948,15 +970,9 @@ class HTMLForm extends ContextSource {
                                $attrs['id'] = $button['id'];
                        }
 
-                       if ( $this->isVForm() || $useMediaWikiUIEverywhere ) {
-                               if ( isset( $attrs['class'] ) ) {
-                                       $attrs['class'] .= ' mw-ui-button';
-                               } else {
-                                       $attrs['class'] = 'mw-ui-button';
-                               }
-                               if ( $this->isVForm() ) {
-                                       $attrs['class'] .= ' mw-ui-big mw-ui-block';
-                               }
+                       if ( $useMediaWikiUIEverywhere ) {
+                               $attrs['class'] = isset( $attrs['class'] ) ? (array)$attrs['class'] : array();
+                               $attrs['class'][] = 'mw-ui-button';
                        }
 
                        $buttons .= Html::element( 'input', $attrs ) . "\n";
@@ -965,13 +981,6 @@ class HTMLForm extends ContextSource {
                $html = Html::rawElement( 'span',
                        array( 'class' => 'mw-htmlform-submit-buttons' ), "\n$buttons" ) . "\n";
 
-               // Buttons are top-level form elements in table and div layouts,
-               // but vform wants all elements inside divs to get spaced-out block
-               // styling.
-               if ( $this->mShowSubmit && $this->isVForm() ) {
-                       $html = Html::rawElement( 'div', null, "\n$html" ) . "\n";
-               }
-
                return $html;
        }
 
@@ -1284,20 +1293,8 @@ class HTMLForm extends ContextSource {
                $subsectionHtml = '';
                $hasLabel = false;
 
-               switch ( $displayFormat ) {
-                       case 'table':
-                               $getFieldHtmlMethod = 'getTableRow';
-                               break;
-                       case 'vform':
-                               // Close enough to a div.
-                               $getFieldHtmlMethod = 'getDiv';
-                               break;
-                       case 'div':
-                               $getFieldHtmlMethod = 'getDiv';
-                               break;
-                       default:
-                               $getFieldHtmlMethod = 'get' . ucfirst( $displayFormat );
-               }
+               // Conveniently, PHP method names are case-insensitive.
+               $getFieldHtmlMethod = $displayFormat == 'table' ? 'getTableRow' : ( 'get' . $displayFormat );
 
                foreach ( $fields as $key => $value ) {
                        if ( $value instanceof HTMLFormField ) {
@@ -1369,7 +1366,7 @@ class HTMLForm extends ContextSource {
                                $html = Html::rawElement( 'table',
                                                $attribs,
                                                Html::rawElement( 'tbody', array(), "\n$html\n" ) ) . "\n";
-                       } elseif ( $displayFormat === 'div' || $displayFormat === 'vform' ) {
+                       } else {
                                $html = Html::rawElement( 'div', $attribs, "\n$html\n" );
                        }
                }
index a91f331..645b507 100644 (file)
@@ -13,6 +13,7 @@ abstract class HTMLFormField {
        protected $mLabel; # String label.  Set on construction
        protected $mID;
        protected $mClass = '';
+       protected $mVFormClass = '';
        protected $mHelpClass = false;
        protected $mDefault;
        protected $mOptions = false;
@@ -512,10 +513,7 @@ abstract class HTMLFormField {
                        array( 'class' => $outerDivClass ) + $cellAttributes,
                        $inputHtml . "\n$errors"
                );
-               $divCssClasses = array( "mw-htmlform-field-$fieldType", $this->mClass, $errorClass );
-               if ( $this->mParent->isVForm() ) {
-                       $divCssClasses[] = 'mw-ui-vform-field';
-               }
+               $divCssClasses = array( "mw-htmlform-field-$fieldType", $this->mClass, $this->mVFormClass, $errorClass );
 
                $wrapperAttributes = array(
                        'class' => $divCssClasses,
@@ -554,6 +552,20 @@ abstract class HTMLFormField {
                return $html;
        }
 
+       /**
+        * Get the complete field for the input, including help text,
+        * labels, and whatever. Fall back from 'vform' to 'div' when not overridden.
+        *
+        * @since 1.25
+        * @param string $value The value to set the input to.
+        * @return string Complete HTML field.
+        */
+       public function getVForm( $value ) {
+               // Ewwww
+               $this->mVFormClass = ' mw-ui-vform-field';
+               return $this->getDiv( $value );
+       }
+
        /**
         * Generate help text HTML in table format
         * @since 1.20
index d1b7746..b06f10d 100644 (file)
@@ -262,17 +262,8 @@ class HTMLFormFieldCloner extends HTMLFormField {
                        ? $this->mParams['format']
                        : $this->mParent->getDisplayFormat();
 
-               switch ( $displayFormat ) {
-                       case 'table':
-                               $getFieldHtmlMethod = 'getTableRow';
-                               break;
-                       case 'vform':
-                               // Close enough to a div.
-                               $getFieldHtmlMethod = 'getDiv';
-                               break;
-                       default:
-                               $getFieldHtmlMethod = 'get' . ucfirst( $displayFormat );
-               }
+               // Conveniently, PHP method names are case-insensitive.
+               $getFieldHtmlMethod = $displayFormat == 'table' ? 'getTableRow' : ( 'get' . $displayFormat );
 
                $html = '';
                $hidden = '';
@@ -336,7 +327,7 @@ class HTMLFormFieldCloner extends HTMLFormField {
                                $html = Html::rawElement( 'table',
                                        $attribs,
                                        Html::rawElement( 'tbody', array(), "\n$html\n" ) ) . "\n";
-                       } elseif ( $displayFormat === 'div' || $displayFormat === 'vform' ) {
+                       } else {
                                $html = Html::rawElement( 'div', $attribs, "\n$html\n" );
                        }
                }
diff --git a/includes/htmlform/VFormHTMLForm.php b/includes/htmlform/VFormHTMLForm.php
new file mode 100644 (file)
index 0000000..7826a0c
--- /dev/null
@@ -0,0 +1,140 @@
+<?php
+
+/**
+ * HTML form generation and submission handling, vertical-form style.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * Compact stacked vertical format for forms.
+ */
+class VFormHTMLForm extends HTMLForm {
+       /**
+        * Wrapper and its legend are never generated in VForm mode.
+        * @var boolean
+        */
+       protected $mWrapperLegend = false;
+
+       /**
+        * Symbolic display format name.
+        * @var string
+        */
+       protected $displayFormat = 'vform';
+
+       public function isVForm() {
+               return true;
+       }
+
+       public static function loadInputFromParameters( $fieldname, $descriptor, HTMLForm $parent = null ) {
+               $field = parent::loadInputFromParameters( $fieldname, $descriptor, $parent );
+               $field->setShowEmptyLabel( false );
+               return $field;
+       }
+
+       function getHTML( $submitResult ) {
+               // This is required for VForm HTMLForms that use that style regardless
+               // of wgUseMediaWikiUIEverywhere (since they pre-date it).
+               // When wgUseMediaWikiUIEverywhere is removed, this should be consolidated
+               // with the addModuleStyles in SpecialPage->setHeaders.
+               $this->getOutput()->addModuleStyles( array(
+                       'mediawiki.ui',
+                       'mediawiki.ui.button',
+                       'mediawiki.ui.input',
+                       'mediawiki.ui.checkbox',
+               ) );
+
+               return parent::getHTML( $submitResult );
+       }
+
+       protected function getFormAttributes() {
+               $attribs = parent::getFormAttributes();
+               array_push( $attribs['class'], 'mw-ui-vform', 'mw-ui-container' );
+               return $attribs;
+       }
+
+       function wrapForm( $html ) {
+               // Always discard $this->mWrapperLegend
+               return Html::rawElement( 'form', $this->getFormAttributes(), $html );
+       }
+
+       function getButtons() {
+               $buttons = '';
+
+               if ( $this->mShowSubmit ) {
+                       $attribs = array();
+
+                       if ( isset( $this->mSubmitID ) ) {
+                               $attribs['id'] = $this->mSubmitID;
+                       }
+
+                       if ( isset( $this->mSubmitName ) ) {
+                               $attribs['name'] = $this->mSubmitName;
+                       }
+
+                       if ( isset( $this->mSubmitTooltip ) ) {
+                               $attribs += Linker::tooltipAndAccesskeyAttribs( $this->mSubmitTooltip );
+                       }
+
+                       $attribs['class'] = array(
+                               'mw-htmlform-submit',
+                               'mw-ui-button mw-ui-big mw-ui-block',
+                               $this->mSubmitModifierClass,
+                       );
+
+                       $buttons .= Xml::submitButton( $this->getSubmitText(), $attribs ) . "\n";
+               }
+
+               if ( $this->mShowReset ) {
+                       $buttons .= Html::element(
+                               'input',
+                               array(
+                                       'type' => 'reset',
+                                       'value' => $this->msg( 'htmlform-reset' )->text(),
+                                       'class' => 'mw-ui-button mw-ui-big mw-ui-block',
+                               )
+                       ) . "\n";
+               }
+
+               foreach ( $this->mButtons as $button ) {
+                       $attrs = array(
+                               'type' => 'submit',
+                               'name' => $button['name'],
+                               'value' => $button['value']
+                       );
+
+                       if ( $button['attribs'] ) {
+                               $attrs += $button['attribs'];
+                       }
+
+                       if ( isset( $button['id'] ) ) {
+                               $attrs['id'] = $button['id'];
+                       }
+
+                       $attrs['class'] = isset( $attrs['class'] ) ? (array)$attrs['class'] : array();
+                       $attrs['class'][] = 'mw-ui-button mw-ui-big mw-ui-block';
+
+                       $buttons .= Html::element( 'input', $attrs ) . "\n";
+               }
+
+               $html = Html::rawElement( 'div',
+                       array( 'class' => 'mw-htmlform-submit-buttons' ), "\n$buttons" ) . "\n";
+
+               return $html;
+       }
+}
index 4159c1d..dc52554 100644 (file)
@@ -727,7 +727,7 @@ abstract class Installer {
                }
                $databases = array_flip( $databases );
                if ( !$databases ) {
-                       $this->showError( 'config-no-db', $wgLang->commaList( $allNames ) );
+                       $this->showError( 'config-no-db', $wgLang->commaList( $allNames ), count( $allNames ) );
 
                        // @todo FIXME: This only works for the web installer!
                        return false;
@@ -1469,15 +1469,16 @@ abstract class Installer {
        }
 
        /**
-        * Returns a default value to be used for $wgDefaultSkin: the preferred skin, if available among
-        * the installed skins, or any other one otherwise.
+        * Returns a default value to be used for $wgDefaultSkin: normally the one set in DefaultSettings,
+        * but will fall back to another if the default skin is missing and some other one is present
+        * instead.
         *
         * @param string[] $skinNames Names of installed skins.
         * @return string
         */
        public function getDefaultSkin( array $skinNames ) {
                $defaultSkin = $GLOBALS['wgDefaultSkin'];
-               if ( in_array( $defaultSkin, $skinNames ) ) {
+               if ( !$skinNames || in_array( $defaultSkin, $skinNames ) ) {
                        return $defaultSkin;
                } else {
                        return $skinNames[0];
index 9ecb24b..038c2be 100644 (file)
@@ -1033,14 +1033,15 @@ class WebInstallerOptions extends WebInstallerPage {
                $skins = $this->parent->findExtensions( 'skins' );
                $skinHtml = $this->getFieldSetStart( 'config-skins' );
 
-               if ( $skins ) {
-                       $skinNames = array_map( 'strtolower', $skins );
+               $skinNames = array_map( 'strtolower', $skins );
+               $chosenSkinName = $this->getVar( 'wgDefaultSkin', $this->parent->getDefaultSkin( $skinNames ) );
 
+               if ( $skins ) {
                        $radioButtons = $this->parent->getRadioElements( array(
                                'var' => 'wgDefaultSkin',
                                'itemLabels' => array_fill_keys( $skinNames, 'config-skins-use-as-default' ),
                                'values' => $skinNames,
-                               'value' => $this->getVar( 'wgDefaultSkin', $this->parent->getDefaultSkin( $skinNames ) ),
+                               'value' => $chosenSkinName,
                        ) );
 
                        foreach ( $skins as $skin ) {
@@ -1055,7 +1056,9 @@ class WebInstallerOptions extends WebInstallerPage {
                                        '</div>';
                        }
                } else {
-                       $skinHtml .= $this->parent->getWarningBox( wfMessage( 'config-skins-missing' )->plain() );
+                       $skinHtml .=
+                               $this->parent->getWarningBox( wfMessage( 'config-skins-missing' )->plain() ) .
+                               Html::hidden( 'config_wgDefaultSkin', $chosenSkinName );
                }
 
                $skinHtml .= $this->parent->getHelpBox( 'config-skins-help' ) .
index 0aeae7f..c131a78 100644 (file)
@@ -56,7 +56,7 @@
        "config-unicode-using-intl": "Выкарыстоўваецца [http://pecl.php.net/intl intl пашырэньне з PECL] для Unicode-нармалізацыі",
        "config-unicode-pure-php-warning": "'''Папярэджаньне''': [http://pecl.php.net/intl Пашырэньне intl з PECL] — ня слушнае для Unicode-нармалізацыі, цяпер выкарыстоўваецца марудная PHP-рэалізацыя.\nКалі ў Вас сайт з высокай наведваемасьцю, раім пачытаць пра [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode-нармалізацыю].",
        "config-unicode-update-warning": "'''Папярэджаньне''': усталяваная вэрсія бібліятэкі для Unicode-нармалізацыі выкарыстоўвае састарэлую вэрсію бібліятэкі з [http://site.icu-project.org/ праекту ICU].\nРаім [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations абнавіць], калі ваш сайт будзе працаваць зь Unicode.",
-       "config-no-db": "Немагчыма знайсьці адпаведны драйвэр базы зьвестак. Вам неабходна ўсталяваць драйвэр базы зьвестак для PHP.\nПадтрымліваюцца наступныя тыпы базаў зьвестак: $1.\n\nКалі вы скампілявалі PHP самастойна, зьмяніце канфігурацыю, каб уключыць кліента базы зьвестак, напрыклад, з дапамогай <code>./configure --with-mysqli</code>.\nКалі вы ўсталявалі PHP з пакунку Debian або Ubuntu, тады вам трэба таксама ўсталяваць, напрыклад, пакунак <code>php5-mysql</code>.",
+       "config-no-db": "Немагчыма знайсьці адпаведны драйвэр базы зьвестак. Вам неабходна ўсталяваць драйвэр базы зьвестак для PHP.\n{{PLURAL:$2|Падтрымліваецца наступны тып базы|Падтрымліваюцца наступныя тыпы базаў}} зьвестак: $1.\n\nКалі вы скампілявалі PHP самастойна, зьмяніце канфігурацыю, каб уключыць кліента базы зьвестак, напрыклад, з дапамогай <code>./configure --with-mysqli</code>.\nКалі вы ўсталявалі PHP з пакунку Debian або Ubuntu, тады вам трэба дадаткова ўсталяваць, напрыклад, пакунак <code>php5-mysql</code>.",
        "config-outdated-sqlite": "'''Папярэджаньне''': усталяваны SQLite $1, у той час, калі мінімальная сумяшчальная вэрсія — $2. SQLite ня будзе даступны.",
        "config-no-fts3": "'''Папярэджаньне''': SQLite створаны без модуля [//sqlite.org/fts3.html FTS3], для гэтага ўнутранага інтэрфэйсу ня будзе даступная магчымасьць пошуку.",
        "config-register-globals-error": "<strong>Памылка: парамэтар PHP <code>[http://php.net/register_globals register_globals]</code> уключаны.\nЁн павінен быць адключаны, каб працягнуць усталяваньне.</strong>\nГлядзіце [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals] дзеля дапамогі, як зрабіць гэта.",
diff --git a/includes/installer/i18n/bgn.json b/includes/installer/i18n/bgn.json
new file mode 100644 (file)
index 0000000..a3dde2e
--- /dev/null
@@ -0,0 +1,9 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Baloch Afghanistan"
+               ]
+       },
+       "config-sidebar": "* [//www.mediawiki.org میڈیاویکی ئی بُنیادین تاکدیم]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents کار زوروکانی کومک و رهنمایی]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents مدیر ئی رهنمایی]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ رواجین سوج و سوالان]\n----\n* <doclink href=Readme>نا بووان</doclink>\n* <doclink href=ReleaseNotes>شینک بوته ئین یاداشتان</doclink>\n* <doclink href=Copying>نسخه برداری</doclink>\n* <doclink href=UpgradeDoc>ارتقا</doclink>",
+       "config-env-good": "محیط بررسی بوته.\nشما ئه توانیت میڈیاویکی ئا نصب کنیت."
+}
index 9fca5fe..d41924c 100644 (file)
@@ -7,7 +7,8 @@
                        "Toniher",
                        "Fitoschido",
                        "Jmarchn",
-                       "Alvaro Vidal-Abarca"
+                       "Alvaro Vidal-Abarca",
+                       "ESM"
                ]
        },
        "config-desc": "L'instal·lador del MediaWiki",
@@ -53,6 +54,7 @@
        "config-env-bad": "S'ha comprovat l'entorn.\nNo podeu instal·lar el MediaWiki.",
        "config-env-php": "El PHP $1 està instal·lat.",
        "config-env-hhvm": "L’HHVM $1 és instal·lat.",
+       "config-unicode-using-utf8": "Utilitzant la utf8_normalise.so d'en Brion Vibber per a la normalització de l'Unicode.",
        "config-memory-raised": "El <code>memory_limit</code> del PHP és $1 i s'ha aixecat a $2.",
        "config-memory-bad": "<strong>Avís:</strong> El <code>memory_limit</code> del PHP és $1.\nAixò és probablement massa baix.\nLa instal·lació pot fallar!",
        "config-xcache": "[http://xcache.lighttpd.net/ XCache] està instal·lat",
        "config-db-install-account": "Compte d'usuari per a la instal·lació",
        "config-db-username": "Nom d'usuari de la base de dades:",
        "config-db-password": "Contrasenya de la base de dades:",
+       "config-db-password-empty": "Si us plau, introduïu una contrasenya pel nou usuari de la base de dades $1. Tot i que es poden crear usuaris sense contrasenyes, no és segur.",
        "config-db-username-empty": "Heu d'introduir un valor per a «{{int:config-db-username}}»",
+       "config-db-install-username": "Introduïu el nom d'usuari que s'utilitzarà per connectar a la base de dades durant el procés d'instal·lació. Aquest no és el nom d'usuari de MediaWiki, és el nom d'usuari de la vostra base de dades.",
+       "config-db-install-password": "Introduïu la contrasenya que s'utilitzarà per connectar a la base de dades durant el procés d'instal·lació. Aquesta no és la contrasenya del vostre compte a MediaWiki, és la contrasenya de la vostra base de dades.",
+       "config-db-install-help": "Introduïu el nom d'usuari i la contrasenya que s'empraran per connectar a la base de dades durant el procés d'instal·lació.",
        "config-db-account-lock": "Utilitzeu el mateix nom d'usuari i contrasenya durant una operació normal",
        "config-db-wiki-account": "Compte d'usuari per al funcionament normal",
        "config-db-wiki-help": "Introduïu el nom d'usuari i la contrasenya que s'utilitzarà per connectar-se a la base de dades durant l'operació normal del wiki.\nSi el compte no existeix, i el compte d'instal·lació té prou privilegis, es crearà aquest compte d'usuari amb els privilegis mínims necessaris per operar el wiki.",
        "config-oracle-temp-ts": "Espai de taules temporal:",
        "config-type-mysql": "MySQL (o compatible)",
        "config-type-mssql": "Microsoft SQL Server",
+       "config-support-info": "MediaWiki és compatible amb els següents sistemes de bases de dades:\n$1\nSi el sistema de bases de dades que intenteu utilitzar no apareix a la llista, seguiu les instruccions enllaçades més amunt per habilitar el suport.",
        "config-header-mysql": "Paràmetres de MySQL",
        "config-header-postgres": "Paràmetres del PostgreSQL",
        "config-header-sqlite": "Paràmetres de l'SQLite",
index a5f700c..b0b2ebe 100644 (file)
@@ -64,7 +64,7 @@
        "config-unicode-using-intl": "Zur  Unicode-Normalisierung wird die [http://pecl.php.net/intl PECL-Erweiterung intl] eingesetzt.",
        "config-unicode-pure-php-warning": "'''Warnung:''' Die [http://pecl.php.net/intl PECL-Erweiterung intl] ist für die Unicode-Normalisierung nicht verfügbar, so dass stattdessen die langsame pure-PHP-Implementierung genutzt wird.\nSofern eine Website mit großer Benutzeranzahl betrieben wird, sollten weitere Informationen auf der Webseite [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode-Normalisierung (en)] gelesen werden.",
        "config-unicode-update-warning": "'''Warnung:''' Die installierte Version des Unicode-Normalisierungswrappers nutzt einer ältere Version der Bibliothek des [http://site.icu-project.org/ ICU-Projekts].\nDiese sollte [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations aktualisiert] werden, sofern auf die Verwendung von Unicode Wert gelegt wird.",
-       "config-no-db": "Es konnte kein adäquater Datenbanktreiber gefunden werden. Es muss daher ein Datenbanktreiber für PHP installiert werden.\nDie folgenden Datenbanksysteme werden unterstützt: $1\n\nWenn du PHP selbst kompiliert hast, konfiguriere es erneut mit einem aktivierten Datenbankclient, zum Beispiel durch Verwendung von <code>./configure --with-mysqli</code>.\nWenn du PHP von einem Debian- oder Ubuntu-Paket installiert hast, dann musst du auch beispielsweise das <code>php5-mysql</code>-Paket installieren.",
+       "config-no-db": "Es konnte kein adäquater Datenbanktreiber gefunden werden. Es muss daher ein Datenbanktreiber für PHP installiert werden.\n{{PLURAL:$2|Das folgende Datenbanksystem wird|Die folgenden Datenbanksysteme werden}} unterstützt: $1\n\nWenn du PHP selbst kompiliert hast, konfiguriere es erneut mit einem aktivierten Datenbankclient, zum Beispiel durch Verwendung von <code>./configure --with-mysqli</code>.\nWenn du PHP von einem Debian- oder Ubuntu-Paket installiert hast, dann musst du auch beispielsweise das <code>php5-mysql</code>-Paket installieren.",
        "config-outdated-sqlite": "'''Warnung:''' SQLite $1 ist installiert. Allerdings benötigt MediaWiki SQLite $2 oder höher. SQLite wird daher nicht verfügbar sein.",
        "config-no-fts3": "'''Warnung:''' SQLite wurde ohne das [//sqlite.org/fts3.html FTS3-Modul] kompiliert, sodass keine Suchfunktionen für dieses Datenbanksystem zur Verfügung stehen werden.",
        "config-register-globals-error": "<strong>Fehler: Die PHP-Option <code>[http://php.net/register_globals register_globals]</code> ist aktiviert.\nSie muss deaktiviert sein, um mit der Installation fortzufahren.</strong>\nSiehe [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals] für Hilfe.",
index 4857495..d6737a3 100644 (file)
@@ -49,7 +49,7 @@
        "config-unicode-using-intl": "Using the [http://pecl.php.net/intl intl PECL extension] for Unicode normalization.",
        "config-unicode-pure-php-warning": "<strong>Warning:</strong> The [http://pecl.php.net/intl intl PECL extension] is not available to handle Unicode normalization, falling back to slow pure-PHP implementation.\nIf you run a high-traffic site, you should read a little on [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode normalization].",
        "config-unicode-update-warning": "<strong>Warning:</strong> The installed version of the Unicode normalization wrapper uses an older version of [http://site.icu-project.org/ the ICU project's] library.\nYou should [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations upgrade] if you are at all concerned about using Unicode.",
-       "config-no-db": "Could not find a suitable database driver! You need to install a database driver for PHP.\nThe following database types are supported: $1.\n\nIf you compiled PHP yourself, reconfigure it with a database client enabled, for example, using <code>./configure --with-mysqli</code>.\nIf you installed PHP from a Debian or Ubuntu package, then you also need to install, for example, the <code>php5-mysql</code> package.",
+       "config-no-db": "Could not find a suitable database driver! You need to install a database driver for PHP.\nThe following database {{PLURAL:$2|type is|types are}} supported: $1.\n\nIf you compiled PHP yourself, reconfigure it with a database client enabled, for example, using <code>./configure --with-mysqli</code>.\nIf you installed PHP from a Debian or Ubuntu package, then you also need to install, for example, the <code>php5-mysql</code> package.",
        "config-outdated-sqlite": "<strong>Warning:</strong> you have SQLite $1, which is lower than minimum required version $2. SQLite will be unavailable.",
        "config-no-fts3": "<strong>Warning:</strong> SQLite is compiled without the [//sqlite.org/fts3.html FTS3 module], search features will be unavailable on this backend.",
        "config-register-globals-error": "<strong>Error: PHP's <code>[http://php.net/register_globals register_globals]</code> option is enabled.\nIt must be disabled to continue with the installation.</strong>\nSee [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals] for help on how to do so.",
        "config-db-sys-user-exists-oracle": "User account \"$1\" already exists. SYSDBA can only be used for creating of a new account!",
        "config-postgres-old": "PostgreSQL $1 or later is required. You have $2.",
        "config-mssql-old": "Microsoft SQL Server $1 or later is required. You have $2.",
-       "config-sqlite-name-help": "Choose a name that identifies your wiki.\nDo not use spaces or hyphens.\nThis will be used for the SQLite data file name.",
+       "config-sqlite-name-help": "Choose a name that identifies your wiki.\nDo not use spaces or hyphens.\nThis will be used for the SQLite data filename.",
        "config-sqlite-parent-unwritable-group": "Cannot create the data directory <code><nowiki>$1</nowiki></code>, because the parent directory <code><nowiki>$2</nowiki></code> is not writable by the webserver.\n\nThe installer has determined the user your webserver is running as.\nMake the <code><nowiki>$3</nowiki></code> directory writable by it to continue.\nOn a Unix/Linux system do:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
        "config-sqlite-parent-unwritable-nogroup": "Cannot create the data directory <code><nowiki>$1</nowiki></code>, because the parent directory <code><nowiki>$2</nowiki></code> is not writable by the webserver.\n\nThe installer could not determine the user your webserver is running as.\nMake the <code><nowiki>$3</nowiki></code> directory globally writable by it (and others!) to continue.\nOn a Unix/Linux system do:\n\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
        "config-sqlite-mkdir-error": "Error creating the data directory \"$1\".\nCheck the location and try again.",
index e05cd25..ac60dea 100644 (file)
@@ -1,5 +1,24 @@
 {
-       "@metadata": [],
+       "@metadata": {
+               "authors": [
+                       "Hangmanwa7id"
+               ]
+       },
+       "config-your-language": "Ton langue:",
+       "config-page-name": "Nom",
+       "config-page-options": "Options",
+       "config-page-install": "Installer",
+       "config-page-complete": "Terminé!",
+       "config-sqlite-name-help": "Choisir un nom qui identifie ton wiki.\nFait user pas ni d'espaces ni des traits d'union\nIl va user pour fichier de données SQLite.",
+       "config-mysql-innodb": "InnoDB",
+       "config-mysql-myisam": "MyISAM",
+       "config-mysql-binary": "Binaire",
+       "config-mysql-utf8": "UTF-8",
+       "config-ns-generic": "Projet",
+       "config-ns-other-default": "MonWiki",
+       "config-admin-name": "Ton nom d'useur:",
+       "config-admin-password": "Mot de passe:",
+       "config-admin-email": "Adresse d'email:",
        "mainpagetext": "'''Vous avez bien installé MediaWiki.'''",
        "mainpagedocfooter": "Lisez la [//meta.wikimedia.org/wiki/Help:Contents Guide des Useurs] pour apprendre à user le wiki software.\n\n== Pour Commencer ==\n\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Réglage]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki: Questions Souvent Posées]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki Liste à Malle]"
 }
index dd14e63..3419089 100644 (file)
@@ -56,7 +56,7 @@
        "config-unicode-using-intl": "משתמש ב[http://pecl.php.net/intl הרחבת intl PECL] לנרמול יוניקוד.",
        "config-unicode-pure-php-warning": "'''אזהרה''': [http://pecl.php.net/intl הרחבת intl PECL] אינה זמינה לטיפול בנרמול יוניקוד. משתמש ביישום PHP טהור ואטי יותר.\nאם זהו אתר בעל תעבורה גבוהה, כדאי לקרוא את המסמך הבא: [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode normalization].",
        "config-unicode-update-warning": "'''אזהרה''': הגרסה המותקנת של מעטפת נרמול יוניקוד משתמשת בגרסה ישנה של הספרייה של [http://site.icu-project.org/ פרויקט ICU].\nכדאי [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations לעדכן] אם הטיפול ביוניקוד חשוב לך.",
-       "config-no-db": "לא נמצא דרייבר מסד נתונים מתאים. יש להתקין דרייבר מסד נתונים ל־PHP.\nנתמכים הסוגים הבאים של מסדי נתונים: $1.\n\nאם קִמפלת את PHP בעצמך, יש להגדיר אותו מחדש ולהפעיל את לקוח מסד נתונים, למשל באמצעות <code dir=\"ltr\">./configure --with-mysqli</code>.\nאם התקנת את PHP מחבילה של דביאן או של אובונטו, יש להתקין, למשל, גם את המודול <code dir=\"ltr\">php5-mysql</code>.",
+       "config-no-db": "לא נמצא דרייבר מסד נתונים מתאים. יש להתקין דרייבר מסד נתונים ל־PHP.\n{{PLURAL:$2|נתמך הסוג הבא של מסד נתונים|נתמכים הסוגים הבאים של מסדי נתונים}}: $1.\n\nאם קִמפלת את PHP בעצמך, יש להגדיר אותו מחדש ולהפעיל את לקוח מסד נתונים, למשל באמצעות <code dir=\"ltr\">./configure --with-mysqli</code>.\nאם התקנת את PHP מחבילה של דביאן או של אובונטו, יש להתקין, למשל, גם את המודול <code dir=\"ltr\">php5-mysql</code>.",
        "config-outdated-sqlite": "'''אזהרה''': במערכת מתוקן SQLite $1. גרסה זו לא נתמכת ולשימוש ב־SQLite נדרשת גרסה $2 לפחות. SQLlite לא יהיה זמין.",
        "config-no-fts3": "'''אזהרה''': SQLite מקומפל ללא [//sqlite.org/fts3.html מודול FTS]. יכולות חיפוש לא יהיו זמינות בהתקנה הזאת.",
        "config-register-globals-error": "<strong>שגיאה: האפשרות <code>[http://php.net/register_globals register_globals]</code> של PHP מופעלת.\nצריך לכבות אותה כדי להמשיך בהתקנה.</strong>\nר' [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals] להסבר איך לעשות את זה.",
index 9c68ce9..b8a68a7 100644 (file)
@@ -51,7 +51,7 @@
        "config-unicode-using-intl": "Aúsa [http://pecl.php.net/intl l'estensione PECL intl] pe' ne fà 'a normalizzazione Unicode.",
        "config-unicode-pure-php-warning": "<strong>Attenziò:</strong> L' [http://pecl.php.net/intl estensione intl PECL] nun è a disposizione pe' gestire 'a normalizzazione Unicode, accussì se ausasse n'imprementazziona llenta 'n puro PHP.\nSi state a gestire nu pizzo ad alto traffico, avisseve a lieggere cocche considerazione ncopp' 'a [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalizzaziona Unicode].",
        "config-unicode-update-warning": "<strong>Attenziò:</strong> 'A verziona installata 'e normalizzazione Unicode aùsa 'a verziona viecchia d' 'o [http://site.icu-project.org/ pruggetto ICU].\nV'avite 'a [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations agghiurnà] si state a penzà ncopp' 'o fatto d'ausà Unicode.",
-       "config-no-db": "Nun se può truvà nu driver adatto p' 'o database! È necessario installare nu driver p' 'o PHP.\n'E furmatte 'e database ccà annanze songo suppurtate: $1.\n\nSi cumpilate PHP autonomamente, riaccunciatevello attivando nu client database, p'esempio ausannoo <code>./configure --with-mysqli</code>.\nQuanno fosse installato PHP pe' bbìa 'e nu pacchetto Debian o Ubuntu, allora avite 'a installà pure 'o pacchetto <code>php5-mysql</code>.",
+       "config-no-db": "Nun se può truvà nu driver adatto p' 'o database! È necessario installare nu driver p' 'o PHP.\n{{PLURAL:$2|'O furmatto suppurtato|'E furmatte suppurtate}} 'e database ccà annanze: $1.\n\nSi cumpilate PHP autonomamente, riaccunciatevello attivando nu client database, p'esempio ausannoo <code>./configure --with-mysqli</code>.\nQuanno fosse installato PHP pe' bbìa 'e nu pacchetto Debian o Ubuntu, allora avite 'a installà pure 'o pacchetto <code>php5-mysql</code>.",
        "config-outdated-sqlite": "'''Attenziò''': tenite 'o SQLite $1 pe' tramente ca ce vulesse 'a verziona $2, SQLite nun sarrà a disposizione.",
        "config-no-fts3": "'''Attenziò''': SQLite è cumpilato senza 'o [//sqlite.org/fts3.html modulo FTS3], 'e funziune 'e p'ascià dinto nun sarranno a disposizione ncopp'a stu backend.",
        "config-register-globals-error": "<strong>Errore: l'opzione PHP <code>[http://php.net/register_globals register_globals]</code> è apicciata.\nS'avesse 'a stutà pe' cuntinuà c' 'a installazione.</strong>\nVide [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals] pe' n'avé n'aiuto ncopp'a comme s'avess'a ffà.",
        "config-db-name": "Nomme d' 'o database:",
        "config-db-name-help": "Sciglite nu nomme ca identificasse 'a wiki vosta.\nNun avess'a cuntenè spazie.\n\nSi ausate nu web hosting spartuto, 'o furnitore d' 'o hosting v'avesse 'a specificà nu nomme 'e database specifico pe' ve permettere 'e crià database pe' bbìa 'e nu pannello 'e cuntrollo.",
        "config-db-name-oracle": "Schema d' 'o database:",
+       "config-db-account-oracle-warn": "Ce stanno tre scenarie suppurtate p' 'a installazione d'Oracle comme database 'e backend:\n\nSi vulite crià n'utenza 'e database comme parte d' 'o prucesso 'e installazione, dàte nu cunto c' 'o ruolo SYSDBA comme utenza d' 'o database pe ne fà installazione e specificate 'e credenziale vulute pe' ne fà l'utenza d'acciesso web, sinò è possibbele crià manualmente l'utenza d'accesso web e dà surtanto chillu cunto (si tenite autorizzaziune neccessarie pe' crià oggette 'e stu schema) po dà dduje utenze divierze, una ch' 'e permesse 'e criazione e n'ata pe ne putè trasì ô web.\n\n'O script p' 'a criazione 'e n'utenza cu tutte st'autorizzaziune neccessarie 'o putite truvà dint' 'a cartella \"maintenance/oracle\" 'e sta installazione. Tenite a mmente che l'uso 'e n'utenza cu sti restriziune stutarrà tutt' 'e funziune 'e manutenzione c' 'o cunto predefinito.",
        "config-db-install-account": "Cunto utente pe' l'installazione",
        "config-db-username": "Nomme utente p' 'o database:",
        "config-db-password": "Password d' 'o database:",
        "config-db-password-empty": "Avita nzertà na password pe' l'utente nuovo d' 'o database: $1.\nPure si fosse possibbele 'e crià ll'utente senza password chisto nun fosse sicuro.",
        "config-db-username-empty": "Avita miette nu valore p' 'o \"{{int:config-db-username}}\"",
+       "config-db-install-username": "Nzertate 'o nomme utente ca s'aussarrà pe' ve cullegà ô database pe' tramente ca se fà l'installazione. Chistu nun è 'o nomme utente d' 'o cunto MediaWiki; ma chillo p' 'o database vuosto.",
+       "config-db-install-password": "Nzertate 'a password che s'ausarrà pe' ve putè cullegà ô database pe' tramente ca se fa l'installazione.\nChista nun è 'a password d' 'o cunto 'e MediaWiki; ma chilla p' 'o database vuosto.",
+       "config-db-install-help": "Miette 'o nomme utente e 'a password ca sarrà usata quanno ve cullegate ô database pe' tramente ca facite 'a installazione.",
+       "config-db-account-lock": "Aúsa 'o stisso nomme utente e password pe' l'operazione normale.",
        "config-db-wiki-account": "Account utente p' 'o funzionamento nurmale",
+       "config-db-wiki-help": "Miette 'o nomme utente e 'a password ca sarrà ausata pe' se cullegà ô database pe' l'operazione normale d' 'o wiki. Si 'o cunto nun esiste, e 'o cunto e installazione téne diritte sufficiente, sarrà criato ch' 'e diritte minime necessarie pe' putè faticà ncopp' 'o wiki.",
        "config-db-prefix": "Prefisso d' 'a tavolozza d' 'o database:",
+       "config-db-prefix-help": "Si tenite abbesuogno 'e spartì nu database nfra cchiù wiki, o nfra MediaWiki e n'at'apprecazione web, putite scegliere d'azzeccà nu prefisso a tutte 'e nomme 'e tabbella, pe putè evità cunflitte.\nNun ausate abbacante.\n\n'O solito, stu campo se lassasse abbacante.",
        "config-db-charset": "Nzieme 'e carattere d' 'o database",
        "config-charset-mysql5-binary": "MySQL 4.1/5.0 binario",
        "config-charset-mysql5": "MySQL 4.1/5.0 UTF-8",
        "config-oracle-temp-ts": "Tablespace temporaneo:",
        "config-type-mysql": "MySQL (o compatibbele)",
        "config-type-mssql": "Microsoft SQL Server",
+       "config-support-info": "MediaWiki supporta 'e sisteme 'e database ccà abbascio:\n\n$1\n\nSi nfra chiste ccà nun vedite 'o sistema 'e database ca vulite ausà, allora avite liegge 'e instruziune ccà ncoppa pe' ne dà supporto.",
        "config-header-mysql": "Mpustaziune MySQL",
        "config-header-postgres": "Mpustaziune PostgreSQL",
        "config-header-sqlite": "Mpustaziune SQLite",
        "config-missing-db-name": "Avita miette nu valore p' 'o \"{{int:config-db-name}}\"",
        "config-missing-db-host": "Avita miette nu valore p' 'o \"{{int:config-db-host}}\"",
        "config-missing-db-server-oracle": "Avita miette nu valore p' 'o \"{{int:config-db-host-oracle}}\"",
+       "config-connection-error": "$1.\n\nCuntrullate 'o host, nomme utente e password e tentate n'ata vota.",
+       "config-invalid-schema": "Schema MediaWiki \"$1\" nun è buono.\nAusate surtanto 'e lettere ASCII (a-z, A-Z), nummere (0-9) e carattere 'e sottolineatura (_).",
+       "config-db-sys-create-oracle": "'O prugramma 'e installazione supporta surtanto l'uso 'e nu cunto SYSDBA pe' putè crià nu cunto nuovo.",
        "config-sqlite-readonly": "'O file <code>$1</code> nun è scrivibbele.",
        "config-sqlite-cant-create-db": "Nun se può crià 'o file database <code>$1</code>.",
        "config-sqlite-fts3-downgrade": "'O PHP è mancante d' 'o suppuorto FTS3, declassamento tabbelle 'n curzo",
index bc8caed..5cf71c4 100644 (file)
@@ -68,7 +68,7 @@
        "config-unicode-using-intl": "Korzystanie z [http://pecl.php.net/intl rozszerzenia intl PECL] do normalizacji Unicode.",
        "config-unicode-pure-php-warning": "'''Uwaga!''' [http://pecl.php.net/intl Rozszerzenie intl PECL] do obsługi normalizacji Unicode nie jest dostępne. Użyta zostanie mało wydajna zwykła implementacja w PHP.\nJeśli prowadzisz stronę o dużym natężeniu ruchu, powinieneś zapoznać się z informacjami o [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalizacji Unicode].",
        "config-unicode-update-warning": "'''Uwaga''' – zainstalowana wersja normalizacji Unicode korzysta z nieaktualnej biblioteki [http://site.icu-project.org/ projektu ICU].\nPowinieneś [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations zrobić aktualizację] jeśli chcesz korzystać w pełni z Unicode.",
-       "config-no-db": "Nie można odnaleźć właściwego sterownika bazy danych! Musisz zainstalować sterownik bazy danych dla PHP.\nMożna użyć następujących typów baz danych: $1.\n\nJeśli skompilowałeś PHP samodzielnie, skonfiguruj je ponownie z włączonym klientem bazy danych, na przykład za pomocą polecenia <code>./configure --with-mysqli</code>.\nJeśli zainstalowałeś PHP jako pakiet Debiana lub Ubuntu, musisz również zainstalować np. moduł <code>php5-mysql</code>.",
+       "config-no-db": "Nie można odnaleźć właściwego sterownika bazy danych! Musisz zainstalować sterownik bazy danych dla PHP.\nMożna użyć {{PLURAL:$2|następującego typu bazy|następujących typów baz} danych: $1.\n\nJeśli skompilowałeś PHP samodzielnie, skonfiguruj je ponownie z włączonym klientem bazy danych, na przykład za pomocą polecenia <code>./configure --with-mysqli</code>.\nJeśli zainstalowałeś PHP jako pakiet Debiana lub Ubuntu, musisz również zainstalować np. moduł <code>php5-mysql</code>.",
        "config-outdated-sqlite": "'''Ostrzeżenie''': masz SQLite  $1, która jest niższa od minimalnej wymaganej wersji  $2 . SQLite będzie niedostępne.",
        "config-no-fts3": "'''Uwaga''' – SQLite został skompilowany bez [//sqlite.org/fts3.html modułu FTS3] – funkcje wyszukiwania nie będą dostępne.",
        "config-register-globals-error": "<strong>Błąd: dyrektywa PHP <code>[http://php.net/register_globals register_globals]</code> jest włączona.\nAby kontynuować instalację musi zostać wyłączona.</strong>\nPrzeczytaj [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals], aby dowiedzieć się, jak to zrobić.",
index 835cf9b..b63905b 100644 (file)
@@ -64,7 +64,7 @@
        "config-unicode-using-intl": "A usar a [http://pecl.php.net/intl extensão intl PECL] para a normalização Unicode.",
        "config-unicode-pure-php-warning": "'''Aviso''': A [http://pecl.php.net/intl extensão intl PECL] não está disponível para efetuar a normalização Unicode. Irá recorrer-se à implementação em PHP puro, que é mais lenta.\nSe o seu site tem alto volume de tráfego, devia informar-se um pouco sobre a [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations/pt normalização Unicode].",
        "config-unicode-update-warning": "'''Aviso''': A versão instalada do wrapper de normalização Unicode usa uma versão mais antiga da biblioteca do [http://site.icu-project.org/ projeto ICU].\nDevia [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations atualizá-la] se tem quaisquer preocupações sobre o uso do Unicode.",
-       "config-no-db": "Não foi possível encontrar um controlador ''(driver)'' apropriado da base de dados! Precisa de instalar um controlador da base de dados para o PHP. São aceites os seguintes tipos de base de dados: $1.\n\nSe fez a compilação do PHP, reconfigure-o com um cliente de base de dados ativado; por exemplo, usando <code>./configure --with-mysql</code>.\nSe instalou o PHP a partir de um pacote Debian ou Ubuntu, então precisa de instalar também, por exemplo, o pacote <code>php5-mysql</code>.",
+       "config-no-db": "Não foi possível encontrar um controlador apropriado da base de dados! Precisa de instalar um controlador da base de dados para o PHP. {{PLURAL:$2|É aceite o seguinte tipo|São aceites os seguintes tipos}} de base de dados: $1.\n\nSe fez a compilação do PHP, reconfigure-o com um cliente de base de dados ativado; por exemplo, usando <code>./configure --with-mysql</code>.\nSe instalou o PHP a partir de um pacote Debian ou Ubuntu, então precisa de instalar também, por exemplo, o pacote <code>php5-mysql</code>.",
        "config-outdated-sqlite": "'''Aviso''': Tem a versão $1 do SQLite, que é anterior à versão mínima necessária, a $2. O SQLite não estará disponível.",
        "config-no-fts3": "'''Aviso''': O SQLite foi compilado sem o módulo [//sqlite.org/fts3.html FTS3]; as funcionalidades de pesquisa não estarão disponíveis nesta instalação.",
        "config-magic-quotes-runtime": "'''Erro fatal: A opção [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] está ativa!'''\nEsta opção causa corrupção dos dados de entrada, de uma forma imprevisível.\nNão pode instalar ou usar o MediaWiki a menos que esta opção seja desativada.",
index 772ce96..3a9f267 100644 (file)
@@ -67,7 +67,7 @@
        "config-unicode-using-intl": "Status message in the MediaWiki installer environment checks.",
        "config-unicode-pure-php-warning": "PECL is the name of a group producing standard pieces of software for PHP, and intl is the name of their library handling some aspects of internationalization.",
        "config-unicode-update-warning": "ICU is a body producing standard software tools for support of Unicode and other internationalization aspects. This message warns the system administrator installing MediaWiki that the server's software is not up-to-date and MediaWiki will have problems handling some characters.",
-       "config-no-db": "{{doc-important|Do not translate \"<code>./configure --with-mysqli</code>\" and \"<code>php5-mysql</code>\".}}\nParameters:\n* $1 is comma separated list of database types supported by MediaWiki.",
+       "config-no-db": "{{doc-important|Do not translate \"<code>./configure --with-mysqli</code>\" and \"<code>php5-mysql</code>\".}}\nParameters:\n* $1 is comma separated list of database types supported by MediaWiki.\n* $2 is the count of items in $1 - for use in plural.",
        "config-outdated-sqlite": "Used as warning. Parameters:\n* $1 - the version of SQLite that has been installed\n* $2 - minimum version",
        "config-no-fts3": "A \"[[:wikipedia:Front and back ends|backend]]\" is a system or component that ordinary users don't interact with directly and don't need to know about, and that is responsible for a distinct task or service - for example, a storage back-end is a generic system for storing data which other applications can use. Possible alternatives for back-end are \"system\" or \"service\", or (depending on context and language) even leave it untranslated.",
        "config-register-globals-error": "Error message in the MediaWiki installer environment checks.",
index 7dd0baa..27b7b93 100644 (file)
@@ -3,7 +3,8 @@
                "authors": [
                        "Singhalawap",
                        "පසිඳු කාවින්ද",
-                       "Sahan.ssw"
+                       "Sahan.ssw",
+                       "Thirsty"
                ]
        },
        "config-desc": "මාධ්‍යවිකි සඳහා වූ ස්ථාපකය",
@@ -60,6 +61,7 @@
        "config-missing-db-name": "\"දත්ත සංචිත නාමය\" සඳහා ඔබ විසින් අගයක් දිය යුතු වේ",
        "config-missing-db-host": "\"දත්ත සංචිත ධාරකය\" සඳහා ඔබ විසින් අගයක් දිය යුතු වේ",
        "config-missing-db-server-oracle": "\"දත්ත සංචිත TNS\" සඳහා ඔබ විසින් අගයක් දිය යුතු වේ",
+       "config-sqlite-name-help": "ඔබගේ විකිය හදුන්වාදෙන නමක් තෝරාගන්න. \nහිස්තැන් හෝ විරාම ලක්ෂණ ‍නොයොදන්න.\nමෙය SQLite දත්ත ගොනුනාමය සදහා යොදා ගනු ඇත.",
        "config-regenerate": "නැවත ජනිත කරන්න LocalSettings.php →",
        "config-db-web-account": "ජාල ප්‍රවේශනය සඳහා දත්ත සංචිත ගිණුම",
        "config-mysql-engine": "ආචයන එන්ජිම:",
index eac135b..fd87b15 100644 (file)
        "config-localsettings-key": "Chìa khóa nâng cấp:",
        "config-localsettings-badkey": "Bạn đã cung cấp một chìa khóa sai.",
        "config-upgrade-key-missing": "Một bản cài đặt MediaWiki sẵn đã được phát hiện.\nĐể nâng cấp bản cài đặt này, hãy thêm dòng sau vào cuối <code>LocalSettings.php</code>:\n\n$1",
+       "config-localsettings-incomplete": "Tập tin <code>LocalSettings.php</code> đã tồn tại hình như không hoàn chỉnh.\nBiến $1 chưa được đặt.\nXin hãy thay đổi <code>LocalSettings.php</code> để đặt biến này, rồi bấm “{{int:Config-continue}}”.",
+       "config-localsettings-connection-error": "Đã xuất hiện lỗi khi kết nối với cơ sở dữ liệu dùng cấu hình trong <code>LocalSettings.php</code>. Xin hãy sửa lại cấu hình và thử lại.\n\n$1",
        "config-session-error": "Lỗi khi bắt đầu phiên làm việc: $1",
+       "config-session-expired": "Dữ liệu phiên làm việc của bạn dường như đã hết hạn. Các phiên làm việc được cấu hình để kéo dài $1. Để tăng thời gian này, đặt <code>session.gc_maxlifetime</code> trong php.ini, rồi khởi động lại quá trình cài đặt.",
+       "config-no-session": "Đã mất dữ liệu phiên làm việc của bạn! Kiểm tra tập tin php.ini và đảm bảo rằng <code>session.save_path</code> đã được đặt thành một thư mục thích hợp.",
        "config-your-language": "Ngôn ngữ của bạn:",
        "config-your-language-help": "Chọn một ngôn ngữ để sử dụng trong quá trình cài đặt.",
        "config-wiki-language": "Ngôn ngữ wiki:",
        "config-page-copying": "Sao chép",
        "config-page-upgradedoc": "Nâng cấp",
        "config-page-existingwiki": "Wiki đã tồn tại",
+       "config-help-restart": "Bạn có muốn xóa tất cả dữ liệu được lưu mà bạn vừa nhập và khởi động lại quá trình cài đặt?",
        "config-restart": "Có, khởi động lại nó",
        "config-welcome": "=== Kiểm tra môi trường ===\nBây giờ sẽ kiểm tra sơ qua môi trường này có phù hợp cho việc cài đặt MediaWiki.\nHãy nhớ bao gồm thông tin này khi nào xin hỗ trợ hoàn thành việc cài đặt.",
+       "config-copyright": "=== Bản quyền và Điều khoản ===\n\n$1\n\nChương trình này là phần mềm tự do; bạn có thể phân phối lại và/hoặc chỉnh sửa nó dưới điều khoản của Giấy phép Công cộng GNU (GNU General Public License) do Quỹ Phần mềm Tự do (Free Software Foundation) xuất bản; hoặc phiên bản 2 của giấy phép đó, hoặc (tùy theo ý bạn) bất kỳ phiên bản nào sau này.\n\nChương trình này được phân phối với hy vọng rằng nó sẽ hữu ích, nhưng <strong>không có bất kỳ bảo hành nào</strong>; không có thậm chí bảo hành bao hàm về <strong>khả năng thương mại</strong> hoặc <strong>sự thích hợp với một mục đích cụ thể</strong>.\nXem Giấy phép Công cộng GNU để biết thêm chi tiết.\n\nBạn phải nhận <doclink href=Copying>một bản sao của Giấy phép Công cộng GNU</doclink> đi kèm chương trình này; nếu không, hãy viết thư cho Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, Hoa Kỳ, hoặc [http://www.gnu.org/copyleft/gpl.html đọc nó trên mạng].",
+       "config-sidebar": "* [//www.mediawiki.org/wiki/Special:MyLanguage/MediaWiki Trang chủ MediaWiki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Hướng dẫn sử dụng]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents Hướng dẫn quản lý]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Câu thường hỏi]\n----\n* <doclink href=Readme>Cần đọc trước</doclink>\n* <doclink href=ReleaseNotes>Ghi chú phát hành</doclink>\n* <doclink href=Copying>Sao chép</doclink>\n* <doclink href=UpgradeDoc>Nâng cấp</doclink>",
        "config-env-good": "Đã kiểm tra môi trường.\nBạn có thể cài đặt MediaWiki.",
        "config-env-bad": "Đã kiểm tra môi trường.\nBạn không thể cài đặt MediaWiki.",
        "config-env-php": "PHP $1 đã được cài đặt.",
        "config-unicode-using-intl": "Sẽ sử dụng [http://pecl.php.net/intl phần mở rộng PECL intl] để chuẩn hóa Unicode.",
        "config-unicode-pure-php-warning": "<strong>Cảnh báo:</strong>  [http://pecl.php.net/intl intl PECL extension] không được phép xử lý Unicode chuẩn hóa, trả lại thực thi PHP-gốc chậm.\nNếu bạn chạy một site lưu lượng lớn, bạn phải để ý qua một chút trên  [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode normalization].",
        "config-unicode-update-warning": "<strong>Cảnh báo:</strong> Phiên bản cài đặt của gói Unicode chuẩn hóa sử dụng một phiên bản cũ của thư viện [http://site.icu-project.org/ the ICU project].\nBạn phải [//www.mediawiki.org/wiki/Special:MyLanguage/nâng cấp Unicode_normalization_considerations] nếu bạn quan tâm đến việc sử dụng Unicode.",
+       "config-no-db": "Không tìm thấy một trình điều khiển cơ sở dữ liệu phù hợp! Bạn cần phải cài một trình điều khiển cơ sở dữ liệu cho PHP.\n{{PLURAL:$2|Loại|Các loại}} cơ sở dữ liệu sau đây được hỗ trợ: $1.\n\nNếu bạn đã biên dịch PHP lấy, cấu hình lại nó mà kích hoạt một trình khách cơ sở dữ liệu, ví dụ bằng lệnh <code>./configure --with-mysqli</code>.\nNếu bạn đã cài PHP từ một gói Debian hoặc Ubuntu, thì bạn cũng cần phải cài ví dụ gói <code>php5-mysql</code>.",
+       "config-outdated-sqlite": "<strong>Chú ý:</strong> Bạn có SQLite $1, phiên bản này thấp hơn phiên bản yêu câu tối thiểu $2. SQLite sẽ không có tác dụng.",
+       "config-no-fts3": "<strong>Chú ý:</strong> SQLite được biên dịch mà không có [//sqlite.org/fts3.html mô đun FTS3], nên các chức năng tìm kiếm sẽ bị vô hiệu trên hệ thống phía sau này.",
+       "config-register-globals-error": "<strong>Lỗi: Tùy chọn <code>[http://php.net/register_globals register_globals]</code> của PHP đã được kích hoạt.\nNó phải bị vô hiệu để tiếp tục quá trình cài đặt.</strong>\nXem [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals] để biết cách thực hiện.",
+       "config-magic-quotes-gpc": "<strong>Sai lầm: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-gpc magic_quotes_gpc] đang hoạt động!</strong>\nTùy chọn này sẽ làm hỏng dữ liệu nhập một cách không thể đoán trước.\nBạn không thể cài đặt hoặc sử dụng MediaWiki trừ phi tùy chọn này bị vô hiệu.",
+       "config-magic-quotes-runtime": "<strong>Sai lầm: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] đang hoạt động!</strong>\nTùy chọn này sẽ làm hỏng dữ liệu nhập một cách không thể đoán trước.\nBạn không thể cài đặt hoặc sử dụng MediaWiki trừ phi tùy chọn này bị vô hiệu.",
+       "config-magic-quotes-sybase": "<strong>Sai lầm: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] đang hoạt động!</strong>\nTùy chọn này sẽ làm hỏng dữ liệu nhập một cách không thể đoán trước.\nBạn không thể cài đặt hoặc sử dụng MediaWiki trừ phi tùy chọn này bị vô hiệu.",
+       "config-mbstring": "<strong>Sai lầm: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] được kích hoạt!</strong>\nTùy chọn này gây lỗi và có thể làm hỏng dữ liệu một cách không thể đoán trước.\nBạn không thể cài đặt hoặc sử dụng MediaWiki trừ phi tùy chọn này bị vô hiệu.",
+       "config-safe-mode": "<strong>Cảnh báo:</strong> [http://www.php.net/features.safe-mode Chế độ an toàn] của PHP đang được kích hoạt.\nNó có thể gây vấn đề, nhất là nếu dùng các chức năng tải lên tập tin và <code>math</code>.",
+       "config-xml-bad": "Mô đun XML của PHP đang bị thiếu.\nMediaWiki yêu cầu các hàm trong mô đun này và sẽ không hoạt động trong cấu hình này.\nNếu bạn đang chạy Mandrake, hãy cài đặt gói php-xml.",
+       "config-pcre-old": "<strong>Sai lầm:</strong> PCRE $1 trở lên được yêu cầu phải có.\nBản nhị phân PHP của bạn dang được liên kết với PCRE $2.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE Thông tin bổ sung].",
+       "config-pcre-no-utf8": "<strong>Sai lầm:</strong> Mô đun PCRE của PHP dường như được biên dịch mà không có hỗ trợ PCRE_UTF8.\nMediaWiki yêu cầu phải có hỗ trợ UTF-8 để hoạt động chính xác.",
+       "config-memory-raised": "<code>memory_limit</code> của PHP là $1, tăng lên $2.",
+       "config-memory-bad": "<strong>Cảnh báo:</strong> <code>memory_limit</code> của PHP là $1.\nGiá trị này có lẽ quá thấp.\nCài đặt có thể bị thất bại!",
+       "config-ctype": "<strong>Sai lầm:</strong> PHP phải được biên dịch với hỗ trợ cho [http://www.php.net/manual/en/ctype.installation.php phần mở rộng Ctype].",
+       "config-iconv": "<strong>Sai lầm:</strong> PHP phải được biên dịch với hỗ trợ cho [http://www.php.net/manual/en/iconv.installation.php phần mở rộng iconv].",
+       "config-json": "<strong>Sai lầm:</strong> PHP được biên dịch mà không có hỗ trợ cho JSON.\nBạn phải cài đặt hoặc phần mở rộng JSON PHP hoặc phần mở rộng [http://pecl.php.net/package/jsonc PECL jsonc] trước khi cài đặt MediaWiki.\n* Phần mở rộng PHP có sẵn trong Red Hat Enterprise Linux (CentOS) 5 và 6 nhưng phải được kích hoạt trong <code>/etc/php.ini</code> hoặc <code>/etc/php.d/json.ini</code>.\n* Một số phiên bản Linux được phát hành sau tháng 5 năm 2013 bỏ qua phần mở rộng PHP và gói lại phần mở rộng PECL là <code>php5-json</code> hoặc <code>php-pecl-jsonc</code> thay thế.",
        "config-xcache": "[http://xcache.lighttpd.net/ XCache] đã được cài đặt",
        "config-apc": "[http://www.php.net/apc APC] đã được cài đặt",
        "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] đã được cài đặt",
+       "config-no-cache": "<strong>Cảnh báo:</strong> Không tìm thấy [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache] hoặc [http://www.iis.net/download/WinCacheForPhp WinCache].\nVùng nhớ đệm đối tượng không được kích hoạt.",
+       "config-mod-security": "<strong>Cảnh báo:</strong> [http://modsecurity.org/ mod_security]/mod_security2 đã được kích hoạt trên máy chủ Web của bạn. Nhiều cấu hình phổ biến của phần mềm này sẽ gây vấn đề cho MediaWiki và những phần mềm khác cho phép người dùng đăng các nội dung tùy tiện.\nNếu có thể, bạn nên vô hiệu nó. Còn không, tra cứu [http://modsecurity.org/documentation/ tài liệu mod_security] hoặc liên hệ với nhà cung cấp hỗ trợ cho máy chủ nếu bạn gặp những lỗi ngẫu nhiên nào đó.",
        "config-diff3-bad": "Không tìm thấy GNU diff3.",
        "config-git": "Đã tìm thấy phần mềm điều khiển phiên bản Git: <code>$1</code>.",
        "config-git-bad": "Không tìm thấy phần mềm điều khiển phiên bản Git.",
+       "config-imagemagick": "Đã tìm thấy ImageMagick: <code>$1</code>.\nChức năng thu nhỏ hình ảnh sẽ được kích hoạt nếu bạn cho phép tải lên.",
+       "config-gd": "Đã tìm thấy thư viện đồ họa GD đi kèm.\nChức năng thu nhỏ hình ảnh sẽ được kích hoạt nếu bạn cho phép tải lên.",
+       "config-no-scaling": "Không thể tìm thấy thư viện GD hoặc ImageMagic. Chức năng thu nhỏ hình ảnh sẽ bị vô hiệu.",
+       "config-no-uri": "<strong>Lỗi:</strong> Không thể xác định URI hiện tại. Cài đặt bị thất bại.",
+       "config-no-cli-uri": "<strong>Cảnh báo:</strong> Không có <code>--scriptpath</code> nào được xác định, nên sử dụng mặc định: <code>$1</code>.",
        "config-using-server": "Sẽ sử dụng tên máy chủ “<nowiki>$1</nowiki>”.",
        "config-using-uri": "Sẽ sử dụng URL máy chủ “<nowiki>$1$2</nowiki>”.",
+       "config-uploads-not-safe": "<strong>Cảnh báo:</strong> Thư mục tải lên mặc định của bạn, <code>$1</code>, đang có lỗ hỏng bảo mật, dễ bị khai thác bởi các đoạn mã thực thi xấu.\nMặc dù MediaWiki kiểm tra tất cả các tập tin tải lên để tránh nguy cơ bảo mật, chúng tôi đặc biệt khuyến cáo [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Security#Upload_security đóng lỗ hỏng bảo mật này lại] trước khi kích hoạt tính năng tải lên.",
+       "config-no-cli-uploads-check": "<strong>Cảnh báo:</strong> Thư mục tải lên mặc định của bạn (<code>$1</code>) không được kiểm tra lỗ hỏng bảo mật dễ bị khai thác bởi các đoạn mã thực thi xấu trong quá trình cài đặt giao diện dòng lệnh.",
+       "config-brokenlibxml": "Hệ thống của bạn có kết hợp các phiên bản lỗi lầm của PHP và libxml2, điều này có thể gây ra tổn thương không nhìn thấy được đối với dữ liệu trong MediaWiki và các ứng dụng Web khác.\nHãy nâng cấp lên phiên bản libxml2 2.7.3 trở lên ([https://bugs.php.net/bug.php?id=45996 lỗi nộp PHP]).\nCài đặt bị hủy bỏ.",
+       "config-suhosin-max-value-length": "Suhosin được cài đặt và hạn chế tham số GET <code>length</code> (độ dài) không thể vượt quá $1 byte.\nThành phần ResourceLoader của MediaWiki sẽ khắc phục giới hạn này, nhưng điều này sẽ làm giảm hiệu suất.\nNếu có thể, bạn nên tăng <code>suhosin.get.max_value_length</code> lên 1024 trở lên trong <code>php.ini</code>, và đặt <code>$wgResourceLoaderMaxQueryLength</code> cùng giá trị trong <code>LocalSettings.php</code>.",
        "config-db-type": "Kiểu cơ sở dữ liệu:",
        "config-db-host": "Máy chủ của cơ sở dữ liệu:",
+       "config-db-host-help": "Nếu máy chủ cơ sở dữ liệu của bạn nằm trên máy chủ khác, hãy điền tên hoặc địa chỉ IP của máy chủ vào đây.\n\nNếu bạn đang dùng Web hosting chia sẻ, tài liệu của nhà cung cấp hosting của bạn sẽ có tên chính xác của máy chủ.\n\nNếu bạn đang cài đặt trên một máy chủ Windows và sử dụng MySQL, việc dùng “localhost” có thể không hợp với tên máy chủ. Nếu bị như vậy, hãy thử “127.0.0.1” tức địa chỉ IP địa phương.\n\nNếu bạn đang dùng PostgreSQL, hãy để trống mục này để kết nối với một ổ cắm Unix.",
        "config-db-host-oracle": "TNS cơ sở dữ liệu:",
+       "config-db-host-oracle-help": "Nhập một [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Tên Kết nối Địa phương] hợp lệ; một tập tin tnsnames.ora phải được hiển thị đối với cài đặt này.<br />Nếu bạn đang sử dụng các thư viện trình khách 10g trở lên, bạn cũng có thể sử dụng phương pháp đặt tên [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].",
        "config-db-wiki-settings": "Dữ liệu để nhận ra wiki này",
        "config-db-name": "Tên cơ sở dữ liệu:",
+       "config-db-name-help": "Chọn một tên để chỉ thị wiki của bạn.\nKhông nên đưa dấu cách vào tên này.\n\nNếu bạn đang sử dụng Web hosting chia sẻ, nhà cung cấp hosting của bạn hoặc là sẽ cung cấp cho bạn một tên cơ sở dữ liệu cụ thể để sử dụng hoặc là sẽ cho phép bạn tạo ra các cơ sở dữ liệu thông qua một bảng điều khiển.",
        "config-db-name-oracle": "Giản đồ cơ sở dữ liệu:",
+       "config-db-account-oracle-warn": "Có ba trường hợp được hỗ trợ để cài đặt Oracle làm cơ sở dữ liệu phía sau:\n\nNếu bạn muốn tạo tài khoản cơ sở dữ liệu trong quá trình cài đặt, xin vui lòng cung cấp một tài khoản với vai trò SYSDBA là tài khoản cơ sở dữ liệu để cài đặt và xác định định danh mong muốn cho tài khoản truy cập Web, nếu không bạn có thể tạo tài khoản truy cập Web thủ công và chỉ cung cấp tài khoản đó (nếu nó có các quyền yêu cầu để tạo ra các đối tượng giản đồ) hoặc cung cấp hai tài khoản riêng, một có quyền tạo ra và một bị hạn chế có quyền truy cập Web.\n\nMột kịch bản để tạo một tài khoản với quyền yêu cầu có sẵn trong thư mục cài đặt “maintenance/oracle/”. Hãy nhớ rằng việc sử dụng một tài khoản bị hạn chế sẽ vô hiệu hóa tất cả các khả năng bảo trì với tài khoản mặc định.",
        "config-db-install-account": "Tài khoản người dùng để cài đặt",
        "config-db-username": "Tên người dùng cơ sở dữ liệu:",
        "config-db-password": "Mật khẩu cơ sở dữ liệu:",
+       "config-db-password-empty": "Xin nhập vào một mật khẩu cho người dùng cơ sở dữ liệu mới: $1. Tuy bạn có thể tạo một tài khoản người dùng mà không cần mật khẩu, nhưng khi đó sẽ không đảm bảo tính bảo mật cho bạn.",
        "config-db-username-empty": "Bạn phải nhập một giá trị cho “{{int:config-db-username}}”",
+       "config-db-install-username": "Nhập tên người dùng để kết nối với cơ sở dữ liệu trong quá trình cài đặt.\nĐây không phải là tên người dùng của tài khoản MediaWiki; đây là tên người dùng cho cơ sở dữ liệu của bạn.",
+       "config-db-install-password": "Nhập mật khẩu để kết nối với cơ sở dữ liệu trong quá trình cài đặt.\nĐây không phải là mật khẩu của tài khoản MediaWiki; đây là mật khẩu cho cơ sở dữ liệu của bạn.",
+       "config-db-install-help": "Nhập tên người dùng và mật khẩu sẽ được sử dụng để kết nối với cơ sở dữ liệu trong quá trình cài đặt.",
+       "config-db-account-lock": "Sử dụng cùng tên người dùng và mật khẩu trong quá trình hoạt động bình thường",
        "config-db-wiki-account": "Tài khoản người dùng để hoạt động bình thường",
+       "config-db-wiki-help": "Nhập tên người dùng và mật khẩu sẽ được sử dụng để kết nối với cơ sở dữ liệu trong quá trình hoạt động bình thường của wiki.\nNếu tài khoản không tồn tại và tài khoản cài đặt có đủ quyền hạn, tài khoản người dùng này sẽ được tạo ra với những đặc quyền tối thiểu cần thiết để vận hành wiki.",
        "config-db-prefix": "Tiền tố bảng cơ sở dữ liệu:",
+       "config-db-prefix-help": "Nếu bạn cần phải chia sẻ một cơ sở dữ liệu chung với nhiều wiki, hay giữa MediaWiki và một ứng dụng Web, bạn có thể quyết định thêm một tiền tố cho tất cả các tên bảng để tránh xung đột.\nKhông sử dụng dấu cách.\n\nTrường này thường được bỏ trống.",
        "config-db-charset": "Bảng mã cơ sở dữ liệu",
        "config-charset-mysql5-binary": "MySQL 4.1/5.0 nhị phân",
        "config-charset-mysql5": "MySQL 4.1/5.0 UTF-8",
        "config-charset-mysql4": "MySQL 4.0 UTF-8 tương thích ngược",
+       "config-charset-help": "<strong>Cảnh báo:</strong> Nếu bạn sử dụng <strong>UTF-8 tương thích ngược</strong> trên MySQL 4.1+ và sau đó sao lưu cơ sở dữ liệu với <code>mysqldump</code>, việc này có thể phá hủy tất cả các ký tự không phải ASCII, không thể phục hồi sao lưu bị hỏng của bạn!\n\nTrong <strong>chế độ nhị phân</strong>, MediaWiki lưu trữ văn bản UTF-8 vào cơ sở dữ liệu trong các trường nhị phân.\nĐiều này hiệu quả hơn so với chế độ UTF-8 của MySQL và cho phép bạn sử dụng đầy đủ các ký tự của Unicode.\nTrong <strong>chế độ UTF-8</strong>, MySQL sẽ biết bảng mã của dữ liệu và có thể trình bày và chuyển đổi nó chính xác,\nnhưng nó sẽ không cho phép lưu các ký tự nằm cao hơn [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Mặt phẳng đa ngôn ngữ căn bản].",
        "config-mysql-old": "Cần MySQL $1 trở lên; bạn có $2.",
        "config-db-port": "Cổng cơ sở dữ liệu:",
        "config-db-schema": "Giản đồ cho MediaWiki:",
+       "config-db-schema-help": "Giản đồ này thường làm việc tốt.\nChỉ thay đổi nó nếu bạn biết cần phải làm như vậy.",
        "config-pg-test-error": "Không thể kết nối với cơ sở dữ liệu '''$1''': $2",
        "config-sqlite-dir": "Thư mục dữ liệu SQLite:",
+       "config-sqlite-dir-help": "SQLite lưu tất cả các dữ liệu trong một tập tin duy nhất.\n\nThư mục mà bạn cung cấp phải cho phép máy chủ Web ghi vào khi cài đặt.\n\n<strong>Không</strong> nên làm cho nó truy cập được qua Web; đây là lý do chúng tôi không đặt nó vào cùng thư mục với các tập tin PHP của bạn.\n\nTrình cài đặt sẽ ghi một tập tin <code>.htaccess</code> đi kèm, nhưng nếu thất bại người nào đó có thể truy cập vào cơ sở dữ liệu thô của bạn.\nĐiều đó bao gồm dữ liệu người dùng thô (địa chỉ thư điện tử, mật khẩu được băm) cũng như các phiên bản bị xóa và dữ liệu bị hạn chế khác trên wiki.\n\nXem xét đặt cơ sở dữ liệu tại nơi nào khác hẳn, ví dụ trong <code>/var/lib/mediawiki/wiki_cua_ban</code>.",
        "config-oracle-def-ts": "Không gian bảng mặc định:",
        "config-oracle-temp-ts": "Không gian bảng tạm:",
        "config-type-mysql": "MySQL (hoặc tương hợp)",
        "config-type-mssql": "Microsoft SQL Server",
+       "config-support-info": "MediaWiki hỗ trợ các hệ thống cơ sở dữ liệu sau đây:\n\n$1\n\nNếu bạn không thấy hệ thống cơ sở dữ liệu mà bạn đang muốn sử dụng được liệt kê dưới đây, thì hãy theo chỉ dẫn được liên kết ở trên để kích hoạt tính năng hỗ trợ.",
+       "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL] là mục tiêu chính cho MediaWiki và được hỗ trợ tốt nhất. MediaWiki cũng làm việc với [{{int:version-db-mariadb-url}} MariaDB] và [{{int:version-db-percona-url}} Percona Server], là những cơ sở dữ liệu tương thích với MySQL. ([http://www.php.net/manual/en/mysqli.installation.php Làm thế nào để biên dịch PHP với sự hỗ trợ của MySQL])",
+       "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] là một hệ thống cơ sở dữ liệu mã nguồn mở phổ biến như là một thay thế cho MySQL. Có thể có một số lỗi nhỏ lâu đời, và nó không được khuyến cáo sử dụng trong môi trường sản xuất. ([http://www.php.net/manual/en/pgsql.installation.php Làm thế nào để biên dịch PHP với sự hỗ trợ của PostgreSQL])",
+       "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] là một hệ thống cơ sở dữ liệu dung lượng nhẹ được hỗ trợ rất tốt. ([http://www.php.net/manual/en/pdo.installation.php Làm thế nào để biên dịch PHP với sự hỗ trợ của SQLite], sử dụng PDO)",
+       "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] là một cơ sở dữ liệu doanh nghiệp thương mại. ([http://www.php.net/manual/en/oci8.installation.php Làm thế nào để biên dịch PHP với sự hỗ trợ của OCI8])",
+       "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] là một cơ sở dữ liệu doanh nghiệp thương mại cho Windows. ([http://www.php.net/manual/en/sqlsrv.installation.php Làm thế nào để biên dịch PHP với sự hỗ trợ của SQLSRV])",
        "config-header-mysql": "Thiết lập MySQL",
        "config-header-postgres": "Thiết lập PostgreSQL",
        "config-header-sqlite": "Thiết lập SQLite",
        "config-missing-db-name": "Bạn phải nhập một giá trị cho “{{int:config-db-name}}”",
        "config-missing-db-host": "Bạn phải nhập một giá trị cho “{{int:config-db-host}}”",
        "config-missing-db-server-oracle": "Bạn phải nhập một giá trị cho “{{int:config-db-host-oracle}}”",
+       "config-invalid-db-server-oracle": "Cơ sở dữ liệu TNS không hợp lệ “$1”.\nHoặc sử dụng “TNS Name” hoặc một chuỗi “Easy Connect” ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Phương pháp đặt tên Oracle]).",
+       "config-invalid-db-name": "Tên cơ sở dữ liệu không hợp lệ “$1”.\nChỉ sử dụng các chữ cái ASCII (a–z, A–Z), số (0–9), dấu gạch dưới (_) và dấu gạch ngang (-).",
+       "config-invalid-db-prefix": "Tiền tố cơ sở dữ liệu không hợp lệ “$1”.\nChỉ sử dụng các chữ cái ASCII (a–z, A–Z), số (0–9), dấu gạch dưới (_) và dấu gạch ngang (-).",
+       "config-connection-error": "$1.\n\nKiểm tra máy chủ, tên người dùng, và mật khẩu và thử lại lần nữa.",
        "config-invalid-schema": "Giản đồ “$1” không hợp lệ cho MediaWiki.\nHãy chỉ sử dụng các chữ cái ASCII (a–z, A–Z), chữ số (0–9), và dấu gạch dưới (_).",
+       "config-db-sys-create-oracle": "Trình cài đặt chỉ hỗ trợ sử dụng một tài khoản SYSDBA để tạo một tài khoản mới.",
+       "config-db-sys-user-exists-oracle": "Tài khoản người dùng “$1” đã tồn tại. SYSDBA chỉ có thể được sử dụng để tạo một tài khoản mới!",
        "config-postgres-old": "Cần PostgreSQL $1 trở lên; bạn có $2.",
        "config-mssql-old": "Cần Microsoft SQL Server $1 trở lên. Bạn có $2.",
+       "config-sqlite-name-help": "Chọn một tên để chỉ thị wiki của bạn.\nKhông sử dụng các dấu cách ( ) hoặc dấu gạch nối (-).\nTên này sẽ được sử dụng cho tên tập tin dữ liệu SQLite.",
+       "config-sqlite-parent-unwritable-group": "Không thể tạo ra thư mục dữ liệu <code><nowiki>$1</nowiki></code>, bởi vì thư mục cha <code><nowiki>$2</nowiki></code> không cho phép máy chủ Web ghi vào.\n\nTrình cài đặt đã xác định người dùng mà máy chủ Web của bạn đang chạy.\n\nHãy thiết lập để thư mục <code><nowiki>$3</nowiki></code> có thể ghi được bởi nó để tiếp tục.\nTrong một hệ thống Unix/Linux làm theo như sau:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
+       "config-sqlite-parent-unwritable-nogroup": "Không thể tạo ra thư mục dữ liệu <code><nowiki>$1</nowiki></code>, bởi vì thư mục cha <code><nowiki>$2</nowiki></code> không cho phép máy chủ Web ghi vào.\n\nTrình cài đặt không thể xác định người sử dụng mà máy chủ web của bạn đang chạy.\nThiết lập thư mục <code><nowiki>$3</nowiki></code> có thể ghi toàn cục bởi nó (và những người khác!) để tiếp tục.\nTrong một hệ thống Unix/Linux hãy đánh các dòng lệnh sau:\n\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
+       "config-sqlite-mkdir-error": "Lỗi tạo thư mục dữ liệu “$1”.\nKiểm tra vị trí lưu và thử lại.",
+       "config-sqlite-dir-unwritable": "Không thể ghi vào thư mục “$1”.\nThay đổi quyền hạn của nó để máy chủ Web có thể ghi vào, và thử lại.",
+       "config-sqlite-connection-error": "$1.\n\nKiểm tra thư mục dữ liệu và tên cơ sở dữ liệu dưới đây và thử lại.",
        "config-sqlite-readonly": "Không thể ghi vào tập tin <code>$1</code>.",
        "config-sqlite-cant-create-db": "Không thể tạo ra tập tin cơ sở dữ liệu <code>$1</code>.",
        "config-sqlite-fts3-downgrade": "PHP thiếu sự hỗ trợ cho FTS3; đang giáng cấp các bảng",
        "config-can-upgrade": "Cơ sở dữ liệu này có bảng MediaWiki.\nĐể nâng cấp các bảng đến MediaWiki $1, bấm <strong>Tiếp tục</strong>.",
+       "config-upgrade-done": "Nâng cấp đã hoàn thành.\n\nBạn có thể [$1 bắt đầu sử dụng wiki của bạn] ngay bây giờ.\n\nNếu bạn muốn tạo lại tập tin <code>LocalSettings.php</code> của bạn, bấm nút bên dưới.\nĐiều này <strong>không được khuyến khích</strong>, trừ khi bạn đang gặp vấn đề với wiki của bạn.",
+       "config-upgrade-done-no-regenerate": "Nâng cấp đã hoàn thành.\n\nBạn có thể [$1 bắt đầu sử dụng wiki của bạn] ngay bây giờ.",
        "config-regenerate": "Tạo lại LocalSettings.php →",
        "config-show-table-status": "Truy vấn <code>SHOW TABLE STATUS</code> bị thất bại!",
        "config-unknown-collation": "<strong>Cảnh báo:</strong> Database đang sử dụng đối chiếu không được thừa nhận.",
        "config-db-web-account": "Tài khoản cơ sở dữ liệu để truy cập Web",
+       "config-db-web-help": "Chọn tên người dùng và mật khẩu mà máy chủ Web sẽ sử dụng để kết nối đến máy chủ cơ sở dữ liệu trong quá trình hoạt động bình thường của wiki.",
        "config-db-web-account-same": "Sử dụng lại tài khoản cài đặt",
        "config-db-web-create": "Mở tài khoản nếu chưa tồn tại",
        "config-db-web-no-create-privs": "Tài khoản mà bạn xác định để cài đặt không có đủ quyền để tạo một tài khoản. Tài khoản mà bạn chỉ ra ở đây phải thực sự tồn tại trước đó.",
        "config-mysql-engine": "Máy lưu trữ:",
        "config-mysql-innodb": "InnoDB",
        "config-mysql-myisam": "MyISAM",
+       "config-mysql-myisam-dep": "<strong>Cảnh báo:</strong> Bạn đã chọn MyISAM làm động cơ lưu trữ cho MySQL, điều này không được khuyến khích sử dụng với MediaWiki, bởi vì:\n* Nó ít hỗ trợ đồng thời do việc khóa bảng\n* Nó dễ bị lỗi hơn so với các động cơ khác\n* Kho mã nguồn của MediaWiki không phải khi nào cũng xử lý MyISAM như mong muốn\n\nNếu cài đặt MySQL của bạn hỗ trợ InnoDB, đặc biệt khuyến cáo bạn nên chọn để thay thế.\nNếu cài đặt MySQL của bạn không hỗ trợ InnoDB, có lẽ đã đến lúc để nâng cấp.",
+       "config-mysql-only-myisam-dep": "<strong>Cảnh báo:</strong> MyISAM chỉ là công cụ lưu trữ có sẵn cho MySQL trên máy tính này, và điều này không được khuyến khích sử dụng với MediaWiki, bởi vì:\n* Nó ít hỗ trợ đồng thời do việc khóa khóa\n* Nó là dễ bị hư hỏng hơn các engine khác\n* Codebase MediaWiki không phải khi nào cũng xử lý MyISAM như mong muốn\n\nCài đặt MySQL của bạn không hỗ trợ InnoDB, có lẽ đã đến lúc để nâng cấp.",
        "config-mysql-charset": "Bảng mã cơ sở dữ liệu:",
        "config-mysql-binary": "Nhị phân",
        "config-mysql-utf8": "UTF-8",
index f4c3316..cbd48f1 100644 (file)
@@ -72,7 +72,7 @@
        "config-unicode-using-intl": "使用[http://pecl.php.net/intl intl PECL扩展程序]标准化Unicode。",
        "config-unicode-pure-php-warning": "<strong>警告:</strong>因为尚未安装 [http://pecl.php.net/intl intl PECL 扩展]以处理 Unicode 正常化,故只能退而采用运行较慢的纯 PHP 实现的方法。\n如果您运行着一个高流量的网站,请参阅 [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode标准化]一文。",
        "config-unicode-update-warning": "'''警告''':Unicode正常化封装器的已安装版本使用了旧版本的[http://site.icu-project.org/ ICU项目]库。如果您需要使用Unicode,请将其[//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations 升级]。",
-       "config-no-db": "æ\89¾ä¸\8då\88°å\90\88é\80\82ç\9a\84æ\95°æ\8d®åº\93驱å\8a¨ï¼\81æ\82¨é\9c\80è¦\81为PHPå®\89è£\85æ\95°æ\8d®åº\93驱å\8a¨ã\80\82ç\9b®å\89\8dæ\94¯æ\8c\81以ä¸\8bæ\95°æ\8d®åº\93ï¼\9a$1ã\80\82å¦\82æ\9e\9cæ\82¨æ\98¯è\87ªå·±ç¼\96è¯\91ç\9a\84PHPï¼\8c请é\87\8dæ\96°é\85\8dç½®ä»\96ä¸\8eæ\95°æ\8d®åº\93客æ\88·ç«¯å°\86å\85¶å\90¯ç\94¨ï¼\8c诸å¦\82ï¼\8c使ç\94¨<code>./configure --with-mysqli</code>ã\80\82å¦\82æ\9e\9cæ\82¨ä»\8eDebianæ\88\96Ubuntuå\8c\85å®\89è£\85äº\86PHPï¼\8cä¹\8bå\90\8eæ\82¨ä»\8dé\9c\80è¦\81å®\89è£\85诸å¦\82<code>php5-mysql</code>包。",
+       "config-no-db": "æ\97 æ³\95æ\89¾å\88°å\90\88é\80\82ç\9a\84æ\95°æ\8d®åº\93驱å\8a¨ï¼\81æ\82¨é\9c\80è¦\81为PHPå®\89è£\85æ\95°æ\8d®åº\93驱å\8a¨ã\80\82ç\9b®å\89\8dæ\94¯æ\8c\81以ä¸\8bæ\95°æ\8d®åº\93{{PLURAL:$2|ç±»å\9e\8b}}ï¼\9a$1ã\80\82\n\nå¦\82æ\9e\9cæ\82¨è\87ªå·±ç¼\96è¯\91äº\86PHPï¼\8c请é\80\9aè¿\87å\90¯ç\94¨æ\95°æ\8d®åº\93客æ\88·ç«¯é\87\8dæ\96°é\85\8dç½®å®\83ï¼\8cä¾\8bå¦\82使ç\94¨ <code>./configure --with-mysqli</code>ã\80\82å¦\82æ\9e\9cæ\82¨ä»\8e Debian æ\88\96 Ubuntu å®\89è£\85å\8c\85å®\89è£\85äº\86PHPï¼\8cé\82£ä¹\88æ\82¨ä¹\9fé\9c\80è¦\81å®\89è£\85ï¼\8cä¾\8bå¦\82 <code>php5-mysql</code> å®\89è£\85包。",
        "config-outdated-sqlite": "'''警告''':您已安装SQLite $1,但是它的版本低于最低要求版本$2。因此您无法选择SQLite。",
        "config-no-fts3": "'''警告''':已编译的SQLite不包含[//sqlite.org/fts3.html FTS3模块],后台搜索功能将不可用。",
        "config-register-globals-error": "<strong>错误:PHP<code>[http://php.net/register_globals register_globals]</code>选项被启用。必须禁用它才能继续安装。</strong>关于如何禁用,参见[https://www.mediawiki.org/wiki/register_globals mediawiki.org此页]。",
index 56fd1c6..334d374 100644 (file)
@@ -135,7 +135,15 @@ abstract class Job implements IJobSpecification {
        }
 
        /**
-        * @return bool Whether only one of each identical set of jobs should be run
+        * Whether the queue should reject insertion of this job if a duplicate exists
+        *
+        * This can be used to avoid duplicated effort or combined with delayed jobs to
+        * coalesce updates into larger batches. Claimed jobs are never treated as
+        * duplicates of new jobs, and some queues may allow a few duplicates due to
+        * network partitions and fail-over. Thus, additional locking is needed to
+        * enforce mutual exclusion if this is really needed.
+        *
+        * @return bool
         */
        public function ignoreDuplicates() {
                return $this->removeDuplicates;
index d99bfab..ef0f087 100644 (file)
@@ -76,6 +76,12 @@ class JobRunner {
                        $this->runJobsLog( "Executed $count periodic queue task(s)." );
                }
 
+               // Bail out if in read-only mode
+               if ( wfReadOnly() ) {
+                       $response['reached'] = 'read-only';
+                       return $response;
+               }
+
                // Bail out if there is too much DB lag
                list( , $maxLag ) = wfGetLBFactory()->getMainLB( wfWikiID() )->getMaxLag();
                if ( $maxLag >= 5 ) {
diff --git a/includes/libs/DeferredStringifier.php b/includes/libs/DeferredStringifier.php
new file mode 100644 (file)
index 0000000..bd32949
--- /dev/null
@@ -0,0 +1,55 @@
+<?php
+/**
+ * Class that defers a slow string generation until the string is actually needed.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * @since 1.25
+ */
+class DeferredStringifier {
+       /** @var callable Callback used for result string generation */
+       private $callback;
+       /** @var array */
+       private $params;
+       /** @var string */
+       private $result;
+
+       /**
+        * @param callable $callback Callback that gets called by __toString
+        * @param mixed $param,... Parameters to the callback
+        */
+       public function __construct( $callback /*...*/ ) {
+               $this->params = func_get_args();
+               array_shift( $this->params );
+               $this->callback = $callback;
+       }
+
+       /**
+        * Returns a string generated by callback
+        *
+        * @return string
+        */
+       public function __toString() {
+               if ( $this->result === null ) {
+                       $this->result = call_user_func_array( $this->callback, $this->params );
+               }
+               return $this->result;
+       }
+}
index 34e43f9..03bdf0d 100644 (file)
@@ -88,8 +88,8 @@ class ParsoidVirtualRESTService extends VirtualRESTService {
                                        if ( !isset( $req['body']['html'] ) ) {
                                                throw new Exception( "You must set an 'html' body key for this request" );
                                        }
-                                       if ( isset( $parts[6] ) ) {
-                                               $req['body']['oldid'] = $parts[6];
+                                       if ( isset( $parts[7] ) ) {
+                                               $req['body']['oldid'] = $parts[7];
                                        }
                                } elseif ( $parts[3] == 'wikitext' && $parts[5] == 'html' ) {
                                        if ( !isset( $req['body']['wikitext'] ) ) {
index 438a17c..0fc251e 100644 (file)
@@ -410,10 +410,18 @@ class Article implements Page {
                // @todo FIXME: Horrible, horrible! This content-loading interface just plain sucks.
                // We should instead work with the Revision object when we need it...
                // Loads if user is allowed
-               $this->mContentObject = $this->mRevision->getContent(
+               $content = $this->mRevision->getContent(
                        Revision::FOR_THIS_USER,
                        $this->getContext()->getUser()
                );
+
+               if ( !$content ) {
+                       wfDebug( __METHOD__ . " failed to retrieve content of revision " .
+                               $this->mRevision->getId() . "\n" );
+                       return false;
+               }
+
+               $this->mContentObject = $content;
                $this->mRevIdFetched = $this->mRevision->getId();
 
                Hooks::run( 'ArticleAfterFetchContentObject', array( &$this, &$this->mContentObject ) );
@@ -1129,7 +1137,7 @@ class Article implements Page {
                        return false;
                }
 
-               if ( $rc->getPerformer()->getName() == $user->getName() ) {
+               if ( $rc->getPerformer()->equals( $user ) ) {
                        // Don't show a patrol link for own creations. If the user could
                        // patrol them, they already would be patrolled
                        return false;
index b4409c3..b8f67c2 100644 (file)
@@ -241,12 +241,13 @@ class ImagePage extends Article {
                        '<li><a href="#filehistory">' . $this->getContext()->msg( 'filehist' )->escaped() . '</a></li>',
                        '<li><a href="#filelinks">' . $this->getContext()->msg( 'imagelinks' )->escaped() . '</a></li>',
                );
+
+               Hooks::run( 'ImagePageShowTOC', array( $this, &$r ) );
+
                if ( $metadata ) {
                        $r[] = '<li><a href="#metadata">' . $this->getContext()->msg( 'metadata' )->escaped() . '</a></li>';
                }
 
-               Hooks::run( 'ImagePageShowTOC', array( $this, &$r ) );
-
                return '<ul id="filetoc">' . implode( "\n", $r ) . '</ul>';
        }
 
index 8373dc0..9b98592 100644 (file)
@@ -2983,8 +2983,8 @@ class WikiPage implements Page, IDBAccessObject {
 
                // Get the last edit not by this guy...
                // Note: these may not be public values
-               $user = intval( $current->getRawUser() );
-               $user_text = $dbw->addQuotes( $current->getRawUserText() );
+               $user = intval( $current->getUser( Revision::RAW ) );
+               $user_text = $dbw->addQuotes( $current->getUserText( Revision::RAW ) );
                $s = $dbw->selectRow( 'revision',
                        array( 'rev_id', 'rev_timestamp', 'rev_deleted' ),
                        array( 'rev_page' => $current->getPage(),
index 27c8148..fe86ca9 100644 (file)
@@ -22,6 +22,7 @@ class ExtensionProcessor implements Processor {
                'RemoveGroups',
                'AvailableRights',
                'ContentHandlers',
+               'ConfigRegistry',
                'RateLimits',
                'ParserTestFiles',
                'RecentChangesFlags',
@@ -127,7 +128,8 @@ class ExtensionProcessor implements Processor {
                foreach ( $info as $key => $val ) {
                        if ( in_array( $key, self::$globalSettings ) ) {
                                $this->storeToArray( "wg$key", $val, $this->globals );
-                       } elseif ( !in_array( $key, $this->processed ) ) {
+                       // Ignore anything that starts with a @
+                       } elseif ( $key[0] !== '@' && !in_array( $key, $this->processed ) ) {
                                $this->storeToArray( $key, $val, $this->attributes );
                        }
                }
index b28dc51..905e537 100644 (file)
@@ -50,6 +50,20 @@ abstract class QuickTemplate {
                $this->data[$name] = $value;
        }
 
+       /**
+       * extends the value of data with name $name with the value $value
+       * @since 1.25
+       * @param string $name
+       * @param mixed $value
+       */
+       public function extend( $name, $value ) {
+               if ( $this->haveData( $name ) ) {
+                       $this->data[$name] = $this->data[$name] . $value;
+               } else {
+                       $this->data[$name] = $value;
+               }
+       }
+
        /**
         * Gets the template data requested
         * @since 1.22
index fd3bc7b..f727c05 100644 (file)
@@ -74,6 +74,16 @@ abstract class FormSpecialPage extends SpecialPage {
                return strtolower( $this->getName() );
        }
 
+       /**
+        * Get display format for the form. See HTMLForm documentation for available values.
+        *
+        * @since 1.25
+        * @return string
+        */
+       protected function getDisplayFormat() {
+               return 'table';
+       }
+
        /**
         * Get the HTMLForm to control behavior
         * @return HTMLForm|null
@@ -81,15 +91,9 @@ abstract class FormSpecialPage extends SpecialPage {
        protected function getForm() {
                $this->fields = $this->getFormFields();
 
-               $form = new HTMLForm( $this->fields, $this->getContext(), $this->getMessagePrefix() );
+               $form = HTMLForm::factory( $this->getDisplayFormat(), $this->fields, $this->getContext(), $this->getMessagePrefix() );
                $form->setSubmitCallback( array( $this, 'onSubmit' ) );
-               // If the form is a compact vertical form, then don't output this ugly
-               // fieldset surrounding it.
-               // XXX Special pages can setDisplayFormat to 'vform' in alterForm(), but that
-               // is called after this.
-               if ( !$form->isVForm() ) {
-                       $form->setWrapperLegendMsg( $this->getMessagePrefix() . '-legend' );
-               }
+               $form->setWrapperLegendMsg( $this->getMessagePrefix() . '-legend' );
 
                $headerMsg = $this->msg( $this->getMessagePrefix() . '-text' );
                if ( !$headerMsg->isDisabled() ) {
index 0caf6b4..66f1f03 100644 (file)
@@ -269,9 +269,11 @@ class SpecialActiveUsers extends SpecialPage {
 
                // Occasionally merge in new updates
                $seconds = min( self::mergeActiveUsers( 300, $days ), $days * 86400 );
-               // Mention the level of staleness
-               $out->addWikiMsg( 'cachedspecial-viewing-cached-ttl',
-                       $this->getLanguage()->formatDuration( $seconds ) );
+               if ( $seconds > 0 ) {
+                       // Mention the level of staleness
+                       $out->addWikiMsg( 'cachedspecial-viewing-cached-ttl',
+                               $this->getLanguage()->formatDuration( $seconds ) );
+               }
 
                $up = new ActiveUsersPager( $this->getContext(), null, $par );
 
index 06ede61..674cbc8 100644 (file)
@@ -106,11 +106,13 @@ class SpecialChangeEmail extends FormSpecialPage {
                return $fields;
        }
 
+       protected function getDisplayFormat() {
+               return 'vform';
+       }
+
        protected function alterForm( HTMLForm $form ) {
-               $form->setDisplayFormat( 'vform' );
                $form->setId( 'mw-changeemail-form' );
                $form->setTableId( 'mw-changeemail-table' );
-               $form->setWrapperLegend( false );
                $form->setSubmitTextMsg( 'changeemail-submit' );
                $form->addHiddenFields( $this->getRequest()->getValues( 'returnto', 'returntoquery' ) );
        }
index fa719eb..492105d 100644 (file)
@@ -192,7 +192,6 @@ HTML;
         */
        private function exportQUnit() {
                $out = $this->getOutput();
-
                $out->disable();
 
                $rl = $out->getResourceLoader();
index 52c2460..79b2444 100644 (file)
@@ -90,9 +90,11 @@ class SpecialPageLanguage extends FormSpecialPage {
                return $this->showLogFragment( $this->par );
        }
 
+       protected function getDisplayFormat() {
+               return 'vform';
+       }
+
        public function alterForm( HTMLForm $form ) {
-               $form->setDisplayFormat( 'vform' );
-               $form->setWrapperLegend( false );
                Hooks::run( 'LanguageSelector', array( $this->getOutput(), 'mw-languageselector' ) );
        }
 
index 6ee3290..a2dc2ad 100644 (file)
@@ -103,16 +103,13 @@ class SpecialPasswordReset extends FormSpecialPage {
                return $a;
        }
 
+       protected function getDisplayFormat() {
+               return 'vform';
+       }
+
        public function alterForm( HTMLForm $form ) {
                $resetRoutes = $this->getConfig()->get( 'PasswordResetRoutes' );
 
-               $form->setDisplayFormat( 'vform' );
-               // Turn the old-school line around the form off.
-               // XXX This wouldn't be necessary here if we could set the format of
-               // the HTMLForm to 'vform' at its creation, but there's no way to do so
-               // from a FormSpecialPage class.
-               $form->setWrapperLegend( false );
-
                $form->addHiddenFields( $this->getRequest()->getValues( 'returnto', 'returntoquery' ) );
 
                $i = 0;
index 2ea1b12..fb2c421 100644 (file)
@@ -550,7 +550,7 @@ class PageArchive {
                                'title' => $article->getTitle(), // used to derive default content model
                        )
                );
-               $user = User::newFromName( $revision->getRawUserText(), false );
+               $user = User::newFromName( $revision->getUserText( Revision::RAW ), false );
                $content = $revision->getContent( Revision::RAW );
 
                //NOTE: article ID may not be known yet. prepareSave() should not modify the database.
@@ -623,7 +623,7 @@ class PageArchive {
                $wasnew = $article->updateIfNewerOn( $dbw, $revision, $previousRevId );
                if ( $created || $wasnew ) {
                        // Update site stats, link tables, etc
-                       $user = User::newFromName( $revision->getRawUserText(), false );
+                       $user = User::newFromName( $revision->getUserText( Revision::RAW ), false );
                        $article->doEditUpdates(
                                $revision,
                                $user,
index b965b54..1b85ff8 100644 (file)
@@ -461,7 +461,7 @@ class SpecialUpload extends SpecialPage {
                // Get the page text if this is not a reupload
                if ( !$this->mForReUpload ) {
                        $pageText = self::getInitialPageText( $this->mComment, $this->mLicense,
-                               $this->mCopyrightStatus, $this->mCopyrightSource );
+                               $this->mCopyrightStatus, $this->mCopyrightSource, $this->getConfig() );
                } else {
                        $pageText = false;
                }
@@ -491,28 +491,32 @@ class SpecialUpload extends SpecialPage {
         * @param string $license
         * @param string $copyStatus
         * @param string $source
+        * @param Config $config Configuration object to load data from
         * @return string
-        * @todo Use Config obj instead of globals
         */
        public static function getInitialPageText( $comment = '', $license = '',
-               $copyStatus = '', $source = ''
+               $copyStatus = '', $source = '', Config $config = null
        ) {
-               global $wgUseCopyrightUpload, $wgForceUIMsgAsContentMsg;
+               if ( $config === null ) {
+                       wfDebug( __METHOD__ . ' called without a Config instance passed to it' );
+                       $config = ConfigFactory::getDefaultInstance()->makeConfig( 'main' );
+               }
 
                $msg = array();
+               $forceUIMsgAsContentMsg = (array)$config->get( 'ForceUIMsgAsContentMsg' );
                /* These messages are transcluded into the actual text of the description page.
                 * Thus, forcing them as content messages makes the upload to produce an int: template
                 * instead of hardcoding it there in the uploader language.
                 */
                foreach ( array( 'license-header', 'filedesc', 'filestatus', 'filesource' ) as $msgName ) {
-                       if ( in_array( $msgName, (array)$wgForceUIMsgAsContentMsg ) ) {
+                       if ( in_array( $msgName, $forceUIMsgAsContentMsg ) ) {
                                $msg[$msgName] = "{{int:$msgName}}";
                        } else {
                                $msg[$msgName] = wfMessage( $msgName )->inContentLanguage()->text();
                        }
                }
 
-               if ( $wgUseCopyrightUpload ) {
+               if ( $config->get( 'UseCopyrightUpload' ) ) {
                        $licensetxt = '';
                        if ( $license != '' ) {
                                $licensetxt = '== ' . $msg['license-header'] . " ==\n" . '{{' . $license . '}}' . "\n";
@@ -937,35 +941,31 @@ class UploadForm extends HTMLForm {
                $config = $this->getConfig();
 
                if ( $config->get( 'CheckFileExtensions' ) ) {
+                       $fileExtensions = array_unique( $config->get( 'FileExtensions' ) );
                        if ( $config->get( 'StrictFileExtensions' ) ) {
                                # Everything not permitted is banned
                                $extensionsList =
                                        '<div id="mw-upload-permitted">' .
-                                       $this->msg(
-                                               'upload-permitted',
-                                               $this->getContext()->getLanguage()->commaList(
-                                                       array_unique( $config->get( 'FileExtensions' ) )
-                                               )
-                                       )->parseAsBlock() .
+                                       $this->msg( 'upload-permitted' )
+                                               ->params( $this->getLanguage()->commaList( $fileExtensions ) )
+                                               ->numParams( count( $fileExtensions ) )
+                                               ->parseAsBlock() .
                                        "</div>\n";
                        } else {
                                # We have to list both preferred and prohibited
+                               $fileBlacklist = array_unique( $config->get( 'FileBlacklist' ) );
                                $extensionsList =
                                        '<div id="mw-upload-preferred">' .
-                                               $this->msg(
-                                                       'upload-preferred',
-                                                       $this->getContext()->getLanguage()->commaList(
-                                                               array_unique( $config->get( 'FileExtensions' ) )
-                                                       )
-                                               )->parseAsBlock() .
+                                               $this->msg( 'upload-preferred' )
+                                                       ->params( $this->getLanguage()->commaList( $fileExtensions ) )
+                                                       ->numParams( count( $fileExtensions ) )
+                                                       ->parseAsBlock() .
                                        "</div>\n" .
                                        '<div id="mw-upload-prohibited">' .
-                                               $this->msg(
-                                                       'upload-prohibited',
-                                                       $this->getContext()->getLanguage()->commaList(
-                                                               array_unique( $config->get( 'FileBlacklist' ) )
-                                                       )
-                                               )->parseAsBlock() .
+                                               $this->msg( 'upload-prohibited' )
+                                                       ->params( $this->getLanguage()->commaList( $fileBlacklist ) )
+                                                       ->numParams( count( $fileBlacklist ) )
+                                                       ->parseAsBlock() .
                                        "</div>\n";
                        }
                } else {
@@ -1146,6 +1146,7 @@ class UploadForm extends HTMLForm {
                                // the wpDestFile textbox
                                $this->mDestFile === '',
                        'wgUploadSourceIds' => $this->mSourceIds,
+                       'wgCheckFileExtensions' => $config->get( 'CheckFileExtensions' ),
                        'wgStrictFileExtensions' => $config->get( 'StrictFileExtensions' ),
                        'wgFileExtensions' => array_values( array_unique( $config->get( 'FileExtensions' ) ) ),
                        'wgCapitalizeUploads' => MWNamespace::isCapitalized( NS_FILE ),
index 892ff5b..3bf75a0 100644 (file)
@@ -106,7 +106,7 @@ class UserrightsPage extends SpecialPage {
                        }
                }
 
-               if ( User::getCanonicalName( $this->mTarget ) == $user->getName() ) {
+               if ( User::getCanonicalName( $this->mTarget ) === $user->getName() ) {
                        $this->isself = true;
                }
 
@@ -228,7 +228,7 @@ class UserrightsPage extends SpecialPage {
                global $wgAuth;
 
                // Validate input set...
-               $isself = ( $user->getName() == $this->getUser()->getName() );
+               $isself = $user->equals( $this->getUser() );
                $groups = $user->getGroups();
                $changeable = $this->changeableGroups();
                $addable = array_merge( $changeable['add'], $isself ? $changeable['add-self'] : array() );
@@ -244,18 +244,22 @@ class UserrightsPage extends SpecialPage {
                $oldGroups = $user->getGroups();
                $newGroups = $oldGroups;
 
-               // remove then add groups
+               // Remove then add groups
                if ( $remove ) {
-                       $newGroups = array_diff( $newGroups, $remove );
-                       foreach ( $remove as $group ) {
-                               $user->removeGroup( $group );
+                       foreach ( $remove as $index => $group ) {
+                               if ( !$user->removeGroup( $group ) ) {
+                                       unset($remove[$index]);
+                               }
                        }
+                       $newGroups = array_diff( $newGroups, $remove );
                }
                if ( $add ) {
-                       $newGroups = array_merge( $newGroups, $add );
-                       foreach ( $add as $group ) {
-                               $user->addGroup( $group );
+                       foreach ( $add as $index => $group ) {
+                               if ( !$user->addGroup( $group ) ) {
+                                       unset($add[$index]);
+                               }
                        }
+                       $newGroups = array_merge( $newGroups, $add );
                }
                $newGroups = array_unique( $newGroups );
 
index 4eea01c..b185cb3 100644 (file)
@@ -53,7 +53,7 @@ class UsercreateTemplate extends BaseTemplate {
        <div id="userloginForm">
                <form name="userlogin2" id="userlogin2" class="mw-ui-vform" method="post" action="<?php $this->text( 'action' ); ?>">
                        <section class="mw-form-header">
-                               <?php $this->html( 'header' ); /* extensions such as ConfirmEdit add form HTML here */ ?>
+                               <?php $this->html( 'header' ); ?>
                        </section>
                        <!-- This element is used by the mediawiki.special.userlogin.signup.js module. -->
                        <div
@@ -248,8 +248,11 @@ class UsercreateTemplate extends BaseTemplate {
                                }
                        }
 
-                       // JS attempts to move the image CAPTCHA below this part of the form,
-                       // so skip one index.
+                       // A separate placeholder for any inserting any extrafields, e.g used by ConfirmEdit extension
+                       if ( $this->haveData( 'extrafields' ) ) {
+                               echo $this->data['extrafields'];
+                       }
+                       // skip one index.
                        $tabIndex++;
                        ?>
                        <div class="mw-ui-vform-field mw-submit">
@@ -262,7 +265,6 @@ class UsercreateTemplate extends BaseTemplate {
                                                'tabindex' => $tabIndex++
                                        ),
                                        array(
-                                               'mw-ui-big',
                                                'mw-ui-block',
                                                'mw-ui-constructive',
                                        )
index 69266c8..345bb71 100644 (file)
@@ -70,12 +70,10 @@ class UserloginTemplate extends BaseTemplate {
                                        ?>
                                </label>
                                <?php
-                               $extraAttrs = array();
                                echo Html::input( 'wpName', $this->data['name'], 'text', array(
                                        'class' => 'loginText mw-ui-input',
                                        'id' => 'wpName1',
                                        'tabindex' => '1',
-                                       'size' => '20',
                                        // 'required' is blacklisted for now in Html.php due to browser issues.
                                        // Keeping here in case that changes.
                                        'required' => true,
@@ -97,7 +95,6 @@ class UserloginTemplate extends BaseTemplate {
                                        'class' => 'loginPassword mw-ui-input',
                                        'id' => 'wpPassword1',
                                        'tabindex' => '2',
-                                       'size' => '20',
                                        // Set focus to this field if username is filled in.
                                        'autofocus' => (bool)$this->data['name'],
                                        'placeholder' => $this->getMsg( 'userlogin-yourpassword-ph' )->text()
@@ -146,7 +143,7 @@ class UserloginTemplate extends BaseTemplate {
                                        'tabindex' => '6',
                                );
                                $modifiers = array(
-                                       'mw-ui-big', 'mw-ui-block', 'mw-ui-constructive',
+                                       'mw-ui-constructive',
                                );
                                echo Html::submitButton( $this->getMsg( 'pt-login-button' )->text(), $attrs, $modifiers );
                                ?>
@@ -166,33 +163,50 @@ class UserloginTemplate extends BaseTemplate {
                                ?>
                        </div>
                        <?php
+
+                       if ( $this->data['useemail'] && $this->data['canreset'] && $this->data['resetlink'] === true ) {
+                               echo Html::rawElement(
+                                       'div',
+                                       array(
+                                               'class' => 'mw-ui-vform-field mw-form-related-link-container',
+                                       ),
+                                       Linker::link(
+                                               SpecialPage::getTitleFor( 'PasswordReset' ),
+                                               $this->getMsg( 'userlogin-resetpassword-link' )->escaped()
+                                       )
+                               );
+                       }
+
                        if ( $this->haveData( 'createOrLoginHref' ) ) {
-                               if ( $this->data['useemail'] && $this->data['canreset'] && $this->data['resetlink'] === true ) {
-                                       echo Html::openElement( 'div',
-                                                       array(
-                                                               'class' => 'mw-ui-vform-field mw-form-related-link-container',
-                                                       )
-                                               ) .
-                                               Linker::link(
-                                                       SpecialPage::getTitleFor( 'PasswordReset' ),
-                                                       $this->getMsg( 'userlogin-resetpassword-link' )->parse()
-                                               ) .
-                                               Html::closeElement( 'div' );
-                               }
                                if ( $this->data['loggedin'] ) { ?>
-                                       <div id="mw-createaccount-another" class="mw-form-related-link-container mw-ui-vform-field">
+                                       <div class="mw-form-related-link-container mw-ui-vform-field">
                                                <a href="<?php $this->text( 'createOrLoginHref' ); ?>" id="mw-createaccount-join" tabindex="7"><?php $this->msg( 'userlogin-createanother' ); ?></a>
                                        </div>
                                <?php } else { ?>
                                        <div id="mw-createaccount-cta" class="mw-form-related-link-container mw-ui-vform-field">
-                                               <?php $this->msg( 'userlogin-noaccount' ); ?><a href="<?php $this->text( 'createOrLoginHref' ); ?>" id="mw-createaccount-join" tabindex="7"  class="mw-ui-button mw-ui-progressive"><?php $this->msg( 'userlogin-joinproject' ); ?></a>
+                                               <?php $this->msg( 'userlogin-noaccount' ); ?><a href="<?php $this->text( 'createOrLoginHref' ); ?>" id="mw-createaccount-join" tabindex="7" class="mw-ui-button mw-ui-progressive"><?php $this->msg( 'userlogin-joinproject' ); ?></a>
                                        </div>
-                               <?php } ?>
-                       <?php } ?>
-                       <?php if ( $this->haveData( 'uselang' ) ) { ?><input type="hidden" name="uselang" value="<?php $this->text( 'uselang' ); ?>" /><?php } ?>
-                       <?php if ( $this->haveData( 'token' ) ) { ?><input type="hidden" name="wpLoginToken" value="<?php $this->text( 'token' ); ?>" /><?php } ?>
-                       <?php if ( $this->data['cansecurelogin'] ) {?><input type="hidden" name="wpForceHttps" value="<?php $this->text( 'stickhttps' ); ?>" /><?php } ?>
-                       <?php if ( $this->data['cansecurelogin'] && $this->haveData( 'fromhttp' )) {?><input type="hidden" name="wpFromhttp" value="<?php $this->text( 'fromhttp' ); ?>" /><?php } ?>
+                               <?php
+                               }
+                       }
+
+                       // Hidden fields
+                       $fields = '';
+                       if ( $this->haveData( 'uselang' ) ) {
+                               $fields .= Html::hidden( 'uselang', $this->data['uselang'] );
+                       }
+                       if ( $this->haveData( 'token' ) ) {
+                               $fields .= Html::hidden( 'wpLoginToken', $this->data['token'] );
+                       }
+                       if ( $this->data['cansecurelogin'] ) {
+                               $fields .= Html::hidden( 'wpForceHttps', $this->data['stickhttps'] );
+                       }
+                       if ( $this->data['cansecurelogin'] && $this->haveData( 'fromhttp' ) ) {
+                               $fields .= Html::hidden( 'wpFromhttp', $this->data['fromhttp'] );
+                       }
+                       echo $fields;
+
+                       ?>
                </form>
        </div>
 </div>
index 4e4d103..bb26d19 100644 (file)
@@ -74,6 +74,7 @@
        'be-tarask' => "беларуская (тарашкевіца)\xE2\x80\x8E",     # Belarusian in Taraskievica orthography
        'be-x-old' => "беларуская (тарашкевіца)\xE2\x80\x8E",      # (be-tarask compat)
        'bg' => 'български',   # Bulgarian
+       'bgn' => 'بلوچی رخشانی', # Western Balochi
        'bh' => 'भोजपुरी',        # Bihari macro language. Falls back to Bhojpuri (bho)
        'bho' => 'भोजपुरी',       # Bhojpuri
        'bi' => 'Bislama',              # Bislama
index 73d5d6f..1dfdb60 100644 (file)
        "tog-oldsig": "अभिन कय हस्ताक्षर:",
        "tog-fancysig": "हस्ताक्षर कय विकिपाठ जैसन मानों (बिना स्वचालित कड़ी कय)",
        "tog-uselivepreview": "सजिव देखो",
-       "tog-forceeditsummary": "यदि à¤¸à¤®à¥\8dपादन à¤¸à¤¾à¤°à¤¾à¤\82श à¤¨à¤¾à¤\88 à¤¦à¤¿à¤¹à¤¾ à¤¹à¥\88 à¤¤à¥\8b à¤¹à¤®à¥\8dमà¥\88 à¤¬à¤¤à¤¾à¤µà¥\8b",
+       "tog-forceeditsummary": "यदि à¤¸à¤®à¥\8dपादन à¤¸à¤¾à¤°à¤¾à¤\82श à¤¨à¤¾à¤\88 à¤¦à¤¿à¤¹à¤¾ à¤¹à¥\88 à¤¤à¥\8b à¤¹à¤®à¥\8dमà¥\88 à¤¬à¤¤à¤¾à¤µà¤¾ à¤\9cाय",
        "tog-watchlisthideown": "हमरे ध्यानसूची से हमार करल बदलाव लुकुवाओ",
        "tog-watchlisthidebots": "हमरे ध्यानसूची से बॉट कय करल परिवर्तन लुकुवाओ",
        "tog-watchlisthideminor": "हमरे ध्यानसूची से छोट बदलाव लुकुवाओ",
-       "tog-watchlisthideliu": "हमरà¥\87 à¤§à¥\8dयानसà¥\82à¤\9aà¥\80 à¤®à¥\87à¤\82 à¤²à¤¼à¤¾à¤\97 à¤\87न à¤\95रल à¤¸à¤¦à¤¸à¥\8dयनà¥\8d à¤\95य à¤¸à¤®à¥\8dपादन à¤¨à¤¾ à¤¦à¥\87à¤\96ावà¥\8b",
+       "tog-watchlisthideliu": "हमरà¥\87 à¤§à¥\8dयानसà¥\82à¤\9aà¥\80 à¤®à¥\87à¤\82 à¤²à¤¼à¤¾à¤\97 à¤\87न à¤\95रल à¤¸à¤¦à¤¸à¥\8dयनà¥\8d à¤\95य à¤¸à¤®à¥\8dपादन à¤¨à¤¾ à¤¦à¥\87à¤\96ावा à¤\9cाय",
        "tog-watchlisthideanons": "आइ॰पी सदस्यन् कय करल सम्पादन हमरे ध्यानसूची में ना देखाओ",
        "tog-watchlisthidepatrolled": "परीक्षित सम्पादन हमरे ध्यानसूची में लुकुवाओ",
        "tog-ccmeonemails": "हमरे द्वारा अउर सदस्यन् कय पठावल् ई-मेल कय प्रति हमहु कय पठओ",
        "tog-diffonly": "अवतरणन् में अन्तर देखावत समय पुरान अवतरण ना देखाओ",
        "tog-showhiddencats": "लुकुवावल श्रेणि देखाओ",
        "tog-norollbackdiff": "सम्पादन वापिस लेवेक बाद अन्तर ना देखाओ",
-       "tog-useeditwarning": "जब हम कवनो सम्पादन पन्ना कय बिना सहेजे बदलाव कय साथ छोड दि तव हम्मै बतावो।",
+       "tog-useeditwarning": "जब हम कवनो सम्पादन पन्ना कय बिना सहेजे बदलाव कय साथ छोड दि तव हम्मै बतावो।",
        "tog-prefershttps": "लॉगिन करेक बाद हमेशा सुरक्षित कनेक्शन कय प्रयोग करो",
        "underline-always": "हमेशा",
        "underline-never": "कब्बो नाई",
        "about": "कय बारे में",
        "article": "लेख",
        "newwindow": "(नवा विंडो में खुलत अहै)",
-       "cancel": "रदà¥\8dद à¤\95रà¥\87",
+       "cancel": "रदà¥\8dद à¤\95रा à¤\9cाय",
        "moredotdotdot": "अउर...",
        "morenotlisted": "ई पूरा सूची नाई होय।",
        "mypage": "पन्ना",
        "updatedmarker": "हमरे अन्तिम दाँइ आवे कय बाद कय अपडेट",
        "printableversion": "छापए लायक संस्करण",
        "permalink": "स्थायी कड़ी",
-       "print": "पà¥\8dरिà¤\82à¤\9f à¤\95रà¥\8b",
-       "view": "दà¥\87à¤\96à¥\8b",
-       "view-foreign": "$1 à¤ªà¥\87 à¤¦à¥\87à¤\96à¥\8b",
+       "print": "पà¥\8dरिà¤\82à¤\9f à¤\95रा à¤\9cाय",
+       "view": "दà¥\87à¤\96ा à¤\9cाय",
+       "view-foreign": "$1 à¤ªà¥\87 à¤¦à¥\87à¤\96ा à¤\9cाय",
        "edit": "सम्पादन",
        "edit-local": "स्थानीय विवरण सम्पादन",
        "create": "बनावो",
        "otherlanguages": "अउर भाषा सब",
        "redirectedfrom": "($1 से पुनर्निर्देशित)",
        "redirectpagesub": "पुनर्निर्देश पन्ना",
-       "redirectto": "पà¥\81नरà¥\8dनिरà¥\8dदà¥\87श à¤\95रà¥\8b:",
+       "redirectto": "पà¥\81नरà¥\8dनिरà¥\8dदà¥\87श à¤\95रा à¤\9cाय:",
        "lastmodifiedat": "इ पन्ना कय पिछला बदलाव $1 कय $2 बजे भवा रहा।",
        "viewcount": "ई पन्ना {{PLURAL:$1|एक|$1}} दाइँ देख़ गा है।",
        "protectedpage": "सुरक्षित पन्ना",
        "viewsourcetext": "आप इ पन्ना कय स्रोत देखी सका जात है औ ओकर नकल उतार सका जात है:",
        "viewyourtext": "आप ई पन्ना में ''आपन सम्पादन'' कय स्रोत देखी सका जात है औ ओकर नकल उतार सका जात है:",
        "protectedinterface": "इ पन्ना  विकी कय सॉफ़्टवेयर कय इंटरफ़ेस पाठ देत है,अव एकर गलत प्रयोग से बचावेक लिये सुरक्षित करा है।\nकुल विकिन् कय लिए अनुवाद जोड़य या बदलय कय लिए कृपया मीडियाविकि कय क्षेत्रीयकरण प्रकल्प [//translatewiki.net/ translatewiki.net] कय प्रयोग करा जाय।",
+       "editinginterface": "<strong>चेतावनी:</strong> आप एकठु अइसन पन्ना कय बदलय जावा जात हैं जवन सॉफ़्टवेयर कय इंटरफ़ेस पाठ देत है।\nइ पन्ना कय बदलय से अउर सदस्यन् कय देखावेवाला इंटरफ़ेस कय शकल सूरत में बदलाव आई जाइ।",
+       "translateinterface": "कुल विकिन् कय ट्रान्सलेशन करय अव बदलय खर्तिन [//translatewiki.net/ ट्रान्शलेटविकि.नेट] कय प्रयोग करा जाय ।",
+       "cascadeprotected": "ई पन्ना सुरक्षित है, काहे से इ निचे दिहा {{PLURAL:$1|पन्ना|पन्नन्}} कय सुरक्षा-सीढ़ी में है:\n$2",
        "namespaceprotected": "आप कय '''$1''' नामस्थान में रहल पन्नन कय बदलै कय अनुमति नाइ है।",
        "customcssprotected": "आप कय इ CSS पन्ना कय संपादन करेक अनुमति नाई है, काहे से एहमा अउर सदस्य कय व्यक्तिगत सेटिंग्स शामिल है।",
        "customjsprotected": "आप कय इ जावास्क्रिप्ट पन्ना कय संपादन करेक अनुमति नाई है, काहे से एहमा अउर सदस्य कय व्यक्तिगत सेटिंग्स शामिल है।",
        "userlogin-resetlink": "आपन प्रवेश जानकारी भूलाई गवा गय?",
        "userlogin-resetpassword-link": "आपन गुप्त कुंजी भूलाई गवा गय?",
        "userlogin-helplink2": "लॉग इन करे में सहायता",
+       "userlogin-loggedin": "आप {{GENDER:$1|$1}} कय रूप में पहीलवे से लॉग्ड इन होवा जात है।\nकवनो अउर सदस्य कय रूप में लॉग इन करय खरतिन निचे दिहा फ़ॉर्म कय प्रयोग करा जाय।",
        "userlogin-createanother": "एकठु अउर खाता खोला जाय",
        "createacct-emailrequired": "ई-मेल ठाँव",
        "createacct-emailoptional": "ई-मेल ठाँव (वैकल्पिक)",
        "password-login-forbidden": "इ सदस्यनाँव अउर गुप्त कुंजी कय उपयोग नाई कै सका जात अहै।",
        "mailmypassword": "गुप्त कुंजी पुनःस्थापित करा जाय",
        "passwordremindertitle": "{{SITENAME}} कय लिए नवाँ अस्थाई गुप्त कुंजी",
+       "passwordremindertext": "केहु दुसर (शायद आपय, $1 आइ॰पी ठहर से) {{SITENAME}} ($4) पे इस्तेमाल कय खर्तिन नँवा गुप्त कुंजी मङावा गा है। सदस्य \"$2\" कय खर्तिन एकठु अस्थायी गुप्त कुंजी बनाइ दिहा गा है, अव इ अभीन \"$3\" होय। यदि इ आपय कय मंशा रहा, तव अब आप कय सत्रारंभ करय कय एकठु नँवा गुप्त कुंजी चुनयक् परि।\nआप कय अस्थायी गुप्त कुंजी कय समय {{PLURAL:$5 दिन}} में खतम होई जाइ।\nयदि इ चिरौरी केहु दुसर करे है, या आप आपन पुरान गुप्त कुंजी अब नाइ बदलयक् चाहा जात है काहे से आप कय आपन पुरान गुप्त कुंजी याद आई गा है, तव आप इ संदेश कय अनदेखा कई सका जात है, अव आपन पुरान गुप्त कुंजी कय पहिलेक जैसन इस्तेमाल कई सका जात है।",
        "noemail": "\"$1\" सदस्य कय लिये कवनो भी ई-मेल पता दर्ज नाइ कई गा है।",
        "noemailcreate": "आप कय असली ई-मेल ठाँव देक परि।",
        "passwordsent": "\"$1\" कय ई-मेल ठाँव पे एक नवाँ गुप्त कुंजी भेजि गा है।\nई-मेल पावेक बाद कृपया दुबारा लॉग इन करा जाई।",
        "blocked-mailpassword": "आप कय आइ॰पी ठाँव कय सम्पादन करे से अवरुद्ध कई गा है, अउर गलत इस्तेमाल रोकेक लिये गुप्त कुंजी फिरसे पावे कय सुविधा इ आइ॰पी पे बंद कई गा है।",
        "eauthentsent": "दर्ज करल ई-मेल ठहर पे एकठु फुरवासाखी ई-मेल भेज दिहा गा है।\nआप का उ ई-मेल में दिहा निर्देशन् कय अनुसार ई-मेल ठहर कय सत्यापन करेक परि,ओकरे बादय ही हिँया से कवनो दूसर ई-मेल भेज जाई।",
+       "throttled-mailpassword": "पिछला {{PLURAL:$1|एक घंटा|$1 घंटन्}} मे एकठु गुप्त कुंजी स्मरण-पत्र भेजी गा है।\nदुरुपयोग से बचाव कय लिए हर {{PLURAL:$1|एक घंटा|$1 घंटन्}} में एक्कय गुप्त कुंजी स्मरण-पत्र भेजी जात है।",
        "mailerror": "ई-मेल भेजय में त्रुटि: $1",
        "acct_creation_throttle_hit": "आप कय आइ॰पी ठहर से आवे वाले मनई लोग पिछला चौबीस घंटन् में इ विकि पे {{PLURAL:$1|एक खाता|$1 खाता}} बनाई चुका हैं, इ समयावधि में ई अधिकतम सीमा होय।\n यह समय इ आइ॰पी  कय प्रयोग करय वाले आगंतुक अउर खाता नाइ खोल सकत हैं।",
        "emailauthenticated": "आप कय ई-मेल ठहर $2 कय $3 बजे सत्यापित कै गय।",
+       "emailnotauthenticated": "आप कय ई-मेल ठहर कय यकिन नाइ भा है।\nनीचे दीहा कवनो भी सुविधा कय लिये आप कय ई-मेल नाई भेजी जाई।",
+       "noemailprefs": "इ सुविधन् कय प्रयोग करेक खर्तिन आपन पसंद में ई-मेल ठहर दिहा जाय।",
        "emailconfirmlink": "आपन ई-मेल ठहर निश्चित करा जाय",
        "invalidemailaddress": "ई-मेल ठहर नाई मानी जाई काहे से ई कवनो अवैध स्वरूप में है।\nकृपया एक सही तरीका से स्वरूपित ई-मेल ठहर दिहा जाय या उ कोष्ठक कय खालीय छोड दिहा जाय।",
        "cannotchangeemail": "इस विकी पे सदस्य खाता कय ई-मेल ठहर नाइ बदल सका जात अहै।",
        "accountcreated": "खाता बनी गवा है",
        "accountcreatedtext": "[[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|बातचीत]]) कय लिये खाता बनाइ दिहा है।",
        "createaccount-title": "{{SITENAME}} के लिये खाता बनावा जाय",
+       "createaccount-text": "आप कय ई-मेल ठहर कय खर्तीन केहु दुसर {{SITENAME}} ($4) पे \"$2\" सदस्य नाँव से \"$3\" गुप्तकुंजी (पासवर्ड) सहित खाता खोले हैं।\nआप कय लॉग इन कइकै आपन गुप्त कुंजी (पासवर्ड) तुरंतय बदल लेक चाहि।\n\nयदि इ खाता गलती से खोला गा है, तव आप इ मैसेज कय अनदेखा कै सका जात है।",
        "login-throttled": "आप अबहिनय में कयु दाँइ लॉग इन करेक प्रयास किहा गा है।\nफिरसे प्रयास करय से पहीले तनी $1 रुका जाय।",
        "login-abort-generic": "आप कय लाग-इन असफल रहा - निष्फलित",
        "loginlanguagelabel": "भाषा: $1",
+       "suspicious-userlogout": "आप कय लॉग आउट करेक चिरौरी अस्वीकृत कई दिहा गा है काहे से अइसन लागत हय है कि ई कवनो खराब ब्राउज़र या कैश करय वाला प्रॉक्सी से भेजा ग रहा।",
        "createacct-another-realname-tip": "असली नाँव देब आवश्यक नाई है।\nयदि आप देवा जाई तव एकर प्रयोग सदस्यन् कय योगदान कय लिये श्रेय (attribution) देक लिये कई जाई।",
        "pt-login": "लॉग इन",
        "pt-login-button": "लॉग इन",
        "passwordreset-username": "सदस्यनाँव:",
        "passwordreset-domain": "डोमेन:",
        "passwordreset-capture": "परिणामस्वरूप बनावल ई-मेल देखा जाय?",
+       "passwordreset-capture-help": "अगर आप इ चेकबॉक्स कय टिक करा जाइ तव ई-मेल (अस्थायी गुप्तकुंजी कय साथे) आप कय देखाई अव सदस्य कय भी भेजी जाइ।",
        "passwordreset-email": "ई-मेल ठाँव:",
        "passwordreset-emailtitle": "{{SITENAME}} पे खाता कय विवरण",
+       "passwordreset-emailtext-ip": "केहु (शायद आप कय, $1 आइ॰पी ठहर से) {{SITENAME}} ($4) पे अपने {{PLURAL:$3|गुप्त कुंजी}} कय रीसेट करेक अनुरोध करे है। इ ई-मेल ठहर से निचे  कय{{PLURAL:$3|खाता जोड़ान् है}}:\n\n$2\n\n{{PLURAL:$3|इ}} अस्थायी गुप्त कुंजी {{PLURAL:$5|दिन}} कय बाद काम नाइ करि। आप लॉग इन कई कय एकठु नँवा गुप्त कुंजी अभीनै चुन लुहा जाए। यदि इ अनुरोध केहु अउर करे है, या फिर आप कय आपन गुप्त कुंजी याद आइ गा है, औ आप {{PLURAL:$3|आपन}} गुप्त कुंजी नाइ बदलेक चाहा जात है तव आप इ संदेश कय अनदेखा कई कय आपन पुरान गुप्तकुंजी कय प्रयोग कै सका जात है।",
+       "passwordreset-emailtext-user": "{{SITENAME}} ($4) पे सदस्य $1 आपकय {{PLURAL:$3|खाता}} कय गुप्तकुंजी कय रीसेट करेक अनुरोध करे हैं। इ ई-मेल ठहर से इ {{PLURAL:$3|खाता जोडान है}}:\n\n$2\n\n{{PLURAL:$3|ई}} अस्थायी गुप्तकुंजी {{PLURAL:$5|दिन}} कय बाद काम नाइ करि।\nआप लॉग इन कइकै एकठु नँवा गुप्त कुंजी अभीन लै लेक चाहि। यदि इ अनुरोध केहु दुसर करे है, या फिर आप कय आपन गुप्त कुंजी याद आई गा है, अव आप {{PLURAL:$3|आपन}} गुप्तकुंजी नाई बदलेक चाहा जात है, आप इ संदेश कय अनदेखा कई कय आपन पुरान गुप्तकुंजी कय प्रयोग कइ सका जात है।",
        "passwordreset-emailelement": "सदस्यनाँव: $1\nअस्थायी गुप्तकुंजी: $2",
        "passwordreset-emailsent": "एक गुप्तकुंजी रीसेट ई-मेल भेज दिहा गा है।",
+       "passwordreset-emailsent-capture": "नीचे जवन देखावा है ओकर गुप्तकुंजी रीसेट ई-मेल भेज दिहा गा है।",
+       "passwordreset-emailerror-capture": "नीचे दिहा गुप्त कुंजी रीसेट ई-मेल पैदा भा रहा, लेकिन ओका {{GENDER:$2|सदस्य}} कय भेजब असफल रहा।\nत्रुटि: $1",
        "changeemail": "ईमेल ठाँव बदला जाय",
        "changeemail-text": "अपना ई-मेल पता परिवर्तित करने के लिए इस फ़ॉर्म को पूरा करें। इस बदलाव की पुष्टि करने के लिये आपको अपना कूटशब्द पुनः लिखना पड़ेगा।",
        "changeemail-no-info": "इ पन्ना कय सीधय प्रयोग करेक लिए आप कय लॉग इन करेक परि।",
        "summary-preview": "सारांश कय झलक:",
        "subject-preview": "विषय/शीर्षक कय झलक:",
        "blockedtitle": "सदस्य अवरुद्ध है",
+       "blockedtext": "'''आप कय सदस्यनाँव या आइ॰पी ठहर पे रोक लाग है ।'''\n\nरोक $1 लगायँ रहें।\nरोक कय कारण ''$2'' होय \n\n* रोक कय सुरुवात भय: $8\n* रोक खतम होइ: $6\n* रोक इकाई: $7\n\nइ रोक कय बारे में चर्चा करेक लिए आप $1 या कवनो दुसर [[{{MediaWiki:Grouppage-sysop}}|प्रबन्धक]] से संपर्क कै सका जात है।\nअगर आप [[Special:Preferences|आपन पसंद]] में वैध ई-मेल पता देवा गा है तब्बै आप 'ई-मेल भेजय' वाला सुविधा कय इस्तेमाल कई सका जात है औ आप कय एकर इस्तेमाल करै कय कवनो रोक नाइ लगावा है।\nआप कय अभीन कय आइ॰पी ठहर $3 होय अव रोक क्रमांक #$5 होय।\nआपन कवनो भी प्रश्न में कृपया इ कुल जानकारी शामिल करा जाइ।",
+       "autoblockedtext": "एक्ठु अउर सदस्य आपय कय आइ॰पी कय प्रयोग करत रहें औ ओन्है $1 रोक लगाए रहें। इही कय नाते आपो कय आइ॰पी ठहर स्वचालित रूप से रुक गा है।\nरोक करय कय कारण होय:\n\n:''$2''\n\n* रोक कय सुरुवात : $8\n* रोक खतम होइ: $6\n* रोकि जाय वाले सदस्य: $7\n\nरोक कय चर्चा करय कय लिए आप $1 या कवनो दुसर [[{{MediaWiki:Grouppage-sysop}}|प्रबंधक]] से संपर्क कै सका जात है।\n\nकृपया ध्यान देवा जाय कि यदि आप कय \"इ सदस्य कय ई-मेल भेजा जाय\" वाला सुविधा कय प्रयोग करय चाहा जात है तव आपकय [[Special:Preferences|पसंद]] में वैध ई-मेल ठहर होएक चाहि औ एकर प्रयोग आपकय खर्तिन खुला होएक चाही।\n\nआपकय मौजूदा आइ॰पी ठहर $3 होय औ अवरोध क्रमांक #$5 होय।\nआप कय कवनो प्रश्न में कृपया ई कुल जानकारी शामिल होएक चाही।",
        "blockednoreason": "कवनो कारण नाइ दिहा है",
        "whitelistedittext": "पन्ना संपादन करेक लिये आप कय $1 करेक परि।",
        "confirmedittext": "संपादन करय से पहिले आपन ई-मेल प्रमाणित करब आवश्यक है।\nकृपया आपन [[Special:Preferences|सदस्य वरीयता]] में जाईकय आपन ई-मेल ठाँव दिहा जाय अव ओका प्रमाणित करा जाय।",
        "accmailtext": "[[User talk:$1|$1]] कय लिए एक यंत्र जनित गुप्त कुंजी $2 कय भेज दिहा गा है। लॉगिन करेक बाद एका '''[[Special:ChangePassword|गुप्त कुंजी बदला जाय]]'' वाला पन्नन् पे बदल सका जात है।",
        "newarticle": "(नँवा)",
        "newarticletext": "आप अईसन पन्ना पे आवा गा है जवन अभीन तक नाई बनावा है।\nपन्ना बनावेक लिये नीचे कय बौक्स में पाठ लिखा जाय। ढेर जानकारी कय लिये [$1 सहायता पन्ना] देखा जाय।\nअगर आप हिँया गलती से आवा गा हैं तव आपन ब्राउज़र कय बैक ('''back''') बटन पे क्लिक करा जाय।",
+       "anontalkpagetext": "----''ई बातचीत पन्ना उ बेनामी सदस्यन् कय खर्तीन होय जे या तव खाता नाई खोलें है या खाता कय प्रयोग नाइ करत हैं।\nइहिकै नाते वय लोगन कय पहिचान कय खर्तीन हम्मन कय वय लोगन कय आइ॰पी ठहर कय प्रयोग करेक परत है।\nआइ॰पी ठहर कयु सदस्यन् कय एक्कय होइ सकत है।\nयदि आप कवनो बेनामी सदस्य होआ जाय अव आप कय लागत है कि आप कय बारे में अप्रासंगिक टीका टिप्पणी कई गा है तव कृपया [[Special:UserLogin/signup|सदस्यता लिहा जाय]] या [[Special:UserLogin|सत्रारंभ करा जाय]] ताकि अउर बेनामी सदस्यन् में से आप कय अलग से पहिचान सका जाय।''",
        "noarticletext": "अभीन इ पन्ना पे कवनो सामग्री नाई है।\nआप अउर पन्नन् में [[Special:Search/{{PAGENAME}}|इ शीर्षक कय खोज]] कई सका जात है,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} सम्बन्धित लॉग खोज सका जात है],\nया इस पृष्ठ को [{{fullurl:{{FULLPAGENAME}}|action=edit}} सम्पादित] कर सकते हैं</span>।",
+       "noarticletext-nopermission": "अभीन इ पन्ना पे कवनो चिज नाई है।\nआप अउर पन्नन् में [[Special:Search/{{PAGENAME}}|इ शीर्षक कय खोज]] कई सका जात है,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} से सम्बन्धित लॉग खोज सका जात है] </span>लेकिन आप कय इ पन्ना बनावे कय अनुमति नाई है ।",
+       "missing-revision": "\"{{FULLPAGENAME}}\" पन्ना कय अवतरण #$1 नाई है।\n\nखास कइकै ई एकठु मेटावल पन्ना कय पुरान लिंक पे क्लिक करय से होत है।\nढेर जानकारी कय खर्तिन आप [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} हटावे कय लॉग] देख सका जात है।",
        "userpage-userdoesnotexist": "सदस्य खाता \"$1\" पंजीकृत नाई है।\nकृपया जाँच लिहा जाय कि आप ई पन्ना संपादन करय या बनावे चाहा जात है या नाहीं।",
        "userpage-userdoesnotexist-view": "सदस्य \"$1\" पंजीकृत नाइ है।",
        "blocked-notice-logextract": "ई सदस्य अभीन अवरोधित है।\nसदंर्भ कय लिए ताज़ातरीन अवरोध लॉग प्रविष्टि नीचा दीहा है:",
+       "clearyourcache": "'''ध्यान दिहा जाय:'''  सहेजय कय बाद बदलाव देखयक खर्तिन आप कय आपन ब्राउज़र कय कैश खाली करेक परी सकत है।\n* '''फ़ायरफ़ॉक्स / सफ़ारी:''' ''Reload'' (रीलोड) दबावत समय ''Shift'' (शिफ़्ट) दबावा जाय, या फिर ''Ctrl-F5'' (कंट्रोल-F5) या ''Ctrl-R'' (कंट्रोल-R) दबावा जाय (मैक पे ''⌘-R'')\n* '''गूगल क्रोम:''' ''Ctrl-Shift-R'' (कंट्रोल-शिफ़्ट-R) दबावा जाय (मैक पे ''⌘-Shift-R'')\n* '''इन्टर्नेट एक्सप्लोरर:''' ''Ctrl'' (कंट्रोल) दबाईकय ''Refresh'' (रिफ़्रेश) करा जाय या ''Ctrl-F5'' (कंट्रोल-F5) दबावा जाय\n* '''ऑपेरा:''' ''Tools → Preferences'' (उपकरण → पसंद) में कैश साफ़ करा जाय",
+       "usercssyoucanpreview": "'''टिप''': सहेजय से पहिले आपन नँवा सी॰एस॰एस जाँचय खर्तिन \"{{int:showpreview}}\" बटन कय प्रयोग करा जाय।",
+       "userjsyoucanpreview": "'''टिप''': सहेजय से पहिले आपन नँवा जावास्क्रिप्ट जाँचय खर्तिन \"{{int:showpreview}}\" बटन कय प्रयोग करा जाय।",
+       "usercsspreview": "'''ध्यान दिहा जाय कि आप आपन सी॰एस॰एस कय झलक देखा जात है।'''\n'''इ अभीन तक नाई सहेजा है!'''",
+       "userjspreview": "'''ध्यान दिहा जाय कि आप आपन जावास्क्रिप्ट  कय झलक देखा जात है।'''\n'''इ अभीन तक नाई सहेजा है!'''",
+       "sitecsspreview": "'''ध्यान दिहा जाय कि आप ई सी॰एस॰एस कय झलक देखा जात है।'''\n'''इ अभीन तक नाई सहेजा है!'''",
+       "sitejspreview": "'''ध्यान दिहा जाय कि आप ई जावास्क्रिप्ट कय झलक देखा जात है।'''\n'''इ अभीन तक नाई सहेजा है!'''",
+       "userinvalidcssjstitle": "'''चेतावनी:''' \"$1\" नाव कय कवनो त्वचा नाइ है।\nबदलल .css औ .js पन्नन कय शीर्षक नीचे स्तर कय लिपि (lowercase) कय प्रयोग करत है। उदाहरण: {{ns:user}}:Foo/vector.css नाई की {{ns:user}}:Foo/Vector.css",
        "updated": "(अपडेट करल)",
        "note": "'''सूचना:'''",
        "previewnote": "'''याद रख्खा जाय, ई खाली एक झलक होय।'''\nआप कय बदलाव अभीन तक नाई सहेजा हैं!",
        "continue-editing": "संपादन क्षेत्र मे चला जाय",
+       "previewconflict": "ई झलक ऊपरी पाठ सम्पादन क्षेत्र में करल बदलाव देखावत है, औ यदि आप अभीन सहेजा जाई तव इहै पाठ सहेज़ जाइ।",
+       "session_fail_preview": "'''क्षमा करा जाय! सेशन डाटा कय नष्ट होएक कारण आप कय बदलाव नाई सहेज मिला।'''\nकृपया फिरेसे प्रयास करा जाय।\nअगर एकरे बाद़ोमें अइसनय होइ तव कृपया [[Special:UserLogout|लॉग आउट]] कई कय फिरसे लॉग इन करा जाय।",
+       "session_fail_preview_html": "'''क्षमा करा जाय! सेशन डाटा नष्ट होएक नाते आपकय बदलाव नाई सहेजि गय।'''\n\n''काहे से {{SITENAME}} पे raw HTML सक्षम है, जावास्क्रिप्ट हमलन् से बचाव कय खर्तिन झलक नाइ देखाई गा है।''\n\n'''अगर ई आप कय सहि संपादन प्रयास रह, तव कृपया फिरसे प्रयास करा जाय।'''\nअगर एकरे बाद़ोमें अइसनय होइ तव कृपया [[Special:UserLogout|लॉग आउट]] कैकय फिरसे लॉग इन करा जाय।",
+       "token_suffix_mismatch": "'''आप कय करल बदलाव रद्द कै गा है काह से आपकय क्लायंट आपकय संपादन टोकन में दिहा विरामचिन्हन् में बदलाव करे हैं।'''\nलेख कय पाठ में खराबी ना आवे इहि कय नाते आपकय बदलाव रद्द कै गा है।\nअइसन तब्बय होइ सकत है जब आप कवनव खराब वेब-आधारित अनामक प्रौक्सी प्रयोग करा जात होय।",
        "editing": "$1 सम्पादन",
        "creating": "$1 बनावा जात है",
        "editingsection": "$1 सम्पादन करा जात है (अनुभाग)",
        "storedversion": "सहेज़ल अवतरण",
        "yourdiff": "अंतर",
        "protectedpagewarning": "'''चेतावनी: इ पन्ना कय सुरक्षित कई  गा है अव एका खालि प्रबंधक सम्पादित कई सकत हँय।'''\nनँवा लॉग प्रविष्टि संदर्भ कय लिये नीचे दीहा है:",
+       "semiprotectedpagewarning": "<strong>नोट:</strong> ई पन्ना बचावा है इही कय नाते खालि रजिष्टर करल सदस्य एका सम्पादन कई सकत हैं ।\nसंदर्भ कय खर्तिन अन्तिम दाइ कय लाग निचे दिहा है:",
+       "templatesused": "ई पन्ना इस्तेमाल करल {{PLURAL:$1|साँचा}}:",
+       "templatesusedsection": "ई अनुभागमें इस्तेमाल करल {{PLURAL:$1|साँचा}}:",
+       "template-protected": "(सुरक्षित)",
+       "template-semiprotected": "(अर्ध-सुरक्षित)",
+       "hiddencategories": "ई पन्ना निचे दिहा $1 लुकुआवल {{PLURAL:$1|श्रेणी|श्रेणिन्}} में श्रेणीबद्ध है:",
+       "nocreatetext": "{{SITENAME}} पे नँवा पन्ना बनावे कय मिनहा कई गा है।\nआप पीछे जाईकय कवनो वर्तमान पन्ना कय संपादित कई सका जात है, या [[Special:UserLogin|नँवा ख़ाता खोला जाय /अन्दर हला जाय]] ।",
+       "nocreate-loggedin": "आप कय नँवा पन्ना बनावे कय अनुमति नाई है ।",
+       "sectioneditnotsupported-title": "अनुभाग सम्पादन समर्थित नाई है",
+       "sectioneditnotsupported-text": "इ पन्ना पे अनुभाग सम्पादन समर्थित नाई है",
        "permissionserrors": "अनुमति त्रुटि",
+       "permissionserrorstext": "निचे दिहा {{PLURAL:$1|कारण|कारणन्}} कय नाते आप कय ऐसन करे कय अनुमति नाइ है:",
+       "permissionserrorstext-withaction": "आप कय $2 कय अनुमति नाई है,निचे दिहा {{PLURAL:$1|कारण|कारणन्}} कय नाते से:",
+       "recreate-moveddeleted-warn": "'''चेतावनी: आप एक्ठु अइसन पन्ना बनावे जावा जात है जवन पहिले मेटावा रहा।'''\n\nआप विचार करा जाय कि का इ पन्ना कय संपादन करब उचित रही।\nसुविधा कय लिये इ पन्ना कय हटावे या घुस्कावे कय लॉग इहै है:",
+       "moveddeleted-notice": "ई पन्ना मेटावा है।\nसंदर्भ कय खरतिन पन्ना कय मेटावे औ घुस्कावे कय लॉग नीचे दिहा है।",
+       "log-fulllog": "पूरा लॉग देखा जाय",
+       "edit-hook-aborted": "फंदा से संपादन बीचवे मे छोड दिहा है।\nउ कवनो कारण नाई बताए है।",
+       "edit-gone-missing": "पन्ना अद्यतित(अपडेट) नाई कई सका जात है।\nलागत है एका मेटाई दिहा है।",
+       "edit-conflict": "संपादन अंतर्विरोध",
+       "edit-no-change": "आप कवनो बदलाव नाई करा गा है,इहीकै नाते आप कय इ संपादन कय अनदेखा कै गा है।",
+       "postedit-confirmation-created": "पन्ना बनी गा है।",
+       "postedit-confirmation-restored": "पन्ना पुरान स्थिति पे लाई गय।",
+       "postedit-confirmation-saved": "आप कय सम्पादन सहेजी गय।",
+       "edit-already-exists": "नवा पन्ना नाई बनाई सका जात है।\nई पन्ना पहीलवे से मौजूद है।",
+       "defaultmessagetext": "सनेशा कय डिफ़ॉल्ट पाठ",
+       "content-failed-to-parse": "$1 कय लिए $2 सामग्री कय पार्स करय में विफल, त्रुटि: $3",
+       "invalid-content-data": "अवैध डाटा सामग्री",
+       "content-not-allowed-here": "[[$2]] पन्ना पे \"$1\" सामग्री मिनाही है।",
+       "editwarning-warning": "इ पन्ना से हटे कय बाद आप कय करल बदलाव गायब होइ जाइ।\nयदि आप लॉग इन करा गा है तव आप इ सूचना कय देखाब आपन पसंद कय \"{{int:prefs-editing}}\" भाग में बंद कई सका जात है।",
+       "editpage-notsupportedcontentformat-title": "सामग्री स्वरूप समर्थित नाई है",
+       "editpage-notsupportedcontentformat-text": "$1 सामग्री स्वरूप $2 सामग्री मॉडल द्वारा समर्थित नाई है।",
        "content-model-wikitext": "विकिटेक्स्ट",
        "content-model-text": "सामान्य पाठ",
        "content-model-javascript": "जावास्क्रिप्ट",
        "content-json-empty-object": "खाली चिज",
        "content-json-empty-array": "खाली एरे",
+       "expensive-parserfunction-category": "अईसन पन्ना जवन महङा पार्सर फ़ंक्शनन् कय ढेर प्रयोग करत हैं",
+       "post-expand-template-inclusion-warning": "'''चेतावनी:''' साँचा जोडे कय सीमा पार होई चुका है।\nकवनो-कवनो साँचा नाई जुड़ी।",
+       "post-expand-template-inclusion-category": "अईसन पन्ना जवने मे साँचा जोड़े कय सीमा पार होई गवा है",
+       "post-expand-template-argument-category": "अईसन पन्ना जवनेमें प्राचल छोड़ी दिहा है",
+       "parser-template-loop-warning": "साँचा चक्र मिला: [[$1]]",
+       "parser-template-recursion-depth-warning": "साँचा पुनरावर्ती गहराई सीमा पार ($1)",
+       "language-converter-depth-warning": "भाषा कन्वर्टर गहीराई सीमा से बहरे गय ( $1 )",
+       "node-count-exceeded-category": "पन्ना जवनन् में नोड-संख्या सीमा पार कई गा है",
+       "expansion-depth-exceeded-category": "पन्ना जवनेमें विस्तार गहिराई पार कई गा है",
+       "expansion-depth-exceeded-category-desc": "ई पन्ना विस्तार गहराई पार करत है।",
+       "expansion-depth-exceeded-warning": "पन्ना में विस्तार गहराई पार कई गा है",
+       "parser-unstrip-loop-warning": "Unstrip लूप मिला",
+       "parser-unstrip-recursion-limit": "Unstrip पुनरावर्तन सीमा पार कई गय ($1)",
+       "converter-manual-rule-error": "मैन्यूअल भाषा परिवर्तन नियम में त्रुटि",
+       "undo-success": "ई संपादन पहिले जैसन रहा वईसय कई सका जात है ।\nअईसन करेक लिये कृपया निचे लिखल पाठ कय ध्यान से दखीकय बदलाव सहेजा जाय।",
+       "undo-failure": "एकरे बीचे अउर बदलाव होएक कारण ई संपादन पहिले जैसन करब संभव नाई है।",
+       "undo-norev": "ई बदलाव वापिस नाई भय काहे से या तो एका पहीलवे से पलटाई गा है या फिर पन्ना हटाई दिहा है।",
+       "undo-nochange": "अईसन लागत है की ई सम्पादन कय पहिलवे पहिले जैसन कई दीहा है ।",
        "undo-summary": "[[Special:Contributions/$2|$2]] ([[User talk:$2|बातचीत]]) कय करल बदलाव $1 कय पहिले जईसन कई गय",
        "undo-summary-username-hidden": "लुकुआवल सदस्यन् कय करल बदलाव $1 कय पहिले जईसन कई गय",
        "cantcreateaccounttitle": "खाता नाई खोली सका जात है",
+       "cantcreateaccount-text": "इ आइ॰पी ठहर ('''$1''') कय खाता बनावे कय [[User:$3|$3]] रोक लगाए हैँ।\n\nएकरे लिये $3 ''$2'' कारण दिहे हैं।",
        "cantcreateaccount-range-text": "'''$1''' कय श्रेणी में आवे वाला आई॰पी ठहर से, जवनेमें आप कय आई॰पी ठहर ('''$4''') शामिल है, नँवा खाता बनावे कय लिए [[User:$3|$3]] अवरोधित कई गा है। \n\n$3 द्वारा दिया गया कारण है: \"$2\"",
        "viewpagelogs": "इस पन्ना कय लॉग देखा जाय",
        "nohistory": "इ पन्ना कय कवनो इतिहास नाई है।",
        "history-feed-empty": "अनुरोधित करल पन्ना  अस्तित्व में नाई है।\nई पन्ना या तो मेटावा है या फिर एकर नाँव बदल दिहा है।\n[[Special:Search|विकि पे खोजा जाय]] कय प्रयोग करा जाय।",
        "rev-deleted-comment": "(सम्पादन सारांश हटाई गय)",
        "rev-deleted-user": "(सदस्यनाँव हटाई गय)",
+       "rev-deleted-event": "(लाग जानकारी हटाइ गय)",
        "rev-deleted-user-contribs": "[सदस्यनाँव या आइ॰पी ठहर लुकुआई गय- सम्पादन योगदान में से लुकुआई गय]",
        "rev-deleted-text-permission": "ई पन्ना अवतरण हटाई गा है।\nएकर ढेर जानकारी [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} हटावे कय लॉग] में मिली सकत है।",
+       "rev-suppressed-text-permission": "ई पन्ना अवतरण लुकुआइ गा है।\nएकर ढेर जानकारी [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} हटावे कय लॉग] में मिली सकत है।",
        "rev-deleted-text-unhide": "ई पन्ना अवतरण हटाई गा है।\nएकर ढेर जानकारी [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} हटावे कय लॉग] में मिली सकत है।\nयदि आप चाहा जाय तव ई अवतरण कय [$1 देख सका जात है] ।",
        "rev-suppressed-text-unhide": "ई पन्ना अवतरण लुकुआइ गा है।\nएकर ढेर जानकारी [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} लुकुआवे कय लॉग] में मिली सकत है।\nयदि आप चाहा जाय तव ई अवतरण कय [$1 देख सका जात है] ।",
        "rev-deleted-text-view": "ई पन्ना कय अवतरण हटाई गा है।\nएकर ढेर जानकारी [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} हटावे कय लॉग] में मिली सकत है।",
        "revdelete-legend": "दृश्य प्रतिबंध निश्चित करा जाय",
        "revdelete-hide-text": "अवरतण पाठ",
        "revdelete-hide-image": "फ़ाइल कय पाठ लुकुआवा जाय",
+       "revdelete-hide-name": "टार्गेट अव पारामिटर लुकुआवा जाय",
        "revdelete-hide-comment": "संपादन सारांश",
        "revdelete-hide-user": "संपादक कय सदस्यनाँव/आइ॰पी॰ ठहर",
        "revdelete-hide-restricted": "प्रबंधक सहित कुल सदस्यन् से डाटा लुकुआवा जाय",
        "revdelete-unsuppress": "पुनर्स्थापित अवतरणन् पे से प्रतिबन्ध हटावा जाय",
        "revdelete-log": "कारण:",
        "revdelete-submit": "चयनित {{PLURAL:$1|अवतरण}} पे लागू करा जाय",
+       "revdelete-success": "'''अवतरण दृश्यता सफलतापूर्वक अपडेट कई गय।'''",
+       "revdelete-failure": "'''अवतरण दृश्यता अपडेट नाइ भय:'''\n$1",
        "logdelete-success": "'''लॉग दृष्यता बदलि गय।'''",
        "logdelete-failure": "'''लॉग दृश्यता कय जमाव नाई भय:'''\n$1",
        "revdel-restore": "देखावा जाय/लुकुआवा जाय",
        "pagehist": "पन्ना कय इतिहास",
        "deletedhist": "मेटावल इतिहास",
        "revdelete-hide-current": "$2 कय, $1 बजे वाला मद नाई लुकुवाई गय: ई सबसे ताज़ा अवतरण होय।\nई नाइ लुकुआई सका जात है।",
+       "revdelete-modify-missing": "मद क्रमांक $1 कय बदलत समय त्रुटि आई गवा: इ डाटाबेस में नाइ है!",
+       "revdelete-no-change": "'''चेतावनी:''' $2, $1 वाले चिज में पहिलवे से ही इ आप कय कहल दृश्यता सेटिङ रहा।",
+       "revdelete-only-restricted": "$2, $1 कय तिथि कय आइटम कय लुकुआवे में त्रुटि: आप अउर दृश्यता विकल्प कय चुना जाय बिना प्रबंधक कय नजर से आइटम कय नाइ लुकुआइ सका जात है।",
+       "revdelete-reason-dropdown": "*हटावे कय आम कारण\n** सर्वाधिकार (कॉपीराइट) उल्लंघन\n** अनुचित टिप्पणी या निजी जानकारी\n** अनुचित सदस्यनाँव\n** मानहानिकारक जानकारी",
        "revdelete-otherreason": "अउर/दुसर कारण:",
        "revdelete-reasonotherlist": "दुसर कारण",
        "revdelete-edit-reasonlist": "हटावेक कारण बदला जाय",
        "revdelete-offender": "अवतरण संपादक:",
        "suppressionlog": "लुकुआवेक लॉग",
+       "suppressionlogtext": "नीचे प्रबंधकन् से लुकुआवल ब्लॉक औ हटावल पन्नन कय सूची है।\nमौजूदा ब्लॉक अव बैन देखय खर्तीन [[Special:BlockList|ब्लॉक सूची]] देखा जाय।",
        "mergehistory": "पन्ना कय इतिहास मिलावा जाय",
        "mergehistory-box": "दुई पन्नन कय इतिहास मिलावा जाय:",
        "mergehistory-from": "स्रोत पन्ना:",
        "searchprofile-images-tooltip": "फ़ाइल खोजा जाय",
        "searchprofile-everything-tooltip": "(बातचीत पन्नन सहित) सारा सामग्री में खोजा जाय",
        "searchprofile-advanced-tooltip": "विशेष नामस्थानन् में खोजा जाय",
+       "search-result-size": "$1 ({{PLURAL:$2|$2 शब्द}})",
+       "search-result-category-size": "{{PLURAL:$1|$1 सदस्य}} ({{PLURAL:$2|$2 उपश्रेणी}}, {{PLURAL:$3|$3 सञ्चिका}})",
+       "search-redirect": "($1 से पुनर्निर्देशित)",
+       "search-section": "(अनुभाग $1)",
+       "search-category": "(श्रेणी $1)",
+       "search-file-match": "(फ़ाइल सामग्री से मिलत है)",
+       "search-suggest": "आप कय मतलब ई तव नाई रहा:$1",
+       "search-interwiki-caption": "दुसर परियोजना",
+       "search-interwiki-default": "$1 से परिणाम:",
+       "search-interwiki-more": "(अउर)",
+       "search-relatedarticle": "सम्बंधित",
+       "searchrelated": "सम्बंधित",
+       "searchall": "कुल",
+       "search-nonefound": "आप कय खोज से मिलत जुलत कवनो परिणाम नाई मिला।",
+       "powersearch-legend": "उन्नत खोज",
        "powersearch-ns": "नामस्थानन् में खोजा जाय:",
        "powersearch-togglelabel": "चुना जाय:",
        "powersearch-toggleall": "कुल",
        "columns": "कॉलम:",
        "searchresultshead": "खोजा जाय",
        "stub-threshold-disabled": "अक्षम करा है",
+       "savedprefs": "आप कय पसंद सहेजि गय",
        "timezonelegend": "समयमंडल:",
        "localtime": "स्थानीय समय:",
+       "timezoneuseoffset": "अउर कौनो(समयांतर निर्दिष्ट करा जाय)",
        "servertime": "सर्वर कय समय:",
+       "guesstimezone": "ब्राउज़र से भरा जाय",
        "timezoneregion-africa": "अफ्रिका",
        "timezoneregion-america": "अमेरिका",
        "timezoneregion-antarctica": "अंटार्कटिका",
        "timezoneregion-europe": "यूरोप",
        "timezoneregion-indian": "हिंद महासागर",
        "timezoneregion-pacific": "प्रशांत महासागर",
+       "allowemail": "अउर सदस्यन् से ई-मेल सक्षम करा जाय",
        "prefs-searchoptions": "खोजा जाय",
        "prefs-namespaces": "नामस्थान",
        "default": "डिफ़ॉल्ट",
        "prefs-custom-css": "खासमखास सी॰एस॰एस",
        "prefs-custom-js": "खासमखास जावास्क्रिप्ट",
        "prefs-common-css-js": "कुल स्किन कय लिए साझा सी॰एस॰एस/जावास्क्रिप्ट:",
+       "prefs-emailconfirm-label": "ईमेल सुनीश्चित करा जाय:",
        "youremail": "ई-मेल:",
        "username": "{{GENDER:$1|सदस्यनाँव}}:",
+       "prefs-memberingroups": "निचे दिहा {{PLURAL:$1|समूह|समूहन्}} कय {{GENDER:$2|सदस्य}}:",
        "prefs-registration": "रजिष्ट्रेसन समय:",
        "yourrealname": "वास्तविक नाँव:",
        "yourlanguage": "भाषा",
        "userrights-groupsmember": "निचे कय {{PLURAL:$1|समूह|समूहन्}} कय सदस्य:",
        "userrights-groupsmember-auto": "निचे कय {{PLURAL:$1|समूह|समूहन्}} कय अंतर्निहित सदस्य:",
        "userrights-reason": "कारण:",
-       "watchlist": "अवलोकन सुची"
+       "group": "गोल:",
+       "group-user": "सदस्य:",
+       "group-autoconfirmed": "अपने आप बनल सदस्य",
+       "group-bot": "बॉट",
+       "group-sysop": "प्रबंधक",
+       "group-bureaucrat": "प्रशासक",
+       "group-suppress": "ओवरसाईट्स",
+       "group-all": "(कुल)",
+       "group-user-member": "{{GENDER:$1|सदस्य}}",
+       "group-autoconfirmed-member": "{{GENDER:$1|अपने आप बनल सदस्य}}",
+       "group-bot-member": "{{GENDER:$1|बॉट}}",
+       "group-sysop-member": "{{GENDER:$1|प्रबंधक}}",
+       "group-bureaucrat-member": "{{GENDER:$1|प्रशासक}}",
+       "group-suppress-member": "{{GENDER:$1|ओवरसाईट}}",
+       "grouppage-user": "{{ns:project}}:सदस्य",
+       "grouppage-autoconfirmed": "{{ns:project}}:अपने आप बनल सदस्य",
+       "grouppage-bot": "{{ns:project}}:बॉट",
+       "grouppage-sysop": "{{ns:project}}:प्रबंधक",
+       "grouppage-bureaucrat": "{{ns:project}}:प्रशासक",
+       "grouppage-suppress": "{{ns:project}}:कॉपीराइट",
+       "right-read": "पन्ना पढा जाय",
+       "right-edit": "पन्ना सम्पादन करा जाय",
+       "right-createpage": "पन्ना बनावा जाय (जवन चर्चा पन्ना नाई होय)",
+       "right-createtalk": "बातचीत पन्ना बनावा जाय",
+       "right-createaccount": "नँवा सदस्य खाता बनावा जाय",
+       "right-minoredit": "अपने बदलाव कय छोट चिन्हित करा जाय",
+       "right-move": "पन्ना घुसकावा जाय",
+       "right-move-subpages": "पन्ना उपपन्नन सहित घुस्कावा जाय",
+       "right-move-rootuserpages": "मूल सदस्य पन्नन् कय घुस्कावा जाय",
+       "right-move-categorypages": "श्रेणी पन्नन् कय घुसकावा जाय",
+       "right-movefile": "फाइल घुसकावा जाय",
+       "right-suppressredirect": "पन्ना घुस्कावत कय समय पुनर्निर्देश ना छोड़ा जाय",
+       "right-upload": "फ़ाइल अपलोड करा जाय",
+       "right-reupload": "मौजूदा फ़ाईलन् पे फिर से लिखा जाय",
+       "right-reupload-own": "आपन अपलोड करल फ़ाइल पे फिर से लिखा जाय",
+       "right-reupload-shared": "शेअर्ड इमेज भण्डार में मौजूद फ़ाइलन् पे फिर से लिखा जाय",
+       "right-upload_by_url": "यू॰आर॰एल से फ़ाइल अपलोड करा जाय",
+       "right-purge": "पन्ना कय कैश मेमोरी खाली करा जाय",
+       "right-autoconfirmed": "आई॰पी ठहर आधारित रेट लिमिट्स से बेअसर होई जाय",
+       "right-bot": "स्वचलित प्रणाली माना जाय",
+       "right-delete": "पन्ना मेटावा जाय",
+       "right-bigdelete": "ढेर इतिहास वाले पन्नन्  कय हटावा जाय",
+       "right-deletelogentry": "विशिष्ट लॉग प्रविष्टिन् कय लुकुआवा जाय अव देखावा जाय",
+       "right-browsearchive": "हटावल पन्ना खोजा जाय",
+       "right-undelete": "ई पन्ना कय पुनर्स्थापित करा जाय।",
+       "right-suppressionlog": "खासगी लॉग देखा जाय",
+       "right-block": "अउर सदस्यन् कय सम्पादन करय से ब्लॉक करा जाय",
+       "right-blockemail": "अउर सदस्यन् कय ईमेल करै से रोका जाय",
+       "right-ipblock-exempt": "आइ॰पी ब्लॉक्स, ऑटो-ब्लॉक्स अव रेंज ब्लॉक्स कय अनदेखा करा जाय",
+       "right-proxyunbannable": "स्वचालित प्रौक्सी ब्लॉक्स कय अनदेखा करा जाय",
+       "right-unblockself": "अपने आप कय अनावरुद्ध करा जाय",
+       "right-protect": "सुरक्षा स्तर बदला जाय अव सीढ़ी-सुरक्षित पन्ना सम्पादन करा जाय",
+       "right-editprotected": "अइसन सुरक्षित पन्नन कय सम्पादन करा जाय जवने कय सम्पादन कय \"{{int:protect-level-sysop}}\"",
+       "right-editsemiprotected": "अइसन पन्नन् कय सम्पादन करा जाय जवने कय सुरक्षा स्तर होय \"{{int:protect-level-autoconfirmed}}\"",
+       "right-editusercssjs": "अउर सदस्यन् कय सी॰एस॰एस अव जावास्क्रिप्ट पन्ना कय सम्पादन करा जाय",
+       "right-editusercss": "अउर सदस्यन् कय सी॰एस॰एस पन्ना सम्पादन करा जाय",
+       "right-edituserjs": "अउर सदस्यन् कय जावास्क्रिप्ट पन्ना कय सम्पादन करा जाय",
+       "right-editmyusercss": "आपन सदस्य स्तर कय सी॰एस॰एस फ़ाइल कय सम्पादन करा जाय",
+       "right-editmyuserjs": "आपन सदस्य स्तर कय जावास्क्रिप्ट फ़ाइल सम्पादन करा जाय",
+       "right-viewmywatchlist": "आपन ध्यानसूची देखा जाय",
+       "right-editmywatchlist": "आपन ध्यानसूची सम्पादन करा जाय। ध्यान दिहा जाय कि कुछ काम इ अधिकार कय बिनव ध्यानसूची में पन्ना जोडिहैं।",
+       "right-viewmyprivateinfo": "आपन व्यक्तिगत डाटा देखा जाय (जैसय ई-मेल ठहर, असली नाँव)",
+       "right-editmyprivateinfo": "आपन व्यक्तिगत डाटा सम्पादन करा जाय (जैसय ई-मेल ठहर, असली नाँव)",
+       "right-editmyoptions": "आपन पसंद सम्पादन करा जाय",
+       "right-markbotedits": "वापिस लेवे में होए वाला संपादनन् कय बॉट सम्पादन चिन्हित करा जाय",
+       "right-noratelimit": "रेट लिमिट्स से बेअसर होइ जाय",
+       "right-import": "दुसर विकि से पन्ना लावा जाय",
+       "right-importupload": "फ़ाइल अपलोड से पन्ना लावा जाय",
+       "right-patrol": "अउर सदस्यन् कय सम्पादन परीक्षित चिन्हित करा जाय",
+       "right-unwatchedpages": "अइसन पन्नन कय सूची देखा जाय जवन केहु कय ध्यानसूची में नाइ है",
+       "right-mergehistory": "पन्ना इतिहास एकट्ठय करा जाय",
+       "right-userrights": "कुल सदस्य अधिकार बदला जाय",
+       "right-userrights-interwiki": "अउर विकिन् पे सदस्य अधिकार बदला जाय",
+       "right-siteadmin": "डाटाबेस कय ताला लगावा जाय या खोला जाय",
+       "right-override-export-depth": "पन्ना निर्यात करा जाय, पाँच स्तर कय गहराई तक जुड़ल पन्ना लइकय",
+       "right-sendemail": "अउर सदस्यन् कय ई-मेल पठवा जाय",
+       "right-passwordreset": "गुप्तकुंजी रीसेट ई-मेल देखा जाय",
+       "newuserlogpage": "सदस्य खाता बनावे कय लॉग",
+       "newuserlogpagetext": "ई सदस्य खाता बनावे कय लॉग होय।",
+       "rightslog": "सदस्य अधिकार लॉग",
+       "rightslogtext": "ई सदस्य अधिकारन् में करल बदलाव कय सूची होय।",
+       "action-read": "इ पन्ना कय पढ़ा जाय",
+       "action-edit": "ई पन्ना कय सम्पादन करा जाय",
+       "action-createpage": "पन्ना बनावा जाय",
+       "action-createtalk": "बातचीत पन्ना बनावा जाय",
+       "action-createaccount": "ई सदस्य खाता बनावा जाय",
+       "action-history": "इ पन्ना कय इतिहास देखेक",
+       "action-minoredit": "ई बदलाव छोट होय",
+       "action-move": "ई पन्ना घुस्कावा जाय",
+       "action-move-subpages": "ई पन्ना अव एकरे उप-पन्ना कय घुस्कावा जाय",
+       "action-move-rootuserpages": "मूल सदस्य पन्नन् कय घुस्कावेक",
+       "action-move-categorypages": "श्रेणी पन्नन् कय घुसकावेक",
+       "action-movefile": "ई पन्ना घुस्कावेक",
+       "action-upload": "इ फ़ाइल कय अपलोड करेक",
+       "action-reupload": "मौजूदा फ़ाईलन् पे फिर से लिखे कय",
+       "action-reupload-shared": "साझा भंडार में इ फ़ाइलन् कय ऊप्पर कुछ अउर डारे कय",
+       "action-upload_by_url": "यू॰आर॰एल से इ फ़ाइल कय चढ़ावे कय",
+       "action-writeapi": "लेखन ए॰पी॰आई कय प्रयोग करे कय",
+       "action-delete": "ई पन्ना मेटावे कय",
+       "action-deleterevision": "इ अवतरण कय हटावे कय",
+       "action-deletedhistory": "इ पन्ना कय मेटावल इतिहास कय देखे कय",
+       "action-browsearchive": "हटावल पन्ना खोजे कय",
+       "action-undelete": "ई पन्ना कय पुनर्स्थापित करे कय",
+       "action-suppressrevision": "इ लुकुआवल अवतरण कय देखे कय अव पुनर्स्थापित करे कय",
+       "action-suppressionlog": "इ निजी लॉग कय देखे कय",
+       "action-block": "ई सदस्य कय सम्पादन करय से ब्लॉक करे कय",
+       "action-protect": "इ पन्ना कय सुरक्षा स्तर बदले कय",
+       "action-rollback": "कवनो पन्ना कय अंतिम सम्पादन करय वाले सदस्यन् कय सम्पादन वापिस लेवे कय",
+       "action-import": "दुसर विकि से पन्ना लावे कय",
+       "action-importupload": "फ़ाइल अपलोड से पन्ना लावे कय",
+       "action-patrol": "अउर सदस्यन् कय सम्पादन परीक्षित चिन्हित करे कय",
+       "action-autopatrol": "आपन सम्पादन स्वचालित रूप से परीक्षित करे कय",
+       "action-unwatchedpages": "अईसन पन्ना जवन केहु कय ध्यानसूची में नाई है कय सूची देखे कय",
+       "action-mergehistory": "पन्ना इतिहास एकट्ठय करे कय",
+       "action-userrights": "कुल सदस्यन कय अधीकार बदले कय",
+       "action-siteadmin": "डाटाबेस कय ताला लगावा जाय या खोला जाय",
+       "action-sendemail": "ईमेल पठवा जाय",
+       "action-editmywatchlist": "ध्यानसूची सम्पादन करा जाय",
+       "action-viewmywatchlist": "आपन ध्यानसूची देखा जाय",
+       "action-viewmyprivateinfo": "आपन व्यक्तिगत जानकारी देखा जाय",
+       "action-editmyprivateinfo": "आपन व्यक्तिगत जानकारी बदला जाय",
+       "nchanges": "$1 {{PLURAL:$1|बदलाव}}",
+       "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|अंतिम दाइ देखय कय बाद से}}",
+       "enhancedrc-history": "इतिहास",
+       "recentchanges": "हालिय कय बदलाव",
+       "recentchanges-legend": "हालिय कय बदलाव संबंधी विकल्प",
+       "recentchanges-label-newpage": "ई सम्पादन से नँवा पन्ना बना",
+       "recentchanges-label-minor": "ई छोट सम्पादन होय ।",
+       "recentchanges-label-bot": "ई सम्पादन एक्ठु ब़ा़ट करे है",
+       "recentchanges-legend-heading": "'''कुंजी:'''",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|नवा पन्नन् कय सूची]] कय भी देखा जाय)",
+       "rclistfrom": "$3 $2 से नँवा बदलाव देखावा जाय",
+       "rcshowhideminor": "छोट बदलाव $1",
+       "rcshowhideminor-show": "देखावा जाय",
+       "rcshowhideminor-hide": "लुकुआवा जाय",
+       "rcshowhidebots": "बॉट $1",
+       "rcshowhidebots-show": "देखावा जाय",
+       "rcshowhidebots-hide": "लुकुआवा जाय",
+       "rcshowhideliu": "पंजीकृत सदस्य $1",
+       "rcshowhideliu-show": "देखावा जाय",
+       "rcshowhideliu-hide": "लुकुआवा जाय",
+       "rcshowhideanons": "$1 अज्ञात प्रयोगकर्ता",
+       "rcshowhideanons-show": "देखावा जाय",
+       "rcshowhideanons-hide": "लुकुआवा जाय",
+       "rcshowhidepatr": "परीक्षित सम्पादन $1",
+       "rcshowhidepatr-show": "देखावा जाय",
+       "rcshowhidepatr-hide": "लुकुआवा जाय",
+       "rcshowhidemine": "हमार बदलाव $1",
+       "rcshowhidemine-show": "देखावा जाय",
+       "rcshowhidemine-hide": "लुकुआवा जाय",
+       "rclinks": "पिछला $2 दिन में करल $1 बदलाव देखावा जाय<br />$3",
+       "diff": "अंतर",
+       "hist": "इतिहास",
+       "hide": "लुकुआवा जाय",
+       "show": "देखावा जाय",
+       "minoreditletter": "छो",
+       "newpageletter": "न",
+       "boteditletter": "बॉ",
+       "number_of_watching_users_pageview": "[$1 ध्यान राखय वाले {{PLURAL:$1|सदस्य}}]",
+       "rc_categories_any": "कवनो भी",
+       "rc-change-size-new": "बदलाव कय बाद $1 {{PLURAL:$1|बाइट}}",
+       "newsectionsummary": "/* $1 */ नँवा अनुभाग",
+       "rc-enhanced-expand": "विस्तृत जानकारी देखावा जाय",
+       "rc-enhanced-hide": "विस्तृत जानकारी लुकुआवा जाय",
+       "rc-old-title": "मूल रूप से \"$1\" नाव से बनावा रहा",
+       "recentchangeslinked": "पन्ना से सम्बन्धित बदलाव",
+       "recentchangeslinked-feed": "पन्ना से सम्बन्धित बदलाव",
+       "recentchangeslinked-toolbox": "पन्ना से सम्बन्धित बदलाव",
+       "recentchangeslinked-title": "\"$1\" से जुड़ल बदलाव",
+       "recentchangeslinked-page": "पन्ना कय नाँव:",
+       "recentchangeslinked-to": "इसके बदले में दिये हुए पृष्ठसे जुडे पन्नोंके बदलाव दर्शायें",
+       "upload": "फ़ाइल अपलोड करा जाय",
+       "uploadbtn": "फ़ाइल अपलोड करा जाय",
+       "reuploaddesc": "अपलोड रद्द करा जाय अव फिरसे अपलोड फ़ॉर्म पे जावा जाय",
+       "upload-tryagain": "संशोधित फ़ाइल विवरण भेजा जाय",
+       "uploadnologin": "लाग इन नाई करा गा है",
+       "uploadnologintext": "फाइल अपलोड करेक लिए $1 करब आवश्यक है",
+       "upload_directory_missing": "अपलोड डाइरेक्टरी ($1) मौजूद नाई है, अउर वेबसर्वर एकर निर्माण नाई कई पाय।",
+       "uploaderror": "अपलोड त्रुटि",
+       "uploadlogpage": "अपलोड लॉग",
+       "filename": "फ़ाइल कय नाँव",
+       "filedesc": "सारांश:",
+       "fileuploadsummary": "सारांश:",
+       "filereuploadsummary": "फ़ाइल में बदलाव:",
+       "filestatus": "कॉपीराइट स्थिति:",
+       "filesource": "स्रोत:",
+       "ignorewarning": "चेतावनि अनदेखा करा जाय अव फ़ाइल अपलोड करा जाय",
+       "ignorewarnings": "कुल चेतावनि कय अनदेखा करा जाय",
+       "minlength1": "फ़ाइल कय नाँव कम-से-कम एक अक्षर कय होएक चाहि।",
+       "filename-toolong": "फ़ाइल नाँव 240 बाइट से ढेर लम्मा नाई होई सकत है।",
+       "badfilename": "फ़ाइल कय नाँव बदल कय \"$1\" कई दिहा है।",
+       "filetype-mime-mismatch": "फाइल एक्सटेंशन \".$1\" फ़ाइल कय खोजेक MIME प्रकार ($2) से मेल नाई खात है।",
+       "filetype-badmime": "\"$1\" प्रकार कय फ़ाइल अपलोड करय कय अनुमति नाई है।",
+       "uploadwarning": "अपलोड चेतावनी",
+       "uploadwarning-text": "फ़ाइल विवरण कय मिलाई कय फिर कोशिश करा जाय।",
+       "savefile": "फ़ाइल सहेजा जाय",
+       "uploaddisabled": "अपलोड प्रतिबंधित हैं।",
+       "copyuploaddisabled": "यू॰आर॰एल द्वारा अपलोड अक्षम हैं।",
+       "uploaddisabledtext": "फ़ाइल अपलोड अक्षम हैं।",
+       "php-uploaddisabledtext": "पी॰एच॰पी में फ़ाइल अपलोड बंद है।\nकृपया file_uploads जमाव कय जाँच करा जाय।",
+       "uploadscripted": "इ फ़ाइल में एच॰टी॰एम॰एल या स्क्रिप्ट कोड है, जवन वेब ब्राउज़र गलत पढि सकत है।",
+       "uploadscriptednamespace": "इ एस॰वी॰जी फ़ाइल में अमान्य नामजगह \"$1\" है।",
+       "uploadinvalidxml": "अपलोड करल फ़ाइल कय XML पार्स नाइ होई।",
+       "uploadvirus": "इ फ़ाइल में भाईरस हैं!ढेर जानकारी: $1",
+       "uploadjava": "ई फ़ाइल एकठु ज़िप फ़ाइल होय जवने मे एकठु जावा .class फ़ाइल है।\nजावा फ़ाइलन् कय अपलोड नाई कै सका जात है, काहेसे एकरे कारण सुरक्षा बाधा पार होइ जाई।",
+       "upload-source": "स्रोत फ़ाइल",
+       "sourcefilename": "स्रोत फ़ाइल कय नाँव:",
+       "sourceurl": "स्रोत यू॰आर॰एल:",
+       "destfilename": "लक्ष्य फ़ाइल नाव:",
+       "upload-maxfilesize": "अधिकतम फ़ाइल आकार: $1",
+       "upload-description": "फ़ाइल विवरण",
+       "upload-options": "अपलोड विकल्प",
+       "watchthisupload": "इ फ़ाइल पे ध्यान रक्खा जाय",
+       "upload-success-subj": "अपलोड होइ गय",
+       "upload-success-msg": "आप कय [$2] से अपलोड असफल रहा। ई [[:{{ns:file}}:$1]] पे उपलब्ध है",
+       "upload-failure-subj": "अपलोड समस्या",
+       "upload-failure-msg": "[$2] से आप कय अपलोड में एकठु समस्या रहा:\n\n$1",
+       "upload-warning-subj": "अपलोड चेतावनी",
+       "upload-warning-msg": "आप कय [$2] से अपलोड कय साथे एकठु समस्या रहा। आप इ समस्या कय ठीक करेक लिए [[Special:Upload/stash/$1|अपलोड फ़ॉर्म]] पे लौट सका जात है।",
+       "upload-proto-error": "गलत प्रोटोकॉल",
+       "upload-proto-error-text": "रिमोट अपलोड कय लिये यू॰आर॰एल कय नाँव <code>http://</code> या <code>ftp://</code> से शुरू होब आवश्यक है।",
+       "upload-file-error": "आन्तरिक त्रुटि",
+       "upload-file-error-text": "सर्वर पे अस्थायी फ़ाइल बनावत समय आंतरिक त्रुटि आई गय।\nकृपया कवनो [[Special:ListUsers/sysop|प्रबंधक]] से संपर्क करा जाय।",
+       "upload-misc-error": "अज्ञात अपलोड त्रुटि",
+       "upload-too-many-redirects": "इ यू॰आर॰एल में ढेर कुल पुनर्निर्देशन हैं",
+       "upload-http-error": "एकठु एच॰टी॰टी॰पी त्रुटि आई गय: $1",
+       "upload-copy-upload-invalid-domain": "कॉपी अपलोड इ डोमेन से उपलब्ध नाई हैं।",
+       "backend-fail-stream": "फ़ाइल $1 स्ट्रीम नाई होई पाई।",
+       "backend-fail-backup": "फ़ाइल $1 बैकअप नाई होई पाई।",
+       "backend-fail-notexists": "फ़ाइल $1 मौजूद नाई है।",
+       "backend-fail-hashes": "तुलना कय लिए फ़ाइलन् कय हैश नाई मिला।",
+       "backend-fail-notsame": "एकठु ग़ैर-समान फ़ाइल $1 पे पहिलवे से मौजूद है।",
+       "backend-fail-invalidpath": "$1 मान्य भंडारण पथ नाई है।",
+       "backend-fail-delete": "\"$1\" फ़ाइल कय नाइ मेटाई  गय।",
+       "backend-fail-describe": "फ़ाइल \"$1\" कय मेटाडाटा नाई बदल मिला।",
+       "backend-fail-alreadyexists": "फ़ाइल $1 पहिलवे से मौजूद है।",
+       "backend-fail-store": "फ़ाइल $1, $2 पे संग्रहीत नाई होई पाए।",
+       "backend-fail-copy": "\"$1\" फ़ाइल कय \"$2\" पे प्रतिलिपि नाई बनी पाए।",
+       "backend-fail-move": "फ़ाइल $1, $2 पे स्थानांतरित नाई होई पाए।",
+       "backend-fail-opentemp": "अस्थाई फ़ाइल खोल नाई खुला।",
+       "backend-fail-writetemp": "अस्थायी फ़ाइल पे लिखब संभव नाई है।",
+       "backend-fail-closetemp": "अस्थाई फ़ाइल बंद नाई होई पाय।",
+       "backend-fail-read": "फ़ाइल $1 नाई पढी मिला।",
+       "backend-fail-create": "फ़ाइल $1 लिखी नाई सका जात है।",
+       "backend-fail-maxsize": "फ़ाइल $1 नाई लिखी सका जात है काहे से ई {{PLURAL:$2|$2 बाईट}} से बड़ा है।",
+       "backend-fail-readonly": "भंडारण बैकेंड \"$1\" इ समय खाली पढ़ सका जात है (रीड-ओन्ली होय)। दिहल कारण रहा: \"$2\"",
+       "backend-fail-synced": "फ़ाइल \"$1\" आतंरिक भंडारण बैकेंड में असंगत स्थिति में है।",
+       "backend-fail-connect": "\"$1\" भंडारण बैकेंड से सम्पर्क स्थापित नाई कई मिला।",
+       "backend-fail-internal": "भंडारण बैकेंड \"$1\" में कवनो अज्ञात त्रुटि पैदा होइ गय।",
+       "uploadstash": "स्टैश अपलोड करा जाय",
+       "http-invalid-url": "अमान्य यू॰आर॰एल: $1",
+       "http-invalid-scheme": "\"$1\" से शुरू होय वाले यू॰आर॰एल स्वीकार्य नाई हैं।",
+       "http-request-error": "एच॰टी॰टी॰पी अनुरोध अज्ञात त्रुटि कय नाते असफल रहा।",
+       "http-read-error": "एच॰टी॰टी॰पी पढ़य में त्रुटि।",
+       "http-timed-out": "एच॰टी॰टी॰पी अनुरोध कय समय खतम (टाइम आउट)",
+       "http-curl-error": "यू॰आर॰एल $1 पावे में त्रुटि",
+       "http-bad-status": "एच॰टी॰टी॰पी अनुरोध कय समय समस्या रहा: $1 $2",
+       "upload-curl-error6": "यू॰आर॰एल तक नाई पहुँच मिला।",
+       "upload-curl-error6-text": "दिहल यू॰आर॰एल तक नाई पहुँचि मिला।\nकृपया एक दाइ फिर से जाँच लिहा जाय कि यू॰आर॰एल सही है औ उ साइट चलत है।",
+       "upload-curl-error28": "अपलोड टाइम‍आउट",
+       "license": "लाइसेन्सिंग:",
+       "license-header": "लाइसेन्सिंग",
+       "nolicense": "कवनो नाइ चुना गय",
+       "licenses-edit": "लाइसेंस विकल्प सम्पादन",
+       "license-nopreview": "(झलक उपलब्ध नाइ है)",
+       "upload_source_file": "(आप कय कम्प्युटरसे लिहल फाइल)",
+       "listfiles-delete": "मिटावा जाय",
+       "listfiles-summary": "इ विशेष पन्ना अपलोड करल कुल फ़ाइल देखावत है।",
+       "listfiles_search_for": "मीडिया नाँव कय खर्तिन खोजा जाय:",
+       "imgfile": "फ़ाइल",
+       "listfiles": "फ़ाइल सूची",
+       "listfiles_thumb": "अंगूठाकार",
+       "listfiles_date": "मिती",
+       "listfiles_name": "नाँव",
+       "listfiles_user": "सदस्य",
+       "listfiles_size": "आकार",
+       "listfiles_description": "विवरण",
+       "listfiles_count": "अवतरण",
+       "listfiles-show-all": "एहमा चित्रन् कय पुरान अवतरण है",
+       "listfiles-latestversion": "हालिए कय अवतरण",
+       "listfiles-latestversion-yes": "हाँ",
+       "listfiles-latestversion-no": "नाही",
+       "file-anchor-link": "फाइल",
+       "filehist": "फाइल कय इतिहास",
+       "filehist-help": "मिति/समय मे क्लिक कइकै फाइल उ समय कैसन बिलगात रहा देखा जाय",
+       "filehist-deleteall": "कुल मेटावा जाय",
+       "filehist-deleteone": "मेटावा जाय",
+       "filehist-revert": "पहिले जैसन करा जाय",
+       "filehist-current": "अबहिनै कय",
+       "filehist-datetime": "मिति/समय",
+       "filehist-thumb": "अंगूठाकार प्रारूप",
+       "filehist-thumbtext": "$1 अवतरण कय अंगूठाकार प्रारूप।",
+       "filehist-nothumb": "कवनो अंगूठाकार नाइ है",
+       "filehist-user": "सदस्य",
+       "filehist-dimensions": "आकार",
+       "filehist-filesize": "फ़ाइल कय आकार",
+       "filehist-comment": "टिप्पणी",
+       "imagelinks": "फ़ाइल कय उपयोग",
+       "linkstoimage": "निचे दिहा {{PLURAL:$1|पन्ना}} में इ फ़ाइल कय कड़ि हैं:",
+       "nolinkstoimage": "इ फाइल से कवनो पन्ना नाइ जोडान है ।",
+       "morelinkstoimage": "इ फ़ाइल कय [[Special:WhatLinksHere/$1|अउर कड़ि]] देखा जाय।",
+       "linkstoimage-redirect": "$1(फ़ाइल पुनर्निर्देश) $2",
+       "filepage-nofile": "ई नाँव कय कवनो फाइल नाइ है ।",
+       "filepage-nofile-link": "ई नाँव कय कवनो फाइल नाइ है,लेकिन आप [$1 कय अपलोड कई सका जात है]।",
+       "uploadnewversion-linktext": "ई फाइल कय नँवा अवतरण अप्लोड करा जाय",
+       "shared-repo-from": "$1 से",
+       "shared-repo": "एकठु साझा भंडार",
+       "upload-disallowed-here": "आप इ फाइल कय उप्पर नाइ लिखी सका जात है",
+       "filerevert": "$1 कय पहिले जैसन करा जाय",
+       "filerevert-legend": "फ़ाइल कय पहिले जैसन करा जाय",
+       "filerevert-intro": "आप '''[[Media:$1|$1]]''' कय [$4 $2 कय $3 बजे कय अवतरण] कय पहिले जैसन करा जात है ।",
+       "filerevert-comment": "कारण:",
+       "filerevert-defaultcomment": "$1 कय $2 बजे कय अवतरण कय पहिले जैसन कै गय",
+       "filerevert-submit": "पहिले जैसन करा जाय",
+       "filerevert-success": "'''[[Media:$1|$1]]''' कय [$4 $2 कय $3 बजे कय अवतरण] कय पहिले जैसन कै गा है।",
+       "filerevert-badversion": "दिहल समय से मिलए वाला इ फ़ाइल कय कवनो पुरान अवतरण नाइ है।",
+       "filedelete": "$1 मिटावा जाय",
+       "filedelete-legend": "फ़ाइल मिटावा जाय",
+       "filedelete-intro": "आप फ़ाइल '''[[Media:$1|$1]]''' इतिहास सहित हटावे जावा जात है।",
+       "filedelete-intro-old": "आप '''[[Media:$1|$1]]''' कय [$4 $2 कय $3 बजे कय अवतरण] हटावे जावा जात हैं।",
+       "filedelete-comment": "कारण:",
+       "filedelete-submit": "मिटावा जाय",
+       "filedelete-success": "'''$1''' मेटावा है।",
+       "filedelete-success-old": "'''[[Media:$1|$1]]''' कय $2 कय $3 बजे कय अवतरण हटाई गा है।",
+       "filedelete-nofile": "<strong>$1</strong> नाई है.",
+       "filedelete-otherreason": "अउर/दुसर कारण:",
+       "filedelete-reason-otherlist": "दुसर कारण",
+       "filedelete-reason-dropdown": "*हटावे कय साधारण कारण\n** कॉपीराइट उल्लंघन\n** डुप्लिकेट फ़ाइल",
+       "filedelete-edit-reasonlist": "हटावेक कारण बदला जाय",
+       "filedelete-maintenance": "रखरखाव चलत है अव रखरखाव कय दौरान फ़ाइलन् कय हटाइब औ पुनर्स्थापित करब मिनाही है।",
+       "filedelete-maintenance-title": "फ़ाइल नाइ हटाय सका जात है",
+       "mimesearch": "MIME खोज",
+       "mimetype": "MIME प्रकार:",
+       "download": "डाउनलोड",
+       "unwatchedpages": "ध्यान ना दिहल पन्ना",
+       "listredirects": "पुनर्निर्देशन कय सूची",
+       "unusedtemplates": "अप्रयुक्त साँचा",
+       "unusedtemplateswlh": "अउर कड़ि",
+       "randompage": "कवनो एक पन्ना",
+       "randomincategory": "श्रेणी में कवनो एक (रैंडम) पन्ना",
+       "randomincategory-invalidcategory": "\"$1\" एकठु मान्य श्रेणी नाँव नाइ होय।",
+       "randomincategory-nopages": "[[:Category:$1|$1]] श्रेणी में कवनो पन्ना नाई है।",
+       "randomincategory-category": "श्रेणी:",
+       "randomincategory-legend": "श्रेणी में कवनो एक (रैंडम) पन्ना",
+       "randomredirect": "कवनो एक पुनर्निर्देशन पे जावा जाय",
+       "randomredirect-nopages": "नामस्थान \"$1\" में कवनो पुनर्निर्देशन नाइ है।",
+       "statistics": "आँकड़ा:",
+       "statistics-header-pages": "पन्ना कय आँकड़ा",
+       "statistics-header-edits": "संपादन कय आँकड़ा",
+       "statistics-header-users": "सदस्य आँकड़ा",
+       "statistics-header-hooks": "अउर आँकड़ा",
+       "statistics-articles": "सामग्री पन्ना",
+       "statistics-pages": "पन्ना",
+       "withoutinterwiki-submit": "देखावा जाय",
+       "fewestrevisions": "सबसे कम अवतरण वाला पन्ना",
+       "nbytes": "$1 {{PLURAL:$1|बाइट|बाइट}}",
+       "ncategories": "{{PLURAL:$1|एक श्रेणी|श्रेणिन्}}",
+       "ninterwikis": "$1 अंतरविकी {{PLURAL:$1|कड़ी}}",
+       "nlinks": "$1 {{PLURAL:$1|कड़ी}}",
+       "nmembers": "$1 {{PLURAL:$1|सदस्य}}",
+       "nmemberschanged": "$1 → $2 {{PLURAL:$2|सदस्य}}",
+       "nrevisions": "$1 {{PLURAL:$1|अवतरण}}",
+       "nviews": "{{PLURAL:$1|एक|$1}} दाइ देखि गा है",
+       "nimagelinks": "$1 {{PLURAL:$1|पन्ना|पन्नन्}} पे प्रयुक्त",
+       "ntransclusions": "$1 {{PLURAL:$1|पन्ना|पन्नन}} पे प्रयुक्त",
+       "specialpage-empty": "इ ब्यौरा कय खर्तीन कवनो परिणाम नाई है।",
+       "lonelypages": "एकाकी पन्ना",
+       "lonelypagestext": "निचे दिहा पन्ना से ना तो {{SITENAME}} कय अउर पन्ना जोड़ात है औ ना उ कवनो अउर पन्ना कय भित्तर जोडान है।",
+       "uncategorizedpages": "अश्रेणीकृत पन्ना",
+       "uncategorizedcategories": "अश्रेणीकृत श्रेणि",
+       "uncategorizedimages": "अश्रेणीकृत फ़ाइल",
+       "uncategorizedtemplates": "अश्रेणीकृत साँचा",
+       "unusedcategories": "अप्रयुक्त श्रेणि",
+       "unusedimages": "अप्रयुक्त फ़ाइल",
+       "wantedcategories": "जवन श्रेणि चाहि",
+       "wantedpages": "जवन पन्ना चाहिँ",
+       "wantedpages-badtitle": "परिणामन् में अवैध शीर्षक: $1",
+       "wantedfiles": "जवन फाइल चाहिँ",
+       "wantedtemplates": "जवन साँचा चाहिँ",
+       "mostlinked": "सबसे ढेर जोड़ान पन्ना",
+       "mostlinkedcategories": "सबसे ढेर जोड़ान श्रेणि",
+       "mostlinkedtemplates": "सबसे ढेर ट्रांसक्लूड करल पन्ना",
+       "mostcategories": "सबसे ढेर श्रेणि वाले पन्ना",
+       "mostimages": "सबसे ढेर जोड़ान फाइल",
+       "mostinterwikis": "सबसे ढेर अंतरविकी कड़ि वाले पन्ना",
+       "mostrevisions": "सबसे ढेर अवतरण वाला पन्ना",
+       "prefixindex": "उपसर्ग अनुसार पन्ना",
+       "prefixindex-namespace": "उपसर्ग वाले कुल पन्ना ($1 नामस्थान)",
+       "prefixindex-strip": "सूची में उपसर्ग लुकुआवा जाय",
+       "shortpages": "छोट पन्ना",
+       "longpages": "लम्मा पन्ना",
+       "deadendpages": "बंद सिरा पन्ना",
+       "deadendpagestext": "नीचे दिहल पन्ना {{SITENAME}} कय अउर पन्नन् से नाइ जोडान है।",
+       "protectedpages": "सुरक्षित पन्ना",
+       "protectedpages-indef": "खालि अनिश्चितकालीन सुरक्षा",
+       "protectedpages-cascade": "कास्केडिङ सुरक्षा खालि",
+       "protectedpages-noredirect": "पुनर्निदेश लुकुआवा जाय",
+       "protectedpagesempty": "इ पारामिटर मे कवनो सुरक्षित पन्ना नाइ है ।",
+       "protectedpages-timestamp": "समय मोहर",
+       "protectedpages-page": "पन्ना",
+       "protectedpages-expiry": "खतम",
+       "protectedpages-performer": "सुरक्षित करय वाला सदस्य",
+       "protectedpages-params": "सुरक्षा प्राचल",
+       "protectedpages-reason": "कारण",
+       "protectedpages-unknown-timestamp": "अज्ञात",
+       "protectedpages-unknown-performer": "अज्ञात सदस्य",
+       "protectedtitles": "सुरक्षित शीर्षक",
+       "protectedtitles-summary": "इ पन्ना अइसन पन्ना शीर्षकन् कय सूची देत है जवने कय अभीन बनावै से सुरक्षित कई गा है। सुरक्षित पन्नन कय सूची देखेक खर्तिन [[{{#special:ProtectedPages}}|{{int:protectedpages}}]] देखा जाय।",
+       "protectedtitlesempty": "इ नियमन् द्वारा कवनो भी शीर्षक सुरक्षित नाइ है।",
+       "listusers": "सदस्य सूची",
+       "listusers-editsonly": "अइसन सदस्य देखावा जाय जवन संपादन कै चुका हैँ ।",
+       "listusers-creationsort": "बनावै कय तिथि कय आधार पे क्रमांकन करा जाय",
+       "listusers-desc": "घटे कय क्रम मे मिलावा जाय",
+       "usereditcount": "$1 {{PLURAL:$1|सम्पादन}}",
+       "usercreated": "$1 कय $2 बजे बनाइ गय, सदस्यनाँव $3 होय",
+       "newpages": "नँवा पन्ना",
+       "newpages-username": "सदस्यनाँव:",
+       "ancientpages": "सबसे पुरान पन्ना",
+       "move": "घुस्कावा जाय",
+       "movethispage": "ई पन्ना कय नाँव बदला जाय",
+       "unusedcategoriestext": "निचे दिहा श्रेणी पन्ना मौजूद है लेकिन कवनो भी पन्ना या अउर श्रेणि एकर प्रयोग नाँइ करत हैं।",
+       "notargettitle": "लक्ष्य नाइ",
+       "notargettext": "इ काम कय करेक लिये आप लक्ष्य पन्ना या सदस्य नाइ बतावा गा है।",
+       "nopagetitle": "अइसन कवनो लक्ष्य पन्ना नाइ है",
+       "nopagetext": "आप कय द्वारा लक्षित पन्ना मौजूद नाइ है।",
+       "pager-newer-n": "{{PLURAL:$1|नँवा}} $1",
+       "pager-older-n": "{{PLURAL:$1|पुरान}} $1",
+       "suppress": "ओवरसाइट",
+       "querypage-disabled": "प्रदर्शन कारणन् से इ विशेष पन्ना अक्षम कै गा है।",
+       "apihelp": "API सहयोग",
+       "apihelp-no-such-module": "मोड्युल \"$1\" नाइ मिला ।",
+       "booksources": "किताबीन कय स्रोत",
+       "booksources-search-legend": "किताबीन कय स्रोत खोजा जाय",
+       "booksources-search": "खोजा जाय",
+       "specialloguserlabel": "करयवाला:",
+       "speciallogtitlelabel": "प्रयोजन (शीर्षक या सदस्यनाँव):",
+       "log": "लॉग",
+       "all-logs-page": "कुल सार्वजनिक लॉग",
+       "logempty": "लॉग में अइसन कवनो चिज नाइ है।",
+       "log-title-wildcard": "इ पाठ से शुरू होय वाला शीर्षक खोजा जाय",
+       "showhideselectedlogentries": "चुनल लाग प्रविष्टि देखावा जाय/लुकुआवा जाय",
+       "allpages": "कुल पन्ना",
+       "nextpage": "अगला पन्ना ($1)",
+       "prevpage": "पहिलका पन्ना ($1)",
+       "allpagesfrom": "इ अक्षर से शुरु होय वाला पन्ना देखावा जाय:",
+       "allpagesto": "इ अक्षर से खतम होय वाला पन्ना देखावा जाय:",
+       "allarticles": "कुल पन्ना",
+       "allinnamespace": "कुल पन्ना ($1 नामस्थान)",
+       "allpagessubmit": "जावा जाय",
+       "allpagesprefix": "इ उपपद से शुरू होय वाला पन्ना देखावा जाय:",
+       "allpagesbadtitle": "दिहल शीर्षक अयोग्य, ख़ाली या गलत जोड़ान अंतर-भाषीय या अंतर-विकि उपपद रहा।\nएहमा एक या एक से ढेर अईसन कॅरेक्टर होई सकत हैं जवन शीर्षक में प्रयोग नाई कई सका जात अहै।",
+       "allpages-bad-ns": "{{SITENAME}} में \"$1\" नामस्थान नाइ है।",
+       "allpages-hide-redirects": "पुनर्निर्देश लुकुआवा जाय",
+       "cachedspecial-refresh-now": "हालिए कय देखा जाय ।",
+       "categories": "श्रेणी",
+       "categoriesfrom": "इ अक्षर से शुरु होय वाला श्रेणी देखावा जाय:",
+       "special-categories-sort-count": "संख्या कय अनुसार क्रमांकित करा जाय",
+       "special-categories-sort-abc": "वर्णानुक्रम कय अनुसार देखावा जाय",
+       "deletedcontributions": "हटावल सदस्य योगदान",
+       "deletedcontributions-title": "हटावल सदस्य योगदान",
+       "sp-deletedcontributions-contribs": "योगदान",
+       "linksearch": "बाहरी कड़ी खोजा जाय",
+       "linksearch-pat": "खोजय खर्तीन पाठ:",
+       "linksearch-ns": "नामस्थान:",
+       "linksearch-ok": "खोजा जाय",
+       "linksearch-line": "$2 में से $1 जोडान है",
+       "listusersfrom": "इ अक्षर से शुरु होय वाले सदस्य देखावा जाय:",
+       "listusers-submit": "देखावा जाय",
+       "listusers-noresult": "कवनो सदस्य नाइ मिला ।",
+       "listusers-blocked": "(अवरोधित)",
+       "activeusers": "सक्रिय सदस्यन् कय सूची",
+       "activeusers-intro": "इ सक्रिय सदस्यन् कय सूची होय जे पिछला $1 {{PLURAL:$1|दिन}} में कुछ काम करें है।",
+       "activeusers-count": "$1 {{PLURAL:$1|काम}} पिछला $3 {{PLURAL:$3|दिन}} में",
+       "activeusers-from": "इ अक्षर से शुरु होय वाले सदस्य देखावा जाय:",
+       "activeusers-hidebots": "बॉट लुकुआवा जाय",
+       "activeusers-hidesysops": "प्रबंधक लुकुआवा जाय",
+       "activeusers-noresult": "कवनो सदस्य नाइ मिलें ।",
+       "listgrouprights": "सदस्य समूह अधिकार",
+       "listgrouprights-summary": "नीचे इ विकि खर्तीन परिभाषित सदस्य समूहन् कय सूची होय, सथवे में हर समूह से जोड़ान अधिकारो है।\nहर अधिकार कय बारे में [[{{MediaWiki:Listgrouprights-helppage}}|ढेर जानकरीओ]] उपलब्ध है।",
+       "listgrouprights-key": "* <span class=\"listgrouprights-granted\">दिहल अधिकार</span>\n* <span class=\"listgrouprights-revoked\">हटावल अधिकार</span>",
+       "listgrouprights-group": "गोल",
+       "listgrouprights-rights": "अधिकार",
+       "listgrouprights-helppage": "Help:गोल अधिकार",
+       "listgrouprights-members": "(सदस्य सूची)",
+       "listgrouprights-addgroup": "{{PLURAL:$2|समूह}} जोड़ा जाय: $1",
+       "listgrouprights-removegroup": "समूह {{PLURAL:$2|हटावा जाय}}: $1",
+       "listgrouprights-addgroup-all": "कुल समूह जोड़ा जाय",
+       "listgrouprights-removegroup-all": "कुल समूह हटावा जाय",
+       "listgrouprights-addgroup-self": "अपने खाता में {{PLURAL:$2|समूह}} जोड़ा जाय: $1",
+       "listgrouprights-removegroup-self": " अपने  खाता से {{PLURAL:$2|समूह}} हटावा जाय: $1",
+       "listgrouprights-addgroup-self-all": "अपने खाता में कुल समूह कय शामिल करा जाय",
+       "listgrouprights-removegroup-self-all": "अपने खाता से कुल समूह हटावा जाय",
+       "listgrouprights-namespaceprotection-header": "नामस्थान पाबंदी",
+       "listgrouprights-namespaceprotection-namespace": "नामस्थान",
+       "listgrouprights-namespaceprotection-restrictedto": "अइसन अधिकार जवन संपादन करय देत हैं",
+       "trackingcategories": "ट्रैक करय वाले श्रेणी",
+       "trackingcategories-msg": "ट्रैक करय वाले श्रेणी",
+       "trackingcategories-name": "सनेशा कय नाँव",
+       "watchlist": "अवलोकन सुची",
+       "undelete-nodiff": "कवनो पुरान अवतरण नाँइ मिला।",
+       "undeletebtn": "वापस लै आवा जाय",
+       "undeletelink": "देखा जाय/शुरु कय जैसन करा जाय",
+       "undeleteviewlink": "देखा जाय",
+       "undeleteinvert": "चुनाव उल्टा करा जाय",
+       "undeletecomment": "कारण:",
+       "undeletedrevisions": "{{PLURAL:$1|अवतरण पहिले जइसन कै गय}}",
+       "undeletedrevisions-files": "{{PLURAL:$1|1 अवतरण|$1 अवतरण}} औ {{PLURAL:$2|1 फ़ाइल}} पहिले जइसन कै गय",
+       "undeletedfiles": "{{PLURAL:$1|1 फ़ाइल|$1 फ़ाइल}} पहिले जइसन कै गय",
+       "cannotundelete": "पहिले जइसन नाइ कै मिला : $1",
+       "undeletedpage": "'''$1 कय पहिले जइसन कै गए'''\n\nहालिए में हटावल अव पुनर्स्थापित करल पन्नन् कय जानकारी कय खर्तीन [[Special:Log/delete|हटावे कय लॉग]] देखा जाय।",
+       "undelete-header": "हालिए में हटावल पन्ना द़ेखयक खर्तीन [[Special:Log/delete|हटावे कय लॉग]] देखा जाय।",
+       "undelete-search-title": "हटावल पन्ना खोजा जाय",
+       "undelete-search-box": "हटावल पन्ना खोजा जाय",
+       "undelete-search-prefix": "शुरूआती शब्द कय अनुसार पन्ना खोजा जाय:",
+       "undelete-search-submit": "खोजा जाय",
+       "undelete-no-results": "हटावल पन्नन कय लेखागार में मिलत जुलत कवनो पन्ना नाइ मिला।",
+       "undelete-filename-mismatch": "$1 कय फ़ाइल कय हटावल अवतरण पुनर्स्थापित नाइ कै सका जात है: फ़ाइल कय नाँव मिलत जुलत नाइ है ।",
+       "undelete-bad-store-key": "$1 कय फ़ाइल अवतरण पुनर्स्थापित नाइ कै सका जात है: हटावे से पहिले फ़ाइल मौजूद नाइ रहा।",
+       "undelete-cleanup-error": "लेखागार में से अप्रयुक्त फ़ाइल \"$1\" हटावै में त्रुटि।",
+       "undelete-error": "पन्ना पुनर्स्थापन में त्रुटि",
+       "undelete-error-short": "फ़ाइल पुनर्स्थापन में त्रुटि: $1",
+       "undelete-error-long": "फ़ाइल पुनर्स्थापन में आवल त्रुटि:\n\n$1",
+       "undelete-show-file-confirm": "का आप सहि में फ़ाइल \"<nowiki>$1</nowiki>\" कय $2 कय $3 बजे बनल, हटावल अवतरण कय देखेक चाहा जात है?",
+       "undelete-show-file-submit": "हाँ",
+       "namespace": "नामस्थान:",
+       "invert": "चुनाव उल्टा करा जाय",
+       "namespace_association": "सम्बद्ध नामस्थान",
+       "blanknamespace": "(मुख्य)",
+       "contributions": "{{GENDER:$1|सदस्य}} योगदान",
+       "contributions-title": "$1 कय योगदान",
+       "mycontris": "योगदान",
+       "contribsub2": "{{GENDER:$3|$1}} ($2) कय खर्तीन",
+       "contributions-userdoesnotexist": "सदस्य \"$1\" पंजीकृत नाइ है।",
+       "uctop": "(अबहिनै कय)",
+       "month": "इ महिन्नासे (औ पुरान):",
+       "year": "इ सालसे (औ पुरान):",
+       "sp-contributions-newbies": "खालि नँवा सदस्यन् कय योगदान देखावा जाय",
+       "sp-contributions-newbies-sub": "नँवा सदस्यन कय खर्तीन",
+       "sp-contributions-newbies-title": "नँवा सदस्यन् कय योगदान",
+       "sp-contributions-blocklog": "ब्लॉक सूची",
+       "sp-contributions-suppresslog": "हटावल सदस्य योगदान",
+       "sp-contributions-deleted": "हटावल सदस्य योगदान",
+       "sp-contributions-uploads": "अपलोड",
+       "sp-contributions-logs": "लॉग",
+       "sp-contributions-talk": "बातचीत",
+       "sp-contributions-userrights": "सदस्य अधिकार प्रबंधन",
+       "sp-contributions-blocked-notice": "ई सदस्य अभीन अवरोधित है।\nसदंर्भ कय लिए ताज़ातरीन अवरोध लॉग प्रविष्टि नीचे दीहा है:",
+       "sp-contributions-blocked-notice-anon": "ई आईपी ठहर अभीन अवरोधित है।\nसदंर्भ कय लिए ताज़ातरीन अवरोध लॉग प्रविष्टि नीचा दीहा है:",
+       "sp-contributions-search": "योगदान कय खर्तीन खोज",
+       "sp-contributions-username": "आईपी एड्रेस या सदस्यनाँव:",
+       "sp-contributions-submit": "खोजा जाय",
+       "whatlinkshere": "यँह काव काव जोडान है",
+       "whatlinkshere-title": "$1 से जोडान पन्ना",
+       "whatlinkshere-page": "पन्ना:",
+       "linkshere": "नीचे दिहा पन्ना '''[[:$1]]''' से जोडान है:",
+       "nolinkshere": "'''[[:$1]]''' से कुछ नाइ जोडान् है।",
+       "nolinkshere-ns": "चुनल नामस्थानसे '''[[:$1]]''' से कवनो पन्ना नाइ जोडान् है।",
+       "isredirect": "पुनर्निर्देशन पन्ना",
+       "istemplate": "मिलावा जाय",
+       "isimage": "फ़ाइल कय कड़ी",
+       "whatlinkshere-prev": "{{PLURAL:$1|पिछला}}",
+       "whatlinkshere-next": "{{PLURAL:$1|अगला}}",
+       "whatlinkshere-links": "← कड़ि",
+       "whatlinkshere-hideredirs": "$1 पुनर्निर्देश",
+       "whatlinkshere-hidetrans": "$1 ट्रान्स्क्ल्युजन्स",
+       "whatlinkshere-hidelinks": "$1 कड़ि",
+       "whatlinkshere-hideimages": "$1 फ़ाइल लिंक",
+       "whatlinkshere-filters": "छनना",
+       "autoblockid": "अपने आप अवरोध #$1",
+       "block": "सदस्य कय अवरोधित करा जाय।",
+       "unblock": "सदस्य कय अवरोध हटावा जाय।",
+       "blockip": "{{GENDER:$1|सदस्य}}",
+       "blockip-legend": "सदस्य कय अवरोधित करा जाय।",
+       "ipaddressorusername": "आईपी एड्रेस या सदस्यनाँव:",
+       "ipbexpiry": "समाप्ति:",
+       "ipbreason": "कारण:",
+       "ipbcreateaccount": "खाते बनावेकै रोका जाय",
+       "ipbemailban": "सदस्य कय ईमेल करै से रोका जाय",
+       "ipbsubmit": "इ सदस्य कय अउर बदलाव करय से रोका जाय",
+       "ipbother": "अउर समय:",
+       "ipboptions": "दुइ घंटा:2 hours,एक दिन:1 day,तीन दिन:3 days,एक हप्ता:1 week,दुइ हप्ता:2 weeks,एक महीना:1 month,तीन महीना:3 months,छः महीना:6 months,एक साल:1 year,हमेशा कय लिये:infinite",
+       "ipb-confirm": "अवरोधण कय पुष्टि करा जाय",
+       "badipaddress": "अमान्य आईपी ठहर।",
+       "blockipsuccesssub": "अवरोधन सफल ।(संपादन करय से रोक दिहा गा है)",
+       "ipb-edit-dropdown": "ब्लॉक कारण संपादित करा जाय",
+       "ipb-unblock-addr": "$1 कय अनब्लॉक करा जाय",
+       "ipb-unblock": "सदस्य या आईपी एड्रेस कय अनब्लॉक करा जाय",
+       "ipb-blocklist": "सद्य ब्लॉक देखा जाय",
+       "ipb-blocklist-contribs": "{{GENDER:$1|$1}} कय योगदान",
+       "unblockip": "सदस्य कय अवरोध हटावा जाय।",
+       "ipusubmit": "इ अवरोध हटावा जाय",
+       "unblocked": "[[User:$1|$1]] होइ गा हैं।",
+       "unblocked-range": "$1 अनब्लॉक होइ गा हैं।",
+       "unblocked-id": "अवरोध $1 निकारि दिहा गा है",
+       "blocklist": "अवरोधित उपयोक्ता",
+       "ipblocklist": "अवरोधित आईपी ठहर या सदस्यनाँव",
+       "ipblocklist-legend": "अवरोधित सदस्य कय खोजा जाय",
+       "blocklist-userblocks": "खाता कय अवरोध लुकुआवा जाए",
+       "blocklist-tempblocks": "अस्थाई अवरोध लुकुआवा जाए",
+       "blocklist-addressblocks": "एक्ठु आईपी अवरोध लुकुआवा जाए",
+       "blocklist-rangeblocks": "श्रेणी अवरोध लुकुआवा जाए",
+       "blocklist-timestamp": "समय मोहर",
+       "blocklist-target": "लक्ष्य",
+       "blocklist-expiry": "खतम",
+       "blocklist-by": "प्रशासक अवरुद्ध",
+       "blocklist-params": "अवरोध मापदण्ड",
+       "blocklist-reason": "कारण",
+       "ipblocklist-submit": "खोजा जाय",
+       "ipblocklist-localblock": "स्थानीय अवरोध",
+       "ipblocklist-otherblocks": "अन्य {{PLURAL:$1|ब्लॉक}}",
+       "infiniteblock": "इनफाईनाईट",
+       "expiringblock": "$1 कय $2 बजे समय खतम होत है",
+       "anononlyblock": "केवल बेनाम सदस्य",
+       "createaccountblock": "खाता बनावै कय रोक लगाए दिहा गा हैं",
+       "emailblock": "ईमेल अवरोधित",
+       "blocklist-nousertalk": "आपन बातचीत पन्ना भी संपादन नाइ कै सकत हैँ ।",
+       "ipblocklist-empty": "ब्लॉक सूची खाली है।",
+       "blocklink": "अवरोधित करा जाय",
+       "unblocklink": "अवरोध हटावा जाय",
+       "change-blocklink": "विभाग बदला जाय",
+       "contribslink": "योगदान",
+       "emaillink": "ईमेल पठवा जाय",
+       "blocklogpage": "ब्लॉक सूची",
+       "unblocklogentry": "$1 अनवरोधित",
+       "block-log-flags-anononly": "खाली बेनाम सदस्य",
+       "block-log-flags-nocreate": "खाता बनावै से रोक",
+       "block-log-flags-noautoblock": "ऑटोब्लॉक बंद हैं",
+       "block-log-flags-noemail": "ई-मेल अवरुद्ध",
+       "block-log-flags-nousertalk": "आपन बातचीत पन्ना भी संपादन नाइ कै सकत हैँ ।",
+       "block-log-flags-angry-autoblock": "उन्नत स्व-अवरोध लागू",
+       "block-log-flags-hiddenname": "सदस्य नाँव लुकुआवा है",
+       "ipb_expiry_invalid": "अवैध समाप्ति कालावधी।",
+       "ipb_already_blocked": "\"$1\" पहिलवे से ब्लॉक हैं",
+       "ipb-otherblocks-header": "अउर {{PLURAL:$1|ब्लॉक}}",
+       "ip_range_invalid": "गलत आईपी रेंज",
+       "proxyblocker": "प्रॉक्सी ब्लॉकर",
+       "lockdb": "डाटाबेस लॉक करा जाय",
+       "unlockdb": "डाटाबेस अनलॉक करा जाय",
+       "lockbtn": "डाटाबेस लॉक करा जाय",
+       "unlockbtn": "डाटाबेस अनलॉक करा जाय",
+       "movereason": "कारण:",
+       "revertmove": "पहिले जैसन करा जाय",
+       "export-submit": "निर्यात",
+       "export-addcat": "जोडव",
+       "export-addns": "जोडा जाय",
+       "allmessages": "व्यवस्था संदेश",
+       "allmessagesname": "नाँव",
+       "allmessagesdefault": "सनेशा कय डिफ़ॉल्ट पाठ",
+       "allmessagescurrent": "वर्तमान पाठ",
+       "allmessages-filter-unmodified": "अपरिवर्तित",
+       "allmessages-filter-all": "कुल",
+       "allmessages-filter-modified": "परिवर्तित",
+       "allmessages-language": "भाषा:",
+       "allmessages-filter-submit": "जावा जाय",
+       "import-interwiki-sourcepage": "स्रोत पन्ना:",
+       "import-interwiki-submit": "आयात",
+       "import-interwiki-namespace": "गंतव्य नामस्थान:",
+       "import-interwiki-rootpage": "गंतव्य पृष्ठ उपसर्ग (वैकल्पिक):",
+       "import-upload-filename": "फ़ाइल कय नाँव",
+       "import-comment": "टिप्पणी:",
+       "import-revision-count": "$1 {{PLURAL:$1|अवतरण}}",
+       "importunknownsource": "अज्ञात आयात स्रोत प्रकार",
+       "importcantopen": "आयात फ़ाइल खोल नाई खुला।",
+       "importbadinterwiki": "अवैध अन्तरविकि कड़ी",
+       "importlogpage": "आयात सूची",
+       "javascripttest": "जावास्क्रिप्ट परीक्षण",
+       "javascripttest-pagetext-unknownframework": "अज्ञात परीक्षण ढाँचा \"$1\"",
+       "tooltip-pt-userpage": "आप कय सदस्य पन्ना",
+       "tooltip-pt-mytalk": "आप कय बातचित पन्ना",
+       "tooltip-pt-preferences": "आप कय पसंद",
+       "tooltip-pt-logout": "बहरे निकरा जाय",
+       "tooltip-ca-protect": "इ पन्ना कय सुरक्षित करा जाय",
+       "tooltip-ca-unprotect": "ई पन्ना कय सुरक्षा स्तर बदला जाय",
+       "tooltip-ca-delete": "ई पन्ना मेटावा जाय",
+       "tooltip-ca-move": "ई पन्ना कय नाँव बदला जाय",
+       "tooltip-search": "{{SITENAME}} में खोजा जाय",
+       "tooltip-p-logo": "प्रधान पन्ना",
+       "tooltip-n-mainpage": "प्रधान पन्ना पे जावा जाय",
+       "tooltip-n-mainpage-description": "प्रधान पन्ना पे जावा जाय",
+       "tooltip-t-emailuser": "इ सदस्य कय इमेल पठवा जाय",
+       "tooltip-t-upload": "फ़ाइल अपलोड करा जाय",
+       "tooltip-t-specialpages": "कुल विशेष पन्नन कय सूची",
+       "tooltip-ca-nstab-main": "सामग्री वाला पन्ना देखा जाय",
+       "tooltip-ca-nstab-user": "सदस्य पन्ना देखा जाय",
+       "tooltip-ca-nstab-media": "मीडिया पन्ना देखा जाय",
+       "tooltip-ca-nstab-project": "प्रोजेक्ट पन्ना देखा जाय",
+       "tooltip-ca-nstab-image": "फ़ाइल कय पन्ना देखा जाय",
+       "tooltip-ca-nstab-mediawiki": "प्रणाली सन्देश देखा जाय",
+       "tooltip-ca-nstab-template": "टेम्प्लेट देखा जाय",
+       "tooltip-ca-nstab-help": "सहायता पन्ना पे जावा जाय",
+       "tooltip-ca-nstab-category": "श्रेणी पन्ना  देखा जाय",
+       "tooltip-watchlistedit-normal-submit": "पन्ना हटावा जाय",
+       "tooltip-watchlistedit-raw-submit": "ध्यानसूची अपडेट करा जाय",
+       "tooltip-upload": "अपलोड शुरू करा जाय",
+       "tooltip-preferences-save": "पसंद सहेजा जाय",
+       "anonymous": "{{SITENAME}} कय {{PLURAL:$1||}} बेनामी सदस्य",
+       "siteuser": "विकिपीडिया सदस्य  $1",
+       "anonuser": "{{SITENAME}} अज्ञात उपयोगकर्ता $1"
 }
index b55d7bc..d9f72e5 100644 (file)
                ]
        },
        "tog-underline": "Keçidlərin altını xətlə:",
-       "tog-hideminor": "Son dəyişikliklər kiçik redaktələri gizlə",
-       "tog-hidepatrolled": "Yoxlanılmış redaktələri son dəyişikliklərdə göstərmə",
-       "tog-newpageshidepatrolled": "Yoxlanılmış səhifələri yeni səhifə siyahısında göstərmə",
-       "tog-extendwatchlist": "Təkmil izləmə siyahısı",
-       "tog-usenewrc": "Son dəyişikliklərin təkmil versiyası (JavaScript)",
-       "tog-numberheadings": "Başlıqların avto-nömrələnməsi",
-       "tog-showtoolbar": "Redaktə zamanı alətlər qutusunu göstər (JavaScript)",
-       "tog-editondblclick": "Səhifələri iki kliklə redaktə etməyə başla (JavaScript)",
-       "tog-editsectiononrightclick": "Bölmələrin redaktəsini başlıqların üzərində sağ klik etməklə mümkün et (JavaScript)",
-       "tog-watchcreations": "Yaratdığım səhifələri izlədiyim səhifələrə əlavə et",
-       "tog-watchdefault": "Redaktə etdiyim səhifələri izlədiyim səhifələrə əlavə et",
-       "tog-watchmoves": "Adlarını dəyişdiyim səhifələri izlədiyim səhifələrə əlavə et",
-       "tog-watchdeletion": "Sildiyim səhifələri izlədiyim səhifələrə əlavə et",
-       "tog-minordefault": "Default olaraq bütün redaktələri kiçik redaktə kimi nişanla",
+       "tog-hideminor": "Son dəyişikliklər siyahısında kiçik redaktələri gizlə",
+       "tog-hidepatrolled": "Son dəyişikliklər siyahısında yoxlanılmış redaktələri gizlə",
+       "tog-newpageshidepatrolled": "Yeni səhifələr siyahısında yoxlanılmış səhifələri gizlə",
+       "tog-extendwatchlist": "Yalnız son dəyişiklikləri yox, bütün dəyişiklikləri göstərmək üçün izləmə siyahısını genişlət",
+       "tog-usenewrc": "Son dəyişikliklərdəki və izləmə siyahısındakı dəyişiklikləri qruplaşdır",
+       "tog-numberheadings": "Başlıqları avtomatik nömrələ",
+       "tog-showtoolbar": "Redaktə zamanı üstdəki alətlər qutusunu göstər",
+       "tog-editondblclick": "Səhifələri iki kliklə redaktə et",
+       "tog-editsectiononrightclick": "Bölmə başlığı üzərində siçanın sağ düyməsini klikləməklə bölmələri redaktə et",
+       "tog-watchcreations": "Yaratdığım səhifələri və yüklədiyim faylları izlədiyim səhifələrə əlavə et",
+       "tog-watchdefault": "Redaktə etdiyim səhifələri və faylları izlədiyim səhifələrə əlavə et",
+       "tog-watchmoves": "Adlarını dəyişdiyim səhifələri və faylları izlədiyim səhifələrə əlavə et",
+       "tog-watchdeletion": "Sildiyim səhifələri və faylları izlədiyim səhifələrə əlavə et",
+       "tog-minordefault": "Standart olaraq bütün redaktələri kiçik redaktə kimi nişanla",
        "tog-previewontop": "Sınaq göstərişi yazma sahəsindən əvvəl göstər",
        "tog-previewonfirst": "İlkin redaktədə sınaq göstərişi",
        "tog-enotifwatchlistpages": "İzləmə siyahısında olan məqalə redaktə olunsa, mənə e-məktub göndər",
        "userlogout": "Çıxış",
        "notloggedin": "Daxil olmamısınız",
        "userlogin-noaccount": "İstifadəçi hesabınız yoxdur?",
-       "userlogin-joinproject": "{{SITENAME}} qoşulun",
+       "userlogin-joinproject": "{{SITENAME}} layihəsinə qoşulun",
        "nologin": "İstifadəçi hesabınız yoxdur? $1.",
        "nologinlink": "Hesab yarat",
        "createaccount": "Hesab yarat",
        "gotaccount": "İstifadəçi hesabınız varmı? '''$1'''.",
        "gotaccountlink": "Daxil olun",
        "userlogin-resetlink": "Daxilolma məlumatlarınızı unutmusunuz?",
-       "userlogin-resetpassword-link": "Parolu unutdunuzmu?",
+       "userlogin-resetpassword-link": "Parolunuzu unutmusunuz?",
+       "userlogin-helplink2": "Qeydiyyat barədə köməklik",
        "userlogin-loggedin": "Siz artıq {{GENDER:$1|$1}} kimi daxil olmusunuz.\nAşağıdakı formadan istifadə edərək, başqa bir istifadəçi kimi daxil ola bilərsiniz.",
        "userlogin-createanother": "Başqa bir istifadəçi hesabı yarat",
        "createacct-emailrequired": "E-poçt ünvanı",
        "passwordreset-emailelement": "İstifadəçi adı: $1\nMüvəqqəti parol: $2",
        "passwordreset-emailsent": "Xəbərdarlıq məktubu e-maillə göndərildi.",
        "changeemail": "E-məktub ünvanını dəyiş",
-       "changeemail-oldemail": "Hazırki e-poçt ünvanı:",
+       "changeemail-oldemail": "Hazırkı e-poçt ünvanı:",
        "changeemail-newemail": "Yeni e-poçt ünvanı:",
        "changeemail-none": "(yoxdur)",
        "changeemail-submit": "E-poçtu dəyiş",
        "right-createaccount": "Yeni istifadəçi hesabları açmaq",
        "right-minoredit": "Redaktələri kiçik redaktə kimi nişanlamaq",
        "right-move": "Səhifənin adını dəyişdir",
-       "right-move-subpages": "Səhifənin adının onların alt səhifələrin adı ilə dəyişdirilməsi",
+       "right-move-subpages": "Səhifələrin adını onların alt səhifələrinin adları ilə birlikdə dəyişdir",
        "right-move-rootuserpages": "əsas istifadəçi səhifələrinin adını dəyişmək",
        "right-movefile": "Faylın adını dəyişdir",
        "right-suppressredirect": "Səhifənin adını dəyişən zaman kohnə addan istiqamətlənmə yaradıla bilinmir",
        "action-edit": "bu səhifəni redaktə etmək",
        "action-createpage": "səhifələrin yaradılması",
        "action-createtalk": "müzakirə səhifələrinin yaradılması",
-       "action-createaccount": "bu istifadəçi hesabının yaradılması",
+       "action-createaccount": "bu istifadəçi hesabını yaratmaq",
        "action-minoredit": "bunu kiçik redaktə kimi nişanla",
        "action-move": "bu səhifənin adını dəyişmək",
        "action-move-subpages": "bu səhifənin və onun altsəhifələrinin adını dəyişmək",
        "booksources-text": "Aşağıda yeni və işlənmiş kitablar satan xarici keçidlərdə siz axtardığınız kitab haqqında əlavə məlumat ala bilərsiz:",
        "specialloguserlabel": "İcraçı:",
        "speciallogtitlelabel": "Məqsəd (başlıq və ya istifadəçi):",
-       "log": "Loglar",
+       "log": "Qeydlər",
        "all-logs-page": "Bütün ictimai qeydlər",
        "alllogstext": "{{SITENAME}} üçün bütün mövcud qeydlərin birgə göstərişi.\nQeyd növü, istifadəçi adı və ya təsir edilmiş səhifəni seçməklə daha spesifik ola bilərsiniz.",
        "logempty": "Jurnalda uyğun qeyd tapılmadı.",
        "linksearch-line": "$2-dən $1 keçid verilib",
        "listusers-submit": "Göstər",
        "listusers-noresult": "İstifadəçi tapılmadı.",
-       "listusers-blocked": "(bloklan)",
+       "listusers-blocked": "(bloklanıb)",
        "activeusers": "Aktiv istifadəçilərin siyahısı",
        "activeusers-count": "Son {{PLURAL:$3|gündə|$3 gündə}} $1 {{PLURAL:$1|redaktə|redaktə}}",
        "activeusers-hidebots": "Botları gizlə",
        "sp-contributions-newbies": "Ancaq yeni istifadəçilərin fəaliyyətlərini göstər",
        "sp-contributions-newbies-sub": "Yeni istifadəçilər üçün",
        "sp-contributions-newbies-title": "Yeni hesablar üçün istifadəçi fəaliyyətləri",
-       "sp-contributions-blocklog": "Bloklama qeydləri",
+       "sp-contributions-blocklog": "bloklama qeydləri",
        "sp-contributions-deleted": "silinmiş istifadəçi fəaliyyətləri",
        "sp-contributions-uploads": "yüklənənlər",
-       "sp-contributions-logs": "Loqlar",
-       "sp-contributions-talk": "Müzakirə",
+       "sp-contributions-logs": "qeydlər",
+       "sp-contributions-talk": "müzakirə",
        "sp-contributions-userrights": "istifadəçi hüquqları idarəsi",
        "sp-contributions-blocked-notice": "Bu istifadəçi hal-hazırda bloklanmışdır.\nBloklama qeydlərinin sonuncusu aşağıda göstərilmişdir:",
        "sp-contributions-blocked-notice-anon": "Bu IP-ünvan hal-hazırda bloklanmışdır.\nBloklama qeydlərinin sonuncusu aşağıda göstərilmişdir:",
        "ipb-change-block": "Bu səbəblərlə istifadəçini yenidən blokla",
        "ipb-confirm": "Bloku təsdiqlə",
        "badipaddress": "Səhv IP",
-       "blockipsuccesssub": "bloklandı",
+       "blockipsuccesssub": "Bloklandı",
        "blockipsuccesstext": "[[Special:Contributions/$1|$1]] bloklanıb.<br />\nBlokları yoxlamaq üçün [[Special:BlockList|bloklama siyahısına]] baxın.",
        "ipb-blockingself": "Özünü bloklayacaqsınız.! Bunu etmək istədiyinizdən əminsinizmi?",
        "ipb-confirmhideuser": "İstifadəçini bloklamaq və redaktə siyahısından onun adını silmək üzərəsiniz. Bunu etmək istədiyinizdən əminsinizmi?",
        "articleexists": "Bu adda səhifə artıq mövcuddur və ya sizin seçdiyiniz ad uyğun deyil.\nZəhmət olmasa başqa ad seçin.",
        "movetalk": "Bu səhifənin müzakirə səhifəsinin də adını dəyişdir.",
        "move-subpages": "Yarımsəhifələri köçür ($1-ə qədər)",
-       "move-talk-subpages": "Müzakirə səhifələrinin alt səhifələrini köçür ($1-ə qədər)",
+       "move-talk-subpages": "Müzakirə səhifəsinin alt səhifələrinin adını dəyiş ($1-ə qədər)",
        "movepage-page-moved": "$1 səhifəsi $2 səhifəsinə köçürülüb.",
        "movepage-page-unmoved": "$1 səhifəsi $2 səhifəsinə köçürülə bilinmir.",
        "movelogpage": "Yerdəyişmə qeydləri",
-       "movesubpage": "{{PLURAL:$1|alt səhifə}}",
+       "movesubpage": "{{PLURAL:$1|Alt səhifə|Alt səhifələr}}",
+       "movesubpagetext": "Bu səhifənin aşağıda göstərilən $1 {{PLURAL:$1|alt səhifəsi|alt səhifəsi}} var.",
        "movenosubpage": "Bu səhifənin altsəhifəsi yoxdur.",
        "movereason": "Səbəb:",
        "revertmove": "Əvvəlki vəziyyətinə",
        "watchlistedit-raw-done": "İzləmə səhifələriniz qeyd olundu.",
        "watchlistedit-raw-added": "{{PLURAL:$1|1 title was|$1 başlıq}} əlavə edildi:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|1 title was|$1 başlıq}} çıxarıldı:",
+       "watchlisttools-clear": "İzləmə siyahısını təmizlə",
        "watchlisttools-view": "Siyahıdakı səhifələrdə edilən dəyişikliklər",
        "watchlisttools-edit": "İzlədiyim səhifələri göstər və redaktə et",
        "watchlisttools-raw": "Adi mətn kimi redaktə et",
index 3d09b99..8a5852f 100644 (file)
        "ns-specialprotected": "Немагчыма рэдагаваць спэцыяльныя старонкі.",
        "titleprotected": "Стварэньне старонкі з такой назвай было забароненае {{GENDER:$1|ўдзельнікам|ўдзельніцай}} [[User:$1|$1]].\nПрычына забароны: «<em>$2</em>».",
        "filereadonlyerror": "Немагчыма зьмяніць файл «$1», бо файлавае сховішча «$2» знаходзіцца ў рэжыме толькі для чытаньня.\n\nАдміністратар, які абмежаваў доступ, пазначыў прычыну: «$3».",
-       "invalidtitle-knownnamespace": "Няслушная назва ў прасторы «$2»: «$3»",
-       "invalidtitle-unknownnamespace": "Няслушная назва ў невядомай прасторы $1: «$2»",
+       "invalidtitle-knownnamespace": "Няслушны загаловак з прасторай назваў «$2» і тэкстам «$3»",
+       "invalidtitle-unknownnamespace": "Няслушны загаловак зь невядомым нумарам прасторы назваў $1 і тэкстам «$2»",
        "exception-nologin": "Вы не ўвайшлі ў сыстэму",
        "exception-nologin-text": "Неабходна ўвайсьці, каб атрымаць доступ да гэтай старонкі або дзеяньня.",
        "exception-nologin-text-manual": "Неабходна $1, каб мець доступ да гэтай старонкі або дзеяньня.",
-       "virus-badscanner": "Няслушная канфігурацыя: невядомы антывірусны сканэр: ''$1''",
+       "virus-badscanner": "Няслушная канфігурацыя: невядомы антывірусны сканэр: <em>$1</em>",
        "virus-scanfailed": "памылка сканаваньня (код $1)",
        "virus-unknownscanner": "невядомы антывірус:",
-       "logouttext": "'''Вы выйшлі з сыстэмы.'''\n\nНекаторыя старонкі могуць яшчэ паказваць, нібы вы ў сыстэме. Каб гэтага пазьбегнуць, трэба ачысьціць кэш браўзэра.",
+       "logouttext": "<strong>Вы выйшлі з сыстэмы.</strong>\n\nНекаторыя старонкі могуць яшчэ паказваць, нібы вы ў сыстэме. Каб гэтага пазьбегнуць, трэба ачысьціць кэш браўзэра.",
        "welcomeuser": "Вітаем, $1!",
-       "welcomecreation-msg": "Ð\92аÑ\88 Ñ\80аÑ\85Ñ\83нак Ð±Ñ\8bÑ\9e Ñ\81Ñ\82воÑ\80анÑ\8b.\nÐ\9dе Ð·Ð°Ð±Ñ\83дзÑ\8cÑ\86еÑ\81Ñ\8f Ð·Ñ\8cмÑ\8fнÑ\96Ñ\86Ñ\8c Ð\92аÑ\88Ñ\8bÑ\8f [[Special:Preferences|наладÑ\8b Ñ\9e {{GRAMMAR:меÑ\81нÑ\8b|{{SITENAME}}}}]].",
+       "welcomecreation-msg": "Ð\92аÑ\88 Ñ\80аÑ\85Ñ\83нак Ð±Ñ\8bÑ\9e Ñ\81Ñ\82воÑ\80анÑ\8b.\nÐ\92Ñ\8b Ð¼Ð¾Ð¶Ð°Ñ\86е Ð·Ñ\8cмÑ\8fнÑ\96Ñ\86Ñ\8c Ð\92аÑ\88Ñ\8bÑ\8f [[Special:Preferences|наладÑ\8b Ñ\9e {{GRAMMAR:меÑ\81нÑ\8b|{{SITENAME}}}}]], ÐºÐ°Ð»Ñ\96 Ð¿Ð°Ð¶Ð°Ð´Ð°ÐµÑ\86е.",
        "yourname": "Імя ўдзельніка:",
        "userlogin-yourname": "Імя ўдзельніка",
        "userlogin-yourname-ph": "Увядзіце вашае імя ўдзельніка",
        "uploaderror": "Памылка загрузкі",
        "upload-recreate-warning": "'''Увага: файл з такой назвай быў выдалены альбо перанесены.'''\n\nЖурнал выдаленьняў і пераносаў гэтай старонкі для зручнасьці пададзены тут:",
        "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|Подпіс да выявы]]</nowiki></code>''' для выявы шырынёй 200 піксэляў у рамцы і тэкстам «Подпіс да выявы» ў якасьці подпісу\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' для простай спасылкі на файл безь яго адлюстраваньня.",
-       "upload-permitted": "Дазволеныя тыпы файлаў: $1.",
-       "upload-preferred": "Пажаданыя тыпы файлаў: $1.",
-       "upload-prohibited": "Забароненыя тыпы файлаў: $1.",
+       "upload-permitted": "{{PLURAL:$2|Дазволены тып|Дазволеныя тыпы}} файлаў: $1.",
+       "upload-preferred": "{{PLURAL:$2|Пажаданы тып|Пажаданыя тыпы}} файлаў: $1.",
+       "upload-prohibited": "{{PLURAL:$2|Забаронены тып|Забароненыя тыпы}} файлаў: $1.",
        "uploadlogpage": "Журнал загрузак",
        "uploadlogpagetext": "Сьпіс апошніх загружаных файлаў.",
        "filename": "Назва файла",
index 76e24a9..e47b9ab 100644 (file)
        "filereadonlyerror": "Файлът „$1“ не може да бъде променен, тъй като файловото хранилище „$2“ е в режим само за четене.\n\nАдминистраторът, който го е заключил, е посочил следната причина: „$3“.",
        "invalidtitle-knownnamespace": "Невалидно заглавие с именно пространство $2\" и текст \"$3\"",
        "invalidtitle-unknownnamespace": "Невалидно заглавие с неразпознато именно пространство номер $1 и текст „$2“",
-       "exception-nologin": "Не сте влезли",
+       "exception-nologin": "Не сте влезли в системата",
        "exception-nologin-text": "За достъп до избраното действие или страница е необходимо влизане в системата.",
        "exception-nologin-text-manual": "За достъп до избраното действие или страница е необходимо $1 в системата.",
        "virus-badscanner": "Лоша конфигурация: непознат скенер за вируси: ''$1''",
        "userloginnocreate": "Влизане",
        "logout": "Излизане",
        "userlogout": "Излизане",
-       "notloggedin": "Не сте влезли",
+       "notloggedin": "Не сте влезли в системата",
        "userlogin-noaccount": "Нямате сметка?",
        "userlogin-joinproject": "Присъединяване към {{SITENAME}}",
        "nologin": "Нямате потребителско име? $1.",
        "nosuchuser": "Не съществува потребител с име „$1“.\nПотребителските имена са чувствителни на малки и главни букви.\nПроверете изписването или [[Special:UserLogin/signup|създайте нова сметка]].",
        "nosuchusershort": "Не съществува потребител с името „$1“. Проверете изписването.",
        "nouserspecified": "Необходимо е да се посочи потребителско име.",
-       "login-userblocked": "Този Ð¿Ð¾Ñ\82Ñ\80ебиÑ\82ел Ðµ Ð±Ð»Ð¾ÐºÐ¸Ñ\80ан. Ð\9dе Ñ\81е Ð¿Ð¾Ð·Ð²Ð¾Ð»Ñ\8fва Ð²Ð»Ð¸Ð·Ð°Ð½Ðµ.",
+       "login-userblocked": "Този Ð¿Ð¾Ñ\82Ñ\80ебиÑ\82ел Ðµ Ð±Ð»Ð¾ÐºÐ¸Ñ\80ан. Ð\92лизанеÑ\82о Ð² Ñ\81иÑ\81Ñ\82емаÑ\82а Ð½Ðµ Ðµ Ð¿Ð¾Ð·Ð²Ð¾Ð»ÐµÐ½Ð¾.",
        "wrongpassword": "Въведената парола е невалидна. Опитайте отново.",
        "wrongpasswordempty": "Въведената парола е празна. Опитайте отново.",
        "passwordtooshort": "Необходимо е паролата да съдържа поне {{PLURAL:$1|1 знак|$1 знака}}.",
        "recentchanges": "Последни промени",
        "recentchanges-legend": "Настройки на списъка с последни промени",
        "recentchanges-summary": "Проследяване на последните промени в {{SITENAME}}.\n\nЛегенда: '''тек''' = разлика на текущата версия,\n'''ист''' = история на версиите",
-       "recentchanges-noresult": "Ð\9dе Ð±Ñ\8fÑ\85а Ð½Ð°Ð¼ÐµÑ\80ени Ð¿Ñ\80омени Ð·Ð° Ð´Ð°Ð´ÐµÐ½Ð¸Ñ\8f Ð¿ÐµÑ\80иод, ÐºÐ¾Ð¸Ñ\82о отговарят на критериите.",
+       "recentchanges-noresult": "Ð\97а Ð´Ð°Ð´ÐµÐ½Ð¸Ñ\8f Ð¿ÐµÑ\80иод Ð½Ðµ Ð±Ñ\8fÑ\85а Ð½Ð°Ð¼ÐµÑ\80ени Ð¿Ñ\80омени, ÐºÐ¾Ð¸Ñ\82о Ð´Ð° отговарят на критериите.",
        "recentchanges-feed-description": "Проследяване на последните промени в {{SITENAME}}.",
        "recentchanges-label-newpage": "Нова страница",
        "recentchanges-label-minor": "Това е малка промяна",
-       "recentchanges-label-bot": "Тази редакция е извършена от робот",
+       "recentchanges-label-bot": "Тази редакция е извършена от бот",
        "recentchanges-label-unpatrolled": "Тази редакция все още не е проверена",
        "recentchanges-label-plusminus": "Размерът на страницата е променен с този брой байтове",
        "recentchanges-legend-heading": "'''Легенда:'''",
        "mostrevisions": "Страници с най-много версии",
        "prefixindex": "Всички страници с представка",
        "prefixindex-namespace": "Всички страници с представка (именно пространство $1)",
+       "prefixindex-strip": "Скриване на представката в списъка с резултати",
        "shortpages": "Кратки страници",
        "longpages": "Дълги страници",
        "deadendpages": "Задънени страници",
diff --git a/languages/i18n/bgn.json b/languages/i18n/bgn.json
new file mode 100644 (file)
index 0000000..394db69
--- /dev/null
@@ -0,0 +1,697 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Baloch Afghanistan"
+               ]
+       },
+       "tog-underline": "لینکانی جهلگا خط کشیتین",
+       "tog-hideminor": "کمین تغیرات شه آخیرین تغیراتانی لڑلیستا چیهر داته بئینت",
+       "tog-hidepatrolled": "گشت وارته گین ایڈ\tیٹان شه آخیرین ایڈ\tیٹانی لڑلیستا چیهر داته بئینت",
+       "tog-showtoolbar": "نشان داتین ایڈیٹی نوارئ",
+       "tog-editondblclick": "تاکدیمانی ایڈیٹ کورتین گو دو کلیک ئا",
+       "tog-editsectiononrightclick": "پئال کورتین بخشانی ایڈیٹی گو راست کلیکا بی ئنوانی سرا",
+       "tog-watchcreations": "تاکدیمان که من جوڑ ئه کنین یا فایلان که بُرز ( ڈ\tانلوڈ\t) ئه کنین بی نئ واچلیست ئا اضافه بیئنت",
+       "tog-watchdefault": "تاکدیمان و فایلان که من ایڈ\tیٹ ئه کنین بی نئ واچلیست ئا اضافه بیئنت",
+       "tog-watchmoves": "تاکدیمان و فایلان که من جابجا ئه کنین بی نئ واچلیست ئا اضافه بیئنت",
+       "tog-watchdeletion": "تاکدیمان و فایلان که من ڈ\tیلیٹ ئه کنین بی نئ واچلیست ئا اضافه بیئنت",
+       "tog-watchrollback": "تاکدیمان  که من بیر گردینته ئون بی نئ واچلیست ئا اضافه بیئنت",
+       "tog-minordefault": "مارک یا ئلامت جتین موچین ایڈ\tیٹانی بی جزئی رقما",
+       "tog-previewontop": "پیش نمایش دیم شه ایڈ\tیٹ باکس ئه نشان داته بیئت",
+       "tog-previewonfirst": "پیش نمایش اولین ایڈ\tیٹئ وختا  نشان داته بیئت",
+       "tog-enotifwatchlistpages": "اگه شه نئ واچلیستا گوجام تاکدیم یا فایل ایڈ\tیٹ ئه بیئت په من ایمیل دیم داته بیئت",
+       "tog-enotifusertalkpages": "اگه شه نئ کار زوروکین تاکدیم ( یوزیر تاک) ایڈ\tیٹ ئه بیئت په من ایمیل دیم داته بیئت",
+       "tog-enotifminoredits": "په گوُنڈین ایڈ\tیٹان  تاکدیمانی یا فایلان خاتیرا په من ایمیل دیم داته بیئت",
+       "tog-enotifrevealaddr": "نی ایمیل ادرس بی ایمیلئ ناٹیپیشن ئانی تا نشان داته بیئت",
+       "tog-shownumberswatching": "دیستوکین کارزورکانی اندازه نشان داته بیئت",
+       "tog-oldsig": "انونین امضاء:",
+       "tog-fancysig": "امضا باید بی  ویکی‌متنئ رکما بی نظر گیپته بیئت (بدون شه اتوماتیکین لینکی درج کورتینا)",
+       "tog-uselivepreview": "استفاده شه زنده ئین پیش نمایش ئا",
+       "underline-always": "موچین وختا",
+       "underline-never": "هیچ وخت",
+       "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": "ڈ\tسمبر",
+       "january-gen": "جنوری",
+       "february-gen": "فیبروری",
+       "march-gen": "مارچ",
+       "april-gen": "اپریل",
+       "may-gen": "می",
+       "june-gen": "جون",
+       "july-gen": "جولای",
+       "august-gen": "اگوست",
+       "september-gen": "سیپٹمبر",
+       "october-gen": "اکتوبر",
+       "november-gen": "نوامبر",
+       "december-gen": "ڈ\tسمبر",
+       "jan": "جنوری",
+       "feb": "فیبروری",
+       "mar": "مارچ",
+       "apr": "اپریل",
+       "may": "می",
+       "jun": "جون",
+       "jul": "جولای",
+       "aug": "اگوست",
+       "sep": "سیپٹمبر",
+       "oct": "اکتوبر",
+       "nov": "نوامبر",
+       "dec": "ڈ\tسمبر",
+       "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 سیپٹ\tمبر",
+       "october-date": "$1 اکتوبر",
+       "november-date": "$1 نوامبر",
+       "december-date": "$1 ڈ\tسمبر",
+       "pagecategories": "{{PLURAL:$1|تهر|تهرئان}}",
+       "category_header": "تهرِ تاکدیمان «$1»",
+       "subcategories": "گونڈ\t تهرئان",
+       "category-media-header": "میڈ\tیا بی تهری تا «$1»",
+       "category-empty": "<em>ای تهر بی انون وختا هیچ تاکدیمئ یا میڈ\tیاین دیمی نه اینت.</em>",
+       "hidden-categories": "{{PLURAL:$1|چیهرین تهر|چیهرین تهرئان}}",
+       "hidden-category-category": "چیهرین تهرئان",
+       "category-subcat-count": "{{PLURAL:$2|ای تهر تانا جئلگین مطالبانا داریت.|{{PLURAL:$1|ای گوُنڈ\t تهر|ای $1 گوُنڈ\t تهر}} بی ای تهر ئی تا {{PLURAL:$1|داریت|دارنت}}؛ بی ای تهر تا مجموئان  $2 گوُنڈ\t تهر انت.}}",
+       "category-subcat-count-limited": "ای تهر شامل شه جهلگین{{PLURAL:$1|یک|$1}} گونڈ\tتهر ئه انت .",
+       "listingcontinuesabbrev": "(ادامه)",
+       "index-category": "آ تاکدیمان که دیسته بوته گنت",
+       "noindex-category": "آ تاکدیمان که دیسته نه بوته گنت",
+       "broken-file-category": "تاکدیمان گو خرابین لینکان بی فایلا",
+       "about": "بی باره ها",
+       "article": "محتوائین تاکدیم",
+       "newwindow": "(نوکین دَروازگی تا پاچ بیئت)",
+       "cancel": "کنسیل",
+       "moredotdotdot": "گیشتیر...",
+       "morenotlisted": "ای لڑ\t لیست کامل نه اینت.",
+       "mypage": "تاکدیم",
+       "mytalk": "گپ",
+       "anontalk": "ای آی پی نشانی ئی باره ئا گپ",
+       "navigation": "ناوبری",
+       "and": "&#32;و",
+       "qbfind": "ودی کورتین",
+       "qbbrowse": "مرور",
+       "qbedit": "ایڈیٹ",
+       "qbpageoptions": "ای تاکدیم",
+       "qbmyoptions": "نئ تاکدیمان",
+       "faq": "متداولین سوالان",
+       "faqpage": "Project:متداولین سوالان",
+       "actions": "عملکردهان",
+       "namespaces": "نامانی فضاهان",
+       "variants": "لهجه ئان",
+       "navigation-heading": "ناوبری مینو",
+       "errorpagetitle": "خطا",
+       "returnto": "بیئرگشت بئ $1.",
+       "tagline": "شه {{SITENAME}}",
+       "help": "کومک",
+       "search": "گشتین",
+       "searchbutton": "گشتین",
+       "go": "برا",
+       "searcharticle": "برا",
+       "history": "تاکدیمی تاریخچه",
+       "history_short": "تاریخچه",
+       "updatedmarker": "نئ آخرین آپڈیٹا نشان داتین",
+       "printableversion": "چاپ وڑی ویرژن",
+       "permalink": "ثابتین لبنک",
+       "print": "چاپ",
+       "view": "نمایش",
+       "view-foreign": "دیستین بی $1",
+       "edit": "ایڈیٹ",
+       "edit-local": "محل و جای توضیئانی ایڈ\tیٹ کورتین",
+       "create": "جوڑ\t کورتین",
+       "create-local": "محل و جای توضیئانی اضافه کورتین",
+       "editthispage": "ایڈ\tیٹ کورتین ای تاکدیمئ",
+       "create-this-page": "جوڑ کورتین ای تاکدیمئ",
+       "delete": "پاک کورتین",
+       "deletethispage": "پاک کورتین ای تاکدیمئ",
+       "undeletethispage": "بی جاه آورتین ای تاکدیمئ",
+       "undelete_short": "بی جاه آورتین {{PLURAL:$1|یک ایڈیٹ|$1 ایڈیٹ}}",
+       "viewdeleted_short": "نشان داتین {{PLURAL:$1|یکین ڈ\tیلیٹ بوتگین ایڈ\tیٹئ |$1 ڈ\tیلیٹ بوتگین ایڈ\tیٹئ}}",
+       "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": "گشتین",
+       "pool-timeout": "تمام بوتین انتظارمهلتئ په قُلپ کورتینئ خاتیرا",
+       "pool-queuefull": "مخزن ئی صف پر اینت",
+       "pool-errorunknown": "ناشناخته ئین خطا",
+       "pool-servererror": "پول سنتر سرویس بی دسترس ئا نه اینت ( $1 ).",
+       "poolcounter-usage-error": "خطا استفاده شه: $1",
+       "aboutsite": "بی بارها {{SITENAME}}",
+       "aboutpage": "Project:بی بارها",
+       "edithelp": "کومک په ایدیت ئی خاتیرا",
+       "mainpage": "بُنیادی تاکدیم",
+       "mainpage-description": "بُنیادی تاکدیم",
+       "policy-url": "Project:سیاست‌ئان",
+       "portal": "کار زوروکانئ داخل بوتین",
+       "portal-url": "Project:کار زوروکانئ داخل بوتین",
+       "privacy": "سیاست محرمانگی",
+       "privacypage": "Project:سیاست محرمانگی",
+       "badaccess": "دسترسی ئی خطا",
+       "ok": "قبول داشتین",
+       "retrievedfrom": "گیپته بوته شه  «$1»",
+       "youhavenewmessages": "$1 داریت ($2).",
+       "youhavenewmessagesfromusers": "شما شه {{PLURAL:$3|یک دیگه کار زوروکئ|$3  کار زوروک}} $1 داریت ($2).",
+       "youhavenewmessagesmanyusers": "شما شه تعدادی کار زوروک $1 داریت ($2).",
+       "newmessageslinkplural": "{{PLURAL:$1|نوکین پیام|999=نوکین پیامان}}",
+       "newmessagesdifflinkplural": "{{formatnum:$1}} {{PLURAL:$1|ٹگل|999=ٹگل}} اخیر",
+       "youhavenewmessagesmulti": "نوکین پیام بی  $1 تاداریت.",
+       "editsection": "ایڈیٹ",
+       "editold": "ایڈیٹ",
+       "viewsourceold": "نشان داتین مبدائی",
+       "editlink": "ایڈیٹ",
+       "viewsourcelink": "نشان داتین مبدائی",
+       "editsectionhint": "ایدیت کورتین : $1 بخشی",
+       "toc": "محتویات",
+       "showtoc": "نشان داتین",
+       "hidetoc": "چیهر داتین",
+       "collapsible-collapse": "بستین",
+       "collapsible-expand": "پراخ کورتین",
+       "confirmable-confirm": "{{GENDER:$1|شما}} مطمئن هستیت؟",
+       "confirmable-yes": "هان",
+       "confirmable-no": "نه",
+       "thisisdeleted": "نشان داتین یا جوڑ\t کورتین $1 ئی؟",
+       "viewdeleted": "نشان داتین $1؟",
+       "restorelink": "{{PLURAL:$1|یک|$1}} ڈ\tیلیٹ بوتگینئ ایڈ\tیٹ",
+       "feedlinks": "حبر وان:",
+       "nstab-main": "تاکدیم",
+       "nstab-user": "کار زوروکی تاکدیم",
+       "nstab-media": "میڈ\tیای تاکدیم",
+       "nstab-special": "خاصین تاکدیم",
+       "nstab-project": "پروژه ئی تاکدیم",
+       "nstab-image": "فایل",
+       "nstab-mediawiki": "پیام",
+       "nstab-template": "تراشوان",
+       "nstab-help": "کومکین تاکدیم",
+       "nstab-category": "تهر",
+       "nosuchaction": "ایرنگین ئملی وجود نداریت",
+       "nosuchactiontext": "ای ئملی که شما مشخص کورته ئیت بی انترنیتئین ادرسی تا جواز نداریت .\nممکن اینت که انترنتین ادرسا جوان وارد نه کورته ئیت یا مشکل والا ئین لینک ئیا وارد کوره ئیت .\nیا امکان داریت که شه نرم افزاری که شما بی{{SITENAME}} تا استفاده کورته ئیت مشکل داشته بیئت.",
+       "error": "خطا",
+       "databaseerror": "مئلوماتین بانکئ خطا",
+       "databaseerror-text": "مشکلی بی مئلوماتین بانکی تا رخ داته. \nای ممکن اینت شه مشکلا بی نرم افزاری تا بیئت .",
+       "databaseerror-query": "پرس‌وجو: $1",
+       "databaseerror-function": "تابع: $1",
+       "databaseerror-error": "خطا: $1",
+       "missingarticle-rev": "(شمارهٔ نسخه: $1)",
+       "missingarticle-diff": "(تفاوت: $1، $2)",
+       "internalerror": "داخلین خطا",
+       "internalerror_info": "داخلین خطا: $1",
+       "filecopyerror": "نه شه فایل «$1» بی «$2» کاپی بیئت.",
+       "filerenameerror": "نه شه فایل «$1» بی «$2» تغیر نام بیئت.",
+       "filedeleteerror": "نه بوت فایل «$1» پاک بیئت.",
+       "directorycreateerror": "نه بوت مسیر $1 ئا جوڑ کورت.",
+       "directoryreadonlyerror": "دایرکتوری \"$1\" فقط وانتینئ اینت.",
+       "directorynotreadableerror": "دایرکتوری \"$1\" وانتینئ نه اینت.",
+       "filenotfound": "فایل «$1» ودی نه بوت.",
+       "unexpected": "غیرمنتظرئین اندازه: «$1»=«$2».",
+       "formerror": "خطا: نه توانن فرم ئا دیم دی ین.",
+       "badarticleerror": "نه توانن ای ئملا په ای تاکدیما انجام دی ین .",
+       "badtitle": "خرابین ئنوان",
+       "viewsource": "نشان داتین مبدائی",
+       "viewsource-title": "مبدا ئی نشان داتین په $1",
+       "actionthrottled": "شمی ئملی دیم گیپته بوت",
+       "viewsourcetext": "شما ئه توانیت ای تاکدیمی مبدائا بگیندیت و یا کاپی بکنیت:",
+       "exception-nologin": "لاگین نه بوته ئیت",
+       "virus-scanfailed": "ناکامین سکن  (کود $1)",
+       "virus-unknownscanner": "نامئلومین انتی ویروس:",
+       "welcomeuser": "وش آتیت $1!",
+       "welcomecreation-msg": "شمی کار زوروکین حساب جوڑ بوت.\nبی هوش مکنیت که وتئ [[Special:Preferences|تنظیماتان ئا {{SITENAME}}]] تغیر بدهیت.",
+       "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-loggedin": "شما انون بی ئنوان {{GENDER:$1|$1}} داخل بوته ئیت .\nشه جهلگین فورما په داخل بوتینا بی ئنوان دیگرین کار زوروکا استفاده بکنیت .",
+       "userlogin-createanother": "دیگرین کار زوروکین حسابئ جوڑ کورتین",
+       "createacct-emailrequired": "ایمیل ادرس",
+       "createacct-emailoptional": "ایمیل ادرس (اختیاری)",
+       "createacct-email-ph": "وتئ ایمیل ادرسا داخل بکنیت",
+       "createacct-another-email-ph": "ایمیل ادرسی داخل کورتین",
+       "createaccountmail": "استفاده شه تصادفین پاسوردا و آیی دیم داتین بی مشخصین ایمیل ادرسیا",
+       "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",
+       "passwordtooshort": "پاسورد باید کم شه کم {{PLURAL:$1|۱ حرف|$1 حرف}} داشته بیئت.",
+       "mailmypassword": "پاک کورتین پاسوردئ",
+       "accountcreated": "کار زوروکین حساب جوڑ بوت",
+       "loginlanguagelabel": "زبان: $1",
+       "pt-login": "داخل بوتین",
+       "pt-login-button": "داخل بوتین",
+       "pt-createaccount": "کار زوروکین حسابئ جوڑ کورتین",
+       "pt-userlogout": "در بوتین",
+       "resetpass_header": "پاسوردئ تغیر داتین",
+       "oldpassword": "دیمئ پاسورد:",
+       "newpassword": "نوکین پاسورد:",
+       "retypenew": "نوکین پاسوردا پدا داخل کورتین",
+       "resetpass_submit": "پاسوردی تنظیم و داخل بوتین",
+       "changepassword-success": "شمی پاسوردئ تغیر کامیاب بوت و پاسورد تغیر کورت",
+       "resetpass-submit-loggedin": "پاسوردی تغیر داتین",
+       "resetpass-submit-cancel": "کنسیل",
+       "resetpass-temp-password": "موقیئتین پاسورد:",
+       "passwordreset": "پاک کورتین پاسوردئ",
+       "passwordreset-legend": "پاک کورتین پاسوردئ",
+       "passwordreset-username": "کار زوروکین نام:",
+       "passwordreset-domain": "دامنه:",
+       "changeemail": "ایمیل ادرسی تغیر داتین",
+       "changeemail-oldemail": "انونین ایمیل ادرس:",
+       "changeemail-newemail": "نوکین ایمیل ادرس:",
+       "changeemail-none": "(هیچ)",
+       "changeemail-submit": "ایمیل ادرسی تغیر",
+       "bold_sample": "پر رنگین متن",
+       "bold_tip": "پر رنگین متن",
+       "media_tip": "فایل لینک",
+       "summary": "خلاصه:",
+       "watchthis": "دیستین ای تاکدیمی",
+       "savearticle": "ای تاکدیم ذخیره بیئت",
+       "preview": "دیم دیست",
+       "showpreview": "دیم دیست",
+       "showdiff": "تغیراتانئ نشان داتین",
+       "blankarticle": "<strong>هشدار:</strong> شما انون یک خالین تاکدیمی جوڑ کورتینی حالا وَیت .\nاگر «{{int:savearticle}}» ئا پدا  کلیک کنیت، یک تاکدیمی بدون شه محتوائا جوڑ ئه بیئت.",
+       "anoneditwarning": "<strong>هشدار:</strong> شما داخل نه بوته ئیت. شمی آی‌پی نشانگ ئا موچی ئه تواننت بگیندنت اگر شما هر تغیری بیاریت . اگر <strong>[$1 داخل بئیت]</strong> یا <strong>[$2 یک کار زوروکین حساب جوڑ بکنیت]</strong>، شمی ایڈیٹ\t بی شمی کار زوروکین ناما شینک ئه بیئنت و گون گو دیگرین مزایان .",
+       "blockedtitle": "کار زوروک بسته بوته",
+       "loginreqtitle": "لوگین بوتین ضروری اینت",
+       "loginreqlink": "داخل بوتین",
+       "accmailtitle": "پاسورد دیم داته بوت.",
+       "newarticle": "(نوکین)",
+       "continue-editing": "شوتین بی ایڈ\tیٹ\tی نیمگا",
+       "editing": "بی ایڈ\tیٹ\t کورتینی حالا $1",
+       "creating": "بی جوڑ کورتینی حالا $1",
+       "yourtext": "شمی متن",
+       "content-model-wikitext": "ویکی‌متن",
+       "content-model-text": "ساده گین متن",
+       "content-model-javascript": "جاوااسکریپت",
+       "content-json-empty-object": "خالین چیز",
+       "content-json-empty-array": "خالین صف",
+       "previousrevision": "→ قدیمین نخسه",
+       "nextrevision": "نوکین نخسه ←",
+       "currentrevisionlink": "انونین نخسه یی نشان داتین",
+       "cur": "فعلی",
+       "next": "بعدی",
+       "last": "دیمتیرین",
+       "page_first": "اولین",
+       "page_last": "آخیرین",
+       "histfirst": "کهنگتیرین",
+       "histlast": "نوکتیرین",
+       "historyempty": "(خالی)",
+       "history-feed-item-nocomment": "$1 بی $2",
+       "rev-deleted-user": "(کار زوروکین نام پاک بوت)",
+       "rev-delundel": "نمایش/نهفتن",
+       "rev-showdeleted": "نشان داتین",
+       "revdelete-show-file-submit": "هان",
+       "revdelete-radio-set": "چیهر داتین",
+       "revdelete-radio-unset": "نمایان",
+       "revdelete-log": "دلیل:",
+       "revdel-restore": "نمایش/نهفتن",
+       "pagehist": "تاکدیمی تاریخچه",
+       "deletedhist": "پاک بوتگینانی تاریخچه",
+       "revdelete-reasonotherlist": "دیگرین دلیل",
+       "mergehistory-reason": "دلیل:",
+       "mergelog": "سیاههٔ ادغام",
+       "lineno": "سطر $1:",
+       "editundo": "خنثی‌ کورتین",
+       "diff-empty": "(بدون تفاوت)",
+       "searchprofile-articles-tooltip": "گشتین بی $1",
+       "searchprofile-images-tooltip": "گشتین په فایلان",
+       "search-redirect": "(تغییرمسیر $1)",
+       "search-section": "(بخش $1)",
+       "search-category": "(تهر  $1)",
+       "search-interwiki-more": "(گیشتیر)",
+       "search-relatedarticle": "مرتبط",
+       "searchrelated": "مرتبط",
+       "searchall": "موچ",
+       "powersearch-togglelabel": "چیک کورتین:",
+       "powersearch-toggleall": "موچ",
+       "powersearch-togglenone": "هیچ‌گوجام",
+       "prefs-misc": "متفرقه",
+       "prefs-resetpass": "پاسوردی تغیر داتین",
+       "prefs-changeemail": "ایمیل ادرسی تغیر داتین",
+       "prefs-setemail": "ایمیل ادرسی تنظیم کورتین",
+       "prefs-email": "ایملی آپشن ئان",
+       "prefs-rendering": "نمایشی تاکدیم",
+       "saveprefs": "ذخیره",
+       "restoreprefs": "بیر گردینتین موچین تنظیمان بی اولی ئین رقما",
+       "prefs-editing": "ایڈیٹ کورتین",
+       "rows": "تعداد سطرها:",
+       "columns": "تعداد ستون‌ها:",
+       "searchresultshead": "گشتین",
+       "timezonelegend": "منطقهٔ زمانی:",
+       "localtime": "محلی ئن وخت:",
+       "timezoneregion-africa": "آفریقا",
+       "timezoneregion-america": "آمریکا",
+       "timezoneregion-arctic": "قطب شمالی",
+       "timezoneregion-asia": "آسیا",
+       "timezoneregion-atlantic": "بحر اتلانتیک",
+       "timezoneregion-australia": "استرالیا",
+       "timezoneregion-europe": "اروپا",
+       "timezoneregion-indian": "بحر هند",
+       "timezoneregion-pacific": "بحر آرام",
+       "prefs-searchoptions": "گشتین",
+       "default": "پیش‌فرض",
+       "prefs-files": "فایل ئان",
+       "prefs-custom-css": "سی‌اس‌اس شخصی",
+       "youremail": "ایمیل:",
+       "prefs-registration": "راجیسترئ وخت",
+       "yourrealname": "واقیئین نام:",
+       "yourlanguage": "زبان:",
+       "prefs-editor": "ایڈیٹور",
+       "prefs-preview": "دیم دیست",
+       "prefs-advancedrc": "پیشرفته ئین کیلی ئان",
+       "prefs-advancedrendering": "پیشرفته ئین کیلی ئان",
+       "prefs-advancedsearchoptions": "پیشرفته ئین کیلی ئان",
+       "prefs-advancedwatchlist": "پیشرفته ئین کیلی ئان",
+       "prefs-displayrc": "نمایش ئین کیلی ئان",
+       "prefs-displaywatchlist": "نمایش ئین کیلی ئان",
+       "prefs-tokenwatchlist": "نشانه گ",
+       "prefs-diffs": "تفاوت‌ئان",
+       "userrights-reason": "دلیل:",
+       "group": "گروپ:",
+       "group-user": "کار زوروکان",
+       "group-autoconfirmed": "تائید بُوته ئین کار زوروکان",
+       "group-bot": "ربات‌هان",
+       "group-sysop": "مدیر ئان",
+       "group-bureaucrat": "دیوان‌سالار ئان",
+       "group-suppress": "گیندوک ئان",
+       "group-all": "(موچ)",
+       "group-user-member": "{{GENDER:$1|کار زوروک}}",
+       "group-autoconfirmed-member": "{{GENDER:$1|تائید بَوته ئین کار زوروک}}",
+       "group-bot-member": "ربات",
+       "group-sysop-member": "{{GENDER:$1|مدیر}}",
+       "group-bureaucrat-member": "{{GENDER:$1|دیوان‌سالار}}",
+       "group-suppress-member": "{{GENDER:$1|نظارت}}",
+       "grouppage-user": "{{ns:project}}:کارزورک ئان",
+       "grouppage-autoconfirmed": "{{ns:project}}:تائید بُوته ئین کار زوروک ئان",
+       "grouppage-bot": "{{ns:project}}:ربات‌ ئان",
+       "grouppage-sysop": "{{ns:project}}:مدیر ئان",
+       "grouppage-bureaucrat": "{{ns:project}}:دیوان‌سالار ئان",
+       "grouppage-suppress": "{{ns:project}}:نظارت",
+       "right-read": "وانتین تاکدیمی",
+       "right-edit": "ایڈ\tیٹ کورتین تاکدیمی",
+       "right-createpage": "تاکدیمی جوڑ\t کورتین (بی غیر گپ ئین موردی تاکدیمان )",
+       "right-createtalk": "گپ ئی تاکدیمی جوڑ\t کورتین",
+       "right-createaccount": "کار زوروکئ حسابئ جوڑ\t کورتین",
+       "right-move": "تاکدیمی انتقال",
+       "right-move-categorypages": "تهر تاکدیمئ انتکال",
+       "right-movefile": "فایلی انتقال",
+       "right-upload": "فایلی بُرز کورتین",
+       "action-read": "وانتین ای تاکدیمئ",
+       "action-edit": "ایڈ\tیٹ کورتین ای تاکدیمئ",
+       "action-createpage": "تاکدیم جوڑ کورتین",
+       "action-move-categorypages": "تهر تاکدیمئ انتکال",
+       "action-movefile": "ای فایلی انتقال داتین",
+       "action-upload": "ای فایلی اپلود یا بُرز کورتین",
+       "action-writeapi": "استفاده شه نیویشتینی API",
+       "action-delete": "پاک کورتین ای تاکدیمئ",
+       "action-deleterevision": "ای نخسه یی پاک کورتین",
+       "rcshowhideminor-show": "نشان داتین",
+       "rcshowhideminor-hide": "چیهر داتین",
+       "rcshowhidebots": "$1 ربات‌هان",
+       "rcshowhidebots-show": "نشان داتین",
+       "rcshowhidebots-hide": "چیهر داتین",
+       "rcshowhideliu-show": "نشان داتین",
+       "rcshowhideliu-hide": "چیهر داتین",
+       "rcshowhideanons-show": "نشان داتین",
+       "rcshowhideanons-hide": "چیهر داتین",
+       "rcshowhidepatr-show": "نشان داتین",
+       "rcshowhidepatr-hide": "چیهر داتین",
+       "rcshowhidemine-show": "نشان داتین",
+       "rcshowhidemine-hide": "چیهر داتین",
+       "diff": "تفاوت",
+       "hist": "تاریخچه",
+       "hide": "چیهر داتین",
+       "show": "نشان داتین",
+       "minoreditletter": "جز",
+       "newpageletter": "نوک",
+       "boteditletter": "ر",
+       "rc_categories_any": "هر گوجام",
+       "recentchangeslinked-page": "تاکدیم نام:",
+       "upload": "فایلی بُرز کورتین",
+       "uploadbtn": "فایلی بُرز کورتین",
+       "uploaderror": "خطا بی اپلودی تا",
+       "filename": "فایلئ نام",
+       "filedesc": "خلاصه",
+       "fileuploadsummary": "خلاصه:",
+       "filesource": "منبع:",
+       "license": "اجازه‌نامه:",
+       "license-header": "اجازه‌نامه",
+       "nolicense": "هیچگوجام انتخاب نه بوته",
+       "listfiles-delete": "پاک کورتین",
+       "imgfile": "فایل",
+       "listfiles": "فایل لیست",
+       "listfiles_thumb": "ناحُننک",
+       "listfiles_date": "تاریخ",
+       "listfiles_name": "نام",
+       "listfiles_user": "کار زوروک",
+       "listfiles_size": "اندازه",
+       "listfiles_description": "توضیح",
+       "listfiles-latestversion-yes": "هان",
+       "listfiles-latestversion-no": "نه",
+       "file-anchor-link": "فایل",
+       "filehist": "فایلی تاریخچه",
+       "filehist-deleteall": "موچانی پاک کورتین",
+       "filehist-deleteone": "پاک کورتین",
+       "filehist-revert": "بیرگردینتین",
+       "filehist-current": "انونین نسخه",
+       "filehist-datetime": "تاریخ/ساعت",
+       "filehist-thumb": "ناحُننک",
+       "filehist-nothumb": "بی ناحُننک",
+       "filehist-user": "کار زوروک",
+       "shared-repo-from": "شه $1",
+       "filedelete": "پاک کورتین $1",
+       "filedelete-legend": "فایلی پاک کورتین",
+       "filedelete-comment": "دلیل:",
+       "filedelete-submit": "پاک کورتین",
+       "mimesearch": "گشتین بی اساس MIME",
+       "download": "ائیر کورتین",
+       "randomincategory-category": "تهر:",
+       "pageswithprop-submit": "برا",
+       "brokenredirects-edit": "ایڈیٹ",
+       "brokenredirects-delete": "پاک کورتین",
+       "withoutinterwiki-legend": "دیموند",
+       "withoutinterwiki-submit": "نشان داتین",
+       "protectedpages-page": "تاکدیم",
+       "newpages-username": "کار زوروکین نام:",
+       "booksources-search": "گشتین",
+       "specialloguserlabel": "مجری:",
+       "log": "سیاهه‌ها",
+       "allarticles": "موچین تاکدیمان",
+       "allpagessubmit": "برا",
+       "categories": "تهرئان",
+       "listusers-submit": "نشان داتین",
+       "listgrouprights-group": "گروپ",
+       "emailuser-title-notarget": "کار زوروکی ایمیل",
+       "emailpage": "کار زوروکی ایمیل",
+       "emailusername": "کار زوروکین نام:",
+       "emailusernamesubmit": "ثبت کورتین",
+       "emailfrom": "شه:",
+       "emailto": "بی:",
+       "emailsubject": "ئنوان:",
+       "emailmessage": "پیام:",
+       "emailsend": "دیم دئ",
+       "emailsent": "ایمیل دیم دئ",
+       "watchlist": "واچلیست",
+       "mywatchlist": "واچلیست",
+       "watchlistfor2": "په $1 $2",
+       "watch": "دیستین",
+       "unwatch": "اوشتارین تین دیستینی",
+       "deletepage": "تاکدیمی پاک کورتین",
+       "confirm": "تأیید کورتین",
+       "delete-confirm": "پاک کورتین «$1»",
+       "delete-legend": "پاک کورتین",
+       "deletecomment": "دلیل:",
+       "rollbacklink": "بیجا آورتین",
+       "protectcomment": "دلیل:",
+       "restriction-edit": "ایڈیٹ",
+       "restriction-move": "انتقال",
+       "restriction-create": "جوڑ\t کورتین",
+       "restriction-upload": "بُرز کورتین",
+       "undelete-search-submit": "گشتین",
+       "undelete-show-file-submit": "هان",
+       "blanknamespace": "(بُنیادی)",
+       "sp-contributions-logs": "سیاهه‌ها",
+       "sp-contributions-talk": "گپ",
+       "sp-contributions-submit": "گشتین",
+       "whatlinkshere-page": "تاکدیم:",
+       "whatlinkshere-links": "→ لینک",
+       "ipbreason": "دلیل:",
+       "blocklist-target": "هدف",
+       "blocklist-reason": "دلیل",
+       "ipblocklist-submit": "گشتین",
+       "movearticle": "تاکدیمی انتقال:",
+       "movereason": "دلیل:",
+       "export-addcat": "اڈ\tڈ\t کورتین",
+       "export-addns": "اڈ\tڈ\t کورتین",
+       "allmessagesname": "نام",
+       "allmessages-filter-all": "موچ",
+       "allmessages-language": "زبان:",
+       "allmessages-filter-submit": "برا",
+       "allmessages-filter-translate": "ترجمه",
+       "thumbnail-more": "ٹُوه کورتین",
+       "filemissing": "فایل وجود نداریت",
+       "tooltip-search": "گشتین بی {{SITENAME}}",
+       "tooltip-p-logo": "بُنیاد ئین تاکدیمی دیستین",
+       "tooltip-n-mainpage": "بُنیاد ئین تاکدیمی دیستین",
+       "tooltip-n-mainpage-description": "بُنیاد ئین تاکدیمی دیستین",
+       "tooltip-t-upload": "فایلی بُرز کورتین",
+       "tooltip-upload": "بُرز کورتینی شرو",
+       "pageinfo-article-id": "تاکدیمی آی دی",
+       "pageinfo-robot-noindex": "نامجاز",
+       "pageinfo-contentpage-yes": "هان",
+       "pageinfo-protect-cascading-yes": "هان",
+       "pageinfo-category-pages": "تاکدیمانی نمبر",
+       "ilsubmit": "گشتین",
+       "bydate": "شه تاریخی رُوگا",
+       "just-now": "همی انون",
+       "hours-ago": "$1 سائت دیما",
+       "minutes-ago": "$1 دقیقه دیما",
+       "seconds-ago": "$1 {{PLURAL:$1|ثانیه|ثانیه}} دیما",
+       "monday-at": "دوشنبی $1",
+       "tuesday-at": "سه‌شنبی $1",
+       "wednesday-at": "چهارشنبی $1",
+       "thursday-at": "پنج‌شنبی $1",
+       "friday-at": "جوما $1",
+       "saturday-at": "بی شنبی $1",
+       "sunday-at": "یک‌شنبی $1",
+       "yesterday-at": "زئ  بی $1",
+       "exif-languagecode": "زبان",
+       "exif-iimcategory": "تهر",
+       "exif-sharpness-0": "ساددگ",
+       "exif-sharpness-1": "نرم",
+       "exif-sharpness-2": "سک",
+       "exif-subjectdistancerange-0": "نامئلوم",
+       "exif-subjectdistancerange-1": "ماکرو",
+       "exif-iimcategory-spo": "سپورت",
+       "exif-iimcategory-war": "جنگ ، لٹ و کوٹ و ناآرامی",
+       "exif-iimcategory-wea": "آپ و هوا",
+       "exif-urgency-normal": "ئادی ($1)",
+       "exif-urgency-low": "کم ($1)",
+       "exif-urgency-high": "باز ($1)",
+       "namespacesall": "موچ",
+       "monthsall": "موچ",
+       "confirmemail": "ایمیل ادرسی تائید کورتین",
+       "confirm_purge_button": "قبول داشتین",
+       "confirm-watch-button": "قبول داشتین",
+       "confirm-unwatch-button": "قبول داشتین",
+       "imgmultipageprev": "&rarr; دیمتیری تاکدیم",
+       "imgmultipagenext": "بئدین تاکدیم &larr;",
+       "imgmultigo": "برا!",
+       "imgmultigoto": "شوتین بی $1 تاکدیمی تا",
+       "img-lang-default": "(پیش‌فرض ئین زبان)",
+       "img-lang-info": "ارایه کورتین ای اکسی بی  $1 .  $2",
+       "img-lang-go": "برا",
+       "table_pager_limit_submit": "برا",
+       "redirect-submit": "برا",
+       "redirect-lookup": "گشتین:",
+       "feedback-message": "پیام:",
+       "feedback-cancel": "کنسیل",
+       "searchsuggest-search": "گشتین",
+       "duration-seconds": "$1 ثانیه",
+       "duration-minutes": "$1 دقیقه",
+       "duration-hours": "$1 سائت",
+       "duration-days": "$1 روچ",
+       "duration-weeks": "$1 هپتگ",
+       "duration-years": "$1 سال",
+       "duration-decades": "$1 دههگ",
+       "duration-centuries": "$1 قرن",
+       "duration-millennia": "{{PLURAL:$1|هزار سال |$1 هزار سال}}",
+       "expand_templates_ok": "قبول داشتین",
+       "pagelang-name": "تاکدیم",
+       "pagelang-language": "زبان",
+       "pagelang-use-default": "استفاده کورتین شه پیش فرض ئین زبانا",
+       "pagelang-select-lang": "زبانی انتخاب"
+}
index ba5d7dc..fdb5e4e 100644 (file)
        "revdelete-legend": "দৃষ্টিপাত সীমাবদ্ধ করো",
        "revdelete-hide-text": "সংস্করণের লেখা",
        "revdelete-hide-image": "ফাইলের বিষয়বস্তু আড়াল করো",
-       "revdelete-hide-name": "à¦\95াà¦\9c à¦\8fবà¦\82 à¦²à¦\95à§\8dষà§\8dয আড়াল করো",
+       "revdelete-hide-name": "লà¦\95à§\8dষà§\8dয à¦\93 à¦ªà§\8dযারামিà¦\9fার আড়াল করো",
        "revdelete-hide-comment": "সম্পাদনা সারাংশ",
        "revdelete-hide-user": "সম্পাদকে ব্যবহারকারীর নাম/আইপি",
        "revdelete-hide-restricted": "প্রশাসকবৃন্দ এবং অন্যদের ক্ষেত্রে এই ডাটা রোধ করো",
        "uploaderror": "আপলোড এ সমস্যা হয়েছে",
        "upload-recreate-warning": "'''সতর্কতা: এই নামের ফাইলটি অপসারণ অথবা স্থানান্তর করা হয়েছে।'''\n\nকাজের সুবিধার জন্য অপসারণ এবং স্থানান্তর লগ এখানে দেখানো হল:",
        "uploadtext": "ফাইল আপলোড করতে নিচের ফরমটি ব্যবহার করুন।</br>\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>''' অথবা\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>'''",
-       "upload-permitted": "যà§\87সব à¦«à¦¾à¦\87লà§\87র à¦§à¦°à¦¨ à¦\85নà§\81মà§\8bদিত: $1।",
-       "upload-preferred": "যà§\87সব à¦«à¦¾à¦\87লà§\87র à¦§à¦°à¦¨ à¦ªà¦\9bনà§\8dদনà§\80য়: $1।",
-       "upload-prohibited": "যà§\87সব à¦«à¦¾à¦\87লà§\87র à¦§à¦°à¦¨ à¦¨à¦¿à¦·à¦¿à¦¦à§\8dধ: $1।",
+       "upload-permitted": "à¦\85নà§\81মà§\8bদিত à¦«à¦¾à¦\87লà§\87র {{PLURAL:$2|ধরন}}: $1।",
+       "upload-preferred": "পà¦\9bনà§\8dদনà§\80য় à¦«à¦¾à¦\87লà§\87র {{PLURAL:$2|ধরন}}: $1।",
+       "upload-prohibited": "নিষিদà§\8dধ à¦«à¦¾à¦\87লà§\87র {{PLURAL:$2|ধরন}}: $1।",
        "uploadlogpage": "আপলোড লগ",
        "uploadlogpagetext": "নিচে সম্প্রতিক আপলোডকৃত ফাইলের তালিকা রয়েছে।\nসংক্ষেপচিত্র সহ দেখতে [[Special:NewFiles|নতুন ফাইলের গ্যালারি]] দেখুন।",
        "filename": "ফাইলের নাম",
        "php-uploaddisabledtext": "পিএইপি -এ ফাইল আপলোড নিস্ক্রিয় রয়েছে।\nঅনুগ্রহ করে file_uploads সেটিং পরীক্ষা করুন।",
        "uploadscripted": "এই ফাইলে এমন HTML বা স্ক্রিপ্ট কোড আছে যা একটি ওয়েব ব্রাউজার ভুল বুঝতে পারে।",
        "uploadscriptednamespace": "এই SVG ফাইলে অবৈধ নামস্থান \"$1\" রয়েছে",
+       "uploadinvalidxml": "আপলোডকৃত ফাইলে XML পার্স করা যাবে না।",
        "uploadvirus": "এই ফাইলটিতে ভাইরাস আছে! ব্যাখ্যা: $1",
        "uploadjava": "এটি একটি ZIP ফরম্যাটের ফাইল, যেখানে একটি জাভা .class ফরম্যাটের ফাইল রয়েছে।\nজাভা ফাইল আপলোডের কোনো অনুমতি নেই, কারণ এই ধরনের ফাইল সিস্টেমে নিরাপত্তা ত্রুটি তৈরী করতে পারে।",
        "upload-source": "উৎস ফাইল",
        "javascripttest": "জাভাস্ক্রিপ্ট পরীক্ষা",
        "javascripttest-pagetext-noframework": "এই পাতাটি জাভাস্ক্রিপ্ট পরীক্ষার জন্য সংরক্ষিত।",
        "javascripttest-pagetext-unknownframework": "পরীক্ষার অজানা ফ্রেমওয়ার্ক \"$1\"।",
+       "javascripttest-pagetext-unknownaction": "অজানা কার্য \"$1\"।",
        "javascripttest-pagetext-frameworks": "অনুগ্রহ করে নিচের কোনো একটি ফ্রেমওয়ার্ক নির্ধারণ করুন: $1",
        "javascripttest-pagetext-skins": "পরীক্ষার জন্য একটি স্কীন নির্ধারণ করুন:",
        "javascripttest-qunit-intro": "mediawiki.org থেকে [$1 পরীক্ষার ডলুমেন্টেশন] দেখুন।",
        "tooltip-pt-mycontris": "আপনার অবদানগুলোর তালিকা",
        "tooltip-pt-login": "আপনার লগ-ইন করাটা বাঞ্চনীয়, কিন্তু তা বাধ্যতামূলক নয়।",
        "tooltip-pt-logout": "প্রস্থান",
+       "tooltip-pt-createaccount": "আপনাকে একটি অ্যাকাউন্ট তৈরি করে প্রবেশ করার পরামর্শ দেওয়া হচ্ছে; তবে এটা বাধ্যতামূলক নয়",
        "tooltip-ca-talk": "বিষয়বস্তু পাতা সম্পর্কে আলোচনা",
        "tooltip-ca-edit": "আপনি এই পাতা সম্পাদনা করতে পারেন। অনুগ্রহ করে সংরক্ষণের আগে প্রাকদর্শন করুন।",
        "tooltip-ca-addsection": "নতুন অনুচ্ছেদ শুরু করুন।",
        "exif-subjectlocation": "বিষয়বস্তুর অবস্থান",
        "exif-exposureindex": "আলোকসম্পাত সূচক",
        "exif-sensingmethod": "সংবেদন পদ্ধতি",
-       "exif-filesource": "ফাইল সোর্স",
+       "exif-filesource": "ফাইলের উৎস",
        "exif-scenetype": "দৃশ্যের ধরন",
        "exif-customrendered": "পছন্দমাফিক ছবি প্রক্রিয়াকরণ",
        "exif-exposuremode": "আলোকসম্পাত মোড",
        "compare-revision-not-exists": "আপনার কাঙ্ক্ষিত সংস্করণটি নেই।",
        "dberr-problems": " দুঃখিত! এই সাইটটি বর্তমানে কারীগরী অসুবিধার মুখোমুখি হয়েছে।",
        "dberr-again": "কয়েক মিনিট পর পুনরায় পরিদর্শনের চেষ্টা করুন।",
-       "dberr-info": "(ডà§\87à¦\9fাবà§\87à¦\9c à¦¸à¦¾à¦°à§\8dভার $1-à¦\8fর à¦¸à¦¾à¦¥à§\87 à¦¯à§\8bà¦\97াযà§\8bà¦\97 à¦\95রা à¦¸à¦®à§\8dভব à¦¹à¦¯à¦¼à¦¨à¦¿)",
-       "dberr-info-hidden": "(ডাà¦\9fাবà§\87à¦\9c à¦¸à¦¾à¦°à§\8dভারà§\87র à¦¸à¦¾à¦¥à§\87 à¦¸à¦\82যà§\8bà¦\97 à¦¦à§\87য়া à¦¸à¦®à§\8dভব à¦¹à¦\9aà§\8dà¦\9bà§\87 à¦¨à¦¾)",
+       "dberr-info": "(ডà§\87à¦\9fাবà§\87à¦\9c à¦ªà§\8dরবà§\87শ à¦\95রা à¦¸à¦®à§\8dভব à¦¹à¦¯à¦¼à¦¨à¦¿: $1)",
+       "dberr-info-hidden": "(ডà§\87à¦\9fাবà§\87à¦\9c à¦ªà§\8dরবà§\87শ à¦\95রা à¦¸à¦®à§\8dভব à¦¹à¦¯à¦¼à¦¨à¦¿)",
        "dberr-usegoogle": "এই পরিস্থিতিতে আপনি গুগলের মাধ্যমে অনুসন্ধান করার চেষ্টা করতে পারেন।",
        "dberr-outofdate": "খেয়াল করুন যে, আমাদের বিষয়বস্তু সম্পর্কিত তাদের সূচি মেয়াদ উত্তীর্ণ হতে পারে।",
        "dberr-cachederror": "এটি অনুরোধকৃত পাতার ক্যাশে লিপি, যা হালনাগাতকৃত নাও হতে পারে।",
        "mediastatistics-header-office": "অফিস",
        "mediastatistics-header-archive": "সংকুচিত বিন্যাস",
        "json-error-unknown": "JSON-এ একটি সমস্যা রয়েছে। ত্রুটি: $1",
-       "json-error-syntax": "সিনট্যাক্স ত্রুটি"
+       "json-error-state-mismatch": "অকার্যকর বা ত্রুটিপূর্ণ JSON",
+       "json-error-ctrl-char": "অক্ষর নিয়ন্ত্রণ ত্রুটি, সম্ভবত ভুল এনকোডকৃত",
+       "json-error-syntax": "সিনট্যাক্স ত্রুটি",
+       "json-error-utf8": "ত্রুটিপূর্ণ ইউটিএফ-৮ অক্ষর, সম্ভবত ভুল এনকোডকৃত",
+       "json-error-unsupported-type": "এনকোড করা যাবে না এমন একটি মানের ধরন দেয়া হয়েছে"
 }
index 493ba09..18ba747 100644 (file)
        "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.",
        "rollback": "Vrati izmjene",
-       "rollback_short": "Vrati",
        "rollbacklink": "vrati",
        "rollbacklinkcount": "vrati $1 {{PLURAL:$1|izmjenu|izmjene|izmjena}}",
        "rollbacklinkcount-morethan": "vrati više od $1 {{PLURAL:$1|izmjene|izmjene|izmjena}}",
        "import-logentry-interwiki": "uveženo (''transwikied'') $1",
        "import-logentry-interwiki-detail": "{{PLURAL:$1|Uvezena $1 revizija|Uvezene $1 revizije|Uvezeno $1 revizija}} od $2",
        "javascripttest": "Testiranje JavaScript-e",
-       "javascripttest-title": "Pokretanje $1 testova",
        "javascripttest-pagetext-noframework": "Ova stranica je određena za pokretanje JavaScript testova.",
        "javascripttest-pagetext-unknownframework": "Nepoznat radni okvir testiranja\"$1\".",
        "javascripttest-pagetext-frameworks": "Molimo Vas izaberite jednu od sljedećih testnih okvira: $1",
        "javascripttest-pagetext-skins": "Izaberite s kojom temom želite da pokrenete probu:",
        "javascripttest-qunit-intro": "Pogledajte [$1 dokumentaciju za testiranje] na mediawiki.org.",
-       "javascripttest-qunit-heading": "MediaWiki JavaScript QUnit testni alati",
        "tooltip-pt-userpage": "Vaša korisnička stranica",
        "tooltip-pt-anonuserpage": "Korisnička stranica za ip koju Vi uređujete kao",
        "tooltip-pt-mytalk": "Vaša stranica za razgovor",
        "duration-millennia": "$1 {{PLURAL:$1|milenij|milenija}}",
        "rotate-comment": "Slika rotirana za $1 {{PLURAL:$1|stepen|stepeni}} u smjeru kazaljke na satu",
        "limitreport-cputime": "Vrijeme korištenja CPU",
+       "limitreport-cputime-value": "$1 {{PLURAL:$1|sekunda|sekunde|sekundi}}",
        "limitreport-walltime": "Korištenje u realnom vremenu",
        "limitreport-walltime-value": "$1 {{PLURAL:$1|sekunda|sekunde|sekundi}}",
        "expandtemplates": "Proširi šablone",
index cff9185..5d95fa2 100644 (file)
        "columns": "Columnes",
        "searchresultshead": "Preferències de la cerca",
        "stub-threshold": "Límit per a formatar l'enllaç com <a href=\"#\" class=\"stub\">esborrany</a> (en octets):",
-       "stub-threshold-disabled": "Deshabilitat",
+       "stub-threshold-disabled": "Inhabilitat",
        "recentchangesdays": "Dies a mostrar en els canvis recents:",
        "recentchangesdays-max": "(màxim $1 {{PLURAL:$1|dia|dies}})",
        "recentchangescount": "Nombre d'edicions a mostrar per defecte:",
        "enotif_body_intro_moved": "La pàgina $1 de {{SITENAME}} ha estat reanomenada el $PAGEEDITDATE per {{gender:$2|$2}}. Aneu a $3 per veure la revisió actual.",
        "enotif_body_intro_restored": "La pàgina $1 de {{SITENAME}} ha estat restaurada el $PAGEEDITDATE per {{gender:$2|$2}}. Aneu a $3 per veure la revisió actual.",
        "enotif_body_intro_changed": "La pàgina $1 de {{SITENAME}} ha estat canviada el $PAGEEDITDATE per {{gender:$2|$2}}. Aneu a $3 per veure la revisió actual.",
-       "enotif_lastvisited": "Vegeu $1 per a tots els canvis que s'han fet d'ença de la vostra darrera visita.",
+       "enotif_lastvisited": "Vegeu $1 per a tots els canvis que s'han fet d'ençà de la vostra darrera visita.",
        "enotif_lastdiff": "Consulteu $1 per a visualitzar aquest canvi.",
        "enotif_anon_editor": "usuari anònim $1",
        "enotif_body": "Benvolgut/uda $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nResum de l'editor: $PAGESUMMARY $PAGEMINOREDIT\n\nContacteu amb l'editor:\ncorreu: $PAGEEDITOR_EMAIL\nwiki: $PAGEEDITOR_WIKI\n\nNo rebreu més notificacions en cas de més activitat a menys que visiteu aquesta pàgina havent iniciat sessió.\nTambé podeu canviar el mode de notificació de les pàgines que vigileu en la vostra llista de seguiment.\n\nEl servei de notificacions del projecte {{SITENAME}}\n\n--\nPer a canviar les opcions de notificació per correu electrònic aneu a\n{{canonicalurl:{{#special:Preferences}}}}\n\nPer a canviar les opcions de la vostra llista de seguiment aneu a\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nPer eliminar la pàgina de la vostra llista de seguiment aneu a\n$UNWATCHURL\n\nSuggeriments i ajuda:\n$HELPPAGE",
        "api-error-stashfilestorage": "S'ha produït un error en emmagatzemar el fitxer en l'espai temporal.",
        "api-error-stashzerolength": "El servidor no ha pogut desar el fitxer a l'espai temporal perquè tenia longitud zero.",
        "api-error-stashnotloggedin": "Cal haver iniciat una sessió per desar fitxers en l'espai temporal de càrrega.",
-       "api-error-stashwrongowner": "El fitxer que provàveu d'accedir en l'espai de temporal no us pertany.",
+       "api-error-stashwrongowner": "El fitxer que provàveu d'accedir en l'espai temporal no us pertany.",
        "api-error-stashnosuchfilekey": "La clau de fitxer que provàveu d'accedir en l'espai temporal no existeix.",
        "api-error-timeout": "El servidor no ha respost en el temps esperat.",
        "api-error-unclassified": "S'ha produït un error desconegut",
index 8f45ea8..fba767f 100644 (file)
        "tagline": "Гlирс хlокхуьна бу {{grammar:genitive|{{SITENAME}}}}",
        "help": "ГӀо",
        "search": "Лахар",
-       "searchbutton": "Лаха",
+       "searchbutton": "Лахар",
        "go": "Дехьа гӀо",
        "searcharticle": "Дехьа гӀо",
        "history": "Истори",
        "protectedpage": "ГӀароллийца йолу агӀо",
        "jumpto": "Дехьа гӀо:",
        "jumptonavigation": "Навигаци",
-       "jumptosearch": "лаÑ\85а",
+       "jumptosearch": "Ð\9bаÑ\85аÑ\80",
        "view-pool-error": "Бехк цабиллар доьха, хӀинц сервераш йоьттина ю.\nКаьчна дуккха дехарш хӀокху агӀонтӀе хьажарца.\nДехар до, собардеш а юха хьажа хӀокху агӀонтӀе жим тӀаьхьо.\n\n$1",
        "generic-pool-error": "Бехк цабиллар доьха, хӀинц сервер йоьттина ю.\nКаьчна дуккха дехарш хӀокху агӀонтӀе хьажарца.\nДехар до, собардеш а юха хьажа хӀокху агӀонтӀе жим тӀаьхьо.",
        "pool-timeout": "Блоктоха еза хан тӀех йаьлла",
        "protectedpagetext": "ХӀара агӀо дӀакъоьвлина ю тадарш ца дайта.",
        "viewsourcetext": "Хьоьга далундерг хьажар а дезахь хlокху агlон чура йоза хьаэцар:",
        "viewyourtext": "Хьан йиш ю '''хьой нисдинчу''' дӀадолалун йозе хьажа а цуна копи ян а:",
-       "protectedinterface": "Ð¥Ó\80аÑ\80а Ñ\81Ñ\85Ñ\8cгайÑ\82аÑ\80на Ð³Ó\80иÑ\80Ñ\81а Ñ\85аамаÑ\88 Ð»Ð°Ñ\82Ñ\82оÑ\88 Ð¹Ð¾Ð»Ñ\83 Ð°Ð³Ó\80о Ñ\8e. Ð\9aÑ\83Ñ\8cйгалÑ\85оÑ\88на Ð±ÐµÐ½ Ð¸Ð·Ð° Ñ\85ийÑ\86а Ñ\86ало.",
+       "protectedinterface": "Ð¥Ó\80окÑ\85Ñ\83 Ð°Ð³Ó\80она Ñ\87оÑ\85Ñ\8c Ð¸Ð½Ñ\82еÑ\80Ñ\84ейÑ\81ан Ð¿Ñ\80огÑ\80амма Ð»Ð°Ñ\82Ñ\82оÑ\80ан Ñ\85аам Ð±Ñ\83. Ð\97Ñ\83лам Ñ\86а Ð´Ð°Ð¹Ñ\82а Ñ\86Ñ\83на Ñ\85ийÑ\86ам Ð±Ð°Ð½ ÐºÑ\83Ñ\8cйгалÑ\85оÑ\88на Ð±ÐµÐ½ Ñ\86ало.\nÐ¥Ó\80окÑ\85Ñ\83 Ñ\85ааман Ð³Ð¾Ñ\87 Ñ\82Ó\80еÑ\82оÑ\85а Ñ\8f Ñ\85ийÑ\86а Ð»ÐµÐ»Ð°Ðµ Ð»Ð¾ÐºÐ°Ð»Ð¸Ð·Ð°Ñ\86ин Ñ\81айÑ\82 MediaWiki [//translatewiki.net/ translatewiki.net]",
        "editinginterface": "<strong>Тергам бе:</strong> Ахьа таеш ю интерфейсан йоза долу агӀо программин латторан.\nЦуна бина хийцам хьокху Википедин кхечу декъашхошна гур бу.",
+       "translateinterface": "ХӀокху хааман гоч тӀетоха я хийца дехар до лелае локализацин сайт MediaWiki [//translatewiki.net/ translatewiki.net].",
        "cascadeprotected": "АгӀо хийцам ца байта гӀоралла дина ю {{PLURAL:$1|хӀокху агӀона|хӀокху агӀонийн}} юкъа йогӀуш хилар бахьнехь:\n$2",
        "namespaceprotected": "ХӀан бакъо яц анна цӀераш чохь тадарш да «$1».",
        "customcssprotected": "Хьан бакъо яц хӀара CSS-агӀо тая, иза кхечу декъашхочун гӀерс болу дера.",
        "searchprofile-images": "Мультимедиа",
        "searchprofile-everything": "Массанхьа",
        "searchprofile-advanced": "Шуьйра",
-       "searchprofile-articles-tooltip": "Лаха оцу $1",
+       "searchprofile-articles-tooltip": "$1 чохь лахар",
        "searchprofile-images-tooltip": "Файлаш лахар",
-       "searchprofile-everything-tooltip": "Ð\9bаÑ\85а Ð¼Ð°Ñ\81Ñ\81о Ð°Ð³lонаÑ\88каÑ\85Ñ\8c (дийÑ\86аÑ\80е Ð°Ð³lонаÑ\88Ñ\86ани)",
-       "searchprofile-advanced-tooltip": "Ð\9bаÑ\85а Ð´ÐµÑ\85аÑ\80Ñ\86а Ñ\85lокÑ\85Ñ\83 Ð°Ð½Ð° Ñ\86lеÑ\80аÑ\88каÑ\85Ñ\8c",
+       "searchprofile-everything-tooltip": "Ð\9cаÑ\81Ñ\81о Ð°Ð³Ó\80онаÑ\88каÑ\85Ñ\8c Ð»Ð°Ñ\85аÑ\80 (дийÑ\86аÑ\80е Ð°Ð³Ó\80онаÑ\88Ñ\86а)",
+       "searchprofile-advanced-tooltip": "Ð\94еÑ\85аÑ\80Ñ\86а Ð¹Ð¾Ð»Ñ\83 Ñ\86Ó\80еÑ\80ийн Ð¼ÐµÑ\82Ñ\82игаÑ\88каÑ\85Ñ\8c Ð»Ð°Ñ\85аÑ\80",
        "search-result-size": "$1 ({{PLURAL:$2|$2 дош|$2 дешнаш}})",
        "search-result-category-size": "$1 {{PLURAL:$1|юкъаяр}} ($2 {{PLURAL:$2|1=бухара категори|бухара категореш}}, $3 {{PLURAL:$3|1=файл|файлаш}}).",
        "search-redirect": "(дlасахьажийна $1)",
        "timezoneregion-indian": "Индин океан",
        "timezoneregion-pacific": "Тийна океан",
        "allowemail": "Магийта декъашхошна хьайга электрони почтехула кехат кхехьийта",
-       "prefs-searchoptions": "Лаха",
+       "prefs-searchoptions": "Лахар",
        "prefs-namespaces": "ЦӀерийн ана",
        "default": "Iад йитарца",
        "prefs-files": "Файлаш",
        "apihelp-no-such-module": "Модуль «$1» цакарий.",
        "booksources": "Жайнан хьосташ",
        "booksources-search-legend": "Жайнех лаьцна хаам лахар",
-       "booksources-search": "Лаха",
+       "booksources-search": "Лахар",
        "booksources-text": "ХӀокху агӀонгахь гул бина сайтийн тӀе хьажоргийн могӀам оцу чохь шуна жайнах лаьцна хаам каро мега. И ю интернет-туьканаш а категорийн библиотекийн категорешкахь лахаран система а.",
        "specialloguserlabel": "Декъашхо:",
        "speciallogtitlelabel": "Ӏалашо (цӀе я декъашхо):",
        "linksearch": "Арахьара хьажорг",
        "linksearch-pat": "Лехарна кеп:",
        "linksearch-ns": "ЦӀерийн ана:",
-       "linksearch-ok": "Лаха",
+       "linksearch-ok": "Лахар",
        "linksearch-text": "Лело мега хӀоттош йолу символаш, масала, <code>*.wikipedia.org</code>.\nЛакхара даржан домен мукъа хила еза , масала<code>*.org</code><br />\nЛовш йолу {{PLURAL:$2|1=протокол|протоколаш}}: <code>$1</code> (Iад йитарца http://, протокол бакъалла язъен яцахь).",
        "linksearch-line": "$2 — хьажорг кху $1",
        "listusersfrom": "Гучé баха декъашхой, болалуш болу тӀера:",
        "undelete-search-title": "ДӀаяхна агӀонаш лахар",
        "undelete-search-box": "ДӀаяхна агӀонаш лахар",
        "undelete-search-prefix": "Гайта агӀонаш йолалуш йолу тӀера:",
-       "undelete-search-submit": "Лаха",
+       "undelete-search-submit": "Лахар",
        "undelete-no-results": "Архив чохь йогӀуш агӀонаш цакарий.",
        "undelete-error": "АгӀо меттахӀоттаяран гӀалат",
        "undelete-error-short": "Файл меттахӀоттаяран гӀалат: $1",
        "sp-contributions-username": "IP-адрес я декъашхочун цӀе:",
        "sp-contributions-toponly": "ТӀаьхьара бина хийцамаш гайта",
        "sp-contributions-newonly": "АгӀонаш кхоллар бен ма гайта",
-       "sp-contributions-submit": "Лаха",
+       "sp-contributions-submit": "Лахар",
        "whatlinkshere": "Хьажоргаш кхузе",
        "whatlinkshere-title": "«$1» тӀе хьажоргаш йолу агӀонаш",
        "whatlinkshere-page": "Агlо:",
        "tooltip-pt-preferences": "Хьан гlирс нисбар",
        "tooltip-pt-watchlist": "Ахьа тергам бо агӀонийн хийцаман могӀам",
        "tooltip-pt-mycontris": "Хьан нисдаран могӀам",
-       "tooltip-pt-login": "Ð¥lокÑ\85Ñ\83 Ð³lиÑ\80Ñ\81а Ñ\87оÑ\85Ñ\8c Ð´lавазвала/Ñ\8fла Ð¼ÐµÐ³Ð°, Ð°Ð¼Ð¼Ð° Ð¸Ð·Ð° Ñ\82lедожоÑ\88 дац.",
+       "tooltip-pt-login": "Ð\9aÑ\85Ñ\83заÑ\85Ñ\8c Ð´Ó\80аÑ\8fздаÑ\80 ÐºÑ\85олла Ð¼ÐµÐ³Ð°, Ð°Ð¼Ð¼Ð° Ð¸Ð·Ð° Ñ\82Ó\80едожийна дац.",
        "tooltip-pt-logout": "Дlадерзадо болх бар",
+       "tooltip-pt-createaccount": "Шу йиш ю дӀаяздар кхоьллина системин чудаха, амма иза тӀедожийна дац.",
        "tooltip-ca-talk": "Дийцаре агlон чулацам",
        "tooltip-ca-edit": "Хlара агlо хийцалур ю. Лелайе, дехар до, хьалххьажар айхьа чутохале lалашан",
        "tooltip-ca-addsection": "Кхолла керла дакъа",
        "pageinfo-category-subcats": "Бухара категорийн дукхалла",
        "pageinfo-category-files": "Файлийн дукхалла",
        "markaspatrolleddiff": "Билгалйе теллина санна",
-       "markaspatrolledtext": "Билгала йе хӀара агӀо хьаьжна сана",
+       "markaspatrolledtext": "Билгалъе хӀара агӀо хьаьжна сана",
        "markedaspatrolled": "ДӀадахка теллина санна хилар",
        "markedaspatrolledtext": "Хаьржина [[:$1]] агӀона верси къобалйина сана билгалйина.",
        "rcpatroldisabled": "ТӀехьара бина хийцамаш къобалбан магийна дац",
        "feedback-submit": "Дахьийта хетарг",
        "feedback-adding": "АгӀона хетарг тӀетохар...",
        "feedback-close": "Кийчча ю",
-       "searchsuggest-search": "Лаха",
+       "searchsuggest-search": "Лахар",
        "searchsuggest-containing": "чуьраниг…",
        "api-error-duplicate": "Иштта чулацам болу {{PLURAL:$1|1=[$2 кхин файл]|[$2 кхин файлаш]}} йолуш ю",
        "api-error-duplicate-popup-title": "{{PLURAL:$1|1=Файлан|Файлийн}} дубликат.",
index 391f910..54b4a8b 100644 (file)
        "namespace": "Jmenný prostor:",
        "invert": "Obrátit výběr",
        "tooltip-invert": "Zaškrtnutím tohoto políčka skryjete změny stránek ve zvoleném jmenném prostoru (a souvisejícím jmenném prostoru, pokud je zaškrtnuto)",
+       "tooltip-whatlinkshere-invert": "Zaškrtnutím tohoto políčka skryjete odkazy ze stránek ve zvoleném jmenném prostoru.",
        "namespace_association": "Související jmenný prostor",
        "tooltip-namespace_association": "Zaškrtnutím tohoto políčka zahrnete i diskusní či obsahový jmenný prostor příslušný k vybranému jmennému prostoru",
        "blanknamespace": "(Hlavní)",
index 679baf6..8604ac9 100644 (file)
        "download": "DownloadHerunterladen",
        "unwatchedpages": "Ikke overvågede sider",
        "listredirects": "Henvisningsliste",
-       "unusedtemplates": "Ikke brugte skabeloner",
+       "unusedtemplates": "Ubrugte skabeloner",
        "unusedtemplatestext": "Her opremses alle sider i {{ns:template}}-navnerummet, der ikke er inkluderet på andre sider.\nHusk at kontrollere for andre henvisninger til skabelonerne før de slettes.",
        "unusedtemplateswlh": "andre henvisninger",
        "randompage": "Tilfældig side",
        "specialpage-empty": "Der er ingen resultater at vise.",
        "lonelypages": "Forældreløse sider",
        "lonelypagestext": "Følgende sider er ikke henvist til eller inkluderet på andre sider på {{SITENAME}}:",
-       "uncategorizedpages": "Ukategoriserede sider",
-       "uncategorizedcategories": "Ukategoriserede kategorier",
+       "uncategorizedpages": "Ikke kategoriserede sider",
+       "uncategorizedcategories": "Ikke kategoriserede kategorier",
        "uncategorizedimages": "Ikke kategoriserede filer",
        "uncategorizedtemplates": "Ikke kategoriserede skabeloner",
        "unusedcategories": "Ubrugte kategorier",
        "deleteprotected": "Du kan ikke slette denne side, fordi den er beskyttet.",
        "deleting-backlinks-warning": "'''Advarsel:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Andre sider]] linker til eller inkluderer den side, du er ved at slette.",
        "rollback": "Fjern redigeringer",
-       "rollback_short": "Fjern redigering",
        "rollbacklink": "rul tilbage",
        "rollbacklinkcount": "tilbagefør $1 {{PLURAL:$1|redigering|redigeringer}}",
        "rollbacklinkcount-morethan": "tilbagefør mere end $1 {{PLURAL:$1|redigering|redigeringer}}",
        "import-logentry-interwiki": "$1 blev importeret (Transwiki)",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|version|versioner}} importeret fra $2",
        "javascripttest": "Test af JavaScript",
-       "javascripttest-title": "Kører $1 test",
        "javascripttest-pagetext-noframework": "Denne side er reserveret til at teste JavaScript.",
        "javascripttest-pagetext-unknownframework": "Ukendt testmiljø \"$1\".",
        "javascripttest-pagetext-frameworks": "Vælg venligst en af de følgende testmiljøer: $1",
        "javascripttest-pagetext-skins": "Vælg et udseende, som testene skal køres med:",
        "javascripttest-qunit-intro": "Se [$1 testdokumentationen] på mediawiki.org.",
-       "javascripttest-qunit-heading": "MediaWiki JavaScript QUnit testsuite",
        "tooltip-pt-userpage": "Din brugerside",
        "tooltip-pt-anonuserpage": "Brugersiden for den ip-adresse du redigerer som",
        "tooltip-pt-mytalk": "Din diskussionsside",
index ebecd5a..b528f1e 100644 (file)
        "uploaderror": "Fehler beim Hochladen",
        "upload-recreate-warning": "'''Achtung: Eine Datei dieses Namens wurde bereits gelöscht oder verschoben.'''\n\nEs folgt ein Auszug aus dem Lösch- und Verschiebungs-Logbuch dieser Datei.",
        "uploadtext": "Benutze dieses Formular, um neue Dateien hochzuladen.\n\nGehe zu der [[Special:FileList|Liste hochgeladener Dateien]], um vorhandene Dateien zu suchen und anzuzeigen. Siehe auch das [[Special:Log/upload|Datei-]] und [[Special:Log/delete|Lösch-Logbuch]].\n\nUm ein '''Bild''' in einer Seite zu verwenden, nutze einen Link in der folgenden Form:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Datei.jpg]]</nowiki></code>''' – für ein Vollbild\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Datei.png|200px|thumb|left|Alternativer Text]]</nowiki></code>''' – für ein 200px breites Bild innerhalb einer Box, mit „Alternativer Text“ als Bildbeschreibung\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Datei.ogg]]</nowiki></code>''' – für einen direkten Link auf die Datei, ohne Darstellung der Datei",
-       "upload-permitted": "Erlaubte Dateitypen: $1.",
-       "upload-preferred": "Bevorzugte Dateitypen: $1.",
-       "upload-prohibited": "Nicht erlaubte Dateitypen: $1.",
+       "upload-permitted": "{{PLURAL:$2|Erlaubter Dateityp|Erlaubte Dateitypen}}: $1.",
+       "upload-preferred": "{{PLURAL:$2|Bevorzugter Dateityp|Bevorzugte Dateitypen}}: $1.",
+       "upload-prohibited": "{{PLURAL:$2|Nicht erlaubter Dateityp|Nicht erlaubte Dateitypen}}: $1.",
        "uploadlogpage": "Datei-Logbuch",
        "uploadlogpagetext": "Dies ist das Logbuch der hochgeladenen Dateien, siehe auch die [[Special:NewFiles|Galerie neuer Dateien]] für einen visuellen Überblick.",
        "filename": "Dateiname",
index cfa42ee..21e88a8 100644 (file)
        "actioncomplete": "Kar bi temam",
        "actionfailed": "kar nêbı",
        "deletedtext": "\"$1\" biya wedariya.\nQe qeydê wedarnayışi, $2 bevinin.",
-       "dellogpage": "Qeydê esterniye",
+       "dellogpage": "Qeydê esterıtışi",
        "dellogpagetext": "listeya cêrıni heme qaydê hewn a kerdeyan o.",
-       "deletionlog": "qaydê hewnakerdışani",
+       "deletionlog": "qeydê esterıtışi",
        "reverted": "revizyono verin tepiya anciyayo",
        "deletecomment": "Sebeb:",
        "deleteotherreason": "Sebebo bin:",
        "reblock-logentry": "qey [[$1]]i tarixê qediyayişi $2 $3 pa ninan a eyarê ver-grewtışan vurna.",
        "blocklogtext": "No kuliyatê kılitkerdış u rakerdışê fealiyetê karberano.\nAdresê IP'ya ke otomatikmen kılit biyê lista de çıniya.\nSeba lista karberanê ke heta nıka kılit biyê [[Special:BlockList|lista kılitkerdışê IPy]] bıvinê.",
        "unblocklogentry": "$1 ake",
-       "block-log-flags-anononly": "karberê anomini tenya",
+       "block-log-flags-anononly": "tenya karberê anonimi",
        "block-log-flags-nocreate": "akerdışê hesabi racneyayo",
        "block-log-flags-noautoblock": "Oto-wedariye terkneyayo",
        "block-log-flags-noemail": "e-posta biya bloqe",
index 3c86243..56a2ee4 100644 (file)
        "upload-summary": "",
        "upload-recreate-warning": "<strong>Warning: A file by that name has been deleted or moved.</strong>\n\nThe deletion and move log for this page are provided here for convenience:",
        "uploadtext": "Use the form below to upload files.\nTo view or search previously uploaded files go to the [[Special:FileList|list of uploaded files]], (re)uploads are also logged in the [[Special:Log/upload|upload log]], deletions in the [[Special:Log/delete|deletion log]].\n\nTo include a file in a page, use a link in one of the following forms:\n* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code></strong> to use the full version of the file\n* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|alt text]]</nowiki></code></strong> to use a 200 pixel wide rendition in a box in the left margin with \"alt text\" as description\n* <strong><code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code></strong> for directly linking to the file without displaying the file",
-       "upload-permitted": "Permitted file types: $1.",
-       "upload-preferred": "Preferred file types: $1.",
-       "upload-prohibited": "Prohibited file types: $1.",
+       "upload-permitted": "Permitted file {{PLURAL:$2|type|types}}: $1.",
+       "upload-preferred": "Preferred file {{PLURAL:$2|type|types}}: $1.",
+       "upload-prohibited": "Prohibited file {{PLURAL:$2|type|types}}: $1.",
        "uploadfooter": "-",
        "upload-default-description": "-",
        "uploadlogpage": "Upload log",
        "redirect": "Redirect by file, user, page or revision ID",
        "redirect-legend": "Redirect to a file or page",
        "redirect-text": "",
-       "redirect-summary": "This special page redirects to a file (given the file name), a page (given a revision ID or page ID), or a user page (given a numeric user ID). Usage: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], or [[{{#Special:Redirect}}/user/101]].",
+       "redirect-summary": "This special page redirects to a file (given the filename), a page (given a revision ID or page ID), or a user page (given a numeric user ID). Usage: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], or [[{{#Special:Redirect}}/user/101]].",
        "redirect-submit": "Go",
        "redirect-lookup": "Lookup:",
        "redirect-value": "Value:",
        "redirect-user": "User ID",
        "redirect-page": "Page ID",
        "redirect-revision": "Page revision",
-       "redirect-file": "File name",
+       "redirect-file": "Filename",
        "redirect-not-exists": "Value not found",
        "fileduplicatesearch": "Search for duplicate files",
        "fileduplicatesearch-summary": "Search for duplicate files based on hash values.",
index edba1e9..be3ad8e 100644 (file)
        "content-model-text": "ordinara teksto",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
-       "duplicate-args-category": "Paĝoj kun pluroblaj argumentoj en ŝanblonvokoj",
+       "duplicate-args-category": "Paĝoj kun pluroblaj argumentoj en ŝablonvokoj",
        "duplicate-args-category-desc": "La paĝo enhavas uzon de ŝablono kun pluroble uzitaj argumentoj, kiel ekzemple <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> aŭ <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "Averto: Ĉi tiu paĝo enhavas tro da multekostaj sintaksaj funkcio-vokoj.\n\nĜi havu malpli ol $2 {{PLURAL:$2|vokon|vokojn}}, sed nun estas $1 {{PLURAL:$1|voko|vokoj}}.",
        "expensive-parserfunction-category": "Paĝoj kun tro da multekostaj sintaksaj funkcio-vokoj",
        "deleteprotected": "Vi ne povas forigi ĉi tiun paĝon ĉar ĝi estis protektita.",
        "deleting-backlinks-warning": "'''Atentigo:'''\n[[Special:WhatLinksHere/{{FULLPAGENAME}}|Aliaj paĝoj]] ligas al aŭ transkludas tiun ĉi forigotan paĝon.",
        "rollback": "Restarigi antaŭan redakton",
-       "rollback_short": "Malfari",
        "rollbacklink": "malfari",
        "rollbacklinkcount": "nuligi $1 {{PLURAL:$1|redakton|redaktojn}}",
        "rollbacklinkcount-morethan": "nuligi pli ol $1 {{PLURAL:$1|redakton|redaktojn}}",
        "import-logentry-interwiki": "transvikiigita $1",
        "import-logentry-interwiki-detail": "Importis $1 {{PLURAL:$1|revizion|reviziojn}} de $2",
        "javascripttest": "Ĝavoskripta testado",
-       "javascripttest-title": "Irigante $1 testoj",
        "javascripttest-pagetext-noframework": "Ĉi tiu paĝo estas konservita por funkciigi testojn de JavaScript.",
        "javascripttest-pagetext-unknownframework": "Nekonta test-framo \"$1\".",
        "javascripttest-pagetext-frameworks": "Bonvolu elekti unu el la jenaj test-framoj: $1",
        "javascripttest-pagetext-skins": "Elektu kun kio etoso irigi la testojn:",
        "javascripttest-qunit-intro": "Vidu [$1 testa dokumentaro] en mediawiki.org.",
-       "javascripttest-qunit-heading": "Testaro QUnit por JavaScript de MediaWiki",
        "tooltip-pt-userpage": "Via uzantopaĝo",
        "tooltip-pt-anonuserpage": "La uzantopaĝo por la IP adreso sub kiu vi estas redaktanta",
        "tooltip-pt-mytalk": "Via diskutpaĝo",
index 86e6c5f..a203647 100644 (file)
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
        "content-json-empty-object": "Objeto vacío",
+       "content-json-empty-array": "Matriz vacía",
        "duplicate-args-category": "Páginas que usan argumentos duplicados en invocaciones de plantillas",
        "duplicate-args-category-desc": "La página contiene invocaciones de plantillas que utilizan argumentos duplicados, como <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> o <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "Aviso: Esta página contiene demasiadas llamadas a funciones sintácticas costosas (#ifexist: y similares)\n\nTiene {{PLURAL:$1|una llamada|$1 llamadas}}, pero debería tener menos de $2.",
        "deleteprotected": "No puedes eliminar esta página porque ha sido protegida.",
        "deleting-backlinks-warning": "'''Advertencia:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Otras páginas]] enlazan o transcluyen la página que vas a eliminar.",
        "rollback": "Revertir ediciones",
-       "rollback_short": "Revertir",
        "rollbacklink": "revertir",
        "rollbacklinkcount": "revertir $1 {{PLURAL:$1|edición|ediciones}}",
        "rollbacklinkcount-morethan": "revertir más de $1 {{PLURAL:$1|edición|ediciones}}",
        "movedarticleprotection": "cambiadas protecciones de «[[$2]]» a «[[$1]]»",
        "protect-title": "Cambiando el nivel de protección de «$1»",
        "protect-title-notallowed": "Ver el nivel de protección de «$1»",
-       "prot_1movedto2": "heredando la protección al trasladar [[$1]] a [[$2]]",
+       "prot_1movedto2": "[[$1]] se trasladó a [[$2]]",
        "protect-badnamespace-title": "Espacio de nombres no protegible",
        "protect-badnamespace-text": "Las páginas de este espacio de nombres no pueden ser protegidas",
        "protect-norestrictiontypes-text": "Esta página no se puede proteger ya que no hay ningún tipo de restricción disponible.",
        "namespace": "Espacio de nombres:",
        "invert": "Invertir selección",
        "tooltip-invert": "Marca esta casilla para ocultar los cambios a las páginas dentro del espacio de nombres seleccionado (y el espacio de nombres asociado si está activada)",
+       "tooltip-whatlinkshere-invert": "Activa esta casilla para ocultar los enlaces dentro del espacio de nombres seleccionado.",
        "namespace_association": "Espacio de nombres asociado",
        "tooltip-namespace_association": "Marca esta casilla para incluir también el espacio de nombres de discusión asociado con el espacio de nombres seleccionado",
        "blanknamespace": "(Principal)",
        "thumbnail-temp-create": "No se ha podido crear el archivo temporal de la miniatura",
        "thumbnail-dest-create": "No se ha podido guardar la miniatura",
        "thumbnail_invalid_params": "Parámetros del thumbnail no válidos",
+       "thumbnail_toobigimagearea": "Archivo más grande que $1",
        "thumbnail_dest_directory": "Incapaz de crear el directorio de destino",
        "thumbnail_image-type": "Tipo de imagen no contemplado",
        "thumbnail_gd-library": "Configuración de la librería GD incompleta: falta la función $1",
        "javascripttest": "Pruebas de JavaScript",
        "javascripttest-pagetext-noframework": "Esta página está reservada para ejecutar pruebas de JavaScript.",
        "javascripttest-pagetext-unknownframework": "Marco de pruebas desconocido \"$1\".",
+       "javascripttest-pagetext-unknownaction": "La acción «$1» es desconocida.",
        "javascripttest-pagetext-frameworks": "Por favor, seleccione uno de los marcos de pruebas siguientes: $1",
        "javascripttest-pagetext-skins": "Elija un aspecto (skin) para ejecutar las pruebas:",
        "javascripttest-qunit-intro": "Consulte la [$1 documentación sobre las pruebas] en mediawiki.org.",
        "version-entrypoints-header-url": "Dirección URL",
        "version-entrypoints-articlepath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgArticlePath Ruta del artículo]",
        "version-entrypoints-scriptpath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgScriptPath Ruta de la secuencia de comandos (script)]",
+       "version-libraries": "Bibliotecas instaladas",
+       "version-libraries-library": "Biblioteca",
+       "version-libraries-version": "Versión",
        "redirect": "Redirigir por archivo, usuario, página o ID de revisión",
        "redirect-legend": "Redirigir a un archivo o página",
        "redirect-summary": "Esta página especial redirige a un fichero (dado un nombre de fichero), a una página (dado un identificador de revisión o de página) o a una página de usuario (dado un identificador numérico de usuario). Uso: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/revision/328429]], o [[{{#Special:Redirect}}/user/101]].",
        "compare-revision-not-exists": "La revisión especificada no existe.",
        "dberr-problems": "Lo sentimos. Este sitio está experimentando dificultades técnicas.",
        "dberr-again": "Prueba a recargar dentro de unos minutos.",
-       "dberr-info": "(No se puede contactar con la base de datos del servidor: $1)",
-       "dberr-info-hidden": "(No se puede contactar con la base de datos del servidor)",
+       "dberr-info": "(No se puede acceder a la base de datos: $1)",
+       "dberr-info-hidden": "(No se puede acceder a la base de datos)",
        "dberr-usegoogle": "Mientras tanto puedes probar buscando a través de Google.",
        "dberr-outofdate": "Ten en cuenta que su índice de nuestro contenido puede estar desactualizado.",
        "dberr-cachederror": "La siguiente es una página guardada de la página solicitada, y puede no estar actualizada.",
        "revdelete-uname-unhid": "nombre de usuario mostrado",
        "revdelete-restricted": "restricciones para administradores aplicadas",
        "revdelete-unrestricted": "restricciones para administradores eliminadas",
+       "logentry-merge-merge": "$1 {{GENDER:$2|combinó}} $3 en $4 (revisiones hasta el $5)",
        "logentry-move-move": "$1 movió la página $3 a $4",
        "logentry-move-move-noredirect": "$1 movió la página $3 a $4 sin dejar una redirección",
        "logentry-move-move_redir": "$1 {{GENDER:$2|trasladó}} la página $3 a $4 sobre una redirección",
        "api-error-stashfailed": "Error interno: El servidor no pudo almacenar el archivo temporal.",
        "api-error-publishfailed": "Error interno: el servidor no pudo publicar el archivo temporal.",
        "api-error-stasherror": "Ha ocurrido un error al subir el archivo al depósito.",
+       "api-error-stashedfilenotfound": "No se encontró el archivo del espacio temporal al intentar cargarlo.",
+       "api-error-stashpathinvalid": "La ruta donde debería encontrarse el archivo del espacio temporal no es válida.",
+       "api-error-stashfilestorage": "Ocurrió un error al almacenar el archivo en el espacio temporal.",
+       "api-error-stashzerolength": "El servidor no pudo almacenar el archivo en el espacio temporal porque este no contiene datos.",
+       "api-error-stashnotloggedin": "Debes acceder para guardar archivos en el espacio temporal de carga.",
+       "api-error-stashwrongowner": "El archivo del espacio temporal al que quieres acceder no te pertenece.",
+       "api-error-stashnosuchfilekey": "La clave de archivo del espacio temporal al que quieres acceder no existe.",
        "api-error-timeout": "El servidor no respondió en el plazo previsto.",
        "api-error-unclassified": "Ocurrió un error desconocido.",
        "api-error-unknown-code": "Error desconocido: «$1»",
        "mediastatistics-header-text": "Textual",
        "mediastatistics-header-executable": "Ejecutables",
        "mediastatistics-header-archive": "Formatos comprimidos",
+       "json-warn-trailing-comma": "Se {{PLURAL:$1|eliminó una coma|eliminaron $1 comas}} al final en el archivo JSON",
        "json-error-unknown": "Ocurrió un problema con el código JSON. Error: $1",
+       "json-error-depth": "Se ha superado la profundidad máxima de la pila",
        "json-error-state-mismatch": "JSON no válido o con formato incorrecto",
        "json-error-ctrl-char": "Error de carácter de control, posiblemente codificada incorrectamente",
        "json-error-syntax": "Error de sintaxis",
        "json-error-utf8": "Los caracteres UTF-8 tienen errores de formato; probablemente la codificación es incorrecta.",
+       "json-error-recursion": "Una o más referencias recursivas en el valor por codificar",
        "json-error-inf-or-nan": "Hay uno o más valores «NAN» o «INF» en el valor que se codificará",
        "json-error-unsupported-type": "Se proporcionó un valor en un tipo que no se puede codificar"
 }
index 29f4694..e40f314 100644 (file)
        "defaultmessagetext": "Sõnumi vaiketekst",
        "content-failed-to-parse": "Ebaõnnestus $1i mudeli $2-tüüpi sisu liigendamine: $3",
        "invalid-content-data": "Vigased sisuandmed",
-       "content-not-allowed-here": "Lehekülg [[$2]] ei i sisaldada $1i.",
+       "content-not-allowed-here": "Lehekülg [[$2]] ei tohi sisaldada $1i.",
        "editwarning-warning": "Sellelt leheküljelt lahkumise tõttu võivad tehtud muudatused kaotsi minna.\nKui oled sisse loginud, saad selle hoiatuse eelistuste alaosas \"{{int:prefs-editing}}\" keelata.",
        "editpage-notsupportedcontentformat-title": "Sisuvormingu tugi puudub",
        "editpage-notsupportedcontentformat-text": "Sisumudelil $2 puudub sisuvormingu $1 tugi.",
        "uploaderror": "Faili laadimine ebaõnnestus",
        "upload-recreate-warning": "'''Hoiatus: Sellise nimega fail on kustutatud või teisaldatud.'''\n\nSelle lehe kustutamis- ja teisaldamislogi on kuvatud siin:",
        "uploadtext": "Kasuta allpool olevat vormi, et faile üles laadida.\nEt näha või leida varem üles laaditud faile, vaata [[Special:FileList|failide loendit]].\nÜleslaadimiste ajalugu saab uurida [[Special:Log/upload|üleslaadimislogist]], kustutamiste ajalugu [[Special:Log/delete|kustutamislogist]].\n\nEt lisada fail artiklile, kasuta üht järgmistest süntaksitest:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Fail.jpg]]</nowiki></code>''', et lisada täissuuruses pilt\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Fail.png|200px|thumb|left|kirjeldus]]</nowiki></code>''', et lisada lehekülje vasakusse serva raamiga 200 piksli laiune pisipilt koos pildiallkirjaga (''kirjeldus'')\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Fail.ogg]]</nowiki></code>''', et linkida otse failile ilma seda kuvamata",
-       "upload-permitted": "Lubatud failitüübid: $1.",
-       "upload-preferred": "Eelistatud failitüübid: $1.",
-       "upload-prohibited": "Keelatud failitüübid: $1.",
+       "upload-permitted": "Lubatud {{PLURAL:$2|failitüüp|failitüübid}}: $1.",
+       "upload-preferred": "Eelistatud {{PLURAL:$2|failitüüp|failitüübid}}: $1.",
+       "upload-prohibited": "Keelatud {{PLURAL:$2|failitüüp|failitüübid}}: $1.",
        "uploadlogpage": "Üleslaadimislogi",
        "uploadlogpagetext": "Allpool on loend viimastest failide üleslaadimistest. Visuaalsema esituse nägemiseks vaata [[Special:NewFiles|uute failide galeriid]].",
        "filename": "Faili nimi",
index 9ca287e..7828673 100644 (file)
        "loginlanguagelabel": "Hizkuntza: $1",
        "suspicious-userlogout": "Saioa amaitzeko egin duzun eskaria ukatu da. Izan ere, ematen du eskari hori gaizki dabilen nabigatzaile edo cache proxy batek bidali duela.",
        "createacct-another-realname-tip": "Benetako izena hautazkoa da.\nEmatea erabakitzen baduzu hori erabiliko da lanaren atribuzioa egiterako garaian.",
+       "pt-login": "Saioa hasi",
        "pt-createaccount": "Sortu kontua",
        "pt-userlogout": "Saioa itxi",
        "php-mail-error-unknown": "PHPren mail() funtzioan arazo ezezagun bat egon da.",
        "protectedarticle": "\"[[$1]]\" babestu da\"",
        "modifiedarticleprotection": "\"[[$1]]\"(r)en babes maila aldatu da",
        "unprotectedarticle": "\"[[$1]]\"-(r)i babesa kendu zaio",
-       "movedarticleprotection": "babes hobespenak \"[[$2]]\"tik \"[[$1]]\"(e)ra mugitu dira",
+       "movedarticleprotection": "babes hobespenak «[[$2]]» orritik «[[$1]]» orrira aldatu dira",
        "protect-title": "«$1» babesten",
        "protect-title-notallowed": "\"$1\"en babes maila ikusi",
        "prot_1movedto2": "«[[$1]]» orria «[[$2]]» izenera aldatu da",
index 6e06f79..d4465ee 100644 (file)
        "uploaderror": "خطای بارگذاری",
        "upload-recreate-warning": "'''هشدار: پرونده‌ای با این نام حذف یا منتقل شده است.'''\n\nبرای راحتی، سیاههٔ حذف و انتقال برای این صفحه در زیر آمده است:",
        "uploadtext": "از فرم زیر برای بارگذاری کردن پرونده‌های جدید استفاده کنید.\nبرای دیدن پرونده‌هایی که قبلاً بارگذاری شده‌اند به [[Special:FileList|فهرست پرونده‌ها]] بروید. بارگذاری نیز مجدد در [[Special:Log/upload|سیاههٔ بارگذاری‌ها]] و حذف پرونده‌ها در [[Special:Log/delete|deletion log]] ثبت می‌شود.\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>''' برای استفاده از یک نسخه ۲۰۰ پیکسلی از پرونده درون یک جعبه در سمت چپ متن که عبارت alt text در آن به عنوان توضیح استفاده شده\n*'''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' برای ایجاد یک پیونده مستقیم به پرونده بدون نمایش پرونده",
-       "upload-permitted": "انواع مجاز پرونده‌ها: $1.",
-       "upload-preferred": "انواع ترجیح‌داده شده پرونده‌ها: $1.",
-       "upload-prohibited": "انواع نامجاز پرونده‌ها: $1.",
+       "upload-permitted": "{{PLURAL:$2|نوع|انواع}} پرونده مجاز: $1.",
+       "upload-preferred": "{{PLURAL:$2|نوع|انواع}} پرونده ترجیح‌داده شده: $1.",
+       "upload-prohibited": "{{PLURAL:$2|نوع|انواع}} پرونده نامجاز: $1.",
        "uploadlogpage": "سیاههٔ بارگذاری‌ها",
        "uploadlogpagetext": "فهرست زیر فهرستی از آخرین بارگذاری پرونده‌ها است.\nبرای مرور دیداری [[Special:NewFiles|نگارخانهٔ پرونده‌های جدید]] را ببینید.",
        "filename": "نام پرونده",
        "namespace": "فضای نام:",
        "invert": "انتخاب برعکس شود",
        "tooltip-invert": "این جعبه را علامت بزنید تا تغییرات صفحه‌های داخل فضای نام انتخاب شده (و دیگر فضاهای نام علامت زده شده) پنهان شوند",
+       "tooltip-whatlinkshere-invert": "این جعبه را برای پنهان کردن پیوند صفحاتی که فضای نامشان انتخاب شده‌است، انتخاب کنید.",
        "namespace_association": "فضای نام مرتبط",
        "tooltip-namespace_association": "این جعبه را علامت بزنید تا فضای نام بحث یا موضوع مرتبط با فضای نام انتخاب شده هم شامل شود",
        "blanknamespace": "(اصلی)",
index de9013f..9301295 100644 (file)
        "uploaderror": "Tallennusvirhe",
        "upload-recreate-warning": "<strong>Varoitus: Tiedosto tällä nimellä on poistettu tai siirretty.</strong>\n\nPoisto- ja siirtoloki tälle sivulle näkyy alla:",
        "uploadtext": "Käytä tätä alla olevaa lomaketta tiedostojen tallentamiseen.\nVoit katsella luetteloa aiemmin tallennetuista tiedostoista sivulla [[Special:FileList|tiedostoluettelo]]. Kaikki tallennukset kirjataan myös [[Special:Log/upload|tallennuslokiin]] ja tiedostojen poistot [[Special:Log/delete|poistolokiin]].\n\nJotta saat tiedoston näkymään sivulla, käytä jotakin seuraavista muotoiluista linkkinä siihen:\n* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Tiedosto.jpg]]</nowiki></code></strong> käyttääksesi tiedoston kokonaista versiota.\n* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Tiedosto.png|200px|thumb|left|teksti tähän]]</nowiki></code></strong> käyttääksesi tiedostoa sovitettuna 200 kuvapistettä leveään laatikkoon kuvatekstillä \"teksti tähän\".\n* <strong><code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Tiedosto.ogg]]</nowiki></code></strong>, jos haluat suoran linkin tiedostoon ilman että tiedostoa näytetään.",
-       "upload-permitted": "Sallitut tiedostomuodot: $1.",
-       "upload-preferred": "Suositellut tiedostomuodot: $1.",
-       "upload-prohibited": "Kielletyt tiedostomuodot: $1.",
+       "upload-permitted": "{{PLURAL:$2|Sallittu tiedostomuoto|Sallitut tiedostomuodot}}: $1.",
+       "upload-preferred": "{{PLURAL:$2|Suositeltu tiedostomuoto|Suositellut tiedostomuodot}}: $1.",
+       "upload-prohibited": "{{PLURAL:$2|Kielletty tiedostomuoto|Kielletyt tiedostomuodot}}: $1.",
        "uploadlogpage": "Tiedostoloki",
        "uploadlogpagetext": "Alla on luettelo uusimmista tiedostonlisäyksistä. Kaikki ajat näytetään palvelimen aikavyöhykkeessä.",
        "filename": "Tiedoston nimi:",
        "namespace": "Nimiavaruus:",
        "invert": "Käänteinen valinta",
        "tooltip-invert": "Valitse tämä kohta, jos haluat piilottaa muutokset sivuihin valitussa nimiavaruudessa (ja liittyviin nimiavaruuksiin, jos valittu)",
+       "tooltip-whatlinkshere-invert": "Laita rasti tähän ruutuun, kun haluat piilottaa linkit niistä sivuista, jotka kuuluvat valittuun nimiavaruuteen.",
        "namespace_association": "Liittyvä nimiavaruus",
        "tooltip-namespace_association": "Valitse tämä kohta, jos haluat haun sisältävän myös valittuun nimiavaruuteen liittyvän keskustelu- tai aihenimiavaruuden.",
        "blanknamespace": "(sivut)",
        "javascripttest": "JavaScriptin testaus",
        "javascripttest-pagetext-noframework": "Tämä sivu on varattu JavaScript-testien suorittamiseen.",
        "javascripttest-pagetext-unknownframework": "Tuntematon testausalusta $1.",
+       "javascripttest-pagetext-unknownaction": "Tuntematon toiminto \"$1\".",
        "javascripttest-pagetext-frameworks": "Valitse yksi seuraavista testausalustoista: $1",
        "javascripttest-pagetext-skins": "Valitse testauksessa käytettävä ulkoasu",
        "javascripttest-qunit-intro": "Katso [$1 testausohjeet] mediawiki.orgissa.",
index 86724b0..d98b255 100644 (file)
                        "Automatik",
                        "Elodark",
                        "Macofe",
-                       "Sam"
+                       "Sam",
+                       "JackPotte"
                ]
        },
        "tog-underline": "Souligner les liens :",
        "redirectedfrom": "(Redirigé depuis $1)",
        "redirectpagesub": "Page de redirection",
        "redirectto": "Rediriger vers :",
-       "lastmodifiedat": "Dernière modification de cette page le $1 à $2.<br />",
+       "lastmodifiedat": "Dernière modification de cette page le $1 à $2.",
        "viewcount": "Cette page a été consultée {{PLURAL:$1|une fois|$1 fois}}.",
        "protectedpage": "Page protégée",
        "jumpto": "Aller à :",
        "namespace": "Espace de noms :",
        "invert": "Inverser la sélection",
        "tooltip-invert": "Cochez cette case pour cacher les modifications des pages dans l'espace de noms sélectionné (et l'espace de noms associé si coché)",
-       "tooltip-whatlinkshere-invert": "Vérifier cette boîte pour cacher les liens des pages sans espace de nom sélectionné.",
+       "tooltip-whatlinkshere-invert": "Cochez cette case pour cacher les liens des pages dans l'espace de nom sélectionné.",
        "namespace_association": "Espace de noms associé",
        "tooltip-namespace_association": "Cochez cette case pour inclure également l'espace de noms de discussion associé à l'espace de noms sélectionné",
        "blanknamespace": "(Principal)",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|a modifié}} l'appartenance au groupe pour $3",
        "logentry-rights-autopromote": "$1 {{GENDER:$2|a été promu}} automatiquement de $4 à $5",
        "logentry-upload-upload": "$1 {{GENDER:$2|a téléchargé}} $3",
-       "logentry-upload-overwrite": "$1 {{GENDER:$2|a téléchargé}} une nouvelle version de $3",
+       "logentry-upload-overwrite": "$1 {{GENDER:$2|a téléversé}} une nouvelle version de $3",
        "logentry-upload-revert": "$1 {{GENDER:$2|a téléchargé}} $3",
        "rightsnone": "(aucun)",
        "revdelete-summary": "résumé de modification",
index 6bee7ed..8052343 100644 (file)
@@ -7,18 +7,19 @@
                        "PieRRoMaN",
                        "RoyAlcatraz",
                        "Urhixidur",
-                       "Zetud"
+                       "Zetud",
+                       "Hangmanwa7id"
                ]
        },
        "tog-underline": "Souligner les liens:",
-       "tog-hideminor": "Cachez les petits changements dans la liste des derniers changements",
-       "tog-hidepatrolled": "↓ Cachez les petits changements dans la liste des derniers changements",
-       "tog-newpageshidepatrolled": "↓Cache pages patrollés de la list des pages nouveau",
+       "tog-hideminor": "Cacher les petits changements dans la liste des derniers changements",
+       "tog-hidepatrolled": "↓ Cacher les petits changements dans la liste des derniers changements",
+       "tog-newpageshidepatrolled": "↓Cacher pages patrollés de la list des pages nouveau",
        "tog-extendwatchlist": "Agrandir la liste des pages guettées pour montrer tous les changements",
        "tog-usenewrc": "User les derniers changements improuvés (JavaScript)",
        "tog-numberheadings": "Mettre les numéros sus les en-têtes",
-       "tog-showtoolbar": "Montrer la barre d'outils des changements (JavaScript)",
-       "tog-editondblclick": "Faire un clic-double pour changer la page (JavaScript)",
+       "tog-showtoolbar": "Montrer la barre d'outils des changements (nécessite JavaScript)",
+       "tog-editondblclick": "Faire un clic-double pour changer la page (nécessite JavaScript)",
        "tog-editsectiononrightclick": "Changer une section en faisant un clic droit sus son nom (JavaScript)",
        "tog-watchcreations": "Additionner les pages que je crée à ma liste des pages guettées",
        "tog-watchdefault": "Additionner les pages que je change à ma liste des pages guettées",
@@ -32,7 +33,7 @@
        "tog-enotifminoredits": "Envoyer un e-mail même pour les petits changements",
        "tog-enotifrevealaddr": "Montrer mon adresse e-mail dans les e-mails d'avertissement",
        "tog-shownumberswatching": "Montrer le montant de guetteurs",
-       "tog-oldsig": "↓ Preview du signature existant:",
+       "tog-oldsig": "Signature existant:",
        "tog-fancysig": "Signature brute (sans liens préparés)",
        "tog-uselivepreview": "User la vue d'avance vite (JavaScript) (En assai)",
        "tog-forceeditsummary": "M'avertir quand j'ai laissé la boëte de commentaires vide",
@@ -47,6 +48,8 @@
        "underline-always": "Tout le temps",
        "underline-never": "Jamais",
        "underline-default": "D'après le réglage du navigateur",
+       "editfont-sansserif": "Font sans-serif",
+       "editfont-serif": "Font serif",
        "sunday": "dimanche",
        "monday": "lundi",
        "tuesday": "mardi",
@@ -67,7 +70,7 @@
        "april": "d'avril",
        "may_long": "de mai",
        "june": "de juin",
-       "july": "de juliette",
+       "july": "de julliette",
        "august": "d'août",
        "september": "de septembre",
        "october": "d'octobre",
@@ -79,7 +82,7 @@
        "april-gen": "avril",
        "may-gen": "mai",
        "june-gen": "juin",
-       "july-gen": "juliette",
+       "july-gen": "julliette",
        "august-gen": "août",
        "september-gen": "septembre",
        "october-gen": "octobre",
        "oct": "oct",
        "nov": "nov",
        "dec": "déc",
+       "january-date": "$1 janvier",
+       "february-date": "$1 février",
+       "march-date": "$1 mars",
+       "april-date": "$1 avril",
+       "may-date": "$1 mai",
+       "june-date": "$1 juin",
+       "july-date": "$1 julliette",
+       "august-date": "$1 août",
+       "september-date": "$1 septembre",
+       "october-date": "$1 octobre",
+       "november-date": "$1 novembre",
+       "december-date": "$1 décembre",
        "pagecategories": "{{PLURAL:$1|Classe|Classes}}",
        "category_header": "Articles dans classe \"$1\"",
        "subcategories": "Sous-classes",
        "category-media-header": "Média dans classe \"$1\"",
        "category-empty": "''À présent, cette classe a ni articles ni média.''",
+       "hidden-categories": "{{PLURAL:$1|Classe cachée|Classes cachées}}",
+       "hidden-category-category": "Classes cachées",
+       "listingcontinuesabbrev": "cont.",
+       "index-category": "Pages indexées",
+       "noindex-category": "Pages non indexées",
+       "broken-file-category": "Pages avec des liens de fichiers cassées",
        "about": "Info",
        "article": "Page des matières",
        "newwindow": "(va ouverre une nouvelle fenêtre)",
-       "cancel": "Arrêter",
+       "cancel": "Annuler",
        "moredotdotdot": "Plus...",
+       "morenotlisted": "Cette liste est pas complète.",
        "mypage": "Ma page",
        "mytalk": "Ma page de discussion",
        "anontalk": "Discussion avec cette adresse IP",
        "navigation": "Navigation",
+       "and": "&#32;et",
        "qbfind": "Charcher",
        "qbbrowse": "Regarder",
        "qbedit": "Changer",
        "qbmyoptions": "Mes options",
        "faq": "Questions Communes",
        "faqpage": "Project:Questions Communes",
+       "actions": "Actions",
+       "namespaces": "Espaces des noms",
+       "variants": "Variantes",
+       "navigation-heading": "Menu de navigation",
        "errorpagetitle": "Erreur",
-       "returnto": "Retourner back à la page $1.",
+       "returnto": "Retourner à la page $1.",
        "tagline": "Un article de {{SITENAME}}",
        "help": "Aide",
        "search": "Charcher",
        "searchbutton": "Charcher",
        "go": "Aller",
        "searcharticle": "Aller",
-       "history": "Changements",
+       "history": "Changements du page",
        "history_short": "Changements",
        "updatedmarker": "changé depuis ma dernière visite",
        "printableversion": "Version imprimable",
        "permalink": "Lien permanent",
        "print": "Imprimer",
+       "view": "Regarde",
+       "view-foreign": "Regarde sur $1",
        "edit": "Changer",
+       "create": "Créer",
        "editthispage": "Faire un changement",
+       "create-this-page": "Créer cette page",
        "delete": "Supprimer",
        "deletethispage": "Supprimer cette page",
-       "undelete_short": "Rétablir {{PLURAL:$1|un changement|$1 changements}}",
+       "undeletethispage": "Restaurer cette page",
+       "undelete_short": "Restaurer {{PLURAL:$1|un changement|$1 changements}}",
+       "viewdeleted_short": "Regarder {{PLURAL:$1|un changement effacée|$1 changements effacées}}",
        "protect": "Protéger",
        "protect_change": "Changer le niveau de protection",
        "protectthispage": "Protéger cette page",
-       "unprotect": "déprotéger",
-       "unprotectthispage": "Déprotéger cette page",
+       "unprotect": "Changer la protection",
+       "unprotectthispage": "Changer la protection de cette page",
        "newpage": "Nouvelle page",
        "talkpage": "Discuter cette page",
        "talkpagelinktext": "Discuter",
        "articlepage": "Voir l'article",
        "talk": "Discussion",
        "views": "Vues",
-       "toolbox": "Boëte d'outils",
+       "toolbox": "Outils",
        "userpage": "Page d'useur",
        "projectpage": "Page des projets",
-       "imagepage": "Page des images",
+       "imagepage": "Regarder la page du fichier",
        "mediawikipage": "Page des messages",
        "templatepage": "Page de patron",
        "viewhelppage": "Page d'aide",
        "otherlanguages": "Autres langues",
        "redirectedfrom": "(Envoyé ici de la page $1)",
        "redirectpagesub": "Page de redirection",
+       "redirectto": "Rediriger vers:",
        "lastmodifiedat": "Cette page a été changée le $1 à $2.",
-       "viewcount": "Cette page a été visitée {{PLURAL:$1|$1 fois|$1 fois}}.",
+       "viewcount": "Cette page a été visitée {{PLURAL:$1|une fois|$1 fois}}.",
        "protectedpage": "Page protégée",
        "jumpto": "Aller à:",
+       "jumptonavigation": "navigation",
        "jumptosearch": "charcher",
+       "poolcounter-usage-error": "Erreur d’utilisation: $1",
        "aboutsite": "Qui c'est {{SITENAME}}?",
        "aboutpage": "Project:Info",
        "copyright": "Les matières sont avalable en accord avec $1",
        "privacy": "Régulations des affaires privées",
        "privacypage": "Project:Régulations des affaires privées",
        "badaccess": "Erreur de permission",
-       "badaccess-group0": "Vous avez pas assez de permission de faire ça que vous demandez.",
+       "badaccess-group0": "Tu as pas asses de permission de faire ça que tu demandes.",
        "badaccess-groups": "L'action que vous avez demandé est juste pour les useurs dans une des groupes $1.",
        "versionrequired": "Vous avez besoin de la version $1 de MediaWiki.",
        "versionrequiredtext": "Vous avez besoin de la version $1 de MediaWiki pour utiliser cette page. Voir [[Special:Version]].",
+       "ok": "OK",
        "retrievedfrom": "Pris de \"$1\"",
        "youhavenewmessages": "Vous avez $1 ($2).",
+       "youhavenewmessagesfromusers": "{{PLURAL:$4|Tu as}} $1 {{PLURAL:$3|d'un autre utilisateur|de $3 autres utilisateurs}} ($2).",
+       "youhavenewmessagesmanyusers": "Tu as $1 de nombreux utilisateurs ($2).",
+       "newmessageslinkplural": "{{PLURAL:$1|un nouveau message|des nouveaux messages}}",
+       "newmessagesdifflinkplural": "{{PLURAL:$1|dernière modification|dernières modifications}}",
        "youhavenewmessagesmulti": "Vous avez des nouveaux messages sus $1.",
        "editsection": "changer",
        "editold": "changer",
+       "viewsourceold": "Regarde la source",
+       "editlink": "changer",
        "viewsourcelink": "Voir la source",
        "editsectionhint": "Changer la section: $1",
        "toc": "Matières",
        "showtoc": "montrer",
        "hidetoc": "cacher",
-       "thisisdeleted": "Vous aimerait mieux voir ou rétablir $1?",
-       "viewdeleted": "Voir $1?",
+       "confirmable-yes": "Oui",
+       "confirmable-no": "Non",
+       "thisisdeleted": "Tu aimerais mieux regarde ou rétablir $1?",
+       "viewdeleted": "Regarder $1?",
        "restorelink": "{{PLURAL:$1|1 changement ôté|$1 changements ôtés}}",
        "feedlinks": "Distribution RSS:",
        "feed-invalid": "Mauvaise qualité de distribution RSS.",
+       "site-rss-feed": "Flux RSS de $1",
+       "site-atom-feed": "Flux Atom de $1",
+       "page-rss-feed": "Flux RSS de \"$1\"",
+       "page-atom-feed": "Flux Atom de \"$1\"",
        "red-link-title": "$1 (page n'existe pas)",
+       "sort-descending": "Tri dégruchant",
+       "sort-ascending": "Tri engruchant",
        "nstab-main": "Page",
        "nstab-user": "Useur",
        "nstab-media": "Média",
        "nstab-special": "Page espécial",
        "nstab-project": "Info",
        "nstab-image": "Dossier",
+       "nstab-mediawiki": "Message",
        "nstab-template": "Patron",
        "nstab-help": "Aide",
        "nstab-category": "Classe",
        "nosuchaction": "Action inconnue",
-       "nosuchactiontext": "L'action demandée dans l'adresse URL est pas reconnue par le wiki.",
+       "nosuchactiontext": "L'action spécifiée dans l'adresse URL est invalide.\nTu as peut-être mal entré l'URL ou suivi un lien erroné.\nIl peut aussi s'indiquer d'un bug dans le logiciel utilisé par {{SITENAME}}.",
        "nosuchspecialpage": "Page espéciale inconnue",
        "nospecialpagetext": "La page que vous avez demandée est pas une bonne page espéciale.  Vous pouvez trouver une liste des bonnes pages espéciales dans la [[Special:SpecialPages|liste des pages espéciales]].",
        "error": "Erreur",
        "databaseerror": "Erreur de la base d'information",
+       "databaseerror-error": "Erreur: $1",
        "laggedslavemode": "Avertissement: La page est peut-être pas renouvelée.",
        "readonly": "La base d'information est barrée.",
        "enterlockreason": "Écrire une raison pour le barrage avec un temps estimé\nd'équand le barrage va être ôté.",
        "readonlytext": "À présent, la base d'information est barrée aux nouveaux changements, peut-être pour le soutien habituel de la base d'information, et ça va retourner à normal t'à l'heure.\n\nL'administrateur qui l'a barrée a donné cette explication: $1",
+       "missingarticle-diff": "(diff: $1, $2)",
        "readonly_lag": "La base d'information s'a barré pendant que les serveurs de la base d'information rapprochont le maître.",
        "internalerror": "Erreur internelle",
        "internalerror_info": "Erreur intérieur: $1",
        "namespaceprotected": "Vous avez pas la permission de changer les pages dans l'espace de noms \"$1\".",
        "ns-specialprotected": "Vous pouvez pas changer les pages dans l'espace de noms {{ns:special}}.",
        "logouttext": "'''Vous êtes déconnecté asteur.'''\n\nVous pouvez continuer à user {{SITENAME}} sans nom ou vous pouvez connecter encore une fois avec le même nom ou un autre nom.\nNotez: certaines pages pourriont être vues comme si vous êtes connecté, jusqu'à vous videz l'information de votre navigateur.",
+       "welcomeuser": "Bienvenue, $1!",
        "yourname": "Nom d'useur:",
+       "userlogin-yourname": "Nom d'useur:",
+       "userlogin-yourname-ph": "Entres ton nom d'utilisateur",
+       "createacct-another-username-ph": "Entres le nom d'utilisateur",
        "yourpassword": "Mot de passe:",
+       "userlogin-yourpassword": "Mot de passe",
+       "userlogin-yourpassword-ph": "Entres ton mot de passe",
+       "createacct-yourpassword-ph": "Entres un mot de passe",
        "yourpasswordagain": "Mot de passe encore:",
+       "createacct-yourpasswordagain": "Confirmes le mot de passe",
+       "createacct-yourpasswordagain-ph": "Entres à nouveau le mot de passe",
        "remembermypassword": "Garder mon mot de passe dans cette browser (pour un maximum of $1 {{PLURAL:$1|jour|jours}})",
        "yourdomainname": "Votre domaine:",
        "externaldberror": "Soit y avait une erreur avec la base d'information de certification extérieur, soit vous avez pas la permission de renouveler votre compte extérieur.",
        "gotaccount": "Vous avez un compte déjà? '''$1'''.",
        "gotaccountlink": "Connectez",
        "userlogin-resetlink": "Oublié vôtre détailes de log in?",
+       "createacct-emailrequired": "Adresse d'email",
+       "createacct-emailoptional": "Adresse d'email (optional)",
+       "createacct-email-ph": "Entres t'adresse d'email",
+       "createacct-another-email-ph": "Entres adresse d'email",
        "createaccountmail": "par e-mail",
+       "createaccountreason": "Raison:",
+       "createacct-reason": "Raison",
+       "createacct-reason-ph": "Pourquoi crées-tu un autre compte",
        "badretype": "Les mots de passe que vous avez mis sont pas pareils.",
        "userexists": "Le nom d'useur choisi est déjà usé.  Choissez donc un autre nom.",
        "loginerror": "Erreur d'identification",
-       "nocookiesnew": "Votre compte a été créé, mais vous êtes pas connecté.  {{SITENAME}} use les cookies pour connecter les useurs.  Partez les cookies et connectez avec votre nouveau nom d'useur et votre mot de passe, s'il vous plaît.",
+       "createacct-error": "Erreur lors de la création du compte",
+       "createaccounterror": "Impossible de créer le compte: $1",
+       "nocookiesnew": "Ton compte a été créé, mais tu es pas connecté{{GENDER:||e|(e)}}.  {{SITENAME}} use les cookies pour connecter les useurs.  Partes les cookies et connectes avec ton nouveau nom d'useur et ton mot de passe.",
        "nocookieslogin": "{{SITENAME}} use les cookies pour connecter les useurs.  Partez donc les cookies et assayez encore.",
        "nocookiesfornew": "Le conte d'useur n'était pas fait, à cause qu'on pouvait pas confirmer la source.  Ensurer que tu as des cookies, reload ce page et essayer encore.",
        "noname": "Vous avez pas mis un bon nom d'useur.",
        "accountcreated": "Compte créé",
        "accountcreatedtext": "Le compte d'useur pour $1 a été créé.",
        "loginlanguagelabel": "Langue: $1",
+       "pt-login": "Te connecter",
+       "pt-login-button": "Te connecter",
+       "pt-createaccount": "Créer un compte",
+       "pt-userlogout": "Te déconnecter",
        "resetpass_announce": "Pour le moment, vous êtes connecté avec un mot de passe qu'a été envoyé par e-mail.  Pour finir de vous connecter, il faut créer un nouveau mot de passe ici:",
        "resetpass_text": "<!-- Mettez du texte ici -->",
        "resetpass_header": "Rétablir le mot de passe",
+       "oldpassword": "Dépassé mot de passe:",
        "resetpass_submit": "Créer le mot de passe et connecter",
        "changepassword-success": "Vous avez bien changé votre mot de passe!  On est après vous connecter...",
        "resetpass_forbidden": "Vous pouvez pas changer votre mot de passe sus ce wiki ici.",
+       "resetpass-submit-loggedin": "Changer de mot de passe",
+       "resetpass-submit-cancel": "Annuler",
+       "resetpass-wrong-oldpass": "Mot de passe actuel ou temporaire invalide.\nTu as peut-être déjà changé ton mot de passe ou demandé un nouveau mot de passe temporaire.",
+       "resetpass-recycled": "Veuilles réinitialiser ton mot de passe à quelque chose d’autre que l’actuel.",
+       "resetpass-temp-password": "Mot de passe temporaire:",
+       "passwordreset-username": "Nom d'useur:",
+       "passwordreset-domain": "Domaine:",
+       "passwordreset-capture": "Regarder l'email résultant?",
+       "passwordreset-email": "Adresse d'email:",
+       "changeemail-none": "(aucun)",
+       "changeemail-password": "Ton mot de passe sur {{SITENAME}}:",
+       "changeemail-submit": "Changer l’adresse d'email",
        "bold_sample": "Gras",
        "bold_tip": "Gras",
        "italic_sample": "Italique",
        "permissionserrorstext": "Vous avez pas la permission de faire ça pour {{PLURAL:$1|cette raison|ces raisons}}:",
        "permissionserrorstext-withaction": "Vous avez pas la permission de faire ça pour {{PLURAL:$1|cette raison|ces raisons}}:",
        "recreate-moveddeleted-warn": "'''Attention: Vous êtes après recréer une page qu'a déjà été ôtée.'''\n\nVous devrait considérer si c'est à propos de continuer à changer cette page.\nLes notes d'ôtage pour cette page sont données ici pour vous aider:",
+       "postedit-confirmation-restored": "La page a été restaurée.",
+       "postedit-confirmation-saved": "Ton changement a été cachée.",
+       "edit-already-exists": "La nouvelle page a pas pu être créée.\nAlle existe déjà.",
+       "defaultmessagetext": "Message par défaut",
+       "content-model-text": "texte brut",
+       "content-model-javascript": "JavaScript",
+       "content-json-empty-object": "Objet vide",
+       "content-json-empty-array": "Tableau vide",
        "undo-success": "Le changement peut être renversé.  Regardez donc la comparaison en bas pour être sûr que c'est comme vous voulez, et puis sauvez les changements en bas pour finir le renversage du changement.",
        "undo-failure": "Le changement pouvait pas être renversé à cause d'une dispute de changements.",
        "undo-summary": "Défaire la révision $1 par [[Special:Contributions/$2|$2]] ([[User talk:$2|Discussion]])",
        "revdelete-submit": "Appliquer à la version choisie",
        "revdelete-success": "'''Vous avez bien changé la visibilité des versions.'''",
        "logdelete-success": "'''Vous avez bien changé la visibilité des événements.'''",
+       "mergehistory-reason": "Raison:",
+       "mergelog": "Journal des fusions",
        "lineno": "Ligne $1:",
        "compareselectedversions": "Comparer les versions choisies",
        "editundo": "renverser",
        "searchresults": "Résultats de la charche",
        "searchresults-title": "Résultats de charche pour « $1 »",
+       "nextn": "{{PLURAL:$1|suivante|$1 suivantes}}",
+       "prevn-title": "$1 {{PLURAL:$1|résultat dernier|résultats derniers}}",
+       "nextn-title": "$1 {{PLURAL:$1|résultat suivant|résultats suivants}}",
+       "viewprevnext": "Regarder ($1 {{int:pipe-separator}} $2) ($3).",
        "searchprofile-everything": "Tout",
+       "searchprofile-advanced": "Charche avancée",
+       "searchprofile-articles-tooltip": "Charcher dans $1",
+       "searchprofile-images-tooltip": "Charcher des fichiers multimédias",
+       "searchprofile-everything-tooltip": "Charcher dans tout le site (y compris dans les pages de discussion)",
+       "searchprofile-advanced-tooltip": "Choisir les espaces de noms pour la charche",
        "search-result-size": "$1 ({{PLURAL:$2|1 mot|$2 mots}})",
+       "search-result-category-size": "$1 membre{{PLURAL:$1||s}} ($2 sous-classe{{PLURAL:$2||s}}, $3 fichier{{PLURAL:$3||s}})",
+       "searchall": "tout",
+       "powersearch-toggleall": "Tout",
+       "powersearch-togglenone": "Aucun",
        "preferences": "Réglage",
        "mypreferences": "Mon réglage",
        "skin-preview": "Vue d'avance",
+       "prefs-user-pages": "Pages d'useur",
+       "prefs-personal": "Profil d'useur",
+       "prefs-rc": "Changements récents",
+       "prefs-watchlist": "Liste de suivi",
+       "prefs-email": "Option des emails",
+       "prefs-rendering": "Apparence",
+       "searchresultshead": "Charcher",
+       "localtime": "Heure locale:",
+       "timezoneregion-asia": "Asie",
+       "timezoneregion-atlantic": "Océan atlantique",
+       "timezoneregion-australia": "Australie",
+       "timezoneregion-europe": "Europe",
+       "timezoneregion-indian": "Océan indien",
+       "timezoneregion-pacific": "Océan pacifique",
+       "prefs-searchoptions": "Charche",
+       "prefs-namespaces": "Espaces des noms",
+       "default": "défaut",
+       "prefs-files": "Fichiers",
        "prefs-custom-css": "Custom CSS",
        "prefs-custom-js": "Custom JavaScript",
-       "youremail": "E-mail:",
+       "youremail": "Email:",
        "username": "Nom d'useur:",
        "yourrealname": "Vrai nom:",
        "yourlanguage": "Langue:",
        "yournick": "'Tit nom:",
        "badsig": "Votre signature brute est pas bonne.  Regardez-voir les tags HTML.",
        "badsiglength": "Votre 'tit nom est trop long.  Il faut que ça soye moins que $1 caractères.",
-       "gender-male": "Male",
-       "gender-female": "Female",
+       "gender-unknown": "Je préfère pas l’indiquer",
+       "gender-male": "Il change des pages du wiki",
+       "gender-female": "Alle change des pages du wiki",
+       "email": "Email",
        "prefs-help-realname": "Votre vrai nom est pas nécessaire.  Si vous choisirait de le mettre, ça serait usé pour vous donner du crédit pour votre ouvrage.",
        "prefs-help-email": "Votre adresse e-mail est pas nécessaire, mais ça quitte le monde vous contacter par votre page d'useur ou votre page de discussion sans montrer votre identité.",
+       "prefs-dateformat": "Format des dates",
+       "prefs-advancedrc": "Options avancées",
+       "prefs-advancedrendering": "Options avancées",
+       "prefs-advancedsearchoptions": "Options avancées",
+       "prefs-advancedwatchlist": "Options avancées",
        "editinguser": "Changement de '''[[User:$1|$1]]''' ([[User talk:$1|{{int:talkpagelinktext}}]] | [[Special:Contributions/$1|{{int:contribslink}}]])",
+       "userrights-reason": "Raison:",
+       "group": "Groupe:",
+       "group-user": "Useurs",
+       "group-all": "(tous)",
+       "group-bot-member": "{{GENDER:$1|robot}}",
+       "group-sysop-member": "{{GENDER:$1|administrateur|administratrice}}",
+       "group-bureaucrat-member": "{{GENDER:$1|bureaucrate}}",
+       "grouppage-bot": "{{ns:project}}:Robots",
+       "grouppage-sysop": "{{ns:project}}:Administrateurs",
+       "grouppage-bureaucrat": "{{ns:project}}:Bureaucrates",
+       "right-read": "Lire les pages",
+       "right-edit": "Changer les pages",
+       "right-createpage": "Créer des pages (qui sont pas des pages de discussion)",
+       "right-createtalk": "Créer des pages de discussion",
+       "right-createaccount": "Créer des comptes useur",
+       "right-minoredit": "Marquer ses changements comme mineures",
+       "right-move": "Renommer des pages",
+       "right-move-subpages": "Renommer des pages avec leurs sous-pages",
+       "right-move-rootuserpages": "Renommer la page principale d'un useur",
+       "right-move-categorypages": "Renommer des pages de classe",
+       "right-movefile": "Renommer des fichiers",
+       "right-delete": "Effacer des pages",
+       "right-unblockself": "Te débloquer toi-même",
+       "right-editinterface": "Changer l'interface useur",
+       "action-read": "lire cette page",
        "action-edit": "Faire un changement",
+       "action-createpage": "créer des pages",
+       "action-createtalk": "créer des pages de discussion",
+       "action-createaccount": "créer ce compte useur",
+       "action-minoredit": "marquer cette changement comme mineure",
+       "action-move": "renommer cette page",
+       "action-move-subpages": "renommer cette page et ses sous-pages",
+       "action-move-rootuserpages": "renommer la page principale d'un useur",
+       "action-move-categorypages": "renommer des pages de classe",
+       "action-movefile": "renommer ce fichier",
+       "action-delete": "effacer cette page",
+       "action-deleterevision": "effacer cette version",
+       "action-browsearchive": "charcher des pages effacées",
+       "action-undelete": "restaurer cette page",
+       "action-sendemail": "envoyer des emails",
+       "nchanges": "$1 changement{{PLURAL:$1||s}}",
        "recentchanges": "Changements récent",
+       "rcshowhidebots": "$1 les robots",
        "rcshowhidepatr": "$1 les modifications patrouillés",
+       "minoreditletter": "m",
+       "newpageletter": "N",
+       "boteditletter": "b",
+       "recentchangeslinked-page": "Nom de la page:",
+       "filename": "Nom du fichier",
+       "filedesc": "Sommaire",
+       "fileuploadsummary": "Sommaire:",
+       "filereuploadsummary": "Changements du fichier:",
+       "filestatus": "Statut du droit d'auteur:",
+       "filesource": "Source:",
+       "ignorewarning": "Ignorer l'avertissement et sauvegarder le fichier quand même",
+       "ignorewarnings": "Ignorer les avertissements",
+       "backend-fail-notexists": "Le fichier $1 existe pas.",
+       "imgfile": "fichier",
+       "listfiles": "Liste de fichiers",
+       "listfiles_thumb": "Miniature",
+       "listfiles_date": "Date",
+       "listfiles_name": "Nom",
+       "listfiles_user": "Useur",
+       "listfiles_description": "Description",
+       "listfiles_count": "Versions",
+       "listfiles-latestversion-yes": "Oui",
+       "listfiles-latestversion-no": "Non",
        "file-anchor-link": "Dossier",
+       "filehist-deleteall": "effacer tout",
+       "filehist-deleteone": "effacer",
+       "filehist-user": "Useur",
+       "shared-repo-from": "de: $1",
+       "filerevert-comment": "Raison:",
+       "filedelete": "Effacer $1",
+       "filedelete-legend": "Effacer le fichier",
+       "filedelete-comment": "Raison:",
+       "filedelete-submit": "Effacer",
+       "filedelete-success": "'''$1''' a été effacé.",
+       "filedelete-nofile": "'''$1''' existe pas.",
        "randompage": "Page au hasard",
+       "randomincategory-category": "Classe:",
+       "statistics-pages": "Pages",
+       "pageswithprop-submit": "Aller",
+       "brokenredirects-edit": "changer",
+       "brokenredirects-delete": "effacer",
+       "withoutinterwiki": "Pages sans liens inter-langues",
        "nbytes": "$1 octet{{PLURAL:$1||s}}",
+       "ncategories": "$1 classe{{PLURAL:$1||s}}",
+       "ninterwikis": "$1 {{PLURAL:$1|interwiki|interwikis}}",
+       "nlinks": "$1 {{PLURAL:$1|page liée|pages liées}}",
+       "nmembers": "$1 membre{{PLURAL:$1||s}}",
+       "nmemberschanged": "$1 → $2 {{PLURAL:$2|membre|membres}}",
+       "unusedcategories": "Classes inutilisées",
+       "unusedimages": "Fichiers orphelins",
+       "protectedpages-page": "Page",
+       "protectedpages-reason": "Raison",
+       "newpages-username": "Nom d'useur:",
+       "ancientpages": "Pages les plus anciennement changées",
        "move": "Renommer",
        "movethispage": "Renommer cette page",
+       "allpagessubmit": "Aller",
        "categories": "Classes",
-       "emailuser": "E-mail cet useur",
+       "special-categories-sort-count": "tri par nombre d'éléments",
+       "special-categories-sort-abc": "tri alphabétique",
+       "deletedcontributions": "Contributions effacées des useurs",
+       "deletedcontributions-title": "Contributions effacées des useurs",
+       "sp-deletedcontributions-contribs": "contributions",
+       "linksearch": "Charche de liens externes",
+       "linksearch-ns": "Espace de noms:",
+       "linksearch-ok": "Charcher",
+       "listusers-noresult": "Aucun useur trouvé.",
+       "listusers-blocked": "(bloqué{{GENDER:$1||e|(e)}})",
+       "listgrouprights-namespaceprotection-namespace": "Espace de noms",
+       "trackingcategories-name": "Nom du message",
+       "emailuser": "Emailer cet useur",
+       "emailuser-title-target": "Emailer {{GENDER:$1|cet useur|cette useuse}}",
+       "emailuser-title-notarget": "Emailer useur",
+       "emailpage": "Emailer useur",
+       "noemailtitle": "Aucune adresse d'email",
+       "emailusername": "Nom d'useur:",
+       "emailfrom": "De:",
+       "emailto": "À:",
+       "emailmessage": "Message:",
+       "emailsend": "Envoyer",
        "watchlist": "Mes pages guettées",
        "mywatchlist": "Mes pages guettées",
+       "watchlistfor2": "Pour $1 $2",
        "watch": "Guetter",
+       "watchthispage": "Guetter cette page",
        "unwatch": "guettez p'us",
+       "unwatchthispage": "Ne plus guetter",
+       "enotif_subject_deleted": "La page $1 sur {{SITENAME}} a été effacée par {{GENDER:$2|$2}}",
+       "enotif_subject_created": "La page $1 sur {{SITENAME}} a été créée par {{GENDER:$2|$2}}",
+       "enotif_subject_moved": "La page $1 sur {{SITENAME}} a été renommée par {{GENDER:$2|$2}}",
+       "enotif_subject_restored": "La page $1 sur {{SITENAME}} a été restaurée par {{GENDER:$2|$2}}",
+       "enotif_subject_changed": "La page $1 sur {{SITENAME}} a été changée par {{GENDER:$2|$2}}",
+       "enotif_body_intro_deleted": "La page $1 sur {{SITENAME}} a été effacée le $PAGEEDITDATE par {{gender:$2|$2}}, regarder $3 pour la révision actuelle.",
+       "enotif_body_intro_created": "La page $1 sur {{SITENAME}} a été créée le $PAGEEDITDATE par {{GENDER:$2|$2}}, regarder $3 pour la révision actuelle.",
+       "deletepage": "Effacer la page",
+       "delete-confirm": "Effacer \"$1\"",
+       "delete-legend": "Effacer",
+       "deletecomment": "Raison:",
+       "deleteotherreason": "Raison autre ou supplémentaire:",
+       "deletereasonotherlist": "Autre raison",
+       "protectcomment": "Raison:",
+       "restriction-edit": "Changer",
+       "restriction-move": "Renommer",
+       "restriction-create": "Créer",
+       "undelete": "Regarder les pages effacées",
+       "undeletepage": "Regarder et restaurer des pages effacées",
+       "viewdeletedpage": "Regarder les pages effacées",
+       "undeletebtn": "Restaurer",
+       "undeleteviewlink": "regarder",
+       "undeletecomment": "Raison:",
+       "undelete-search-submit": "Charcher",
+       "undelete-show-file-submit": "Oui",
+       "namespace": "Espace de noms:",
        "blanknamespace": "(Principal)",
        "contributions": "Changements de l'useur",
        "mycontris": "Mes changements",
+       "uctop": "(actuel)",
        "sp-contributions-talk": "Discuter",
+       "sp-contributions-submit": "Charcher",
+       "whatlinkshere-page": "Page:",
+       "whatlinkshere-links": "← liens",
+       "whatlinkshere-hidelinks": "$1 les liens",
+       "block": "Bloquer l’useur",
+       "unblock": "Débloquer l’useur",
+       "blockip": "Bloquer l’{{GENDER:$1|useur|useuse}}",
+       "blockip-legend": "Bloquer l’useur",
+       "ipbreason": "Raison:",
+       "ipb-unblock-addr": "Débloquer $1",
+       "ipb-unblock": "Débloquer un compte useur ou une adresse IP",
+       "unblockip": "Débloquer l’useur",
        "ipblocklist": "Useurs bloqués",
        "blocklink": "bloquer",
        "contribslink": "changes",
        "tooltip-n-randompage": "Afficher un page au hasard",
        "tooltip-n-help": "La place pour savoir",
        "tooltip-t-specialpages": "Liste de tout les pages speciales",
-       "bad_image_list": "Le format est le suivant :\n\nSeules les listes d’énumération (commençant par *) sont prises en compte. Le premier lien d’une ligne doit être celui d’une mauvaise image.\nLes autres liens sur la même ligne sont considérés comme des exceptions, par exemple des pages sur lesquelles l’image peut apparaître."
+       "bad_image_list": "Le format est le suivant :\n\nSeules les listes d’énumération (commençant par *) sont prises en compte. Le premier lien d’une ligne doit être celui d’une mauvaise image.\nLes autres liens sur la même ligne sont considérés comme des exceptions, par exemple des pages sur lesquelles l’image peut apparaître.",
+       "redirect-file": "Nom du fichier"
 }
index f51c68a..f06d070 100644 (file)
        "redirectedfrom": "(Witergleitet vun $1)",
        "redirectpagesub": "Umgleiteti Syte",
        "redirectto": "Wyterleitig uf:",
-       "lastmodifiedat": "Letschti Änderig vo dere Syte: $2, $1<br />",
+       "lastmodifiedat": "Letschti Änderig vo dere Syte: $2, $1",
        "viewcount": "Die Syte isch {{PLURAL:$1|eimol|$1 Mol}} bsuecht wore.",
        "protectedpage": "Gschützti Syte",
        "jumpto": "Gump zue:",
        "delete-toobig": "Die Syte het e arg langi Versionsgschicht mit meh as $1 {{PLURAL:$1|Version|Versione}}. S Lesche vu sonige Syte isch yygschränkt wore go verhindere, ass dr Server vu {{SITENAME}} us Versäh zytwys iberlaschtet wird.",
        "delete-warning-toobig": "Die Syte het e arg langi Versionsgschicht mit meh as $1 {{PLURAL:$1|Version|Versione}}. S Lesche cha dr Datebankbetriib vu {{SITENAME}} stere.",
        "rollback": "Zrucksetze vu dr Änderige",
-       "rollback_short": "Zrucksetze",
        "rollbacklink": "Zrüggsetze",
        "rollbacklinkcount": "{{PLURAL:$1|Ei Version|$1 Versione}} zrucksetze",
        "rollbacklinkcount-morethan": "Meh wie {{PLURAL:$1|ei Version|$1 Versione}} zrucksetze",
        "import-logentry-interwiki": "„$1“ isch importiert worde (Transwiki)",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|Version|Versione}} vo $2",
        "javascripttest": "JavaScript-Tescht",
-       "javascripttest-title": "$1-Tescht wäre durgfiert",
        "javascripttest-pagetext-noframework": "Die Syte isch reserviert fir JavaSkript-Tescht.",
        "javascripttest-pagetext-unknownframework": "Nit bekannt Framework „$1“.",
        "javascripttest-pagetext-frameworks": "Bitte eis vu däne Framework uuswehle: $1",
        "javascripttest-pagetext-skins": "Wehl e Benutzeroberflechi uus fir d Durfierig vu dr Tescht:",
        "javascripttest-qunit-intro": "Lueg d [$1 Dokumentation zue Tescht] uf mediawiki.org",
-       "javascripttest-qunit-heading": "MediaWiki-JavaSkript-QUnit-Teschter",
        "tooltip-pt-userpage": "Dyyni Benutzersyte",
        "tooltip-pt-anonuserpage": "D Benutzersyte vo der IP-Adress wo du mit schaffsch",
        "tooltip-pt-mytalk": "Dyyni Diskussionssyte",
index 08f80e2..0f08d99 100644 (file)
        "uploaderror": "שגיאה בהעלאת הקובץ",
        "upload-recreate-warning": "'''אזהרה: קובץ בשם זה נמחק או הועבר.'''\n\nיומני המחיקות וההעברות של הדף מוצגים להלן:",
        "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|טקסט תיאור]]</nowiki></code>''' לשימוש בגרסה מוקטנת ברוחב 200 פיקסלים בתיבה בצד שמאל של הדף, עם 'טקסט תיאור' כתיאור\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' לקישור ישיר לקובץ בלי להציגו",
-       "upload-permitted": "סוגי קבצים מותרים: $1.",
-       "upload-preferred": "סוגי קבצים מומלצים: $1.",
-       "upload-prohibited": "סוגי קבצים אסורים: $1.",
+       "upload-permitted": "{{PLURAL:$2|סוג קובץ מותר|סוגי קבצים מותרים}}: $1.",
+       "upload-preferred": "{{PLURAL:$2|סוג קובץ מומלץ|סוגי קבצים מומלצים}}: $1.",
+       "upload-prohibited": "{{PLURAL:$2|סוג קובץ אסור|סוגי קבצים אסורים}}: $1.",
        "uploadlogpage": "יומן העלאות",
        "uploadlogpagetext": "להלן רשימה של העלאות הקבצים האחרונות שבוצעו.\nראו את [[Special:NewFiles|גלריית הקבצים החדשים]] להצגה ויזואלית שלהם.",
        "filename": "שם הקובץ",
        "allarticles": "כל הדפים",
        "allinnamespace": "כל הדפים (מרחב שם $1)",
        "allpagessubmit": "הצגה",
-       "allpagesprefix": "הדפים ששמם מתחיל ב:",
+       "allpagesprefix": "הדפים ששמם מתחיל ב־:",
        "allpagesbadtitle": "כותרת הדף שניתנה הייתה בלתי־תקינה או שהייתה בה קידומת של קישור לשפה אחרת או לוויקי אחר.\nייתכן שהיא מכילה תו אחד או יותר האסורים לשימוש בכותרות.",
        "allpages-bad-ns": "מרחב השם \"$1\" לא קיים ב{{grammar:תחילית|{{SITENAME}}}}.",
        "allpages-hide-redirects": "הסתרת הפניות",
index 6b6bdd1..7a874fc 100644 (file)
@@ -28,6 +28,7 @@
        "tog-watchdefault": "Ham se badla gais panna aur file ke hamaar dhyaan suchi me jorro",
        "tog-watchmoves": "Uu panna aur file jiske naam ham badla hai ke hamaar dhyaan suchi me jorro",
        "tog-watchdeletion": "Uu panna, aur file jiske ham mitaya hai ke hamaar dhyaan suchi me jorro",
+       "tog-watchrollback": "Uu panna ke jorro jisme ham aapan watchlist me rollback karaa hae",
        "tog-minordefault": "Mamuli badlao ke apne se nishaan lagao",
        "tog-previewontop": "Badlao waala dabba se pahile ek jhalak dekhao",
        "tog-previewonfirst": "Hamaar pahila badlao pe jhalak dekhao",
        "permalink": "Pakka jorr",
        "print": "Print karo",
        "view": "Dekho",
+       "view-foreign": "$1 pe dekho",
        "edit": "Badlo",
+       "edit-local": "Local description ke badlo",
        "create": "Banao",
+       "create-local": "Local description ke jorro",
        "editthispage": "Ii panna ke badlo",
        "create-this-page": "Ii panna ke banao",
        "delete": "Mitao",
        "otherlanguages": "Duusra bhasa me",
        "redirectedfrom": "($1 se bheja gais)",
        "redirectpagesub": "Panna ke redirect karo",
+       "redirectto": "Hian redirect karo:",
        "lastmodifiedat": "Ii panna ke $1, ke $2 pichhla time badla gais rahaa.",
        "viewcount": "Ii panna ke {{PLURAL:$1|ek dafe|$1 dafe}} dekha gais hai.",
        "protectedpage": "Bachawal panna",
        "jumptonavigation": "navigation",
        "jumptosearch": "khojo",
        "view-pool-error": "Maaf karna, abhi sab server busy hae.\nBahut dher sadasya ii panna ke dekhe maange hae.\nMeharbani kar ke, thora deri sabur kar ke ii panna ke fir se kholo.\n\n$1",
+       "generic-pool-error": "Maaf karna, abhi sab server busy hae.\nBahut dher sadasya ii panna ke dekhe maange hae.\nMeharbani kar ke, thora deri sabur kar ke ii panna ke fir se kholo.",
        "pool-timeout": "Lock ke wait kare waala time khalaas hoe gais hae",
        "pool-queuefull": "Pool ke line bhar gais hae",
        "pool-errorunknown": "Pata nahi kaisan galti hae",
+       "pool-servererror": "Pool counter sewa abhi ready nai hae ($1).",
+       "poolcounter-usage-error": "Kaam me lae pe karrbarr: $1",
        "aboutsite": "{{SITENAME}} ke baare me",
        "aboutpage": "Project:Ke baare me",
        "copyright": "Agar duusra kaaran nai dewa gais hae, tab aap ii panna me likha gae chij ke aap $1 ke niche kaam me lae sakta hai.",
        "youhavenewmessages": "Aapke pass hai $1 ($2).",
        "youhavenewmessagesfromusers": "Aap ke lage {{PLURAL:$3|duusra sadasya|$3 sadasya}} ke lage se $1 hae ($2).",
        "youhavenewmessagesmanyusers": "Aap ke lage dher sadasya se $1 hae ($2).",
-       "newmessageslinkplural": "{{PLURAL:$1|ek nawaa sandes|nawaa sandes}}",
-       "newmessagesdifflinkplural": "pichhla {{PLURAL:$1|badlao}}",
+       "newmessageslinkplural": "{{PLURAL:$1|ek nawaa sandes|999=nawaa sandes}}",
+       "newmessagesdifflinkplural": "pichhla{{PLURAL:$1|badlao|999=badlao}}",
        "youhavenewmessagesmulti": "Aap ke khatir $1 pe sandes hai",
        "editsection": "badlo",
        "editold": "badlao",
        "hidetoc": "chupao",
        "collapsible-collapse": "Chhota karo",
        "collapsible-expand": "Barraa karo",
+       "confirmable-confirm": "Kon{{GENDER:$1|aap}} sure hae?",
+       "confirmable-yes": "Haan",
+       "confirmable-no": "Nai",
        "thisisdeleted": "Dekho ki $1 ke pahile jaise karo?",
        "viewdeleted": "$1 ke dekho?",
        "restorelink": "{{PLURAL:$1|ek mitawal badlao|$1 mitawal badlao}}",
        "filerenameerror": "File \"$1\" ke naam badal ke \"$2\" nai kare sakaa.",
        "filedeleteerror": "File \"$1\" ke nai mitae sakaa.",
        "directorycreateerror": "Directory \"$1\" ke nai banae sakaa.",
+       "directoryreadonlyerror": "Directory \"$1\" khaali parrhe ke khatir hae.",
+       "directorynotreadableerror": "Directory \"$1\" ke parrha nai jaae sake hae.",
        "filenotfound": "File \"$1\" ke nai pae sakaa.",
        "unexpected": "Aasa karaa gais jaankari nai hai: \"$1\"=\"$2\".",
        "formerror": "Galti: form ke submit nai kare sakaa",
        "viewsourcetext": "Aap ii panna ke source ke dekhe aur nakal utare kare sakta hai:",
        "viewyourtext": "Aap '''aapan badlao''' ke source ke dekhe aur copy kare saktaa hae",
        "protectedinterface": "Ii panna, ii wiki ke khatir, software ke interface text dewe hai, aur iske barbaadi se roke ke khatir band kar dewa gais hai.\nSab wiki me anuwaad ke jorre nai to badle ke khatir, meharbaani kar ke [//translatewiki.net/ translatewiki.net], the MediaWiki localisation project ke kaam me laao.",
-       "editinginterface": "'''Chetawani:''' Aap ek panna ke badaltaa hai jon ki software ke interface text dewe hae.\nIi panna me badlao ke asar duusra sadasya ke interface pe bhi hoi.\nTranslation khatir [//translatewiki.net/ translatewiki.net], the MediaWiki localisation project, ke kaam me lao.",
+       "editinginterface": "'''Chetawani:''' Aap ek panna ke badaltaa hai jon ki software ke interface text dewe hae.\nIi panna me badlao ke asar duusra sadasya ke interface pe bhi hoi.",
+       "translateinterface": "Sab wiki me translate kare ke khatir [//translatewiki.net/translatewiki.net], the MediaWiki localisation project, ke kaam me lao.",
        "cascadeprotected": "Ii panna ke badlao se bachawa gais hai, kahe ki iske {{PLURAL:$1|panna, jon ki|panna, jon ki}} surakchhit hae \"cascading\" option turned on ke saathe me rakkhaa gais hai:\n$2",
        "namespaceprotected": "Aap ke paas '''$1''' namespace me panna ke badle ke adhikar nai hai.",
        "customcssprotected": "Aap ke ii CSS panna ke badle ke ijaajat nai hae, kaahe ki isme duusra sadasya ke personal settings hae.",
        "invalidtitle-unknownnamespace": "Title gaer kaanuni hae aur iske namespace number \"$1\" aur text \"$2\" ke nai jaana jaawe hae",
        "exception-nologin": "Logged in nai hae",
        "exception-nologin-text": "Ii panna nai to aap ke action ke khatir ii wiki me login hoe ke jarurui hae",
+       "exception-nologin-text-manual": "Ii panna ke khole, nai to ii action ke kare ke khatir $1 karo.",
        "virus-badscanner": "Kharaab ruup dewa gais hae: virus khoje waala software nawaa hae: ''$1''",
        "virus-scanfailed": "scan fail hoe gais (code $1)",
        "virus-unknownscanner": "jaana waala antivirus nai hai:",
        "gotaccount": "Aap ke pas pahile se account hai ki nai? '''$1'''.",
        "gotaccountlink": "Log in",
        "userlogin-resetlink": "Ka aap aapan login kare waala jaankari ke bhulae gaya hae?",
-       "userlogin-resetpassword-link": "Aapan password ke reset karo",
+       "userlogin-resetpassword-link": "Aapan password ke bhool gayaa?",
+       "userlogin-helplink2": "Log in kare ke khatir madat.",
+       "userlogin-loggedin": "Aap {{GENDER:$1|$1}} ke naam ke niche login bhayaa hae.\nNiche ke form ke kaam me laae ke duusra naam ke niche login ho.",
+       "userlogin-createanother": "Duusra account banao",
        "createacct-emailrequired": "Email address",
        "createacct-emailoptional": "Email address (jaruri nai hae)",
        "createacct-email-ph": "Aapan mail address ke likho",
        "passwordtooshort": "Password me kamti se kamti {{PLURAL:$1|1 character|$1 characters}} hoe ke chahi.",
        "password-name-match": "Aap ke password ke aap ke username se different rahe ke chaahi.",
        "password-login-forbidden": "Ii sadasya ke naam aur password ke kaam me laae ke ijaajat nai hae.",
-       "mailmypassword": "Nawaa password ke E-mail karo",
+       "mailmypassword": "Password ke badlo",
        "passwordremindertitle": "{{SITENAME}} ke khatir nawaa temporary password",
        "passwordremindertext": "Koi (hoe sake hai aap, IP address $1 se)\n{{SITENAME}} ($4) ke khatir nawaa password mangis hai.\n\"$2\" ke banae ke \"$3\" se set kar dewa gais hai. Agar aap ii chij mangta rahaa,\ntab aap ke abhi login kar ke password badle ke chaahi.\nAap ke temporary password {{PLURAL:$5|ek din|$5 din}} me expire hoi.\n\nAgar jo aur koi ii request karis hai, nai to aap aapan password yaad kar liya hai aur nai badle mangta hai, tab ii sandes ke ignore kar do aur aapan purana password use karte raho.",
        "noemail": "Sadasya \"$1\" ke koi e-mail address recorded nai hai.",
        "noemailcreate": "Aap ke thiik e-mail address de ke parrii",
        "passwordsent": "Ek nawaa password ke \"$1\" ke registered e-mail pe bheja gais hai. Meharbaani kar ke aap password mile ke baad login karna.",
        "blocked-mailpassword": "Aap ke IP address ke block kar dewa gais hai, aur iske kaaran aap ke password recovery function kaam me lae ke ijajat nai hai,",
-       "eauthentsent": "Ek confirmation e-mail aap ke dewa gae e-mail address be bhej dewa gais hai. Aur mail ii account pe bheje se pahile e-mail me likha instructions ke follow karo, ii confirm kare ke khatir ki account aap ke hai.",
+       "eauthentsent": "Ek confirmation e-mail aap ke dewa gae e-mail address pe bhej dewa gais hai. Aur mail ii account pe bheje se pahile e-mail me likha instructions ke follow karo, ii confirm kare ke khatir ki account aap ke hai.",
        "throttled-mailpassword": "Ek password reset Email ke pahile bheja gais hae, pichhle  {{PLURAL:$1|ghanta|$1 ghanta}} me bhej me.\nAbuse ke roke ke khatir, khali ek password reminer har {{PLURAL:$1|ghanta|$1 ghanta}} me bheja jaai.",
        "mailerror": "Mail bheje me galti hoe gais hai: $1",
        "acct_creation_throttle_hit": "Ii wiki me visitors log aap ke IP address ke use kar ke {{PLURAL:$1|1 account|$1 accounts}}, pichhle kuch din me, banae liin hai, jis se jaada ii time nai banawa jaae sake hai.\nIi kaaran se visitors log jon ki ii IP address use kare hai, ke aur account banae ke ijajat nai hai.",
-       "emailauthenticated": "Aap ke e-mail address ke $2 ke roj aur $3 baje authenticate karaa gais rahaa.",
-       "emailnotauthenticated": "Aap ke e-mail address ke abi tak authenticate nai gais hai.\nIi sab feature khatir koi e-mail nai bheja jaai.",
+       "emailauthenticated": "Aap ke e-mail address ke $2 ke roj aur $3 baje confirm karaa gais rahaa.",
+       "emailnotauthenticated": "Aap ke e-mail address ke abi tak authenticate nai karaagais hai.\nIi sab feature khatir koi e-mail nai bheja jaai.",
        "noemailprefs": "Ii sab feature ke kaam kare khatir e-mail specify karo.",
        "emailconfirmlink": "aapan e-mail address ke confirm karo",
        "invalidemailaddress": "E-mail address ke nai lewa jae sake hai kahe ki iske format kharaab hai.\nMeharbaani kar ke achchha address ke enter karo nai to uu field ke khali kar do.",
        "createaccount-text": "Koi aap ke e-mail katir {{SITENAME}} ($4) named \"$2\" me account banais hai jiske password hai \"$3\".\nAap ke chaahi ki aap login kar ke password ke badal do.\nAgar ii account galti se banaa hai tab ii sandes ke ignore kar do.",
        "login-throttled": "Aap bahut jaada dafe ii account ke password ke enter kare ke kosis karaa hae.\n$1 talak wait kar ke fir se try karo.",
        "login-abort-generic": "Aap ke login nai chalaa - Aborted",
+       "login-migrated-generic": "Aap ke account ke update kare ke kaaran, aap ke username ab nai hae.",
        "loginlanguagelabel": "Bhasa: $1",
        "suspicious-userlogout": "Aap ke log out kare ke maang ke na kar dewa gais hae kaahe ki ii janaawe hae ki ii maang ke ek tuuta browser nai to caching proxy bhejis hae.",
        "createacct-another-realname-tip": "Aslii naam ke jaruri nai hae.\nAgar aap iske diya hae tab iske aapke kaam ke attribute kare ke khatir kaam me lawa jaai.",
+       "pt-login": "Log in karo",
+       "pt-login-button": "Log in karo",
+       "pt-createaccount": "Nawaa account banao",
+       "pt-userlogout": "Log out ho",
        "php-mail-error-unknown": "PHP ke mail() function me koi anjaan kharaabi hae",
        "user-mail-no-addy": "Bina e-mail address rahe pe bhi e-mail bheje ke kosis karaa gais hae.",
        "user-mail-no-body": "Ek khaali, nai to kaafi chhota email bheje ke kosis kara rahaa.",
        "changepassword": "Pasword ke badlo",
-       "resetpass_announce": "Aap ek temporary e-mailed code se login bhaya hai\nLogin khatam kare khatir, aap ke nawaa password set kare ke parri hian:",
+       "resetpass_announce": "Login khatam kare khatir, aap ke nawaa password set kare ke parri.",
        "resetpass_text": "<!-- Hian pe likho -->",
        "resetpass_header": "Account assword ke badlo",
        "oldpassword": "Purana password:",
        "retypenew": "Password fir se type karo:",
        "resetpass_submit": "Password ke set kar ke login karo",
        "changepassword-success": "Aap ke password ke safalta se badal dewa gais hai!",
+       "changepassword-throttled": "Aap bahut jaada dafe ii account ke password ke enter kare ke kosis karaa hae.\n$1 talak wait kar ke fir se try karo.",
        "resetpass_forbidden": "Password nai badlaa jaae sake hai",
        "resetpass-no-info": "Ii panna ke sidha access kare ke khatir aap ke logged in rahe ke parri.",
        "resetpass-submit-loggedin": "Password ke badlo",
        "resetpass-submit-cancel": "Nai karo",
        "resetpass-wrong-oldpass": "Temporary nai to abhi ke password valid nai hai.\nSait aap password ke safalta se badal sia hoga nai to nawaa temporary password ke maang karaa hoga.",
+       "resetpass-recycled": "Meharbaani kar ke aap aapan password ke badal ke duusra password banao.",
+       "resetpass-temp-emailed": "Aap ke temporary code, jiske emai karaa gais rahaa, se login bhayaa hae.\nLogin khatam kare ke khatir aap ke nawaa password banae ke chaahi.",
        "resetpass-temp-password": "Kachcha password:",
        "resetpass-abort-generic": "Ek extension password ke badlao ke rokis hae.",
+       "resetpass-expired": "Aap ke password expire hoe gais hae. Log in kare ke khatir ek nawaa password banao.",
+       "resetpass-expired-soft": "Aap ke password expire hoe gais hae aur iske reset kare ke parri. Meharbani kar ke nawaa pasword choose karo, nai to password ke baad me reset kare ke khatir \"{{int:resetpass-submit-cancel}}\" ke click karo.",
+       "resetpass-validity-soft": "Aap ke password thiik nai hae: $1\n\n\nMeharbani kar ke nawaa pasword choose karo, nai to password ke baad me reset kare ke khatir \"{{int:resetpass-submit-cancel}}\" ke click karo.",
        "passwordreset": "Password ke badlo",
        "passwordreset-text-one": "Aapan password ke reset kare ke khatir ii form ke bharo.",
-       "passwordreset-text-many": "{{PLURAL:$1|Aapan password ke reset kare ke khatir ek field me likho}}",
+       "passwordreset-text-many": "{{PLURAL:$1|Temporary password ke email se le ke khatir ek field me likho}}",
        "passwordreset-legend": "Password ke badlo",
        "passwordreset-disabled": "II wiki me password ke badle ke ijaajat nai hae.",
        "passwordreset-emaildisabled": "Ii wiki me email ke band kar dewa gais hae.",
        "changeemail-none": "(kuchh nai)",
        "changeemail-password": "Aap ke {{SITENAME}} password:",
        "changeemail-submit": "E-mail badlo",
+       "changeemail-throttled": "Aap bahut dher dafe login kare ke kosis karaa hae.\nMeharbaani kar ke $1 talak wait kar ke fir se try karo.",
        "resettokens": "Token ke reset karo",
        "resettokens-text": "Aap aapan private data pe access roke ke khatir token ke reset kare saktaa hae.\n\nAap ke ii kare ke chaahi agar aap galti se ii jaankari ke aur koi ke de diya hae nai to aap ke account ke bare me aur koi ke pataa hae.",
        "resettokens-no-tokens": "Reset kare ke jhatir koi token nai hae.",
        "preview": "Jhalak dekhao",
        "showpreview": "Preview dekhao",
        "showdiff": "Badlao dekhao",
-       "anoneditwarning": "'''Sawadhaan:''' Aap login nai karaa hai\nAap ke IP address ii panna ke edit itihaas me record karaa jaai.",
+       "blankarticle": "<strong>Chetauni:</strong> Jon panna ke aap banata hae, me kuchh likha nai hae. \nAgar aap \"{{int:savearticle}}\" ke fir se click karaa, tab khaali panna ban jaai.",
+       "anoneditwarning": "'''Sawadhaan:''' Aap login nai karaa hai\nAap ke IP address ke sab koi dekhe saki agar aap koi badlao karra. Agar aap <strong>>[$1 log in]</strong> or <strong>[$2 create an account]</strong>, tab aap ke badlao aap ke naam ke niche dekhai, aur duusra benefits ke saathe.",
        "anonpreviewwarning": "\"Aap log in nai bhaya hae. Ii panna ke bachae pe aap ke IP address ke panna ke badlao ke itihass me likha jaai.\"",
        "missingsummary": "'''Suchna:''' Aap badlao ke sanchhit me nai likha hai.\nAgar aap Save ke fir se click karaa tab, aap ke badlao bina summary ke save kar lewa jaai.",
+       "selfredirect": "<strong>Chetauni:</strong> Aap ii panna ke apne me redirect kartaa hae. \nAap saait wrong target ke specify karaa, nai to wrong panna ke badaltaa hae.\nAgar aap  \"{{int:savearticle}}\" ke fir se click karaa tab redirect ban jaai.",
        "missingcommenttext": "Meharbani kar ke niche aapan vichar deo.",
        "missingcommentheader": "'''Chetauni:''' Aap ii vichar ke vishay nai likha hai.\nAgar aap \"{{int:savearticle}}\"  pe click karaa tab bina vishay ke iske bachae lewa jaai.",
        "summary-preview": "Sanchhep jhalak:",
        "edit-gone-missing": "Panna ke badle nai sakaa.\nJanae hai ki iske koi mitae dii hai.",
        "edit-conflict": "Badlao me conflict hai.",
        "edit-no-change": "Aap ke badle ke kosis ke ignore kar dewa gais hai, kahe ki text ke badla nai gais hai.",
+       "postedit-confirmation-created": "Panna ke banae dewa gais hae.",
+       "postedit-confirmation-restored": "Panna ke restore kar dewa gais hae.",
        "postedit-confirmation-saved": "Aap ke badlao ke bachae lewa gais hae.",
        "edit-already-exists": "Nawaa panna nai banae sakaa hai.\nIi naam ke panna abhi hai.",
        "defaultmessagetext": "Default message text",
        "content-failed-to-parse": "$1 model ke khatir $2 ke parse nai kare sakaa hae: $3",
        "invalid-content-data": "Panna me likha gais chij right nai hae",
        "content-not-allowed-here": "Panna [[$2]] me \"$1\" likhe ke ijaajat nai hae",
-       "editwarning-warning": "Ii panna ke chore se jetna changes aap  karaa hae nai save hoi.\nAgar aap logged in hae, tab aap ii chetauni ke \"Editing\" vibhag me disable kare saktaa hae.",
+       "editwarning-warning": "Ii panna ke chhore se jetna changes aap  karaa hae nai save hoi.\nAgar aap logged in hae, tab aap ii chetauni ke \"{{int:prefs-editing}}\"  vibhag me disable kare saktaa hae.",
+       "editpage-notsupportedcontentformat-title": "Content ke format ke support nai karaa jaawe hae.",
+       "editpage-notsupportedcontentformat-text": "Content format $1 ke content model $2 nai support kare hae.",
        "content-model-wikitext": "wikitext",
        "content-model-text": "plain text",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "content-json-empty-object": "Khaali object",
+       "content-json-empty-array": "Khaali array",
+       "duplicate-args-category": "Panna jiske tamplate call me duplicate argument hae",
+       "duplicate-args-category-desc": "Panna me template calls hae jisme duplicate arguments hae, jaise ki <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> or <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "'''Chetauni''': Ii panna me bahut jaada expensive parser function calls hai.\n\nIske $2 {{PLURAL:$2|call|calls}} se kamti hoe ke chaahi, {{PLURAL:$1|abhi hai $1 call|abhi hai $1 calls}}.",
        "expensive-parserfunction-category": "Panna jisme bahut jaada expensive parser function calls hai",
        "post-expand-template-inclusion-warning": "'''Chetauni:''' Template include size bahut barraa hai.\nKutch templates ke include nai karaa jaai.",
        "parser-template-recursion-depth-warning": "Template recursion depth limit se jaada hoe gais hae ($1)",
        "language-converter-depth-warning": "Bhasa anuwaad ke gahiraai ijajat se jaada hoe gais hae ($1)",
        "node-count-exceeded-category": "Panna jahaan pe node-count bahut jaada hoe gais hae",
-       "node-count-exceeded-warning": "Panna, node-count se jaada hae",
+       "node-count-exceeded-category-desc": "Panna maximum node count ke exceed kare hae.",
+       "node-count-exceeded-warning": "Panna, node count se jaada hae",
        "expansion-depth-exceeded-category": "Panna jahaan pe expansion depth ke exceed karaa gais hae",
+       "expansion-depth-exceeded-category-desc": "Panna, maximum expansion depth, se jaada hae.",
        "expansion-depth-exceeded-warning": "Panna expansion depth ke exceed karis hae",
        "parser-unstrip-loop-warning": "Unstrip loop ke pawa gai shae",
        "parser-unstrip-recursion-limit": "Unstrip recursion limit ke exceed karaa gais hae ($1)",
        "undo-success": "Ii badlao ke pahile jaise karaa jaae sake hai.\nNiche ke comparison ke check kar ke dekho ki aap yahi kare mangta rahaa, aur fir niche ke badlao ke save kar ke aapan badlao ke pahile jaise karo.",
        "undo-failure": "Ii badalo ke paile jaise nai karaa jaae sake hai kahe ki biich me badlao hai.",
        "undo-norev": "Ii badlao ke pahile jaise nai karaa jaae sake hai kahe ki ii badalo abhi nai hai nai to iske mitae dewa gais hai.",
+       "undo-nochange": "Janae hae ki badlao ke pahile delete kar dewa gais hae.",
        "undo-summary": "$1 badlao [[Special:Contributions/$2|$2]] se, ke pahile jaise karo ([[User talk:$2|Talk]])",
        "undo-summary-username-hidden": "Hidden sadasya ke badalo $1 ke pahile jaise karo",
        "cantcreateaccounttitle": "Account nai banae sakta hai",
        "cantcreateaccount-text": "Ii IP address ('''$1''') se nawaa account banae ke [[User:$3|$3]] block kar diis hai.\n\nIske kaaran, jon ki $3 diis hai, ''$2'' hai",
+       "cantcreateaccount-range-text": "Nawaa account banae ke IP addresses range '''$1''', jisme aap ke IP address ('''$4''') hae, ke[[User:$3|$3]] block kar diis hae.\n\n$3 ke kaaran hae ''$2''",
        "viewpagelogs": "Ii panna ke suchi dekho",
        "nohistory": "Ii panna ke khatir koi badlao ke itihaas nai hai.",
        "currentrev": "Abhi ke sansodhan",
        "currentrev-asof": "Abhi ke badlao ii tarik tak $1",
        "revisionasof": "$1 ke badlao",
-       "revision-info": "$2 ke badlao $1 tak",
+       "revision-info": "Badlao $1 tak {{GENDER:$6|$2}}$7 se",
        "previousrevision": "← Purana badlao",
        "nextrevision": "Nawaa badlao→",
        "currentrevisionlink": "Abhi ke badlao",
        "rev-deleted-event": "(log action ke hatae dewa gais hai)",
        "rev-deleted-user-contribs": "[Sadasya ke naam nai to IP address ke hatae dewa gais hae- yogdaan se badlao ke lukae dewa gais hae]",
        "rev-deleted-text-permission": "Panna ke ii badlao ke '''mitae''' dewa gais hae.\nIske baare me aur jaankari [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log] me saait hoi.",
+       "rev-suppressed-text-permission": "Ii panna ke badlao ke <strong>dabae</strong> dewa gais hai.\nAap iske baare me aur jaankari [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} suppression log] me paawe saktaa hae.",
        "rev-deleted-text-unhide": "i panna ke badlao ke '''mitae''' dewa gais hai.\nIske baare me aur jaankari saait [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log] me hoi.\nAap fir bhi [$1 ii badlao ke dekhe sakta hae] agar aap aage barrhe mangtaa hae tab.",
        "rev-suppressed-text-unhide": "Ii panna ke badlao ke '''dabae''' dewa gais hai.\nIske baare me aur jaankari saait [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} suppression log] me hoi.\nAap fir bhi [$1 ii badlao ke dekhe sakta hae] agar aap aage barrhe mangtaa hae tab.",
        "rev-deleted-text-view": "Panna ke ii badlao ke '''mitae''' dewa gais hae.\nAap iske dekhe sakta hai; iske baare me aur jaankari [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log] me saait hoi.",
        "revdelete-no-file": "Chuna gais file abhi nai banawa gais hai.",
        "revdelete-show-file-confirm": "Ka aap sure hai ki aap file ke mitawa gais revision ke dekhe mangtaa hai \"<nowiki>$1</nowiki>\" $2 se $3 talak?",
        "revdelete-show-file-submit": "Haan",
+       "revdelete-selected-text": "{{PLURAL:$1|Selected revision|Selected revisions}} of [[:$2]]:",
+       "revdelete-selected-file": "{{PLURAL:$1|Selected file version|Selected file versions}} of [[:$2]]:",
        "logdelete-selected": "{{PLURAL:$1|Chuna gais log event|Chuna gais log events}}:",
+       "revdelete-text-text": "Delete karaa gais revision panna ke itihaas me dekhai, lekin panna ke kuchh hissa janata ke nai dekhai.",
+       "revdelete-text-file": "Delete karaa gais file version file ke itihaas me dekhai, lekin file ke kuchh hissa janata ke nai dekhai.",
+       "logdelete-text": "Delete karaa gais log events log  me dekhaste rahii, lekin log ke kuchh hissa janata ke nai dekhai.",
+       "revdelete-text-others": "Duusra administrator hidden content ke access kare sake aur undelete kare sake, unless aur restrictions laabu karaa jaae.",
        "revdelete-confirm": "Meharbani kar ke aap ii confirm karo ki aap ii kare mangta hae, aap iske asar ke samajhta hae, aur iske aap [[{{MediaWiki:Policy-url}}|the policy]] ke anusar karta hae.",
-       "revdelete-suppress-text": "Suppression ke '''khaali''' ii chij ke khatir kaam me lawa jaae sake hai:\n* Aapan baare me jaankari thik nai hai\n*: ''ghar ke address aur telephone number, social security number, etc.''",
+       "revdelete-suppress-text": "Suppression ke <strong>khaali</strong> ii chij ke khatir kaam me lawa jaae sake hai:\n* potentially libelious jaankari\n* Aapan baare me jaankari thik nai hai\n*: <em>ghar ke address aur telephone number, social security number, etc.</em>",
        "revdelete-legend": "Dekhe waala rukawat set karo",
-       "revdelete-hide-text": "Badlawa gais text ke lukao",
+       "revdelete-hide-text": "Badlawa gais text",
        "revdelete-hide-image": "File content ke lukao",
-       "revdelete-hide-name": "Kaam aur manjil ke lukao",
-       "revdelete-hide-comment": "Badlao ke baare me comment ke lukao",
-       "revdelete-hide-user": "Editor's username/IP ke lukao",
+       "revdelete-hide-name": "Target aur parameters ke lukao",
+       "revdelete-hide-comment": "Summary ke badlo",
+       "revdelete-hide-user": "Editor ke username/IP address",
        "revdelete-hide-restricted": "Ii rukawat ke administrator aur duusra log se lukao.",
        "revdelete-radio-same": "(badlo nai)",
-       "revdelete-radio-set": "Haan",
-       "revdelete-radio-unset": "Nai",
+       "revdelete-radio-set": "Lukaawal",
+       "revdelete-radio-unset": "Dekhae hae",
        "revdelete-suppress": "Sysops ke saathe saathe aur sab se data ke suppress karo",
        "revdelete-unsuppress": "Pahile jaise karaa gais badlao me se rukawat hatao",
        "revdelete-log": "Kaaran:",
        "mergehistory-empty": "Koi badlao ke jorraa nai jaae sake hai.",
        "mergehistory-success": "[[:$1]]ke $3 {{PLURAL:$3|badlao|badlao}} ke safalta se [[:$2]] me jorr dewa gais hai.",
        "mergehistory-fail": "Itihaas ke nai jorre paaya hae, meharbaani kar ke panna aur time parameters ke check karo.",
+       "mergehistory-fail-toobig": "History merge nai hoe sake, kaaheki limit of $1 {{PLURAL:$1|revision|revisions}} se jaada move hoe jaai.",
        "mergehistory-no-source": "Source panna $1 nai hai.",
        "mergehistory-no-destination": "Destination panna $1 nai hai.",
        "mergehistory-invalid-source": "Suruu waala panna ke must sahi naam hoe ke chaahi.",
        "showhideselectedversions": "Chuna gae versions ke dekhao/lukao",
        "editundo": "Pahile jaise kar do",
        "diff-empty": "(ek rakam)",
+       "diff-multi-sameuser": "({{PLURAL:$1|Ek biich waala badlao|$1 biich waala badlao}} same sadasya se nai dekhawa gais hae.",
+       "diff-multi-otherusers": "({{PLURAL:$1|Ek biich waala badlao|$1 biich waala badlao}} jiske {{PLURAL:$2|sadasya|$2 sadasya}} ke  nai dekhawa jae hai)",
        "diff-multi-manyusers": "({{PLURAL:$1|Ek biich waala badlao|$1 biich waala badlao}} jiske {{PLURAL:$2|sadasya|$2 sadasya}} se jaada log karin hae, ke  nai dekhawa jae hai.)",
        "difference-missing-revision": "Ii badlao ($1) {{PLURAL:$2|was|were}} pe {{PLURAL:$2|One revision|$2 revisions}} nai pawa gais hae\nIske kaaran ii hoe sake hae ki ek mitawa gais panna se link karaa jaawe hae.\nIske baare me aur jaankari [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log] me paawa jaae sake hae.",
        "searchresults": "Khoj ke natija",
        "shown-title": "Ek panna me $1 {{PLURAL:$1|result|results}} dekhao",
        "viewprevnext": "Dekho ($1 {{int:pipe-separator}} $2) ($3)",
        "searchmenu-exists": "'''Ii wiki me \"[[$1]]\" naam ke panna hai'''",
-       "searchmenu-new": "'''Ii wiki me \"[[:$1]]\" panna ke banao!'''",
+       "searchmenu-new": "<strong>Ii wiki me \"[[:$1]]\" panna ke banao!</strong>{{PLURAL:$2|0=|See also the page found with your search.|See also the search results found.}}",
        "searchprofile-articles": "Content panna",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Sab chij",
        "search-result-category-size": " {{PLURAL:$1|1 sadasya|$1 sadasya}} ({{PLURAL:$2|1 chhota vibhag|$2 chhota vibhag}}, {{PLURAL:$3|1 file|$3 files}})",
        "search-redirect": "(redirect $1)",
        "search-section": "(section $1)",
+       "search-category": "(category $1)",
+       "search-file-match": "(file content ke match kare hae)",
        "search-suggest": "Ka aap ke matlab rahaa: $1",
        "search-interwiki-caption": "Saathe ke project",
        "search-interwiki-default": "$1 ke result:",
        "searchrelated": "sambhand rakkhe hai",
        "searchall": "sab",
        "showingresults": "Niche dekhae hai {{PLURAL:$1|'''1''' result|'''$1''' results}} #'''$2''' se suruu hoe ke.",
+       "showingresultsinrange": "Niche dekhae hai {{PLURAL:$1|<strong>1</strong> result|<strong>$1</strong> results}} #<strong>$2</strong> se suruu hoe ke #<strong>$3</strong> talak.",
+       "search-showingresults": "{{PLURAL:$4|Result <strong>$1</strong> of <strong>$3</strong>|Results <strong>$1 - $2</strong> of <strong>$3</strong>}}",
        "search-nonefound": "Ii sawaal ke koi jawab nai hae.",
        "powersearch-legend": "Gahira khoj",
        "powersearch-ns": "Namespaces me khojo:",
        "powersearch-togglelabel": "Check karo:",
        "powersearch-toggleall": "Sab",
        "powersearch-togglenone": "Koi bhi nai",
+       "powersearch-remember": "Aage ke khoj ke khatir selection ke yaad karo",
        "search-external": "Bahaari khoj",
        "searchdisabled": "{{SITENAME}} me abhi khoje ke anumati nai hai.\nAap tab tak Google se khoje sakta hai.\nYaad rakhna ki uu log ke {{SITENAME}} ke index saait purana hoi.",
        "search-error": "Khoje ke tim ek error hoe gais hae:$1",
        "preferences": "Pasand",
        "mypreferences": "Pasand",
        "prefs-edits": "Badlao ke number:",
+       "prefsnologintext2": "Aapan preferences ke badle ke khatir login ho.",
        "prefs-skin": "Skin",
        "skin-preview": "Jhalak",
        "datedefault": "Koi pasand nai",
        "gender-unknown": "Ham bole nai mangtaa hae",
        "gender-male": "Uu wiki panna ke badle hae",
        "gender-female": "Uu wiki panna ke badle hae",
-       "prefs-help-gender": "Optional: used for gender-correct addressing by the software. This information will be public.",
+       "prefs-help-gender": "Ii preference ke set karna optional hae.\nSoftware aapan value ke use kar ke aap ke address kare hae aur aap ke ke bare me duusre ke batae hae, right grammar use kar ke\nIi jaankari janata ke dekhai.",
        "email": "E-mail",
        "prefs-help-realname": "Asli naam ke jaruri nai hai lekin agar jo aap aapan naam diya hai to iske aap ke kaam ke pahachane khatir kaam me lawa jai.",
        "prefs-help-email": "E-mail address ke jaruri nai hai, lekin isse nawaa password aap ke lage bheja jaae sake hai agar aap aapan password bhul gaya tab.",
        "prefs-tokenwatchlist": "Chinh (token)",
        "prefs-diffs": "Farka",
        "prefs-help-prefershttps": "Aap ke agla login pe ii preferences effect me aai.",
+       "prefswarning-warning": "Aap aapan preferences ke badla hae, jiske abhi talak save nai karaa gae hae.\nAgar aap ii panna ke bina \"$1\" me click kare chhorra, tab aap ke preferences save nai hoi.",
+       "prefs-tabs-navigation-hint": "Tip: Aap left aur right arrow key use kar ke tab list me navigate kare saktaa hae.",
        "email-address-validity-valid": "E-mail address kanuni hae",
        "email-address-validity-invalid": "Ek kanuni e-mail ke likho",
        "userrights": "Sadasya ke adhikaar ke chalao",
        "userrights-no-interwiki": "Aap ke duusra wiki me user rights ke badle ke adhikaar nai hai.",
        "userrights-nodatabase": "Database $1 abhi hai nai, nai to local nai hai.",
        "userrights-nologin": "Sadasya ke user rights de ke khatir, ap ke chaahi ki aap [[Special:UserLogin|log in]] karo ek administrator ke account se.",
-       "userrights-notallowed": "Aap ke account ke user rights de aur hatae ke adhikar nai hai.",
+       "userrights-notallowed": "Aap ke lage user rights de aur hatae ke adhikar nai hae.",
        "userrights-changeable-col": "Groups jiske aap badle sakta hai",
        "userrights-unchangeable-col": "Groups jiske aap badle nai sakta hai",
-       "userrights-conflict": "User right me conflict hae. Meharbaani kar ke aapan balao ke fir se apply karo.",
+       "userrights-conflict": "User right me conflict hae! Meharbaani kar ke aapan badlao ke fir se review aur confirm karo.",
        "userrights-removed-self": "App appan ijaajat ke hatae dia hae. Iske natija ii hoi ki app ii panna ke ab nai access kare sakegaa",
        "group": "Jhund:",
        "group-user": "Sadasya",
        "right-move": "Panna ke naam badlo",
        "right-move-subpages": "Panna aur uske subpanna ke naam badlo",
        "right-move-rootuserpages": "Root sadasya ke panna ke naam badlo",
+       "right-move-categorypages": "Category panna ke hatao",
        "right-movefile": "File ke naam badlo",
        "right-suppressredirect": "Panna ke naam badalte ke time, purana naam se redirect ke nai banao.",
        "right-upload": "File ke upload karo",
        "right-deletedtext": "Mitawa gais text aur mitawa gais badlao ke biich waala badlao ke dekho",
        "right-browsearchive": "Mitawa gais panna ke khojo",
        "right-undelete": "Ek panna ke undelete karo",
-       "right-suppressrevision": "Review and restore revisions hidden from Sysops",
+       "right-suppressrevision": "Koi bhi sadasya ke koi bhi panna ke khaas badlao ke dekho, lukao aur dekhao",
+       "right-viewsuppressed": "Uu badlao ke dekho jon ki koi sadasya ke nai dekhae hae",
        "right-suppressionlog": "Private logs ke dekho",
        "right-block": "Duusra sadasya ke badle se roko",
        "right-blockemail": "Sadasya ke email bheje se roko",
        "right-protect": "Protection level ke badlo aur cascade-protected panna ke badlo",
        "right-editprotected": "Badla gais panna ke \"{{int:protect-level-sysop}}\" ke rakam bachawa gais hae",
        "right-editsemiprotected": "Badla gais panna ke \"{{int:protect-level-autoconfirmed}}\" ke rakam bachawa gais hae",
+       "right-editcontentmodel": "Panna ke content model ke badlo",
        "right-editinterface": "User interface ke badlo",
        "right-editusercssjs": "Duusra sadsya ke CSS aur JS files ke badlo",
        "right-editusercss": "Duusra sadsya ke CSS files ke badlo",
        "action-createpage": "panna banao",
        "action-createtalk": "salah waala panna banao",
        "action-createaccount": "ii user account ke banao",
+       "action-history": "ii panna ke itihass ke dekho",
        "action-minoredit": "ii badlao ke chhota mark karo",
        "action-move": "ii panna ke naam badlo",
        "action-move-subpages": "ii panna, aur iske subpanna ke naam badal do",
        "action-move-rootuserpages": "root sadasya panna ke naam badlo",
+       "action-move-categorypages": "Category panna ke hatao.",
        "action-movefile": "ii file ke naam badlo",
        "action-upload": "ii file ke upload karo",
        "action-reupload": "ii file ke uppar se likh do",
        "action-block": "ii sadasya ke panna badle se roko",
        "action-protect": "ii panna ke protection levels ke badlo",
        "action-rollback": "jaldi se pichhla sadasya, jon ki koi panna ke badlis rahaa, ke badlao ke pahile jaise kar do",
-       "action-import": "duusra wiki me se ii panna ke import karo",
-       "action-importupload": "ek file upload se ii panna ke import karo",
+       "action-import": "duusra wiki me se panna ke import karo",
+       "action-importupload": "ek file upload se panna ke import karo",
        "action-patrol": "duusra jan ke badlao pe pahraa do",
        "action-autopatrol": "aapan badlao pe pahraa do",
        "action-unwatchedpages": "unwatched panna ke suchi dekho",
        "action-viewmywatchlist": "Aapan dhyan suchi ke dekho",
        "action-viewmyprivateinfo": "Aapan private jaankari ke dekho",
        "action-editmyprivateinfo": "Aapan private jaankari ke badlo",
+       "action-editcontentmodel": "ek panna ke content model ke badlo",
        "nchanges": "$1 {{PLURAL:$1|badlao|badlao}}",
+       "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|last time dekhe ke baad}}",
+       "enhancedrc-history": "itihaas",
        "recentchanges": "Nawaa badlao",
        "recentchanges-legend": "Nawaa badlao options",
        "recentchanges-summary": "Wiki me ii panna ke nawaa badlao pe dhyan rakho.",
        "recentchanges-label-minor": "Ii ek chhota badlao hae",
        "recentchanges-label-bot": "Ii badlao ke ek bot karis hae",
        "recentchanges-label-unpatrolled": "Ii badlao pe abhi pahraa nai dewa gais hae.",
-       "recentchanges-legend-newpage": "$1 - nawaa panna",
-       "rcnotefrom": "Niche '''$2''' se badlao hai ('''$1''' tak )",
+       "recentchanges-label-plusminus": "Panna ke size etna bytes se badla",
+       "recentchanges-legend-heading": "'''Legend:'''",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (aur dekho [[Special:NewPages|nawaa panna ke suchi]])",
+       "rcnotefrom": "Niche {{PLURAL:$5|badlao hae|badlao hae}} <strong>$3, $4</strong> (<strong>$1</strong> talak dekhawa gais) talak.",
        "rclistfrom": "$3 $2 se suruu kar ke nawaa badlao dekhao",
        "rcshowhideminor": "$1 chhota badlao",
+       "rcshowhideminor-show": "Dekhao",
+       "rcshowhideminor-hide": "Lukao",
        "rcshowhidebots": "$1 bots",
-       "rcshowhideliu": "$1 logged-in sadasya",
+       "rcshowhidebots-show": "Dekhao",
+       "rcshowhidebots-hide": "Lukao",
+       "rcshowhideliu": "$1 registered sadasya",
+       "rcshowhideliu-show": "Dekhao",
+       "rcshowhideliu-hide": "Lukao",
        "rcshowhideanons": "$1 bina naam ke sadasya",
+       "rcshowhideanons-show": "Dekhao",
+       "rcshowhideanons-hide": "Lukao",
        "rcshowhidepatr": "$1 pahra dewa gae sampadan",
+       "rcshowhidepatr-show": "Dekhao",
+       "rcshowhidepatr-hide": "Lukao",
        "rcshowhidemine": "$1 hamaar sampadan",
+       "rcshowhidemine-show": "Dekhao",
+       "rcshowhidemine-hide": "Lukao",
        "rclinks": "Pichhla $1 badlao pichle $2 din me dekhao <br />$3",
        "diff": "farka",
        "hist": "itihaas",
        "rc_categories_any": "Koi bhi",
        "rc-change-size-new": "$1 {{PLURAL:$1|byte|bytes}} badlao ke baad",
        "newsectionsummary": "/* $1 */ nawaa vibhag",
-       "rc-enhanced-expand": "Details dekhao (JavaScript jaruri hai)",
+       "rc-enhanced-expand": "Details dekhao",
        "rc-enhanced-hide": "Details ke lukao",
        "rc-old-title": "Sab se pahile \"$1\" ke naam ke niche banawa gais rahaa",
        "recentchangeslinked": "Panna ke jurraa badlao",
        "uploaderror": "Upload nai hoe paais hai",
        "upload-recreate-warning": "\"'Chetauni: Ii naam ke file ke mitae dewa gais rahaa, nai to naam badla gais rahaa.\"'\nHian pe mitae waala suchi aur naam badle waala suchi ke aap ke dekhe ke khatir dewa gais hae:",
        "uploadtext": "Niche waala form ke use kar ke file upload karo.\nPahile upload karaa file ke dekhe khatir [[Special:FileList|list of uploaded files]] jao, (re)uploads are also logged in the [[Special:Log/upload|upload log]], deletions in the [[Special:Log/delete|deletion log]].\n\nTo include a file in a page, use a link in one of the following forms:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''' to use the full version of the file\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|alt text]]</nowiki></code>''' to use a 200 pixel wide rendition in a box in the left margin with 'alt text' as description\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' for directly linking to the file without displaying the file",
-       "upload-permitted": "File types jiske ijajat hai: $1.",
-       "upload-preferred": "Kon rakam ke file ke mangtaa hai: $1.",
-       "upload-prohibited": "Ii rakam ke file ke upload nai karaa jaae sake hai: $1.",
+       "upload-permitted": "Permitted file {{PLURAL:$2|type|types}}: $1.",
+       "upload-preferred": "Preferred file {{PLURAL:$2|type|types}}: $1.",
+       "upload-prohibited": "Prohibited file {{PLURAL:$2|type|types}}: $1.",
        "uploadlogpage": "Suchi ke upload karo",
        "uploadlogpagetext": "Niche ke list me haali ke uplaod karaa gae file ke suchi hai.\nVisual overview ke khatir [[Special:NewFiles|nawaa file ke gallery]] ke dekho.",
        "filename": "Filename",
        "largefileserver": "Ii file, jetna ki server allow kare hai, se barraa hai.",
        "emptyfile": "Jon file aap upload karaa rahaa uu khaali rahaa.\nIi saait file ke naam likhe me typing mistake ke kaaran hoi.\nMeharbaani kar ke ii dekho ki aap such me ii file upload kare mangtaa hai ki nai.",
        "windows-nonascii-filename": "Ii wiki me password jisme special characters hae, ke kaam me nai lawa jaae sake hae.",
-       "fileexists": "Ii naam ke file abhi hai, meharbani kar ke check karo <strong>[[:$1]]</strong> agar jo aap sure nai hai ki aap iske badle mangta hai.\n[[$1|thumb]]",
+       "fileexists": "Ii naam ke file abhi hai, meharbani kar ke check karo <strong>[[:$1]]</strong> agar jo {{GENDER:|aap}} sure nai hai ki aap iske badle mangta hai.\n[[$1|thumb]]",
        "filepageexists": "Ii file ke description ke <strong>[[:$1]]</strong> me banae dewa gais rahaa, lekin ii naam ke koi file abhi nai hai.\nAap jon summary likhtaa hai uu panna ke description me nai dekhai.\nDescription ke dekhae ke khatir, aap ke iske manually badle ke parri.\n[[$1|thumb]]",
-       "fileexists-extension": "Ii rakam ke naam ke ek aur file hai: [[$2|thumb]]\n* Uploading file ke naam: <strong>[[:$1]]</strong>\n* Abhi ke file ke naam: <strong>[[:$2]]</strong>\nMeharbani kar ke duusra naam chuno.",
+       "fileexists-extension": "Ii rakam ke naam ke ek aur file hai: [[$2|thumb]]\n* Uploading file ke naam: <strong>[[:$1]]</strong>\n* Abhi ke file ke naam: <strong>[[:$2]]</strong>\nKa app aur jaada distinctive naam use kare mangtaa hae?",
        "fileexists-thumbnail-yes": "Ii janawe hai ki ii file ek chhota chapa hai ''(thumbnail)''. [[$1|thumb]]\nMeharbani kar ke file ke check karo <strong>[[:$1]]</strong>.\nAgar jo check karaa gais file wahi chhapa ke original size hai tab ek aur thumbnail ke upload kare ke jaruri nai hai.",
        "file-thumbnail-no": "File ke naam <strong>$1</strong> se suruu hoe hai.\nIi janawe hai ki ii chhota size ke chapa hai ''(thumbnail)''.\nAgar jo aap ke lage ii chapa full resolution me hai tab uske upload karna, nai to file ke naam badlo.",
        "fileexists-forbidden": "Ii naam ke file abhi hai, aur iske badlawa nai jaae sake hai.\nAgar jo aap fir bhi aapan file ke upload kare mangta hai, tab pichhe jaae ke nawaa naam use karo. [[File:$1|thumb|center|$1]]",
        "fileexists-shared-forbidden": "Ii naam ke file abhi shared file repository me hai.\nAgar jo aap fir bhi aapan file upload kare manta hai tab pichhe jaae ke nawaa naam use karo. [[File:$1|thumb|center|$1]]",
        "file-exists-duplicate": "Ii file following file ke duplicate hai {{PLURAL:$1|file|files}}:",
        "file-deleted-duplicate": "Yahii rakam ke ek aur file ([[:$1]]) ke pahile delete karaa gais hai. Aap ke file ke deletion history ke check kare ke chaahi, upload kare se pahile.",
+       "file-deleted-duplicate-notitle": "Ii rakam ke ek file ke pahile delete karaa gais rahaa, aur iske title ke suppress karaa gais hae. Aap ke aisan koi jan, jiske lake suppressed data dekhe ke adhikar har, se situation ke review karae ke baad file ke upload kare ke chaahi.",
        "uploadwarning": "Upload ke baare me chetauni",
        "uploadwarning-text": "Meharbani kar ke file ke baaare me aur jankari ke niche badal ke aur fir se kosis karo.",
        "savefile": "File ke save karo",
        "uploaddisabledtext": "File uploads ke disable kar dewa gais hai.",
        "php-uploaddisabledtext": "File uploads ke PHP me disable kar dewa gais hai. Meharbani kar ke file_uploads setting ke check karo.",
        "uploadscripted": "Ii file me HTML nai to script code hai jiske web browser erroneously interpret kare sake hai.",
+       "uploadscriptednamespace": "Ii SVG file me illegal namespace \"$1\" hae.",
+       "uploadinvalidxml": "Upload karaa gais file ke XML ke parse nai karaa jaae sake hae.",
        "uploadvirus": "Ii file me virus hai! Details: $1",
        "uploadjava": "Ii file ek ZIP file hae jisme Java .class ke file hae.\nJava ke uplaod kare ke anumati nai hae, kaaheki isse kuchh security restrictions ke bypass karaa jaae sake hae.",
        "upload-source": "Suruu waala file",
        "license": "Licence ke baare me:",
        "license-header": "Licence ke baare me",
        "nolicense": "Koi bhi selct nai karaa gais hai",
+       "licenses-edit": "License options ke badlo",
        "license-nopreview": "(Preview abhi taiyaar nai hai)",
-       "upload_source_url": " (ek valid, publicly accessible URL)",
-       "upload_source_file": " (aap ke computer me ek file)",
-       "listfiles-summary": "Ii khaas panna sab uploaded file ke dekhae hai.\nJab sadasya filter kare hae, tab sadasys ke upload karaa gais sab se nawaa file ke version ke dekhawa jaae hae.",
+       "upload_source_url": "(aap ke choose karaa gais file ek valid, publicly accessible URL se)",
+       "upload_source_file": "(aap ke computer me ke aap ke choose karaa gais file)",
+       "listfiles-delete": "mitao",
+       "listfiles-summary": "Ii khaas panna sab uploaded file ke dekhae hai.",
        "listfiles_search_for": "Media ke naam khojo:",
        "imgfile": "file",
        "listfiles": "Chapa ke suchi",
        "listfiles_size": "Naap",
        "listfiles_description": "Baare me",
        "listfiles_count": "Ketna badlao rahaa",
+       "listfiles-show-all": "Chaapa ke purana version ke include karo",
+       "listfiles-latestversion": "Abhi ke version",
+       "listfiles-latestversion-yes": "Haan",
+       "listfiles-latestversion-no": "Nai",
        "file-anchor-link": "File",
        "filehist": "File ke itihaas",
        "filehist-help": "File ke dekhe khatir, jaise uu time dekhe me lagat rahaa, date/time pe click karo.",
        "filedelete-maintenance": "Files jiske ke thora din khatir, maintenance ke time, band kar dewa gais rahaa ke mitawa aur fir se pahile jaise karaa jaawe hae.",
        "filedelete-maintenance-title": "File ke mitae nai saktaa hae",
        "mimesearch": "MIME khojo",
-       "mimesearch-summary": "Ii panna filtering of files for its MIME-type ke enable kare hai.\nInput: contenttype/subtype, e.g. <code>image/jpeg</code>.",
+       "mimesearch-summary": "Ii panna filtering of files for its MIME-type ke enable kare hai.\nInput: contenttype/subtype nai to or contenttype/*, e.g. <code>image/jpeg</code>.",
        "mimetype": "MIME ke rakam:",
        "download": "download karo",
        "unwatchedpages": "Panna jispe dhyan nai rakha gais hai",
        "listredirects": "Redirects list karo",
+       "listduplicatedfiles": "File jiske duplicate hae ke suchi",
+       "listduplicatedfiles-summary": "Ii uu file ke suchi hae jisme file ke most recent version duusra file ke duplicate hae. Isme khaali local file ke dekha gais hae.",
+       "listduplicatedfiles-entry": "[[:File:$1|$1]] [[$3|{{PLURAL:$2|a duplicate|$2 duplicates}}]] hae.",
        "unusedtemplates": "Bina use bhae templates",
        "unusedtemplatestext": "Ii panna {{ns:template}} namespace me uu panna ake suchi de hai jon ki koi duusra panna me nai hai.\nTemplates ke delete kare se pahile duusra links ke bhi check kare ke nai bhulna.",
        "unusedtemplateswlh": "duusra jorr",
        "randompage": "Koi bhi panna",
        "randompage-nopages": "Ii {{PLURAL:$2|namespace|namespaces}} me koi panna nai hae:  $1",
+       "randomincategory": "Category me random panna",
+       "randomincategory-invalidcategory": "\"$1\" ek valid category naam nai hae.",
+       "randomincategory-nopages": "[[:Category:$1|$1]] category me koi panna nai hae.",
+       "randomincategory-category": "Vibhag:",
+       "randomincategory-legend": "Category me random panna",
        "randomredirect": "Koi bhi jagha redirect karo",
        "randomredirect-nopages": "Namespace \"$1\" me koi redirects nai hai.",
        "statistics": "Aankrra",
        "pageswithprop-text": "Ii panaa, uu panna ke list kare hae jon ki koi khaas panna ke property ke use kare hae.",
        "pageswithprop-prop": "Property ke naam:",
        "pageswithprop-submit": "Jaao",
-       "pageswithprop-prophidden-long": "lamba text property value hidden ($1 kilobytes)",
-       "pageswithprop-prophidden-binary": "binary property ke hidden value ($1 kilobytes)",
+       "pageswithprop-prophidden-long": "lamba text property value hidden ($1)",
+       "pageswithprop-prophidden-binary": "binary property ke lukawal value ($1)",
        "doubleredirects": "Dugna redirects",
        "doubleredirectstext": "Ii panna uu panna ke suchi de hai jon ki duusra redirect panna pe redirect kare hai.\nSab row me pahila aur duusra redirect ke jorr hae, aur isme duusra redirect ke nisana bhi hae, jon ki jaada kar ke \"aslii\" nisana waala panna, jon ki pahila redirect ke dekhae hae.\n<del>Mitawa gais</del> entires ke solve kar dewa gais hae.",
-       "double-redirect-fixed-move": "[[$1]] ke naam badal dewa gais hai, ab ii [[$2]] pe redirect kare hai",
+       "double-redirect-fixed-move": "[[$1]] ke naam badal dewa gais hai.\nIske automatically update karaa gais hae aur ab ii [[$2]] pe redirect kare hae.",
        "double-redirect-fixed-maintenance": "[[$1]] se [[$2]] ke double redirect ke sudhartaa hae.",
        "double-redirect-fixer": "Redirect ke banae waala",
        "brokenredirects": "Tuuta redirects",
        "ninterwikis": "$1 {{PLURAL:$1|interwiki|interwikis}}",
        "nlinks": "$1 {{PLURAL:$1|jorr|jorr}}",
        "nmembers": "$1 {{PLURAL:$1|sadasya|sadasya}}",
+       "nmemberschanged": "$1 → $2{{PLURAL:$2|sadasya|sadasya}}",
        "nrevisions": "$1 {{PLURAL:$1|badlao|badlao}}",
        "nviews": "$1 {{PLURAL:$1|dafe dekha gais hai|dafe dekha gais hai}}",
        "nimagelinks": "$1 {{PLURAL:$1|panna|panna}} me kaam me lawa gais hae",
        "wantedpages-badtitle": "Result set me kharaa title hai: $1",
        "wantedfiles": "Maange waala files",
        "wantedfiletext-cat": "Niche likha gais file ke kaam me lawa gais hae lekin ii Wikipedia me nai hae. Ii Wikipedia me file rahe par bhi foreign repositories ke file ke list karaa jaae sake hae. Aisan koi galat positives ke <del>mitae dewa jaai</del>. Aur, uu panna jon ki non-existent files ke embed kare hae ke [[:$1]] me list karaa gais hae.",
+       "wantedfiletext-cat-noforeign": "Ii sab file ke use karaa gais hae lekin exist nai hoe hae. Aur, panna jisme waisan file embed karaa gais hae jon ki exist nai hoe hae ke suchi [[:$1]] me hae.",
        "wantedfiletext-nocat": "Niche likha gais file ke kaam me lawa gais hae lekin ii Wikipedia me nai hae. Ii Wikipedia me file rahe par bhi foreign repositories ke file ke list karaa jaae sake hae. Aisan koi galat positives ke <del>mitae dewa jaai</del>.",
+       "wantedfiletext-nocat-noforeign": "Ii sab file ke use karaa gais hae lekin exist nai hae hae.",
        "wantedtemplates": "Maange waala templates",
        "mostlinked": "Jon panna me sab se jaada chij jorra hai",
        "mostlinkedcategories": "Jon vibhag me sab se jaada chij jorra hai",
-       "mostlinkedtemplates": "Jon template me sab se jaada fike jorra hai",
+       "mostlinkedtemplates": "Sab se jaada transcluded panna",
        "mostcategories": "Sab se jaada vibhag waala panna",
        "mostimages": "Jon file me sab se jaada file jorra hai",
        "mostinterwikis": "Panna jisme sab se dher interwikis hae",
        "deadendpagestext": "Niche ke panna {{SITENAME}} ke koi bhi panna se nai jurre hai.",
        "protectedpages": "Surakchhit panna",
        "protectedpages-indef": "Khaali indefinite bachao",
+       "protectedpages-summary": "Ii panna me uu panna ke suchi hae jon ki abhi protected hae. Uu title ke suchi jon ki creation se protected hae ke dekhe ke khatir [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]] ke dekho.",
        "protectedpages-cascade": "Khaali cascading bachao",
+       "protectedpages-noredirect": "Redirects lukao",
        "protectedpagesempty": "Ii parameters se koi bhi panna ke nai bachawa gais hai.",
+       "protectedpages-timestamp": "Timestamp",
+       "protectedpages-page": "Panna",
+       "protectedpages-expiry": "Khalaas hoe hae",
+       "protectedpages-performer": "Sadasya ke bachawa jaae hae",
+       "protectedpages-params": "Protection parameters",
+       "protectedpages-reason": "Kaaran",
+       "protectedpages-unknown-timestamp": "Nai maluum",
+       "protectedpages-unknown-performer": "Unknown sadasya",
        "protectedtitles": "Bachawa gais titles",
+       "protectedtitles-summary": "Ii panna uu title ke list kare hae jon ki creation se protected hae. Protected panna ke suchi dekhe ke khatir \n[[{{#special:ProtectedPages}}|{{int:protectedpages}}]] ke dekho.",
        "protectedtitlesempty": "Ii parameters se koi bhi title ke nai bacawa gais hai.",
        "listusers": "Sadasya ke suchi",
        "listusers-editsonly": "Khaali uu sadasya ke dekhao jon ki koi badlao karis hai",
        "listusers-creationsort": "Banawa gais tarik se sort karo",
+       "listusers-desc": "Descending order me sort karo",
        "usereditcount": "$1 {{PLURAL:$1|badlao|badlao}}",
        "usercreated": "{{GENDER:$3|Banawa gais hae}}  $1 pe $2 me",
        "newpages": "Nawaa panna",
        "pager-older-n": "{{PLURAL:$1|purana 1|purana $1}}",
        "suppress": "Oversight",
        "querypage-disabled": "Ii khaas panna ke performance kaaran se disable kar drwa gais hae.",
+       "apihelp": "API madat",
+       "apihelp-no-such-module": "Module \"$1\" ke paawa nai gais hae.",
        "booksources": "Pustak sources",
        "booksources-search-legend": "Book sources ke khojo",
+       "booksources-search": "Khojo",
        "booksources-text": "Niche ke suchi me uu websites ke jorr hai jon ki nawaa aur use karaa gais book ke beche hai aur jon book ke aap khojtaa hai uske baare aur jaankari de sake hai:",
        "booksources-invalid-isbn": "Dewa gais ISBN thiik nai hai; iske purana jagha se copy kare ke time ke error ke check karo.",
        "specialloguserlabel": "Sadasya:",
        "listgrouprights-removegroup-self": "{{PLURAL:$2|group|groups}} ke aapan account se hatae saktaa hai: $1",
        "listgrouprights-addgroup-self-all": "Sab group ke aapan account me jorre saktaa hai",
        "listgrouprights-removegroup-self-all": "Sab group ke aapan account se hatae saktaa hai",
+       "listgrouprights-namespaceprotection-header": "Namespace restrictions",
+       "listgrouprights-namespaceprotection-namespace": "Namespace:",
+       "listgrouprights-namespaceprotection-restrictedto": "Adhikar jon ki sadasya ke badlao kare de hae.",
        "mailnologin": "Koi bheje waala address nai hai",
        "mailnologintext": "Duusra logan ke lage e-mail bheje ke khatir aap ke [[Special:UserLogin|logged in]] aur [[Special:Preferences|preferences]]  me thik e-mail hoew ke chaahi.",
        "emailuser": "Ii user ke E-mail karo",
        "mywatchlist": "Dhyaan suchi",
        "watchlistfor2": "$1 $2 ke khatir",
        "nowatchlist": "Aap ke dhyan suchi me koi chij nai hai.",
-       "watchlistanontext": "Aapan dhyan suchi me ke dekhe nai to badle ke khatir meharbani kar ke $1 karo.",
+       "watchlistanontext": "Aapan dhyan suchi me ke dekhe nai to badle ke khatir meharbani kar ke log in karo.",
        "watchnologin": "Logged in nai hai",
        "addwatch": "Dhyan suchi me jorro",
        "addedwatchtext": "Panna \"[[:$1]]\" ke aap ke [[Special:Watchlist|watchlist]] me jorr dewa gais hae.\nIi panna ke aage ke badlao aur usse jurra baat waala panna ki suchi hian pe hae.",
        "delete-toobig": "Ii panna ke barraa balao ke itihass hai, $1 se jaada {{PLURAL:$1|revision|revisions}}.\nAisan panna ke mitae pe rok lagawa gais hai so that accidental disruption of {{SITENAME}} ke roka jaae sake hai.",
        "delete-warning-toobig": "Ii panna ke lambaa badlao ke itihaas hai, $1 {{PLURAL:$1|revision|revisions}} se jaada.\nIske mitae se {{SITENAME}} me database operations me baadha parri;\nsawadhani se aage barrho.",
        "rollback": "Pahile jaise kare waala badlao",
-       "rollback_short": "Pahile jaise karo",
        "rollbacklink": "pahile jaise karo",
        "rollbacklinkcount": "$1 {{PLURAL:$1|edit|edits}} ke rollback karo",
        "rollbacklinkcount-morethan": "$1 {{PLURAL:$1|edit|edits}} se jaada badlao ke rollback karo",
        "import-logentry-interwiki": "transwikied $1",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|badlao|badlao}} $2 se",
        "javascripttest": "JavaScript ke testing",
-       "javascripttest-title": "$1 tests ke chaalu karaa jaae hae",
        "javascripttest-pagetext-noframework": "Ii panna ke JavaScript test ke kare ke khatir reserve karaa gais hae.",
        "javascripttest-pagetext-unknownframework": "Anjaan testing framework \"$1\".",
        "javascripttest-pagetext-frameworks": "Meharbaani kar ke ek testing framework ke chuno: $1",
        "javascripttest-pagetext-skins": "Test kare ke khatir ek chamrraa ke chuno:",
        "javascripttest-qunit-intro": "mediawiki.org me [$1 testing documentation] ke dekho.",
-       "javascripttest-qunit-heading": "MediaWiki JavaScript QUnit test suite",
        "tooltip-pt-userpage": "Aap ke sadasya panna",
        "tooltip-pt-anonuserpage": "IP jisme se aap edit karta hai ke sadasya panna",
        "tooltip-pt-mytalk": "Aap ke baat waala panna",
index ee5c85e..96b3d92 100644 (file)
        "subcategories": "Podkategorije",
        "category-media-header": "Medije w kategoriji „$1”",
        "category-empty": "''Tuta kategorija tuchwilu žane nastawki abo medije njewobsahuje.''",
-       "hidden-categories": "{{PLURAL:$1|Schowana kategorija|Schowanej kategoriji|Schowane kategorije|Schowanych kategorijow}}",
+       "hidden-categories": "{{PLURAL:$1|Schowana kategorija|Schowanej kategoriji|Schowane kategorije|Schowane kategorije}}",
        "hidden-category-category": "Schowane kategorije",
        "category-subcat-count": "{{PLURAL:$2|Tuta kategorija ma jenož slědowacu podkategoriju.|Tuta kategorija ma {{PLURAL:$1|slědowacu podkategoriju|$1 slědowacej podkategoriji|$1 slědowace podkategorije|$1 slědowacych podkategorijow}} z dohromady $2.}}",
        "category-subcat-count-limited": "Tuta kategorija ma {{PLURAL:$1|slědowacu podkategoriju|slědowacej $1 podkategoriji|slědowace $1 podkategorije|slědowacych $1 podkategorijow}}:",
        "delete-warning-toobig": "Tuta strona ma z wjace hač $1 {{PLURAL:$1|wersiju|wersijomaj|wersijemi|wersijemi}} wulke wobdźěłanske stawizny. Wušmórnjenje móže operacije datoweje banki {{SITENAME}} přetorhnyć; pokročuj z kedźbliwosću.",
        "deleting-backlinks-warning": "'''Warnowanje:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Druhe strony]] wotkazuja k stronje abo strona je druhdźe zapřijata, kotruž chceš zhašeć.",
        "rollback": "Změny cofnyć",
-       "rollback_short": "Cofnyć",
        "rollbacklink": "Cofnyć",
        "rollbacklinkcount": "$1 {{PLURAL:$1|změnu|změnje|změny|změnow}} cofnyć",
        "rollbacklinkcount-morethan": "přez $1 {{PLURAL:$1|změnu|změnje|změny|změnow}} cofnyć",
        "import-logentry-interwiki": "je stronu $1 z druheho wikija přenjesł",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|wersija|wersiji|wersije|wersijow}} z $2 {{PLURAL:$1|importowana|importowanej|importowane|importowane}}",
        "javascripttest": "JavaScriptowy test",
-       "javascripttest-title": "Testy $1 so přewjedu",
        "javascripttest-pagetext-noframework": "Tuta strona je za přewjedźenje javascriptowych testow přewostajena.",
        "javascripttest-pagetext-unknownframework": "Njeznaty wobłuk \"$1\".",
        "javascripttest-pagetext-frameworks": "Prošu wubjer jedyn ze slědowacych testowanskich wobłukow: $1",
        "javascripttest-pagetext-skins": "Wubjer drastu za přewjedźenje testow:",
        "javascripttest-qunit-intro": "Hlej [$1 testowansku dokumentaciju] na mediawiki.org.",
-       "javascripttest-qunit-heading": "MediaWiki JavaScript QUnit Test Suite",
        "tooltip-pt-userpage": "Twoja wužiwarska strona",
        "tooltip-pt-anonuserpage": "Wužiwarska strona IP-adresy, z kotrejž tuchwilu dźěłaš",
        "tooltip-pt-mytalk": "Twoja diskusijna strona",
        "watchlisttools-raw": "Lisćinowy format wobdźěłać (import/eksport)",
        "iranian-calendar-m2": "Ordibehešt",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|diskusija]])",
-       "unknown_extension_tag": "Njeznata taflička rozšěrjenja \"$1\"",
        "duplicate-defaultsort": "Warnowanje: Standardny sortěrowonski kluč (DEFAULTSORTKEY) \"$2\" přepisa prjedawšu sortěrowanski kluč \"$1\".",
        "version": "Wersija",
        "version-extensions": "Instalowane rozšěrjenja",
        "specialpages-group-wiki": "Daty a nastroje",
        "specialpages-group-redirects": "Daleposrědkowace specialne strony",
        "specialpages-group-spam": "Spamowe nastroje",
+       "specialpages-group-developer": "Nastroje wuwiwarjow",
        "blankpage": "Prózdna strona",
        "intentionallyblankpage": "Tuta strona je z wotpohladom prózdna.",
        "external_image_whitelist": " #Wostaj tutu linku eksaktnje kaž je<pre>\n#Zapodaj deleka fragmenty regularnych wurazow (jenož tón dźěl mjez //)\n#Tute přirunuja so z URL eksternych wobrazow\n#Přihódne zwobraznja so jako wobrazy, hewak so jenož wotkaz k wobrazej pokaza\n#Z linkami, kotrež so z # započinaja, wobchadźeja kaž komentary\n#To na wulkopisanje njedźiwa\n\n#Zapodaj wšě fragmenty regularnych wurazow nad tutej linku. Wostaj tutu linku eksaktnje kaž je</pre>",
index ec6b000..d6dc939 100644 (file)
        "deleteprotected": "Tu non pote deler iste pagina perque illo ha essite protegite.",
        "deleting-backlinks-warning": "'''Attention:''' Il ha [[Special:WhatLinksHere/{{FULLPAGENAME}}|altere paginas]] que liga a o transclude le pagina que tu es sur le puncto de deler.",
        "rollback": "Revocar modificationes",
-       "rollback_short": "Revocar",
        "rollbacklink": "revocar",
        "rollbacklinkcount": "revocar $1 {{PLURAL:$1|modification|modificationes}}",
        "rollbacklinkcount-morethan": "revocar plus de $1 {{PLURAL:$1|modification|modificationes}}",
        "namespace": "Spatio de nomine:",
        "invert": "Inverter selection",
        "tooltip-invert": "Marca iste quadrato pro celar le modificationes in paginas intra le spatio de nomines seligite (e le spatio de nomines associate, si tal option es seligite)",
+       "tooltip-whatlinkshere-invert": "Marca iste quadrato pro celar ligamines de paginas in le spatio de nomines seligite.",
        "namespace_association": "Spatio de nomines associate",
        "tooltip-namespace_association": "Marca iste quadrato pro includer anque le spatio de nomines de discussion o de subjecto associate al spatio de nomines seligite",
        "blanknamespace": "(Principal)",
        "javascripttest": "Test de JavaScript",
        "javascripttest-pagetext-noframework": "Iste pagina es reservate pro le execution de tests de JavaScript.",
        "javascripttest-pagetext-unknownframework": "Structura de test \"$1\" incognite.",
+       "javascripttest-pagetext-unknownaction": "Action \"$1\" incognite.",
        "javascripttest-pagetext-frameworks": "Per favor selige un del sequente structuras de test: $1",
        "javascripttest-pagetext-skins": "Selige un apparentia con le qual executar le tests:",
        "javascripttest-qunit-intro": "Vide [$1 documentation de tests] sur mediawiki.org.",
index 1a36523..0696ba7 100644 (file)
        "uploaderror": "Errore nel caricamento",
        "upload-recreate-warning": "'Attenzione'': un file con questo nome è stato cancellato o spostato.'''\nIl log delle cancellazioni e degli spostamenti di questa pagina viene qui riportato per comodità:",
        "uploadtext": "Usare il modulo sottostante per caricare nuovi file. Per visualizzare o ricercare i file già caricati, consultare il [[Special:FileList|log dei file caricati]]. Caricamenti di file e di nuove versioni di file sono registrati nel [[Special:Log/upload|log degli upload]], le cancellazioni nell'[[Special:Log/delete|apposito]].\n\nPer inserire un file all'interno di una pagina, fare un collegamento di questo tipo:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''' per usare la versione completa del file\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|testo alternativo]]</nowiki></code>''' per usare una versione larga 200 pixel inserita in un box, allineata a sinistra e con 'testo alternativo' come didascalia\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' per generare un collegamento diretto al file senza visualizzarlo",
-       "upload-permitted": "Tipi di file consentiti: $1.",
-       "upload-preferred": "Tipi di file consigliati: $1.",
-       "upload-prohibited": "Tipi di file non consentiti: $1.",
+       "upload-permitted": "{{PLURAL:$2|Tipo di file consentito|Tipi di file consentiti}}: $1.",
+       "upload-preferred": "{{PLURAL:$2|Tipo di file consigliato|Tipi di file consigliati}}: $1.",
+       "upload-prohibited": "{{PLURAL:$2|Tipo di file non consentito|Tipi di file non consentiti}}: $1.",
        "uploadlogpage": "File caricati",
        "uploadlogpagetext": "Di seguito sono elencati gli ultimi file caricati.\nConsultare la [[Special:NewFiles|galleria dei nuovi file]] per una visione d'insieme.",
        "filename": "Nome del file",
        "namespace": "Namespace:",
        "invert": "Inverti selezione",
        "tooltip-invert": "Seleziona questa casella per nascondere le modifiche alle pagine all'interno del namespace selezionato (ed il namespace associato, se selezionato)",
+       "tooltip-whatlinkshere-invert": "Seleziona questa casella per nascondere i collegamenti dalle pagine all'interno del namespace selezionato",
        "namespace_association": "Namespace associato",
        "tooltip-namespace_association": "Seleziona questa casella per includere anche la pagina di discussione o l'oggetto del namespace associato con il namespace selezionato",
        "blanknamespace": "(Principale)",
index b290c1d..75cb69e 100644 (file)
@@ -62,7 +62,8 @@
                        "Mfuji",
                        "Takot",
                        "SkyDaisy9",
-                       "Los688"
+                       "Los688",
+                       "朝彦"
                ]
        },
        "tog-underline": "リンクの下線:",
        "thumbnail-temp-create": "一時的なサムネイルファイルを作成できません",
        "thumbnail-dest-create": "サムネイルを保存先に保存できません",
        "thumbnail_invalid_params": "サムネイル引数が無効です",
+       "thumbnail_toobigimagearea": "$1よりも大きな寸法のファイル",
        "thumbnail_dest_directory": "出力ディレクトリを作成できません",
        "thumbnail_image-type": "対応していない画像形式です",
        "thumbnail_gd-library": "GDライブラリの構成が不完全です: 関数$1が不足",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|トーク]])",
        "duplicate-defaultsort": "<strong>警告:</strong> 既定のソートキー「$2」が、その前に書かれている既定のソートキー「$1」を上書きしています。",
        "duplicate-displaytitle": "<strong>警告:</strong> DISPLAYTITLE「$2」が、その前に書かれているDISPLAYTITLE「$1」を上書きしています。",
+       "invalid-indicator-name": "<strong>エラー:</strong> ページ・ステータス・インディケーターの <code>name</code> 属性は空であってはいけません。",
        "version": "バージョン情報",
        "version-extensions": "インストール済み拡張機能",
        "version-skins": "インストール済み外装",
index 899488a..ea98632 100644 (file)
        "searchrelated": "მიბმული",
        "searchall": "ყველა",
        "showingresults": "ქვემოთ იხილეთ <b>$1</b>-მდე შედეგი დაწყებული #<b>$2</b>-იდან.",
-       "search-nonefound": "á\83\9bá\83\9dá\83\97á\83®á\83\9dá\83\95á\83\9cá\83\98á\83¡ á\83¨á\83\94á\83¡á\83\90á\83\91á\83\90á\83\9bá\83\98á\83¡á\83\9dá\83\91á\83\90 á\83\90á\83  á\83\90á\83 á\83\98á\83¡ á\83\9cá\83\90á\83\9eá\83\9dá\83\95á\83\9cá\83\98.",
+       "search-nonefound": "á\83\9bá\83¡á\83\92á\83\90á\83\95á\83¡á\83\98 á\83\9bá\83\9dá\83\97á\83®á\83\9dá\83\95á\83\9cá\83\98á\83\97 á\83\92á\83\95á\83\94á\83 á\83\93á\83\98 á\83\95á\83\94á\83  á\83\9bá\83\9dá\83\98á\83«á\83\94á\83\91á\83\9cá\83\90.",
        "powersearch-legend": "გაფართოებული ძიება",
        "powersearch-ns": "ძიება სახელთა სივრცეებში:",
        "powersearch-togglelabel": "მონიშვნა:",
index 7aac592..8c8088e 100644 (file)
        "yourtext": "Мәтініңіз",
        "storedversion": "Сақталған нұсқасы",
        "nonunicodebrowser": "<strong>Ескерту: Шолғышыңыз Юникод белгілеуіне үйлесімді емес</strong>\nЖұмыс істеуге ықтималдық беру үшін төмендегі кірістіру орнында ASCII емес таңбалар оналтылық кодымен көрсетіледі.",
-       "editingold": "<strong>Ескерту: Осы беттің бұрыңғы нұсқасын өңдеудесіз.</strong>\nБұны сақтасаңыз осы нұсқадан кейінгі барлық өзгерістер жоғалады.",
+       "editingold": "<strong>Ескерту: Осы беттің бұрынғы нұсқасын өңдеудесіз.</strong> Бұны сақтасаңыз осы нұсқадан кейінгі барлық өзгерістер жоғалады.",
        "yourdiff": "Айырмашылықтар",
        "copyrightwarning": "{{SITENAME}} жобасына қосқан барлық үлестеріңіз $2 (көбірек ақпарат үшін: $1) аясында жарияланатынын ескеріңіз.\nЕгер еңбегіңіздің еркін өңделуін және ақысыз көпшілікке таралуын қаламасаңыз мұнда жарияламаңыз<br />\nТағы да бұл мәліметті өзіңіз жазғаныңызға не қоғам қазынасынан немесе сондай ашық қорлардан көшірілгеніне бізге уәде бересіз.\n<strong>Авторлық құқықпен қорғалған мәліметті рұқсатсыз жарияламаңыз!</strong>",
        "copyrightwarning2": "{{SITENAME}} жобасына қосқан барлық үлестеріңізді басқа үлескерлер өңдеуге, өзгертуге немесе аластауы мүмкін екенін ескеріңіз.\nЕгер еңбегіңіздің еркін өңделуін қаламасаңыз осында жарияламаңыз.<br />\nТағы да бұл мәліметті өзіңіз жазғаныңызға не қоғам қазынасынан немесе сондай ашық қорлардан көшірілгеніне бізге уәде бересіз. (көбірек ақпарат үшін $1 құжатын қараңыз).\n<strong>Авторлық құқықпен қорғалған мәліметті рұқсатсыз жарияламаңыз!",
        "undelete-fieldset-title": "Нұсқаларды қалпына келтіру",
        "undeleteextrahelp": "Толық бет тарихын қалпына келтіру үшін барлық құсбелгі көздерді босатып <strong><em>{{int:undeletebtn}}</em></strong> батырмасын нұқыңыз.\nБөлектеумен қалпына келтіруді орындау үшін қалпына келтіру керек түзетулеріне сәйкес көздерге құсбелгімен белгілеп <strong><em>{{int:undeletebtn}}</em></strong> батырмасын басыңыз.",
        "undeleterevisions": "$1 түзету мұрағатталды",
-       "undeletehistory": "Ð\95геÑ\80 Ð±ÐµÑ\82Ñ\82Ñ\96 Ò\9bалпÑ\8bна ÐºÐµÐ»Ñ\82Ñ\96Ñ\80Ñ\81еңÑ\96з Ñ\82аÑ\80иÑ\85Ñ\8bна Ð±Ð°Ñ\80лÑ\8bÒ\9b Ñ\82үзеÑ\82Ñ\83леÑ\80 Ð´Ðµ Ò\9bалпÑ\8bна ÐºÐµÐ»Ñ\82Ñ\96Ñ\80Ñ\96ледÑ\96. \nÐ\95геÑ\80 Ð¶Ð¾Ñ\8eдан Ñ\81оң Ð´Ó\99л Ñ\81олай Ð°Ñ\82аÑ\83Ñ\8bмен Ð¶Ð°Ò£Ð° Ð±ÐµÑ\82 Ð±Ð°Ñ\81Ñ\82алÑ\81а Ò\9bалпÑ\8bна ÐºÐµÐ»Ñ\82Ñ\96Ñ\80Ñ\96лген Ñ\82үзеÑ\82Ñ\83леÑ\80 Ð±Ò±Ñ\80Ñ\8bÒ£ғы өңделу тарихында көрсетіледі.",
+       "undeletehistory": "Ð\95геÑ\80 Ð±ÐµÑ\82Ñ\82Ñ\96 Ò\9bалпÑ\8bна ÐºÐµÐ»Ñ\82Ñ\96Ñ\80Ñ\81еңÑ\96з Ñ\82аÑ\80иÑ\85Ñ\8bндаÒ\93Ñ\8b Ð±Ð°Ñ\80лÑ\8bÒ\9b Ñ\82үзеÑ\82Ñ\83леÑ\80 Ð´Ðµ Ò\9bалпÑ\8bна ÐºÐµÐ»Ñ\82Ñ\96Ñ\80Ñ\96ледÑ\96. Ð\95геÑ\80 Ð¶Ð¾Ñ\8eдан Ñ\81оң Ð´Ó\99л Ñ\81олай Ð°Ñ\82аÑ\83Ñ\8bмен Ð¶Ð°Ò£Ð° Ð±ÐµÑ\82 Ð±Ð°Ñ\81Ñ\82алÑ\81а Ò\9bалпÑ\8bна ÐºÐµÐ»Ñ\82Ñ\96Ñ\80Ñ\96лген Ñ\82үзеÑ\82Ñ\83леÑ\80 Ð±Ò±Ñ\80Ñ\8bнғы өңделу тарихында көрсетіледі.",
        "undeleterevdel": "Егер бұл үстіңгі бетте аяқталса, не файл түзетуі жарым-жартылай жойылған болса, жою болдырмауы орындалмайды.\nОсындай жағдайларда, ең жаңа жойылған түзетуін алып тастауыңыз не жасыруын болдырмауыңыз жөн.",
        "undeletehistorynoadmin": "Бұл бет жойылған.\nЖою себебі алдындағы өңдеген қатысушылар егжей-тегжейлерімен бірге төмендегі қысқаша мазмұндамасында көрсетілген.\nМына жойылған түзетулерін көкейкесті мәтіні тек әкімшілерге жетімді.",
        "undelete-revision": "$4,  $5  кезіндегі $3 жойған $1 дегеннің жойылған түзетуі:",
        "databasenotlocked": "Дерекқор құлыпталған жоқ.",
        "move-page": "«$1» дегенді жылжыту",
        "move-page-legend": "Бетті жылжыту",
-       "movepagetext": "Бетті бүкіл тарихымен қоса жаңа атауға жылжытқалы жатырсыз.\nБеттің бұрыңғы атауы жаңа бетке айдағыш сілтеме ретінде қалады.\nҚаласаңыз, бұрыңғы атауды мегзейтін сілтемелердің автоматты түрде жаңартылуын таңдай аласыз. Бұны таңдамаған жағдайда, [[Special:DoubleRedirects|екі мәрте айдағыш]] не [[Special:BrokenRedirects|сынық айдағыш]] сілтемелер қалып қоймауына көз жеткізіңіз.\nЖылжытудан кейін әр сілтеме өзіне тиісті бетке мегзейтініне жауапты боласыз.\n\nЕгер жылжытайын деп жатқан жаңа атау басқа бетке әлдеқашан берілген болса, жылжыту <strong>орындалмайды</strong>. Бұл шара әлдеқашан бар беттің қайта жазылуынан сақтайды. Алайда, егер бет —   бос бет, не өткен тарихы жоқ [[Special:ListRedirects|айдағыш бет]] болса, жылжыту орындалады. Бұл жаңылыс жылжытылған бетті бұрыңғы атауына қайтаруды мүмкін ету үшін жасалған.\n\n\n</strong>Ескерту!</strong>\nБұл көп қаралатын бет үшін қатаң және күтілмеген өзгеріс болуы мүмкін;\nілгері басудан бұрын әрекетіңіздің салдарын есепке алуыңызды сұраймыз.",
-       "movepagetext-noredirectfixer": "Бетті бүкіл тарихымен қоса жаңа атауға жылжытқалы жатырсыз.\nБеттің бұрыңғы атауы жаңа бетке айдағыш сілтеме ретінде қалады.\n[[Special:DoubleRedirects|Екі мәрте айдағыш]] не [[Special:BrokenRedirects|сынық айдағыш]] сілтемелер қалып қоймауына көз жеткізіңіз.\nЖылжытудан кейін әр сілтеме өзіне тиісті бетке мегзейтініне жауапты боласыз.\n\nЕгер жылжытайын деп жатқан жаңа атау басқа бетке әлдеқашан берілген болса, жылжыту '''орындалмайды'''. Бұл шара әлдеқашан бар беттің қайта жазылуынан сақтайды. Алайда, егер бет —   бос бет, не өткен тарихы жоқ [[Special:ListRedirects|айдағыш бет]] болса, жылжыту орындалады. Бұл жаңылыс жылжытылған бетті бұрыңғы атауына қайтаруды мүмкін ету үшін жасалған.\n\n\n'''Ескерту!'''\nБұл көп қаралатын бетке тиісті өзгеріс болуы мүмкін;\nілгері басудан бұрын әрекетіңіздің салдарын есепке алуыңызды сұраймыз.",
+       "movepagetext": "Бетті бүкіл тарихымен қоса жаңа атауға жылжытқалы жатырсыз. Беттің бұрынғы атауы жаңа бетке айдағыш сілтеме ретінде қалады. Қаласаңыз, бұрынғы атауды мегзейтін сілтемелердің автоматты түрде жаңартылуын таңдай аласыз. Бұны таңдамаған жағдайда, [[Special:DoubleRedirects|екі мәрте айдағыш]] не [[Special:BrokenRedirects|сынық айдағыш]] сілтемелер қалып қоймауына көз жеткізіңіз. Жылжытудан кейін әр сілтеме өзіне тиісті бетке мегзейтініне жауапты боласыз. Егер жылжытайын деп жатқан жаңа атау басқа бетке әлдеқашан берілген болса, жылжыту <strong>орындалмайды</strong>. Бұл шара әлдеқашан бар беттің қайта жазылуынан сақтайды. Алайда, егер бет - бос бет, не өткен тарихы жоқ [[Special:ListRedirects|айдағыш бет]] болса, жылжыту орындалады. Бұл жаңылыс жылжытылған бетті бұрынғы атауына қайтаруды мүмкін ету үшін жасалған. </strong>Ескерту!</strong> Бұл көп қаралатын бет үшін қатаң және күтпеген өзгеріс болуы мүмкін; ілгері басудан бұрын әрекетіңіздің салдарын есепке алуыңызды сұраймыз.",
+       "movepagetext-noredirectfixer": "Бетті бүкіл тарихымен қоса жаңа атауға жылжытқалы жатырсыз. Беттің бұрынғы атауы жаңа бетке айдағыш сілтеме ретінде қалады. [[Special:DoubleRedirects|Екі мәрте айдағыш]] не [[Special:BrokenRedirects|сынық айдағыш]] сілтемелер қалып қоймауына көз жеткізіңіз. Жылжытудан кейін әр сілтеме өзіне тиісті бетке мегзейтініне жауапты боласыз. Егер жылжытайын деп жатқан жаңа атау басқа бетке әлдеқашан берілген болса, жылжыту \"'орындалмайды\"'. Бұл шара әлдеқашаннан бар, беттің қайта жазылуынан сақтайды. Алайда, егер бет - бос бет, не өткен тарихы жоқ [[Special:ListRedirects|айдағыш бет]] болса, жылжыту орындалады. Бұл жаңылыс жылжытылған бетті бұрынғы атауына қайтаруды мүмкіндік беру үшін жасалған. \"'Ескерту!\"' Бұл көп қаралатын бетке тиісті өзгеріс болуы мүмкін; ілгері басудан бұрын әрекетіңіздің салдарын есепке алуыңызды сұраймыз.",
        "movepagetalktext": "Келесі жағдай орын алса, қатысты талқылау беті '''жылжытылмайды''':\n*жаңа атаумен аталатын беттің талқылау беті әлдеқашан бар болған кезде (бұл жағдайда талқылауын қолмен көшіруге болады, бірақ түйіндемесіне қай беттен көшірілгендігін міндетті түрде жазыңыз)\n*төмендегі қорапшадан құсбелгі алынып тасталғанда.\n\nАл мақаланың атауын өзгертем деп мағлұматын қолмен көшіруге болмайды, себебі беттің түзету тарихын өшіреді.",
        "movearticle": "Бетті жылжыту:",
        "moveuserpage-warning": "<strong>Ескерту:</strong> Сіз қатысушы бетін жылжытпақшысыз. Назар аударыңыз, қатысушы беті ғана жылжытылуы мүмкін және қатысушы аты <em>өзгертілмейді</em>.",
-       "movecategorypage-warning": "<strong>Ескерту:</strong> Сіз санат бетінің атауын өзгерткелі жатырсыз. Бұл әрекетіңізде санат атауы ғана өзгерте аласыз сондықтан санаттың бұрыңғы атауындағы қандай да бір бет санаттың жаңа атауына өздігінен <em>санатталмайтыны</em> есіңізде болсын. Санаттың бұрыңғы атауындағы беттері мен санатшаларын жаңа атауына қайта санаттап шығуға тура келеді.",
+       "movecategorypage-warning": "<strong>Ескерту:</strong> Сіз санат бетінің атауын өзгерткелі жатырсыз. Бұл әрекетіңізде санат атауы ғана өзгерте аласыз, сондықтан санаттың бұрынғы атауындағы қандай да бір бет санаттың жаңа атауына өздігінен <em>санатталмайтыны</em> есіңізде болсын. Санаттың бұрынғы атауындағы беттері мен санатшаларын жаңа атауына қайта санаттап шығуға тура келеді.",
        "movenologintext": "Бетті жылжыту үшін тіркелген қатысуышы болуыңыз және [[Special:UserLogin|кіруіңіз]] керек.",
        "movenotallowed": "{{SITENAME}} жобасында беттерді жылжытуға рұқсатыңыз жоқ.",
        "movenotallowedfile": "Файлдарды жылжытуға рұқсатыңыз жоқ.",
index 7c9d105..6f9c049 100644 (file)
        "userpage-userdoesnotexist": "\"$1\" 사용자 계정은 등록되어 있지 않습니다.\n이 문서를 만들거나 편집하려면 계정이 존재하는지 확인해주세요.",
        "userpage-userdoesnotexist-view": "\"$1\" 사용자 계정은 등록되어 있지 않습니다.",
        "blocked-notice-logextract": "이 사용자는 현재 차단되어 있습니다.\n해당 사용자의 최근 차단 기록을 참고하십시오:",
-       "clearyourcache": "'''참고:''' 설정을 저장한 후에 바뀐 점을 확인하기 위해서는 브라우저의 캐시를 새로 고쳐야 합니다.\n* '''파이어폭스 / 사파리''': ''Shift'' 키를 누르면서 새로 고침을 클릭하거나, ''Ctrl-F5'' 또는 ''Ctrl-R'' 을 입력 (Mac에서는 ''⌘-R'')\n* '''구글 크롬''': ''Ctrl-Shift-R''키를 입력 (Mac에서는 ''⌘-Shift-R'')\n* '''인터넷 익스플로러''': ''Ctrl'' 키를 누르면서 새로 고침을 클릭하거나, ''Ctrl-F5''를 입력.\n* '''오페라''': ''도구→설정''에서 캐시를 비움",
+       "clearyourcache": "<strong>참고:</strong> 설정을 저장한 후에 바뀐 점을 확인하기 위해서는 브라우저의 캐시를 새로 고쳐야 합니다.\n* <strong>Firefox / Safari</strong>: <em>Shift</em> 키를 누르면서 새로 고침을 클릭하거나, <em>Ctrl-F5</em> 또는 <em>Ctrl-R</em> 을 입력 (Mac에서는 <em>⌘-R</em>)\n* <strong>Google Chrome</strong>: <em>Ctrl-Shift-R</em>키를 입력 (Mac에서는 <em>⌘-Shift-R</em>)\n* <strong>Internet Explorer</strong>: <em>Ctrl</em> 키를 누르면서 새로 고침을 클릭하거나, <em>Ctrl-F5</em>를 입력.\n* <strong>Opera</strong>: <em>도구→설정</em>에서 캐시를 비움",
        "usercssyoucanpreview": "'''안내''': CSS 문서를 저장하기 전에 \"{{int:showpreview}}\" 기능을 통해 작동을 확인해주세요.",
        "userjsyoucanpreview": "'''안내''': 자바스크립트 문서를 저장하기 전에 \"{{int:showpreview}}\" 기능을 통해 작동을 확인해주세요.",
        "usercsspreview": "'''사용자 CSS의 미리 보기입니다.'''\n'''아직 저장하지 않았습니다!'''",
        "rev-suppressed-text-view": "이 문서의 판은 <strong>숨겨져</strong> 있습니다.\n숨겨진 판을 볼 수 있으며 자세한 내용은 [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 숨김 기록]에서 찾을 수 있습니다.",
        "rev-deleted-no-diff": "특정 판이 문서 역사에서 '''삭제'''되었기 때문에 비교할 수 없습니다.\n[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 삭제 기록]에서 자세한 내용을 볼 수 있습니다.",
        "rev-suppressed-no-diff": "두 판 중 일부가 '''삭제'''되었기 때문에 문서 편집 내용을 비교할 수 없습니다.",
-       "rev-deleted-unhide-diff": "이 비교에 사용된 판 가운데 하나가 '''삭제'''되었습니다.\n[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 삭제 기록]에 자세한 내용을 찾아볼 수 있습니다.\n계속 작업하고 싶다면 여전히 [$1 비교 보기]를 계속할 수 있습니다.",
+       "rev-deleted-unhide-diff": "비교하려는 판 가운데 <strong>삭제</strong>된 판이 있습니다. 자세한 내용은 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 삭제 기록]에서 찾아볼 수 있습니다.\n원하는 경우 [$1 비교 보기]를 계속하실 수 있습니다.",
        "rev-suppressed-unhide-diff": "이 비교에 사용된 판 가운데 하나가 '''숨겨져''' 있습니다.\n[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 숨김 기록]에 자세한 내용이 있을 수 있습니다.\n계속 작업하고 싶다면 [$1 해당 편집]을 볼 수도 있습니다.",
        "rev-deleted-diff-view": "비교 대상 중 어느 한 판이 '''삭제'''되었습니다.\n삭제된 판과 다른 판의 비교를 할 수 있습니다. 자세한 내용은 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 삭제 기록]에서 찾아볼 수 있습니다.",
-       "rev-suppressed-diff-view": "비교하려는 판 중 일부가 '''숨겨져''' 있습니다.\n숨겨진 판과 이 판의 편집 비교를 할 수 있습니다. 자세한 내용은 [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 해당 숨김 기록]에서 찾아볼 수 있습니다.",
+       "rev-suppressed-diff-view": "비교하려는 판 가운데 <strong>숨겨진</strong> 판이 있습니다.\n숨겨진 판과 이 판의 편집 비교를 할 수 있습니다. 자세한 내용은 [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 숨김 기록]에서 찾아볼 수 있습니다.",
        "rev-delundel": "보이기/숨기기",
        "rev-showdeleted": "보이기",
        "revisiondelete": "판 삭제/되살리기",
        "badfilename": "파일 이름이 \"$1\"로 바뀌었습니다.",
        "filetype-mime-mismatch": "\".$1\" 파일 확장자와 이 파일의 MIME 형식($2)이 일치하지 않습니다.",
        "filetype-badmime": "\"$1\" MIME 형식을 가진 파일은 올릴 수 없습니다.",
-       "filetype-bad-ie-mime": "이 파일을 올릴 수 없습니다. 인터넷 익스플로러가 잠재적으로 위험한 파일 형식으로 판단하여 사용이 금지된 \"$1\"로 인식할 수 있습니다.",
+       "filetype-bad-ie-mime": "이 파일을 올릴 수 없습니다. Internet Explorer가 잠재적으로 위험한 파일 형식으로 판단하여 사용이 금지된 \"$1\"로 인식할 수 있습니다.",
        "filetype-unwanted-type": "'''\".$1\"''' 확장자는 권장하지 않습니다.\n권장하는 {{PLURAL:$3|파일 확장자}}는 $2입니다.",
        "filetype-banned-type": "'''\".$1\"''' {{PLURAL:$4|형식의 파일은 올릴 수 없습니다}}.\n$2 {{PLURAL:$3|형식만 사용할 수 있습니다}}.",
        "filetype-missing": "파일에 확장자(\".jpg\" 등)가 없습니다.",
        "deletereasonotherlist": "다른 이유",
        "deletereason-dropdown": "* 일반적인 삭제 이유\n** 스팸\n** 문서 훼손 행위\n** 저작권 침해\n** 작성자의 요청\n** 깨진 넘겨주기",
        "delete-edit-reasonlist": "삭제 이유 편집",
-       "delete-toobig": "ì\9d´ ë¬¸ì\84\9cì\97\90ë\8a\94 {{PLURAL:$1|í\8e¸ì§\91 ì\97­ì\82¬}}ê°\80 $1ê°\9c ì\9e\88ì\8aµë\8b\88ë\8b¤.\ní\8e¸ì§\91 ì\97­ì\82¬ê°\80 ê¸´ ë¬¸ì\84\9c를 ì\82­ì \9cí\95\98ë©´ {{SITENAME}}ì\97\90 í\81° í\98¼ë\9e\80ì\9d\84 ì¤\84 ì\88\98 ì\9e\88기 ë\95\8c문ì\97\90 ì\82­ì \9cí\95  ì\88\98 ì\97\86ì\8aµ니다.",
+       "delete-toobig": "ì\9d´ ë¬¸ì\84\9cì\97\90ë\8a\94 {{PLURAL:$1|í\8e¸ì§\91 ì\97­ì\82¬}}ê°\80 $1ê°\9c ì\9d´ì\83\81 ì\9e\88ì\8aµë\8b\88ë\8b¤.\n{{SITENAME}}ì\97\90 ì\9d\98ë\8f\84í\95\98ì§\80 ì\95\8aì\9d\80 í\98¼ë\9e\80ì\9d\84 ì¤\84 ì\88\98 ì\9e\88기 ë\95\8c문ì\97\90 ì\9d´ë\9f° ë¬¸ì\84\9cì\9d\98 ì\82­ì \9cë\8a\94 ì \9cí\95\9cë\90©니다.",
        "delete-warning-toobig": "이 문서에는 {{PLURAL:$1|편집 역사}}가 $1개 있습니다.\n편집 역사가 긴 문서를 삭제하면 {{SITENAME}} 데이터베이스 동작에 큰 영향을 줄 수 있습니다.\n주의해 주세요.",
        "deleteprotected": "이 문서가 잠겨 있기 때문에 삭제할 수 없습니다.",
        "deleting-backlinks-warning": "'''경고:''' 삭제하려는 문서가 [[Special:WhatLinksHere/{{FULLPAGENAME}}|다른 문서]]에 링크되어 있거나 끼워져 있습니다.",
        "logentry-newusers-create": "$1 사용자 계정을 {{GENDER:$2|만들었습니다}}",
        "logentry-newusers-create2": "$1 사용자가 $3 사용자 계정을 {{GENDER:$2|만들었습니다}}",
        "logentry-newusers-byemail": "$3 사용자 계정을 $1님이 {{GENDER:$2|만들었고}} 비밀번호는 이메일로 보냈습니다",
-       "logentry-newusers-autocreate": "$1 ì\82¬ì\9a©ì\9e\90 ê³\84ì \95ì\9d\84 ì\9e\90ë\8f\99ì \81ì\9c¼ë¡\9c {{GENDER:$2|ë§\8cë\93¤ì\97\88ì\8aµë\8b\88ë\8b¤}}",
+       "logentry-newusers-autocreate": "$1 사용자 계정을 자동으로 {{GENDER:$2|만들었습니다}}",
        "logentry-rights-rights": "$1 사용자가 $3 사용자의 권한을 $4에서 $5으로 {{GENDER:$2|바꾸었습니다}}",
        "logentry-rights-rights-legacy": "$1 사용자가 $3 사용자의 권한을 {{GENDER:$2|바꾸었습니다}}",
        "logentry-rights-autopromote": "$1 사용자의 권한을 자동적으로 $4에서 $5으로 {{GENDER:$2|바꾸었습니다}}",
index 0e7bbeb..633acdf 100644 (file)
        "uploaderror": "Feeler bäim Eroplueden",
        "upload-recreate-warning": "'''Opgepasst: E Fichier mat deem Numm gouf scho geläscht oder geréckelt.'''\n\nHei fannt Dir en Extrait aus dem Läsch- a Réckel-Logbuch fir dëse Fichier.",
        "uploadtext": "Benotzt dëse Formulaire, fir nei Fichieren eropzelueden.\nGitt op d'[[Special:FileList|Lëscht vun den eropgeluedene Fichieren]], fir no Fichieren ze sichen déi virdrun eropgeluede goufen, Eropluedunge fannt dir an der [[Special:Log/upload|Lëscht vun den eropgeluedene Fichieren]], geläscht Fichiere stinn am [[Special:Log/delete|Läschlog]].\n\nFir e '''Bild''' op enger Säit ze benotzen, schreift amplaz vum Bild eng vun dëse Formelen:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Fichier.jpg]]</nowiki></code>''' fir déi ganz Versioun vum Fichier ze benotzen\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Fichier.png|200px|thumb|left|alt text]]</nowiki></code>''' fir eng 200 Pixel breet Versioun an enger Këscht am lénke Rand mat 'alt text' als Beschreiwung\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Fichier.ogg]]</nowiki></code>''' fir e Fichier direkt ze verlinken ouni de Fichier ze weisen",
-       "upload-permitted": "Erlaabt Formater vun de Fichieren: $1.",
-       "upload-preferred": "Fichierszorten déi am beschte funktionéieren: $1.",
-       "upload-prohibited": "Verbuede Fichiers Formater: $1.",
+       "upload-permitted": "{{PLURAL:$2|Erlaabten Typ|Erlaabt Type}} vu Fichieren: $1.",
+       "upload-preferred": "{{PLURAL:$2|Fichierszort|Fichierszorten}} déi am beschte {{PLURAL:$2|funktionéiert|funktionéieren}}: $1.",
+       "upload-prohibited": "{{PLURAL:$2|Verbuedene|Verbuede}} Fichiers {{PLURAL:$2|Format|Formater}}: $1.",
        "uploadlogpage": "Logbuch vum Eroplueden",
        "uploadlogpagetext": "Dëst ass d'Lëscht vun de rezente Fichieren déi eropgeluede goufen.\nKuckt [[Special:NewFiles|d'Gallerie vun de neie Fichieren]] wann Dir méi e visuellen Iwwerbléck wëllt",
        "filename": "Numm vum Fichier",
index b2a8bb2..d008401 100644 (file)
        "filerenameerror": "نبوئه جانیا $1 د $2 نوم آلشت بوئه",
        "filedeleteerror": "نبوئه جانیا $1 پاکسا بوئه",
        "directorycreateerror": "نبوئه سردسه $1 راس بوئه.",
+       "directoryreadonlyerror": "فقط موئه نشونگه \"$1\" بحونی.",
+       "directorynotreadableerror": "نشونگه \"$1\" حننی نئ.",
        "filenotfound": "نتونیت جانیا $1 نه پیدا بکید",
        "unexpected": "ارزایشت ناحاسته: \"$1\"=\"$2\".",
        "formerror": "خطا:نبوئه نوم بلگه وه مو بئيت",
        "content-model-javascript": "جاوا اسكريپت",
        "content-model-css": "سی اس اس",
        "content-json-empty-object": "سرتال حالی",
+       "content-json-empty-array": "آرایه حالی",
        "expensive-parserfunction-warning": "<strong>زئنار:</strong>ای بلگه مینونه دار واحونی دستوریا مئن اشکافت فره ای هئ.\n\nانازه و باید د کمتر با$2 {{جمی:$2|واحونی|واحونیا}}، ایسه {{جمی:$1|$1 واحونی|$1 واحونیا}}ئه.",
        "expensive-parserfunction-category": "بلگه یایی که واحونی پیوندگر خطا گرون فره ای ها دشو",
        "post-expand-template-inclusion-warning": "زنئار چوئه د ور گرته انازه ای یه که فره گپه.پاره ای د چوئه یا نه د ور نمیئره.",
index e85cb20..350f703 100644 (file)
@@ -28,7 +28,8 @@
                        "Xabier Armendaritz",
                        "לערי ריינהארט",
                        "Vogone",
-                       "아라"
+                       "아라",
+                       "Aswanas"
                ]
        },
        "tog-underline": "Pabraukti nuorodas:",
        "uploaderror": "Įkėlimo klaida",
        "upload-recreate-warning": "'''Dėmėsio: Failas šiuo pavadinimu buvo ištrintas arba pervadintas.'''\n\nJūsų patogumui pateiktas įrašas apie šio puslapio trynimą ar pervadinimą:",
        "uploadtext": "Kad įkeltumėte failą, naudokitės žemiau pateikta forma.\nNorėdami peržiūrėti ar ieškoti anksčiau įkeltų paveikslėlių, eikite į [[Special:FileList|įkeltų failų sąrašą]], įkėlimai yra registruojami [[Special:Log/upload|įkėlimų sąraše]], trynimai — [[Special:Log/delete|trynimų sąraše]].\n\nNorėdami panaudoti įkeltą failą puslapyje, naudokite tokias nuorodas:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Failas.jpg]]</nowiki></code>''' norėdami naudoti pilną failo versiją\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Failas.png|200px|thumb|left|alternatyvusis tekstas]]</nowiki></code>''' norėdami naudoti 200 pikselių pločio paveikslėlį rėmelyje puslapio kairėje; „alternatyvus tekstas“ bus naudojamas paveikslėlio aprašymui.\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Failas.ogg]]</nowiki></code>''' tiesioginei nuorodai į failą.",
-       "upload-permitted": "Leidžiami rinkmenų tipai: $1.",
-       "upload-preferred": "Pageidautini failų tipai: $1.",
-       "upload-prohibited": "Uždrausti failų tipai: $1.",
+       "upload-permitted": "{{PLURAL:$2|Leidžiamas rinkmenos tipas|Leidžiami rinkmenų tipai}}: $1.",
+       "upload-preferred": "Pageidautini failai {{PLURAL:$2|type|types}}: $1.",
+       "upload-prohibited": "Uždrausti failai {{PLURAL:$2|type|types}}: $1.",
        "uploadlogpage": "Įkėlimų sąrašas",
        "uploadlogpagetext": "Žemiau pateikiamas paskutinių failų įkėlimų sąrašas.\nTaip pat galite peržvelgti [[Special:NewFiles|naujausių failų galeriją]].",
        "filename": "Failo vardas",
index d50aa47..0f94255 100644 (file)
        "category-empty": "''Šī kategorija šobrīd nesatur ne lapas, ne failus''",
        "hidden-categories": "{{PLURAL:$1|Slēptas kategorijas|Slēpta kategorija|Slēptas kategorijas}}",
        "hidden-category-category": "Slēptās kategorijas",
-       "category-subcat-count": "{{PLURAL:$2|Šajai kategorijai ir tikai viena apakškategorija.|Šajai kategorijai ir $2 apakškategorijas, no kurām ir {{PLURAL:$1|redzamas $1|redzama viena|redzamas $1}}.}}",
-       "category-subcat-count-limited": "Šai kategorijai ir {{PLURAL:$1|$1 apakškategorijas|viena apakškategorija|$1 apakškategorijas}}.",
-       "category-article-count": "{{PLURAL:$2|Šī kategorija satur tikai šo vienu lapu.|Šajā kategorijā kopā ir $2 lapas, šobrīd ir {{PLURAL:$1|redzamas $1 no tām|redzama viena no tām|redzamas $1 no tām}}.}}",
-       "category-article-count-limited": "Šajā kategorijā ir {{PLURAL:$1|šīs $1 lapas|šī viena lapa|šīs $1 lapas}}.",
+       "category-subcat-count": "{{PLURAL:$2|Šai kategorijai ir $2 apakškategorijas, no kurām ir {{PLURAL:$1|redzamas $1|redzama $1|redzamas $1}}.|Šai kategorijai ir $2 apakškategorija.|Šai kategorijai ir $2 apakškategorijas, no kurām ir {{PLURAL:$1|redzamas $1|redzama $1|redzamas $1}}.}}",
+       "category-subcat-count-limited": "Šai kategorijai ir {{PLURAL:$1|$1 apakškategorijas|$1 apakškategorija|$1 apakškategorijas}}.",
+       "category-article-count": "{{PLURAL:$2|Šajā kategorijā kopā ir $2 lapu, šobrīd ir {{PLURAL:$1|redzamas $1 no tām|redzama $1 no tām|redzamas $1 no tām}}.|Šī kategorija satur $2 lapu.|Šajā kategorijā kopā ir $2 lapas, šobrīd ir {{PLURAL:$1|redzamas $1 no tām|redzama $1 no tām|redzamas $1 no tām}}.}}",
+       "category-article-count-limited": "Šajā kategorijā ir {{PLURAL:$1|šīs $1 lapas|šī $1 lapa|šīs $1 lapas}}.",
        "category-file-count": "{{PLURAL:$2|Šajā kategorijā ir $2 failu, no kuriem {{PLURAL:$1|ir redzami $1|redzams ir $1|ir redzami $1}}.|Šī kategorija satur tikai $2 failu.|Šajā kategorijā ir $2 faili, no kuriem {{PLURAL:$1|ir redzami $1|redzams ir $1|ir redzami $1}}.}}",
        "category-file-count-limited": "Šajā kategorijā atrodas {{PLURAL:$1|šie $1 faili|tikai šis fails|šie $1 faili}}.",
        "listingcontinuesabbrev": " (turpinājums)",
        "print": "Drukāt",
        "view": "Skatīt",
        "edit": "Labot šo lapu",
+       "edit-local": "Labot vietējo aprakstu",
        "create": "Izveidot",
+       "create-local": "Pievienot vietējo aprakstu",
        "editthispage": "Izmainīt šo lapu",
        "create-this-page": "Izveidot šo lapu",
        "delete": "Dzēst",
        "deletethispage": "Dzēst šo lapu",
        "undeletethispage": "Atjaunot šo lapu",
        "undelete_short": "Atjaunot $1 {{PLURAL:$1|versijas|versiju|versijas}}",
-       "viewdeleted_short": "Apskatīt {{PLURAL:$1|$1 dzēstus labojumus|vienu dzēstu labojumu|$1 dzēstus labojumus}}",
+       "viewdeleted_short": "Apskatīt {{PLURAL:$1|$1 dzēstus labojumus|$1 dzēstu labojumu|$1 dzēstus labojumus}}",
        "protect": "Aizsargāt",
        "protect_change": "izmainīt",
        "protectthispage": "Aizsargāt šo lapu",
        "jumptosearch": "meklēt",
        "view-pool-error": "Atvainojiet, šobrīd serveri ir pārslogoti.\nPārāk daudz lietotāju mēģina apskatīt šo lapu.\nLūdzu, brīdi uzgaidiet un mēģiniet šo lapu apskatīties vēlreiz.\n\n$1",
        "pool-errorunknown": "Nezināma kļūda",
+       "poolcounter-usage-error": "Izmantošanas kļūda: $1",
        "aboutsite": "Par {{grammar:akuzatīvs|{{SITENAME}}}}",
        "aboutpage": "Project:Par",
        "copyright": "Saturs ir pieejams saskaņā ar $1, ja vien nav norādīts citādi.",
        "password-login-forbidden": "Šī lietotājvārda un paroles izmantošana ir aizliegta.",
        "mailmypassword": "Atiestatīt paroli",
        "passwordremindertitle": "Jauna pagaidu parole no {{SITENAME}}s",
-       "passwordremindertext": "Kads (iespejams, Tu pats, no IP adreses $1)\nludza, lai nosutam Tev jaunu {{SITENAME}} ($4) paroli.\nLietotajam $2 pagaidu parole tagad ir $3.\nLudzu, nomaini paroli, kad esi veiksmigi iekluvis ieksa.\nTavas pagaidu paroles deriiguma terminsh beigsies peec {{PLURAL:$5|$5 dienaam|vienas dienas|$5 dienaam}}.\n\nJa paroles pieprasījumu bija nosūtījis kāds cits, vai arī tu atcerējies savu veco paroli, šo var ignorēt. Vecā parole joprojām darbojas.",
+       "passwordremindertext": "Kāds (iespējams, Tu pats, no IP adreses $1)\nlūdza, lai nosūtām Tev jaunu {{SITENAME}} ($4) paroli.\nLietotajam $2 pagaidu parole tagad ir $3.\nLudzu, nomaini paroli, kad esi veiksmīgi iekļuvis iekšš.\nTavas pagaidu paroles derīguma termiņš beigsies pēc {{PLURAL:$5|$5 dienām|$5 dienas|$5 dienām}}.\n\nJa paroles pieprasījumu bija nosūtījis kāds cits, vai arī tu atcerējies savu veco paroli, šo var ignorēt. Vecā parole joprojām darbojas.",
        "noemail": "Lietotājs \"$1\" nav reģistrējis e-pasta adresi.",
        "noemailcreate": "Tev jānorāda derīgu e-pasta adresi",
        "passwordsent": "Esam nosūtījuši jaunu paroli uz e-pasta adresi, kuru ir norādījis lietotājs $1. Lūdzu, nāc iekšā ar jauno paroli, kad būsi to saņēmis.",
        "passwordreset-text-one": "Aizpildiet šo veidlapu, lai atiestatītu savu paroli.",
        "passwordreset-legend": "Atiestatīt paroli",
        "passwordreset-disabled": "Paroles atiestates šajā viki ir atspējotas.",
+       "passwordreset-emaildisabled": "Šajā viki ir atspējotas e-pasta iespējas.",
        "passwordreset-username": "Lietotājvārds:",
        "passwordreset-domain": "Domēns:",
        "passwordreset-capture": "Apskatīt izveidoto e-pastu?",
        "content-model-text": "vienkāršs teksts",
        "content-model-javascript": "JavaScript kods",
        "content-model-css": "CSS stils",
+       "content-json-empty-object": "Tukšs objekts",
+       "content-json-empty-array": "Tukšs masīvs",
        "expensive-parserfunction-category": "Lapas ar pārāk daudz laikietilpīgiem apstrādes funkciju izsaukumiem",
        "post-expand-template-inclusion-warning": "'''Brīdinājums:''' iekļauto veidņu izmērs ir par lielu.\nDažas veidnes netiks iekļautas.",
        "post-expand-template-inclusion-category": "Lapas, kurām pārsniegts iekļauto veidņu apjoms",
        "showhideselectedversions": "Rādīt/slēpt izvēlētās versijas",
        "editundo": "atcelt",
        "diff-empty": "(Nav atšķirību)",
-       "diff-multi-sameuser": "({{PLURAL:$1|$1 starpversijas|Viena starpversija|$1 starpversijas}}, ko izdarījis viens lietotājs, nav parādīta{{PLURAL:$1||s}})",
+       "diff-multi-sameuser": "({{PLURAL:$1|$1 starpversijas|$1 starpversija|$1 starpversijas}}, ko mainījis viens lietotājs, nav {{PLURAL:$1|parādītas|parādīta|parādītas}})",
        "diff-multi-otherusers": "({{PLURAL:$1|$1 starpversijas|Viena starpversija|$1 starpversijas}}, ko {{PLURAL:$2|saglabājuši|saglabājis|saglabājuši}} {{PLURAL:$2|$2 lietotāji|viens cits lietotājs|$2 lietotāji}}, nav parādīta{{PLURAL:$1||s}})",
-       "diff-multi-manyusers": "({{PLURAL:$1|$1 starpversijas|Viena starpversija|$1 starpversijas}}, ko saglabājuši vairāk nekā $2 {{PLURAL:$2|lietotāji|lietotājs|lietotāji}}, nav parādīta{{PLURAL:$1||s}})",
+       "diff-multi-manyusers": "({{PLURAL:$1|$1 starpversijas|$1 starpversija|$1 starpversijas}}, ko saglabājuši vairāk nekā $2 {{PLURAL:$2|lietotāji|lietotājs|lietotāji}}, nav parādīta{{PLURAL:$1||s}})",
        "searchresults": "Meklēšanas rezultāti",
        "searchresults-title": "Meklēšanas rezultāti \"$1\"",
        "titlematches": "Rezultāti virsrakstos",
        "textmatches": "Rezultāti lapu tekstos",
        "notextmatches": "Neviena rezultāta, meklējot lapas tekstā",
-       "prevn": "iepriekšējās {{PLURAL:$1|$1}}",
-       "nextn": "nākamās {{PLURAL:$1|$1}}",
+       "prevn": "{{PLURAL:$1|iepriekšējās $1|iepriekšējā $1|iepriekšējās $1}}",
+       "nextn": "{{PLURAL:$1|nākamās $1|nākamā $1|nākamās $1}}",
        "prevn-title": "{{PLURAL:$1|Iepriekšējie|Iepriekšējais|Iepriekšējie}} $1 {{PLURAL:$1|rezultāti|rezultāts|rezultāti}}",
-       "nextn-title": "{{PLURAL:$1|INākošie|Nākošais|INākošie}} $1 {{PLURAL:$1|rezultāti|rezultāts|rezultāti}}",
+       "nextn-title": "{{PLURAL:$1|Nākamie|Nākamais|Nākamie}} $1 {{PLURAL:$1|rezultāti|rezultāts|rezultāti}}",
        "shown-title": "Parādīt $1 {{PLURAL:$1|rezultātus|rezultātu|rezultātus}} vienā lapā",
        "viewprevnext": "Skatīt ($1 {{int:pipe-separator}} $2) ($3 vienā lapā).",
        "searchmenu-exists": "'''Šajā projektā ir raksts ar nosaukumu \"[[:$1]]\"'''",
        "undeletecomment": "Iemesls:",
        "undeletedrevisions": "$1 {{PLURAL:$1|versijas|versija|versijas}} {{PLURAL:$1|atjaunotas|atjaunota|atjaunotas}}",
        "undeletedrevisions-files": "{{PLURAL:$1|$1 versijas|1 versija|$1 versijas}} un {{PLURAL:$2|$2 faili|1 fails|$2 faili}} atjaunoti",
-       "undeletedfiles": "{{PLURAL:$1|$1 faili atjaunoti|1 fails atjaunots|$1 faili atjaunoti}}",
+       "undeletedfiles": "{{PLURAL:$1|$1 faili atjaunoti|$1 fails atjaunots|$1 faili atjaunoti}}",
        "cannotundelete": "Atjaunošana neizdevās:\n$1",
        "undeletedpage": "'''$1 tika atjaunots'''\n\n[[Special:Log/delete|Dzēšanas reģistrā]] ir informācija par pēdējām dzēšanām un atjaunošanām.",
        "undelete-header": "Nesen dzēstajām lapām skatīt [[Special:Log/delete|dzēšanas reģistru]].",
        "watchlistedit-raw-titles": "Lapas:",
        "watchlistedit-raw-submit": "Atjaunot sarakstu",
        "watchlistedit-raw-done": "Tavs uzraugāmo rakstu saraksts tika atjaunots.",
-       "watchlistedit-raw-added": "{{PLURAL:$1|$1 lapas tika pievienotas|1 lapa tika pievienota|$1 lapas tika pievienotas}}:",
+       "watchlistedit-raw-added": "{{PLURAL:$1|$1 lapas tika pievienotas|$1 lapa tika pievienota|$1 lapas tika pievienotas}}:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|$1 lapas tika noņemtas|1 lapa tika noņemta|$1 lapas tika noņemtas}}:",
        "watchlistedit-clear-titles": "Nosaukumi:",
        "watchlisttools-view": "Skatīt atbilstošās izmaiņas",
index 0bf1630..a8b0177 100644 (file)
        "uploaderror": "അപ്‌ലോഡ് പിഴവ്",
        "upload-recreate-warning": "'''ശ്രദ്ധിക്കുക: ഇതേ പേരിലുള്ള ഒരു പ്രമാണം മായ്ക്കുകയോ മാറ്റുകയോ ചെയ്തിരിക്കുന്നു.'''\n\nഈ താളിന്റെ മായ്ക്കൽ രേഖയും മാറ്റൽ രേഖയും സ്ഥിരീകരിക്കുന്നതിനായി നൽകിയിരിക്കുന്നു:",
        "uploadtext": "താഴെ കാണുന്ന ഫോം പ്രമാണങ്ങൾ അപ്‌ലോഡ് ചെയ്യുവാൻ വേണ്ടി ഉപയോഗിക്കുക.\nനിലവിൽ അപ്‌ലോഡ് ചെയ്തിരിക്കുന്ന പ്രമാണങ്ങൾ കാണുവാൻ [[Special:FileList|അപ്‌ലോഡ് ചെയ്ത പ്രമാണങ്ങളുടെ പട്ടിക]] സന്ദർശിക്കുക. (പുതുക്കിയ) അപ്‌‌ലോഡുകൾ [[Special:Log/upload|അപ്‌ലോഡ് രേഖ]], മായ്ക്കപ്പെട്ടവ [[Special:Log/delete|മായ്ക്കൽ രേഖയിലും]] കാണാവുന്നതാണ്‌.\n\nപ്രമാണം താളിൽ പ്രദർശിപ്പിക്കുവാൻ താഴെ കാണുന്ന ഒരു വഴി സ്വീകരിക്കുക\n\n*'''<nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki>''' പൂർണ്ണരൂപത്തിലുള്ള പ്രമാണം ഉപയോഗിക്കാൻ\n*'''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|alt text]]</nowiki></code>''' 200 പിക്സൽ ഉള്ള പെട്ടിയിൽ പകരമുള്ള എഴുത്തടക്കം ഉപയോഗിക്കാൻ\n*'''<nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki>''' പ്രമാണം കാട്ടാതെ പ്രമാണത്തെ നേരിട്ടു കണ്ണി ചേർക്കാൻ",
-       "upload-permitted": "അനുവദനീയമായ പ്രമാണ തരങ്ങൾ: $1.",
-       "upload-preferred": "പ്രോത്സാഹിപ്പിക്കുന്ന പ്രമാണ തരങ്ങൾ: $1.",
-       "upload-prohibited": "നിരോധിക്കപ്പെട്ട തരം പ്രമാണങ്ങൾ: $1.",
+       "upload-permitted": "അനുവദനീയമായ പ്രമാണ {{PLURAL:$2|തരം|തരങ്ങൾ}}: $1.",
+       "upload-preferred": "പ്രോത്സാഹിപ്പിക്കുന്ന പ്രമാണ {{PLURAL:$2|തരം|തരങ്ങൾ}}: $1.",
+       "upload-prohibited": "നിരോധിക്കപ്പെട്ട {{PLURAL:$2|തരം|തരങ്ങളിലുള്ള}} പ്രമാണങ്ങൾ: $1.",
        "uploadlogpage": "അപ്‌ലോഡ് രേഖ",
        "uploadlogpagetext": "സമീപകാലത്ത് അപ്‌ലോഡ് ചെയ്ത പ്രമാണങ്ങളുടെ പട്ടിക താഴെ കാണാം.",
        "filename": "പ്രമാണത്തിന്റെ പേര്",
        "deleteprotected": "ഈ താൾ സംരക്ഷിക്കപ്പെട്ടിരിക്കുന്നതിനാൽ താങ്കൾക്കിത് മായ്ക്കാനാവില്ല.",
        "deleting-backlinks-warning": "'''മുന്നറിയിപ്പ്:''' മറ്റു താളുകളിൽ നിന്നും [[Special:WhatLinksHere/{{FULLPAGENAME}}|താളിലേയ്ക്കുള്ള കണ്ണികൾ]] അല്ലെങ്കിൽ ഉൾപ്പെടുത്തിയിട്ടുള്ള താളുകൾ താങ്കൾ മായ്ക്കാൻ പോവുകയാണ്.",
        "rollback": "തിരുത്തുകൾ റോൾബാക്ക് ചെയ്യുക",
-       "rollback_short": "റോൾബാക്ക്",
        "rollbacklink": "റോൾബാക്ക്",
        "rollbacklinkcount": "{{PLURAL:$1|ഒരു തിരുത്ത്|$1 തിരുത്തുകൾ}} മുൻപ്രാപനം ചെയ്യുക",
        "rollbacklinkcount-morethan": "{{PLURAL:$1|ഒന്നിലധികം തിരുത്തുകൾ|$1 എണ്ണത്തിലധികം തിരുത്തുകൾ}} മുൻപ്രാപനം ചെയ്യുക",
        "namespace": "നാമമേഖല:",
        "invert": "വിപരീതം തിരഞ്ഞെടുക്കുക",
        "tooltip-invert": "തിരഞ്ഞെടുക്കുന്ന നാമമേഖലയിലെ (ശരി ചേർത്തിട്ടുണ്ടെങ്കിൽ കൂടെ അനുബന്ധ നാമമേഖലയിലേയും) താളുകളിലെ മാറ്റങ്ങൾ മറയ്ക്കാൻ ഈ പെട്ടിയിൽ ശരി ചേർക്കുക",
+       "tooltip-whatlinkshere-invert": "തിരഞ്ഞെടുത്ത നാമമേഖലയിലെ താളുകളിലേക്കുള്ള കണ്ണികൾ മറയ്ക്കുന്നതിനായി ഇവിടെ ശരി ചേർക്കുക.",
        "namespace_association": "അനുബന്ധനാമമേഖലകൾ",
        "tooltip-namespace_association": "താങ്കൾ തിരഞ്ഞെടുത്ത നാമമേഖലയുടെ കൂടെ സംവാദം അല്ലെങ്കിൽ വിഷയ നാമമേഖലയും കൂടെ ചേർക്കണമെങ്കിൽ ഇവിടെ ശരി ചേർക്കുക",
        "blanknamespace": "(മുഖ്യം)",
        "thumbnail-temp-create": "താത്കാലിക ലഘുചിത്ര പ്രമാണം സൃഷ്ടിക്കാനായില്ല",
        "thumbnail-dest-create": "ലഘുചിത്രം ലക്ഷ്യത്തിൽ സേവ് ചെയ്യാനായില്ല",
        "thumbnail_invalid_params": "ലഘുചിത്രത്തിനാവശ്യമായ ചരങ്ങൾ അസാധുവാണ്",
+       "thumbnail_toobigimagearea": "$1  വലിപ്പത്തിലും കൂടുതലുള്ള പ്രമാണം",
        "thumbnail_dest_directory": "ലക്ഷ്യ ഡയറക്ടറി സൃഷ്ടിക്കുവാൻ സാധിച്ചില്ല",
        "thumbnail_image-type": "ചിത്രത്തിന്റെ തരം പിന്തുണക്കപ്പെട്ടതല്ല",
        "thumbnail_gd-library": "അപൂർണ്ണമായ ജി.ഡി. ലൈബ്രറി ക്രമീകരണം: ഫങ്ഷൻ $1 ലഭ്യമല്ല",
        "import-logentry-interwiki": "$1 അന്തർവിക്കി ഇറക്കുമതി ചെയ്തു",
        "import-logentry-interwiki-detail": "$2 എന്നതിൽ നിന്ന് {{PLURAL:$1|ഒരു പതിപ്പ്|$1 പതിപ്പുകൾ}} ഇറക്കുമതി ചെയ്തു",
        "javascripttest": "ജാവാസ്ക്രിപ്റ്റ് പരീക്ഷണം",
-       "javascripttest-title": "$1 പരീക്ഷണങ്ങൾ നടക്കുന്നുണ്ട്",
        "javascripttest-pagetext-noframework": "ഈ താൾ ജാവാസ്ക്രിപ്റ്റ് പരീക്ഷണങ്ങൾ നടത്താനായി മാറ്റിവെച്ചിരിക്കുന്നതാണ്.",
        "javascripttest-pagetext-unknownframework": "അപരിചിതമായ പരീക്ഷണ ചട്ടക്കൂട് \"$1\".",
+       "javascripttest-pagetext-unknownaction": "അജ്ഞാതമായ പ്രവൃത്തി \"$1\".",
        "javascripttest-pagetext-frameworks": "താഴെക്കൊടുത്തിരിക്കുന്നവയിൽ ഒരു പരീക്ഷണ ചട്ടക്കൂട് തിരഞ്ഞെടുക്കുക: $1",
        "javascripttest-pagetext-skins": "പരീക്ഷണങ്ങൾ നടത്താനുള്ള ദൃശ്യരൂപം തിരഞ്ഞെടുക്കുക:",
        "javascripttest-qunit-intro": "mediawiki.org-ലെ [$1 പരീക്ഷണ സഹായി] കാണുക.",
-       "javascripttest-qunit-heading": "മീഡിയവിക്കി ജാവാസ്ക്രിപ്റ്റ് ക്യൂയൂണിറ്റ് പരീക്ഷണോപാധി",
        "tooltip-pt-userpage": "താങ്കളുടെ ഉപയോക്തൃതാൾ",
        "tooltip-pt-anonuserpage": "താങ്കളുടെ ഐ.പി. വിലാസത്തിന്റെ ഉപയോക്തൃതാൾ",
        "tooltip-pt-mytalk": "താങ്കളുടെ സംവാദം താൾ",
        "version-entrypoints-header-url": "യു.ആർ.എൽ.",
        "version-entrypoints-articlepath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgArticlePath ലേഖനപഥം]",
        "version-entrypoints-scriptpath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgScriptPath സ്ക്രിപ്റ്റ് പഥം]",
+       "version-libraries": "ഇൻസ്റ്റോൾ ചെയ്തിട്ടുള്ള ലൈബ്രറികൾ",
+       "version-libraries-library": "ലൈബ്രറി",
+       "version-libraries-version": "പതിപ്പ്",
        "redirect": "പ്രമാണത്താൽ, ഉപയോക്താവിനാൽ, താളിനാൽ അഥവാ നാൾപ്പതിപ്പ് ഐ.ഡി.യാൽ ചെയ്യുന്ന തിരിച്ചുവിടൽ",
        "redirect-legend": "ഒരു പ്രമാണത്തിലോട്ടോ താളിലോട്ടോ ഉള്ള തിരിച്ചുവിടൽ",
        "redirect-summary": "ഈ പ്രത്യേക താൾ ഒരു പ്രമാണത്തിലേയ്ക്കോ (പ്രമാണത്തിന്റെ പേര് തന്നിട്ടുണ്ട്), ഒരു താളിലേയ്ക്കോ (നാൾപ്പതിപ്പിന്റെ ഐ.ഡി. അല്ലെങ്കിൽ താൾ തന്നിട്ടുണ്ട്), അല്ലെങ്കിൽ ഒരു ഉപയോക്തൃതാളിലേയ്ക്കോ (ഉപയോക്താവിന്റെ സംഖ്യാ ഐ.ഡി. തന്നിട്ടുണ്ട്) തിരിച്ചുവിടുന്നു. ഉപയോഗം: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]],  [[{{#Special:Redirect}}/revision/328429]], അല്ലെങ്കിൽ [[{{#Special:Redirect}}/user/101]].",
        "compare-revision-not-exists": "താങ്കൾ വ്യക്തമാക്കിയ നാൾപ്പതിപ്പ് നിലവിലില്ല.",
        "dberr-problems": "ക്ഷമിക്കണം! ഈ സൈറ്റിൽ സാങ്കേതിക തകരാറുകൾ അനുഭവപ്പെടുന്നുണ്ട്.",
        "dberr-again": "കുറച്ച് മിനിട്ടുകൾ കാത്തിരുന്ന് വീണ്ടും തുറക്കുവാൻ ശ്രമിക്കുക.",
-       "dberr-info": "(വിവരശേഖര സെർവറുമായി ബന്ധപ്പെടാൻ പറ്റിയില്ല: $1)",
-       "dberr-info-hidden": "(à´¡àµ\87à´±àµ\8dറാബàµ\87à´¸àµ\8d à´¸àµ\86ർവറàµ\81മായി à´¬à´¨àµ\8dധപàµ\8dà´ªàµ\86à´\9fà´°àµ\81à´¤àµ\8d)",
+       "dberr-info": "(വിവരശേഖരം എടുക്കാൻ പറ്റിയില്ല: $1)",
+       "dberr-info-hidden": "(വിവരശàµ\87à´\96à´°à´\82 à´\8eà´\9fàµ\81à´\95àµ\8dà´\95ാനാവിലàµ\8dà´²)",
        "dberr-usegoogle": "അതേസമയം താങ്കൾക്ക് ഗൂഗിൾ വഴി തിരയുവാൻ ശ്രമിക്കാവുന്നതാണ്.",
        "dberr-outofdate": "അവരുടെ പക്കലുള്ള നമ്മുടെ ഉള്ളടക്കത്തിന്റെ സൂചികകൾ കാലഹരണപ്പെട്ടതാകാമെന്ന് ഓർക്കുക.",
        "dberr-cachederror": "ആവശ്യപ്പെട്ട താളിന്റെ കാഷ് ചെയ്യപ്പെട്ട പകർപ്പാണിത്, ഇത് ഇപ്പോഴുള്ളതാകണമെന്നില്ല.",
index 39f88e1..525b388 100644 (file)
        "uploaderror": "Errore a carrecà",
        "upload-recreate-warning": "'Attenziò'': nu file cu stu nomme è stato scancellato o spustato.'''\n'O riggistro d' 'e scancellamiente e d' 'e spustamiente 'e sta paggena è stato scritto ccà abbascio pe' ffà comodo:",
        "uploadtext": "Ausà 'o modulo ccà sotto pe' carrecà file nuove. Pe' vedé o ascià 'e file carrecate già, vide 'o [[Special:FileList|riggistro 'e file carrecate]]. Càrreche 'e file e virzione nove d' 'e file songo riggistrate dint' 'o [[Special:Log/upload|riggistro d'upload]], 'e scancellamiente dint' 'o [[Special:Log/delete|riggistro ccà]].\n\nPe' nzertà nu file dint'a na paggena, allora facite nu cullegamento 'e stu tipo:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''' p'ausà a verziona cumpleta d' 'o file\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|testo alternativo]]</nowiki></code>''' p'ausà na verziona luonga 200 pixel nzertata dint'a na cascia, allineata a manca e cu nu 'testo alternativo' comme didascalia\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' pe' crià nu cullegamento diretto a 'o file senza 'o fà vedé",
-       "upload-permitted": "Tipe 'e file permesse: $1.",
-       "upload-preferred": "Tipe 'e file cunzigliate: $1.",
-       "upload-prohibited": "Tipe 'e file nun permesse: $1.",
+       "upload-permitted": "{{PLURAL:$2|Tipo 'e file permesso|Tipe 'e file permesse}}: $1.",
+       "upload-preferred": "{{PLURAL:$2|Tipo 'e file cunzigliato|Tipe 'e file cunzigliate}}: $1.",
+       "upload-prohibited": "{{PLURAL:$2|Tipo 'e file nun permesso|Tipe 'e file nun permesse}}: $1.",
        "uploadlogpage": "Riggistro 'e carreche",
        "uploadlogpagetext": "Ccà abbascio song'alencate l'urdeme file carrecate.\nCuntrullate 'a [[Special:NewFiles|gallaria d' 'e file nuove]] pe' ve ffà na guardata cchiù visuale 'e tutto.",
        "filename": "Nomme d' 'o file",
index 0154a67..1176b6a 100644 (file)
        "pool-queuefull": "Prosesskøen er full",
        "pool-errorunknown": "Ukjent feil",
        "pool-servererror": "'Pool counter'-tjenesten er ikke tilgjengelig ($1).",
+       "poolcounter-usage-error": "Bruksfeil: $1",
        "aboutsite": "Om {{SITENAME}}",
        "aboutpage": "Project:Om",
        "copyright": "Innholdet er tilgjengelig under $1 med mindre annet er spesifikt angitt.",
        "anoneditwarning": "<strong>Advarsel:</strong> Du er ikke innlogget. IP-adressen din vil bli vist offentlig om du redigerer. Hvis du <strong>[$1 logger inn]</strong> eller <strong>[$2 oppretter en konto]</strong> vil redigeringene dine tilskrives brukernavnet ditt, og du vil få flere andre fordeler.",
        "anonpreviewwarning": "<em>Du er ikke logget inn. Ved lagring vil IP-adressen din lagres i sidens redigeringshistorikk.</em>",
        "missingsummary": "'''Påminnelse:''' Du har ikke lagt inn en redigeringsforklaring.\nVelger du ''Lagre siden'' en gang til blir endringene lagret uten forklaring.",
+       "selfredirect": "<strong>Advarsel:</strong> Du omdirigerer denne siden til seg selv. Du kan ha oppgitt feil mål for omdirigeringen, eller kanskje du redigerer feil side. Om du klikker «{{int:savearticle}}» igjen vil omdirigeringen bli opprettet uansett.",
        "missingcommenttext": "Vennligst legg inn en kommentar under.",
        "missingcommentheader": "'''Påminnelse:''' Du har ikke angitt et emne/overskrift for denne kommentaren.\nOm du trykker «{{int:savearticle}}» igjen vil redigeringen din bli lagret uten forklaring.",
        "summary-preview": "Forhåndsvisning av redigeringsforklaring:",
        "content-model-text": "Ren tekst",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "content-json-empty-object": "Tomt objekt",
+       "content-json-empty-array": "Tom matrise",
        "duplicate-args-category": "Sider med like argumenter i malkall",
        "duplicate-args-category-desc": "Denne siden inneholder malkall med duplikate parametre, slik som <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> eller <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "Advarsel: Denne siden inneholder for mange prosesskrevende parserfunksjoner.\n\nDet burde være mindre enn {{PLURAL:$2|$2|$2}}, men er nå {{PLURAL:$1|$1|$1}}..",
        "history-feed-empty": "Den etterspurte siden finnes ikke.\nDen kan ha blitt slettet fra wikien, eller fått et nytt navn.\nPrøv å [[Special:Search|søke]] etter beslektede sider.",
        "rev-deleted-comment": "(redigeringskommentar fjernet)",
        "rev-deleted-user": "(brukernavn fjernet)",
-       "rev-deleted-event": "(fjernet loggoppføring)",
+       "rev-deleted-event": "(loggoppføring fjernet)",
        "rev-deleted-user-contribs": "[brukernavn eller IP-adresse fjernet – redigeringen vises ikke blant bidragene]",
        "rev-deleted-text-permission": "Denne revisjonen har blitt '''slettet'''.\nDet kan være detaljer i [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} slettingsloggen].",
        "rev-suppressed-text-permission": "Denne siderevisjonen har blitt <strong>skjult</strong>.\nDetaljer finnes i [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} skjulingsloggen].",
        "revdelete-legend": "Fastsett synlighetsbegrensninger",
        "revdelete-hide-text": "Skjul revisjonstekst",
        "revdelete-hide-image": "Skjul filinnhold",
-       "revdelete-hide-name": "Skjul handling og mål",
+       "revdelete-hide-name": "Skjul handling og parametre",
        "revdelete-hide-comment": "Skjul redigeringsforklaring",
        "revdelete-hide-user": "Skjul bidragsyters brukernavn eller IP-adresse",
        "revdelete-hide-restricted": "La disse begrensningene gjelde for administratorer også",
        "right-protect": "Endre beskyttelsesnivåer og redigere beskyttete sider",
        "right-editprotected": "Redigere beskyttede sider som «{{int:protect-level-sysop}}»",
        "right-editsemiprotected": "Redigere beskyttede sider som «{{int:protect-level-autoconfirmed}}»",
+       "right-editcontentmodel": "Rediger innholdsmodellen til en side",
        "right-editinterface": "Redigere brukergrensesnittet",
        "right-editusercssjs": "Redigere andre brukeres CSS- og JS-filer",
        "right-editusercss": "Redigere andre brukeres CSS-filer",
        "action-viewmywatchlist": "Vis din overvåkningsliste",
        "action-viewmyprivateinfo": "vise din private informasjon",
        "action-editmyprivateinfo": "rediger din private informasjon",
+       "action-editcontentmodel": "rediger innholdsmodellen til en side",
        "nchanges": "$1 {{PLURAL:$1|endring|endringer}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|siden forrige besøk}}",
        "enhancedrc-history": "historikk",
        "namespace": "Navnerom:",
        "invert": "Inverter valg",
        "tooltip-invert": "Kryss av denne boksen for å skjule endringer på sider i det valgte navnerommet (og tilhørende navnerom hvis de er avkrysset også)",
+       "tooltip-whatlinkshere-invert": "Merk av denne boksen for å skjule lenker fra sider i valgte navnerom.",
        "namespace_association": "Tilknyttet navnerom",
        "tooltip-namespace_association": "Kryss av denne boksen for å også inkludere diskusjons- eller emnenavnerommet som er tilknyttet det valgte navnerommet",
        "blanknamespace": "(Hoved)",
        "thumbnail-temp-create": "Kan ikke opprette midlertidig miniatyrbildefil",
        "thumbnail-dest-create": "Kan ikke lagre miniatyrbilde til målbanen",
        "thumbnail_invalid_params": "Ugyldige miniatyrparametere, eller PNG-fil med flere piksler enn 12,5 millioner.",
+       "thumbnail_toobigimagearea": "Fil med dimensjoner større enn $1",
        "thumbnail_dest_directory": "Klarte ikke å opprette målmappe",
        "thumbnail_image-type": "Bildetypen støttes ikke",
        "thumbnail_gd-library": "Ufullstendig konfigurering av GD library: mangler funksjonen $1",
        "javascripttest": "JavaScript-testing",
        "javascripttest-pagetext-noframework": "Denne siden er reservert for å kjøre JavaScript-tester.",
        "javascripttest-pagetext-unknownframework": "Ukjent testerammeverk \"$1\".",
+       "javascripttest-pagetext-unknownaction": "Ukjent handling «$1».",
        "javascripttest-pagetext-frameworks": "Vennligst velg en av følgende testerammeverk: $1",
        "javascripttest-pagetext-skins": "Velg et utseende for testene:",
        "javascripttest-qunit-intro": "Se [$1 testedokumentasjonen] på mediawiki.org.",
        "version-entrypoints": "Inngangspunkts-URL-er",
        "version-entrypoints-header-entrypoint": "Inngangspunkt",
        "version-entrypoints-header-url": "URL",
+       "version-libraries": "Installerte biblioteker",
+       "version-libraries-library": "Bibliotek",
+       "version-libraries-version": "Versjon",
        "redirect": "Omdiriger via filnavn, bruker eller versjonsid",
        "redirect-legend": "Omdiriger til en fil eller side",
        "redirect-summary": "Denne spesialsiden omdirigerer til en fil (hvis et filnavn angis), en side (hvis et redigeringsnummer angis) eller en brukerside (hvis en numerisk brukeridentifikator angis).\nEksempler:[[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/revision/328429]], or [[{{#Special:Redirect}}/user/101]].",
        "api-error-stashfilestorage": "Det oppsto en feil når filen skulle lastes opp til lageret.",
        "api-error-stashzerolength": "Tjenermaskinen kunne i lagre den temporære filen fordi den hadde null lengde.",
        "api-error-stashnotloggedin": "Du må være innlogget for å lagre filene i opplastingslageret.",
+       "api-error-stashwrongowner": "Filen du prøvde å få tilgang til tilhører ikke deg.",
+       "api-error-stashnosuchfilekey": "Filnøkkelen du prøvde å få tilgang til finnes ikke.",
        "api-error-timeout": "Serveren svarte ikke innenfor forventet tid.",
        "api-error-unclassified": "En ukjent feil har oppstått",
        "api-error-unknown-code": "Ukjent feil: \"$1\"",
        "expand_templates_generate_xml": "Vis parsetre som XML",
        "expand_templates_generate_rawhtml": "Vis ubehandlet HTML",
        "expand_templates_preview": "Forhåndsvisning",
+       "expand_templates_preview_fail_html": "<em>Fordi {{SITENAME}} har slått på rå HTML og sesjonsdata ble tapt er forhåndsvisningen skjult for å beskytte mot JavaScript-angrep.</em>\n\n<strong>Om dette er et legitimt forsøk på å forhåndsvise, prøv igjen.</strong> Om det fortsatt ikke fungerer, prøv å [[Special:UserLogout|logge ut]] og logge inn igjen.",
+       "expand_templates_preview_fail_html_anon": "<em>Fordi {{SITENAME}} har slått på rå HTML og du ikke er logget inn er forhåndsvisningen skjult for å beskytte mot JavaScript-angrep.</em>\n\n<strong>Om dette er et legitimt forsøk på å forhåndsvise, [[Special:UserLogin|logg inn]] og prøv igjen.</strong>",
        "pagelanguage": "Valg av sidespråk",
        "pagelang-name": "Side",
        "pagelang-language": "Språk",
        "log-name-pagelang": "Endre språklogg",
        "log-description-pagelang": "Dette er en logg som viser endringer i sidespråk",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|endret}} sidespråk for $3 fra $4 til $5.",
-       "default-skin-not-found": "Ops! Standarddrakten for wikien din (<code>$wgDefaultSkin</code>), <code>$1</code>, er ikke tilgjengelig.\n\nInstallasjonen din ser ut til å inneholde følgende drakter. Se [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] for informasjon om hvordan du kan slå disse på eller heller velge en standarddrakt.\n\n$2\n\n; Om du nettopp har installert MediaWiki:\n: Du har trolig installert fra git, eller direkte fra kildekoden med en annen metode. Dette er forventet. Prøv å installere noen drakter fra [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org sin draktbase] ved å\n:* laste ned [https://www.mediawiki.org/wiki/Download tarball-installereren], som kommer med flere drakter og utvidelser. Du kan kopiere og lime inn <code>skins/</code>-mappen fra denne.\n:* klone en av <code>mediawiki/skins/*</code>-lagrene via git inn i <code>skins/</code> -mappen av din MediaWiki-installasjon.\n: Å gjøre dette skal ikke forstyrre git-mappen din om du er en MediaWiki-utvikler.\n\n; Om du nettopp har oppgradert MediaWiki:\n: MediaWiki 1.24 og nyere slår ikke lenger på automatisk installerte drakter (se [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). Du kan lime inn følgende linjer i <code>LocalSettings.php</code> for å slå på alle installerte drakter:\n\n<pre>$3</pre>\n\n; Om du nettopp har endret <code>LocalSettings.php</code>:\n: Dobbelsjekk draktnavnene for skrivefeil.",
+       "default-skin-not-found": "Ops! Standarddrakten for wikien din, definert i <code dir=\"ltr\">$wgDefaultSkin</code> som <code>$1</code>, er ikke tilgjengelig.\n\nInstallasjonen din ser ut til å inneholde følgende drakter. Se [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] for informasjon om hvordan du kan slå disse på eller heller velge en standarddrakt.\n\n$2\n\n; Om du nettopp har installert MediaWiki:\n: Du har trolig installert fra git, eller direkte fra kildekoden med en annen metode. Dette er forventet. Prøv å installere noen drakter fra [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org sin draktbase] ved å\n:* laste ned [https://www.mediawiki.org/wiki/Download tarball-installereren], som kommer med flere drakter og utvidelser. Du kan kopiere og lime inn <code>skins/</code>-mappen fra denne.\n:* laste ned individuelle drakter fra [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* klone en av <code>mediawiki/skins/*</code>-lagrene via git inn i <code>skins/</code> -mappen av din MediaWiki-installasjon.\n: Å gjøre dette skal ikke forstyrre git-mappen din om du er en MediaWiki-utvikler.\n\n; Om du nettopp har oppgradert MediaWiki:\n: MediaWiki 1.24 og nyere slår ikke lenger på automatisk installerte drakter (se [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). Du kan lime inn følgende linjer i <code>LocalSettings.php</code> for å slå på alle installerte drakter:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Om du nettopp har endret <code>LocalSettings.php</code>:\n: Dobbelsjekk draktnavnene for skrivefeil.",
+       "default-skin-not-found-no-skins": "Ops! Standarddrakten for wikien din, definert i <code>$wgDefaultSkin</code> som <code>$1</code>, er ikke tilgjengelig.\n\nDu har ingen installerte drakter.\n\n;Om du nettopp har installert eller oppgradert MediaWiki:\n: Du installerte trolig fra git, eller direkte fra kildekoden med en annen metode. Dette er forventet. MediaWiki 1.24 og nyere inkluderer ingen drakter i hovedarkivet. Prøv å installere noen drakter fra [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.orgs draktmappe], ved å:\n:* laste ned [https://www.mediawiki.org/wiki/Download tarball-installereren], som kommer med mange drakter og tillegg. Du kan kopiere og lime inn <code>skins/</code>-mappen fra denne.\n:* laste ned individuelle drakt-tarballer fra [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* klone en av <code>mediawiki/skins/*</code>-arkivene via git til <code dir=\"ltr\">skins/</code>-mappa i din MediaWiki-installasjon.\n: Å gjøre dette vil ikke forstyrre ditt git-arkiv om du er en MediaWiki-utvikler. Se [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Skin configuration] for informasjon om hvordan du slår på drakter og velger en standarddrakt.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (slått på)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''slått av''')",
        "mediastatistics": "Mediestatistikk",
index 741ec6d..d86512b 100644 (file)
        "badarticleerror": "Disse haandeling kan op disse zied niet uutevoerd wörden.",
        "cannotdelete": "De zied of t bestaand \"$1\" kon niet vortedaon wörden.\nt Kan ween dat n aander t al vortedaon hef.",
        "cannotdelete-title": "Zied \"$1\" kan niet vortedaon wörden",
-       "delete-hook-aborted": "t Vortdoon wörden in t wiere eschopt deur n MediaWiki-programmatuuruutbreiding.\nDer is gien veerdere informasie beschikbaor.",
+       "delete-hook-aborted": "t Vortdoon wördt in t wiere eschopt deur n toepassige van MediaWiki.\nDer is gien veerdere informasie beschikbaor.",
        "no-null-revision": "Kon gien lege nieje versie maken veur de zied \"$1\"",
        "badtitle": "Ongeldige naam",
        "badtitletext": "De naam van de op-evreugen zied is niet geldig, leeg, of n interwiki-verwiezing naor n onbekende of ongeldige wiki.",
        "passwordreset-username": "Gebruker:",
        "passwordreset-domain": "Domein:",
        "passwordreset-capture": "De resulterende netpost bekieken?",
-       "passwordreset-capture-help": "A'j dit vakjen anvinken, dan krie'j t netpostbericht (mit t tiedelike wachtwoord) te zien en t wörden naor de gebruker estuurd.",
+       "passwordreset-capture-help": "A'j dit vakjen anvinken, dan krie'j t netpostbericht te zien (mit t tiejelike wachtwoord) en t wördt naor de gebruker estuurd.",
        "passwordreset-email": "Netpostadres:",
        "passwordreset-emailtitle": "Gebrukersgegevens op {{SITENAME}}",
        "passwordreset-emailtext-ip": "Der hef der ene, waorschienlik jie zelf vanaof t IP-adres $1, n anvraag edaon um joew wachtwoord veur {{SITENAME}} ($4) opniej in te stellen.\nDe volgende {{PLURAL:$3|gebruker is|gebrukers bin}} ekoppeld an dit netpostadres:\n\n$2\n\n{{PLURAL:$3|Dit tiejelike wachtwoord vervölt|Disse tiejelike wachtwoorden vervallen}} over {{PLURAL:$5|één dag|$5 dagen}}.\nMeld je eigen noen an en wiezig t wachtwoord. A'j dit verzeuk niet zelf edaon hebben, of a'j t oorspronkelike wachtwoord nog kennen en t niet wiezigen willen, negeer dit bericht dan en blief joew ouwe wachtwoord gebruken.",
        "subject-preview": "Onderwarp/kop naokieken:",
        "blockedtitle": "Gebruker is eblokkeerd",
        "blockedtext": "'''Joew gebrukersnaam of IP-adres is eblokkeerd.'''\n\nJe bin eblokkeerd deur: $1.\nDe op-egeven reden is: ''$2''.\n\n* Eblokkeerd vanaof: $8\n* Eblokkeerd tot: $6\n* Bedoeld um te blokkeren: $7\n\nJe kunnen kontakt opnemen mit $1 of n aandere [[{{MediaWiki:Grouppage-sysop}}|beheerder]] um de blokkering te bepraoten.\nJe kunnen gien gebruukmaken van de funksie 'een bericht sturen', behalven a'j n geldig netpostadres op-egeven hebben in joew [[Special:Preferences|veurkeuren]] en t gebruuk van disse funksie niet eblokkeerd is.\nt IP-adres da'j noen gebruken is $3 en t blokkeringsnummer is #$5.\nVermeld t allebeie a'j argens op disse blokkering reageren.",
-       "autoblockedtext": "Joew IP-adres is automaties eblokkeerd umdat t gebruukt wörden deur n aandere gebruker, die eblokkeerd wörden deur $1.\nDe reden hierveur was:\n\n:''$2''\n\n* Begint: $8\n* Löp of nao: $6\n* Wee eblokkeerd wörden: $7\n\nJe kunnen kontakt opnemen mit $1 of n van de aandere\n[[{{MediaWiki:Grouppage-sysop}}|beheerders]] um de blokkering te bepraoten.\n\nNB: je kunnen de opsie \"n bericht sturen\" niet gebruken, behalven a'j n geldig netpostadres op-egeven hebben in de [[Special:Preferences|gebrukersveurkeuren]] en je niet eblokkeerd bin.\n\nJoew IP-adres is $3 en joew blokkeernummer is $5.\nGeef disse nummers deur a'j kontakt mit ene opnemen over de blokkering.",
+       "autoblockedtext": "Joew IP-adres is automaties eblokkeerd umdat t gebruukt wördt deur n aandere gebruker, die eblokkeerd wördt deur $1.\nDe reden hierveur was:\n\n:''$2''\n\n* Begint: $8\n* Löp of nao: $6\n* Wee eblokkeerd wördt: $7\n\nJe kunnen kontakt opnemen mit $1 of n van de aandere\n[[{{MediaWiki:Grouppage-sysop}}|beheerders]] um de blokkering te bepraoten.\n\nNB: je kunnen de opsie \"n bericht sturen\" niet gebruken, behalven a'j n geldig netpostadres op-egeven hebben in de [[Special:Preferences|gebrukersveurkeuren]] en je niet eblokkeerd bin.\n\nJoew IP-adres is $3 en joew blokkeernummer is $5.\nGeef disse nummers deur a'j kontakt mit ene opnemen over de blokkering.",
        "blockednoreason": "gien reden op-egeven",
        "whitelistedittext": "Um ziejen te kunnen wiezigen, mu'j $1 ween",
        "confirmedittext": "Je mutten je netpostadres bevestigen veurda'j bewarken kunnen. Vul je adres in en bevestig t via [[Special:Preferences|mien veurkeuren]].",
        "moveddeleted-notice": "Disse zied is vortedaon.\nHieronder steet de informasie uut t vortdologboek en t herneumlogboek.",
        "log-fulllog": "t Hele logboek bekieken",
        "edit-hook-aborted": "De bewarking is aofebreuken deur n hook.\nDer is gien reden op-egeven.",
-       "edit-gone-missing": "De zied kon niet bie-ewörken wörden.\nt Schient dat t vortedaon is.",
+       "edit-gone-missing": "De zied kon niet bie-ewörken wörden.\nt Lik derop as of t vortedaon is.",
        "edit-conflict": "Tegelieke bewörken.",
        "edit-no-change": "Joew bewarking is enegeerd, umdat der gien wieziging an de tekste edaon is.",
        "postedit-confirmation-saved": "Joew bewarking is op-esleugen",
        "expensive-parserfunction-category": "Ziejen die te veule kostbaore parserfunksies gebruken",
        "post-expand-template-inclusion-warning": "Waorschuwing: de grootte van de in-evoegden mal is te groot.\nSommigen mallen wörden niet in-evoegd.",
        "post-expand-template-inclusion-category": "Ziejen die over de maximumgrootte veur in-evoegden mallen hinne gaon",
-       "post-expand-template-argument-warning": "Waorschuwing: disse zied gebruuk tenminsten één parameter in n mal, die te groot is as t uuteklap wörden. Disse parameters wörden vorteleuten.",
+       "post-expand-template-argument-warning": "Waorschuwing: disse zied gebruukt tenminsten een parameter in n mal, die te groot is as t uuteklapt wördt. Disse parameters wörden vorteleuten.",
        "post-expand-template-argument-category": "Ziejen mit ontbrekende malelementen",
        "parser-template-loop-warning": "Der is n kringloop in mallen waoreneumen: [[$1]]",
        "parser-template-recursion-depth-warning": "Der is over de rekursiediepte veur mallen is hinne gaon ($1)",
        "upload_directory_read_only": "Op t moment ku'j gien bestaanden opsturen vanwegen techniese problemen ($1).",
        "uploaderror": "Fout bie t inlaojen van t bestaand",
        "upload-recreate-warning": "'''Waorschuwing: der is n bestaand mit disse naam vortedaon of herneumd.'''\n\nHieronder steet t vortdologboek en t herneumlogboek veur disse zied:",
-       "uploadtext": "Gebruuk t formulier hieronder um bestaanden op te sturen.\nUm bestaanden te bekieken of te zeuken die eerder al op-estuurd bin, ku'j naor de [[Special:FileList|bestaandslieste]] gaon.\nBestaanden en media die nao t vortdoon opniej op-estuurd wörden ku'j in de smiezen houwen in t [[Special:Log/upload|logboek mit nieje bestaanden]] en t [[Special:Log/delete|vortdologboek]].\n\nUm t bestaand in te voegen in n zied ku'j één van de volgende kodes gebruken:\n* '''<nowiki>[[</nowiki>{{ns:file}}<nowiki>:Bestaand.jpg]]</nowiki>'''\n* '''<nowiki>[[</nowiki>{{ns:file}}<nowiki>:Bestaand.png|alternatieve tekste]]</nowiki>'''\n* '''<nowiki>[[</nowiki>{{ns:media}}<nowiki>:Bestaand.ogg]]</nowiki>''' drekte verwiezing naor n bestaand.",
+       "uploadtext": "Gebruuk t formulier hieronder um bestaanden op te sturen.\nUm bestaanden te bekieken of te zeuken die eerder al op-estuurd bin, ku'j naor de [[Special:FileList|bestaandslieste]] gaon.\nBestaanden en media die nao t vortdoon opniej op-estuurd wörden ku'j in de smiezen houwen in t [[Special:Log/upload|logboek mit nieje bestaanden]] en t [[Special:Log/delete|vortdologboek]].\n\nUm t bestaand in te voegen in n zied ku'j een van de volgende kodes gebruken:\n* '''<nowiki>[[</nowiki>{{ns:file}}<nowiki>:Bestaand.jpg]]</nowiki>'''\n* '''<nowiki>[[</nowiki>{{ns:file}}<nowiki>:Bestaand.png|alternatieve tekste]]</nowiki>'''\n* '''<nowiki>[[</nowiki>{{ns:media}}<nowiki>:Bestaand.ogg]]</nowiki>''' drekte verwiezing naor n bestaand.",
        "upload-permitted": "Toe-estaone bestaandstypes: $1.",
        "upload-preferred": "An-ewezen bestaandstypes: $1.",
        "upload-prohibited": "Verbeujen bestaandstypes: $1.",
        "php-uploaddisabledtext": "t Opsturen van PHP-bestaanden is uutezet. Kiek de instellingen veur t opsturen van bestaanden effen nao.",
        "uploadscripted": "In dit bestaand steet HTML- of skriptkode die verkeerd elezen kan wörden deur de webkieker.",
        "uploadvirus": "In dit bestaand zit n virus! Gegevens: $1",
-       "uploadjava": "t Bestaand is n ZIP-bestaand waor n Java .class-bestaand in zit.\nt Inlaojen van Java-bestaanden is niet toe-estaon umdat hiermee beveiligingsinstellingen ummezeild kunnen wörden.",
+       "uploadjava": "t Bestaand is n ZIP-bestaand waor n Java .class-bestaand in zit.\nt Inlaojen van Java-bestaanden is niet toe-estaon umdat hiermee beveiligingsinstellingen umzeild kunnen wörden.",
        "upload-source": "Bronbestaand",
        "sourcefilename": "Bestaandsnaam op de hardeschieve:",
        "sourceurl": "Bronwebadres:",
        "wantedfiletext-cat": "De volgende bestaanden wörden gebruukt mer bestaon niet. Bestaanden van externe databanken kunnen op-eneumen ween in de lieste, ondanks dat ze bestaon. Soortgelieke vals positieven wörden <del>deurehaold weeregeven</del>. Ziejen die niet-bestaonde bestaanden insluten staon op de zied [[:$1]].",
        "wantedfiletext-nocat": "De volgende bestaanden wörden gebruukt mer bestaon niet. Bestaanden van externe databanken kunnen op-eneumen ween in de lieste, ondanks dat ze bestaon. Soortgelieke vals positieven wörden <del>deurehaold weeregeven</del>.",
        "wantedtemplates": "Gewunste mallen",
-       "mostlinked": "Ziejen waor t meest naor verwezen wörden",
+       "mostlinked": "Ziejen waor t meest naor verwezen wördt",
        "mostlinkedcategories": "Meestgebruukten kategorieën",
        "mostlinkedtemplates": "Meestgebruukten mallen",
        "mostcategories": "Artikels mit de meeste kategorieën",
        "delete-toobig": "Disse zied hef n lange bewarkingsgeschiedenisse, meer as $1 {{PLURAL:$1|versie|versies}}.\nt Vortdoon van dit soort ziejen is mit rechten bepark um t per ongelok versteuren van de warking van {{SITENAME}} te veurkoemen.",
        "delete-warning-toobig": "Disse zied hef n lange bewarkingsgeschiedenisse, meer as $1 {{PLURAL:$1|versie|versies}}.\nWoart je: t vortdoon van disse zied kan de warking van de databanke van {{SITENAME}} versteuren.\nWees veurzichtig",
        "rollback": "Wiezigingen herstellen",
-       "rollback_short": "Weerummedreien",
        "rollbacklink": "Weerummedreien",
        "rollbacklinkcount": "{{PLURAL:$1|één bewarking|$1 bewarkingen}} weerummedreien",
        "rollbacklinkcount-morethan": "Meer as {{PLURAL:$1|één bewarking|$1 bewarkingen}} weerummedreien",
        "protect-locked-blocked": "Je kunnen beveiligingsnivo's niet wiezigen terwiel je eblokkeerd bin. Hier bin de instellingen zo as ze noen bin veur de zied '''$1''':",
        "protect-locked-dblock": "Beveiligingsnivo's kunnen effen niet ewiezigd wörden umdat de databanke noen beveiligd is.\nHier staon de instellingen zo as ze noen bin veur de zied '''$1''':",
        "protect-locked-access": "Je hebben gien rechten um t beveilingsnivo van ziejen te wiezigen.\nHier staon de instellingen zo as ze noen bin veur de zied '''$1''':",
-       "protect-cascadeon": "Disse zied wörden beveiligd, umdat t op-eneumen is in de volgende {{PLURAL:$1|zied|ziejen}} die beveiligd {{PLURAL:$1|is|bin}} mit de kaskadeopsie. Wiezigingen in t beveiligingsnivo van disse zied hebben gien invleud op de kaskadebeveiliging.",
+       "protect-cascadeon": "Disse zied wördt beveiligd, umdat t op-eneumen is in de volgende {{PLURAL:$1|zied|ziejen}} die beveiligd {{PLURAL:$1|is|bin}} mit de kaskadeopsie. Wiezigingen in t beveiligingsnivo van disse zied hebben gien invleud op de kaskadebeveiliging.",
        "protect-default": "Veur alle gebrukers",
        "protect-fallback": "Allinnig gebrukers mit t recht \"$1\" toestaon",
        "protect-level-autoconfirmed": "Allinnig automaties bevestigden gebrukers toestaon",
        "undelete-search-submit": "Zeuk",
        "undelete-no-results": "Gien ziejen evunnen in t archief mit vortedaone ziejen.",
        "undelete-filename-mismatch": "Bestaandsversie van t tiedstip $1 kon niet hersteld wörden: bestaandsnaam kloppen niet",
-       "undelete-bad-store-key": "Bestaandsversie van t tiedstip $1 kon niet hersteld wörden: t bestaand was der al niet meer veurdat t vortedaon wörden.",
+       "undelete-bad-store-key": "Bestaandsversie van t tiedstip $1 kon niet hersteld wörden: t bestaand was der al niet meer veurdat t vortedaon wördden.",
        "undelete-cleanup-error": "Fout bie t herstellen van t ongebruukten archiefbestaand \"$1\".",
        "undelete-missing-filearchive": "t Lokten niet um ID $1 weerumme te plaotsen umdat t niet in de databanke is.\nMisschien is t al weerummeplaotst.",
        "undelete-error": "Der is wat fout egaon bie t vortdoon van de zied",
        "movereason": "Reden:",
        "revertmove": "Weerummedreien",
        "delete_and_move": "Vortdoon en herneumen",
-       "delete_and_move_text": "==Mut vortedaon wörden==\n<div style=\"color: red\"> Onder de nieje naam \"[[:$1]]\" besteet al n artikel. Wi'j t vortdoon um plaotse te maken veur t herneumen?</div>",
+       "delete_and_move_text": "==Mut vortedaon wörden==\n<div style=\"color: red\"> De zied \"[[:$1]]\" besteet al. Wi'j t vortdoon um te kunnen herneumen?</div>",
        "delete_and_move_confirm": "Ja, disse zied vortdoon",
        "delete_and_move_reason": "Vortedaon vanwegen de herneuming van \"[[$1]]\"",
        "selfmove": "De naam kan niet ewiezigd wörden naor de naam die t al hef.",
        "version-entrypoints-header-url": "Webadres",
        "redirect": "Deurverwiezen op bestaandsnaam, gebrukersnummer, ziednummer of versienummer",
        "redirect-legend": "Deurverwiezen naor n bestaand of zied",
-       "redirect-summary": "Disse spesiale zied verwis deur naor n bestaand (as de bestaandsnaam op-egeven wörden), n zied (as n zied- of versienummer op-egeven wörden) of n gebrukerszied (as t gebrukersnummer op-egeven wörden). Gebruuk: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], of [[{{#Special:Redirect}}/user/101]].",
+       "redirect-summary": "Disse spesiale zied verwis deur naor n bestaand (as de bestaandsnaam op-egeven wördt), n zied (as n zied- of versienummer op-egeven wördt) of n gebrukerszied (as t gebrukersnummer op-egeven wördt). Gebruuk: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], of [[{{#Special:Redirect}}/user/101]].",
        "redirect-submit": "Zeuk",
        "redirect-lookup": "Opzeuken:",
        "redirect-value": "Weerde:",
        "specialpages-group-spam": "Spam-hulpmiddels",
        "blankpage": "Lege zied",
        "intentionallyblankpage": "Disse zied is bewust leeg eleuten.",
-       "external_image_whitelist": " #Laot disse regel onveraanderd<pre>\n#Hieronder kunnen delen van reguliere uutdrokkingen (t deel tussen //) an-egeven wörden.\n#t Wörden mit de webadressen van aofbeeldingen uut bronnen van butenof vergeleken\n#n Positief vergeliekingsresultaot zörgt derveur dat de aofbeelding weeregeven wörden, aanders wörden de aofbeelding allinnig as verwiezing weeregeven\n#Regels die mit n # beginnen, wörden as kommentaar behaandeld\n#De regels in de lieste bin niet heufdlettergeveulig\n\n#Delen van reguliere uutdrokkingen boven disse regel plaotsen. Laot disse regel onveraanderd</pre>",
+       "external_image_whitelist": " #Laot disse regel onveraanderd<pre>\n#Hieronder kunnen delen van reguliere uutdrokkingen (t deel tussen //) an-egeven wörden.\n#t Wördt mit de webadressen van aofbeeldingen uut bronnen van butenof vergeleken\n#n Positief vergeliekingsresultaot zörgt derveur dat de aofbeelding weeregeven wördt, aanders wördt de aofbeelding allinnig as verwiezing weeregeven\n#Regels die mit n # beginnen, wörden as kommentaar behaandeld\n#De regels in de lieste bin niet heufdlettergeveulig\n\n#Delen van reguliere uutdrokkingen boven disse regel plaotsen. Laot disse regel onveraanderd</pre>",
        "tags": "Geldige wiezigingsetiketten",
        "tag-filter": "[[Special:Tags|Etiketfilter]]:",
        "tag-filter-submit": "Filtreren",
index bc4ae50..350d73e 100644 (file)
@@ -64,7 +64,8 @@
                        "Macofe",
                        "Mirolith",
                        "Akoopal",
-                       "Sikjes"
+                       "Sikjes",
+                       "Robin0van0der0vliet"
                ]
        },
        "tog-underline": "Koppelingen onderstrepen:",
        "virus-unknownscanner": "onbekend antivirusprogramma:",
        "logouttext": "'''U bent nu afgemeld.'''\n\nSommige pagina's kunnen blijven weergegeven alsof u nog aangemeld bent, totdat u uw browsercache leegt.",
        "welcomeuser": "Welkom, $1!",
-       "welcomecreation-msg": "Uw gebruiker is aangemaakt.\nIndien gewenst kunt u uw [[Special:Preferences|voorkeuren]] voor {{SITENAME}} aanpassen.",
+       "welcomecreation-msg": "Uw account is aangemaakt.\nIndien gewenst kunt u uw [[Special:Preferences|voorkeuren]] voor {{SITENAME}} aanpassen.",
        "yourname": "Gebruikersnaam:",
        "userlogin-yourname": "Gebruikersnaam",
        "userlogin-yourname-ph": "Geef uw gebruikersnaam op",
        "logout": "Afmelden",
        "userlogout": "Afmelden",
        "notloggedin": "Niet aangemeld",
-       "userlogin-noaccount": "Hebt u geen gebruiker?",
+       "userlogin-noaccount": "Hebt u geen account?",
        "userlogin-joinproject": "Word lid van {{SITENAME}}",
-       "nologin": "Hebt u geen gebruiker? $1.",
+       "nologin": "Hebt u geen account? $1.",
        "nologinlink": "Registreren",
        "createaccount": "Registreren",
        "gotaccount": "Hebt u al een gebruiker? $1.",
index 28f5b99..afd652b 100644 (file)
        "pool-queuefull": "Kolejka zadań jest pełna",
        "pool-errorunknown": "Błąd nieznany",
        "pool-servererror": "Usługa licznika nie jest dostępna ($1).",
+       "poolcounter-usage-error": "Błąd użycia: $1",
        "aboutsite": "O {{GRAMMAR:MS.lp|{{SITENAME}}}}",
        "aboutpage": "Project:O {{GRAMMAR:MS.lp|{{SITENAME}}}}",
        "copyright": "Treść udostępniana na licencji $1, jeśli nie podano inaczej.",
        "uploaderror": "Błąd wysyłania",
        "upload-recreate-warning": "'''Uwaga: plik o tej nazwie został wcześniej usunięty lub przeniesiony.''' \n\nPoniżej znajduje się rejestr usunięć i zmian nazwy tej strony:",
        "uploadtext": "Użyj poniższego formularza do przesłania plików.\nJeśli chcesz przejrzeć lub przeszukać dotychczas przesłane pliki, przejdź do [[Special:FileList|listy plików]]. Każde przesłanie zostaje odnotowane w [[Special:Log/upload|rejestrze przesyłanych plików]], a usunięcie w [[Special:Log/delete|rejestrze usuniętych]].\n\nPlik pojawi się na stronie, jeśli użyjesz linku według jednego z następujących wzorów:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Plik.jpg]]</nowiki></code>''' pokaże plik w pełnej postaci\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Plik.png|200px|thumb|left|podpis grafiki]]</nowiki></code>''' pokaże szeroką na 200 pikseli miniaturkę umieszczoną przy lewym marginesie, otoczoną ramką, z podpisem „podpis grafiki”\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Plik.ogg]]</nowiki></code>''' utworzy bezpośredni link do pliku bez wyświetlania samego pliku",
-       "upload-permitted": "Dopuszczalne formaty plików: $1.",
-       "upload-preferred": "Zalecane formaty plików: $1.",
-       "upload-prohibited": "Zabronione formaty plików: $1.",
+       "upload-permitted": "{{PLURAL:$2|Dopuszczalny format|Dopuszczalne formaty}} plików: $1.",
+       "upload-preferred": "{{PLURAL:$2|Zalecany format|Zalecane formaty}} plików: $1.",
+       "upload-prohibited": "{{PLURAL:$2|Zabroniony format|Zabronione formaty}} plików: $1.",
        "uploadlogpage": "Przesłane",
        "uploadlogpagetext": "Lista ostatnio przesłanych plików.\nPrzejdź na stronę [[Special:NewFiles|galerii nowych plików]], by zobaczyć pliki jako miniaturki.",
        "filename": "Nazwa pliku",
index 8b615dd..c687639 100644 (file)
@@ -75,7 +75,8 @@
                        "Jefersonmoraes",
                        "Marcos dias de oliveira",
                        "He7d3r",
-                       "PauloEduardo"
+                       "PauloEduardo",
+                       "Webysther"
                ]
        },
        "tog-underline": "Sublinhar links:",
        "pool-queuefull": "A fila de processos está cheia",
        "pool-errorunknown": "Erro desconhecido",
        "pool-servererror": "O servidor de contador do pool não está disponível ($1).",
+       "poolcounter-usage-error": "Erro de uso: $1",
        "aboutsite": "Sobre {{SITENAME}}",
        "aboutpage": "Project:Sobre",
        "copyright": "Conteúdo disponível sob $1, salvo indicação em contrário.",
        "uploaderror": "Erro ao enviar arquivo",
        "upload-recreate-warning": "'''Aviso: Um arquivo com este nome foi eliminado ou movido.'''\n\nPara sua conveniência, segue o registro de eliminação e de movimentação:",
        "uploadtext": "Use o formulário abaixo para enviar arquivos.\nPara ver ou pesquisar arquivos já enviados, consulte a [[Special:FileList|lista de arquivos enviados]]. Re-envios também são registrados no [[Special:Log/upload|registro de uploads]]; eliminações no [[Special:Log/delete|registro de eliminações]]\n\nPara incluir o arquivo em uma página, use um link em um dos seguintes formatos:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Arquivo.jpg]]</nowiki></code>''' para utilizar a versão completa do arquivo;\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Arquivo.png|200px|thumb|left|texto]]</nowiki></code>''' para utilizar uma renderização de 200 pixels dentro de uma caixa posicionada à margem esquerda, contendo 'texto' como descrição;\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Arquivo.ogg]]</nowiki></code>''' para um link direto ao arquivo sem que ele seja exibido.",
-       "upload-permitted": "Tipos de arquivos permitidos: $1.",
-       "upload-preferred": "Tipos de arquivos preferidos: $1.",
-       "upload-prohibited": "Tipos de arquivo proibidos: $1.",
+       "upload-permitted": "{{PLURAL:$2|Tipo|Tipos}} de {{PLURAL:$2|arquivo|arquivos}} {{PLURAL:$2|permitido|permitidos}}: $1.",
+       "upload-preferred": "{{PLURAL:$2|Tipo|Tipos}} de {{PLURAL:$2|arquivo|arquivos}} {{PLURAL:$2|preferido|preferidos}}: $1.",
+       "upload-prohibited": "{{PLURAL:$2|Tipo|Tipos}} de {{PLURAL:$2|arquivo|arquivos}} {{PLURAL:$2|proibido|proibidos}}: $1.",
        "uploadlogpage": "Registro de uploads",
        "uploadlogpagetext": "Segue listagem dos uploads de arquivos mais recentes.\nA [[Special:NewFiles|galeria de arquivos novos]] oferece uma listagem mais visual.",
        "filename": "Nome do arquivo",
        "exbeforeblank": "o conteúdo antes de esvaziar era: '$1'",
        "delete-confirm": "Eliminar \"$1\"",
        "delete-legend": "Eliminar",
-       "historywarning": "'''Atenção:''' A página que você está prestes a eliminar possui um histórico com aproximadamente $1 {{PLURAL:$1|revisão|revisões}}:",
+       "historywarning": "<strong>Aviso:</strong> A página que está prestes a eliminar tem um histórico com aproximadamente $1 {{PLURAL:$1|revisão|revisões}}:",
        "confirmdeletetext": "Encontra-se prestes a eliminar permanentemente uma página ou uma imagem e todo o seu histórico.\nPor favor, confirme que possui a intenção de fazer isto, que compreende as consequências e que encontra-se a fazer isto de acordo com as [[{{MediaWiki:Policy-url}}|políticas]] do projeto.",
        "actioncomplete": "Ação concluída",
        "actionfailed": "Falha na ação",
        "delete-edit-reasonlist": "Editar motivos de eliminação",
        "delete-toobig": "Esta página possui um longo histórico de edições, com mais de $1 {{PLURAL:$1|edição|edições}}.\nA eliminação de tais páginas foi restrita, a fim de se evitarem problemas acidentais em {{SITENAME}}.",
        "delete-warning-toobig": "Esta página possui um longo histórico de edições, com mais de $1 {{PLURAL:$1|edição|edições}}.\nEliminá-la poderá causar problemas na base de dados de {{SITENAME}};\nprossiga com cuidado.",
+       "deleteprotected": "Não é possível eliminar esta página porque foi protegida.",
        "deleting-backlinks-warning": "'''Cuidado:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Outras páginas]] se ligam ou redirecionam para a página que você está prestes a deletar.",
        "rollback": "Reverter edições",
-       "rollback_short": "Reverter",
        "rollbacklink": "reverter",
        "rollbacklinkcount": "reverter $1 {{PLURAL:$1|edição|edições}}",
        "rollbacklinkcount-morethan": "reverter mais de $1 {{PLURAL:$1|edição|edições}}",
        "protect-othertime": "Outra duração:",
        "protect-othertime-op": "outra duração",
        "protect-existing-expiry": "A proteção atual expirará às $3 de $2",
+       "protect-existing-expiry-infinity": "Existente tempo de expiração: infinito",
        "protect-otherreason": "Outro motivo/motivo adicional:",
        "protect-otherreason-op": "Outro motivo",
        "protect-dropdown": "*Motivos comuns para proteção\n** Vandalismo excessivo\n** Inserção excessiva de ''spams''\n** Guerra de edições improdutiva\n** Página bastante acessada",
        "namespace": "Espaço nominal:",
        "invert": "Inverter seleção",
        "tooltip-invert": "Marque esta caixa para esconder as alterações a páginas no espaço nominal selecionado (e no espaço nominal associado, se escolheu fazê-lo)",
+       "tooltip-whatlinkshere-invert": "Marque esta caixa de seleção para ocultar ligações de páginas dentro do domínio selecionado.",
        "namespace_association": "Espaço nominal associado",
        "tooltip-namespace_association": "Marque esta caixa para incluir também o espaço nominal de conteúdo ou de discussão associado à sua seleção",
        "blanknamespace": "(Principal)",
        "unblocked": "[[User:$1|$1]] foi desbloqueado",
        "unblocked-range": "$1 foi desbloqueado",
        "unblocked-id": "O bloqueio de $1 foi removido com sucesso",
+       "unblocked-ip": "[[Special:Contributions/$1|$1]] foi desbloqueado.",
        "blocklist": "Usuários bloqueados",
        "ipblocklist": "Usuários bloqueados",
        "ipblocklist-legend": "Procurar por um usuário bloqueado",
        "import-logentry-interwiki": "transwiki $1",
        "import-logentry-interwiki-detail": "{{PLURAL:$1|$1 edição|$1 edições}} de $2",
        "javascripttest": "Teste de JavaScript",
-       "javascripttest-title": "Executando testes para $1",
        "javascripttest-pagetext-noframework": "Esta página é exclusiva para testes de JavaScript.",
        "javascripttest-pagetext-unknownframework": "A estrutura de testes \"$1\" é desconhecida.",
        "javascripttest-pagetext-frameworks": "Escolha uma das seguintes estruturas de teste: $1",
        "javascripttest-pagetext-skins": "Escolha o tema para executar os testes:",
        "javascripttest-qunit-intro": "Veja a [$1 documentação de testes] no mediawiki.org.",
-       "javascripttest-qunit-heading": "Suíte de ferramentas de teste JavaScript QUnit para MediaWiki",
        "tooltip-pt-userpage": "Sua página de usuário",
        "tooltip-pt-anonuserpage": "A página de usuário para o ip com o qual você está editando",
        "tooltip-pt-mytalk": "Sua página de discussão",
index 28a989b..996565d 100644 (file)
        "uploaderror": "Erro ao carregar",
        "upload-recreate-warning": "'''Aviso: Um ficheiro com esse nome foi eliminado ou movido.'''\n\nPara sua conveniência, é apresentado de seguida o registo de eliminação e de movimento da página:",
        "uploadtext": "Utilize o formulário abaixo para fazer o carregamento de novos ficheiros.\nPara ver ou pesquisar ficheiros anteriormente enviados, consulte a [[Special:FileList|lista de ficheiros]].\nOs reenvios de um ficheiro são também registados no [[Special:Log/upload|registo de carregamentos]] e as eliminações no [[Special:Log/delete|registo de eliminações]].\n\nPara utilizar um ficheiro numa página, depois de ter feito o carregamento, insira uma ligação com um dos seguintes formatos:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:ficheiro.jpg]]</nowiki></code>''' para mostrar uma imagem nas suas dimensões originais;\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:ficheiro.png|200px|thumb|left|texto]]</nowiki></code>''' para mostrar uma imagem com a dimensão horizontal de 200 pixels, dentro de uma caixa, na margem esquerda, contendo 'texto' como descrição (pode usar subconjuntos destas características);\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:ficheiro.ogg]]</nowiki></code>''' para apresentar uma ligação direta para o ficheiro em vez de mostrá-lo, quer este tenha por conteúdo uma imagem ou outros dados.",
-       "upload-permitted": "Tipos de ficheiro permitidos: $1.",
-       "upload-preferred": "Tipos de ficheiro preferidos: $1.",
-       "upload-prohibited": "Tipos de ficheiro proibidos: $1.",
+       "upload-permitted": "{{PLURAL:$2|Tipo|Tipos}} de ficheiro {{PLURAL:$2|permitido|permitidos}}: $1.",
+       "upload-preferred": "{{PLURAL:$2|Tipo|Tipos}} de ficheiro {{PLURAL:$2|preferido|preferidos}}: $1.",
+       "upload-prohibited": "{{PLURAL:$2|Tipo|Tipos}} de ficheiro {{PLURAL:$2|proibido|proibidos}}: $1.",
        "uploadlogpage": "Registo de carregamento",
        "uploadlogpagetext": "Segue-se uma lista dos carregamentos mais recentes.\nConsulte a [[Special:NewFiles|galeria de novos ficheiros]] para visioná-los.",
        "filename": "Nome do ficheiro",
        "namespace": "Domínio:",
        "invert": "Inverter seleção",
        "tooltip-invert": "Marque esta caixa para esconder as alterações a páginas no domínio selecionado (e no domínio associado, se escolheu fazê-lo)",
+       "tooltip-whatlinkshere-invert": "Marque esta caixa de seleção para ocultar ligações de páginas dentro do domínio selecionado.",
        "namespace_association": "Domínio associado",
        "tooltip-namespace_association": "Marque esta caixa para incluir também o domínio de conteúdo ou de discussão associado à sua seleção",
        "blanknamespace": "(Principal)",
        "revdelete-uname-unhid": "utilizador desocultado",
        "revdelete-restricted": "restrições a administradores aplicadas",
        "revdelete-unrestricted": "restrições a administradores removidas",
+       "logentry-merge-merge": "$1 {{GENDER:$2|fundiu}} $3 com $4 (edições até $5)",
        "logentry-move-move": "$1 moveu a página $3 para $4",
        "logentry-move-move-noredirect": "$1 moveu a página $3 para $4 sem deixar um redirecionamento",
        "logentry-move-move_redir": "$1 {{GENDER:$2|moveu}} a página $3 para $4 sobre um redirecionamento",
        "mediastatistics-header-text": "Textuais",
        "mediastatistics-header-executable": "Executáveis",
        "mediastatistics-header-archive": "Formatos compactados",
+       "json-warn-trailing-comma": "$1 {{PLURAL:$1|vírgula desnecessária foi removida|vírgulas desnecessárias foram removidas}} do código JSON",
        "json-error-unknown": "Houve um problema com o JSON. Erro: $1",
        "json-error-depth": "A profundidade máxima da pilha foi excedida",
        "json-error-state-mismatch": "Código JSON inválido ou mal formatado",
+       "json-error-ctrl-char": "Erro de carácter de controlo, possivelmente codificado incorretamente",
        "json-error-syntax": "Erro de sintaxe",
+       "json-error-utf8": "Caracteres UTF-8 mal formatados, possivelmente codificado incorretamente",
        "json-error-unsupported-type": "Foi dado um valor de um tipo que não pode ser codificado"
 }
index 504658e..4fc6ee0 100644 (file)
        "image_sample": "{{optional}}\nUsed in text generated by Picture button in toolbar.\n{{Identical|Example}}",
        "image_tip": "This is the text that appears when you hover the mouse over the sixth (middle) button on the edit toolbar.\n\n{{Identical|Embedded file}}",
        "media_sample": "{{optional}}",
-       "media_tip": "This is the text that appears when you hover the mouse over the fifth button from the right in the edit toolbar.",
+       "media_tip": "This is the text that appears when you hover the mouse over the fifth button from the right in the edit toolbar.\n{{Identical|File link}}",
        "sig_tip": "This is the text that appears when you hover the mouse over the second key from the right on the edit toolbar.\n{{Identical|Signature with timestamp}}",
        "hr_tip": "This is the text that appears when you hover the mouse over the first button on the right on the edit toolbar.",
        "summary": "The Summary text beside the edit summary field\n\nSee also:\n* {{msg-mw|Subject}}\nSee also:\n* {{msg-mw|Accesskey-summary}}\n* {{msg-mw|Tooltip-summary}}\n{{Identical|Summary}}",
        "upload-summary": "{{doc-specialpagesummary|upload}}",
        "upload-recreate-warning": "Used as warning in [[Special:Upload]].",
        "uploadtext": "{{doc-important|<code>thumb</code> and <code>left</code> are magic words. Leave them untranslated!}}\nText displayed when uploading a file using [[Special:Upload]].",
-       "upload-permitted": "Used in [[Special:Upload]]. Parameters:\n* $1 - list of file types, defined in the variable [[mw:Special:MyLanguage/Manual:$wgFileExtensions|$wgFileExtensions]]\nSee also:\n* {{msg-mw|Upload-preferred}}\n* {{msg-mw|Upload-prohibited}}",
-       "upload-preferred": "Used in [[Special:Upload]]. Parameters:\n* $1 - list of file types, defined in the variable [[mw:Special:MyLanguage/Manual:$wgFileExtensions|$wgFileExtensions]]\nSee also:\n* {{msg-mw|Upload-permitted}}\n* {{msg-mw|Upload-prohibited}}",
-       "upload-prohibited": "Used in [[Special:Upload]]. Parameters:\n* $1 - list of file types, defined in the variable [[mw:Special:MyLanguage/Manual:$wgFileBlacklist|$wgFileBlacklist]]\nSee also:\n* {{msg-mw|Upload-permitted}}\n* {{msg-mw|Upload-preferred}}",
+       "upload-permitted": "Used in [[Special:Upload]]. Parameters:\n* $1 - list of file types, defined in the variable [[mw:Special:MyLanguage/Manual:$wgFileExtensions|$wgFileExtensions]]\n* $2 - count of items in $1 - for use in plural\nSee also:\n* {{msg-mw|Upload-preferred}}\n* {{msg-mw|Upload-prohibited}}",
+       "upload-preferred": "Used in [[Special:Upload]]. Parameters:\n* $1 - list of file types, defined in the variable [[mw:Special:MyLanguage/Manual:$wgFileExtensions|$wgFileExtensions]]\n* $2 - count of items in $1 - for use in plural\nSee also:\n* {{msg-mw|Upload-permitted}}\n* {{msg-mw|Upload-prohibited}}",
+       "upload-prohibited": "Used in [[Special:Upload]]. Parameters:\n* $1 - list of file types, defined in the variable [[mw:Special:MyLanguage/Manual:$wgFileBlacklist|$wgFileBlacklist]]\n* $2 - count of items in $1 - for use in plural\nSee also:\n* {{msg-mw|Upload-permitted}}\n* {{msg-mw|Upload-preferred}}",
        "uploadfooter": "{{notranslate}}",
        "upload-default-description": "{{ignored}}Custom default upload description. The contents of this message be will inserted in the field \"Summary\" on [[Special:Upload]].",
        "uploadlogpage": "{{doc-logpage}}\n\nPage title of [[Special:Log/upload]].",
index 4c5abe8..fdfea4d 100644 (file)
        "uploaderror": "Eroare la trimitere fișier",
        "upload-recreate-warning": "'''Atenție, un fișier cu același nume a fost șters sau redenumit.'''\nIată aici înregistrările relevante din jurnalul de ștergeri și redenumiri:",
        "uploadtext": "Utilizați formularul de mai jos pentru a trimite fișiere.\nPentru a vizualiza sau căuta imagini deja trimise, mergeți la [[Special:FileList|lista cu imagini]]; (re)încărcările și ștergerile sunt de asemenea înregistrate în [[Special:Log/upload|jurnalul fișierelor trimise]], respectiv [[Special:Log/delete|jurnalul fișierelor șterse]].\n\nPentru a insera un fișier într-o pagină, folosiți o legătură de forma:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Fișier.jpg]]</nowiki></code>''' pentru a include versiunea integrală a unui fișier\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Fișier.png|200px|thumb|left|informații]]</nowiki></code>''' pentru a introduce o imagine cu o lățime de 200 de pixeli într-un chenar plasat în partea stângă, având ca descriere textul „informații”\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Fișier.ogg]]</nowiki></code>''' pentru o legătură directă către fișier, fără a-l afișa",
-       "upload-permitted": "Tipuri de fișiere permise: $1.",
-       "upload-preferred": "Tipuri de fișiere preferate: $1.",
-       "upload-prohibited": "Tipuri de fișiere interzise: $1.",
+       "upload-permitted": "{{PLURAL:$2|Tip|Tipuri}} de fișiere permise: $1.",
+       "upload-preferred": "{{PLURAL:$2|Tip|Tipuri}} de fișiere preferate: $1.",
+       "upload-prohibited": "{{PLURAL:$2|Tip|Tipuri}} de fișiere interzise: $1.",
        "uploadlogpage": "Jurnal fișiere trimise",
        "uploadlogpagetext": "Mai jos este afișată lista ultimelor fișiere trimise.\nVezi [[Special:NewFiles|galeria fișierelor noi]] pentru o mai bună vizualizare.",
        "filename": "Nume fișier",
index ff42219..876012d 100644 (file)
        "permalink": "Collegamende ca remane pe sembre",
        "print": "Stambe",
        "view": "Vide",
+       "view-foreign": "'Ndruche sus a $1",
        "edit": "Cange",
+       "edit-local": "Cange 'a descrizione locale",
        "create": "Ccreje",
+       "create-local": "Aggiunge 'a descrizione locale",
        "editthispage": "Cange sta pàgene",
        "create-this-page": "Ccreje 'a pàgene",
        "delete": "Scangìlle",
        "otherlanguages": "Jndr'à l'otre lènghe",
        "redirectedfrom": "(Riderette da $1)",
        "redirectpagesub": "Pàgene de redirezione",
+       "redirectto": "Redirezione sus a:",
        "lastmodifiedat": "Sta pàgene a state cangete l'urtema vote da $1, alle $2.",
        "viewcount": "Sta pàggene ha state viste {{PLURAL:$1|'na vote|$1 vote}}.",
        "protectedpage": "Pàgene prutette",
        "viewsourcetext": "Tu puè vedè e cupià 'a sorgente de sta pàgene:",
        "viewyourtext": "Tu puè vedè e copià 'a sorgende de '''le cangiaminde tune''' a sta pàgene:",
        "protectedinterface": "Sta pàgene dèje 'nu teste de l'inderfacce pu software de sta uicchi, e jè prutette pe prevenìe l'abbuse.\nPe aggiungere o cangià le traduziune pe tutte le uicchi, pe piacere ause [//translatewiki.net/ translatewiki.net], 'u proggette de localizzazzione de MediaUicchi.",
-       "editinginterface": "'''Fà attenziò:'''  Tu ste cange 'na pàgene ca jè ausate pe dà 'n'inderfacce de teste p'u software.\nLe cangiaminde de sta pàgene vonne a mettene mane sus a l'inderfacce utende pe l'otre utinde de sta Uicchi.\nPe aggiungere o cangià le traduziune, pe piacere vide ce ause [//translatewiki.net/ translatewiki.net], 'u pruggette de localizzazione de MediaUicchi.",
+       "editinginterface": "<strong>Fà attenziò:</strong> Tu ste cange 'na pàgene ca jè ausate pe dà 'n'inderfacce de teste p'u software.\nLe cangiaminde de sta pàgene vonne a mettene mane sus a l'inderfacce utende pe l'otre utinde de sta Uicchi.",
        "cascadeprotected": "Sta pàgene ha state prutette da le cangiaminde, purcè jè ingluse jndr'à {{PLURAL:$1|seguende pàgene, ca jè|le seguende pàggene, ca sonde}} prutette cu l'opzione \"a caschete\":\n$2",
        "namespaceprotected": "Non ge tine 'u permesse pe cangià pàggene d'u neimspeise '''$1'''.",
        "customcssprotected": "Non ge tine 'u permesse pe cangià sta pàgene de CSS, purcè tène otre configurazione personale.",
        "invalidtitle-knownnamespace": "Titole invalide cu 'u namespace \"$2\" e teste \"$3\"",
        "invalidtitle-unknownnamespace": "Titele invalide cu numere de namespace scanusciute $1 e teste \"$2\"",
        "exception-nologin": "Non ge sì collegate",
-       "exception-nologin-text": "Pe piacere [[Special:Userlogin|tràse]] pe avè l'accesse a sta pàgene o a sta azione.",
+       "exception-nologin-text": "Pe piacere tràse pe avè l'accesse a sta pàgene o a sta azione.",
        "virus-badscanner": "Configurazione ca fece schife: Virus scanner scanusciute: ''$1''",
        "virus-scanfailed": "condrolle fallite (codece $1)",
        "virus-unknownscanner": "antivirus scanusciute:",
        "loginlanguagelabel": "Lénga: $1",
        "suspicious-userlogout": "'A richiesta toje de assè ha state bloccate purcè pare ca ha state mannate da 'nu browser scuasciate o da 'a cache de 'nu proxy.",
        "createacct-another-realname-tip": "'U nome vere jè facoltative.\nCe tu scacchie de metterle, quiste avène ausate pe dà 'u giuste merite a 'a fatìe de l'utende.",
+       "pt-login": "Tràse",
+       "pt-login-button": "Tràse",
+       "pt-createaccount": "Ccreje 'nu cunde utende",
+       "pt-userlogout": "Isse",
        "php-mail-error-unknown": "Errore scanusciute jndr'à funzione PHP mail()",
        "user-mail-no-addy": "E' pruvate a mannà 'na mail senze 'u 'ndirizze mail",
        "user-mail-no-body": "Pruvate a mannà 'na mail cu 'nu cuèrpe vacande o troppe curte.",
        "preview": "Andeprime",
        "showpreview": "Vide l'andeprime",
        "showdiff": "Fa vedè le cangiaminde",
-       "anoneditwarning": "'''Attenziò:''' Tu non ge sinde colleghete..\nL'indirizze IP tue avène reggistrete jndr'à le cangiaminde de sta pàgene.",
+       "anoneditwarning": "<strong>Attenziò:</strong> Tu non ge sì collegate..\nL'indirizze IP tune avène fatte vedè ce te face de le cangiaminde. Ce tu <strong>[$1 trase]</strong> o <strong>[$2 ccreje 'nu cunde utende]</strong>, le cangiaminde tune avènene attribbuite a 'u nome utende tune, 'nzieme a otre beneficie.",
        "anonpreviewwarning": "''Tu non ge sì collegate. Reggistranne le cangiaminde jndr'à sta pàgene iesse l'indirizze IP tune jndr'à storie.''",
        "missingsummary": "'''Arrecuèrdete:''' Tu non g'è provvedute a 'nu riepileghe de le cangiaminde.\nCe tu cazze Reggistre 'n'otra vote, 'u cangiamende tue avène memorizzete senze une.",
        "missingcommenttext": "Pe piacere mitte 'nu commende aqquà sotte.",
        "parser-template-recursion-depth-warning": "Ha state supranete 'u limite di ricorsione de le template ($1)",
        "language-converter-depth-warning": "'U convertitore de lènghe ha subranate 'u limite de profonnetà ($1)",
        "node-count-exceeded-category": "Pàggene addò 'u cunde de le node ha sbunnate",
-       "node-count-exceeded-warning": "Pagene ha sbunnate 'u condegge de le node",
+       "node-count-exceeded-warning": "'A pàgene ha sbunnate 'u condegge de le node",
        "expansion-depth-exceeded-category": "Pàggene addò 'a profonnetà de l'espanzione jè supranate",
        "expansion-depth-exceeded-warning": "Pàggene ca sbonnane 'a profonnetà de espanzione",
        "parser-unstrip-loop-warning": "Cicle infinite acchiate",
        "history-feed-empty": "'A vosce ca è cerchete non g'esiste.\nPò essere ca ha state scangellete da Uicchi o ha state renomenate..\nPruève a [[Special:Search|cercò sus a Uicchi]] 'mbrà le vosce cchiù rilevande.",
        "rev-deleted-comment": "(cangiamnde d'u riepileghe scangellate)",
        "rev-deleted-user": "(nome utende scangillete)",
-       "rev-deleted-event": "(azione de l'archivie scangillete)",
+       "rev-deleted-event": "(dettaglie de l'archivije scangellate)",
        "rev-deleted-user-contribs": "[nome utende o indirizze IP luate - cangiamende scunnute da le condrebbute]",
        "rev-deleted-text-permission": "Sta revisione d'a pàgene ha state '''scangellate'''.\nPuè acchijà cchiù 'mbormaziune sus a [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} l'archivije de le scangellaminde].",
        "rev-deleted-text-unhide": "Sta revisione d'a pàgene ha state '''scangellate'''.\nPuè acchijà cchiù 'mbormaziune sus a [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} l'archivije de le scangellaminde].\nTu puè angore [$1 vedè sta revisiona] ce tu avveramende a vuè ccù vide.",
        "revdelete-no-file": "'U file specificate non g'esiste.",
        "revdelete-show-file-confirm": "Si secure ca vuè ccu vide 'a revisione scangellate d'u file \"<nowiki>$1</nowiki>\" 'u $2 a le $3?",
        "revdelete-show-file-submit": "Sìne",
-       "logdelete-selected": "{{PLURAL:$1|Fatte de l'archivije selezionete|Fatte de l'archivije selezionete}}:",
+       "logdelete-selected": "{{PLURAL:$1|Fatte de l'archivije scacchiate}}:",
        "revdelete-confirm": "Pe piacere conferme ca tu vuè ccu face sta cose, ce tu è capite le conseguenze e ce quidde ca ste face jè in accorde cu le [[{{MediaWiki:Policy-url}}|reghele]] de Uicchipèdie.",
        "revdelete-suppress-text": "'A soppressione adda essere ausate '''sulamende''' jndr'à le case seguende:\n* 'Mbormaziune potenzialmende offenzive\n* Date personale inopportune\n*: ''indirizze, numere de telefono, codece fiscale, ecc.''",
        "revdelete-legend": "'Mboste le restriziune sus 'a visibbilità",
        "revdelete-hide-text": "Teste d'a revisione",
        "revdelete-hide-image": "Scunne 'u codenute d'u fail",
-       "revdelete-hide-name": "Scunne azione e obbiettive",
+       "revdelete-hide-name": "Scunne obbiettive e parametre",
        "revdelete-hide-comment": "Cange 'u riepiloghe",
        "revdelete-hide-user": "Nome utende/IP de quidde ca ha fatte 'u cangiamende",
        "revdelete-hide-restricted": "Live le date da l'amministratore cumme pe l'otre utinde",
        "search-section": "(sezione $1)",
        "search-suggest": "Ce signifeche: $1",
        "search-interwiki-caption": "Pruggette sorelle",
-       "search-interwiki-default": "$1 resultete:",
+       "search-interwiki-default": "Resultate da $1:",
        "search-interwiki-more": "(de cchiù)",
        "search-relatedarticle": "Colleghete",
        "searchrelated": "colleghete",
        "gender-female": "Femmene",
        "prefs-help-gender": "Opzionale: ausate pe l'indirizzamende corrette d'u sesse jndr'à 'u softwer. Sta 'mbormazione jè pubbleche.",
        "email": "Poste",
-       "prefs-help-realname": "'U nome vere (quidde d'u munne reale) jè facoltative.\nCe tu 'u mitte, a fatje ca è fatte t'avène ricanusciute.",
+       "prefs-help-realname": "'U nome vere jè facoltative.\nCe tu 'u mitte, a fatje ca è fatte t'avène recanusciute.",
        "prefs-help-email": "L'indirizze e-mail jè facoltative ma te dè 'a possibbilità de mannarte 'na password nova nove ce tu te scuèrde quedde ca tenive.",
        "prefs-help-email-others": "Tu puè pure scacchià de lassà a l'otre de condattarte ausanne 'a pàgene utende toje o quedde de le 'ngazzaminde senze ca onne abbesogne de dicere ce si tu.",
        "prefs-help-email-required": "L'indirizze e-mail jè obbligatorie.",
        "right-deletedtext": "Vide 'u teste scangellate e le cangiaminde 'mbrà le versiune scangellate",
        "right-browsearchive": "Cirche le pàggene scangellate",
        "right-undelete": "Repristine 'na pàgene",
-       "right-suppressrevision": "Revide e repristine le revisiune scunnete da l'amministrature",
+       "right-suppressrevision": "'Ndruche, scunne e fà assè le revisiune specifiche de le pàggene da l'otre utinde",
        "right-suppressionlog": "Vide l'archivije privete",
        "right-block": "Blocche otre utinde a fà le cangiaminde",
        "right-blockemail": "Blocche l'utente a fà mannà le email",
        "recentchanges-label-unpatrolled": "Stu cangiamende non g'à state angore condrollate",
        "recentchanges-legend-heading": "'''Leggende:'''",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ('ndruche pure [[Special:NewPages|elenghe de le pàggene nuève]])",
-       "rcnotefrom": "Sotte stonne le cangiaminde da '''$2''' ('nzigne a '''$1''' fatte vedè).",
+       "rcnotefrom": "Sotte {{PLURAL:$5|ste 'u cangiamende|stonne le cangiaminde}} da <strong>$3, $4</strong> ('nzigne a <strong>$1</strong> fatte vedè).",
        "rclistfrom": "Fà vedè le urteme cangiaminde partenne da $3 $2",
        "rcshowhideminor": "$1 cangiaminde stuèdeche",
        "rcshowhidebots": "$1 bot",
        "uploaderror": "Errore de carecamende",
        "upload-recreate-warning": "'''Attenziò: 'Nu file cu stu nome ha state scangellate o spustate.'''\n\nL'archivije de de scangellaminde e de le spustaminde pe sta pàgene le puè acchià aqquà:",
        "uploadtext": "Ause 'u module aqquà sotte pe carecà le file.\nPe vedè o cercà le file carecate precedendemende veje a 'a [[Special:FileList|liste de le file carecate]], le carecaminde sonde pure reggistrate jndr'à l'[[Special:Log/upload|archivije de le carecaminde]], le scangellazziune jndr'à l'[[Special:Log/delete|archivije de le scangellaminde]].\n\nPe ingludere 'nu file jndr'à 'na pàgene, ause 'u collegamende jndr'à une de le forme seguende:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''' pe ausà 'a versiona comblete d'u file\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|alt text]]</nowiki></code>''' pe ausà 'nu file cu 'a dimenziona massime de 200 pixel jndr'à 'na scatele ca se iacchie sus a 'u margine sinistre cu 'u teste 'alt text' cumme didascalìe.\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' pe appundà direttamende a 'u file senze ca face vedè 'u file",
-       "upload-permitted": "Tipe de file permesse: $1.",
-       "upload-preferred": "Tipe de file preferite: $1.",
-       "upload-prohibited": "Tipe de file proibbite: $1.",
+       "upload-permitted": "{{PLURAL:$2|Tipe}} de file permesse: $1.",
+       "upload-preferred": "{{PLURAL:$2|Tipe}} de file preferite: $1.",
+       "upload-prohibited": "{{PLURAL:$2|Tipe}} de file proibbite: $1.",
        "uploadlogpage": "Archivije de le carecaminde",
        "uploadlogpagetext": "Sotte ste 'na liste de le cchiù recende file carechete.\nVide 'a [[Special:NewFiles|gallerie de le file nuève]] pe vedè l'otre andeprime.",
        "filename": "Nome d'u fail",
        "largefileserver": "Stu file jè troppe gruesse pe quidde ca 'a configurazione d'u server permette.",
        "emptyfile": "'U file ca tu è carecate pare ca è vacande.\nPò essere ca è scritte male 'u nome d'u file e n'à carecate 'n'otre.\nPe piacere condrolle ce tu avveramende vuè cu careche stu file.",
        "windows-nonascii-filename": "Sta Uicchi non ge supporte le nome de le file cu le carattere speciale.",
-       "fileexists": "'Nu file cu stu nome esiste già, pe piacere verifiche <strong>[[:$1]]</strong> ce tu non ge sì secure no 'u sce cangianne.\n[[$1|thumb]]",
+       "fileexists": "'Nu file cu stu nome esiste già, pe piacere verifiche <strong>[[:$1]]</strong> ce {{GENDER:|tu}} non ge sì secure no 'u sce cangianne.\n[[$1|thumb]]",
        "filepageexists": "'A pàgene de descrizione pe stu file ha state già ccreiate 'u <strong>[[:$1]]</strong>, ma nisciune file cu stu nome osce a die esiste.\n'U riepileghe ca tu è mise non ge iesse sus 'a pàgene de descrizione.\nPe fà assè 'u riepileghe tu tìne abbesogne de cangiarle a mane.\n[[$1|thumb]]",
-       "fileexists-extension": "'Nu file cu 'nu nome simile esiste già: [[$2|thumb]]\n* Nome d'u file ca vuè cu careche: <strong>[[:$1]]</strong>\n* Nome d'u file ca già esiste: <strong>[[:$2]]</strong>\nPe piacere vide ce scacchie 'nu nome differende.",
+       "fileexists-extension": "'Nu file cu 'nu nome simile esiste già: [[$2|thumb]]\n* Nome d'u file ca vuè cu careche: <strong>[[:$1]]</strong>\n* Nome d'u file ca già esiste: <strong>[[:$2]]</strong>\nPe piacere vide ce scacchie 'nu nome 'nu picca diverse?",
        "fileexists-thumbnail-yes": "'U file pare ca jè 'n'immaggine de dimenzione ridotte ''(miniature)''. [[$1|thumb]]\nPe piacere condrolle 'u file <strong>[[:$1]]</strong>.\nCe 'u file condrollete jè d'a stesse dimenzione de quedda originale allore non ge stè abbesogne de carecà 'na miniatura de cchiù.",
        "file-thumbnail-no": "'U nome d'u file accumenze pe <strong>$1</strong>.\nPare ca jè 'n'immaggine piccenne ''(miniature)''.\nCe tu tìne sulamende st'immaggine da carecà apposte, ce nò vide ce cange 'u file.",
        "fileexists-forbidden": "'U file cu stu nome già esiste e non ge pò essere sovrascritte.<br />\nCe tu vuè angore carecà 'u file tue, pe piacere tuèrne rrete e ause 'nu nome nuève. [[File:$1|thumb|center|$1]]",
        "license-header": "Licenziate da",
        "nolicense": "Ninde selezionete",
        "license-nopreview": "(L'andeprime non g'è disponibbile)",
-       "upload_source_url": " ('na URL, valide e accessibbile pubblicamende)",
-       "upload_source_file": " ('nu fail sus a 'u combiuter tue)",
+       "upload_source_url": " ('u file tune scacchiate da 'na URL, valide e accessibbile pubblicamende)",
+       "upload_source_file": " ('nu fail sus a 'u combiuter tune)",
        "listfiles-summary": "Sta pàgena speciale face vedè tutte le file carecate.<br />\nQuanne jè filtrate da l'utende, sulamende le file addò quidde utende ave carecate le versiune cchiù recende, avènene fatte vedè.",
        "listfiles_search_for": "Cirche pe nome de le media:",
        "imgfile": "file",
        "filedelete-maintenance": "Scangellaminde e repristinaminde de le file jè temboraneamende disabbilitate duranne 'a manutenzione.",
        "filedelete-maintenance-title": "Non ge se pò scangellà 'u file",
        "mimesearch": "Ricerca jndr'à 'u MIME",
-       "mimesearch-summary": "Sta pàgene abbilitesce 'u filtre sus a le file pu tipe de MIME.\nInput: contenttype/subtype, pe esembie <code>image/jpeg</code>.",
+       "mimesearch-summary": "Sta pàgene abbilitesce 'u filtre sus a le file pu tipe de MIME.\nInput: contenttype/subtype o contenttype/*, pe esembie <code>image/jpeg</code>.",
        "mimetype": "Tipe de MIME:",
        "download": "scareche",
        "unwatchedpages": "Pàggene ca non ge ste condrolle",
        "pageswithprop-prophidden-binary": "valore probbietà binarie scunnute ($1)",
        "doubleredirects": "Ridirezionaminde a doppie",
        "doubleredirectstext": "Sta pàgene elenghe le pàggene ca se ridirezionane sus a otre pàggene de ridirezionaminde.\nOgne righe condene 'nu collegamende a 'u prime e a 'u seconde ridirezionamende pe fà vedè addò arrive 'u seconde ridirezionamende, 'u quale jè normalmende 'a pàgena de destinaziona \"rèale\", addò 'u prime ridirezionamende avesse appondà.\nLe situaziune de <del>ingrocie</del> onne state resolte.",
-       "double-redirect-fixed-move": "[[$1]] ha state spustate.\nMò s'avène redirette a [[$2]].",
-       "double-redirect-fixed-maintenance": "Aggiuste le doppie redirezionaminde da [[$1]] a [[$2]].",
+       "double-redirect-fixed-move": "[[$1]] ha state spustate.\nAvène aggiornate automaticamende e mò s'avène redirette a [[$2]].",
+       "double-redirect-fixed-maintenance": "Aggiuste le doppie redirezionaminde da [[$1]] a [[$2]] jndr'à 'na fatije de manutenzione.",
        "double-redirect-fixer": "Correttore de redirezionaminde",
        "brokenredirects": "Redirezionamninde scuasciete",
        "brokenredirectstext": "Le ridirezionaminde ca seguene appondene a pàggene ca non g'esistene:",
        "wantedtemplates": "Template cchiù ausete",
        "mostlinked": "Pàggene cchiù appundete",
        "mostlinkedcategories": "Categorije cchiù appundete",
-       "mostlinkedtemplates": "Template cchiù appundete",
+       "mostlinkedtemplates": "Pàggene cchiù appundate",
        "mostcategories": "Pàggene cu 'nu sacche de categorije",
        "mostimages": "Fail cchiù appundete",
        "mostinterwikis": "Pàggene cu cchiù interuicchi de tutte",
        "unwatchthispage": "No condrollà cchiù 'a pàgene",
        "notanarticle": "Non g'è 'na vosce",
        "notvisiblerev": "'A revisione ha state scangellete",
-       "watchlist-details": "{{PLURAL:$1|$1 pàgene|$1 pàggene}} jndr'à liste de le pàggene condrollete, scartanne le pàggene de le 'ngazzaminde.",
+       "watchlist-details": "{{PLURAL:$1|$1 pàgene|$1 pàggene}} jndr'à l'elenghe de le pàggene condrollate, scartanne le pàggene de le 'ngazzaminde.",
        "wlheader-enotif": "* Notifiche pe email abbilitate.",
        "wlheader-showupdated": "* Le pàggene ca onne state cangiate da l'urtema visite avènene fatte vedè in '''grascette'''",
-       "wlnote": "Aqquà sotte {{PLURAL:$1|ste l'urteme cangiamende|stonne l'urteme '''$1''' cangiaminde}} jndr'à {{PLURAL:$2|l'urtema ore|l'urteme '''$2''' ore}}, jndr'à $3, $4.",
+       "wlnote": "Aqquà sotte {{PLURAL:$1|ste l'urteme cangiamende|stonne l'urteme <strong>$1</strong> cangiaminde}} jndr'à {{PLURAL:$2|l'urtema ore|l'urteme <strong>$2</strong> ore}}, jndr'à $3, $4.",
        "wlshowlast": "Vide l'urteme $1 ore $2 sciurne",
        "watchlist-options": "Opzione d'a liste de le pàggene condrollete",
        "watching": "Fà vedè...",
        "exbeforeblank": "'u condenute apprime d'a pulizie ere: '$1'",
        "delete-confirm": "Scangille \"$1\"",
        "delete-legend": "Scangille",
-       "historywarning": "'''Vide Bbuene:''' 'a pàgene ca ste scangille tène 'na storie de cangiaminde cu cchiù o mene $1 {{PLURAL:$1|revisione|revisiune}}:",
+       "historywarning": "<strong>Vide Bbuene:</strong> 'A pàgene ca ste scangille tène 'na storie de cangiaminde cu cchiù o mene $1 {{PLURAL:$1|revisione|revisiune}}:",
        "confirmdeletetext": "Vide Bbuene, vide ca ste scangille 'na pàgene ca tène pure nu sbuenne de cangiaminde.\nConferme quidde ca ste face, ce si sicure ca è capite quidde ca ste cumbine e ce è corrette rispette a [[{{MediaWiki:Policy-url}}|le regole de scangellazione]], ce no statte quiete.",
        "actioncomplete": "Aziona Combletete",
        "actionfailed": "Aziona fallite",
        "protect-locked-blocked": "Tu non ge puè cangià le levèlle de protezzione quanne si bloccate.\nAqquà stonne le 'mbostaziune corrende pa pàgene '''$1''':",
        "protect-locked-dblock": "Le levèlle de protezzione non ge ponne essere cangete purcè stè 'nu blocche d'u database.\nAqquà stonne le 'mbostaziune corrende pa pàgene '''$1''':",
        "protect-locked-access": "Tu non ge tine le permesse pe putè cangià le levèlle de protezione de le pàggene.\nChiste sonde le configuraziune corrende p'a pàgene '''$1''':",
-       "protect-cascadeon": "Sta pàgene mò jè  prutette purcè jè ingluse jndr'à {{PLURAL:$1|'a seguende pàgene, ca tène|le seguende pàggene, ca tènene}} a protezione a cascata appizzechete.\nTu puè cangià 'u levèlle de protezione de sta pàgene ma stu cangiamende non ge tène effette a cascata.",
+       "protect-cascadeon": "Sta pàgene mò jè  prutette purcè jè 'ngluse jndr'à {{PLURAL:$1|'a seguende pàgene, ca tène|le seguende pàggene, ca tènene}} a protezione a cascata appizzecate.\nTu puè cangià 'u levèlle de protezione de sta pàgene ma stu cangiamende non ge tène effette a cascata.",
        "protect-default": "Permitte a tutte l'utinde",
        "protect-fallback": "Richieste d'u permesse \"$1\"",
        "protect-level-autoconfirmed": "Blocche l'utinde nuève e chidde non reggistrate",
        "import-upload": "Careche le date in XML",
        "import-token-mismatch": "S'à perse 'a sessione de le date. Pruève 'n'otra vote.",
        "import-invalid-interwiki": "Non ge pozze 'mbortà da 'a Uicchi specificate.",
-       "import-error-edit": "Pàgene \"$1\" non g' 'mbortate purcé tu non ge tìne le permesse pe cangiarle.",
-       "import-error-create": "Pàgene \"$1\" non g' 'mbortate purcé tu non ge tìne le permesse pe ccrejarle.",
-       "import-error-interwiki": "Pagene \"$1\" non g'ha state 'mbortate purcé 'u nome sue jè riservate pe collegaminde esterne (interuicchi).",
+       "import-error-edit": "Pàgene \"$1\" non g'ha state 'mbortate purcé tu non ge tìne le permesse pe cangiarle.",
+       "import-error-create": "Pàgene \"$1\" non g'ha state 'mbortate purcé tu non ge tìne le permesse pe ccrejarle.",
+       "import-error-interwiki": "Pagene \"$1\" non g'ha state 'mbortate purcé 'u nome sue jè riservate pe collegaminde de fore (interuicchi).",
        "import-error-special": "'A pagena \"$1\" non g'ha state 'mbortate purcé apponde a 'nu namespace speciale ca non g'è permesse a le pàggene normale.",
-       "import-error-invalid": "'A pàgene \"$1\" non g'ha state 'mbortate purcé 'u nome jè invalide.",
+       "import-error-invalid": "'A pàgene \"$1\" non g'ha state 'mbortate purcé 'u nome sus a 'u quale avessa essere 'mborate non g'è valide sus a sta uicchi.",
        "import-error-unserialize": "'A revisione $2 d'a pàgene \"$1\" non ge pò essere deserializzate. 'A revisione ha state reportate pe ausà 'u modelle d'u condenute $3 serializzate cumme $4.",
        "import-options-wrong": "{{PLURAL:$2|opzione|opziune}} sbagliate: <nowiki>$1</nowiki>",
        "import-rootpage-invalid": "'A pàgene radice date tène 'nu titole invalide.",
index 5f70a05..82044e2 100644 (file)
@@ -75,7 +75,8 @@
                        "MaxBioHazard",
                        "Tourorist",
                        "Purodha",
-                       "Максим777"
+                       "Максим777",
+                       "Sealle"
                ]
        },
        "tog-underline": "Подчёркивание ссылок:",
        "passwordreset-capture-help": "Если вы установите данную отметку, то вам будет показано письмо с временным паролем, отправляемое участнику.",
        "passwordreset-email": "Адрес электронной почты:",
        "passwordreset-emailtitle": "Сведения об учётной записи {{SITENAME}}",
-       "passwordreset-emailtext-ip": "Кто-то (возможно, вы, с IP-адреса $1) запросил сброс пароля к вашей учётной записи в проекте {{SITENAME}} ($4).\nС этим адресом электронной почты {{PLURAL:$3|1=связана следующая учётная запись|связаны следующие учётные записи}}:\n\n$2\n\n{{PLURAL:$3|1=Этот временный пароль будет|Эти временные пароли будут}} действовать {{PLURAL:$5|$5 день|$5 дня|$5 дней}}.\nВы должны представиться системе и выбрать новый пароль. \nЕсли вы не делали этого запроса, или вспомнили свой исходный пароль и не желаете его менять, \nто можете проигнорировать это сообщение и продолжить использовать свой старый пароль.",
+       "passwordreset-emailtext-ip": "Кто-то (возможно, вы, с IP-адреса $1) запросил сброс пароля к вашей учётной записи в проекте {{SITENAME}} ($4).\nС этим адресом электронной почты {{PLURAL:$3|1=связана следующая учётная запись|связаны следующие учётные записи}}:\n\n$2\n\n{{PLURAL:$3|1=Этот временный пароль будет|Эти временные пароли будут}} действовать {{PLURAL:$5|$5 день|$5 дня|$5 дней|1=один день}}.\nВы должны представиться системе и выбрать новый пароль. \nЕсли вы не делали этого запроса, или вспомнили свой исходный пароль и не желаете его менять, \nто можете проигнорировать это сообщение и продолжить использовать свой старый пароль.",
        "passwordreset-emailtext-user": "Участник $1 из проекта {{SITENAME}} запросил сброс пароля для вашей учётной записи в проекте {{SITENAME}} ($4).\nС этим адресом электронной почты {{PLURAL:$3|1=связана следующая учётная запись|связаны следующие учётные записи}}:\n\n$2\n\n{{PLURAL:$3|1=Этот временный пароль будет|Эти временные пароли будут}} действовать {{PLURAL:$5|$5 день|$5 дней|$5 дня|1=один день}}.\nВы должны представиться системе и выбрать новый пароль.\nЕсли вы не делали этого запроса или вспомнили свой исходный пароль и не желаете его менять, \nто можете проигнорировать это сообщение и продолжить использовать свой старый пароль.",
        "passwordreset-emailelement": "Имя участника: $1\nВременный пароль: $2",
        "passwordreset-emailsent": "Отправлено электронное письмо с информацией о сбросе пароля.",
        "uploaderror": "Ошибка загрузки файла",
        "upload-recreate-warning": "'''Внимание: файл с таким именем был удален или переименован.'''\n\nНиже представлены журналы удалений и переименований этой страницы:",
        "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|описание]]</nowiki></code>''' для вставки слева от текста уменьшенной до 200 пикселей по ширине версии файла с выводом под ним указанного описания;\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' для вставки ссылки на файл, без отображения его содержимого на странице.",
-       "upload-permitted": "Разрешённые типы файлов: $1.",
-       "upload-preferred": "Предпочтительные типы файлов: $1.",
-       "upload-prohibited": "Запрещённые типы файлов: $1.",
+       "upload-permitted": "{{PLURAL:$2|Разрешённый тип|Разрешённые типы}} файлов: $1.",
+       "upload-preferred": "{{PLURAL:$2|Предпочтительный тип|Предпочтительные типы}} файлов: $1.",
+       "upload-prohibited": "{{PLURAL:$2|Запрещённый тип|Запрещённые типы}} файлов: $1.",
        "uploadlogpage": "Журнал загрузок",
        "uploadlogpagetext": "Ниже представлен список последних загрузок файлов.\nСм. также [[Special:NewFiles|галерею новых файлов]], где сведения о новых загрузках представлены в более наглядном виде, и [[Special:ListFiles|все загруженные файлы]].",
        "filename": "Имя файла",
        "filehist-comment": "Примечание",
        "imagelinks": "Использование файла",
        "linkstoimage": "{{PLURAL:$1|Следующая $1 страница ссылается|Следующие $1 страницы ссылаются|Следующие $1 страниц ссылаются}} на данный файл:",
-       "linkstoimage-more": "Ð\91олее $1 {{PLURAL:$1|Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\8b\81Ñ\82Ñ\80аниÑ\86}} Ñ\81Ñ\81Ñ\8bлаÑ\8eÑ\82Ñ\81Ñ\8f Ð½Ð° Ñ\8dÑ\82оÑ\82 Ñ\84айл.\nÐ\92 Ð´Ð°Ð½Ð½Ð¾Ð¼ Ñ\81пиÑ\81ке {{PLURAL:$1|пÑ\80едÑ\81Ñ\82авлена Ñ\82олÑ\8cко $1 Ñ\81Ñ\81Ñ\8bлка|пÑ\80едÑ\81Ñ\82авленÑ\8b Ñ\82олÑ\8cко $1 Ñ\81Ñ\81Ñ\8bлок|пÑ\80едÑ\81Ñ\82авленÑ\8b Ñ\82олÑ\8cко $1 Ñ\81Ñ\81Ñ\8bлки}} на этот файл.\nДоступен также [[Special:WhatLinksHere/$2|полный список]].",
+       "linkstoimage-more": "Ð\91олее $1 {{PLURAL:$1|Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\8b\81Ñ\82Ñ\80аниÑ\86}} Ñ\81Ñ\81Ñ\8bлаÑ\8eÑ\82Ñ\81Ñ\8f Ð½Ð° Ñ\8dÑ\82оÑ\82 Ñ\84айл.\nÐ\92 Ð´Ð°Ð½Ð½Ð¾Ð¼ Ñ\81пиÑ\81ке {{PLURAL:$1|пÑ\80едÑ\81Ñ\82авлена Ñ\82олÑ\8cко $1 Ñ\81Ñ\81Ñ\8bлка|пÑ\80едÑ\81Ñ\82авленÑ\8b Ñ\82олÑ\8cко $1 Ñ\81Ñ\81Ñ\8bлки|пÑ\80едÑ\81Ñ\82авленÑ\8b Ñ\82олÑ\8cко $1 Ñ\81Ñ\81Ñ\8bлок}} на этот файл.\nДоступен также [[Special:WhatLinksHere/$2|полный список]].",
        "nolinkstoimage": "Нет страниц, ссылающихся на данный файл.",
        "morelinkstoimage": "Просмотреть [[Special:WhatLinksHere/$1|остальные ссылки]] на этот файл.",
        "linkstoimage-redirect": "$1 (файловое перенаправление) $2",
        "javascripttest": "Проверка JavaScript",
        "javascripttest-pagetext-noframework": "Эта страница зарезервирована для запуска JavaScript-тестов.",
        "javascripttest-pagetext-unknownframework": "Неизвестная среда тестирования «$1».",
+       "javascripttest-pagetext-unknownaction": "Неизвестное действие «$1».",
        "javascripttest-pagetext-frameworks": "Пожалуйста, выберите одну из следующих сред тестирования: $1",
        "javascripttest-pagetext-skins": "Выберите тему оформления для запуска тестов:",
        "javascripttest-qunit-intro": "См. [$1 документацию по тестированию] на mediawiki.org.",
index 0ea97a7..fb15742 100644 (file)
@@ -26,7 +26,8 @@
                        "හරිත",
                        "Indunil Chamara",
                        "Susith Chandira Gts",
-                       "Thanushka"
+                       "Thanushka",
+                       "Thirsty"
                ]
        },
        "tog-underline": "සබැඳි යටීර කිරීම:",
        "uploaderror": "උඩුගත කිරීම් දෝෂයක්",
        "upload-recreate-warning": "'''අවවාදයයි: මෙම නම තිබූ ගොනුවක් මකාදැමීමට හෝ ගෙනයෑමට හෝ ලක්ව ඇත.'''\n\nඔබගේ පහසුව තකා මෙම පිටුවවෙහි මකාදැමුමෙහි හා ගෙනයෑමෙහි ලඝු සටහන මෙහි දැක්වේ:",
        "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": "අවසරලත් ගොනු වර්ගයන්: $1.",
-       "upload-preferred": "අභිරුචි ගොනු වර්ගයන්: $1.",
-       "upload-prohibited": "තහනම් ගොනු වර්ගයන්: $1.",
+       "upload-permitted": "අවසරලත් ගොනුව {{PLURAL:$2|type|types}}: $1.",
+       "upload-preferred": "අභිරුචි ගොනුව {{PLURAL:$2|type|types}}: $1",
+       "upload-prohibited": "තහනම් ගොනුව {{PLURAL:$2|type|types}}: $1.",
        "uploadlogpage": "උඩුගත කිරීම් සටහන",
        "uploadlogpagetext": "ඉතා මෑතදී සිදුකල ගොනු උඩුගතකිරීම් ලැයිස්තුවක් පහත දැක්වේ.\nවැඩිමනත් දෘශ්‍ය සමාලෝචනය සඳහා [[Special:NewFiles|නව ගොනු ගැලරිය]] බලන්න.",
        "filename": "ගොනු නාමය",
        "version-libraries": "ස්ථාපිත පුස්තකාල",
        "version-libraries-library": "පුස්තකාලය",
        "version-libraries-version": "අනුවාදය",
+       "redirect-file": "ගොනුනාමය",
        "fileduplicatesearch": "අනුපිටපත් ගොනු සඳහා ගවේෂණය කරන්න",
        "fileduplicatesearch-summary": "එහි පූරක අගය පාදක කර ගෙන අනුපිටපත් ගොනු සඳහා ගවේෂණය කරන්න.",
        "fileduplicatesearch-legend": "අනුපිටපතක් සඳහා ගවේෂණය කරන්න",
index c609bb1..754767d 100644 (file)
        "uploaderror": "Napaka",
        "upload-recreate-warning": "'''Opozorilo: Datoteka s tem imenom je bila izbrisana ali prestavljena.'''\n\nDnevnik brisanja in prestavitev za to stran sta navedena tukaj:",
        "uploadtext": "Spodnji obrazec lahko uporabite za nalaganje datotek.\nZa ogled ali iskanje že naloženih pojdite na [[Special:FileList|seznam naloženih datotek]]; ponovna nalaganja so zabeležena tudi v [[Special:Log/upload|dnevniku nalaganja]], izbrisi pa v [[Special:Log/delete|dnevniku brisanja]].\n\nDatoteko lahko na želeno stran vključite na naslednje načine:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Datoteka.jpg]]</nowiki></code>''' (polna velikost)\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Datoteka.jpg|200px|thumb|left|opisno besedilo]]</nowiki></code>''' (slika pomanjšana na 200 slikovnih pik širine, uokvirjena, z levo poravnavo in opisom »opisno besedilo«)\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Datoteka.ogg]]</nowiki></code>''' (neposredna povezava z datoteko)",
-       "upload-permitted": "Dovoljene vrste datotek: $1.",
-       "upload-preferred": "Priporočene vrste datotek: $1.",
-       "upload-prohibited": "Prepovedane vrste datotek: $1.",
+       "upload-permitted": "{{PLURAL:$2|Dovoljena vrsta|Dovoljeni vrsti|Dovoljene vrste}} datotek: $1.",
+       "upload-preferred": "{{PLURAL:$2|Priporočena vrsta|Priporočeni vrsti|Priporočene vrste}} datotek: $1.",
+       "upload-prohibited": "{{PLURAL:$2|Prepovedana vrsta|Prepovedani vrsti|Prepovedane vrste}} datotek: $1.",
        "uploadlogpage": "Dnevnik nalaganja datotek",
        "uploadlogpagetext": "Prikazan je seznam nedavno naloženih datotek.\nZa grafični pogled obiščite [[Special:NewFiles|galerijo novih datotek]].",
        "filename": "Ime datoteke",
index 6123f98..1e645cc 100644 (file)
        "version-poweredby-others": "остали",
        "version-poweredby-translators": "translatewiki.net преводиоци",
        "version-credits-summary": "Желели бисмо да захвалимо следећим људима на њиховом доприносу [[Special:Version|Медијавикији]].",
-       "version-license-info": "Медијавики је слободан софтвер можете га редистрибуирати и/или модификовати под условима ГНУ-ове опште јавне лиценце верзија 2 или сваке следеће коју објави Задужбина за слободан софтвер.\n\nМедијавики се редистрибуирати у нади да ће бити од користи, али БЕЗ ИКАКВЕ ГАРАНЦИЈЕ чак и без ПОДРАЗУМЕВАНЕ ГАРАНЦИЈЕ ФУНКЦИОНАЛНОСТИ или ПРИКЛАДНОСТИ ЗА ОДРЕЂЕНЕУ НАМЕНУ. Погледајте ГНУ-ову општу јавну лиценцу за више информација.\n\nТребало би да сте примили [{{SERVER}}{{SCRIPTPATH}}/COPYING примерак ГНУ-ове опште јавне лиценце] заједно са овим програмом. Ако нисте, пишите на Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA или [//www.gnu.org/licenses/old-licenses/gpl-2.0.html прочитајте овде].",
+       "version-license-info": "Медијавики је слободан софтвер можете га редистрибуирати и/или модификовати под условима ГНУ-ове опште јавне лиценце верзија 2 или сваке следеће коју објави Задужбина за слободан софтвер.\n\nМедијавики се редистрибуира у нади да ће бити од користи, али БЕЗ ИКАКВЕ ГАРАНЦИЈЕ чак и без ПОДРАЗУМЕВАНЕ ГАРАНЦИЈЕ ФУНКЦИОНАЛНОСТИ или ПРИКЛАДНОСТИ ЗА ОДРЕЂЕНЕУ НАМЕНУ. Погледајте ГНУ-ову општу јавну лиценцу за више информација.\n\nТребало би да сте добили [{{SERVER}}{{SCRIPTPATH}}/COPYING примерак ГНУ-ове опште јавне лиценце] заједно са овим програмом. Ако нисте, пишите на Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA или [//www.gnu.org/licenses/old-licenses/gpl-2.0.html прочитајте овде].",
        "version-software": "Инсталирани софтвер",
        "version-software-product": "Производ",
        "version-software-version": "Верзија",
        "version-entrypoints": "Адресе улазне тачке",
        "version-entrypoints-header-entrypoint": "Улазна тачка",
        "version-entrypoints-header-url": "Адреса",
+       "version-libraries": "Инсталиране библиотеке",
+       "version-libraries-library": "Библиотека",
+       "version-libraries-version": "Верзија",
        "redirect": "Преусмерење на датотеку, корисника, страницу или измену",
        "redirect-legend": "Преусмери на датотеку или страницу",
        "redirect-submit": "Иди",
index d7ae58f..2747efe 100644 (file)
        "version-poweredby-others": "ostali",
        "version-poweredby-translators": "translatewiki.net prevodioci",
        "version-credits-summary": "Želeli bismo da zahvalimo sledećim ljudima na njihovom doprinosu [[Special:Version|Medijavikiji]].",
-       "version-license-info": "Medijaviki je slobodan softver možete ga redistribuirati i/ili modifikovati pod uslovima GNU-ove opšte javne licence verzija 2 ili svake sledeće koju objavi Zadužbina za slobodan softver.\n\nMedijaviki se redistribuirati u nadi da će biti od koristi, ali BEZ IKAKVE GARANCIJE čak i bez PODRAZUMEVANE GARANCIJE FUNKCIONALNOSTI ili PRIKLADNOSTI ZA ODREĐENEU NAMENU. Pogledajte GNU-ovu opštu javnu licencu za više informacija.\n\nTrebalo bi da ste primili [{{SERVER}}{{SCRIPTPATH}}/COPYING primerak GNU-ove opšte javne licence] zajedno s ovim programom. Ako niste, pišite na Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA ili [//www.gnu.org/licenses/old-licenses/gpl-2.0.html pročitajte ovde].",
+       "version-license-info": "Medijaviki je slobodan softver možete ga redistribuirati i/ili modifikovati pod uslovima GNU-ove opšte javne licence verzija 2 ili svake sledeće koju objavi Zadužbina za slobodan softver.\n\nMedijaviki se redistribuira u nadi da će biti od koristi, ali BEZ IKAKVE GARANCIJE čak i bez PODRAZUMEVANE GARANCIJE FUNKCIONALNOSTI ili PRIKLADNOSTI ZA ODREĐENEU NAMENU. Pogledajte GNU-ovu opštu javnu licencu za više informacija.\n\nTrebalo bi da ste dobili [{{SERVER}}{{SCRIPTPATH}}/COPYING primerak GNU-ove opšte javne licence] zajedno sa ovim programom. Ako niste, pišite na Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA ili [//www.gnu.org/licenses/old-licenses/gpl-2.0.html pročitajte ovde].",
        "version-software": "Instalirani softver",
        "version-software-product": "Proizvod",
        "version-software-version": "Verzija",
index 7d729fb..6253392 100644 (file)
@@ -38,7 +38,7 @@
        "tog-shownumberswatching": "Témbongkeun jumlah nu ngawaskeun",
        "tog-oldsig": "Paraf nu geus aya:",
        "tog-fancysig": "Témbongkeun paraf salaku wikitext (tanpa tumbu otomatis)",
-       "tog-uselivepreview": "Paké pramidang saharita (ujicoba)",
+       "tog-uselivepreview": "Paké pratayang langsung",
        "tog-forceeditsummary": "Mun kotak ringkesan éditan masih kosong, béjaan!",
        "tog-watchlisthideown": "Sumputkeun éditan kuring dina daptar awaskeuneun",
        "tog-watchlisthidebots": "Sumputkeun éditan bot dina daptar awaskeuneun",
        "delete-toobig": "Jujutan édit ieu kaca panjang pisan, leuwih ti {{PLURAL:$1|révisi|révisi}}.\nHal ieu teu diwenangkeun pikeun nyegah karuksakan {{SITENAME}} nu teu dihaja.",
        "delete-warning-toobig": "Jujutan ieu kaca panjang pisan, leuwih ti{{PLURAL:$1|révisi|révisi}}. Dihapusna ieu kaca bisa ngaruksak jalanna pangkalan data {{SITENAME}}; sing ati-ati.",
        "rollback": "Balikkeun éditan",
-       "rollback_short": "Balikkeun",
        "rollbacklink": "balikkeun",
        "rollbackfailed": "Gagal malikkeun",
        "cantrollback": "Éditan teu bisa dibalikkeun; kontribusi panungtung ngarupakeun hiji-hijina panulis kaca ieu.",
        "version-hook-subscribedby": "Didaptarkeun ku",
        "version-version": "(Vérsi $1)",
        "version-license": "Lisénsi MediaWiki",
+       "version-poweredby-translators": "darmamurcaya translatewiki.net",
        "version-software": "Sopwér nu geus diinstal",
        "version-software-product": "Produk",
        "version-software-version": "Vérsi",
index 9c7f5da..6c1727a 100644 (file)
@@ -78,7 +78,7 @@
        "tog-watchdefault": "Lägg till sidor och filer jag redigerar i min bevakningslista",
        "tog-watchmoves": "Lägg till sidor och filer jag flyttar i min bevakningslista",
        "tog-watchdeletion": "Lägg till sidor och filer jag raderar i min bevakningslista",
-       "tog-watchrollback": "Lägg till sidor där jag har utfört en tillbakarullning till min övervakningslista",
+       "tog-watchrollback": "Lägg till sidor där jag har utfört en tillbakarullning till min bevakningslista",
        "tog-minordefault": "Markera automatiskt ändringar som mindre",
        "tog-previewontop": "Visa förhandsgranskningen ovanför redigeringsrutan",
        "tog-previewonfirst": "Visa förhandsgranskning vid första redigeringen",
        "uploaderror": "Fel vid uppladdningen",
        "upload-recreate-warning": "'''Varning: En fil med det namnet har tagits bort eller flyttats.'''\n\nRaderings- och sidflyttningsloggen för denna sida återges här:",
        "uploadtext": "Använd formuläret nedan för att ladda upp filer.\nFör att titta på eller leta efter filer som redan har laddats upp, se [[Special:FileList|listan över uppladdade filer]]. Uppladdningar loggförs även i [[Special:Log/upload|uppladdningsloggen]], och raderingar i [[Special:Log/delete|raderingsloggen]].\n\nAnvänd en länk på något av följande format för att infoga en fil på en sida:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''' för att visa filen i dess hela storlek\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|alternativ text]]</nowiki></code>''' för att visa en rendering med bredden 200 pixel i en ruta till vänster med bildtexten 'alternativ text'\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' för att länka direkt till filen utan att visa den",
-       "upload-permitted": "Tillåtna filtyper: $1.",
-       "upload-preferred": "Föredragna filtyper: $1.",
-       "upload-prohibited": "Förbjudna filtyper: $1.",
+       "upload-permitted": "{{PLURAL:$2|Tillåten filtyp|Tillåtna filtyper}}: $1.",
+       "upload-preferred": "{{PLURAL:$2|Föredragen filtyp|Föredragna filtyper}}: $1.",
+       "upload-prohibited": "{{PLURAL:$2|Förbjuden filtyp|Förbjudna filtyper}}: $1.",
        "uploadlogpage": "Uppladdningslogg",
        "uploadlogpagetext": "Det här är en logg över de senast uppladdade filerna.\nSe [[Special:NewFiles|galleriet över nya filer]] för en mer visuell översikt.",
        "filename": "Filnamn",
        "namespace": "Namnrymd:",
        "invert": "Invertera val",
        "tooltip-invert": "Markera denna ruta för att dölja ändringar på sidor inom det valda namnrymden (och tillhörande namnrymden om det är markerat)",
+       "tooltip-whatlinkshere-invert": "Markera denna ruta för att dölja länkar från sidor inom vald namnrymd.",
        "namespace_association": "Associerad namnrymd",
        "tooltip-namespace_association": "Markera denna ruta för att även inkludera diskussions- eller ämnesnamnrymden som är associerad med den valda namnrymden",
        "blanknamespace": "(Huvudnamnrymden)",
        "logentry-upload-revert": "$1 {{GENDER:$2|laddade upp}} $3",
        "rightsnone": "(inga)",
        "revdelete-summary": "sammanfattning",
-       "feedback-bugornote": "Om du är redo att beskriva ett tekniskt problem detaljerat, var god [$1 rapporterar en bugg].\nAnnars kan du använda det enkla formuläret nedan. Din kommentar kommer att läggas till på sidan \"[$3 $2]\", tillsammans med ditt användarnamn och vilken webbläsare du använder.",
+       "feedback-bugornote": "Om du har möjlighet att ge en detaljerad teknisk beskrivning av felet kan du göra en [$1 buggrapport]. \nAnvänd annars formuläret nedan. Din kommentar kommer att läggas till på sidan \"[$3 $2]\", tillsammans med ditt användarnamn.",
        "feedback-subject": "Ämne:",
        "feedback-message": "Meddelande:",
        "feedback-cancel": "Avbryt",
index 9136117..dbc1968 100644 (file)
        "deleteprotected": "Ви не можете видалити цю сторінку, тому що вона захищена.",
        "deleting-backlinks-warning": "'''Попередження:'''  [[Special:WhatLinksHere/{{FULLPAGENAME}}|інші сторінки]] посилаються або містять сторінку, яку ви маєте намір видалити.",
        "rollback": "Відкинуто редагування",
-       "rollback_short": "Відкинути",
        "rollbacklink": "відкинути",
        "rollbacklinkcount": "відкинути $1 {{PLURAL:$1|редагування|редагування|редагувань}}",
        "rollbacklinkcount-morethan": "відкинути понад $1 {{PLURAL:$1|редагування|редагування|редагувань}}",
        "revertmove": "відкинути",
        "delete_and_move": "Вилучити і перейменувати",
        "delete_and_move_text": "== Потрібне вилучення ==\nСторінка з назвою [[:$1|«$1»]] вже існує.\nБажаєте вилучити її для можливості перейменування?",
-       "delete_and_move_confirm": "Так, вилучити цю сторінку",
+       "delete_and_move_confirm": "Так, вилучити для перейменування",
        "delete_and_move_reason": "Вилучена для можливості перейменування сторінки «[[$1]]»",
        "selfmove": "Неможливо перейменувати сторінку: поточна й нова назви сторінки співпадають.",
        "immobile-source-namespace": "Не можна перейменовувати сторінки з простору назв «$1»",
        "import-logentry-interwiki": "«$1» — міжвікі імпорт",
        "import-logentry-interwiki-detail": "Імпортовано $1 {{PLURAL:$1|версія|версії|версій}} з $2",
        "javascripttest": "Тестування JavaScript",
-       "javascripttest-title": "Працює  $1  випробувань",
        "javascripttest-pagetext-noframework": "Ця сторінка призначений для тестування JavaScript.",
        "javascripttest-pagetext-unknownframework": "Невідоме середовище тестування \" $1 \".",
        "javascripttest-pagetext-frameworks": "Будь ласка, оберіть одне з наступних середовищ тестування: $1",
        "javascripttest-pagetext-skins": "Виберіть оформлення сторінки запуску тесту:",
        "javascripttest-qunit-intro": "Переглянути [ $1  тестування документації] на mediawiki.org.",
-       "javascripttest-qunit-heading": "Набір тестів MediaWiki JavaScript QUnit",
        "tooltip-pt-userpage": "Ваша сторінка користувача",
        "tooltip-pt-anonuserpage": "Сторінка користувача для вашої IP-адреси",
        "tooltip-pt-mytalk": "Ваша сторінка обговорення",
index ca9b49c..c608578 100644 (file)
        "tog-numberheadings": "سرخیوں کو خودکار نمبر دیجئے",
        "tog-showtoolbar": "تدوینی اوزاردان دکھائیے",
        "tog-editondblclick": "طقین پر صفحات کی ترمیم کیجئے",
-       "tog-editsectiononrightclick": "سطری عنوانات پر دایاں طق کے ذریعے سطری ترمیم کاری فعال بناؤ",
+       "tog-editsectiononrightclick": "سطری عنوانات پر دایاں طق (رائیٹ کلک) کے ذریعے سطری ترمیم کاری فعال بناؤ",
        "tog-watchcreations": "میرے تخلیق کردہ صفحات اور میری زبر اثقال کردہ ملفات کو میری زیر نظر فہرست میں شامل کیا کیجئے",
        "tog-watchdefault": "میرے تدوین شدہ صفحات اور ملفات کو میری زیر نظر فہرست میں شامل کیا کیجئے",
        "tog-watchmoves": "میرے منتقل کردہ صفحات اور ملفات کو میری زیر نظر فہرست میں شامل کیا کیجئے",
        "tog-watchdeletion": "میرے حذف کردہ صفحات اور ملفات کو میری زیر نظر فہرست میں شامل کیا کیجئے",
+       "tog-watchrollback": "میں جن صفحات کو استرجع کروں وہ میری زیر نظر فہرست میں شامل کیا کریں",
        "tog-minordefault": "تمام ترمیمات کو ہمیشہ بطورِ معمولی ترمیم نشانزد کیا کرو",
        "tog-previewontop": "تدوینی خانہ سے پہلے نمائش دکھاؤ",
        "tog-previewonfirst": "پہلی ترمیم پر نمائش دکھاؤ",
@@ -48,7 +49,7 @@
        "tog-shownumberswatching": "دیکھنے والے صارفین کی تعداد دکھاؤ",
        "tog-oldsig": "موجودہ دستخط:",
        "tog-fancysig": "(سادہ دستخط بلا خودکار ربط)",
-       "tog-uselivepreview": "براہ راست نمائش (آزمائشی) استعمال کیجئے",
+       "tog-uselivepreview": "براہ راست نمائش (آزمائشی) استعمال کریں",
        "tog-forceeditsummary": "جب میں ترمیمی خلاصہ خالی چھوڑوں تو مجھے آگاہ کرو",
        "tog-watchlisthideown": "زیرِنظرفہرست سے میری ترمیمات چھپاؤ",
        "tog-watchlisthidebots": "زیرِنظرفہرست میں سے روبالی ترمیمات چھپاؤ",
        "hidden-category-category": "پوشیدہ زمرہ جات",
        "category-subcat-count": "{{PLURAL:$2|اِس زمرہ میں صرف درج ذیل ذیلی زمرہ ہے.|اِس زمرہ میں درج ذیل {{PLURAL:$1|ذیلی زمرہ|$1 ذیلی زمرہ جات}}, کل $2 میں سے.}}",
        "category-subcat-count-limited": "اِس زمرہ میں درج ذیل {{PLURAL:$1|ذیلی زمرہ ہے|$1 ذیلی زمرہ جات ہیں}}.",
-       "category-article-count": "{{PLURAL:$2|اس زمرہ میں صرف یہ درج ذیل صفحہ مشمول ہے۔|اس زمرہ کے کل $2 صفحات میں سے $1 {{PLURAL:$1|صفحہ|صفحات}} درج ذیل {{PLURAL:$1|ہے|ہیں}}۔",
+       "category-article-count": "{{PLURAL:$2|اس زمرہ میں صرف درج ذیل صفحہ شامل کیا گیا ہے۔|اس زمرہ کے کل $2 صفحات میں سے $1 {{PLURAL:$1|صفحہ|صفحات}} درج ذیل {{PLURAL:$1|ہے|ہیں}}۔",
        "category-article-count-limited": "یہ درج ذیل {{PLURAL:$1|صفحہ|$1 صفحات}} اس زمرہ میں مشمول {{PLURAL:$1|ہے|ہیں}}۔",
+       "category-file-count": "{{PLURAL:$2|اس زمرہ میں صرف درج ذیل ملف شامل کی گئی ہے۔|اس زمرہ کی کل $2 ملفات میں سے $1 {{PLURAL:$1|ملف|ملفات}} درج ذیل {{PLURAL:$1|ہے|ہیں}}۔",
        "category-file-count-limited": "یہ درج ذیل {{PLURAL:$1|صفحہ|$1 صفحات}} اس زمرہ میں شامل {{PLURAL:$1|ہے|ہیں}}۔",
        "listingcontinuesabbrev": "۔جاری",
        "index-category": "فہرست شدہ صفحات",
        "deletethispage": "یہ صفحہ حذف کریں",
        "undeletethispage": "یہ صفحہ بحال کریں",
        "undelete_short": "بحال {{PLURAL:$1|ایک ترمیم|$1 ترامیم}}",
+       "viewdeleted_short": "{{PLURAL:$1|ایک ترمیم حذف ہوچکی|$1 ترامیم حذف ہوچکیں}}",
        "protect": "محفوظ",
        "protect_change": "تبدیل کرو",
        "protectthispage": "اس صفحےکومحفوظ کریں",
        "articlepage": "مندرجاتی صفحہ دیکھیۓ",
        "talk": "تبادلہٴ خیال",
        "views": "خیالات",
-       "toolbox": "اÙ\88زارداÙ\86",
+       "toolbox": "Ø¢Ù\84ات",
        "userpage": "صفحۂ صارف دیکھئے",
        "projectpage": "صفحۂ منصوبہ دیکھئے",
        "imagepage": "صفحۂ مسل دیکھئے",
        "otherlanguages": "دیگر زبانوں میں",
        "redirectedfrom": "($1 سے پلٹایا گیا)",
        "redirectpagesub": "لوٹایا گیا صفحہ",
+       "redirectto": "لوٹایا گیا صفحہ:",
        "lastmodifiedat": "آخری بار تدوین $2, $1 کو کی گئی۔",
        "viewcount": "اِس صفحہ تک {{PLURAL:$1|ایک‌بار|$1 مرتبہ}} رسائی کی گئی",
        "protectedpage": "محفوظ شدہ صفحہ",
        "jumptonavigation": "رہنمائی",
        "jumptosearch": "تلاش",
        "view-pool-error": "معذرت کے ساتھ، تمام معیلات پر اِس وقت اِضافی بوجھ ہے.\nبہت زیادہ صارفین اِس وقت یہ صفحہ ملاحظہ کرنے کی کوشش کررہے ہیں.\nبرائے مہربانی! صفحہ دیکھنے کیلئے دوبارہ کوشش کرنے سے پہلے ذرا انتظار فرمالیجئے.\n\n$1",
+       "generic-pool-error": "ہم معذرت خواہ ہیں! معیلات (سرورز) پر اِس وقت اِضافی بوجھ ہے.\nصارفین کی کثیر تعداد اِس وقت یہی صفحہ ملاحظہ کرنے کی کوشش کررہی ہے.\nبرائے مہربانی!دوبارہ کوشش کرنے سے پہلے ذرا انتظار فرمائیے.",
        "pool-errorunknown": "نامعلوم خطا",
+       "poolcounter-usage-error": "استعمال میں خامی: $1",
        "aboutsite": "تعارف {{SITENAME}}",
        "aboutpage": "Project:تعارف",
-       "copyright": "تمام مواد $1 کے تحت میسر ہے۔",
+       "copyright": "تمام مواد $1 کے تحت میسر ہے، جب تک کوئی دوسری وجہ نا ہو۔",
        "copyrightpage": "{{ns:project}}:حقوق تصانیف",
        "currentevents": "حالیہ واقعات",
        "currentevents-url": "Project:حالیہ واقعات",
        "pagetitle-view-mainpage": "{{SITENAME}}",
        "retrievedfrom": "‘‘$1’’ مستعادہ منجانب",
        "youhavenewmessages": "آپکے لیۓ ایک $1 ہے۔ ($2)",
+       "newmessageslinkplural": "{{PLURAL:$1|نیا پیغام|999=نئے پیغاماتs}}",
        "newmessagesdifflinkplural": "آخری {{PLURAL:$1|تبدیلی|تبدیلیاں}}",
        "youhavenewmessagesmulti": "ء$1 پر آپ کیلئے نئے پیغامات ہیں",
        "editsection": "ترمیم",
        "toc": "فہرست",
        "showtoc": "دکھائیں",
        "hidetoc": "چھپائیں",
+       "collapsible-collapse": "خاتمے",
        "collapsible-expand": "توسیع",
+       "confirmable-confirm": "کیا {{GENDER:$1|آپ کو}} اس بات کا یقین ہے؟",
+       "confirmable-yes": "جی ہاں",
+       "confirmable-no": "جی نہیں",
        "thisisdeleted": "دیکھیں یا بحال کریں $1؟",
        "viewdeleted": "دیکھیں $1؟",
        "restorelink": "{{PLURAL:$1|ایک ترمیم حذف ہوچکی|$1 ترامیم حذف ہوچکیں}}",
        "nospecialpagetext": "<strong>آپ نے ایک ناقص خاص صفحہ کی درخواست کی ہے.</strong>\n\n{{درست خاص صفحات کی ایک فہرست [[Special:SpecialPages|{{int:specialpages}}]] پر دیکھی جاسکتی ہے}}.",
        "error": "خطاء",
        "databaseerror": "خطائے ڈیٹابیس",
+       "databaseerror-text": "ڈیٹا بیس کیوری میں خامی پیدا ہوگئی ہے.\nیہ سافٹ ویئر میں ایک مسئلے (بگ) کی نشاندہی کر سکتے ہیں.",
+       "databaseerror-textcl": "ڈیٹا بیس کیوری میں خامی پیدا ہوگئی ہے.",
+       "databaseerror-query": "کیوری: $1",
+       "databaseerror-function": "فنکشن: $ 1",
+       "databaseerror-error": "خرابی: $ 1",
        "laggedslavemode": "انتباہ: ممکن ہے کہ صفحہ میں حالیہ بتاریخہ جات شامل نہ ہوں.\n\nWarning: Page may not contain recent updates.",
        "readonly": "ڈیٹابیس مقفل ہے",
        "enterlockreason": "قفل کیلئے کوئی وجہ درج کیجئے، بشمولِ تخمینہ کہ قفل کب کھولا جائے گا.",
        "readonlytext": "ڈیٹابیس  شاید معمول کی اصلاح کیلئے نئے اندراجات اور دوسری ترمیمات کیلئے مقفل ہے، جس کے بعد یہ عام حالت پر آجائے گا.\nمنتظم، جس نے قفل لگایا، یہ تفصیل فراہم کی ہے: $1",
        "missing-article": "ڈیٹابیس نے کسی صفحے کا متن بنام \"$1\" $2  نہیں پایا جو اِسے پانا چاہئے تھا.\n\nیہ عموماً کسی صفحے کے تاریخی یا پرانے حذف شدہ ربط کی وجہ سے ہوسکتا ہے.\n\nاگر یہ وجہ نہیں، تو آپ نے مصنع‌لطیف میں کھٹمل پایا ہے.\nبرائے مہربانی، URL کی نشاندہی کرتے ہوئے کسی [[Special:ListUsers/sysop|منتظم]] کو اِس کا سندیس کیجئے.",
        "missingarticle-rev": "(نظرثانی#: $1)",
+       "missingarticle-diff": "(فرق: $1، $2)",
        "readonly_lag": "ڈیٹابیس خودکار طور پر مقفل ہوچکا ہے تاکہ ماتحت ڈیٹابیسی معیلات کا درجہ آقا کا ہوجائے.",
        "internalerror": "خطائے اندرونی",
        "internalerror_info": "خطائے اندرونی: $1",
        "filerenameerror": "مسل \"$1\" کو \"$2\" میں بازنام نہیں کیا جاسکا.",
        "filedeleteerror": "مسل \"$1\" کو حذف نہیں کیا جاسکا.",
        "directorycreateerror": "رہنامچہ \"$1\" تخلیق نہیں کیا جاسکا.",
+       "directoryreadonlyerror": "ڈائریکٹری \"$1\" صرف پڑھنے کے لیے.",
+       "directorynotreadableerror": "ڈائریکٹری \"$1\" پڑھنے کے قابل نہیں.",
        "filenotfound": "مسل \"$1\" ڈھونڈا نہ جاسکا.",
        "unexpected": "غیرمتوقع قدر: \"$1\"=\"$2\"",
        "formerror": "خطا: ورقہ بھیجا نہ جاسکا.",
        "cannotdelete-title": "صفحہ ھذف نہیں کیا جا سکتا \"$1\"",
        "badtitle": "خراب عنوان",
        "badtitletext": "درخواست شدہ صفحہ کا عنوان ناقص، خالی، یا کوئی غلط ربط شدہ بین لسانی یا بین ویکی عنوان ہے.\nشاید اِس میں ایک یا زیادہ ایسے حروف موجود ہوں جو عنوانات میں استعمال نہیں ہوسکتے.",
-       "perfcached": "ذیلی ڈیٹا ابطن شدہ ہے اور اِس کے پُرانے ہونے کا امکان ہے. A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.",
-       "perfcachedts": "ذیلی ڈیٹا ابطن شدہ ہے اور آخری بار اِس کی بتاریخیت $1 کو ہوئی. A maximum of {{PLURAL:$4|one result is|$4 results are}} available in the cache.",
+       "perfcached": "ذیلی ڈیٹا ابطن شدہ (cached) ہے اور اِس کے پُرانے ہونے کا امکان ہے. A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.",
+       "perfcachedts": "ذیلی ڈیٹا ابطن شدہ ہے (cached) اور آخری بار اِس کی بتاریخیت $1 کو ہوئی. A maximum of {{PLURAL:$4|one result is|$4 results are}} available in the cache.",
        "querypage-no-updates": "اِس صفحہ کیلئے بتاریخات فی الحال ناقابل بنائی گئی ہیں.\nیہاں کا ڈیٹا ابھی تازہ نہیں کیا جائے گا.",
        "viewsource": "مسودہ",
+       "actionthrottled": "Action throttled",
        "actionthrottledtext": "بطورِ ایک ضدسپم تدبیر، آپ کو مختصر وقت میں کئی بار یہ عمل بجا لانے سے محدود کیا گیا، اور آپ یہ حد پار کرچکے ہیں.\nبراہِ کرم، کچھ منٹ بعد کوشش کیجئے.",
        "protectedpagetext": "اس صفحہ کو تدوین سے محفوظ رکھنے کیلیے مقفل کر دیا گیا ہے۔",
        "viewsourcetext": "آپ صرف مسودہ دیکھ سکتے ہیں اور اسکی نقل اتار سکتے ہیں:",
-       "protectedinterface": "یہ صفحہ مصنع‌لطیف کیلئے سطح‌البینی متن فراہم کرتا ہے، اور ناجائزاستعمال کے سدِباب کیلئے اِسے مقفل کیا گیا ہے.",
-       "editinginterface": "'''انتباہ: ''' آپ ایک ایسا صفحہ تدوین کر رہے ہیں جو مصنع‌لطیف کیلئے سطح‌البینی متن فراہم کرتا ہے۔ اس صفحہ میں کی جانے والی ترمیم، دیگر صارفین کیلئے سطح‌البین کو تبدیل کردے گی۔\nبراہِ کرم، ترجمہ کیلئے [//translatewiki.net/wiki/Main_Page?setlang=en '''ٹرانسلیٹ ویکی.نیٹ'''] (میڈیاویکی مقامیانی منصوبہ) استعمال کیجئے.",
+       "viewyourtext": "آپ اس مواد کو دیکھ سکتے ہیں اور اٹھا (کاپی) سکتے ہیں <strong>آپ کی ترامیم </strong>اس صفحہ پر:",
+       "protectedinterface": "یہ صفحہ سوفٹ وئیر کے لیے انٹرفیس متن فراہم کرتا ہے، اور ناجائزاستعمال کے سدِباب کے لیے اِسے مقفل کیا گیا ہے.",
+       "editinginterface": "'''انتباہ: ''' آپ ایک ایسا صفحہ تدوین کر رہے ہیں جو سوفٹ ویئر کیلئے انٹرفیس متن فراہم کرتا ہے۔ اس صفحہ میں کی جانے والی ترمیم، دیگر صارفین کے لیے انٹرفیس کو تبدیل کردے گی۔\nبراہِ کرم، ترجمہ کے لیے [//translatewiki.net/wiki/Main_Page?setlang=en '''ٹرانسلیٹ ویکی.نیٹ'''] (میڈیا ویکی دارالترجمہ) استعمال کریں.",
+       "translateinterface": "تمام ویکیوں میں تبدیلی یا شامل کرنے کے لیے، اسے استعمال کریں [//translatewiki.net/ translatewiki.net]، میڈیا ویکی دارالترجمہ.",
        "namespaceprotected": "آپ کو '''$1''' فضائے نام میں صفحات تدوین کرنے کی اِجازت نہیں ہے.",
+       "mycustomcssprotected": "آپ اس سی ایس ایس (CSS) صفحہ میں ترمیم کرنے کا اختیار نہیں رکھتے۔",
+       "mycustomjsprotected": "آپ اس جاوا اسکپرٹ (JavaScript) صفحہ میں ترمیم کرنے کا اختیار نہیں رکھتے۔",
+       "myprivateinfoprotected": "آپ ان ذاتی معلوات (private information) میں ترمیم کرنے کا اختیار نہیں رکھتے۔",
+       "mypreferencesprotected": "آپ اپنی ان ترجیحات (preferences) میں ترمیم کرنے کا اختیار نہیں رکھتے۔",
        "ns-specialprotected": "خاص صفحات کی تدوین نہیں کی جاسکتی.",
        "titleprotected": "اس عنوان کو [[User:$1|$1]] نے تخلیق سے محفوظ کیا ہے.\nوجہ یہ بتائی گئی ہے: \"''$2''\"",
        "exception-nologin": "غیر داخل نوشتہ",
        "deleteotherreason": "دوسری/اِضافی وجہ:",
        "deletereasonotherlist": "دوسری وجہ",
        "rollback": "ترمیمات سابقہ حالت پرواپس",
-       "rollback_short": "واپس سابقہ حالت",
        "rollbacklink": "واپس سابقہ حالت",
        "rollbackfailed": "سابقہ حالت پر واپسی ناکام",
        "cantrollback": "تدوین ثانی کا اعادہ نہیں کیا جاسکتا؛ کیونکہ اس میں آخری بار حصہ لینے والا ہی اس صفحہ کا واحد کاتب ہے۔",
index 5fee5e9..3042aec 100644 (file)
@@ -26,7 +26,8 @@
                        "לערי ריינהארט",
                        "아라",
                        "Tranquanganh",
-                       "Max20091"
+                       "Max20091",
+                       "Dinhxuanduyet"
                ]
        },
        "tog-underline": "Gạch chân liên kết:",
        "uploaderror": "Lỗi khi tải lên",
        "upload-recreate-warning": "'''Cảnh báo: Một tập tin với tên này đã từng bị xóa hoặc di chuyển.'''\n\nNhật trình xóa và di chuyển của trang này được ghi ở dưới để bạn tiện theo dõi:",
        "uploadtext": "Hãy sử dụng mẫu sau để tải tập tin lên.\nĐể xem hoặc tìm kiếm những hình ảnh đã được tải lên trước đây, xin mời xem [[Special:FileList|danh sách các tập tin đã tải lên]].\nviệc tải lên và tải lên lại được ghi lại trong [[Special:Log/upload|nhật trình tải lên]], việc xóa đi được ghi trong [[Special:Log/delete|nhật trình xóa]].\n\nĐể đưa tập tin vào trang, hãy dùng liên kết có một trong các dạng sau:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Tập tin.jpg]]</nowiki></code>''' để phiên bản đầy đủ của tập tin\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Tập tin.png|200px|nhỏ|trái|văn bản thay thế]]</nowiki></code>''' để dùng hình đã được co lại còn 200 điểm ảnh chiều rộng đặt trong một hộp ở lề bên trái với 'văn bản thay thế' dùng để mô tả\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Tập tin.ogg]]</nowiki></code>''' để liên kết trực tiếp đến tập tin mà không hiển thị nó",
-       "upload-permitted": "Các định dạng tập tin được phép tải lên: $1.",
-       "upload-preferred": "Các định dạng tập tin nên dùng: $1.",
-       "upload-prohibited": "Các định dạng tập tin bị cấm: $1.",
+       "upload-permitted": "{{PLURAL:$2|Định dạng|Các định dạng}} tập tin được phép tải lên: $1.",
+       "upload-preferred": "{{PLURAL:$1|Định dạng|Các định dạng}} tập tin nên dùng: $1.",
+       "upload-prohibited": "{{PLURAL:$2|Định dạng|Các định dạng}} tập tin bị cấm: $1.",
        "uploadlogpage": "Nhật trình tải lên",
        "uploadlogpagetext": "Dưới đây là danh sách các tập tin đã tải lên gần nhất.\nXem [[Special:NewFiles|trang trưng bày các tập tin mới]] để xem trực quan hơn.",
        "filename": "Tên tập tin",
        "deleteprotected": "Bạn không thể xóa trang này vì nó đã được khóa lại.",
        "deleting-backlinks-warning": "'''Cảnh báo:''' Có [[Special:WhatLinksHere/{{FULLPAGENAME}}|trang khác]] liên kết đến hoặc nhúng trang mà bạn sắp xóa.",
        "rollback": "Lùi tất cả sửa đổi",
-       "rollback_short": "Lùi tất cả",
        "rollbacklink": "lùi tất cả",
        "rollbacklinkcount": "lùi tất cả $1 sửa đổi",
        "rollbacklinkcount-morethan": "lùi tất cả hơn $1 sửa đổi",
        "namespace": "Không gian tên:",
        "invert": "Đảo ngược lựa chọn",
        "tooltip-invert": "Ẩn các thay đổi trong các không gian tên được chọn và tương ứng",
+       "tooltip-whatlinkshere-invert": "Đánh dấu hộp kiểm này để ẩn các liên kết từ các trang nằm trong không gian tên đã chọn.",
        "namespace_association": "Không gian tên cùng đôi",
        "tooltip-namespace_association": "Cũng ẩn không gian tên thảo luận hoặc nội dung ứng với không gian được chọn",
        "blanknamespace": "(Chính)",
        "import-logentry-interwiki": "đã nhập vào $1 từ wiki khác",
        "import-logentry-interwiki-detail": "Đã nhập $1 phiên bản từ $2",
        "javascripttest": "Kiểm thử JavaScript",
-       "javascripttest-title": "Đang chạy $1 ca kiểm thử",
        "javascripttest-pagetext-noframework": "Trang này dành cho việc chạy các ca kiểm thử JavaScript.",
        "javascripttest-pagetext-unknownframework": "Nền tảng kiểm thử không rõ “$1”.",
+       "javascripttest-pagetext-unknownaction": "Tác vụ không rõ “$1”.",
        "javascripttest-pagetext-frameworks": "Hãy chọn một trong những nền tảng kiểm thử sau: $1",
        "javascripttest-pagetext-skins": "Hãy chọn giao diện để sử dụng với các ca kiểm thử:",
        "javascripttest-qunit-intro": "Xem [$1 tài liệu kiểm thử] tại mediawiki.org.",
-       "javascripttest-qunit-heading": "Tập kiểm thử QUnit JavaScript MediaWiki",
        "tooltip-pt-userpage": "Trang cá nhân của tôi",
        "tooltip-pt-anonuserpage": "Trang của IP bạn đang dùng",
        "tooltip-pt-mytalk": "Thảo luận với tôi",
        "version-entrypoints-header-url": "URL",
        "version-entrypoints-articlepath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgArticlePath?uselang=vi Đường dẫn bài]",
        "version-entrypoints-scriptpath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgScriptPath?uselang=vi Đường dẫn kịch bản]",
+       "version-libraries": "Các thư viện đã cài đặt",
+       "version-libraries-library": "Thư viện",
+       "version-libraries-version": "Phiên bản",
        "redirect": "Đổi hướng đến tập tin, người dùng, trang, hoặc số phiên bản",
        "redirect-legend": "Đổi hướng đến tập tin hoặc trang",
        "redirect-summary": "Trang đặc biệt này đổi hướng đến một tập tin (theo tên tập tin được cho vào), trang (theo số phiên bản hoặc số trang được cho vào), hoặc trang cá nhân (theo số thành viên). Cách sử dụng: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], hoặc [[{{#Special:Redirect}}/user/101]].",
        "dberr-problems": "Xin lỗi! Trang này đang gặp phải những khó khăn về kỹ thuật.",
        "dberr-again": "Xin thử đợi vài phút rồi tải lại trang.",
        "dberr-info": "(Không thể liên lạc với máy chủ cơ sở dữ liệu: $1)",
-       "dberr-info-hidden": "(Không thể liên lạc với máy chủ cơ sở dữ liệu)",
+       "dberr-info-hidden": "(Không thể liên lạc với cơ sở dữ liệu)",
        "dberr-usegoogle": "Bạn có thể thử tìm trên Google trong khi chờ đợi.",
        "dberr-outofdate": "Chú ý rằng các chỉ mục của Google có thể đã lỗi thời.",
        "dberr-cachederror": "Sau đây là bản sao được lưu bộ đệm của trang bạn muốn xem, và có thể đã lỗi thời.",
index 72ea504..e4c02cf 100644 (file)
@@ -25,6 +25,7 @@
        "tog-watchdefault": "Panõq perräkaemisnimekirjä muq muudõduq leheq ja teedüstüq",
        "tog-watchmoves": "Panõq muq ümbrenõstõduq leheq ja teedüstüq muq perräkaemisnimekirjä",
        "tog-watchdeletion": "Panõq mu kistutõduq leheküleq mu perräkaemisnimekirjä",
+       "tog-watchrollback": "Panõq perräkaemisnimekirjä mano leheq, kon ma olõ uma muutmisõ tagasi võtnuq.",
        "tog-minordefault": "Märgiq kõik parandusõq vaikimiisi väikeisis paranduisis",
        "tog-previewontop": "Näütäq proovikaehust inne, mitte perän toimõnduskasti",
        "tog-previewonfirst": "Näütäq edimädse toimõndusõ aigo proovikaehust",
@@ -35,7 +36,7 @@
        "tog-shownumberswatching": "Näütäq, ku pall'o pruukjit taa lehe perrä kaes",
        "tog-oldsig": "Parhillanõ alakirotus:",
        "tog-fancysig": "Pruugiq vikiteksti moodulist alakirotust (ilma automaatsõ lingildä)",
-       "tog-uselivepreview": "Pruugiq õkvakipõkaehust (proomivõimalus)",
+       "tog-uselivepreview": "Pruugiq õkvakipõkaehust",
        "tog-forceeditsummary": "Annaq teedäq, ku olõ-i kirotõt kokkovõtõt",
        "tog-watchlisthideown": "Näüdäku-i perräkaemisnimekirän mu hindä toimõnduisi",
        "tog-watchlisthidebots": "Näüdäku-i perräkaemisnimekirän robotidõ toimõnduisi",
        "permalink": "Püsülink",
        "print": "Trüküq vällä",
        "view": "Näütäq",
+       "view-foreign": "Kaeq $1 pääl",
        "edit": "Toimõndaq",
+       "edit-local": "Toimõndaq paigapäälist seletüst",
        "create": "Luuq leht",
+       "create-local": "Luuq paigapääline seletüs",
        "editthispage": "Toimõndaq seod artiklit",
        "create-this-page": "Luuq seo leht",
        "delete": "Kistudaq ärq",
        "otherlanguages": "Tõisin keelin",
        "redirectedfrom": "(Ümbre saadõt artiklist $1)",
        "redirectpagesub": "Ümbresaatmislehekülg",
+       "redirectto": "Ümbre saadõt lehele:",
        "lastmodifiedat": "Seo leht om viimäte muudõt $2, $1.",
        "viewcount": "Seo lehe pääl om käüt $1 {{PLURAL:$1|kõrd|kõrda}}.",
        "protectedpage": "Kaidsõt artikli",
        "jumptonavigation": "juhtminõ",
        "jumptosearch": "otsminõ",
        "view-pool-error": "Serveriq ommaq parhilla üle koormaduq.\nPall'o hulga pruukjit pruuv kõrraga seod lehte kaiaq.\nOlõq hää, oodaq vähäkese inne ku vahtsõst proomit.\n\n$1",
+       "generic-pool-error": "Serveriq ommaq parhilla üle koormaduq.\nPall'o hulga pruukjit pruuv kõrraga seod lehte kaiaq.\nOlõq hää, oodaq vähäkese inne ku vahtsõst proomit.",
        "pool-timeout": "Kinniqpidämise uutmisaig om läbi",
        "pool-queuefull": "Kinniqpandmiisi järekõrd om täüs",
        "pool-errorunknown": "Tiidmäldä hädä",
+       "pool-servererror": "Pool counter-teenüst saa-ai pruukiq ($1).",
+       "poolcounter-usage-error": "Pruukmisviga: $1",
        "aboutsite": "{{SITENAME}} tutvustus",
        "aboutpage": "Project:Pääteedüs",
        "copyright": "Teksti või vabalt pruukiq litsendsi $1 perrä, ku olõ-õi tõisildõ üteld.",
        "ok": "Hää külh",
        "retrievedfrom": "Vällä otsit teedüskogost \"$1\"",
        "youhavenewmessages": "Sul om $1 ($2).",
-       "youhavenewmessagesfromusers": "Sullõ om $1 {{PLURAL:$3|ütelt|$3}} pruukjalt ($2).",
+       "youhavenewmessagesfromusers": "{{PLURAL:$4|Sullõ om}} $1 {{PLURAL:$3|ütelt|$3 pruukjalt}} ($2).",
        "youhavenewmessagesmanyusers": "Sullõ om $1 pall'odõlt pruukjilt ($2).",
        "newmessageslinkplural": "{{PLURAL:$1|vahtsõnõ sõnnom|999=vahtsit sõnomit}}",
        "newmessagesdifflinkplural": "{{PLURAL:$1|viimäne muutminõ|999=viimädseq muutmisõq}}",
        "hidetoc": "käkiq",
        "collapsible-collapse": "Käkiq ärq",
        "collapsible-expand": "Näütäq",
+       "confirmable-confirm": "Kas {{GENDER:$1|olõt}} kimmäs?",
+       "confirmable-yes": "Jah",
+       "confirmable-no": "Ei",
        "thisisdeleted": "Kaeq vai tiiq tagasi $1?",
        "viewdeleted": "Näüdädäq $1?",
        "restorelink": "{{PLURAL:$1|üts kistutõt muutminõ|$1 kustutõdut muutmist}}",
        "filerenameerror": "Es saaq teedüstüt \"$1\" teedüstüs \"$2\" ümbre nimetäq.",
        "filedeleteerror": "Teedüstüt nimega \"$1\" saa-i ärq kistutaq.",
        "directorycreateerror": "Saa-s luvvaq kausta \"$1\".",
+       "directoryreadonlyerror": "Kataloog \"$1\" om kirotuskaidsõt.",
+       "directorynotreadableerror": "Kataloog \"$1\" olõ-õi loetav.",
        "filenotfound": "Lövvä es teedüstüt \"$1\".",
        "unexpected": "Uutmaldaq väärtüs: \"$1\"=\"$2\".",
        "formerror": "Viga: vormi saa es pästäq",
        "viewsourcetext": "Võit kaiaq ja kopidaq taa lehe lättekoodi:",
        "viewyourtext": "Saat kaiaq ja kopidaq noidõ muutmiisi lätteteksti, miä sa seo lehe pääle '''esiq''' tennüq olõt:",
        "protectedinterface": "Taa lehe pääl om tarkvara pruukjapalgõ tekst. Leht om lukku pant, et taad saasi-i ärq ts'urkiq. \nKu tahat tetäq ümbrepandmiisi (midä pruukvaq kõik vikiq) pruugiq tuus MediaWiki ümbrepandmisõ tüükeskkunda [//translatewiki.net/ translatewiki.net].",
-       "editinginterface": "'''Hoiatus:''' Sa toimõndat tarkvara pruukjapalgõ tekstiga lehte. Ku siin midä muudat, mõotas tuu pruukjapalõt. Ümbrepandmisõs tasos pruukiq MediaWiki ümbrepandmisõ tüükeskkunda [//translatewiki.net/ translatewiki.net].",
+       "editinginterface": "<strong>Hoiatus:</strong> Sa toimõndat tarkvara pruukjapalgõ tekstiga lehte. \nKu siin midä muudat, mõotas tuu pruukjapalõt.",
+       "translateinterface": "Et tetäq vai muutaq ümbrepandmiisi ütskõik määntse viki jaos, pruugiq MediaWiki ümbrepandmiskeskkunda [//translatewiki.net/ translatewiki.net].",
        "cascadeprotected": "Taa leht om kirotuskaidsõt, selle et taa {{PLURAL:$1|kuulus alanolõvidõ kaidsõtuidõ lehti hulka|kuulus alanolõvidõ kaidsõtuidõ lehti hulka}}:\n$2",
        "namespaceprotected": "Sul olõ-i lubat toimõndaq nimeruumi '''$1''' lehti.",
+       "myprivateinfoprotected": "Sul olõ-õi lubat ummi eräandmit muutaq.",
+       "mypreferencesprotected": "Sul olõ-õi lubat ummi säädmiisi muutaq.",
        "ns-specialprotected": "Tallituslehekülgi ei saaq toimõndaq.",
        "titleprotected": "Pruukja [[User:$1|$1]] om sääntse nimega lehe luumisõ ärq kiildnüq põhjusõga: ''$2''.",
+       "exception-nologin": "Olõ-i nimega sisse mint",
+       "exception-nologin-text": "Seo lehe vai tegemise mano päsemises piät nomega sisse minemä.",
+       "exception-nologin-text-manual": "Seolõ lehele vai tegemisele mano päsemises piät $1.",
        "virus-badscanner": "Viga säädmiisin: tundmalda viirusõkaidsõq: ''$1''",
        "virus-scanfailed": "viirusõotsminõ lää-s kõrda (viakuud $1)",
        "virus-unknownscanner": "tundmalda viirusõkaidsõq:",
-       "logouttext": "'''Olõt nime alt vällä lännüq.'''\n\nVõit {{SITENAME}}t ilma nimeldä edesi toimõndaq vai <span class='plainlinks'>[$1 vahtsõst sama vai tõõsõ nimega sisse minnäq]</span>.\nTähelepandmisõs: niikavva, ku sa olõ-i tühäs tennüq uma võrgokaeja vaihõmällo, võivaq mõnõq leheküleq iks viil näüdädäq, nigu sa olõsi nimega seen.",
+       "logouttext": "'''Olõt nime alt vällä lännüq.'''\n\nTähelepandmisõs: niikavva, ku sa olõ-i tühäs tennüq uma võrgokaeja vaihõmällo, võivaq mõnõq leheküleq iks viil näüdädäq, nigu sa olõsi nimega seen.",
+       "welcomeuser": "Olõq terveq tulõma, $1!",
+       "welcomecreation-msg": "Suq pruukjakonto om valmis.\nKu tahat, saat muutaq ummi {{SITENAME}} [[Special:Preferences|säädmiisi]].",
        "yourname": "Pruukjanimi",
+       "userlogin-yourname": "Pruukjanimi",
+       "userlogin-yourname-ph": "Kirodaq uma pruukjanimi",
+       "createacct-another-username-ph": "Kirodaq pruukjanimi",
        "yourpassword": "Salasõna",
+       "userlogin-yourpassword": "Salasõna",
+       "userlogin-yourpassword-ph": "Kirodaq uma salasõna",
+       "createacct-yourpassword-ph": "Kirodaq salasõna",
        "yourpasswordagain": "Kirodaq viilkõrd salasõna",
+       "createacct-yourpasswordagain": "Kinnüdäq uma salasõna",
+       "createacct-yourpasswordagain-ph": "Kirodaq salasõna vahtsõst",
        "remembermypassword": "Jätäq salasõna miilde (kooniq $1 {{PLURAL:$1|pääväs|pääväs}})",
+       "userlogin-remembermypassword": "Jääq uma nimega sisse",
+       "userlogin-signwithsecure": "Pruugiq kaidsõtut võrgoütistüst",
        "yourdomainname": "Võrgonimi",
+       "password-change-forbidden": "Seon vikin saa-ai salasõnno muutaq.",
        "externaldberror": "Välitsen kimmästegemisteedüskogon om viga vai olõ-i sul lubat umma pruukjanimme muutaq.",
        "login": "Nimega sisseminek",
        "nav-login-createaccount": "Mineq nimega sisse",
        "logout": "Nime alt välläminek",
        "userlogout": "Mineq nime alt vällä",
        "notloggedin": "Olõ-i nimega sisse mint",
+       "userlogin-noaccount": "Sul olõ-i viil pruukjanimme?",
+       "userlogin-joinproject": "Nakkaq {{SITENAME}} pruukjas!",
        "nologin": "Sul olõ-i viil pruukjanimme? '''$1'''.",
        "nologinlink": "Tiiq hindäle pruukjanimi",
        "createaccount": "Tiiq pruukjanimi ärq",
        "gotaccount": "Ku sul jo om uma pruukjanimi, sis '''$1'''.",
        "gotaccountlink": "võit nimega sisse minnäq",
        "userlogin-resetlink": "Kas olõt uma salasõna ärq unõhtanuq?",
-       "createaccountmail": "e-postiga",
+       "userlogin-resetpassword-link": "Kas salasõna läts' meelest ärq?",
+       "userlogin-helplink2": "Nimega sisseminemise abi",
+       "userlogin-createanother": "Luuq tõõnõ konto",
+       "createacct-emailrequired": "E-postiaadrõs",
+       "createacct-emailoptional": "E-postiaadrõs (või ka kirotamalda jättäq)",
+       "createacct-email-ph": "Kirodaq uma e-postiaadrõss",
+       "createacct-another-email-ph": "Kirodaq e-postiaadrõss",
+       "createaccountmail": "Pruugiq aotlist johuslist salasõnna ja saadaq tuu annõdu aadrõsi pääle",
+       "createacct-realname": "Peris nimi (või ka kirotamalda jättäq)",
        "createaccountreason": "Põhjus:",
+       "createacct-reason": "Põhjus",
+       "createacct-reason-ph": "Mille tahat luvvaq tõõsõ pruukjakonto?",
+       "createacct-captcha": "Kaitsõkontroll",
+       "createacct-imgcaptcha-ph": "Kirodaq seo tekst, midä tan näet",
+       "createacct-submit": "Luuq konto",
+       "createacct-another-submit": "Luuq tõõnõ konto",
+       "createacct-benefit-heading": "{{SITENAME}} um luud sääntsilsamol inemiisil, nigu saq.",
+       "createacct-benefit-body1": "{{PLURAL:$1|muutminõ|muutmist}}",
+       "createacct-benefit-body2": "{{PLURAL:$1|lehekülg|lehekülge}}",
+       "createacct-benefit-body3": "{{PLURAL:$1|ildaaigo toimõndanuq pruukja|ildaaigo toimõndanut pruukjat}}",
        "badretype": "Kirotõduq salasõnaq ei klapiq kokko.",
        "userexists": "Taad pruukjanimme jo pruugitas.\nValiq tõõnõ nimi.",
        "loginerror": "Sisseminemise viga",
+       "createacct-error": "Pruukjanome luumisõ viga",
        "createaccounterror": "Pruukjanime luuminõ lää-äs kõrda: $1",
        "nocookiesnew": "Pruukjakonto om valmis, a sa päse-s sisse, selle et {{SITENAME}} tarvitas pruukjidõ kimmästegemises valmistuisi. Suq võrgokaejan ommaq valmistusõq ärq keeledüq. Säeq valmistusõq lubatus ja mineq sis uma vahtsõ pruukjanime ja salasõnaga sisse.",
        "nocookieslogin": "{{SITENAME}} tarvitas pruukjidõ kimmästegemises valmistuisi. Suq võrgokaejan ommaq valmistusõq keeledüq. Säeq valmistusõq lubatus ja prooviq vahtsõst.",
+       "nocookiesfornew": "Pruukjanimme saa-as luvvaq, miiq saa-as kinnütüst tuu lätte kotsilõ.\nKaeq üle, kas sul ummaq lisaprogrammiq (cookie'q) lubaduq ja laadiq seo leht vahtsõst.",
        "noname": "Võlssi kirotõt pruukjanimi.",
        "loginsuccesstitle": "Sisseminek läts' kõrda",
        "loginsuccess": "Olõt nimega sisse lännüq. Suq pruukjanimi om \"$1\".",
        "nosuchuser": "\"$1\" nimelist pruukjat olõ-i olõman.\nKaeq kiräpilt üle vai [[Special:UserLogin/signup|luuq vahtsõnõ pruukjanimi]].",
        "nosuchusershort": "\"$1\" nimelist pruukjat olõ-i olõman. Kas kirotit iks nime õigõhe?",
        "nouserspecified": "Olõ-i kirotõt pruukjanimme.",
+       "login-userblocked": "Seo pruukja om kinniq peet. Nimega sisseminemine olõ-õi lubat.",
        "wrongpassword": "Kirotõt võlss salasõna. Prooviq vahtsõst.",
        "wrongpasswordempty": "Salasõna tohe-i tühi ollaq.",
-       "passwordtooshort": "Salasõna om viganõ vai pall'o lühkü. Taan piät olõma vähämbält {{PLURAL:$1|1 märk|$1 märki}} ja taa tohe-i ollaq sama, miä su pruukjanimi.",
+       "passwordtooshort": "Salasõna piät olõma vähämbält {{PLURAL:$1|1 märk|$1 märki}} pikk.",
+       "password-name-match": "Salasõna piät olõma midägi muud ku pruukjanimi..",
+       "password-login-forbidden": "Seo pruukjanime ja salasõna tarvitaminõ om keelet.",
        "mailmypassword": "Vahtsõndaq umma salasõnna",
        "passwordremindertitle": "{{SITENAME}} salasõna miildetulõtus",
        "passwordremindertext": "Kiäki (arvadaq saq esiq, puutri võrgonummõr $1),\npallõl' vahtsõt sisseminegi salasõnna {{SITENAME}} ($4) jaos.\nPruukja \"$2\" salasõna om noq \"$3\". Ku olõt nimega sisse lännüq, võit taa aotlidsõ salasõna ärq muutaq.\nAotlinõ salasõna lätt vanas {{PLURAL:$5|üte päävä|$5 päävä}} peräst.\n\nKu taa pallõmisõ om tennüq kiä tõõnõ vai ku olõt uma salasõna miilde tulõtanuq ja taha-i taad inämb muutaq,\nsis teku-i seost sõnomist vällä ja pruugiq umma vanna salasõnna edesi.",
        "noemail": "Kah'os olõ-i meil pruukja \"$1\" e-postiaadrõssit.",
+       "noemailcreate": "Pead kirotama kõrraligu e-postiaadrõsi",
        "passwordsent": "Vahtsõnõ salasõna om saadõt pruukja \"$1\" kirotõdu e-postiaadrõsi pääle. Ku olõt salasõna kätte saanuq, mineq nimega sisse.",
        "blocked-mailpassword": "Su võrgonumbrilõ om pant pääle toimõndamiskiild, miä lasõ-i salasõnna miilde tulõtaq.",
-       "eauthentsent": "Sullõ om saadõt kinnütüskiri. Muid kirjo saadõta-i inne, ku olõt tennüq nii, kuis kirän opat ja kinnütänüq, et taa om suq e-postiaadrõs.",
+       "eauthentsent": "Sullõ om saadõt kinnütüskiri. \nMuid kirjo saadõta-i inne, ku olõt tennüq nii, kuis kirän opat ja kinnütänüq, et taa om suq e-postiaadrõs.",
        "throttled-mailpassword": "{{PLURAL:$1|tunni|$1 tunni}} seen om saadõt salasõna miildetulõtus. Sääntsit miildetulõtuisi saadõtas õnnõ {{PLURAL:$1|tunni|$1 tunni}} takast.",
        "mailerror": "Kirä saatmisõ viga: $1",
        "acct_creation_throttle_hit": "Sa olõt tennüq jo {{PLURAL:$1|1 pruukjanime|$1 pruukjanimme}}. Rohkõmb ei saaq.",
        "emailauthenticated": "Su e-postiaadrõs kinnütedi ärq $2 kell $3.",
-       "emailnotauthenticated": "Su e-postiaadrõssit olõ-i viil kinnütet. Alanolõvi as'on e-kirjo ei saadõtaq.",
+       "emailnotauthenticated": "Su e-postiaadrõssit olõ-i viil kinnütet. \nAlanolõvidõ asjo kotsilõ sullõ e-kirjo ei saadõdaq.",
        "noemailprefs": "Olõ-i ant e-postiaadrõssit.",
        "emailconfirmlink": "Kinnüdäq uma e-postiaadrõs.",
        "invalidemailaddress": "Olõ-i kõrralik e-postiaadrõs, taa om võlss moodun.\nKirodaq õigõ e-postiaadrõs vai jätäq rivi rühäs.",
+       "cannotchangeemail": "Seon vikin saa-ai konto e-postiaadressit muutaq.",
+       "emaildisabled": "Seo võrgokotusõ kaudu saa-ai e-kirjo saataq.",
        "accountcreated": "Pruukjanimi luudi",
-       "accountcreatedtext": "Luudi pruukjanimi pruukjalõ $1.",
+       "accountcreatedtext": "Pruukja [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|talk]]) konto om luud.",
        "createaccount-title": "Vahtsõ {{SITENAME}} pruukjanime luuminõ",
        "createaccount-text": "Kiäki om loonuq pruukjanime $2 lehistüle {{SITENAME}} ($4). Pruukjanime \"$2\" salasõna om \"$3\".\nMineq nimega sisse ja vaihtaq salasõna ärq.\n\nKu taa pruukjanimi om luud kogõmaldaq, olõ-i sul vaia taast sõnomist vällä tetäq.",
-       "login-throttled": "Olõt uma nime ala minekis pruuvnuq pall'o hulga esiqsugutsit salasõnno.\nOodaq vähä inne ku proovit vahtsõst.",
+       "login-throttled": "Olõt pall'o hulga kõrdo pruuvnuq uma nimega sisse minnäq.\nOodaq $1 inne ku proovit vahtsõst.",
+       "login-abort-generic": "Nimega sisseminek lää-äs kõrda – katski jätet",
+       "login-migrated-generic": "Su konto om ärq viid ja su pruukjanimme olõ-õi inämb seon vikin.",
        "loginlanguagelabel": "Kiil: $1",
+       "createacct-another-realname-tip": "Sa piä-äi umma peris nimme kirotama.\nKu otsustat tuu kirotaq, näüdätäs tuud pruukjanime asõmal lehe tegijide nimekirän.",
+       "pt-login": "Nimega sisseminek",
+       "pt-login-button": "Nimega sisseminek",
+       "pt-createaccount": "Tiiq hindäle pruukjanimi",
+       "pt-userlogout": "Mineq nime alt vällä",
        "changepassword": "Muudaq salasõnna",
-       "resetpass_announce": "Sa lätsit sisse e-postiga saadõdu aotlidsõ koodiga. Kõrdapiten sisseminekis tulõ sul siin tetäq hindäle  vahtsõnõ salasõna:",
+       "resetpass_announce": "Kõrdapiten sisseminekis tulõ sul tetäq hindäle vahtsõnõ salasõna.",
        "resetpass_text": "<!-- Kirodaq siiäq -->",
        "resetpass_header": "Muudaq pruukjanime salasõnna",
        "oldpassword": "Vana salasõna",
        "newpassword": "Vahtsõnõ salasõna",
        "retypenew": "Kirodaq viilkõrd vahtsõnõ salasõna",
        "resetpass_submit": "Kirodaq salasõna ja mineq nimega sisse",
-       "changepassword-success": "Salasõna vaihtaminõ läts kõrda.",
+       "changepassword-success": "Salasõna vaihtaminõ läts kõrda!",
+       "changepassword-throttled": "Olõt ildaaigo pruuvnuq pall'o hulga kõrdo nimega sisse minnäq.\nOlõq hää, oodaq $1, inne ku vahtsõst proovit.",
        "resetpass_forbidden": "Salasõnno saa-i muutaq.",
        "resetpass-no-info": "Taa lehe pääle päsemises piät olõma nimega sisse lännüq.",
        "resetpass-submit-loggedin": "Muudaq salasõnna",
        "resetpass-submit-cancel": "Jätäq katski",
        "resetpass-wrong-oldpass": "Viganõ aotlinõ vai parhillanõ salasõna.\nVõi-ollaq olõt jo uma salasõna ärq muutnuq vai küsünüq vahtsõ aotlidsõ salasõna.",
+       "resetpass-recycled": "Olõq hää, valiq umas salasõnas midägi muud, ku parhillanõ salasõna.",
        "resetpass-temp-password": "Aotlinõ salasõna:",
        "bold_sample": "Paks kiri",
        "bold_tip": "Paks kiri",
        "deletereasonotherlist": "Muu põhjus",
        "deletereason-dropdown": "*Hariliguq kistutamisõ põhjusõq\n** Kirotaja hindä palvõl\n** Tegijäõigusõ rikminõ\n** Lehe ts'urkminõ",
        "rollback": "Mineq tagasi vana kujo pääle",
-       "rollback_short": "Võtaq tagasi",
        "rollbacklink": "võtaq tagasi vana kujo",
        "rollbackfailed": "Muutmiisi tagasivõtminõ lää-s kõrda",
        "cantrollback": "Saa-i muutmiisi tagasi pöördäq; viimäne muutja om lehe ainugõnõ toimõndaja.",
index ea23d9f..b8f9930 100644 (file)
        "uploaderror": "אַרויפֿלאָדן פֿעלער",
        "upload-recreate-warning": "'''ווארענונג: א טעקע מיט דעם נאמען איז געווארן אויסגעמעקט אדער באוועגט.'''\n\nדאס אויסמעקן־ און באוועגן־לאגבוך פאר דעם בלאט זענען געוויזן דא:",
        "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|טעקסט קעפל]]</nowiki></code>''' צו ניצן א 200 פיקסל ברייט ווערסיע אין א קעסטל אויף דער לינקער זײַט, מיט דער שילדערונג 'טעקסט קעפל'\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' פֿאר א גראָדער פֿאַרבינדונג צו דער טעקע אָן צו ווײַזן זי",
-       "upload-permitted": "ערלויבטע טעקע טיפן: $1.",
-       "upload-preferred": "פרעפֿרירטע טעקע טיפן: $1.",
-       "upload-prohibited": "פֿאַרווערענע טעקע טיפן: $1.",
+       "upload-permitted": "{{PLURAL:$2|ערלויבטער טעקע טיפ|ערלויבטע טעקע טיפן}}: $1.",
+       "upload-preferred": "{{PLURAL:$2|פרעפֿערירטער טעקע טיפ|פרעפֿערירטע טעקע טיפן}}: $1.",
+       "upload-prohibited": "{{PLURAL:$2|פֿאַרווערענער טעקע טיפ|פֿאַרווערענע טעקע טיפן}}: $1.",
        "uploadlogpage": "ארויפֿלאדן לאג",
        "uploadlogpagetext": "פֿאָלגנד איז אַ ליסטע פֿון די לעצטע אַרױפֿגעלאָדענע טעקעס.\nזעט די  [[Special:NewFiles|גאלאריע פֿון נײַע טעקעס]] פֿאַר א מער וויזועלע איבערבליק.",
        "filename": "טעקע נאמען",
index f885cd1..0924acb 100644 (file)
@@ -21,7 +21,8 @@
                        "Kc kennylau",
                        "Mywood",
                        "Impersonator 1",
-                       "Cedric tsan cantonais"
+                       "Cedric tsan cantonais",
+                       "Liuxinyu970226"
                ]
        },
        "tog-underline": "連結加底線:",
@@ -48,7 +49,7 @@
        "tog-shownumberswatching": "顯示有幾多人監視",
        "tog-oldsig": "現有簽名:",
        "tog-fancysig": "將簽名以維基字對待(冇自動連結)",
-       "tog-uselivepreview": "用即時預覽(實驗緊)",
+       "tog-uselivepreview": "用即時預覽",
        "tog-forceeditsummary": "我冇入修改註解時通知我",
        "tog-watchlisthideown": "響監視清單度隱藏我嘅編輯",
        "tog-watchlisthidebots": "響監視清單度隱藏機械人嘅編輯",
        "content-model-text": "純文字",
        "content-model-javascript": "JavaScript程式語言",
        "content-model-css": "層疊樣式表",
-       "duplicate-args-category": "爾版用徂幾個重複加類嘅模。",
+       "duplicate-args-category": "模用重複參數嘅嘅版面",
        "expensive-parserfunction-warning": "警告: 呢一版有太多耗費嘅語法功能呼叫。\n\n佢應該少過$2次呼叫,佢而家係$1次呼叫。",
        "expensive-parserfunction-category": "響版度有太多嘅耗費嘅語法功能呼叫",
        "post-expand-template-inclusion-warning": "警告: 包含模大細太大。\n有啲模將唔會包含。",
        "currentrev": "最新嘅修訂",
        "currentrev-asof": "響 $1 嘅最新修訂",
        "revisionasof": "喺$1嘅修訂",
-       "revision-info": "喺$1嘅修訂;修訂自$2",
+       "revision-info": "喺$1由$2嘅修訂 $7",
        "previousrevision": "←之前嘅修訂",
        "nextrevision": "新啲嘅修訂→",
        "currentrevisionlink": "最新嘅修訂版本",
        "histlegend": "選擇唔同版本:響兩個唔同版本嘅圓框分別撳一下,再撳最底的「比較被選修訂」掣以作比較。<br />\n說明:'''({{int:cur}})'''= 同最新修訂版本嘅差別,'''({{int:last}})'''= 同前一個修訂版本嘅差別,'''{{int:minoreditletter}}''' = 小修改。",
        "history-fieldset-title": "瀏覽歷史",
        "history-show-deleted": "只顯示刪除咗嘅",
-       "histfirst": "最",
+       "histfirst": "最",
        "histlast": "最新",
        "historysize": "($1 {{PLURAL:$1|byte|bytes}})",
        "historyempty": "(空)",
        "history-feed-description": "響哩個wiki嘅哩一頁嘅修訂歷史",
        "history-feed-item-nocomment": "$1 響 $2",
        "history-feed-empty": "要求嘅頁面並唔存在。\n佢可能響哩個 wiki 度刪除咗或者改咗名。\n試吓[[Special:Search|響哩個wiki度搵]]有關新頁面嘅資料。",
-       "rev-deleted-comment": "(評論已經移除咗)",
+       "rev-deleted-comment": "(編輯摘要已經移除咗)",
        "rev-deleted-user": "(用戶名已經移除咗)",
-       "rev-deleted-event": "(日誌動作已經移除咗)",
+       "rev-deleted-event": "(日誌詳情已經移除咗)",
        "rev-deleted-user-contribs": "[用戶名或IP地址拎走咗 - 響貢獻度隱藏咗編輯]",
        "rev-deleted-text-permission": "呢頁嘅修訂已經被'''洗咗'''。\n喺[{{fullurl:{{#Special:Log}}/delete|page={{PAGENAMEE}}}} 刪除日誌]裏面可以搵到更詳細嘅資料。",
-       "rev-deleted-text-unhide": "呢頁嘅修訂已經被'''洗咗'''。\n喺[{{fullurl:{{#Special:Log}}/delete|page={{PAGENAMEE}}}} 刪除日誌]裏面可以搵到更詳細嘅資料。\n作為管理員,如果你想繼續嘅話,可以仍然[$1 睇番呢次修訂]。",
-       "rev-suppressed-text-unhide": "呢頁嘅修訂已經被'''廢止咗'''。\n喺[{{fullurl:{{#Special:Log}}/suppress|page={{PAGENAMEE}}}} 廢止日誌]裏面可以搵到更詳細嘅資料。\n作為管理員,如果你想繼續嘅話,可以仍然[$1 睇番呢次修訂]。",
-       "rev-deleted-text-view": "å\91¢é \81å\98\85ä¿®è¨\82å·²ç¶\93'''æ´\97å\92\97'''ã\80\82\nä½\9cç\82ºå\98\85管ç\90\86å\93¡ï¼\8cä½ å\8f¯ä»¥å\8e»ç\9d\87å\90\93ä½¢ï¼\9b\nå\96º[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} å\88ªé\99¤æ\97¥èª\8c]è£\8fé\9d¢å\8f¯ä»¥æ\90µå\88°æ\9b´è©³ç´°å\98\85è³\87æ\96\99ã\80\82",
-       "rev-suppressed-text-view": "å\91¢é \81å\98\85ä¿®è¨\82å·²ç¶\93'''廢止å\92\97'''ã\80\82\nä½\9cç\82ºå\98\85管ç\90\86å\93¡ï¼\8cä½ å\8f¯ä»¥å\8e»ç\9d\87å\90\93ä½¢ï¼\9b\nå\96º[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} å»¢æ­¢æ\97¥èª\8c]è£\8fé\9d¢å\8f¯ä»¥æ\90µå\88°æ\9b´è©³ç´°å\98\85è³\87æ\96\99ã\80\82",
+       "rev-deleted-text-unhide": "呢頁嘅修訂已經被'''洗咗'''。\n喺[{{fullurl:{{#Special:Log}}/delete|page={{PAGENAMEE}}}} 刪除日誌]裏面可以搵到更詳細嘅資料。\n如果你想繼續嘅話,可以仍然[$1 睇番呢次修訂]。",
+       "rev-suppressed-text-unhide": "呢頁嘅修訂已經被'''廢止咗'''。\n喺[{{fullurl:{{#Special:Log}}/suppress|page={{PAGENAMEE}}}} 廢止日誌]裏面可以搵到更詳細嘅資料。\n如果你想繼續嘅話,可以仍然[$1 睇番呢次修訂]。",
+       "rev-deleted-text-view": "呢頁嘅修訂已經'''洗咗'''。\n你可以去睇吓佢;\n喺[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 刪除日誌]裏面可以搵到更詳細嘅資料。",
+       "rev-suppressed-text-view": "呢頁嘅修訂已經'''廢止咗'''。\n你可以去睇吓佢;\n喺[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 廢止日誌]裏面可以搵到更詳細嘅資料。",
        "rev-deleted-no-diff": "因為其中一次修訂'''洗咗''',你唔可以睇呢個差異。\n響[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 刪除日誌]度可以搵到更多嘅資料。",
        "rev-suppressed-no-diff": "由於呢頁嘅其中一次修訂已經'''刪除咗''',你唔可以睇呢次修訂。",
-       "rev-deleted-unhide-diff": "呢頁嘅其中一次修訂已經'''洗咗'''。\n喺[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 刪除日誌]裏面可以搵到更詳細嘅資料。\n作為管理員,如果你想繼續嘅話,可以仍然[$1 睇番呢次修訂]。",
-       "rev-suppressed-unhide-diff": "呢頁嘅其中一次修訂已經'''廢止咗'''。\n喺[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 廢止日誌]裏面可以搵到更詳細嘅資料。\n作為管理員,如果你想繼續嘅話,可以仍然[$1 睇番呢次修訂]。",
-       "rev-deleted-diff-view": "å\91¢å\80\8bå·®ç\95°å\98\85å\85¶ä¸­ä¸\80次修è¨\82å·²ç¶\93'''å\88ªé\99¤å\92\97'''ã\80\82\nä½\9cç\82ºç®¡ç\90\86å\93¡ä½ å\8f¯ä»¥å\8e»ç\9d\87å\91¢å\80\8bå·®ç\95°ï¼\9bå\96º[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} å\88ªé\99¤æ\97¥èª\8c]è£\8fé\9d¢å\8f¯ä»¥æ\90µå\88°æ\9b´è©³ç´°å\98\85è³\87æ\96\99ã\80\82",
-       "rev-suppressed-diff-view": "å\91¢å\80\8bå·®ç\95°å\98\85å\85¶ä¸­ä¸\80次修è¨\82å·²ç¶\93'''廢止å\92\97'''ã\80\82\nä½\9cç\82ºç®¡ç\90\86å\93¡ä½ å\8f¯ä»¥å\8e»ç\9d\87å\91¢å\80\8bå·®ç\95°ï¼\9bå\96º[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} å»¢æ­¢æ\97¥èª\8c]è£\8fé\9d¢å\8f¯ä»¥æ\90µå\88°æ\9b´è©³ç´°å\98\85è³\87æ\96\99ã\80\82",
+       "rev-deleted-unhide-diff": "呢頁嘅其中一次修訂已經'''洗咗'''。\n喺[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 刪除日誌]裏面可以搵到更詳細嘅資料。\n如果你想繼續嘅話,可以仍然[$1 睇番呢次修訂]。",
+       "rev-suppressed-unhide-diff": "呢頁嘅其中一次修訂已經'''廢止咗'''。\n喺[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 廢止日誌]裏面可以搵到更詳細嘅資料。\n如果你想繼續嘅話,可以仍然[$1 睇番呢次修訂]。",
+       "rev-deleted-diff-view": "呢個差異嘅其中一次修訂已經'''刪除咗'''。\n你可以去睇呢個差異;喺[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 刪除日誌]裏面可以搵到更詳細嘅資料。",
+       "rev-suppressed-diff-view": "呢個差異嘅其中一次修訂已經'''廢止咗'''。\n你可以去睇呢個差異;喺[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 廢止日誌]裏面可以搵到更詳細嘅資料。",
        "rev-delundel": "顯示/隱藏",
        "rev-showdeleted": "顯示",
        "revisiondelete": "刪除/反刪除修訂",
        "revdelete-no-file": "指定嘅檔案未存在。",
        "revdelete-show-file-confirm": "你係咪真係想去睇響$2 $3刪咗 \"$1\" 嘅檔案修訂?",
        "revdelete-show-file-submit": "係",
-       "logdelete-selected": "揀[[:$1]]嘅日誌事件:",
+       "logdelete-selected": "揀嘅日誌事件:",
        "revdelete-confirm": "請確認你肯定去做嘅話,你就要明白到後果,同埋呢個程序符合[[{{MediaWiki:Policy-url}}|政策]]。",
-       "revdelete-suppress-text": "å£\93å\88¶'''å\8fª'''æ\87\89該é\9f¿ä¸\8bé\9d¢å\98\85æ\83\85æ³\81ä¹\8bä¸\8bé\80²è¡\8c:\n* å\94\94å\90\88é\81©å\98\85å\80\8b人è³\87æ\96\99\n*: ''å±\8bä¼\81å\9c°å\9d\80ã\80\81é\9b»è©±è\99\9f碼ã\80\81社群ä¿\9då®\89è\99\9f碼ç­\89ã\80\82''",
+       "revdelete-suppress-text": "å£\93å\88¶'''å\8fª'''æ\87\89該é\9f¿ä¸\8bé\9d¢å\98\85æ\83\85æ³\81ä¹\8bä¸\8bé\80²è¡\8c:\n* å\8f¯è\83½ä¿\82誹è¬\97å\98\85è³\87æ\96\99\n* å\94\94å\90\88é\81©å\98\85å\80\8b人è³\87æ\96\99\n*: ''å±\8bä¼\81å\9c°å\9d\80ã\80\81é\9b»è©±è\99\9f碼ã\80\81身份è­\89è\99\9f碼ç­\89ã\80\82''",
        "revdelete-legend": "設定可見性嘅限制",
-       "revdelete-hide-text": "隱藏修訂嘅文字",
+       "revdelete-hide-text": "修訂嘅文字",
        "revdelete-hide-image": "隱藏檔案內容",
-       "revdelete-hide-name": "隱藏動作同目標",
-       "revdelete-hide-comment": "隱藏編輯摘要",
-       "revdelete-hide-user": "隱藏編輯者嘅用戶名/IP地址",
+       "revdelete-hide-name": "隱藏目標同參數",
+       "revdelete-hide-comment": "隱藏摘要",
+       "revdelete-hide-user": "編輯者嘅用戶名/IP地址",
        "revdelete-hide-restricted": "同時壓制由操作員以及其他用戶的資料",
        "revdelete-radio-same": "(唔改)",
-       "revdelete-radio-set": "",
-       "revdelete-radio-unset": "唔好",
+       "revdelete-radio-set": "隱藏咗",
+       "revdelete-radio-unset": "顯示返",
        "revdelete-suppress": "同時壓制由操作員以及其他用戶的資料",
        "revdelete-unsuppress": "響已經恢復咗嘅修訂度移除限制",
        "revdelete-log": "原因:",
        "revdelete-no-change": "警告:響$1 $2嘅項目已經請求咗可見性設定。",
        "revdelete-concurrent-change": "改緊響$1 $2嘅項目錯誤:當我哋試吓改佢嘅設定嗰陣,已經畀另一啲人改過。請檢查紀錄。",
        "revdelete-only-restricted": "隱藏項目響$1 $2嘅項目:你唔可以廢止由管理員檢視,而唔同時再揀另外其中一個可見性選項。",
-       "revdelete-reason-dropdown": "*常用刪除原因\n** 侵犯版權\n** 唔合適嘅個人資料",
+       "revdelete-reason-dropdown": "*常用刪除原因\n** 侵犯版權\n** 唔合適嘅言論或者個人資料\n** 唔合適嘅用戶名\n** 可能係誹謗嘅資料",
        "revdelete-otherreason": "其它/附加的原因:",
        "revdelete-reasonotherlist": "其它原因",
        "revdelete-edit-reasonlist": "編輯刪除原因",
        "revdelete-offender": "修訂著者:",
        "suppressionlog": "廢止日誌",
-       "suppressionlogtext": "下面係刪除同埋由操作員牽涉到內容封鎖嘅一覽。\n睇吓[[Special:IPBlockList|IP封鎖一覽]]去睇現時進行緊嘅禁止同埋封鎖表。",
+       "suppressionlogtext": "下面係刪除同埋由操作員牽涉到內容封鎖嘅一覽。\n睇吓[[Special:BlockList|封鎖一覽]]去睇現時進行緊嘅禁止同埋封鎖表。",
        "mergehistory": "合併頁歷史",
        "mergehistory-header": "呢一版可以畀你去合併一個來源頁嘅修訂記錄到另一個新頁。\n請確認呢次更改會繼續保留嗰版之前嘅歷史版。",
        "mergehistory-box": "合併兩版嘅修訂:",
        "shown-title": "每版顯示$1項結果",
        "viewprevnext": "去睇 ($1 {{int:pipe-separator}} $2) ($3)",
        "searchmenu-exists": "'''響呢個wiki度有一版叫做\"[[:$1]]\"。'''",
-       "searchmenu-new": "'''響呢個wiki度開呢版\"[[:$1]]\"!'''",
+       "searchmenu-new": "<strong>響呢個wiki度開呢版「[[:$1]]」!</strong>睇埋搵到嘅結果。",
        "searchprofile-articles": "內容頁",
        "searchprofile-images": "多媒體",
        "searchprofile-everything": "全部嘢",
index 06d6c06..cd5dc8b 100644 (file)
        "portal": "社区门户",
        "portal-url": "Project:社区门户",
        "privacy": "隐私政策",
-       "privacypage": "Project:é\9a\90ç§\81æ\9d\83æ\94¿ç­\96",
+       "privacypage": "Project:隐私政策",
        "badaccess": "权限错误",
        "badaccess-group0": "不允许您执行您所请求的操作。",
        "badaccess-groups": "您所请求的操作仅限于{{PLURAL:$2|该|这些}}用户组的用户使用:$1",
        "nosuchusershort": "没有名为“$1”的用户。请检查你的拼写。",
        "nouserspecified": "你必须指定用户名。",
        "login-userblocked": "该用户已被封禁,禁止登录。",
-       "wrongpassword": "输入的密码错误。请重试。",
+       "wrongpassword": "输入的密码错误。请重试。",
        "wrongpasswordempty": "密码输入为空。请重试。",
        "passwordtooshort": "您的密码至少需要$1个字符。",
        "password-name-match": "您的密码必须和您的用户名不相同。",
        "accmailtitle": "密码已寄出",
        "accmailtext": "为[[User talk:$1|$1]]随机生成的密码已送至$2。登录后可以在''[[Special:ChangePassword|更改密码]]''页面中修改。",
        "newarticle": "(新页面)",
-       "newarticletext": "你点击了一个尚不存在的页面的链接。要创建该页面,请在下面的编辑框中输入内容(更多信息请见[$1 帮助页面])。如果你是错误地到达这里,请点击你的浏览器的'''返回'''按钮。",
+       "newarticletext": "你点击了一个尚不存在的页面的链接。要创建该页面,请在下面的编辑框中输入内容(更多信息请见[$1 帮助页面])。如果你是错误地到达这里,请点击您的浏览器的<strong>返回</strong>按钮。",
        "anontalkpagetext": "---- ''这是一个还未建立账户的匿名用户的讨论页, 因此我们只能用IP地址来与他或她联络。该IP地址可能由几名用户共享。如果您是一名匿名用户并认为此页上的评语与您无关,请[[Special:UserLogin/signup|创建新账户]]或[[Special:UserLogin|登录]]以避免在未来与其他匿名用户混淆。''",
        "noarticletext": "本页面目前没有内容。你可以在其他页面中[[Special:Search/{{PAGENAME}}|搜索本页标题]]、<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 搜索相关日志]或[{{fullurl:{{FULLPAGENAME}}|action=edit}} 编辑本页面]。</span>",
        "noarticletext-nopermission": "本页面目前没有内容。你可以在其他页面中[[Special:Search/{{PAGENAME}}|搜索本页标题]]或<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 搜索相关日志]</span>,但你没有权限创建本页面。",
        "editingcomment": "编辑“$1”(新段落)",
        "editconflict": "编辑冲突:$1",
        "explainconflict": "其他用户在你开始编辑后更改了该页面。上面的文字区含有该页面当前的文字。下面的文字区显示你的更改。你必须把你的更改合并至现有文字。'''只有'''当你单击“{{int:savearticle}}”后,上面的文字区中的文字才会被保存。",
-       "yourtext": "的文字",
+       "yourtext": "的文字",
        "storedversion": "已保存的版本",
        "nonunicodebrowser": "'''警告:您的浏览器不兼容Unicode编码。'''这里有一个工作区将使您能安全地编辑页面:非ASCII字符将以十六进制编码方式出现在编辑框中。",
        "editingold": "'''警告:你正在编辑的是本页面的旧版本。'''如果你保存该编辑,该版本后的所有更改都会丢失。",
        "uploaderror": "上传出错",
        "upload-recreate-warning": "'''警告:一个相同名字的文件曾经被删除或者移动至别处。'''\n\n这个页面的删除和移动日志在这里提供以便参考:",
        "uploadtext": "请使用下面的表格上传文件。要查看或搜索以往上传的文件,请前往[[Special:FileList|上传的文件的列表]],(重新)上传也将记录在[[Special:Log/upload|上传日志]]中,删除将记录在[[Special:Log/delete|删除日志]]中。\n\n要在页面中包含文件,请使用一种以下形式的链接:\n* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code></strong>使用文件的完整版本\n* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|替代文字]]</nowiki></code></strong>使用位于页面左边的框内的200像素宽的图片,以“替代文字”作为说明\n* <strong><code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code></strong>直接链接到文件而不显示文件",
-       "upload-permitted": "允许的文件类型:$1。",
-       "upload-preferred": "建议的文件类型:$1。",
-       "upload-prohibited": "禁止的文件类型:$1。",
+       "upload-permitted": "允许的文件{{PLURAL:$2|类型}}:$1。",
+       "upload-preferred": "建议的文件{{PLURAL:$2|类型}}:$1。",
+       "upload-prohibited": "禁止的文件{{PLURAL:$2|类型}}:$1。",
        "uploadlogpage": "上传日志",
        "uploadlogpagetext": "下面是最近的文件上传的列表。图像概览请见[[Special:NewFiles|新文件图库]]。",
        "filename": "文件名",
        "namespace": "名字空间:",
        "invert": "反选",
        "tooltip-invert": "请选择该框以隐藏指定名字空间(及相关名字空间,若被选择)的页面更改",
+       "tooltip-whatlinkshere-invert": "勾选此框以隐藏来自选定名字空间内页面的链接。",
        "namespace_association": "关联的名字空间",
        "tooltip-namespace_association": "选中此复选框可包括与选定名字空间相关的讨论页或子页面",
        "blanknamespace": "(主)",
index e2777a8..376a4cd 100644 (file)
        "qbedit": "編輯",
        "qbpageoptions": "此頁面",
        "qbmyoptions": "我的頁面",
-       "faq": "常見問",
+       "faq": "常見問",
        "faqpage": "Project:FAQ",
        "actions": "動作",
        "namespaces": "命名空間",
        "portal": "社群入口",
        "portal-url": "Project:Community portal",
        "privacy": "隱私政策",
-       "privacypage": "Project:Privacy policy",
+       "privacypage": "Project:隱私政策",
        "badaccess": "權限錯誤",
        "badaccess-group0": "系統不允許您執行這項操作。",
        "badaccess-groups": "您請求的操作只有{{PLURAL:$2|這個|這些}}群組的使用者能使用:$1",
        "nosuchusershort": "查無使用者 \"$1\",\n請檢查您拼寫是否正確。",
        "nouserspecified": "您必須指定一個使用者名稱。",
        "login-userblocked": "這位使用者已被封鎖,不允許登入。",
-       "wrongpassword": "您輸入的密碼錯誤,請再試一次。",
+       "wrongpassword": "您輸入的密碼有錯誤,請再嘗試一次。",
        "wrongpasswordempty": "輸入的密碼是空的。\n請再試一次。",
        "passwordtooshort": "您的密碼至少需要 $1 個字元。",
        "password-name-match": "您的密碼不可以跟使用者名稱相同。",
        "namespace": "命名空間:",
        "invert": "反向選擇",
        "tooltip-invert": "勾選此核選方塊以隱藏選擇命名空間中的頁面變更 (若勾選相關命名空間,則會同時隱藏相關命名空間)",
+       "tooltip-whatlinkshere-invert": "勾選此核選方塊以隱藏選擇命名空間中的頁面連結。",
        "namespace_association": "相關命名空間",
        "tooltip-namespace_association": "勾選此核選方塊以包含與選擇命名空間相關的對話或主題命名空間",
        "blanknamespace": "(主要)",
        "variantname-zh": "不轉換",
        "variantname-gan-hans": "‪中文(简体)",
        "variantname-gan-hant": "‪中文(繁體)",
-       "metadata": "資料定義",
+       "metadata": "後設資料",
        "metadata-help": "此檔案包含額外的資訊,可能由數位相機或掃描機所建立的。\n若修改此檔案,部份資訊將無法保留。",
        "metadata-expand": "顯示詳細資料",
        "metadata-collapse": "隱藏詳細資料",
        "version-entrypoints-header-url": "URL",
        "version-entrypoints-articlepath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgArticlePath 文章路徑]",
        "version-entrypoints-scriptpath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgScriptPath Script 路徑]",
-       "version-libraries": "已安裝的庫",
-       "version-libraries-library": "庫",
+       "version-libraries": "已安裝的程式庫",
+       "version-libraries-library": "程式庫",
        "version-libraries-version": "版本",
        "redirect": "重新導向至檔案、使用者、頁面或修訂 ID",
        "redirect-legend": "重新導向至檔案或頁面",
diff --git a/languages/messages/MessagesBgn.php b/languages/messages/MessagesBgn.php
new file mode 100644 (file)
index 0000000..5c01273
--- /dev/null
@@ -0,0 +1,12 @@
+<?php
+/** Western Balochi
+ *
+ * To improve a translation please visit https://translatewiki.net
+ *
+ * @ingroup Language
+ * @file
+ *
+ */
+
+$fallback = 'fa';
+$rtl = true;
index f3f2ef5..14a7f99 100644 (file)
@@ -305,7 +305,7 @@ $magicWords = array(
        'padleft'                   => array( '0', 'DOLEWEJ', 'PADLEFT' ),
        'padright'                  => array( '0', 'DOPRAWEJ', 'PADRIGHT' ),
        'special'                   => array( '0', 'specjalna', 'special' ),
-       'defaultsort'               => array( '1', 'DOMYŚLNIESORTUJ', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'defaultsort'               => array( '1', 'SORTUJ', 'DOMYŚLNIESORTUJ', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
        'filepath'                  => array( '0', 'ŚCIEŻKAPLIKU', 'FILEPATH:' ),
        'hiddencat'                 => array( '1', '__KATEGORIAUKRYTA__', '__HIDDENCAT__' ),
        'pagesincategory'           => array( '1', 'STRONYWKATEGORII', 'PAGESINCATEGORY', 'PAGESINCAT' ),
index 4b07d2f..9b98b20 100644 (file)
@@ -604,7 +604,7 @@ abstract class Maintenance {
                global $wgProfiler;
 
                $output = $this->getOption( 'profiler' );
-               if ( $output && is_array( $wgProfiler ) ) {
+               if ( $output && is_array( $wgProfiler ) && isset( $wgProfiler['class'] ) ) {
                        $class = $wgProfiler['class'];
                        $profiler = new $class(
                                array( 'sampling' => 1, 'output' => $output ) + $wgProfiler
index cbdc1ba..5807fb6 100644 (file)
@@ -5,7 +5,7 @@ require_once __DIR__ . '/Maintenance.php';
 class ConvertExtensionToRegistration extends Maintenance {
 
        protected $custom = array(
-               'MessagesDirs' => 'removeAbsolutePath',
+               'MessagesDirs' => 'handleMessagesDirs',
                'ExtensionMessagesFiles' => 'removeAbsolutePath',
                'AutoloadClasses' => 'removeAbsolutePath',
                'ExtensionCredits' => 'handleCredits',
@@ -14,6 +14,22 @@ class ConvertExtensionToRegistration extends Maintenance {
                'ExtensionFunctions' => 'handleExtensionFunctions',
        );
 
+       /**
+        * Keys that should be put at the top of the generated JSON file (T86608)
+        *
+        * @var array
+        */
+       protected $promote = array(
+               'name',
+               'version',
+               'author',
+               'url',
+               'description',
+               'descriptionmsg',
+               'license-name',
+               'type',
+       );
+
        private $json, $dir;
 
        public function __construct() {
@@ -21,18 +37,33 @@ class ConvertExtensionToRegistration extends Maintenance {
                $this->mDescription = 'Converts extension entry points to the new JSON registration format';
        }
 
+       protected function getAllGlobals() {
+               $processor = new ReflectionClass( 'ExtensionProcessor' );
+               $settings = $processor->getProperty( 'globalSettings' );
+               $settings->setAccessible( true );
+               return $settings->getValue();
+       }
+
        public function execute() {
+               // Extensions will do stuff like $wgResourceModules += array(...) which is a
+               // fatal unless an array is already set. So set an empty value.
+               foreach ( array_merge( $this->getAllGlobals(), array_keys( $this->custom ) ) as $var ) {
+                       $var = 'wg' . $var;
+                       $$var = array();
+               }
+               unset( $var );
                require $this->getArg( 0 );
                // Try not to create any local variables before this line
                $vars = get_defined_vars();
                unset( $vars['this'] );
                $this->dir = dirname( realpath( $this->getArg( 0 ) ) );
                $this->json = array();
-               $processor = new ReflectionClass( 'ExtensionProcessor' );
-               $settings = $processor->getProperty( 'globalSettings' );
-               $settings->setAccessible( true );
-               $globalSettings = $settings->getValue();
+               $globalSettings = $this->getAllGlobals();
                foreach ( $vars as $name => $value ) {
+                       // If an empty array, assume it's the default we set, so skip it
+                       if ( is_array( $value ) && count( $value ) === 0 ) {
+                               continue;
+                       }
                        $realName = substr( $name, 2 ); // Strip 'wg'
                        if ( isset( $this->custom[$realName] ) ) {
                                call_user_func_array( array( $this, $this->custom[$realName] ), array( $realName, $value ) );
@@ -44,8 +75,18 @@ class ConvertExtensionToRegistration extends Maintenance {
                        }
                }
 
+               // Move some keys to the top
+               $out = array();
+               foreach ( $this->promote as $key ) {
+                       if ( isset( $this->json[$key] ) ) {
+                               $out[$key] = $this->json[$key];
+                               unset( $this->json[$key] );
+                       }
+               }
+               $out += $this->json;
+
                $fname = "{$this->dir}/extension.json";
-               $prettyJSON = FormatJson::encode( $this->json, "\t" );
+               $prettyJSON = FormatJson::encode( $out, "\t", FormatJson::ALL_OK );
                file_put_contents( $fname, $prettyJSON . "\n" );
                $this->output( "Wrote output to $fname.\n" );
        }
@@ -60,8 +101,18 @@ class ConvertExtensionToRegistration extends Maintenance {
                $this->json[$realName] = $value;
        }
 
+       protected function handleMessagesDirs( $realName, $value ) {
+               foreach ( $value as $key => $dirs ) {
+                       foreach ( (array)$dirs as $dir ) {
+                               $this->json[$realName][$key][] = $this->stripPath( $dir, $this->dir );
+                       }
+               }
+       }
+
        private function stripPath( $val, $dir ) {
-               if ( strpos( $val, $dir ) === 0 ) {
+               if ( $val === $dir ) {
+                       $val = '';
+               } elseif ( strpos( $val, $dir ) === 0 ) {
                        // +1 is for the trailing / that won't be in $this->dir
                        $val = substr( $val, strlen( $dir ) + 1 );
                }
index 7dc4afa..0792c24 100644 (file)
@@ -3,14 +3,14 @@
 <head>
        <meta charset="utf-8">
        <title>MediaWiki Code Example</title>
-       <script src="modules/startup.js"></script>
+       <script src="modules/src/startup.js"></script>
        <script>
                function startUp() {
                        mw.config = new mw.Map();
                }
        </script>
-       <script src="modules/jquery/jquery.js"></script>
-       <script src="modules/mediawiki/mediawiki.js"></script>
+       <script src="modules/lib/jquery/jquery.js"></script>
+       <script src="modules/src/mediawiki/mediawiki.js"></script>
        <style>
                .mw-jsduck-log {
                        position: relative;
@@ -78,7 +78,7 @@
                        eval( code );
                        callback && callback( true );
                } catch ( e ) {
-                       mw.log( 'Uncaught exception: ' + e );
+                       mw.log( 'Uncaught ' + e );
                        callback && callback( false, e );
                        throw e;
                }
diff --git a/package.json b/package.json
new file mode 100644 (file)
index 0000000..101fcd9
--- /dev/null
@@ -0,0 +1,21 @@
+{
+  "name": "mediawiki",
+  "version": "0.0.0",
+  "scripts": {
+    "test": "grunt test"
+  },
+  "devDependencies": {
+    "grunt": "0.4.2",
+    "grunt-banana-checker": "0.2.0",
+    "grunt-contrib-jshint": "0.10.0",
+    "grunt-contrib-watch": "0.6.1",
+    "grunt-jscs": "0.8.1",
+    "grunt-jsonlint": "1.0.4",
+    "grunt-karma": "0.9.0",
+    "karma": "0.12.28",
+    "karma-chrome-launcher": "0.1.7",
+    "karma-firefox-launcher": "0.1.3",
+    "karma-qunit": "0.1.4",
+    "qunitjs": "1.15.0"
+  }
+}
index ad83e16..6e8cd99 100644 (file)
@@ -307,6 +307,7 @@ return array(
        ),
        'jquery.throttle-debounce' => array(
                'scripts' => 'resources/lib/jquery/jquery.ba-throttle-debounce.js',
+               'targets' => array( 'desktop', 'mobile' ),
        ),
        'jquery.validate' => array(
                'scripts' => 'resources/lib/jquery/jquery.validate.js',
index cd089af..f6f422a 100644 (file)
@@ -6,5 +6,14 @@
        },
        "ooui-outline-control-move-down": "Spuèste 'a vôsce sotte",
        "ooui-outline-control-move-up": "Spuèste 'a vôsce sus",
-       "ooui-toolbar-more": "De cchiù"
+       "ooui-outline-control-remove": "Live 'a vôsce",
+       "ooui-toolbar-more": "De cchiù",
+       "ooui-toolgroup-expand": "De cchiù",
+       "ooui-toolgroup-collapse": "De mene",
+       "ooui-dialog-message-accept": "OK",
+       "ooui-dialog-message-reject": "Annulle",
+       "ooui-dialog-process-error": "Quacche cose ha sciute stuèrte",
+       "ooui-dialog-process-dismiss": "Scitte",
+       "ooui-dialog-process-retry": "Pruève arrete",
+       "ooui-dialog-process-continue": "Condinue"
 }
index 006cdeb..764f2eb 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.6.2
+ * OOjs UI v0.6.3
  * 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-01-10T01:25:31Z
+ * Date: 2015-01-16T00:05:16Z
  */
 .oo-ui-progressBarWidget-slide-frames from {
        margin-left: -40%;
        display: block;
        background: rgba(0, 0, 0, 0.4);
 }
+.oo-ui-lookupElement > .oo-ui-menuSelectWidget {
+       z-index: 1;
+       width: 100%;
+}
 .oo-ui-bookletLayout-stackLayout.oo-ui-stackLayout-continuous > .oo-ui-panelLayout-scrollable {
        overflow-y: hidden;
 }
 .oo-ui-fieldLayout-disabled .oo-ui-labelElement-label {
        color: #cccccc;
 }
+.oo-ui-actionFieldLayout-field {
+       display: table;
+       table-layout: fixed;
+       width: 100%;
+}
+.oo-ui-actionFieldLayout-input,
+.oo-ui-actionFieldLayout-button {
+       display: table-cell;
+       vertical-align: middle;
+}
+.oo-ui-actionFieldLayout-input {
+       padding-right: 1em;
+}
+.oo-ui-actionFieldLayout-button {
+       width: 1%;
+}
 .oo-ui-fieldsetLayout {
        position: relative;
        margin: 0;
 .oo-ui-listToolGroup .oo-ui-toolGroup-tools {
        padding: 0.25em 0 0.25em 0;
        border: 1px solid #aaaaaa;
-       box-shadow: inset 0 -0.2em 0 0 rgba(0, 0, 0, 0.2), 0 0.1em 0 0 rgba(0, 0, 0, 0.2);
+       border-radius: 0.2em;
+       box-shadow: inset 0 -0.2em 0 0 rgba(0, 0, 0, 0.2), 0 0.1em 0 0 rgba(0, 0, 0, 0.1);
 }
 .oo-ui-menuToolGroup {
        border: solid 1px #cccccc;
        margin-left: -1px;
        padding: 0.25em 0 0.25em 0;
        border: 1px solid #aaaaaa;
-       box-shadow: inset 0 -0.2em 0 0 rgba(0, 0, 0, 0.2), 0 0.1em 0 0 rgba(0, 0, 0, 0.2);
+       border-radius: 0.2em;
+       box-shadow: inset 0 -0.2em 0 0 rgba(0, 0, 0, 0.2), 0 0.1em 0 0 rgba(0, 0, 0, 0.1);
 }
 .oo-ui-menuToolGroup.oo-ui-widget-enabled:hover {
        border-color: #aaaaaa;
        color: #888888;
 }
 .oo-ui-dropdownWidget {
-       position: relative;
        display: inline-block;
+       position: relative;
        margin: 0.25em 0;
        width: 100%;
        max-width: 50em;
        background-position: center center;
        background-repeat: no-repeat;
 }
-.oo-ui-dropdownWidget .oo-ui-menuSelectWidget {
+.oo-ui-dropdownWidget .oo-ui-menuSelectWidget {
        z-index: 1;
        width: 100%;
 }
        width: 100%;
        max-width: 50em;
 }
-.oo-ui-comboBoxWidget > .oo-ui-selectWidget {
-       width: 100%;
+.oo-ui-comboBoxWidget > .oo-ui-menuSelectWidget {
        z-index: 1;
+       width: 100%;
 }
 .oo-ui-comboBoxWidget .oo-ui-textInputWidget input,
 .oo-ui-comboBoxWidget .oo-ui-textInputWidget textarea {
        z-index: 3;
 }
 .oo-ui-dialog-content > .oo-ui-window-body {
-       box-shadow: 0 0 1px 0 #aaaaaa;
+       outline: 1px solid #aaaaaa;
 }
 .oo-ui-messageDialog-actions-horizontal {
        display: table;
 }
 .oo-ui-processDialog-content .oo-ui-window-body {
        top: 3.4em;
-       box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.2);
+       outline: 1px solid rgba(0, 0, 0, 0.2);
 }
 .oo-ui-processDialog-navigation {
        position: relative;
index 4f6eb59..a0a5a32 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.6.2
+ * OOjs UI v0.6.3
  * 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-01-10T01:25:19Z
+ * Date: 2015-01-16T00:05:04Z
  */
 /**
  * @class
index 9956340..474304b 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.6.2
+ * OOjs UI v0.6.3
  * 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-01-10T01:25:31Z
+ * Date: 2015-01-16T00:05:16Z
  */
 .oo-ui-progressBarWidget-slide-frames from {
        margin-left: -40%;
        display: block;
        background: rgba(0, 0, 0, 0.4);
 }
+.oo-ui-lookupElement > .oo-ui-menuSelectWidget {
+       z-index: 1;
+       width: 100%;
+}
 .oo-ui-bookletLayout-stackLayout.oo-ui-stackLayout-continuous > .oo-ui-panelLayout-scrollable {
        overflow-y: hidden;
 }
 .oo-ui-fieldLayout-disabled .oo-ui-labelElement-label {
        color: #cccccc;
 }
+.oo-ui-actionFieldLayout-field {
+       display: table;
+       table-layout: fixed;
+       width: 100%;
+}
+.oo-ui-actionFieldLayout-input,
+.oo-ui-actionFieldLayout-button {
+       display: table-cell;
+       vertical-align: middle;
+}
+.oo-ui-actionFieldLayout-input {
+       padding-right: 1em;
+}
+.oo-ui-actionFieldLayout-button {
+       width: 1%;
+}
 .oo-ui-fieldsetLayout {
        position: relative;
        margin: 0;
 .oo-ui-listToolGroup .oo-ui-toolGroup-tools {
        padding: 0.25em 0 0.25em 0;
        border: 1px solid #aaaaaa;
-       box-shadow: inset 0 -0.2em 0 0 rgba(0, 0, 0, 0.2), 0 0.1em 0 0 rgba(0, 0, 0, 0.2);
+       border-radius: 0.2em;
+       box-shadow: inset 0 -0.2em 0 0 rgba(0, 0, 0, 0.2), 0 0.1em 0 0 rgba(0, 0, 0, 0.1);
 }
 .oo-ui-menuToolGroup {
        border: solid 1px #cccccc;
        margin-left: -1px;
        padding: 0.25em 0 0.25em 0;
        border: 1px solid #aaaaaa;
-       box-shadow: inset 0 -0.2em 0 0 rgba(0, 0, 0, 0.2), 0 0.1em 0 0 rgba(0, 0, 0, 0.2);
+       border-radius: 0.2em;
+       box-shadow: inset 0 -0.2em 0 0 rgba(0, 0, 0, 0.2), 0 0.1em 0 0 rgba(0, 0, 0, 0.1);
 }
 .oo-ui-menuToolGroup.oo-ui-widget-enabled:hover {
        border-color: #aaaaaa;
        color: #888888;
 }
 .oo-ui-dropdownWidget {
-       position: relative;
        display: inline-block;
+       position: relative;
        margin: 0.25em 0;
        width: 100%;
        max-width: 50em;
        background-position: center center;
        background-repeat: no-repeat;
 }
-.oo-ui-dropdownWidget .oo-ui-menuSelectWidget {
+.oo-ui-dropdownWidget .oo-ui-menuSelectWidget {
        z-index: 1;
        width: 100%;
 }
        width: 100%;
        max-width: 50em;
 }
-.oo-ui-comboBoxWidget > .oo-ui-selectWidget {
-       width: 100%;
+.oo-ui-comboBoxWidget > .oo-ui-menuSelectWidget {
        z-index: 1;
+       width: 100%;
 }
 .oo-ui-comboBoxWidget .oo-ui-textInputWidget input,
 .oo-ui-comboBoxWidget .oo-ui-textInputWidget textarea {
        z-index: 3;
 }
 .oo-ui-dialog-content > .oo-ui-window-body {
-       box-shadow: 0 0 1px 0 #aaaaaa;
+       outline: 1px solid #aaaaaa;
 }
 .oo-ui-messageDialog-actions-horizontal {
        display: table;
 }
 .oo-ui-processDialog-content .oo-ui-window-body {
        top: 3.4em;
-       box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.2);
+       outline: 1px solid rgba(0, 0, 0, 0.2);
 }
 .oo-ui-processDialog-navigation {
        position: relative;
index 38aa092..e0c98d0 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.6.2
+ * OOjs UI v0.6.3
  * 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-01-10T01:25:19Z
+ * Date: 2015-01-16T00:05:04Z
  */
 ( function ( OO ) {
 
@@ -1471,8 +1471,8 @@ OO.ui.Widget.prototype.updateDisabled = function () {
  *
  * @constructor
  * @param {Object} [config] Configuration options
- * @cfg {string} [size] Symbolic name of dialog size, `small`, `medium`, `large` or `full`; omit to
- *   use #static-size
+ * @cfg {string} [size] Symbolic name of dialog size, `small`, `medium`, `large`, `larger` or
+ *  `full`; omit to use #static-size
  */
 OO.ui.Window = function OoUiWindow( config ) {
        // Configuration initialization
@@ -1732,7 +1732,7 @@ OO.ui.Window.prototype.getManager = function () {
 /**
  * Get the window size.
  *
- * @return {string} Symbolic size name, e.g. 'small', 'medium', 'large', 'full'
+ * @return {string} Symbolic size name, e.g. `small`, `medium`, `large`, `larger`, `full`
  */
 OO.ui.Window.prototype.getSize = function () {
        return this.size;
@@ -2690,6 +2690,9 @@ OO.ui.WindowManager.static.sizes = {
        large: {
                width: 700
        },
+       larger: {
+               width: 900
+       },
        full: {
                // These can be non-numeric because they are never used in calculations
                width: '100%',
@@ -4971,6 +4974,332 @@ OO.ui.LabelElement.prototype.setLabelContent = function ( label ) {
        }
 };
 
+/**
+ * Mixin that adds a menu showing suggested values for a OO.ui.TextInputWidget.
+ *
+ * Subclasses that set the value of #lookupInput from #onLookupMenuItemChoose should
+ * be aware that this will cause new suggestions to be looked up for the new value. If this is
+ * not desired, disable lookups with #setLookupsDisabled, then set the value, then re-enable lookups.
+ *
+ * @class
+ * @abstract
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {jQuery} [$overlay] Overlay for dropdown; defaults to relative positioning
+ * @cfg {jQuery} [$container=this.$element] Element to render menu under
+ */
+OO.ui.LookupElement = function OoUiLookupElement( config ) {
+       // Configuration initialization
+       config = config || {};
+
+       // Properties
+       this.$overlay = config.$overlay || this.$element;
+       this.lookupMenu = new OO.ui.TextInputMenuSelectWidget( this, {
+               $: OO.ui.Element.static.getJQuery( this.$overlay ),
+               $container: config.$container
+       } );
+       this.lookupCache = {};
+       this.lookupQuery = null;
+       this.lookupRequest = null;
+       this.lookupsDisabled = false;
+       this.lookupInputFocused = false;
+
+       // Events
+       this.$input.on( {
+               focus: this.onLookupInputFocus.bind( this ),
+               blur: this.onLookupInputBlur.bind( this ),
+               mousedown: this.onLookupInputMouseDown.bind( this )
+       } );
+       this.connect( this, { change: 'onLookupInputChange' } );
+       this.lookupMenu.connect( this, {
+               toggle: 'onLookupMenuToggle',
+               choose: 'onLookupMenuItemChoose'
+       } );
+
+       // Initialization
+       this.$element.addClass( 'oo-ui-lookupElement' );
+       this.lookupMenu.$element.addClass( 'oo-ui-lookupElement-menu' );
+       this.$overlay.append( this.lookupMenu.$element );
+};
+
+/* Methods */
+
+/**
+ * Handle input focus event.
+ *
+ * @param {jQuery.Event} e Input focus event
+ */
+OO.ui.LookupElement.prototype.onLookupInputFocus = function () {
+       this.lookupInputFocused = true;
+       this.populateLookupMenu();
+};
+
+/**
+ * Handle input blur event.
+ *
+ * @param {jQuery.Event} e Input blur event
+ */
+OO.ui.LookupElement.prototype.onLookupInputBlur = function () {
+       this.closeLookupMenu();
+       this.lookupInputFocused = false;
+};
+
+/**
+ * Handle input mouse down event.
+ *
+ * @param {jQuery.Event} e Input mouse down event
+ */
+OO.ui.LookupElement.prototype.onLookupInputMouseDown = function () {
+       // Only open the menu if the input was already focused.
+       // This way we allow the user to open the menu again after closing it with Esc
+       // by clicking in the input. Opening (and populating) the menu when initially
+       // clicking into the input is handled by the focus handler.
+       if ( this.lookupInputFocused && !this.lookupMenu.isVisible() ) {
+               this.populateLookupMenu();
+       }
+};
+
+/**
+ * Handle input change event.
+ *
+ * @param {string} value New input value
+ */
+OO.ui.LookupElement.prototype.onLookupInputChange = function () {
+       if ( this.lookupInputFocused ) {
+               this.populateLookupMenu();
+       }
+};
+
+/**
+ * Handle the lookup menu being shown/hidden.
+ *
+ * @param {boolean} visible Whether the lookup menu is now visible.
+ */
+OO.ui.LookupElement.prototype.onLookupMenuToggle = function ( visible ) {
+       if ( !visible ) {
+               // When the menu is hidden, abort any active request and clear the menu.
+               // This has to be done here in addition to closeLookupMenu(), because
+               // MenuSelectWidget will close itself when the user presses Esc.
+               this.abortLookupRequest();
+               this.lookupMenu.clearItems();
+       }
+};
+
+/**
+ * Handle menu item 'choose' event, updating the text input value to the value of the clicked item.
+ *
+ * @param {OO.ui.MenuOptionWidget|null} item Selected item
+ */
+OO.ui.LookupElement.prototype.onLookupMenuItemChoose = function ( item ) {
+       if ( item ) {
+               this.setValue( item.getData() );
+       }
+};
+
+/**
+ * Get lookup menu.
+ *
+ * @return {OO.ui.TextInputMenuSelectWidget}
+ */
+OO.ui.LookupElement.prototype.getLookupMenu = function () {
+       return this.lookupMenu;
+};
+
+/**
+ * Disable or re-enable lookups.
+ *
+ * When lookups are disabled, calls to #populateLookupMenu will be ignored.
+ *
+ * @param {boolean} disabled Disable lookups
+ */
+OO.ui.LookupElement.prototype.setLookupsDisabled = function ( disabled ) {
+       this.lookupsDisabled = !!disabled;
+};
+
+/**
+ * Open the menu. If there are no entries in the menu, this does nothing.
+ *
+ * @chainable
+ */
+OO.ui.LookupElement.prototype.openLookupMenu = function () {
+       if ( !this.lookupMenu.isEmpty() ) {
+               this.lookupMenu.toggle( true );
+       }
+       return this;
+};
+
+/**
+ * Close the menu, empty it, and abort any pending request.
+ *
+ * @chainable
+ */
+OO.ui.LookupElement.prototype.closeLookupMenu = function () {
+       this.lookupMenu.toggle( false );
+       this.abortLookupRequest();
+       this.lookupMenu.clearItems();
+       return this;
+};
+
+/**
+ * Request menu items based on the input's current value, and when they arrive,
+ * populate the menu with these items and show the menu.
+ *
+ * If lookups have been disabled with #setLookupsDisabled, this function does nothing.
+ *
+ * @chainable
+ */
+OO.ui.LookupElement.prototype.populateLookupMenu = function () {
+       var widget = this,
+               value = this.getValue();
+
+       if ( this.lookupsDisabled ) {
+               return;
+       }
+
+       // If the input is empty, clear the menu
+       if ( value === '' ) {
+               this.closeLookupMenu();
+       // Skip population if there is already a request pending for the current value
+       } else if ( value !== this.lookupQuery ) {
+               this.getLookupMenuItems()
+                       .done( function ( items ) {
+                               widget.lookupMenu.clearItems();
+                               if ( items.length ) {
+                                       widget.lookupMenu
+                                               .addItems( items )
+                                               .toggle( true );
+                                       widget.initializeLookupMenuSelection();
+                               } else {
+                                       widget.lookupMenu.toggle( false );
+                               }
+                       } )
+                       .fail( function () {
+                               widget.lookupMenu.clearItems();
+                       } );
+       }
+
+       return this;
+};
+
+/**
+ * Select and highlight the first selectable item in the menu.
+ *
+ * @chainable
+ */
+OO.ui.LookupElement.prototype.initializeLookupMenuSelection = function () {
+       if ( !this.lookupMenu.getSelectedItem() ) {
+               this.lookupMenu.selectItem( this.lookupMenu.getFirstSelectableItem() );
+       }
+       this.lookupMenu.highlightItem( this.lookupMenu.getSelectedItem() );
+};
+
+/**
+ * Get lookup menu items for the current query.
+ *
+ * @return {jQuery.Promise} Promise object which will be passed menu items as the first argument of
+ *   the done event. If the request was aborted to make way for a subsequent request, this promise
+ *   will not be rejected: it will remain pending forever.
+ */
+OO.ui.LookupElement.prototype.getLookupMenuItems = function () {
+       var widget = this,
+               value = this.getValue(),
+               deferred = $.Deferred(),
+               ourRequest;
+
+       this.abortLookupRequest();
+       if ( Object.prototype.hasOwnProperty.call( this.lookupCache, value ) ) {
+               deferred.resolve( this.getLookupMenuOptionsFromData( this.lookupCache[value] ) );
+       } else {
+               this.pushPending();
+               this.lookupQuery = value;
+               ourRequest = this.lookupRequest = this.getLookupRequest();
+               ourRequest
+                       .always( function () {
+                               // We need to pop pending even if this is an old request, otherwise
+                               // the widget will remain pending forever.
+                               // TODO: this assumes that an aborted request will fail or succeed soon after
+                               // being aborted, or at least eventually. It would be nice if we could popPending()
+                               // at abort time, but only if we knew that we hadn't already called popPending()
+                               // for that request.
+                               widget.popPending();
+                       } )
+                       .done( function ( data ) {
+                               // If this is an old request (and aborting it somehow caused it to still succeed),
+                               // ignore its success completely
+                               if ( ourRequest === widget.lookupRequest ) {
+                                       widget.lookupQuery = null;
+                                       widget.lookupRequest = null;
+                                       widget.lookupCache[value] = widget.getLookupCacheDataFromResponse( data );
+                                       deferred.resolve( widget.getLookupMenuOptionsFromData( widget.lookupCache[value] ) );
+                               }
+                       } )
+                       .fail( function () {
+                               // If this is an old request (or a request failing because it's being aborted),
+                               // ignore its failure completely
+                               if ( ourRequest === widget.lookupRequest ) {
+                                       widget.lookupQuery = null;
+                                       widget.lookupRequest = null;
+                                       deferred.reject();
+                               }
+                       } );
+       }
+       return deferred.promise();
+};
+
+/**
+ * Abort the currently pending lookup request, if any.
+ */
+OO.ui.LookupElement.prototype.abortLookupRequest = function () {
+       var oldRequest = this.lookupRequest;
+       if ( oldRequest ) {
+               // First unset this.lookupRequest to the fail handler will notice
+               // that the request is no longer current
+               this.lookupRequest = null;
+               this.lookupQuery = null;
+               oldRequest.abort();
+       }
+};
+
+/**
+ * Get a new request object of the current lookup query value.
+ *
+ * @abstract
+ * @return {jQuery.Promise} jQuery AJAX object, or promise object with an .abort() method
+ */
+OO.ui.LookupElement.prototype.getLookupRequest = function () {
+       // Stub, implemented in subclass
+       return null;
+};
+
+/**
+ * Pre-process data returned by the request from #getLookupRequest.
+ *
+ * The return value of this function will be cached, and any further queries for the given value
+ * will use the cache rather than doing API requests.
+ *
+ * @abstract
+ * @param {Mixed} data Response from server
+ * @return {Mixed} Cached result data
+ */
+OO.ui.LookupElement.prototype.getLookupCacheDataFromResponse = function () {
+       // Stub, implemented in subclass
+       return [];
+};
+
+/**
+ * Get a list of menu option widgets from the (possibly cached) data returned by
+ * #getLookupCacheDataFromResponse.
+ *
+ * @abstract
+ * @param {Mixed} data Cached result data, usually an array
+ * @return {OO.ui.MenuOptionWidget[]} Menu items
+ */
+OO.ui.LookupElement.prototype.getLookupMenuOptionsFromData = function () {
+       // Stub, implemented in subclass
+       return [];
+};
+
 /**
  * Element containing an OO.ui.PopupWidget object.
  *
@@ -5834,7 +6163,7 @@ OO.ui.Toolbar.prototype.onPointerDown = function ( e ) {
 
 /**
  * Sets up handles and preloads required information for the toolbar to work.
- * This must be called immediately after it is attached to a visible document.
+ * This must be called after it is attached to a visible document and before doing anything else.
  */
 OO.ui.Toolbar.prototype.initialize = function () {
        this.initialized = true;
@@ -7375,6 +7704,51 @@ OO.ui.FieldLayout.prototype.setAlignment = function ( value ) {
        return this;
 };
 
+/**
+ * Layout made of a field, a button, and an optional label.
+ *
+ * @class
+ * @extends OO.ui.FieldLayout
+ *
+ * @constructor
+ * @param {OO.ui.Widget} fieldWidget Field widget
+ * @param {OO.ui.ButtonWidget} buttonWidget Button widget
+ * @param {Object} [config] Configuration options
+ * @cfg {string} [align='left'] Alignment mode, either 'left', 'right', 'top' or 'inline'
+ * @cfg {string} [help] Explanatory text shown as a '?' icon.
+ */
+OO.ui.ActionFieldLayout = function OoUiActionFieldLayout( fieldWidget, buttonWidget, config ) {
+       // Configuration initialization
+       config = $.extend( { align: 'left' }, config );
+
+       // Properties (must be set before parent constructor, which calls #getTagName)
+       this.fieldWidget = fieldWidget;
+       this.buttonWidget = buttonWidget;
+
+       // Parent constructor
+       OO.ui.ActionFieldLayout.super.call( this, fieldWidget, config );
+
+       // Mixin constructors
+       OO.ui.LabelElement.call( this, config );
+
+       // Properties
+       this.$button = this.$( '<div>' )
+               .addClass( 'oo-ui-actionFieldLayout-button' )
+               .append( this.buttonWidget.$element );
+
+       this.$input = this.$( '<div>' )
+               .addClass( 'oo-ui-actionFieldLayout-input' )
+               .append( this.fieldWidget.$element );
+
+       this.$field
+               .addClass( 'oo-ui-actionFieldLayout' )
+               .append( this.$input, this.$button );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.ActionFieldLayout, OO.ui.FieldLayout );
+
 /**
  * Layout made of a fieldset and optional legend.
  *
@@ -8508,6 +8882,7 @@ OO.ui.ItemWidget.prototype.setElementGroup = function ( group ) {
  *
  * @class
  * @abstract
+ * @deprecated Use LookupElement instead.
  *
  * @constructor
  * @param {OO.ui.TextInputWidget} input Input widget
index 3918be7..8e1c3f0 100644 (file)
@@ -15,7 +15,7 @@
  */
 /**
  *
- * @description Create a sortable table with multi-column sorting capabilitys
+ * @description Create a sortable table with multi-column sorting capabilities
  *
  * @example $( 'table' ).tablesorter();
  * @desc Create a simple tablesorter interface.
index 52e0d4e..e66d8f6 100644 (file)
@@ -11,9 +11,6 @@
                fragment = null,
                shouldChangeFragment, index;
 
-       // Clear internal mw.config entries, so that no one tries to depend on them
-       mw.config.set( 'wgInternalRedirectTargetUrl', null );
-
        index = canonical.indexOf( '#' );
        if ( index !== -1 ) {
                fragment = canonical.slice( index );
index a9a985e..5622b32 100644 (file)
@@ -2,7 +2,7 @@
  * JavaScript for Special:Import
  */
 ( function ( $ ) {
-       function updateImportSubprojectList() {
+       function updateImportSubprojectList( firstTime ) {
                var $projectField = $( '#mw-import-table-interwiki #interwiki' ),
                        $subprojectField = $projectField.parent().find( '#subproject' ),
                        $selected = $projectField.find( ':selected' ),
@@ -14,7 +14,7 @@
                                option = document.createElement( 'option' );
                                option.appendChild( document.createTextNode( el ) );
                                option.setAttribute( 'value', el );
-                               if ( oldValue === el ) {
+                               if ( oldValue === el && firstTime !== true ) {
                                        option.setAttribute( 'selected', 'selected' );
                                }
                                return option;
@@ -29,7 +29,7 @@
                var $projectField = $( '#mw-import-table-interwiki #interwiki' );
                if ( $projectField.length ) {
                        $projectField.change( updateImportSubprojectList );
-                       updateImportSubprojectList();
+                       updateImportSubprojectList( true );
                }
        } );
 }( jQuery ) );
index c6ee1a7..f405c7a 100644 (file)
                                // URLs are less likely to have a useful extension, so don't include them in the
                                // extension check.
                                if (
+                                       mw.config.get( 'wgCheckFileExtensions' ) &&
                                        mw.config.get( 'wgStrictFileExtensions' ) &&
                                        mw.config.get( 'wgFileExtensions' ) &&
                                        $( this ).attr( 'id' ) !== 'wpUploadFileURL'
index 247f814..f5289de 100644 (file)
@@ -20,7 +20,7 @@
                if ( !$submit.length ) {
                        return;
                }
-               tabIndex = $submit.prop( 'tabindex' ) - 1;
+               tabIndex = $submit.prop( 'tabIndex' ) - 1;
                $captchaStuff = $content.find( '.captcha' );
 
                if ( $captchaStuff.length ) {
index be0c638..4829f5f 100644 (file)
 @checkboxSize: 2em;
 
 // We use the not selector to cancel out styling on IE 8 and below
-.mw-ui-checkbox:not(#noop) {
+// We also disable this styling on javascript disabled devices. This fixes the issue with
+// Opera Mini where checking/unchecking doesn't apply styling but potentially leaves other
+// more capable browsers with unstyled checkboxes.
+.client-js .mw-ui-checkbox:not(#noop) {
        // Position relatively so we can make use of absolute pseudo elements
        position: relative;
-       line-height: @checkboxSize;
+       display: table;
 
        * {
                // reset font sizes (see bug 72727)
                max-width: none;
                margin: 0;
                margin-right: 0.4em;
+               display: table-cell;
+
+               & + label {
+                       display: table-cell;
+               }
 
                // the pseudo before element of the label after the checkbox now looks like a checkbox
                & + label::before {
                        border-radius: @borderRadius;
                        width: @checkboxSize;
                        height: @checkboxSize;
+                       line-height: @checkboxSize;
                        background-color: #fff;
                        border: 1px solid @colorGray7;
+                       // align the checkbox to middle of the text
+                       top: 50%;
+                       margin-top: -1em;
                        .background-image-svg('images/checked.svg', 'images/checked.png');
                        .background-size( @checkboxSize - 0.2em, @checkboxSize - 0.2em );
                        background-repeat: no-repeat;
index bb012eb..1928699 100644 (file)
 
 @radioSize: 2em;
 
-// We use the not selector to cancel out styling on IE 8 and below
-.mw-ui-radio:not(#noop) {
+// We use the not selector to cancel out styling on IE 8 and below.
+// We also disable this styling on javascript disabled devices. This fixes the issue with
+// Opera Mini where checking/unchecking doesn't apply styling but potentially leaves other
+// more capable browsers with unstyled radio buttons.
+.client-js .mw-ui-radio:not(#noop) {
        // Position relatively so we can make use of absolute pseudo elements
        position: relative;
        line-height: @radioSize;
index 4afccda..9e20264 100644 (file)
        padding: 0.5em 1em;
 }
 
-.mw-json .value {
+.mw-json .value,
+.mw-json-single-value {
        background-color: #dcfae3;
        font-family: monospace, monospace;
        white-space: pre-wrap;
 }
 
+.mw-json-single-value {
+       background-color: #eee;
+}
+
 .mw-json-empty {
        background-color: #fff;
        font-style: italic;
index 6f9f0ab..1b86b61 100644 (file)
@@ -30,8 +30,7 @@
                 * @param {Date|null} [options.expires=wgCookieExpiration] The expiry date of the cookie.
                 *
                 *   Default cookie expiration is based on `wgCookieExpiration`.  If `wgCookieExpiration` is
-                *   0, a session cookie is set (expires when the browser is closed). For non-zero values of
-                *   `wgCookieExpiration`, the cookie expires `wgCookieExpiration` seconds from now.
+                *   0, a session cookie is set (expires when the browser is closed).
                 *
                 *   If options.expires is null, then a session cookie is set.
                 * @param {string} [options.prefix=wgCookiePrefix] The prefix of the key
index 8e9fc89..3ad2be5 100644 (file)
@@ -7,6 +7,9 @@
 /*jshint devel:true */
 ( function ( mw, $ ) {
 
+       var inspect,
+               hasOwn = Object.prototype.hasOwnProperty;
+
        function sortByProperty( array, prop, descending ) {
                var order = descending ? -1 : 1;
                return array.sort( function ( a, b ) {
                if ( !$.isNumeric( bytes ) || bytes === 0 ) { return bytes; }
                var i = 0, units = [ '', ' kB', ' MB', ' GB', ' TB', ' PB' ];
                for ( ; bytes >= 1024; bytes /= 1024 ) { i++; }
-               return bytes.toFixed( 1 ) + units[i];
+               // Maintain one decimal for kB and above, but don't
+               // add ".0" for bytes.
+               return bytes.toFixed( i > 0 ? 1 : 0 ) + units[i];
        }
 
        /**
         * @class mw.inspect
         * @singleton
         */
-       var inspect = {
+       inspect = {
 
                /**
                 * Return a map of all dependency relationships between loaded modules.
                        $.each( modules, function ( moduleIndex, moduleName ) {
                                var dependencies = mw.loader.moduleRegistry[moduleName].dependencies || [];
 
-                               graph[moduleName] = graph[moduleName] || { requiredBy: [] };
+                               if ( !hasOwn.call( graph, moduleName ) ) {
+                                       graph[moduleName] = { requiredBy: [] };
+                               }
                                graph[moduleName].requires = dependencies;
 
                                $.each( dependencies, function ( depIndex, depName ) {
-                                       graph[depName] = graph[depName] || { requiredBy: [] };
+                                       if ( !hasOwn.call( graph, depName ) ) {
+                                               graph[depName] = { requiredBy: [] };
+                                       }
                                        graph[depName].requiredBy.push( moduleName );
                                } );
                        } );
index 1763c8e..c7858ab 100644 (file)
@@ -10,8 +10,6 @@
 ( function ( $ ) {
        'use strict';
 
-       /* Private Members */
-
        var mw,
                hasOwn = Object.prototype.hasOwnProperty,
                slice = Array.prototype.slice,
                trackQueue = [];
 
        /**
-        * Log a message to window.console, if possible. Useful to force logging of some
-        * errors that are otherwise hard to detect (I.e., this logs also in production mode).
-        * Gets console references in each invocation, so that delayed debugging tools work
-        * fine. No need for optimization here, which would only result in losing logs.
+        * Log a message to window.console, if possible.
+        *
+        * Useful to force logging of some  errors that are otherwise hard to detect (i.e., this logs
+        * also in production mode). Gets console references in each invocation instead of caching the
+        * reference, so that debugging tools loaded later are supported (e.g. Firebug Lite in IE).
         *
         * @private
         * @method log_
-        * @param {string} msg text for the log entry.
+        * @param {string} msg Text for the log entry.
         * @param {Error} [e]
         */
        function log( msg, e ) {
                var console = window.console;
                if ( console && console.log ) {
                        console.log( msg );
-                       // If we have an exception object, log it through .error() to trigger
-                       // proper stacktraces in browsers that support it. There are no (known)
-                       // browsers that don't support .error(), that do support .log() and
-                       // have useful exception handling through .log().
+                       // If we have an exception object, log it to the error channel to trigger a
+                       // proper stacktraces in browsers that support it. No fallback as we have no browsers
+                       // that don't support error(), but do support log().
                        if ( e && console.error ) {
                                console.error( String( e ), e );
                        }
                }
        }
 
-       // String format helper. Replaces $1, $2 .. $N placeholders with positional
-       // args. Used by Message.prototype.parser() and exported as mw.format().
-       function format( formatString ) {
-               var parameters = slice.call( arguments, 1 );
-               return formatString.replace( /\$(\d+)/g, function ( str, match ) {
-                       var index = parseInt( match, 10 ) - 1;
-                       return parameters[index] !== undefined ? parameters[index] : '$' + match;
-               } );
-       }
-
-       /* Object constructors */
-
        /**
-        * Creates an object that can be read from or written to from prototype functions
-        * that allow both single and multiple variables at once.
+        * Create an object that can be read from or written to from methods that allow
+        * interaction both with single and multiple properties at once.
         *
         *     @example
         *
-        *     var addies, wanted, results;
+        *     var collection, query, results;
         *
         *     // Create your address book
-        *     addies = new mw.Map();
+        *     collection = new mw.Map();
         *
         *     // This data could be coming from an external source (eg. API/AJAX)
-        *     addies.set( {
-        *         'John Doe' : '10 Wall Street, New York, USA',
-        *         'Jane Jackson' : '21 Oxford St, London, UK',
-        *         'Dominique van Halen' : 'Kalverstraat 7, Amsterdam, NL'
+        *     collection.set( {
+        *         'John Doe': 'john@example.org',
+        *         'Jane Doe': 'jane@example.org',
+        *         'George van Halen': 'gvanhalen@example.org'
         *     } );
         *
-        *     wanted = ['Dominique van Halen', 'George Johnson', 'Jane Jackson'];
+        *     wanted = ['John Doe', 'Jane Doe', 'Daniel Jackson'];
         *
         *     // You can detect missing keys first
-        *     if ( !addies.exists( wanted ) ) {
-        *         // One or more are missing (in this case: "George Johnson")
+        *     if ( !collection.exists( wanted ) ) {
+        *         // One or more are missing (in this case: "Daniel Jackson")
         *         mw.log( 'One or more names were not found in your address book' );
         *     }
         *
-        *     // Or just let it give you what it can
-        *     results = addies.get( wanted, 'Middle of Nowhere, Alaska, US' );
-        *     mw.log( results['Jane Jackson'] ); // "21 Oxford St, London, UK"
-        *     mw.log( results['George Johnson'] ); // "Middle of Nowhere, Alaska, US"
+        *     // Or just let it give you what it can. Optionally fill in from a default.
+        *     results = collection.get( wanted, 'nobody@example.com' );
+        *     mw.log( results['Jane Doe'] ); // "jane@example.org"
+        *     mw.log( results['Daniel Jackson'] ); // "nobody@example.com"
         *
         * @class mw.Map
         *
         * @constructor
-        * @param {Object|boolean} [values] Value-bearing object to map, defaults to an empty object.
+        * @param {Object|boolean} [values] The value-baring object to be mapped. Defaults to an
+        *  empty object.
         *  For backwards-compatibility with mw.config, this can also be `true` in which case values
-        *  will be copied to the Window object as global variables (T72470). Values are copied in one
-        *  direction only. Changes to globals are not reflected in the map.
+        *  are copied to the Window object as global variables (T72470). Values are copied in
+        *  one direction only. Changes to globals are not reflected in the map.
         */
        function Map( values ) {
                if ( values === true ) {
 
        Map.prototype = {
                /**
-                * Get the value of one or multiple keys.
+                * Get the value of one or more keys.
                 *
-                * If called with no arguments, all values will be returned.
+                * If called with no arguments, all values are returned.
                 *
-                * @param {string|Array} selection String key or array of keys to get values for.
-                * @param {Mixed} [fallback] Value to use in case key(s) do not exist.
-                * @return mixed If selection was a string returns the value or null,
-                *  If selection was an array, returns an object of key/values (value is null if not found),
-                *  If selection was not passed or invalid, will return the 'values' object member (be careful as
-                *  objects are always passed by reference in JavaScript!).
-                * @return {string|Object|null} Values as a string or object, null if invalid/inexistent.
+                * @param {string|Array} [selection] Key or array of keys to retrieve values for.
+                * @param {Mixed} [fallback=null] Value for keys that don't exist.
+                * @return {Mixed|Object| null} If selection was a string, returns the value,
+                *  If selection was an array, returns an object of key/values.
+                *  If no selection is passed, the 'values' container is returned. (Beware that,
+                *  as is the default in JavaScript, the object is returned by reference.)
                 */
                get: function ( selection, fallback ) {
                        var results, i;
                                return this.values;
                        }
 
-                       // invalid selection key
+                       // Invalid selection key
                        return null;
                },
 
                /**
-                * Sets one or multiple key/value pairs.
+                * Set one or more key/value pairs.
                 *
-                * @param {string|Object} selection String key to set value for, or object mapping keys to values.
+                * @param {string|Object} selection Key to set value for, or object mapping keys to values
                 * @param {Mixed} [value] Value to set (optional, only in use when key is a string)
-                * @return {boolean} This returns true on success, false on failure.
+                * @return {boolean} True on success, false on failure
                 */
                set: function ( selection, value ) {
                        var s;
                                }
                                return true;
                        }
-                       if ( typeof selection === 'string' && arguments.length ) {
+                       if ( typeof selection === 'string' && arguments.length > 1 ) {
                                this.values[selection] = value;
                                return true;
                        }
                },
 
                /**
-                * Checks if one or multiple keys exist.
+                * Check if one or more keys exist.
                 *
-                * @param {Mixed} selection String key or array of keys to check
-                * @return {boolean} Existence of key(s)
+                * @param {Mixed} selection Key or array of keys to check
+                * @return {boolean} True if the key(s) exist
                 */
                exists: function ( selection ) {
                        var s;
         * @class mw.Message
         *
         * @constructor
-        * @param {mw.Map} map Message storage
+        * @param {mw.Map} map Message store
         * @param {string} key
         * @param {Array} [parameters]
         */
 
        Message.prototype = {
                /**
-                * Simple message parser, does $N replacement and nothing else.
+                * Get parsed contents of the message.
                 *
+                * The default parser does simple $N replacements and nothing else.
                 * This may be overridden to provide a more complex message parser.
-                *
-                * The primary override is in mediawiki.jqueryMsg.
+                * The primary override is in the mediawiki.jqueryMsg module.
                 *
                 * This function will not be called for nonexistent messages.
+                *
+                * @return {string} Parsed message
                 */
                parser: function () {
-                       return format.apply( null, [ this.map.get( this.key ) ].concat( this.parameters ) );
+                       return mw.format.apply( null, [ this.map.get( this.key ) ].concat( this.parameters ) );
                },
 
                /**
-                * Appends (does not replace) parameters for replacement to the .parameters property.
+                * Add (does not replace) parameters for `N$` placeholder values.
                 *
                 * @param {Array} parameters
                 * @chainable
                },
 
                /**
-                * Converts message object to its string form based on the state of format.
+                * Convert message object to its string form based on current format.
                 *
-                * @return {string} Message as a string in the current form or `<key>` if key does not exist.
+                * @return {string} Message as a string in the current form, or `<key>` if key
+                *  does not exist.
                 */
                toString: function () {
                        var text;
                },
 
                /**
-                * Changes format to 'parse' and converts message to string
+                * Change format to 'parse' and convert message to string
                 *
                 * If jqueryMsg is loaded, this parses the message text from wikitext
                 * (where supported) to HTML
                },
 
                /**
-                * Changes format to 'plain' and converts message to string
+                * Change format to 'plain' and convert message to string
                 *
                 * This substitutes parameters, but otherwise does not change the
                 * message text.
                },
 
                /**
-                * Changes format to 'text' and converts message to string
+                * Change format to 'text' and convert message to string
                 *
                 * If jqueryMsg is loaded, {{-transformation is done where supported
                 * (such as {{plural:}}, {{gender:}}, {{int:}}).
                 *
-                * Otherwise, it is equivalent to plain.
+                * Otherwise, it is equivalent to plain
+                *
+                * @return {string} String form of text message
                 */
                text: function () {
                        this.format = 'text';
                },
 
                /**
-                * Changes the format to 'escaped' and converts message to string
+                * Change the format to 'escaped' and convert message to string
                 *
-                * This is equivalent to using the 'text' format (see text method), then
+                * This is equivalent to using the 'text' format (see #text), then
                 * HTML-escaping the output.
                 *
                 * @return {string} String form of html escaped message
                },
 
                /**
-                * Checks if message exists
+                * Check if a message exists
                 *
                 * @see mw.Map#exists
                 * @return {boolean}
         * @class mw
         */
        mw = {
-               /* Public Members */
 
                /**
                 * Get the current time, measured in milliseconds since January 1, 1970 (UTC).
                /**
                 * Format a string. Replace $1, $2 ... $N with positional arguments.
                 *
-                * @method
+                * Used by Message#parser().
+                *
                 * @since 1.25
                 * @param {string} fmt Format string
-                * @param {Mixed...} parameters Substitutions for $N placeholders.
+                * @param {Mixed...} parameters Values for $N replacements
                 * @return {string} Formatted string
                 */
-               format: format,
+               format: function ( formatString ) {
+                       var parameters = slice.call( arguments, 1 );
+                       return formatString.replace( /\$(\d+)/g, function ( str, match ) {
+                               var index = parseInt( match, 10 ) - 1;
+                               return parameters[index] !== undefined ? parameters[index] : '$' + match;
+                       } );
+               },
 
                /**
                 * Track an analytic event.
                },
 
                /**
-                * Register a handler for subset of analytic events, specified by topic
+                * Register a handler for subset of analytic events, specified by topic.
                 *
                 * Handlers will be called once for each tracked event, including any events that fired before the
                 * handler was registered; 'this' is set to a plain object with a 'timeStamp' property indicating
                 *
                 * @param {string} topic Handle events whose name starts with this string prefix
                 * @param {Function} callback Handler to call for each matching tracked event
+                * @param {string} callback.topic
+                * @param {Object} [callback.data]
                 */
                trackSubscribe: function ( topic, callback ) {
                        var seen = 0;
                        } );
                },
 
-               // Make the Map constructor publicly available.
+               // Expose Map constructor
                Map: Map,
 
-               // Make the Message constructor publicly available.
+               // Expose Message constructor
                Message: Message,
 
                /**
-                * Map of configuration values
+                * Map of configuration values.
                 *
                 * Check out [the complete list of configuration values](https://www.mediawiki.org/wiki/Manual:Interface/JavaScript#mw.config)
                 * on mediawiki.org.
                 *
                 * @property {mw.Map} config
                 */
-               // Dummy placeholder. Re-assigned in ResourceLoaderStartUpModule to an instance of `mw.Map`.
+               // Dummy placeholder later assigned in ResourceLoaderStartUpModule
                config: null,
 
                /**
                 * Empty object that plugins can be installed in.
+                *
                 * @property
                 */
                libs: {},
                legacy: {},
 
                /**
-                * Localization system
+                * Store for messages.
+                *
                 * @property {mw.Map}
                 */
                messages: new Map(),
 
                /**
-                * Templates associated with a module
+                * Store for templates associated with a module.
+                *
                 * @property {mw.Map}
                 */
                templates: new Map(),
 
-               /* Public Methods */
-
                /**
                 * Get a message object.
                 *
                 *
                 * @see mw.Message
                 * @param {string} key Key of message to get
-                * @param {Mixed...} parameters Parameters for the $N replacements in messages.
+                * @param {Mixed...} parameters Values for $N replacements
                 * @return {mw.Message}
                 */
                message: function ( key ) {
-                       // Variadic arguments
                        var parameters = slice.call( arguments, 1 );
                        return new Message( mw.messages, key, parameters );
                },
                 *
                 * @see mw.Message
                 * @param {string} key Key of message to get
-                * @param {Mixed...} parameters Parameters for the $N replacements in messages.
+                * @param {Mixed...} parameters Values for $N replacements
                 * @return {string}
                 */
                msg: function () {
                        /**
                         * Write a message the console's warning channel.
                         * Also logs a stacktrace for easier debugging.
-                        * Each action is silently ignored if the browser doesn't support it.
+                        * Actions not supported by the browser console are silently ignored.
                         *
                         * @param {string...} msg Messages to output to console
                         */
                         * @param {Object} obj Host object of deprecated property
                         * @param {string} key Name of property to create in `obj`
                         * @param {Mixed} val The value this property should return when accessed
-                        * @param {string} [msg] Optional text to include in the deprecation message.
+                        * @param {string} [msg] Optional text to include in the deprecation message
                         */
                        log.deprecate = !Object.defineProperty ? function ( obj, key, val ) {
                                obj[key] = val;
                        } : function ( obj, key, val, msg ) {
                                msg = 'Use of "' + key + '" is deprecated.' + ( msg ? ( ' ' + msg ) : '' );
+                               // Support: IE8
+                               // Can throw on Object.defineProperty.
                                try {
                                        Object.defineProperty( obj, key, {
                                                configurable: true,
                                                }
                                        } );
                                } catch ( err ) {
-                                       // IE8 can throw on Object.defineProperty
-                                       // Create a copy of the value to the object.
+                                       // Fallback to creating a copy of the value to the object.
                                        obj[key] = val;
                                }
                        };
                }() ),
 
                /**
-                * Client-side module loader which integrates with the MediaWiki ResourceLoader
+                * Client for ResourceLoader server end point.
+                *
+                * This client is in charge of maintaining the module registry and state
+                * machine, initiating network (batch) requests for loading modules, as
+                * well as dependency resolution and execution of source code.
+                *
+                * For more information, refer to
+                * <https://www.mediawiki.org/wiki/ResourceLoader/Features>
+                *
                 * @class mw.loader
                 * @singleton
                 */
                loader: ( function () {
 
-                       /* Private Members */
-
                        /**
-                        * Mapping of registered modules
+                        * Mapping of registered modules.
                         *
-                        * The jquery module is pre-registered, because it must have already
-                        * been provided for this object to have been built, and in debug mode
-                        * jquery would have been provided through a unique loader request,
-                        * making it impossible to hold back registration of jquery until after
-                        * mediawiki.
-                        *
-                        * For exact details on support for script, style and messages, look at
-                        * mw.loader.implement.
+                        * See #implement for exact details on support for script, style and messages.
                         *
                         * Format:
+                        *
                         *     {
                         *         'moduleName': {
-                        *             // At registry
-                        *             'version': ############## (unix timestamp),
+                        *             // From startup mdoule
+                        *             'version': ############## (unix timestamp)
                         *             'dependencies': ['required.foo', 'bar.also', ...], (or) function () {}
-                        *             'group': 'somegroup', (or) null,
-                        *             'source': 'local', 'someforeignwiki', (or) null
-                        *             'state': 'registered', 'loaded', 'loading', 'ready', 'error' or 'missing'
+                        *             'group': 'somegroup', (or) null
+                        *             'source': 'local', (or) 'anotherwiki'
                         *             'skip': 'return !!window.Example', (or) null
+                        *             'state': 'registered', 'loaded', 'loading', 'ready', 'error', or 'missing'
                         *
                         *             // Added during implementation
-                        *             'skipped': true,
-                        *             'script': ...,
-                        *             'style': ...,
-                        *             'messages': { 'key': 'value' },
+                        *             'skipped': true
+                        *             'script': ...
+                        *             'style': ...
+                        *             'messages': { 'key': 'value' }
                         *         }
                         *     }
                         *
                         * @private
                         */
                        var registry = {},
-                               //
                                // Mapping of sources, keyed by source-id, values are strings.
+                               //
                                // Format:
-                               //      {
-                               //              'sourceId': 'http://foo.bar/w/load.php'
-                               //      }
+                               //
+                               //     {
+                               //         'sourceId': 'http://example.org/w/load.php'
+                               //     }
                                //
                                sources = {},
+
                                // List of modules which will be loaded as when ready
                                batch = [],
+
                                // List of modules to be loaded
                                queue = [],
+
                                // List of callback functions waiting for modules to be ready to be called
                                jobs = [],
+
                                // Selector cache for the marker element. Use getMarker() to get/use the marker!
                                $marker = null,
-                               // Buffer for addEmbeddedCSS.
+
+                               // Buffer for #addEmbeddedCSS
                                cssBuffer = '',
-                               // Callbacks for addEmbeddedCSS.
-                               cssCallbacks = $.Callbacks();
 
-                       /* Private methods */
+                               // Callbacks for #addEmbeddedCSS
+                               cssCallbacks = $.Callbacks();
 
                        function getMarker() {
-                               // Cached
                                if ( !$marker ) {
+                                       // Cache
                                        $marker = $( 'meta[name="ResourceLoaderDynamicStyles"]' );
                                        if ( !$marker.length ) {
                                                mw.log( 'No <meta name="ResourceLoaderDynamicStyles"> found, inserting dynamically' );
                        }
 
                        /**
-                        * Create a new style tag and add it to the DOM.
+                        * Create a new style element and add it to the DOM.
                         *
                         * @private
                         * @param {string} text CSS text
-                        * @param {HTMLElement|jQuery} [nextnode=document.head] The element where the style tag should be
-                        *  inserted before. Otherwise it will be appended to `<head>`.
-                        * @return {HTMLElement} Reference to the created `<style>` element.
+                        * @param {HTMLElement|jQuery} [nextnode=document.head] The element where the style tag
+                        *  should be inserted before
+                        * @return {HTMLElement} Reference to the created style element
                         */
                        function newStyleTag( text, nextnode ) {
                                var s = document.createElement( 'style' );
-                               // Insert into document before setting cssText (bug 33305)
+                               // Support: IE
+                               // Must attach to document before setting cssText (bug 33305)
                                if ( nextnode ) {
-                                       // Must be inserted with native insertBefore, not $.fn.before.
-                                       // When using jQuery to insert it, like $nextnode.before( s ),
-                                       // then IE6 will throw "Access is denied" when trying to append
-                                       // to .cssText later. Some kind of weird security measure.
-                                       // http://stackoverflow.com/q/12586482/319266
-                                       // Works: jsfiddle.net/zJzMy/1
-                                       // Fails: jsfiddle.net/uJTQz
-                                       // Works again: http://jsfiddle.net/Azr4w/ (diff: the next 3 lines)
-                                       if ( nextnode.jquery ) {
-                                               nextnode = nextnode.get( 0 );
-                                       }
-                                       nextnode.parentNode.insertBefore( s, nextnode );
+                                       $( nextnode ).before( s );
                                } else {
                                        document.getElementsByTagName( 'head' )[0].appendChild( s );
                                }
                                if ( s.styleSheet ) {
-                                       // IE
+                                       // Support: IE6-10
+                                       // Old IE ignores appended text nodes, access stylesheet directly.
                                        s.styleSheet.cssText = text;
                                } else {
-                                       // Other browsers.
-                                       // (Safari sometimes borks on non-string values,
-                                       // play safe by casting to a string, just in case.)
-                                       s.appendChild( document.createTextNode( String( text ) ) );
+                                       // Standard behaviour
+                                       s.appendChild( document.createTextNode( text ) );
                                }
                                return s;
                        }
 
                        /**
-                        * Checks whether it is safe to add this css to a stylesheet.
+                        * Check whether given styles are safe to to a stylesheet.
                         *
                         * @private
                         * @param {string} cssText
                                // Yield once before inserting the <style> tag. There are likely
                                // more calls coming up which we can combine this way.
                                // Appending a stylesheet and waiting for the browser to repaint
-                               // is fairly expensive, this reduces it (bug 45810)
+                               // is fairly expensive, this reduces that (bug 45810)
                                if ( cssText ) {
                                        // Be careful not to extend the buffer with css that needs a new stylesheet
                                        if ( !cssBuffer || canExpandStylesheetWith( cssText ) ) {
                                                cssBuffer += '\n' + cssText;
                                                // TODO: Use requestAnimationFrame in the future which will
                                                // perform even better by not injecting styles while the browser
-                                               // is paiting.
+                                               // is painting.
                                                setTimeout( function () {
                                                        // Can't pass addEmbeddedCSS to setTimeout directly because Firefox
                                                        // (below version 13) has the non-standard behaviour of passing a
                                } else if ( cssBuffer ) {
                                        cssText = cssBuffer;
                                        cssBuffer = '';
+
                                } else {
-                                       // This is a delayed call, but buffer is already cleared by
+                                       // This is a delayed call, but buffer was already cleared by
                                        // another delayed call.
                                        return;
                                }
                                if ( 'documentMode' in document && document.documentMode <= 9 ) {
 
                                        $style = getMarker().prev();
-                                       // Verify that the element before Marker actually is a
+                                       // Verify that the element before the marker actually is a
                                        // <style> tag and one that came from ResourceLoader
                                        // (not some other style tag or even a `<meta>` or `<script>`).
                                        if ( $style.data( 'ResourceLoaderDynamicStyleTag' ) === true ) {
                                                // There's already a dynamic <style> tag present and
                                                // canExpandStylesheetWith() gave a green light to append more to it.
                                                styleEl = $style.get( 0 );
+                                               // Support: IE6-10
                                                if ( styleEl.styleSheet ) {
                                                        try {
-                                                               styleEl.styleSheet.cssText += cssText; // IE
+                                                               styleEl.styleSheet.cssText += cssText;
                                                        } catch ( e ) {
                                                                log( 'Stylesheet error', e );
                                                        }
                                                } else {
-                                                       styleEl.appendChild( document.createTextNode( String( cssText ) ) );
+                                                       styleEl.appendChild( document.createTextNode( cssText ) );
                                                }
                                                cssCallbacks.fire().empty();
                                                return;
                        }
 
                        /**
-                        * Convert UNIX timestamp to ISO8601 format
-                        * @param {number} timestamp UNIX timestamp
+                        * Zero-pad three numbers.
+                        *
                         * @private
+                        * @param {number} a
+                        * @param {number} b
+                        * @param {number} c
+                        * @return {string}
+                        */
+                       function pad( a, b, c ) {
+                               return [
+                                       a < 10 ? '0' + a : a,
+                                       b < 10 ? '0' + b : b,
+                                       c < 10 ? '0' + c : c
+                               ].join( '' );
+                       }
+
+                       /**
+                        * Convert UNIX timestamp to ISO8601 format.
+                        *
+                        * @private
+                        * @param {number} timestamp UNIX timestamp
                         */
                        function formatVersionNumber( timestamp ) {
                                var     d = new Date();
-                               function pad( a, b, c ) {
-                                       return [a < 10 ? '0' + a : a, b < 10 ? '0' + b : b, c < 10 ? '0' + c : c].join( '' );
-                               }
                                d.setTime( timestamp * 1000 );
                                return [
-                                       pad( d.getUTCFullYear(), d.getUTCMonth() + 1, d.getUTCDate() ), 'T',
-                                       pad( d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds() ), 'Z'
+                                       pad( d.getUTCFullYear(), d.getUTCMonth() + 1, d.getUTCDate() ),
+                                       'T',
+                                       pad( d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds() ),
+                                       'Z'
                                ].join( '' );
                        }
 
                        /**
-                        * Resolves dependencies and detects circular references.
+                        * Resolve dependencies and detect circular references.
                         *
                         * @private
                         * @param {string} module Name of the top-level module whose dependencies shall be
-                        *   resolved and sorted.
+                        *  resolved and sorted.
                         * @param {Array} resolved Returns a topological sort of the given module and its
-                        *   dependencies, such that later modules depend on earlier modules. The array
-                        *   contains the module names. If the array contains already some module names,
-                        *   this function appends its result to the pre-existing array.
+                        *  dependencies, such that later modules depend on earlier modules. The array
+                        *  contains the module names. If the array contains already some module names,
+                        *  this function appends its result to the pre-existing array.
                         * @param {Object} [unresolved] Hash used to track the current dependency
-                        *   chain; used to report loops in the dependency graph.
+                        *  chain; used to report loops in the dependency graph.
                         * @throws {Error} If any unregistered module or a dependency loop is encountered
                         */
                        function sortDependencies( module, resolved, unresolved ) {
                                        }
                                }
                                if ( $.inArray( module, resolved ) !== -1 ) {
-                                       // Module already resolved; nothing to do.
+                                       // Module already resolved; nothing to do
                                        return;
                                }
-                               // unresolved is optional, supply it if not passed in
+                               // Create unresolved if not passed in
                                if ( !unresolved ) {
                                        unresolved = {};
                                }
                        }
 
                        /**
-                        * Gets a list of module names that a module depends on in their proper dependency
+                        * Get a list of module names that a module depends on in their proper dependency
                         * order.
                         *
                         * @private
                         * @param {string} module Module name or array of string module names
-                        * @return {Array} list of dependencies, including 'module'.
+                        * @return {Array} List of dependencies, including 'module'.
                         * @throws {Error} If circular reference is detected
                         */
                        function resolve( module ) {
                        }
 
                        /**
-                        * Narrows a list of module names down to those matching a specific
-                        * state (see comment on top of this scope for a list of valid states).
+                        * Narrow down a list of module names to those matching a specific
+                        * state (see #registry for a list of valid states).
+                        *
                         * One can also filter for 'unregistered', which will return the
                         * modules names that don't have a registry entry.
                         *
                         * @private
                         * @param {string|string[]} states Module states to filter by
-                        * @param {Array} [modules] List of module names to filter (optional, by default the entire
-                        * registry is used)
+                        * @param {Array} [modules] List of module names to filter (optional, by default the
+                        * entire registry is used)
                         * @return {Array} List of filtered module names
                         */
                        function filter( states, modules ) {
                        }
 
                        /**
-                        * A module has entered state 'ready', 'error', or 'missing'. Automatically update pending jobs
-                        * and modules that depend upon this module. if the given module failed, propagate the 'error'
-                        * state up the dependency tree; otherwise, execute all jobs/modules that now have all their
-                        * dependencies satisfied. On jobs depending on a failed module, run the error callback, if any.
+                        * A module has entered state 'ready', 'error', or 'missing'. Automatically update
+                        * pending jobs and modules that depend upon this module. If the given module failed,
+                        * propagate the 'error' state up the dependency tree. Otherwise, go ahead an execute
+                        * all jobs/modules now having their dependencies satisfied.
+                        *
+                        * Jobs that depend on a failed module, will have their error callback ran (if any).
                         *
                         * @private
                         * @param {string} module Name of module that entered one of the states 'ready', 'error', or 'missing'.
                        function handlePending( module ) {
                                var j, job, hasErrors, m, stateChange;
 
-                               // Modules.
                                if ( $.inArray( registry[module].state, ['error', 'missing'] ) !== -1 ) {
                                        // If the current module failed, mark all dependent modules also as failed.
                                        // Iterate until steady-state to propagate the error state upwards in the
                                                stateChange = false;
                                                for ( m in registry ) {
                                                        if ( $.inArray( registry[m].state, ['error', 'missing'] ) === -1 ) {
-                                                               if ( filter( ['error', 'missing'], registry[m].dependencies ).length > 0 ) {
+                                                               if ( filter( ['error', 'missing'], registry[m].dependencies ).length ) {
                                                                        registry[m].state = 'error';
                                                                        stateChange = true;
                                                                }
                                 */
                                function addLink( media, url ) {
                                        var el = document.createElement( 'link' );
-                                       // For IE: Insert in document *before* setting href
+                                       // Support: IE
+                                       // Insert in document *before* setting href
                                        getMarker().before( el );
                                        el.rel = 'stylesheet';
                                        if ( media && media !== 'all' ) {
                                        currReqBase
                                );
                                request = sortQuery( request );
-                               // Append &* to avoid triggering the IE6 extension check
+                               // Support: IE6
+                               // Append &* to satisfy load.php's WebRequest::checkUrlExtension test. This script
+                               // isn't actually used in IE6, but MediaWiki enforces it in general.
                                addScript( sourceLoadScript + '?' + $.param( request ) + '&*', null, async );
                        }
 
                                 * the modules are registered.
                                 *
                                 * @param {string|Array} module Module name or array of arrays, each containing
-                                *   a list of arguments compatible with this method
+                                *  a list of arguments compatible with this method
                                 * @param {number} version Module version number as a timestamp (falls backs to 0)
                                 * @param {string|Array|Function} dependencies One string or array of strings of module
                                 *  names on which this module depends, or a function that returns that array.
                                        }
                                        // Allow calling with an external url or single dependency as a string
                                        if ( typeof modules === 'string' ) {
-                                               // Support adding arbitrary external scripts
                                                if ( /^(https?:)?\/\//.test( modules ) ) {
                                                        if ( async === undefined ) {
                                                                // Assume async for bug 34542
                                                                async = true;
                                                        }
                                                        if ( type === 'text/css' ) {
-                                                               // IE7-8 throws security warnings when inserting a <link> tag
-                                                               // with a protocol-relative URL set though attributes (instead of
-                                                               // properties) - when on HTTPS. See also bug 41331.
+                                                               // Support: IE 7-8
+                                                               // Use properties instead of attributes as IE throws security
+                                                               // warnings when inserting a <link> tag with a protocol-relative
+                                                               // URL set though attributes - when on HTTPS. See bug 41331.
                                                                l = document.createElement( 'link' );
                                                                l.rel = 'stylesheet';
                                                                l.href = modules;
                                        },
 
                                        /**
-                                        * Get a string key on which to vary the module cache.
+                                        * Get a key on which to vary the module cache.
                                         * @return {string} String of concatenated vary conditions.
                                         */
                                        getVary: function () {
                                        },
 
                                        /**
-                                        * Get a string key for a specific module. The key format is '[name]@[version]'.
+                                        * Get a key for a specific module. The key format is '[name]@[version]'.
                                         *
                                         * @param {string} module Module name
                                         * @return {string|null} Module key or null if module does not exist
                                 *  - null or undefined: The short closing form is used, e.g. `<br/>`.
                                 *  - this.Raw: The value attribute is included without escaping.
                                 *  - this.Cdata: The value attribute is included, and an exception is
-                                *   thrown if it contains an illegal ETAGO delimiter.
-                                *   See <http://www.w3.org/TR/1999/REC-html401-19991224/appendix/notes.html#h-B.3.2>.
+                                *    thrown if it contains an illegal ETAGO delimiter.
+                                *    See <http://www.w3.org/TR/1999/REC-html401-19991224/appendix/notes.html#h-B.3.2>.
                                 * @return {string} HTML
                                 */
                                element: function ( name, attrs, contents ) {
diff --git a/tests/frontend/Gruntfile.js b/tests/frontend/Gruntfile.js
deleted file mode 100644 (file)
index fd89e56..0000000
+++ /dev/null
@@ -1,117 +0,0 @@
-/*!
- * Grunt file
- */
-
-/*jshint node:true */
-module.exports = function ( grunt ) {
-       grunt.loadNpmTasks( 'grunt-contrib-jshint' );
-       grunt.loadNpmTasks( 'grunt-contrib-watch' );
-       grunt.loadNpmTasks( 'grunt-banana-checker' );
-       grunt.loadNpmTasks( 'grunt-jscs' );
-       grunt.loadNpmTasks( 'grunt-jsonlint' );
-       grunt.loadNpmTasks( 'grunt-karma' );
-
-       grunt.file.setBase(  __dirname + '/../..' );
-
-       var wgServer = process.env.MW_SERVER,
-               wgScriptPath = process.env.MW_SCRIPT_PATH;
-
-       grunt.initConfig( {
-               pkg: grunt.file.readJSON( __dirname + '/package.json' ),
-               jshint: {
-                       options: {
-                               jshintrc: true
-                       },
-                       all: [
-                               '*.js',
-                               '{includes,languages,resources,skins,tests}/**/*.js'
-                       ]
-               },
-               jscs: {
-                       all: [
-                               '<%= jshint.all %>',
-                               // Auto-generated file with JSON (double quotes)
-                               '!tests/qunit/data/mediawiki.jqueryMsg.data.js',
-                               // Skip functions are stored as script files but wrapped in a function when
-                               // executed. node-jscs trips on the would-be "Illegal return statement".
-                               '!resources/src/*-skip.js'
-
-                       // Exclude all files ignored by jshint
-                       ].concat( grunt.file.read( '.jshintignore' ).split( '\n' ).reduce( function ( patterns, pattern ) {
-                               // Filter out empty lines
-                               if ( pattern.length && pattern[0] !== '#' ) {
-                                       patterns.push( '!' + pattern );
-                               }
-                               return patterns;
-                       }, [] ) )
-               },
-               jsonlint: {
-                       all: [
-                               '.jscsrc',
-                               '{languages,maintenance,resources}/**/*.json',
-                               'tests/frontend/package.json'
-                       ]
-               },
-               banana: {
-                       core: 'languages/i18n/',
-                       api: 'includes/api/i18n/',
-                       installer: 'includes/installer/i18n/'
-               },
-               watch: {
-                       files: [
-                               '<%= jscs.all %>',
-                               '<%= jsonlint.all %>',
-                               '.jshintignore',
-                               '.jshintrc'
-                       ],
-                       tasks: 'test'
-               },
-               karma: {
-                       options: {
-                               proxies: ( function () {
-                                       var obj = {};
-                                       // Set up a proxy for requests to relative urls inside wgScriptPath. Uses a
-                                       // property accessor instead of plain obj[wgScriptPath] assignment as throw if
-                                       // unset. Running grunt normally (e.g. npm test), should not fail over this.
-                                       // This ensures 'npm test' works out of the box, statically, on a git clone
-                                       // without MediaWiki fully installed or some environment variables set.
-                                       Object.defineProperty( obj, wgScriptPath, {
-                                               enumerable: true,
-                                               get: function () {
-                                                       if ( !wgServer ) {
-                                                               grunt.fail.fatal( 'MW_SERVER is not set' );
-                                                       }
-                                                       if ( !wgScriptPath ) {
-                                                               grunt.fail.fatal( 'MW_SCRIPT_PATH is not set' );
-                                                       }
-                                                       return wgServer + wgScriptPath;
-                                               }
-                                       } );
-                                       return obj;
-                               }() ),
-                               files: [ {
-                                       pattern: wgServer + wgScriptPath + '/index.php?title=Special:JavaScriptTest/qunit/export',
-                                       watched: false,
-                                       included: true,
-                                       served: false
-                               } ],
-                               frameworks: [ 'qunit' ],
-                               reporters: [ 'dots' ],
-                               singleRun: true,
-                               autoWatch: false
-                       },
-                       main: {
-                               browsers: [ 'Chrome' ]
-                       },
-                       more: {
-                               browsers: [ 'Chrome', 'Firefox' ]
-                       }
-               }
-       } );
-
-       grunt.registerTask( 'lint', ['jshint', 'jscs', 'jsonlint', 'banana'] );
-       grunt.registerTask( 'qunit', 'karma:main' );
-
-       grunt.registerTask( 'test', ['lint'] );
-       grunt.registerTask( 'default', 'test' );
-};
diff --git a/tests/frontend/package.json b/tests/frontend/package.json
deleted file mode 100644 (file)
index 101fcd9..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-{
-  "name": "mediawiki",
-  "version": "0.0.0",
-  "scripts": {
-    "test": "grunt test"
-  },
-  "devDependencies": {
-    "grunt": "0.4.2",
-    "grunt-banana-checker": "0.2.0",
-    "grunt-contrib-jshint": "0.10.0",
-    "grunt-contrib-watch": "0.6.1",
-    "grunt-jscs": "0.8.1",
-    "grunt-jsonlint": "1.0.4",
-    "grunt-karma": "0.9.0",
-    "karma": "0.12.28",
-    "karma-chrome-launcher": "0.1.7",
-    "karma-firefox-launcher": "0.1.3",
-    "karma-qunit": "0.1.4",
-    "qunitjs": "1.15.0"
-  }
-}
index f960f48..36ad3cc 100644 (file)
@@ -340,4 +340,25 @@ class SanitizerTest extends MediaWikiTestCase {
                        $message
                );
        }
+
+       /**
+        * @dataProvider provideEscapeHtmlAllowEntities
+        * @covers Sanitizer::escapeHtmlAllowEntities
+        */
+       public function testEscapeHtmlAllowEntities( $expected, $html ) {
+               $this->assertEquals(
+                       $expected,
+                       Sanitizer::escapeHtmlAllowEntities( $html )
+               );
+       }
+
+       public static function provideEscapeHtmlAllowEntities() {
+               return array(
+                       array( 'foo', 'foo' ),
+                       array( 'a¡b', 'a&#161;b' ),
+                       array( 'foo&#039;bar', "foo'bar" ),
+                       array( '&lt;script&gt;foo&lt;/script&gt;', '<script>foo</script>' ),
+               );
+       }
+
 }
index 8cc2a8e..c3cb193 100644 (file)
@@ -355,4 +355,34 @@ class UserTest extends MediaWikiTestCase {
                                'false' => 'With / slash' ), 'With slash' ),
                );
        }
+
+       /**
+        * @covers User::equals
+        */
+       public function testEquals() {
+               $first = User::newFromName( 'EqualUser' );
+               $second = User::newFromName( 'EqualUser' );
+
+               $this->assertTrue( $first->equals( $first ) );
+               $this->assertTrue( $first->equals( $second ) );
+               $this->assertTrue( $second->equals( $first ) );
+
+               $third = User::newFromName( '0' );
+               $fourth = User::newFromName( '000' );
+
+               $this->assertFalse( $third->equals( $fourth ) );
+               $this->assertFalse( $fourth->equals( $third ) );
+
+               // Test users loaded from db with id
+               $user = User::newFromName( 'EqualUnitTestUser' );
+               if ( !$user->getId() ) {
+                       $user->addToDatabase();
+               }
+
+               $id = $user->getId();
+
+               $fifth = User::newFromId( $id );
+               $sixth = User::newFromName( 'EqualUnitTestUser' );
+               $this->assertTrue( $fifth->equals( $sixth ) );
+       }
 }
index 0df8d40..cccfe7b 100644 (file)
@@ -15,7 +15,12 @@ class JsonContentTest extends MediaWikiLangTestCase {
        public static function provideValidConstruction() {
                return array(
                        array( 'foo', false, null ),
+                       array( '[]', true, array() ),
                        array( '{}', true, (object)array() ),
+                       array( '""', true, '' ),
+                       array( '"0"', true, '0' ),
+                       array( '"bar"', true, 'bar' ),
+                       array( '0', true, '0' ),
                        array( '{ "0": "bar" }', true, (object)array( 'bar' ) ),
                );
        }
@@ -101,6 +106,12 @@ class JsonContentTest extends MediaWikiLangTestCase {
 
        public static function provideDataAndParserText() {
                return array(
+                       array(
+                               array(),
+                               '<table class="mw-json"><tbody><tr><td>' .
+                               '<table class="mw-json"><tbody><tr><td class="mw-json-empty">Empty array</td></tr>'
+                               . '</tbody></table></td></tr></tbody></table>'
+                       ),
                        array(
                                (object)array(),
                                '<table class="mw-json"><tbody><tr><td class="mw-json-empty">Empty object</td></tr>' .
@@ -108,31 +119,28 @@ class JsonContentTest extends MediaWikiLangTestCase {
                        ),
                        array(
                                (object)array( 'foo' ),
-                               '<table class="mw-json"><tbody><tr><th>0</th><td class="value">&quot;foo&quot;</td></tr>' .
+                               '<table class="mw-json"><tbody><tr><th>0</th><td class="value">"foo"</td></tr>' .
                                '</tbody></table>'
                        ),
                        array(
                                (object)array( 'foo', 'bar' ),
-                               '<table class="mw-json"><tbody><tr><th>0</th><td class="value">&quot;foo&quot;</td></tr>' .
-                               "\n" .
-                               '<tr><th>1</th><td class="value">&quot;bar&quot;</td></tr></tbody></table>'
+                               '<table class="mw-json"><tbody><tr><th>0</th><td class="value">"foo"</td></tr>' .
+                               '<tr><th>1</th><td class="value">"bar"</td></tr></tbody></table>'
                        ),
                        array(
                                (object)array( 'baz' => 'foo', 'bar' ),
-                               '<table class="mw-json"><tbody><tr><th>baz</th><td class="value">&quot;foo&quot;</td></tr>' .
-                               "\n" .
-                               '<tr><th>0</th><td class="value">&quot;bar&quot;</td></tr></tbody></table>'
+                               '<table class="mw-json"><tbody><tr><th>baz</th><td class="value">"foo"</td></tr>' .
+                               '<tr><th>0</th><td class="value">"bar"</td></tr></tbody></table>'
                        ),
                        array(
                                (object)array( 'baz' => 1000, 'bar' ),
                                '<table class="mw-json"><tbody><tr><th>baz</th><td class="value">1000</td></tr>' .
-                               "\n" .
-                               '<tr><th>0</th><td class="value">&quot;bar&quot;</td></tr></tbody></table>'
+                               '<tr><th>0</th><td class="value">"bar"</td></tr></tbody></table>'
                        ),
                        array(
                                (object)array( '<script>alert("evil!")</script>'),
-                               '<table class="mw-json"><tbody><tr><th>0</th><td class="value">&quot;' .
-                               '&lt;script&gt;alert(&quot;evil!&quot;)&lt;/script&gt;&quot;' .
+                               '<table class="mw-json"><tbody><tr><th>0</th><td class="value">"' .
+                               '&lt;script>alert("evil!")&lt;/script>"' .
                                '</td></tr></tbody></table>',
                        ),
                );
diff --git a/tests/phpunit/includes/libs/DeferredStringifierTest.php b/tests/phpunit/includes/libs/DeferredStringifierTest.php
new file mode 100644 (file)
index 0000000..9aaf113
--- /dev/null
@@ -0,0 +1,39 @@
+<?php
+
+class DeferredStringifierTest extends PHPUnit_Framework_TestCase {
+
+       /**
+        * @covers DeferredStringifier
+        * @dataProvider provideToString
+        */
+       public function testToString( $params, $expected ) {
+               $class = new ReflectionClass( 'DeferredStringifier' );
+               $ds = $class->newInstanceArgs( $params );
+               $this->assertEquals( $expected, (string)$ds );
+       }
+
+       public static function provideToString() {
+               return array(
+                       // No args
+                       array( array( function() {
+                               return 'foo';
+                       } ), 'foo' ),
+                       // Has args
+                       array( array( function( $i ) {
+                               return $i;
+                       }, 'bar' ), 'bar' ),
+               );
+       }
+
+       /**
+        * Verify that the callback is not called if
+        * it is never converted to a string
+        */
+       public function testCallbackNotCalled() {
+               $ds = new DeferredStringifier( function() {
+                       throw new Exception( 'This should not be reached!' );
+               } );
+               // No exception was thrown
+               $this->assertTrue( true );
+       }
+}
index a6b4880..fe46f2c 100644 (file)
@@ -103,7 +103,7 @@ class ParserOutputTest extends MediaWikiTestCase {
        }
 
        /**
-        * @covers ParserOutput::getSecondaryDataUpdate
+        * @covers ParserOutput::getSecondaryDataUpdates
         * @covers ParserOutput::addSecondaryDataUpdate
         */
        public function testGetSecondaryDataUpdates() {
@@ -127,7 +127,7 @@ class ParserOutputTest extends MediaWikiTestCase {
        }
 
        /**
-        * @covers ParserOutput::getSecondaryDataUpdate
+        * @covers ParserOutput::getSecondaryDataUpdates
         * @covers ParserOutput::__sleep
         */
        public function testGetSecondaryDataUpdates_serialization() {
index 221c258..e57c2b3 100644 (file)
@@ -18,6 +18,23 @@ class ExtensionProcessorTest extends MediaWikiTestCase {
                'name' => 'FooBar',
        );
 
+       /**
+        * @covers ExtensionProcessor::extractInfo
+        */
+       public function testExtractInfo() {
+               // Test that attributes that begin with @ are ignored
+               $processor = new ExtensionProcessor();
+               $processor->extractInfo( $this->dir, self::$default + array(
+                       '@metadata' => array( 'foobarbaz' ),
+                       'AnAttribute' => array( 'omg' ),
+               ) );
+
+               $extracted = $processor->getExtractedInfo();
+               $attributes = $extracted['attributes'];
+               $this->assertArrayHasKey( 'AnAttribute', $attributes );
+               $this->assertArrayNotHasKey( '@metadata', $attributes );
+       }
+
        public static function provideRegisterHooks() {
                return array(
                        // No hooks
index c9653da..c6aa3b7 100644 (file)
                assert.strictEqual( key, 'barfoo' );
        } );
 
-} ( mediaWiki, jQuery ) );
+}( mediaWiki, jQuery ) );
index 6c8c62f..ee33ade 100644 (file)
@@ -1,6 +1,8 @@
 /*jshint -W024 */
 ( function ( mw, $ ) {
-       var specialCharactersPageName;
+       var specialCharactersPageName,
+               // Can't mock SITENAME since jqueryMsg caches it at load
+               siteName = mw.config.get( 'wgSiteName' );
 
        // Since QUnitTestResources.php loads both mediawiki and mediawiki.jqueryMsg as
        // dependencies, this only tests the monkey-patched behavior with the two of them combined.
@@ -55,7 +57,7 @@
                this.restoreWarnings();
        } );
 
-       QUnit.test( 'mw.Map', 34, function ( assert ) {
+       QUnit.test( 'mw.Map', 35, function ( assert ) {
                var arry, conf, funky, globalConf, nummy, someValues;
 
                conf = new mw.Map();
                assert.strictEqual( conf.set( 'constructor', 42 ), true, 'Map.set for key "constructor"' );
                assert.strictEqual( conf.get( 'constructor' ), 42, 'Map.get for key "constructor"' );
 
-               assert.strictEqual( conf.set( 'ImUndefined', undefined ), true, 'Map.set allows setting value to `undefined`' );
-               assert.equal( conf.get( 'ImUndefined', 'fallback' ), undefined, 'Map.get supports retreiving value of `undefined`' );
+               assert.strictEqual( conf.set( 'undef' ), false, 'Map.set requires explicit value (no undefined default)' );
+
+               assert.strictEqual( conf.set( 'undef', undefined ), true, 'Map.set allows setting value to `undefined`' );
+               assert.equal( conf.get( 'undef', 'fallback' ), undefined, 'Map.get supports retreiving value of `undefined`' );
 
                assert.strictEqual( conf.set( funky, 'Funky' ), false, 'Map.set returns boolean false if key was invalid (Function)' );
                assert.strictEqual( conf.set( arry, 'Arry' ), false, 'Map.set returns boolean false if key was invalid (Array)' );
                conf.set( String( nummy ), 'I used to be a number' );
 
                assert.strictEqual( conf.exists( 'doesNotExist' ), false, 'Map.exists where property does not exist' );
-               assert.strictEqual( conf.exists( 'ImUndefined' ), true, 'Map.exists where value is `undefined`' );
+               assert.strictEqual( conf.exists( 'undef' ), true, 'Map.exists where value is `undefined`' );
                assert.strictEqual( conf.exists( nummy ), false, 'Map.exists where key is invalid but looks like an existing key' );
 
                // Multiple values at once
                assert.equal( hello.format, 'escaped', 'Message.escaped correctly updated the "format" property' );
 
                assert.ok( mw.messages.set( 'multiple-curly-brace', '"{{SITENAME}}" is the home of {{int:other-message}}' ), 'mw.messages.set: Register' );
-               assertMultipleFormats( ['multiple-curly-brace'], ['text', 'parse'], '"' + mw.config.get( 'wgSiteName') + '" is the home of Other Message', 'Curly brace format works correctly' );
+               assertMultipleFormats( ['multiple-curly-brace'], ['text', 'parse'], '"' + siteName + '" is the home of Other Message', 'Curly brace format works correctly' );
                assert.equal( mw.message( 'multiple-curly-brace' ).plain(), mw.messages.get( 'multiple-curly-brace' ), 'Plain format works correctly for curly brace message' );
-               assert.equal( mw.message( 'multiple-curly-brace' ).escaped(), mw.html.escape( '"' + mw.config.get( 'wgSiteName') + '" is the home of Other Message' ), 'Escaped format works correctly for curly brace message' );
+               assert.equal( mw.message( 'multiple-curly-brace' ).escaped(), mw.html.escape( '"' + siteName + '" is the home of Other Message' ), 'Escaped format works correctly for curly brace message' );
 
                assert.ok( mw.messages.set( 'multiple-square-brackets-and-ampersand', 'Visit the [[Project:Community portal|community portal]] & [[Project:Help desk|help desk]]' ), 'mw.messages.set: Register' );
                assertMultipleFormats( ['multiple-square-brackets-and-ampersand'], ['plain', 'text'], mw.messages.get( 'multiple-square-brackets-and-ampersand' ), 'Square bracket message is not processed' );
                assert.equal( mw.message( 'gender-plural-msg', 'male', 1 ).plain(), '{{GENDER:male|he|she|they}} {{PLURAL:1|is|are}} awesome', 'Parameters are substituted, but gender and plural are not resolved in plain mode' );
 
                assert.equal( mw.message( 'grammar-msg' ).plain(), mw.messages.get( 'grammar-msg' ), 'Grammar is not resolved in plain mode' );
-               assertMultipleFormats( ['grammar-msg'], ['text', 'parse'], 'Przeszukaj ' + mw.config.get( 'wgSiteName' ), 'Grammar is resolved' );
-               assert.equal( mw.message( 'grammar-msg' ).escaped(), 'Przeszukaj ' + mw.html.escape( mw.config.get( 'wgSiteName' ) ), 'Grammar is resolved in escaped mode' );
+               assertMultipleFormats( ['grammar-msg'], ['text', 'parse'], 'Przeszukaj ' + siteName, 'Grammar is resolved' );
+               assert.equal( mw.message( 'grammar-msg' ).escaped(), 'Przeszukaj ' + siteName, 'Grammar is resolved in escaped mode' );
 
                assertMultipleFormats( ['formatnum-msg', '987654321.654321'], ['text', 'parse', 'escaped'], '987,654,321.654', 'formatnum is resolved' );
                assert.equal( mw.message( 'formatnum-msg' ).plain(), mw.messages.get( 'formatnum-msg' ), 'formatnum is not resolved in plain mode' );
                assert.equal( mw.msg( 'gender-plural-msg', 'female', '1' ), 'she is awesome', 'Gender test for female, plural count 1' );
                assert.equal( mw.msg( 'gender-plural-msg', 'unknown', 10 ), 'they are awesome', 'Gender test for neutral, plural count 10' );
 
-               assert.equal( mw.msg( 'grammar-msg' ), 'Przeszukaj ' + mw.config.get( 'wgSiteName' ), 'Grammar is resolved' );
+               assert.equal( mw.msg( 'grammar-msg' ), 'Przeszukaj ' + siteName, 'Grammar is resolved' );
 
                assert.equal( mw.msg( 'formatnum-msg', '987654321.654321' ), '987,654,321.654', 'formatnum is resolved' );