Merge "Add `makeKey` and `makeGlobalKey` to BagOStuff"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Sat, 17 Oct 2015 01:06:12 +0000 (01:06 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Sat, 17 Oct 2015 01:06:12 +0000 (01:06 +0000)
251 files changed:
Gruntfile.js
RELEASE-NOTES-1.26
RELEASE-NOTES-1.27
autoload.php
composer.json
docs/hooks.txt
includes/Collation.php
includes/DefaultSettings.php
includes/EditPage.php
includes/GlobalFunctions.php
includes/Html.php
includes/HtmlFormatter.php
includes/Linker.php
includes/MediaWiki.php
includes/OutputPage.php
includes/Setup.php
includes/Title.php
includes/User.php
includes/api/ApiMessage.php
includes/api/ApiQueryORM.php [deleted file]
includes/api/ApiQuerySiteinfo.php
includes/api/ApiUpload.php
includes/api/i18n/ar.json
includes/api/i18n/cs.json
includes/api/i18n/de.json
includes/api/i18n/en.json
includes/api/i18n/fr.json
includes/api/i18n/gl.json
includes/api/i18n/he.json
includes/api/i18n/ja.json
includes/api/i18n/ko.json
includes/api/i18n/ksh.json
includes/api/i18n/mr.json
includes/api/i18n/pt-br.json
includes/api/i18n/qqq.json
includes/api/i18n/ru.json
includes/api/i18n/sd.json [new file with mode: 0644]
includes/api/i18n/uk.json
includes/cache/MessageCache.php
includes/changes/ChangesList.php
includes/changes/EnhancedChangesList.php
includes/changes/RecentChange.php
includes/content/ContentHandler.php
includes/db/DatabasePostgres.php
includes/db/loadbalancer/LoadBalancer.php
includes/deferred/LinksDeletionUpdate.php
includes/diff/DairikiDiff.php
includes/exception/MWExceptionHandler.php
includes/installer/LocalSettingsGenerator.php
includes/installer/i18n/ar.json
includes/installer/i18n/hy.json
includes/installer/i18n/nl.json
includes/installer/i18n/sd.json
includes/libs/IEUrlExtension.php
includes/libs/objectcache/WANObjectCache.php
includes/mail/EmailNotification.php
includes/media/Bitmap.php
includes/media/FormatMetadata.php
includes/mime.info
includes/mime.types
includes/objectcache/ObjectCache.php
includes/page/WikiPage.php
includes/parser/ParserOutput.php
includes/password/PasswordFactory.php
includes/resourceloader/ResourceLoaderEditToolbarModule.php
includes/revisiondelete/RevDelList.php
includes/specialpage/ChangesListSpecialPage.php
includes/specials/SpecialBlock.php
includes/specials/SpecialChangePassword.php
includes/specials/SpecialFileDuplicateSearch.php
includes/specials/SpecialPasswordReset.php
includes/specials/SpecialRedirect.php
includes/specials/SpecialRevisiondelete.php
includes/specials/SpecialUndelete.php
includes/specials/SpecialUpload.php
includes/specials/SpecialUserlogin.php
includes/specials/SpecialUserrights.php
includes/upload/UploadBase.php
includes/upload/UploadStash.php
languages/classes/LanguageHy.php
languages/classes/LanguageWa.php
languages/i18n/af.json
languages/i18n/aln.json
languages/i18n/an.json
languages/i18n/ar.json
languages/i18n/as.json
languages/i18n/ast.json
languages/i18n/bcl.json
languages/i18n/be-tarask.json
languages/i18n/bg.json
languages/i18n/bgn.json
languages/i18n/bn.json
languages/i18n/br.json
languages/i18n/ca.json
languages/i18n/ckb.json
languages/i18n/cs.json
languages/i18n/cv.json
languages/i18n/cy.json
languages/i18n/da.json
languages/i18n/de.json
languages/i18n/diq.json
languages/i18n/el.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/fo.json
languages/i18n/fr.json
languages/i18n/frp.json
languages/i18n/gl.json
languages/i18n/gom-latn.json
languages/i18n/gsw.json
languages/i18n/gu.json
languages/i18n/he.json
languages/i18n/hi.json
languages/i18n/hsb.json
languages/i18n/hu.json
languages/i18n/ia.json
languages/i18n/id.json
languages/i18n/ilo.json
languages/i18n/is.json
languages/i18n/it.json
languages/i18n/ja.json
languages/i18n/jv.json
languages/i18n/ka.json
languages/i18n/kk-cyrl.json
languages/i18n/km.json
languages/i18n/ko.json
languages/i18n/ksh.json
languages/i18n/lad.json
languages/i18n/lb.json
languages/i18n/li.json
languages/i18n/lt.json
languages/i18n/lus.json
languages/i18n/lv.json
languages/i18n/mk.json
languages/i18n/ml.json
languages/i18n/mr.json
languages/i18n/ms.json
languages/i18n/mt.json
languages/i18n/mzn.json
languages/i18n/nap.json
languages/i18n/nb.json
languages/i18n/nds-nl.json
languages/i18n/ne.json
languages/i18n/nl.json
languages/i18n/nn.json
languages/i18n/olo.json
languages/i18n/or.json
languages/i18n/pl.json
languages/i18n/pms.json
languages/i18n/pnb.json
languages/i18n/ps.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/rue.json
languages/i18n/sa.json
languages/i18n/sd.json
languages/i18n/sh.json
languages/i18n/si.json
languages/i18n/sk.json
languages/i18n/sl.json
languages/i18n/sq.json
languages/i18n/sr-ec.json
languages/i18n/sr-el.json
languages/i18n/sv.json
languages/i18n/ta.json
languages/i18n/th.json
languages/i18n/tl.json
languages/i18n/uk.json
languages/i18n/vec.json
languages/i18n/vi.json
languages/i18n/wa.json
languages/i18n/wo.json
languages/i18n/yi.json
languages/i18n/zh-hans.json
languages/i18n/zh-hant.json
languages/i18n/zh-tw.json
maintenance/backupTextPass.inc
maintenance/cleanupCaps.php
maintenance/cleanupSpam.php
maintenance/cleanupTable.inc
maintenance/deleteBatch.php
maintenance/deleteEqualMessages.php
maintenance/edit.php
maintenance/importImages.php
maintenance/importSiteScripts.php
maintenance/moveBatch.php
maintenance/namespaceDupes.php
maintenance/protect.php
maintenance/rollbackEdits.php
maintenance/storage/recompressTracked.php
maintenance/tables.sql
maintenance/undelete.php
maintenance/userOptions.inc
opensearch_desc.php
package.json
phpcs.xml
resources/Resources.php
resources/lib/oojs-ui/i18n/nb.json
resources/lib/oojs-ui/i18n/pa.json
resources/lib/oojs-ui/oojs-ui-apex-noimages.css
resources/lib/oojs-ui/oojs-ui-apex.js
resources/lib/oojs-ui/oojs-ui-mediawiki-noimages.css
resources/lib/oojs-ui/oojs-ui-mediawiki.js
resources/lib/oojs-ui/oojs-ui.js
resources/src/jquery/jquery.spinner.js
resources/src/jquery/jquery.tablesorter.js
resources/src/mediawiki.action/mediawiki.action.view.metadata.js
resources/src/mediawiki.legacy/shared.css
resources/src/mediawiki.special/mediawiki.special.css
resources/src/mediawiki.widgets/mw.widgets.CategorySelector.js
resources/src/mediawiki.widgets/mw.widgets.TitleSearchWidget.js
resources/src/mediawiki/api.js
resources/src/mediawiki/api/upload.js
resources/src/mediawiki/mediawiki.ForeignStructuredUpload.BookletLayout.js
resources/src/mediawiki/mediawiki.ForeignStructuredUpload.js
resources/src/mediawiki/mediawiki.ForeignUpload.js
resources/src/mediawiki/mediawiki.Upload.BookletLayout.js
resources/src/mediawiki/mediawiki.Upload.js
resources/src/mediawiki/mediawiki.jqueryMsg.js
resources/src/mediawiki/mediawiki.notification.js
tests/phpunit/MediaWikiTestCase.php
tests/phpunit/includes/BlockTest.php
tests/phpunit/includes/GlobalFunctions/GlobalTest.php
tests/phpunit/includes/GlobalFunctions/wfGetCallerTest.php
tests/phpunit/includes/LinkFilterTest.php
tests/phpunit/includes/TestUser.php
tests/phpunit/includes/UserTest.php
tests/phpunit/includes/api/ApiBlockTest.php
tests/phpunit/includes/api/ApiCreateAccountTest.php
tests/phpunit/includes/api/UserWrapper.php
tests/phpunit/includes/cache/GenderCacheTest.php
tests/phpunit/includes/debug/MWDebugTest.php
tests/phpunit/includes/password/PasswordTest.php
tests/phpunit/maintenance/DumpTestCase.php
tests/phpunit/maintenance/MaintenanceTest.php
tests/phpunit/maintenance/backupTextPassTest.php
tests/phpunit/maintenance/backup_PageTest.php
tests/qunit/suites/resources/jquery/jquery.tablesorter.parsers.test.js
tests/qunit/suites/resources/jquery/jquery.tablesorter.test.js
tests/qunit/suites/resources/mediawiki.api/mediawiki.api.test.js
tests/qunit/suites/resources/mediawiki.api/mediawiki.api.upload.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js

index 8dbeb6b..946b652 100644 (file)
@@ -33,9 +33,7 @@ module.exports = function ( grunt ) {
                },
                banana: {
                        options: {
-                               disallowBlankTranslations: false,
-                               disallowDuplicateTranslations: false,
-                               disallowUnusedTranslations: false
+                               disallowBlankTranslations: false
                        },
                        core: 'languages/i18n/',
                        api: 'includes/api/i18n/',
index efca318..53d9188 100644 (file)
@@ -94,6 +94,12 @@ production.
 * If search returns zero results and current search engine has a "did you mean"
   suggestion, results for suggestion will be shown. Can be disabled by setting
   $wgSearchRunSuggestedQuery to false.
+* Added several JavaScript libraries for uploading files to MediaWiki
+  from the client-side. See documentation for mw.Upload and its
+  subclasses for more information.
+* Added OOUI dialogs and layout for file upload interfaces. See
+  documentation for mw.Upload.Dialog, mw.Upload.BookletLayout and its
+  subclasses for more information.
 
 == External libraries ==
 === Upgraded external libraries ===
index 06feb4d..835d38a 100644 (file)
@@ -16,7 +16,6 @@ production.
   1000 for the latter) are now hard-coded.
 * $wgDebugDumpSqlLength was removed (deprecated in 1.24).
 * $wgDebugDBTransactions was removed (deprecated in 1.20).
-* $wgRemoteUploadTarget (added in 1.26) removed, replaced by $wgForeignUploadTargets
 * $wgUseXVO has been removed, as it provides functionality only used by
   custom Wikimedia patches against Squid 2.x that probably noone uses in
   production anymore. There is now $wgUseKeyHeader that provides similar
@@ -25,6 +24,25 @@ production.
 * $wgScriptExtension (and support for '.php5' entry points) was removed. See the
   deprecation notice in the release notes for version 1.25 for advice on how to
   preserve support for '.php5' entry points via URL rewriting.
+* Password handling via the User object has been deprecated and partially
+  removed, pending the future introduction of AuthManager. In particular:
+** expirePassword(), getPasswordExpireDate(), resetPasswordExpiration(), and
+   getPasswordExpired() have been removed. They were unused outside of core.
+** The mPassword, mNewpassword, mNewpassTime, and mPasswordExpires fields are
+   now private and will be removed in the future.
+** The getPassword() and getTemporaryPassword() methods now throw
+   BadMethodCallException and will be removed in the future.
+** The ability to pass 'password' and 'newpassword' to createNew() has been
+   removed. The only users of it seem to have been using it to set invalid
+   passwords, and so shouldn't be greatly affected.
+** setPassword(), setInternalPassword(), and setNewpassword() have been
+   deprecated, pending the introduction of AuthManager.
+** User::randomPassword() is deprecated in favor of a new method
+   PasswordFactory::generateRandomPasswordString()
+** User::getPasswordFactory() is deprecated, callers should just create a
+   PasswordFactory themselves.
+** A new constructor, User::newSystemUser(), has been added to simplify the
+   creation of passwordless "system" users for logged actions.
 
 === New features in 1.27 ===
 * $wgDataCenterId and $wgDataCenterRoles where added, which will serve as
@@ -41,6 +59,8 @@ production.
 * $wgCdnMaxageLagged was added, which limits the CDN cache TTL
   when any load balancer uses a DB that is lagged beyond the 'max lag'
   setting in the relevant section of $wgLBFactoryConf.
+* User::newSystemUser() may be used to simplify the creation of passwordless
+  "system" users for logged actions from scripts and extensions.
 
 ==== External libraries ====
 
@@ -52,8 +72,11 @@ production.
 * ApiPageSet::setRedirectMergePolicy() was added. This allows generator
   modules to define how generator data for a redirect source gets merged
   into the redirect destination.
+* prop=imageinfo&iiprop=uploadwarning will no longer include the possibility of
+  "was-deleted" warning.
 
 === Action API internal changes in 1.27 ===
+* ApiQueryORM removed.
 
 === Languages updated in 1.27 ===
 
index 269b142..b35b683 100644 (file)
@@ -103,7 +103,6 @@ $wgAutoloadLocalClasses = array(
        'ApiQueryLangLinks' => __DIR__ . '/includes/api/ApiQueryLangLinks.php',
        'ApiQueryLinks' => __DIR__ . '/includes/api/ApiQueryLinks.php',
        'ApiQueryLogEvents' => __DIR__ . '/includes/api/ApiQueryLogEvents.php',
-       'ApiQueryORM' => __DIR__ . '/includes/api/ApiQueryORM.php',
        'ApiQueryPagePropNames' => __DIR__ . '/includes/api/ApiQueryPagePropNames.php',
        'ApiQueryPageProps' => __DIR__ . '/includes/api/ApiQueryPageProps.php',
        'ApiQueryPagesWithProp' => __DIR__ . '/includes/api/ApiQueryPagesWithProp.php',
@@ -728,6 +727,7 @@ $wgAutoloadLocalClasses = array(
        'MWSaltedPassword' => __DIR__ . '/includes/password/MWSaltedPassword.php',
        'MWTidy' => __DIR__ . '/includes/parser/MWTidy.php',
        'MWTimestamp' => __DIR__ . '/includes/MWTimestamp.php',
+       'MWUnknownContentModelException' => __DIR__ . '/includes/content/ContentHandler.php',
        'MachineReadableRCFeedFormatter' => __DIR__ . '/includes/rcfeed/MachineReadableRCFeedFormatter.php',
        'MagicWord' => __DIR__ . '/includes/MagicWord.php',
        'MagicWordArray' => __DIR__ . '/includes/MagicWord.php',
index 46ff59c..6209017 100644 (file)
@@ -21,7 +21,7 @@
                "ext-iconv": "*",
                "liuggio/statsd-php-client": "1.0.16",
                "mediawiki/at-ease": "1.1.0",
-               "oojs/oojs-ui": "0.12.11",
+               "oojs/oojs-ui": "0.12.12",
                "oyejorge/less.php": "1.7.0.9",
                "php": ">=5.3.3",
                "psr/log": "1.0.0",
index 717dd39..8d36603 100644 (file)
@@ -575,6 +575,7 @@ $error: if the deletion was prohibited, the (raw HTML) error message to display
   (added in 1.13)
 $status: Status object, modify this to throw an error. Overridden by $error
   (added in 1.20)
+$suppress: Whether this is a suppression deletion or not (added in 1.27)
 
 'ArticleDeleteAfterSuccess': Output after an article has been deleted.
 $title: Title of the article that has been deleted.
@@ -1956,12 +1957,14 @@ $rcid: ID of the revision to be marked patrolled
 $user: the user (object) marking the revision as patrolled
 $wcOnlySysopsCanPatrol: config setting indicating whether the user needs to be a
   sysop in order to mark an edit patrolled.
+$auto true if the edit is being marked as patrolled automatically
 
 'MarkPatrolledComplete': After an edit is marked patrolled.
 $rcid: ID of the revision marked as patrolled
 $user: user (object) who marked the edit patrolled
 $wcOnlySysopsCanPatrol: config setting indicating whether the user must be a
   sysop to patrol the edit.
+$auto true if the edit is being marked as patrolled automatically
 
 'MediaWikiPerformAction': Override MediaWiki::performAction(). Use this to do
 something completely different, after the basic globals have been set up, but
index c1f0b38..40e8627 100644 (file)
@@ -406,14 +406,15 @@ class IcuCollation extends Collation {
                        }
                }
 
-               // Sort the letters.
-               //
-               // It's impossible to have the precompiled data file properly sorted,
-               // because the sort order changes depending on ICU version. If the
-               // array is not properly sorted, the binary search will return random
-               // results.
-               //
-               // We also take this opportunity to remove primary collisions.
+               /* Sort the letters.
+                *
+                * It's impossible to have the precompiled data file properly sorted,
+                * because the sort order changes depending on ICU version. If the
+                * array is not properly sorted, the binary search will return random
+                * results.
+                *
+                * We also take this opportunity to remove primary collisions.
+                */
                $letterMap = array();
                foreach ( $letters as $letter ) {
                        $key = $this->getPrimarySortKey( $letter );
@@ -428,38 +429,40 @@ class IcuCollation extends Collation {
                        }
                }
                ksort( $letterMap, SORT_STRING );
-               // Remove duplicate prefixes. Basically if something has a sortkey
-               // which is a prefix of some other sortkey, then it is an
-               // expansion and probably should not be considered a section
-               // header.
-               //
-               // For example 'þ' is sometimes sorted as if it is the letters
-               // 'th'. Other times it is its own primary element. Another
-               // example is '₨'. Sometimes its a currency symbol. Sometimes it
-               // is an 'R' followed by an 's'.
-               //
-               // Additionally an expanded element should always sort directly
-               // after its first element due to they way sortkeys work.
-               //
-               // UCA sortkey elements are of variable length but no collation
-               // element should be a prefix of some other element, so I think
-               // this is safe. See:
-               // * https://ssl.icu-project.org/repos/icu/icuhtml/trunk/design/collation/ICU_collation_design.htm
-               // * http://site.icu-project.org/design/collation/uca-weight-allocation
-               //
-               // Additionally, there is something called primary compression to
-               // worry about. Basically, if you have two primary elements that
-               // are more than one byte and both start with the same byte then
-               // the first byte is dropped on the second primary. Additionally
-               // either \x03 or \xFF may be added to mean that the next primary
-               // does not start with the first byte of the first primary.
-               //
-               // This shouldn't matter much, as the first primary is not
-               // changed, and that is what we are comparing against.
-               //
-               // tl;dr: This makes some assumptions about how icu implements
-               // collations. It seems incredibly unlikely these assumptions
-               // will change, but nonetheless they are assumptions.
+
+               /* Remove duplicate prefixes. Basically if something has a sortkey
+                * which is a prefix of some other sortkey, then it is an
+                * expansion and probably should not be considered a section
+                * header.
+                *
+                * For example 'þ' is sometimes sorted as if it is the letters
+                * 'th'. Other times it is its own primary element. Another
+                * example is '₨'. Sometimes its a currency symbol. Sometimes it
+                * is an 'R' followed by an 's'.
+                *
+                * Additionally an expanded element should always sort directly
+                * after its first element due to they way sortkeys work.
+                *
+                * UCA sortkey elements are of variable length but no collation
+                * element should be a prefix of some other element, so I think
+                * this is safe. See:
+                * - https://ssl.icu-project.org/repos/icu/icuhtml/trunk/design/collation/ICU_collation_design.htm
+                * - http://site.icu-project.org/design/collation/uca-weight-allocation
+                *
+                * Additionally, there is something called primary compression to
+                * worry about. Basically, if you have two primary elements that
+                * are more than one byte and both start with the same byte then
+                * the first byte is dropped on the second primary. Additionally
+                * either \x03 or \xFF may be added to mean that the next primary
+                * does not start with the first byte of the first primary.
+                *
+                * This shouldn't matter much, as the first primary is not
+                * changed, and that is what we are comparing against.
+                *
+                * tl;dr: This makes some assumptions about how icu implements
+                * collations. It seems incredibly unlikely these assumptions
+                * will change, but nonetheless they are assumptions.
+                */
 
                $prev = false;
                $duplicatePrefixes = array();
index 9eff602..c21301f 100644 (file)
@@ -720,6 +720,14 @@ $wgCopyUploadAsyncTimeout = false;
  */
 $wgMaxUploadSize = 1024 * 1024 * 100; # 100MB
 
+/**
+ * Minimum upload chunk size, in bytes. When using chunked upload, non-final
+ * chunks smaller than this will be rejected. May be reduced based on the
+ * 'upload_max_filesize' or 'post_max_size' PHP settings.
+ * @since 1.26
+ */
+$wgMinUploadChunkSize = 1024; # 1KB
+
 /**
  * Point the upload navigation link to an external URL
  * Useful if you want to use a shared repository by default
@@ -5214,6 +5222,12 @@ $wgRateLimits = array(
                'ip' => null, // for each anon and recent account
                'subnet' => null, // ... within a /24 subnet in IPv4 or /64 in IPv6
        ),
+       'upload' => array(
+               'user' => null,
+               'newbie' => null,
+               'ip' => null,
+               'subnet' => null,
+       ),
        'move' => array(
                'user' => null,
                'newbie' => null,
index 23a7de4..8571cd7 100644 (file)
@@ -2188,6 +2188,8 @@ class EditPage {
                }
 
                # Use the title defined by DISPLAYTITLE magic word when present
+               # NOTE: getDisplayTitle() returns HTML while getPrefixedText() returns plain text.
+               #       setPageTitle() treats the input as wikitext, which should be safe in either case.
                $displayTitle = isset( $this->mParserOutput ) ? $this->mParserOutput->getDisplayTitle() : false;
                if ( $displayTitle === false ) {
                        $displayTitle = $contextTitle->getPrefixedText();
index 1ea2c5e..a3b1e55 100644 (file)
@@ -1985,8 +1985,11 @@ function wfGetAllCallers( $limit = 3 ) {
  * @return string
  */
 function wfFormatStackFrame( $frame ) {
-       return isset( $frame['class'] ) ?
-               $frame['class'] . '::' . $frame['function'] :
+       if ( !isset( $frame['function'] ) ) {
+               return 'NO_FUNCTION_GIVEN';
+       }
+       return isset( $frame['class'] ) && isset( $frame['type'] ) ?
+               $frame['class'] . $frame['type'] . $frame['function'] :
                $frame['function'];
 }
 
@@ -2856,16 +2859,17 @@ function wfShellExec( $cmd, &$retval = null, $environ = array(),
        $status = false;
        $logMsg = false;
 
-       // According to the documentation, it is possible for stream_select()
-       // to fail due to EINTR. I haven't managed to induce this in testing
-       // despite sending various signals. If it did happen, the error
-       // message would take the form:
-       //
-       // stream_select(): unable to select [4]: Interrupted system call (max_fd=5)
-       //
-       // where [4] is the value of the macro EINTR and "Interrupted system
-       // call" is string which according to the Linux manual is "possibly"
-       // localised according to LC_MESSAGES.
+       /* According to the documentation, it is possible for stream_select()
+        * to fail due to EINTR. I haven't managed to induce this in testing
+        * despite sending various signals. If it did happen, the error
+        * message would take the form:
+        *
+        * stream_select(): unable to select [4]: Interrupted system call (max_fd=5)
+        *
+        * where [4] is the value of the macro EINTR and "Interrupted system
+        * call" is string which according to the Linux manual is "possibly"
+        * localised according to LC_MESSAGES.
+        */
        $eintr = defined( 'SOCKET_EINTR' ) ? SOCKET_EINTR : 4;
        $eintrMessage = "stream_select(): unable to select [$eintr]";
 
@@ -3735,16 +3739,16 @@ function wfScript( $script = 'index' ) {
  */
 function wfGetScriptUrl() {
        if ( isset( $_SERVER['SCRIPT_NAME'] ) ) {
-               #
-               # as it was called, minus the query string.
-               #
-               # Some sites use Apache rewrite rules to handle subdomains,
-               # and have PHP set up in a weird way that causes PHP_SELF
-               # to contain the rewritten URL instead of the one that the
-               # outside world sees.
-               #
-               # If in this mode, use SCRIPT_URL instead, which mod_rewrite
-               # provides containing the "before" URL.
+               /* as it was called, minus the query string.
+                *
+                * Some sites use Apache rewrite rules to handle subdomains,
+                * and have PHP set up in a weird way that causes PHP_SELF
+                * to contain the rewritten URL instead of the one that the
+                * outside world sees.
+                *
+                * If in this mode, use SCRIPT_URL instead, which mod_rewrite
+                * provides containing the "before" URL.
+                */
                return $_SERVER['SCRIPT_NAME'];
        } else {
                return $_SERVER['URL'];
@@ -3934,12 +3938,13 @@ function wfTransactionalTimeLimit() {
  * Converts shorthand byte notation to integer form
  *
  * @param string $string
+ * @param int $default Returned if $string is empty
  * @return int
  */
-function wfShorthandToInteger( $string = '' ) {
+function wfShorthandToInteger( $string = '', $default = -1 ) {
        $string = trim( $string );
        if ( $string === '' ) {
-               return -1;
+               return $default;
        }
        $last = $string[strlen( $string ) - 1];
        $val = intval( $string );
index c61dca8..b7958dd 100644 (file)
@@ -597,7 +597,6 @@ class Html {
                                // we may as well not call htmlspecialchars().
                                // @todo FIXME: Verify that we actually need to
                                // escape \n\r\t here, and explain why, exactly.
-                               #
                                // We could call Sanitizer::encodeAttribute() for this, but we
                                // don't because we're stubborn and like our marginal savings on
                                // byte size from not having to encode unnecessary quotes.
@@ -745,10 +744,10 @@ class Html {
        }
 
        /**
-        * Convenience function to produce a checkbox (input element with type=checkbox)
+        * Convenience function to produce a radio button (input element with type=radio)
         *
         * @param string $name Name attribute
-        * @param bool $checked Whether the checkbox is checked or not
+        * @param bool $checked Whether the radio button is checked or not
         * @param array $attribs Array of additional attributes
         * @return string Raw HTML
         */
index 83db268..2d81b28 100644 (file)
@@ -74,10 +74,8 @@ class HtmlFormatter {
                        }
 
                        // Workaround for bug that caused spaces before references
-                       // to disappear during processing:
-                       // https://phabricator.wikimedia.org/T55086
-                       //
-                       // Please replace with a better fix if one can be found.
+                       // to disappear during processing: https://phabricator.wikimedia.org/T55086
+                       // TODO: Please replace with a better fix if one can be found.
                        $html = str_replace( ' <', '&#32;<', $html );
 
                        libxml_use_internal_errors( true );
@@ -295,7 +293,6 @@ class HtmlFormatter {
                        $html = $this->fixLibXml( $html );
                        if ( wfIsWindows() ) {
                                // Cleanup for CRLF misprocessing of unknown origin on Windows.
-                               //
                                // If this error continues in the future, please track it down in the
                                // XML code paths if possible and fix there.
                                $html = str_replace( '&#13;', '', $html );
index 2e33bd1..e821004 100644 (file)
@@ -623,7 +623,6 @@ class Linker {
                        # Create a thumbnail. Alignment depends on the writing direction of
                        # the page content language (right-aligned for LTR languages,
                        # left-aligned for RTL languages)
-                       #
                        # If a thumbnail width has not been provided, it is set
                        # to the default user option as specified in Language*.php
                        if ( $fp['align'] == '' ) {
index aee6ee1..3399790 100644 (file)
@@ -203,10 +203,9 @@ class MediaWiki {
                        // curid and oldid request  parameters would allow page titles to be enumerated even
                        // when they are not guessable. So we reset the title to Special:Badtitle before the
                        // permissions error is displayed.
-                       //
+
                        // The skin mostly uses $this->context->getTitle() these days, but some extensions
                        // still use $wgTitle.
-
                        $badTitle = SpecialPage::getTitleFor( 'Badtitle' );
                        $this->context->setTitle( $badTitle );
                        $wgTitle = $badTitle;
@@ -628,7 +627,7 @@ class MediaWiki {
                                        // redirecting to HTTPS. It's likely such a request is going
                                        // to fail due to post data being lost, but let's try anyway
                                        // and just log the instance.
-                                       //
+
                                        // @todo FIXME: See if we could issue a 307 or 308 here, need
                                        // to see how clients (automated & browser) behave when we do
                                        wfDebugLog( 'RedirectedPosts', "Redirected from HTTP to HTTPS: $oldUrl" );
index 4f99f34..d29ec54 100644 (file)
@@ -3856,18 +3856,19 @@ class OutputPage extends ContextSource {
                                if ( $media == $targetMedia ) {
                                        $media = '';
                                } elseif ( preg_match( $screenMediaQueryRegex, $media ) === 1 ) {
-                                       // This regex will not attempt to understand a comma-separated media_query_list
-                                       //
-                                       // Example supported values for $media:
-                                       // 'screen', 'only screen', 'screen and (min-width: 982px)' ),
-                                       // Example NOT supported value for $media:
-                                       // '3d-glasses, screen, print and resolution > 90dpi'
-                                       //
-                                       // If it's a print request, we never want any kind of screen stylesheets
-                                       // If it's a handheld request (currently the only other choice with a switch),
-                                       // we don't want simple 'screen' but we might want screen queries that
-                                       // have a max-width or something, so we'll pass all others on and let the
-                                       // client do the query.
+                                       /* This regex will not attempt to understand a comma-separated media_query_list
+                                        *
+                                        * Example supported values for $media:
+                                        * 'screen', 'only screen', 'screen and (min-width: 982px)' ),
+                                        * Example NOT supported value for $media:
+                                        * '3d-glasses, screen, print and resolution > 90dpi'
+                                        *
+                                        * If it's a print request, we never want any kind of screen stylesheets
+                                        * If it's a handheld request (currently the only other choice with a switch),
+                                        * we don't want simple 'screen' but we might want screen queries that
+                                        * have a max-width or something, so we'll pass all others on and let the
+                                        * client do the query.
+                                        */
                                        if ( $targetMedia == 'print' || $media == 'screen' ) {
                                                return null;
                                        }
index 67c99c9..fbfef1f 100644 (file)
@@ -373,6 +373,15 @@ if ( $wgResourceLoaderMaxQueryLength === false ) {
        unset( $suhosinMaxValueLength );
 }
 
+// Ensure the minimum chunk size is less than PHP upload limits or the maximum
+// upload size.
+$wgMinUploadChunkSize = min(
+       $wgMinUploadChunkSize,
+       $wgMaxUploadSize,
+       wfShorthandToInteger( ini_get( 'upload_max_filesize' ), 1e100 ),
+       wfShorthandToInteger( ini_get( 'post_max_size' ), 1e100 ) - 1024 # Leave room for other parameters
+);
+
 /**
  * Definitions of the NS_ constants are in Defines.php
  * @private
index 8e5fae9..9ada4f3 100644 (file)
@@ -1008,10 +1008,8 @@ class Title {
         */
        public function getNsText() {
                if ( $this->isExternal() ) {
-                       // This probably shouldn't even happen. ohh man, oh yuck.
-                       // But for interwiki transclusion it sometimes does.
-                       // Shit. Shit shit shit.
-                       //
+                       // This probably shouldn't even happen,
+                       // but for interwiki transclusion it sometimes does.
                        // Use the canonical namespaces if possible to try to
                        // resolve a foreign namespace.
                        if ( MWNamespace::exists( $this->mNamespace ) ) {
@@ -1420,6 +1418,7 @@ class Title {
         * Deprecated for public use, use Title::makeTitle() with fragment parameter.
         * Still in active use privately.
         *
+        * @private
         * @param string $fragment Text
         */
        public function setFragment( $fragment ) {
index 75649a7..0dfdfc4 100644 (file)
@@ -28,7 +28,7 @@ define( 'EDIT_TOKEN_SUFFIX', '+\\' );
 
 /**
  * The User object encapsulates all of the user-specific settings (user_id,
- * name, rights, password, email address, options, last login time). Client
+ * name, rights, email address, options, last login time). Client
  * classes use the getXXX() functions to access these fields. These functions
  * do all the work of determining whether the user is logged in,
  * whether the requested option can be satisfied from cookies or
@@ -64,11 +64,6 @@ class User implements IDBAccessObject {
         */
        const GETOPTIONS_EXCLUDE_DEFAULTS = 1;
 
-       /**
-        * @var PasswordFactory Lazily loaded factory object for passwords
-        */
-       private static $mPasswordFactory = null;
-
        /**
         * Array of Strings List of member variables which are saved to the
         * shared cache (memcached). Any operation which changes the
@@ -190,20 +185,22 @@ class User implements IDBAccessObject {
        public $mName;
        /** @var string */
        public $mRealName;
+
        /**
-        * @todo Make this actually private
-        * @private
-        * @var Password
-        */
-       public $mPassword;
-       /**
-        * @todo Make this actually private
-        * @private
-        * @var Password
+        * These fields were marked "@private", but were defined as public to
+        * maintain compatibility with PHP4 code since PHP4 didn't support access
+        * restrictions. AuthManager makes password handling pluggable, meaning
+        * these fields don't make sense anymore. If this broke something, see
+        * T89459 for the context of the change.
+        * @deprecated These are mostly unused, but kept for now to raise errors on attempted access.
         */
-       public $mNewpassword;
-       /** @var string */
-       public $mNewpassTime;
+       // @{
+       private $mPassword = null;
+       private $mNewpassword;
+       private $mNewpassTime;
+       private $mPasswordExpires;
+       // @}
+
        /** @var string */
        public $mEmail;
        /** @var string TS_MW timestamp from the DB */
@@ -226,8 +223,6 @@ class User implements IDBAccessObject {
        public $mGroups;
        /** @var array */
        protected $mOptionOverrides;
-       /** @var string */
-       protected $mPasswordExpires;
        // @}
 
        /**
@@ -559,7 +554,7 @@ class User implements IDBAccessObject {
         * The row should have the following fields from the user table in it:
         * - either user_name or user_id to load further data if needed (or both)
         * - user_real_name
-        * - all other fields (email, password, etc.)
+        * - all other fields (email, etc.)
         * It is useless to provide the remaining fields if either user_id,
         * user_name and user_real_name are not provided because the whole row
         * will be loaded once more from the database when accessing them.
@@ -574,6 +569,97 @@ class User implements IDBAccessObject {
                return $user;
        }
 
+       /**
+        * Static factory method for creation of a "system" user from username.
+        *
+        * A "system" user is an account that's used to attribute logged actions
+        * taken by MediaWiki itself, as opposed to a bot or human user. Examples
+        * might include the 'Maintenance script' or 'Conversion script' accounts
+        * used by various scripts in the maintenance/ directory or accounts such
+        * as 'MediaWiki message delivery' used by the MassMessage extension.
+        *
+        * This can optionally create the user if it doesn't exist, and "steal" the
+        * account if it does exist.
+        *
+        * @param string $name Username
+        * @param array $options Options are:
+        *  - validate: As for User::getCanonicalName(), default 'valid'
+        *  - create: Whether to create the user if it doesn't already exist, default true
+        *  - steal: Whether to reset the account's password and email if it
+        *    already exists, default false
+        * @return User|null
+        */
+       public static function newSystemUser( $name, $options = array() ) {
+               $options += array(
+                       'validate' => 'valid',
+                       'create' => true,
+                       'steal' => false,
+               );
+
+               $name = self::getCanonicalName( $name, $options['validate'] );
+               if ( $name === false ) {
+                       return null;
+               }
+
+               $dbw = wfGetDB( DB_MASTER );
+               $row = $dbw->selectRow(
+                       'user',
+                       array_merge(
+                               self::selectFields(),
+                               array( 'user_password', 'user_newpassword' )
+                       ),
+                       array( 'user_name' => $name ),
+                       __METHOD__
+               );
+               if ( !$row ) {
+                       // No user. Create it?
+                       return $options['create'] ? self::createNew( $name ) : null;
+               }
+               $user = self::newFromRow( $row );
+
+               // A user is considered to exist as a non-system user if it has a
+               // password set, or a temporary password set, or an email set.
+               $passwordFactory = new PasswordFactory();
+               $passwordFactory->init( RequestContext::getMain()->getConfig() );
+               try {
+                       $password = $passwordFactory->newFromCiphertext( $row->user_password );
+               } catch ( PasswordError $e ) {
+                       wfDebug( 'Invalid password hash found in database.' );
+                       $password = PasswordFactory::newInvalidPassword();
+               }
+               try {
+                       $newpassword = $passwordFactory->newFromCiphertext( $row->user_newpassword );
+               } catch ( PasswordError $e ) {
+                       wfDebug( 'Invalid password hash found in database.' );
+                       $newpassword = PasswordFactory::newInvalidPassword();
+               }
+               if ( !$password instanceof InvalidPassword || !$newpassword instanceof InvalidPassword
+                       || $user->mEmail
+               ) {
+                       // User exists. Steal it?
+                       if ( !$options['steal'] ) {
+                               return null;
+                       }
+
+                       $nopass = PasswordFactory::newInvalidPassword()->toString();
+
+                       $dbw->update(
+                               'user',
+                               array(
+                                       'user_password' => $nopass,
+                                       'user_newpassword' => $nopass,
+                                       'user_newpass_time' => null,
+                               ),
+                               array( 'user_id' => $user->getId() ),
+                               __METHOD__
+                       );
+                       $user->invalidateEmail();
+                       $user->saveSettings();
+               }
+
+               return $user;
+       }
+
        // @}
 
        /**
@@ -875,73 +961,6 @@ class User implements IDBAccessObject {
                }
        }
 
-       /**
-        * Expire a user's password
-        * @since 1.23
-        * @param int $ts Optional timestamp to convert, default 0 for the current time
-        */
-       public function expirePassword( $ts = 0 ) {
-               $this->loadPasswords();
-               $timestamp = wfTimestamp( TS_MW, $ts );
-               $this->mPasswordExpires = $timestamp;
-               $this->saveSettings();
-       }
-
-       /**
-        * Clear the password expiration for a user
-        * @since 1.23
-        * @param bool $load Ensure user object is loaded first
-        */
-       public function resetPasswordExpiration( $load = true ) {
-               global $wgPasswordExpirationDays;
-               if ( $load ) {
-                       $this->load();
-               }
-               $newExpire = null;
-               if ( $wgPasswordExpirationDays ) {
-                       $newExpire = wfTimestamp(
-                               TS_MW,
-                               time() + ( $wgPasswordExpirationDays * 24 * 3600 )
-                       );
-               }
-               // Give extensions a chance to force an expiration
-               Hooks::run( 'ResetPasswordExpiration', array( $this, &$newExpire ) );
-               $this->mPasswordExpires = $newExpire;
-       }
-
-       /**
-        * Check if the user's password is expired.
-        * TODO: Put this and password length into a PasswordPolicy object
-        * @since 1.23
-        * @return string|bool The expiration type, or false if not expired
-        *      hard: A password change is required to login
-        *      soft: Allow login, but encourage password change
-        *      false: Password is not expired
-        */
-       public function getPasswordExpired() {
-               global $wgPasswordExpireGrace;
-               $expired = false;
-               $now = wfTimestamp();
-               $expiration = $this->getPasswordExpireDate();
-               $expUnix = wfTimestamp( TS_UNIX, $expiration );
-               if ( $expiration !== null && $expUnix < $now ) {
-                       $expired = ( $expUnix + $wgPasswordExpireGrace < $now ) ? 'hard' : 'soft';
-               }
-               return $expired;
-       }
-
-       /**
-        * Get this user's password expiration date. Since this may be using
-        * the cached User object, we assume that whatever mechanism is setting
-        * the expiration date is also expiring the User cache.
-        * @since 1.23
-        * @return string|null The datestamp of the expiration, or null if not set
-        */
-       public function getPasswordExpireDate() {
-               $this->load();
-               return $this->mPasswordExpires;
-       }
-
        /**
         * Given unvalidated user input, return a canonical username, or false if
         * the username is invalid.
@@ -1022,19 +1041,12 @@ class User implements IDBAccessObject {
        /**
         * Return a random password.
         *
+        * @deprecated since 1.27, use PasswordFactory::generateRandomPasswordString()
         * @return string New random password
         */
        public static function randomPassword() {
                global $wgMinimalPasswordLength;
-               // Decide the final password length based on our min password length,
-               // stopping at a minimum of 10 chars.
-               $length = max( 10, $wgMinimalPasswordLength );
-               // Multiply by 1.25 to get the number of hex characters we need
-               $length = $length * 1.25;
-               // Generate random hex chars
-               $hex = MWCryptRand::generateHex( $length );
-               // Convert from base 16 to base 32 to get a proper password like string
-               return wfBaseConvert( $hex, 16, 32 );
+               return PasswordFactory::generateRandomPasswordString( $wgMinimalPasswordLength );
        }
 
        /**
@@ -1046,15 +1058,9 @@ class User implements IDBAccessObject {
         * @param string|bool $name
         */
        public function loadDefaults( $name = false ) {
-
-               $passwordFactory = self::getPasswordFactory();
-
                $this->mId = 0;
                $this->mName = $name;
                $this->mRealName = '';
-               $this->mPassword = $passwordFactory->newFromCiphertext( null );
-               $this->mNewpassword = $passwordFactory->newFromCiphertext( null );
-               $this->mNewpassTime = null;
                $this->mEmail = '';
                $this->mOptionOverrides = null;
                $this->mOptionsLoaded = false;
@@ -1070,8 +1076,6 @@ class User implements IDBAccessObject {
                $this->mEmailAuthenticated = null;
                $this->mEmailToken = '';
                $this->mEmailTokenExpires = null;
-               $this->mPasswordExpires = null;
-               $this->resetPasswordExpiration( false );
                $this->mRegistration = wfTimestamp( TS_MW );
                $this->mGroups = array();
 
@@ -1243,7 +1247,6 @@ class User implements IDBAccessObject {
         */
        protected function loadFromRow( $row, $data = null ) {
                $all = true;
-               $passwordFactory = self::getPasswordFactory();
 
                $this->mGroups = null; // deferred
 
@@ -1280,31 +1283,6 @@ class User implements IDBAccessObject {
                        $all = false;
                }
 
-               if ( isset( $row->user_password ) ) {
-                       // Check for *really* old password hashes that don't even have a type
-                       // The old hash format was just an md5 hex hash, with no type information
-                       if ( preg_match( '/^[0-9a-f]{32}$/', $row->user_password ) ) {
-                               $row->user_password = ":A:{$this->mId}:{$row->user_password}";
-                       }
-
-                       try {
-                               $this->mPassword = $passwordFactory->newFromCiphertext( $row->user_password );
-                       } catch ( PasswordError $e ) {
-                               wfDebug( 'Invalid password hash found in database.' );
-                               $this->mPassword = $passwordFactory->newFromCiphertext( null );
-                       }
-
-                       try {
-                               $this->mNewpassword = $passwordFactory->newFromCiphertext( $row->user_newpassword );
-                       } catch ( PasswordError $e ) {
-                               wfDebug( 'Invalid password hash found in database.' );
-                               $this->mNewpassword = $passwordFactory->newFromCiphertext( null );
-                       }
-
-                       $this->mNewpassTime = wfTimestampOrNull( TS_MW, $row->user_newpass_time );
-                       $this->mPasswordExpires = wfTimestampOrNull( TS_MW, $row->user_password_expires );
-               }
-
                if ( isset( $row->user_email ) ) {
                        $this->mEmail = $row->user_email;
                        $this->mTouched = wfTimestamp( TS_MW, $row->user_touched );
@@ -1367,33 +1345,6 @@ class User implements IDBAccessObject {
                }
        }
 
-       /**
-        * Load the user's password hashes from the database
-        *
-        * This is usually called in a scenario where the actual User object was
-        * loaded from the cache, and then password comparison needs to be performed.
-        * Password hashes are not stored in memcached.
-        *
-        * @since 1.24
-        */
-       private function loadPasswords() {
-               if ( $this->getId() !== 0 &&
-                       ( $this->mPassword === null || $this->mNewpassword === null )
-               ) {
-                       $db = ( $this->queryFlagsUsed & self::READ_LATEST )
-                               ? wfGetDB( DB_MASTER )
-                               : wfGetDB( DB_SLAVE );
-
-                       $this->loadFromRow( $db->selectRow(
-                               'user',
-                               array( 'user_password', 'user_newpassword',
-                                       'user_newpass_time', 'user_password_expires' ),
-                               array( 'user_id' => $this->getId() ),
-                               __METHOD__
-                       ) );
-               }
-       }
-
        /**
         * Add the user to the group if he/she meets given criteria.
         *
@@ -2383,23 +2334,21 @@ class User implements IDBAccessObject {
        }
 
        /**
+        * @deprecated Removed in 1.27.
         * @return Password
         * @since 1.24
         */
        public function getPassword() {
-               $this->loadPasswords();
-
-               return $this->mPassword;
+               throw new BadMethodCallException( __METHOD__ . ' has been removed in 1.27' );
        }
 
        /**
+        * @deprecated Removed in 1.27.
         * @return Password
         * @since 1.24
         */
        public function getTemporaryPassword() {
-               $this->loadPasswords();
-
-               return $this->mNewpassword;
+               throw new BadMethodCallException( __METHOD__ . ' has been removed in 1.27' );
        }
 
        /**
@@ -2413,16 +2362,14 @@ class User implements IDBAccessObject {
         * wipes it, so the account cannot be logged in until
         * a new password is set, for instance via e-mail.
         *
+        * @deprecated since 1.27. AuthManager is coming.
         * @param string $str New password to set
         * @throws PasswordError On failure
-        *
         * @return bool
         */
        public function setPassword( $str ) {
                global $wgAuth;
 
-               $this->loadPasswords();
-
                if ( $str !== null ) {
                        if ( !$wgAuth->allowPasswordChange() ) {
                                throw new PasswordError( wfMessage( 'password-change-forbidden' )->text() );
@@ -2438,7 +2385,9 @@ class User implements IDBAccessObject {
                        throw new PasswordError( wfMessage( 'externaldberror' )->text() );
                }
 
-               $this->setInternalPassword( $str );
+               $this->setToken();
+               $this->setOption( 'watchlisttoken', false );
+               $this->setPasswordInternal( $str );
 
                return true;
        }
@@ -2446,19 +2395,49 @@ class User implements IDBAccessObject {
        /**
         * Set the password and reset the random token unconditionally.
         *
+        * @deprecated since 1.27. AuthManager is coming.
         * @param string|null $str New password to set or null to set an invalid
         *  password hash meaning that the user will not be able to log in
         *  through the web interface.
         */
        public function setInternalPassword( $str ) {
-               $this->setToken();
-               $this->setOption( 'watchlisttoken', false );
+               global $wgAuth;
 
-               $passwordFactory = self::getPasswordFactory();
-               $this->mPassword = $passwordFactory->newFromPlaintext( $str );
+               if ( $wgAuth->allowSetLocalPassword() ) {
+                       $this->setToken();
+                       $this->setOption( 'watchlisttoken', false );
+                       $this->setPasswordInternal( $str );
+               }
+       }
 
-               $this->mNewpassword = $passwordFactory->newFromCiphertext( null );
-               $this->mNewpassTime = null;
+       /**
+        * Actually set the password and such
+        * @param string|null $str New password to set or null to set an invalid
+        *  password hash meaning that the user will not be able to log in
+        *  through the web interface.
+        */
+       private function setPasswordInternal( $str ) {
+               $id = self::idFromName( $this->getName() );
+               if ( $id ) {
+                       $passwordFactory = new PasswordFactory();
+                       $passwordFactory->init( RequestContext::getMain()->getConfig() );
+                       $dbw = wfGetDB( DB_MASTER );
+                       $dbw->update(
+                               'user',
+                               array(
+                                       'user_password' => $passwordFactory->newFromPlaintext( $str )->toString(),
+                                       'user_newpassword' => PasswordFactory::newInvalidPassword()->toString(),
+                                       'user_newpass_time' => $dbw->timestampOrNull( null ),
+                               ),
+                               array(
+                                       'user_id' => $id,
+                               ),
+                               __METHOD__
+                       );
+                       $this->mPassword = null;
+               } else {
+                       $this->mPassword = $str;
+               }
        }
 
        /**
@@ -2493,19 +2472,27 @@ class User implements IDBAccessObject {
        /**
         * Set the password for a password reminder or new account email
         *
+        * @deprecated since 1.27, AuthManager is coming
         * @param string $str New password to set or null to set an invalid
         *  password hash meaning that the user will not be able to use it
         * @param bool $throttle If true, reset the throttle timestamp to the present
         */
        public function setNewpassword( $str, $throttle = true ) {
-               $this->loadPasswords();
+               $dbw = wfGetDB( DB_MASTER );
+
+               $passwordFactory = new PasswordFactory();
+               $passwordFactory->init( RequestContext::getMain()->getConfig() );
+               $update = array(
+                       'user_newpassword' => $passwordFactory->newFromPlaintext( $str )->toString(),
+               );
 
-               $this->mNewpassword = self::getPasswordFactory()->newFromPlaintext( $str );
                if ( $str === null ) {
-                       $this->mNewpassTime = null;
+                       $update['user_newpass_time'] = null;
                } elseif ( $throttle ) {
-                       $this->mNewpassTime = wfTimestampNow();
+                       $update['user_newpass_time'] = $dbw->timestamp();
                }
+
+               $dbw->update( 'user', $update, array( 'user_id' => $id ), __METHOD__ );
        }
 
        /**
@@ -2515,11 +2502,27 @@ class User implements IDBAccessObject {
         */
        public function isPasswordReminderThrottled() {
                global $wgPasswordReminderResendTime;
+
+               if ( !$wgPasswordReminderResendTime ) {
+                       return false;
+               }
+
                $this->load();
-               if ( !$this->mNewpassTime || !$wgPasswordReminderResendTime ) {
+
+               $db = ( $this->queryFlagsUsed & self::READ_LATEST )
+                       ? wfGetDB( DB_MASTER )
+                       : wfGetDB( DB_SLAVE );
+               $newpassTime = $db->selectField(
+                       'user',
+                       'user_newpass_time',
+                       array( 'user_id' => $this->getId() ),
+                       __METHOD__
+               );
+
+               if ( $newpassTime === null ) {
                        return false;
                }
-               $expiry = wfTimestamp( TS_UNIX, $this->mNewpassTime ) + $wgPasswordReminderResendTime * 3600;
+               $expiry = wfTimestamp( TS_UNIX, $newpassTime ) + $wgPasswordReminderResendTime * 3600;
                return time() < $expiry;
        }
 
@@ -3657,8 +3660,6 @@ class User implements IDBAccessObject {
         * @todo Only rarely do all these fields need to be set!
         */
        public function saveSettings() {
-               global $wgAuth;
-
                if ( wfReadOnly() ) {
                        // @TODO: caller should deal with this instead!
                        // This should really just be an exception.
@@ -3670,7 +3671,6 @@ class User implements IDBAccessObject {
                }
 
                $this->load();
-               $this->loadPasswords();
                if ( 0 == $this->mId ) {
                        return; // anon
                }
@@ -3681,17 +3681,10 @@ class User implements IDBAccessObject {
                $oldTouched = $this->mTouched;
                $newTouched = $this->newTouchedTimestamp();
 
-               if ( !$wgAuth->allowSetLocalPassword() ) {
-                       $this->mPassword = self::getPasswordFactory()->newFromCiphertext( null );
-               }
-
                $dbw = wfGetDB( DB_MASTER );
                $dbw->update( 'user',
                        array( /* SET */
                                'user_name' => $this->mName,
-                               'user_password' => $this->mPassword->toString(),
-                               'user_newpassword' => $this->mNewpassword->toString(),
-                               'user_newpass_time' => $dbw->timestampOrNull( $this->mNewpassTime ),
                                'user_real_name' => $this->mRealName,
                                'user_email' => $this->mEmail,
                                'user_email_authenticated' => $dbw->timestampOrNull( $this->mEmailAuthenticated ),
@@ -3699,7 +3692,6 @@ class User implements IDBAccessObject {
                                'user_token' => strval( $this->mToken ),
                                'user_email_token' => $this->mEmailToken,
                                'user_email_token_expires' => $dbw->timestampOrNull( $this->mEmailTokenExpires ),
-                               'user_password_expires' => $dbw->timestampOrNull( $this->mPasswordExpires ),
                        ), array( /* WHERE */
                                'user_id' => $this->mId,
                                'user_touched' => $dbw->timestamp( $oldTouched ) // CAS check
@@ -3757,10 +3749,6 @@ class User implements IDBAccessObject {
         * @param string $name Username to add
         * @param array $params Array of Strings Non-default parameters to save to
         *   the database as user_* fields:
-        *   - password: The user's password hash. Password logins will be disabled
-        *     if this is omitted.
-        *   - newpassword: Hash for a temporary password that has been mailed to
-        *     the user.
         *   - email: The user's email address.
         *   - email_authenticated: The email authentication timestamp.
         *   - real_name: The user's real name.
@@ -3771,9 +3759,15 @@ class User implements IDBAccessObject {
         * @return User|null User object, or null if the username already exists.
         */
        public static function createNew( $name, $params = array() ) {
+               foreach ( array( 'password', 'newpassword', 'newpass_time', 'password_expires' ) as $field ) {
+                       if ( isset( $params[$field] ) ) {
+                               wfDeprecated( __METHOD__ . " with param '$field'", '1.27' );
+                               unset( $params[$field] );
+                       }
+               }
+
                $user = new User;
                $user->load();
-               $user->loadPasswords();
                $user->setToken(); // init token
                if ( isset( $params['options'] ) ) {
                        $user->mOptions = $params['options'] + (array)$user->mOptions;
@@ -3782,12 +3776,13 @@ class User implements IDBAccessObject {
                $dbw = wfGetDB( DB_MASTER );
                $seqVal = $dbw->nextSequenceValue( 'user_user_id_seq' );
 
+               $noPass = PasswordFactory::newInvalidPassword()->toString();
+
                $fields = array(
                        'user_id' => $seqVal,
                        'user_name' => $name,
-                       'user_password' => $user->mPassword->toString(),
-                       'user_newpassword' => $user->mNewpassword->toString(),
-                       'user_newpass_time' => $dbw->timestampOrNull( $user->mNewpassTime ),
+                       'user_password' => $noPass,
+                       'user_newpassword' => $noPass,
                        'user_email' => $user->mEmail,
                        'user_email_authenticated' => $dbw->timestampOrNull( $user->mEmailAuthenticated ),
                        'user_real_name' => $user->mRealName,
@@ -3836,13 +3831,14 @@ class User implements IDBAccessObject {
         */
        public function addToDatabase() {
                $this->load();
-               $this->loadPasswords();
                if ( !$this->mToken ) {
                        $this->setToken(); // init token
                }
 
                $this->mTouched = $this->newTouchedTimestamp();
 
+               $noPass = PasswordFactory::newInvalidPassword()->toString();
+
                $dbw = wfGetDB( DB_MASTER );
                $inWrite = $dbw->writesOrCallbacksPending();
                $seqVal = $dbw->nextSequenceValue( 'user_user_id_seq' );
@@ -3850,9 +3846,8 @@ class User implements IDBAccessObject {
                        array(
                                'user_id' => $seqVal,
                                'user_name' => $this->mName,
-                               'user_password' => $this->mPassword->toString(),
-                               'user_newpassword' => $this->mNewpassword->toString(),
-                               'user_newpass_time' => $dbw->timestampOrNull( $this->mNewpassTime ),
+                               'user_password' => $noPass,
+                               'user_newpassword' => $noPass,
                                'user_email' => $this->mEmail,
                                'user_email_authenticated' => $dbw->timestampOrNull( $this->mEmailAuthenticated ),
                                'user_real_name' => $this->mRealName,
@@ -3894,6 +3889,11 @@ class User implements IDBAccessObject {
                }
                $this->mId = $dbw->insertId();
 
+               // Set the password now that it's in the DB, if applicable
+               if ( $this->mPassword !== null ) {
+                       $this->setPasswordInternal( $this->mPassword );
+               }
+
                // Clear instance cache other than user table data, which is already accurate
                $this->clearInstanceCache();
 
@@ -4002,13 +4002,14 @@ class User implements IDBAccessObject {
 
        /**
         * Check to see if the given clear-text password is one of the accepted passwords
+        * @deprecated since 1.27. AuthManager is coming.
         * @param string $password User password
         * @return bool True if the given password is correct, otherwise False
         */
        public function checkPassword( $password ) {
                global $wgAuth, $wgLegacyEncoding;
 
-               $this->loadPasswords();
+               $this->load();
 
                // Some passwords will give a fatal Status, which means there is
                // some sort of technical or security reason for this password to
@@ -4030,12 +4031,27 @@ class User implements IDBAccessObject {
                        return false;
                }
 
-               if ( !$this->mPassword->equals( $password ) ) {
+               $passwordFactory = new PasswordFactory();
+               $passwordFactory->init( RequestContext::getMain()->getConfig() );
+               $db = ( $this->queryFlagsUsed & self::READ_LATEST )
+                       ? wfGetDB( DB_MASTER )
+                       : wfGetDB( DB_SLAVE );
+
+               try {
+                       $mPassword = $passwordFactory->newFromCiphertext( $db->selectField(
+                               'user', 'user_password', array( 'user_id' => $this->getId() ), __METHOD__
+                       ) );
+               } catch ( PasswordError $e ) {
+                       wfDebug( 'Invalid password hash found in database.' );
+                       $mPassword = PasswordFactory::newInvalidPassword();
+               }
+
+               if ( !$mPassword->equals( $password ) ) {
                        if ( $wgLegacyEncoding ) {
                                // Some wikis were converted from ISO 8859-1 to UTF-8, the passwords can't be converted
                                // Check for this with iconv
                                $cp1252Password = iconv( 'UTF-8', 'WINDOWS-1252//TRANSLIT', $password );
-                               if ( $cp1252Password === $password || !$this->mPassword->equals( $cp1252Password ) ) {
+                               if ( $cp1252Password === $password || !$mPassword->equals( $cp1252Password ) ) {
                                        return false;
                                }
                        } else {
@@ -4043,10 +4059,8 @@ class User implements IDBAccessObject {
                        }
                }
 
-               $passwordFactory = self::getPasswordFactory();
-               if ( $passwordFactory->needsUpdate( $this->mPassword ) && !wfReadOnly() ) {
-                       $this->mPassword = $passwordFactory->newFromPlaintext( $password );
-                       $this->saveSettings();
+               if ( $passwordFactory->needsUpdate( $mPassword ) && !wfReadOnly() ) {
+                       $this->setPasswordInternal( $password );
                }
 
                return true;
@@ -4056,20 +4070,39 @@ class User implements IDBAccessObject {
         * Check if the given clear-text password matches the temporary password
         * sent by e-mail for password reset operations.
         *
+        * @deprecated since 1.27. AuthManager is coming.
         * @param string $plaintext
-        *
         * @return bool True if matches, false otherwise
         */
        public function checkTemporaryPassword( $plaintext ) {
                global $wgNewPasswordExpiry;
 
                $this->load();
-               $this->loadPasswords();
-               if ( $this->mNewpassword->equals( $plaintext ) ) {
-                       if ( is_null( $this->mNewpassTime ) ) {
+
+               $passwordFactory = new PasswordFactory();
+               $passwordFactory->init( RequestContext::getMain()->getConfig() );
+               $db = ( $this->queryFlagsUsed & self::READ_LATEST )
+                       ? wfGetDB( DB_MASTER )
+                       : wfGetDB( DB_SLAVE );
+
+               $row = $db->selectRow(
+                       'user',
+                       array( 'user_newpassword', 'user_newpass_time' ),
+                       array( 'user_id' => $this->getId() ),
+                       __METHOD__
+               );
+               try {
+                       $mNewpassword = $passwordFactory->newFromCiphertext( $row->user_newpassword );
+               } catch ( PasswordError $e ) {
+                       wfDebug( 'Invalid password hash found in database.' );
+                       $mNewpassword = PasswordFactory::newInvalidPassword();
+               }
+
+               if ( $mNewpassword->equals( $plaintext ) ) {
+                       if ( is_null( $row->user_newpass_time ) ) {
                                return true;
                        }
-                       $expiry = wfTimestamp( TS_UNIX, $this->mNewpassTime ) + $wgNewPasswordExpiry;
+                       $expiry = wfTimestamp( TS_UNIX, $row->user_newpass_time ) + $wgNewPasswordExpiry;
                        return ( time() < $expiry );
                } else {
                        return false;
@@ -4927,7 +4960,9 @@ class User implements IDBAccessObject {
         */
        public static function crypt( $password, $salt = false ) {
                wfDeprecated( __METHOD__, '1.24' );
-               $hash = self::getPasswordFactory()->newFromPlaintext( $password );
+               $passwordFactory = new PasswordFactory();
+               $passwordFactory->init( RequestContext::getMain()->getConfig() );
+               $hash = $passwordFactory->newFromPlaintext( $password );
                return $hash->toString();
        }
 
@@ -4956,7 +4991,9 @@ class User implements IDBAccessObject {
                        }
                }
 
-               $hash = self::getPasswordFactory()->newFromCiphertext( $hash );
+               $passwordFactory = new PasswordFactory();
+               $passwordFactory->init( RequestContext::getMain()->getConfig() );
+               $hash = $passwordFactory->newFromCiphertext( $hash );
                return $hash->equals( $password );
        }
 
@@ -5166,15 +5203,14 @@ class User implements IDBAccessObject {
        /**
         * Lazily instantiate and return a factory object for making passwords
         *
+        * @deprecated since 1.27, create a PasswordFactory directly instead
         * @return PasswordFactory
         */
        public static function getPasswordFactory() {
-               if ( self::$mPasswordFactory === null ) {
-                       self::$mPasswordFactory = new PasswordFactory();
-                       self::$mPasswordFactory->init( RequestContext::getMain()->getConfig() );
-               }
-
-               return self::$mPasswordFactory;
+               wfDeprecated( __METHOD__, '1.27' );
+               $ret = new PasswordFactory();
+               $ret->init( RequestContext::getMain()->getConfig() );
+               return $ret;
        }
 
        /**
@@ -5196,6 +5232,7 @@ class User implements IDBAccessObject {
         *
         * @todo FIXME: This does not belong here; put it in Html or Linker or somewhere
         *
+        * @deprecated since 1.27
         * @return array Array of HTML attributes suitable for feeding to
         *   Html::element(), directly or indirectly.  (Don't feed to Xml::*()!
         *   That will get confused by the boolean attribute syntax used.)
@@ -5209,7 +5246,7 @@ class User implements IDBAccessObject {
 
                # Note that the pattern requirement will always be satisfied if the
                # input is empty, so we need required in all cases.
-               #
+
                # @todo FIXME: Bug 23769: This needs to not claim the password is required
                # if e-mail confirmation is being used.  Since HTML5 input validation
                # is b0rked anyway in some browsers, just return nothing.  When it's
index db826a6..370911a 100644 (file)
 
 /**
  * Interface for messages with machine-readable data for use by the API
+ *
+ * The idea is that it's a Message that has some extra data for the API to use when interpreting it
+ * as an error (or, in the future, as a warning). Internals of MediaWiki often use messages (or
+ * message keys, or Status objects containing messages) to pass information about errors to the user
+ * (see e.g. Title::getUserPermissionsErrors()) and the API has to make do with that.
+ *
  * @since 1.25
  * @ingroup API
  */
diff --git a/includes/api/ApiQueryORM.php b/includes/api/ApiQueryORM.php
deleted file mode 100644 (file)
index dc10c91..0000000
+++ /dev/null
@@ -1,268 +0,0 @@
-<?php
-
-/**
- * Base query module for querying results from ORMTables.
- *
- * 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
- *
- * @since 1.21
- *
- * @file
- * @ingroup API
- *
- * @license GNU GPL v2+
- * @author Jeroen De Dauw < jeroendedauw@gmail.com >
- */
-abstract class ApiQueryORM extends ApiQueryBase {
-
-       /**
-        * Returns an instance of the IORMTable table being queried.
-        *
-        * @since 1.21
-        *
-        * @return IORMTable
-        */
-       abstract protected function getTable();
-
-       /**
-        * Returns the name of the individual rows.
-        * For example: page, user, contest, campaign, etc.
-        * This is used to appropriately name elements in XML.
-        * Deriving classes typically override this method.
-        *
-        * @since 1.21
-        *
-        * @return string
-        */
-       protected function getRowName() {
-               return 'item';
-       }
-
-       /**
-        * Returns the name of the list of rows.
-        * For example: pages, users, contests, campaigns, etc.
-        * This is used to appropriately name nodes in the output.
-        * Deriving classes typically override this method.
-        *
-        * @since 1.21
-        *
-        * @return string
-        */
-       protected function getListName() {
-               return 'items';
-       }
-
-       /**
-        * Returns the path to where the items results should be added in the result.
-        *
-        * @since 1.21
-        *
-        * @return null|string|array
-        */
-       protected function getResultPath() {
-               return null;
-       }
-
-       /**
-        * Get the parameters, find out what the conditions for the query are,
-        * run it, and add the results.
-        *
-        * @since 1.21
-        */
-       public function execute() {
-               $params = $this->getParams();
-
-               if ( !in_array( 'id', $params['props'] ) ) {
-                       $params['props'][] = 'id';
-               }
-
-               $results = $this->getResults( $params, $this->getConditions( $params ) );
-               $this->addResults( $params, $results );
-       }
-
-       /**
-        * Get the request parameters and remove all params set
-        * to null (ie those that are not actually provided).
-        *
-        * @since 1.21
-        *
-        * @return array
-        */
-       protected function getParams() {
-               return array_filter(
-                       $this->extractRequestParams(),
-                       function ( $prop ) {
-                               return isset( $prop );
-                       }
-               );
-       }
-
-       /**
-        * Get the conditions for the query. These will be provided as
-        * regular parameters, together with limit, props, continue,
-        * and possibly others which we need to get rid off.
-        *
-        * @since 1.21
-        *
-        * @param array $params
-        *
-        * @return array
-        */
-       protected function getConditions( array $params ) {
-               $conditions = array();
-               $fields = $this->getTable()->getFields();
-
-               foreach ( $params as $name => $value ) {
-                       if ( array_key_exists( $name, $fields ) ) {
-                               $conditions[$name] = $value;
-                       }
-               }
-
-               return $conditions;
-       }
-
-       /**
-        * Get the actual results.
-        *
-        * @since 1.21
-        *
-        * @param array $params
-        * @param array $conditions
-        *
-        * @return ORMResult
-        */
-       protected function getResults( array $params, array $conditions ) {
-               return $this->getTable()->select(
-                       $params['props'],
-                       $conditions,
-                       array(
-                               'LIMIT' => $params['limit'] + 1,
-                               'ORDER BY' => $this->getTable()->getPrefixedField( 'id' ) . ' ASC',
-                       ),
-                       __METHOD__
-               );
-       }
-
-       /**
-        * Serialize the results and add them to the result object.
-        *
-        * @since 1.21
-        *
-        * @param array $params
-        * @param ORMResult $results
-        */
-       protected function addResults( array $params, ORMResult $results ) {
-               $serializedResults = array();
-               $count = 0;
-
-               foreach ( $results as /* IORMRow */ $result ) {
-                       if ( ++$count > $params['limit'] ) {
-                               // We've reached the one extra which shows that
-                               // there are additional pages to be had. Stop here...
-                               $this->setContinueEnumParameter( 'continue', $result->getId() );
-                               break;
-                       }
-
-                       $serializedResults[] = $this->formatRow( $result, $params );
-               }
-
-               $this->setIndexedTagNames( $serializedResults );
-               $this->addSerializedResults( $serializedResults );
-       }
-
-       /**
-        * Formats a row to it's desired output format.
-        *
-        * @since 1.21
-        *
-        * @param IORMRow $result
-        * @param array $params
-        *
-        * @return mixed
-        */
-       protected function formatRow( IORMRow $result, array $params ) {
-               return $result->toArray( $params['props'] );
-       }
-
-       /**
-        * Set the tag names for formats such as XML.
-        *
-        * @since 1.21
-        *
-        * @param array $serializedResults
-        */
-       protected function setIndexedTagNames( array &$serializedResults ) {
-               ApiResult::setIndexedTagName( $serializedResults, $this->getRowName() );
-       }
-
-       /**
-        * Add the serialized results to the result object.
-        *
-        * @since 1.21
-        *
-        * @param array $serializedResults
-        */
-       protected function addSerializedResults( array $serializedResults ) {
-               $this->getResult()->addValue(
-                       $this->getResultPath(),
-                       $this->getListName(),
-                       $serializedResults
-               );
-       }
-
-       /**
-        * @see ApiBase::getAllowedParams()
-        * @return array
-        */
-       public function getAllowedParams() {
-               $params = array(
-                       'props' => array(
-                               ApiBase::PARAM_TYPE => $this->getTable()->getFieldNames(),
-                               ApiBase::PARAM_ISMULTI => true,
-                               ApiBase::PARAM_REQUIRED => true,
-                               ApiBase::PARAM_HELP_MSG => 'api-orm-param-props',
-                       ),
-                       'limit' => array(
-                               ApiBase::PARAM_DFLT => 20,
-                               ApiBase::PARAM_TYPE => 'limit',
-                               ApiBase::PARAM_MIN => 1,
-                               ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
-                               ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2,
-                               ApiBase::PARAM_HELP_MSG => 'api-orm-param-limit',
-                       ),
-                       'continue' => array(
-                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
-                       ),
-               );
-
-               return array_merge( $this->getTable()->getAPIParams(), $params );
-       }
-
-       /**
-        * @see ApiBase::getParamDescription()
-        * @deprecated since 1.25
-        * @return array
-        */
-       public function getParamDescription() {
-               $descriptions = array(
-                       'props' => 'Fields to query',
-                       'continue' => 'Offset number from where to continue the query',
-                       'limit' => 'Max amount of rows to return',
-               );
-
-               return array_merge( $this->getTable()->getFieldDescriptions(), $descriptions );
-       }
-}
index bcd5d9e..1265155 100644 (file)
@@ -246,6 +246,7 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                $data['misermode'] = (bool)$config->get( 'MiserMode' );
 
                $data['maxuploadsize'] = UploadBase::getMaxUploadSize();
+               $data['minuploadchunksize'] = (int)$this->getConfig()->get( 'MinUploadChunkSize' );
 
                $data['thumblimits'] = $config->get( 'ThumbLimits' );
                ApiResult::setArrayType( $data['thumblimits'], 'BCassoc' );
index b621cb0..320649f 100644 (file)
@@ -82,7 +82,7 @@ class ApiUpload extends ApiBase {
 
                // Check if the uploaded file is sane
                if ( $this->mParams['chunk'] ) {
-                       $maxSize = $this->mUpload->getMaxUploadSize();
+                       $maxSize = UploadBase::getMaxUploadSize();
                        if ( $this->mParams['filesize'] > $maxSize ) {
                                $this->dieUsage( 'The file you submitted was too large', 'file-too-large' );
                        }
@@ -139,6 +139,12 @@ class ApiUpload extends ApiBase {
                        return $this->getStashResult( $warnings );
                }
 
+               // Check throttle after we've handled warnings
+               if ( UploadBase::isThrottled( $this->getUser() )
+               ) {
+                       $this->dieUsageMsg( 'actionthrottledtext' );
+               }
+
                // This is the most common case -- a normal upload with no warnings
                // performUpload will return a formatted properly for the API with status
                return $this->performUpload( $warnings );
@@ -198,13 +204,30 @@ class ApiUpload extends ApiBase {
        private function getChunkResult( $warnings ) {
                $result = array();
 
-               $result['result'] = 'Continue';
                if ( $warnings && count( $warnings ) > 0 ) {
                        $result['warnings'] = $warnings;
                }
+
                $request = $this->getMain()->getRequest();
                $chunkPath = $request->getFileTempname( 'chunk' );
                $chunkSize = $request->getUpload( 'chunk' )->getSize();
+               $totalSoFar = $this->mParams['offset'] + $chunkSize;
+               $minChunkSize = $this->getConfig()->get( 'MinUploadChunkSize' );
+
+               // Sanity check sizing
+               if ( $totalSoFar > $this->mParams['filesize'] ) {
+                       $this->dieUsage(
+                               'Offset plus current chunk is greater than claimed file size', 'invalid-chunk'
+                       );
+               }
+
+               // Enforce minimum chunk size
+               if ( $totalSoFar != $this->mParams['filesize'] && $chunkSize < $minChunkSize ) {
+                       $this->dieUsage(
+                               "Minimum chunk size is $minChunkSize bytes for non-final chunks", 'chunk-too-small'
+                       );
+               }
+
                if ( $this->mParams['offset'] == 0 ) {
                        try {
                                $filekey = $this->performStash();
@@ -216,6 +239,18 @@ class ApiUpload extends ApiBase {
                        }
                } else {
                        $filekey = $this->mParams['filekey'];
+
+                       // Don't allow further uploads to an already-completed session
+                       $progress = UploadBase::getSessionStatus( $this->getUser(), $filekey );
+                       if ( !$progress ) {
+                               // Probably can't get here, but check anyway just in case
+                               $this->dieUsage( 'No chunked upload session with this key', 'stashfailed' );
+                       } elseif ( $progress['result'] !== 'Continue' || $progress['stage'] !== 'uploading' ) {
+                               $this->dieUsage(
+                                       'Chunked upload is already completed, check status for details', 'stashfailed'
+                               );
+                       }
+
                        $status = $this->mUpload->addChunk(
                                $chunkPath, $chunkSize, $this->mParams['offset'] );
                        if ( !$status->isGood() ) {
@@ -224,18 +259,12 @@ class ApiUpload extends ApiBase {
                                );
 
                                $this->dieUsage( $status->getWikiText(), 'stashfailed', 0, $extradata );
-
-                               return array();
                        }
                }
 
                // Check we added the last chunk:
-               if ( $this->mParams['offset'] + $chunkSize == $this->mParams['filesize'] ) {
+               if ( $totalSoFar == $this->mParams['filesize'] ) {
                        if ( $this->mParams['async'] ) {
-                               $progress = UploadBase::getSessionStatus( $this->getUser(), $filekey );
-                               if ( $progress && $progress['result'] === 'Poll' ) {
-                                       $this->dieUsage( "Chunk assembly already in progress.", 'stashfailed' );
-                               }
                                UploadBase::setSessionStatus(
                                        $this->getUser(),
                                        $filekey,
@@ -255,21 +284,38 @@ class ApiUpload extends ApiBase {
                        } else {
                                $status = $this->mUpload->concatenateChunks();
                                if ( !$status->isGood() ) {
+                                       UploadBase::setSessionStatus(
+                                               $this->getUser(),
+                                               $filekey,
+                                               array( 'result' => 'Failure', 'stage' => 'assembling', 'status' => $status )
+                                       );
                                        $this->dieUsage( $status->getWikiText(), 'stashfailed' );
-
-                                       return array();
                                }
 
                                // The fully concatenated file has a new filekey. So remove
                                // the old filekey and fetch the new one.
+                               UploadBase::setSessionStatus( $this->getUser(), $filekey, false );
                                $this->mUpload->stash->removeFile( $filekey );
                                $filekey = $this->mUpload->getLocalFile()->getFileKey();
 
                                $result['result'] = 'Success';
                        }
+               } else {
+                       UploadBase::setSessionStatus(
+                               $this->getUser(),
+                               $filekey,
+                               array(
+                                       'result' => 'Continue',
+                                       'stage' => 'uploading',
+                                       'offset' => $totalSoFar,
+                                       'status' => Status::newGood(),
+                               )
+                       );
+                       $result['result'] = 'Continue';
+                       $result['offset'] = $totalSoFar;
                }
+
                $result['filekey'] = $filekey;
-               $result['offset'] = $this->mParams['offset'] + $chunkSize;
 
                return $result;
        }
@@ -379,6 +425,10 @@ class ApiUpload extends ApiBase {
                        // Chunk upload
                        $this->mUpload = new UploadFromChunks();
                        if ( isset( $this->mParams['filekey'] ) ) {
+                               if ( $this->mParams['offset'] === 0 ) {
+                                       $this->dieUsage( 'Cannot supply a filekey when offset is 0', 'badparams' );
+                               }
+
                                // handle new chunk
                                $this->mUpload->continueChunks(
                                        $this->mParams['filename'],
@@ -386,6 +436,10 @@ class ApiUpload extends ApiBase {
                                        $request->getUpload( 'chunk' )
                                );
                        } else {
+                               if ( $this->mParams['offset'] !== 0 ) {
+                                       $this->dieUsage( 'Must supply a filekey when offset is non-zero', 'badparams' );
+                               }
+
                                // handle first chunk
                                $this->mUpload->initialize(
                                        $this->mParams['filename'],
@@ -787,8 +841,15 @@ class ApiUpload extends ApiBase {
                        ),
                        'stash' => false,
 
-                       'filesize' => null,
-                       'offset' => null,
+                       'filesize' => array(
+                               ApiBase::PARAM_TYPE => 'integer',
+                               ApiBase::PARAM_MIN => 0,
+                               ApiBase::PARAM_MAX => UploadBase::getMaxUploadSize(),
+                       ),
+                       'offset' => array(
+                               ApiBase::PARAM_TYPE => 'integer',
+                               ApiBase::PARAM_MIN => 0,
+                       ),
                        'chunk' => array(
                                ApiBase::PARAM_TYPE => 'upload',
                        ),
index 7bdf29a..278dc6f 100644 (file)
@@ -8,6 +8,7 @@
                        "Hiba Alshawi"
                ]
        },
+       "apihelp-main-param-action": "أي فعل للعمل.",
        "apihelp-main-param-format": "صيغة الخرج.",
        "apihelp-block-description": "منع مستخدم.",
        "apihelp-block-param-reason": "السبب للمنع.",
        "apihelp-delete-description": "حذف صفحة.",
        "apihelp-delete-param-unwatch": "أزل الصفحة من قائمة مراقبتك.",
        "apihelp-edit-description": "إنشاء وتعديل الصفحات.",
+       "apihelp-edit-param-text": "محتوى الصفحة",
+       "apihelp-edit-param-notminor": "تعديل غير طفيف.",
+       "apihelp-edit-param-bot": "علم على هذا التعديل كبوت.",
        "apihelp-edit-param-watch": "أضف الصفحة إلى لائحة مراقبة المستعمل الحالي",
+       "apihelp-edit-example-edit": "عدل صفحة.",
        "apihelp-emailuser-description": "مراسلة المستخدم",
+       "apihelp-feedrecentchanges-param-tagfilter": "فلتر بالوسم.",
+       "apihelp-filerevert-param-comment": "تعليق الرفع.",
+       "apihelp-help-example-recursive": "كل المساعدة في صفحة واحدة.",
+       "apihelp-import-param-summary": "تعليق الاستيراد.",
+       "apihelp-login-param-name": "اسم المستخدم.",
+       "apihelp-login-param-password": "كلمة السر",
+       "apihelp-login-example-login": "تسجيل الدخول",
+       "apihelp-move-param-reason": "السبب لإعادة التسمية.",
+       "apihelp-move-param-ignorewarnings": "تجاهل أي تحذيرات.",
+       "apihelp-opensearch-param-namespace": "النطاقات للبحث.",
        "apihelp-patrol-example-rcid": "ابحث عن تغيير جديد",
+       "apihelp-patrol-example-revid": "راجع مراجعة.",
+       "apihelp-protect-description": "غير مستوى الحماية لصفحة.",
+       "apihelp-protect-example-protect": "حماية صفحة.",
+       "apihelp-query+allpages-param-filterredir": "أي الصفحات للعرض.",
+       "apihelp-query+allrevisions-description": "اعرض كل المراجعات.",
        "apihelp-query+imageinfo-paramvalue-prop-userid": "إضافة هوية المستخدم الذي قام بتحميل كل إصدار ملف.",
        "apihelp-query+prefixsearch-param-offset": "عدد النتائج المراد تخطيها."
 }
index 8a5ee52..1c3a1de 100644 (file)
@@ -21,7 +21,7 @@
        "apihelp-main-param-servedby": "Zahrnout do odpovědi název hostitele, který požadavek obsloužil.",
        "apihelp-main-param-curtimestamp": "Zahrnout do odpovědi aktuální časové razítko.",
        "apihelp-main-param-origin": "Pokud k API přistupujete pomocí mezidoménového AJAXového požadavku (CORS), nastavte tento parametr na doménu původu. Musí být součástí všech předběžných požadavků, takže musí být součástí URI požadavku (nikoli těla POSTu). Hodnota musí přesně odpovídat jednomu z původů v hlavičce <code>Origin</code>, takže musí být nastavena na něco jako <kbd>https://en.wikipedia.org</kbd> nebo <kbd>https://meta.wikimedia.org</kbd>. Pokud parametr neodpovídá hlavičce <code>Origin</code>, bude vrácena odpověď 403. Pokud parametr odpovídá hlavičce <code>Origin</code> a tento původ je na bílé listině, bude nastavena hlavička <code>Access-Control-Allow-Origin</code>.",
-       "apihelp-main-param-uselang": "Jazyk, který se má použít pro překlad hlášení. Seznam kódů lze načíst z <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> se <kbd>siprop=languages</kbd>, nebo zadejte „<kbd>user</kbd>“ pro použití předvoleného jazyka aktuálního uživatele či „<kbd>content</kbd>“ pro použití jazyka obsahu této wiki.",
+       "apihelp-main-param-uselang": "Jazyk, který se má použít pro překlad hlášení. Pomocí <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> se <kbd>siprop=languages</kbd> získáte seznam jazykových kódů nebo zadejte „<kbd>user</kbd>“ pro použití předvoleného jazyka aktuálního uživatele či „<kbd>content</kbd>“ pro použití jazyka obsahu této wiki.",
        "apihelp-block-description": "Zablokovat uživatele.",
        "apihelp-block-param-user": "Uživatelské jméno, IP adresa nebo rozsah IP adres, které chcete zablokovat.",
        "apihelp-block-param-reason": "Důvod bloku.",
        "apihelp-unblock-param-user": "Uživatel, IP adresa nebo záběr IP adres k odblokování. Nelze použít dohromady s <var>$1id</var>.",
        "apihelp-watch-example-watch": "Sledovat stránku <kbd>Main Page</kbd>.",
        "apihelp-watch-example-generator": "Zobrazit prvních několik stránek z hlavního jmenného prostoru.",
-       "apihelp-format-example-generic": "Výsledek dotazu vypsat ve formátu $1.",
+       "apihelp-format-example-generic": "Výsledek dotazu vrátit ve formátu $1.",
        "apihelp-dbg-description": "Vypisuje data ve formátu funkce <code>var_export()</code> z PHP.",
        "apihelp-dbgfm-description": "Vypisuje data ve formátu funkce <code>var_export()</code> z PHP (v čitelné HTML podobě).",
        "apihelp-json-description": "Vypisuje data ve formátu JSON.",
        "apihelp-none-description": "Nevypisuje nic.",
        "apihelp-php-description": "Vypisuje data v serializačním formátu PHP.",
        "apihelp-phpfm-description": "Vypisuje data v serializačním formátu PHP (v čitelné HTML podobě).",
-       "apihelp-rawfm-description": "Vypisuje data s ladicími prvky ve formátu JSON (v čitelné HTML podobě).",
+       "apihelp-rawfm-description": "Data včetně ladicích prvků vypisuje ve formátu JSON (v čitelné HTML podobě).",
        "apihelp-txt-description": "Vypisuje data ve formátu funkce <code>print_r()</code> z PHP.",
        "apihelp-txtfm-description": "Vypisuje data ve formátu funkce <code>print_r()</code> z PHP (v čitelné HTML podobě).",
        "apihelp-xml-description": "Vypisuje data ve formátu XML.",
        "apihelp-yaml-description": "Vypisuje data ve formátu YAML.",
        "apihelp-yamlfm-description": "Vypisuje data ve formátu YAML (v čitelné HTML podobě).",
        "api-format-title": "Odpověď z MediaWiki API",
-       "api-format-prettyprint-header": "Toto je HTML reprezentace formátu $1. HTML se hodí pro ladění, ale pro aplikační použití je nevhodné.\n\nPro změnu výstupního formátu uveďte parametr <var>format</var>. Abyste viděli ne-HTML reprezentaci formátu $1, nastavte <kbd>format=$2</kbd>.\n\nVíce informací najdete v [[mw:Special:MyLanguage/API:Main page|úplné dokumentaci]] nebo v [[Special:ApiHelp/main|nápovědě k API]].",
+       "api-format-prettyprint-header": "Toto je HTML reprezentace formátu $1. HTML se hodí pro ladění, ale pro aplikační použití je nevhodné.\n\nPro změnu výstupního formátu uveďte parametr <var>format</var>. Abyste viděli ne-HTML reprezentaci formátu $1, nastavte <kbd>format=$2</kbd>.\n\nVíce informací najdete v [[mw:API|úplné dokumentaci]] nebo v [[Special:ApiHelp/main|nápovědě k API]].",
        "api-format-prettyprint-header-only-html": "Toto je HTML reprezentace určená pro ladění, která není vhodná pro použití v aplikacích.\n\nVíce informací najdete v [[mw:API|úplné dokumentaci]] nebo [[Special:ApiHelp/main|dokumentaci API]].",
        "api-help-title": "Nápověda k MediaWiki API",
        "api-help-lead": "Toto je automaticky generovaná dokumentační stránka k MediaWiki API.\n\nDokumentace a příklady: https://www.mediawiki.org/wiki/API",
        "api-help-datatypes": "Některé typy parametrů v API potřebují bližší vysvětlení:\n;boolean\n:Booleovské parametry fungují jako zaškrtávací políčka v HTML: pokud je parametr uveden, bez ohledu na hodnotu, je považován za pravdivý. Pro nepravdivou hodnotu parametr zcela vynechte.\n;časová značka\n:Časové značky lze uvádět v několika formátech. Doporučuje se datum a čas podle ISO 8601. Všechny časy jsou v UTC a obsažené časové pásmo je ignorováno.\n:* Datum a čas podle ISO 8601, <kbd><var>2001</var>-<var>01</var>-<var>15</var>T<var>14</var>:<var>56</var>:<var>00</var>Z</kbd> (interpunkce a <kbd>Z</kbd> jsou nepovinné)\n:* Datum a čas podle ISO 8601 s (ignorovaným) zlomkem sekundy, <kbd><var>2001</var>-<var>01</var>-<var>15</var>T<var>14</var>:<var>56</var>:<var>00</var>.<var>00001</var>Z</kbd> (pomlčky, dvojtečky a <kbd>Z</kbd> jsou nepovinné)\n:* Formát MediaWiki, <kbd><var>2001</var><var>01</var><var>15</var><var>14</var><var>56</var><var>00</var></kbd>\n:* Obecný číselný formát, <kbd><var>2001</var>-<var>01</var>-<var>15</var> <var>14</var>:<var>56</var>:<var>00</var></kbd> (nepovinné časové pásmo <kbd>GMT</kbd>, <kbd>+<var>##</var></kbd> nebo <kbd>-<var>##</var></kbd> se ignoruje)\n:* Formát EXIF, <kbd><var>2001</var>:<var>01</var>:<var>15</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* Formát podle RFC 2822 (časové pásmo lze vynechat), <kbd><var>Mon</var>, <var>15</var> <var>Jan</var> <var>2001</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* Formát podle RFC 850 (časové pásmo lze vynechat), <kbd><var>Monday</var>, <var>15</var>-<var>Jan</var>-<var>2001</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* Formát podle céčkové funkce ctime, <kbd><var>Mon</var> <var>Jan</var> <var>15</var> <var>14</var>:<var>56</var>:<var>00</var> <var>2001</var></kbd>\n:* Sekundy od 1970-01-01T00:00:00Z jako celé číslo o 1–13 číslicích (s výjimkou <kbd>0</kbd>)\n:* Řetězec <kbd>now</kbd>",
        "api-help-param-type-integer": "Typ: {{PLURAL:$1|1=celé číslo|2=seznam celých čísel}}",
        "api-help-param-type-boolean": "Typ: boolean ([[Special:ApiHelp/main#main/datatypes|podrobnosti]])",
-       "api-help-param-list": "{{PLURAL:$1|1=Jedna hodnota|2=Hodnoty (oddělené <kbd>{{!}}</kbd>)}}: $2",
+       "api-help-param-list": "{{PLURAL:$1|1=Jedna z následujících hodnot|2=Hodnoty (oddělené <kbd>{{!}}</kbd>)}}: $2",
        "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=Musí být prázdné|Může být prázdné nebo $2}}",
        "api-help-param-limit": "Není dovoleno více než $1.",
        "api-help-param-limit2": "Není dovoleno více než $1 ($2 pro boty).",
index f254f1b..2dce6a4 100644 (file)
        "apihelp-none-description": "Nichts ausgeben.",
        "apihelp-php-description": "Daten im serialisierten PHP-Format ausgeben.",
        "apihelp-phpfm-description": "Daten im serialisierten PHP-Format ausgeben (schöngedruckt in HTML).",
-       "apihelp-rawfm-description": "Daten mit den Fehlerbehebungselementen im JSON-Format ausgeben (schöngedruckt in HTML).",
+       "apihelp-rawfm-description": "Daten, einschließlich Fehlerbehebungselementen, im JSON-Format ausgeben (schöngedruckt in HTML).",
        "apihelp-txt-description": "Daten im PHP-<code>print_r()</code>-Format ausgeben.",
        "apihelp-txtfm-description": "Daten im PHP-<code>print_r()</code>-Format ausgeben (schöngedruckt in HTML).",
        "apihelp-xml-description": "Daten im XML-Format ausgeben.",
        "apihelp-yamlfm-description": "Daten im YAML-Format ausgeben (schöngedruckt in HTML).",
        "api-format-title": "MediaWiki-API-Ergebnis",
        "api-format-prettyprint-header": "Dies ist die HTML-Repräsentation des $1-Formats. HTML ist zur Fehlerbehebung gut, aber unpassend für den Anwendungsgebrauch.\n\nGib den Parameter <var>format</var> an, um das Ausgabeformat zu ändern. Um die Nicht-HTML-Repräsentation des $1-Formats anzusehen, lege <kbd>format=$2</kbd> fest.\n\nSiehe die [[mw:API|vollständige Dokumentation]] oder die [[Special:ApiHelp/main|API-Hilfe]] für weitere Informationen.",
-       "api-orm-param-props": "Felder an die Anfrage.",
-       "api-orm-param-limit": "Maximale Anzahl zurückgegebender Zeilen.",
        "api-pageset-param-titles": "Eine Liste der Titel, an denen gearbeitet werden soll.",
        "api-pageset-param-pageids": "Eine Liste der Seitenkennungen, an denen gearbeitet werden soll.",
        "api-pageset-param-revids": "Eine Liste der Versionskennungen, an denen gearbeitet werden soll.",
index 90d7fa7..b53289a 100644 (file)
        "apihelp-query+siteinfo-paramvalue-prop-usergroups": "Returns user groups and the associated permissions.",
        "apihelp-query+siteinfo-paramvalue-prop-libraries": "Returns libraries installed on the wiki.",
        "apihelp-query+siteinfo-paramvalue-prop-extensions": "Returns extensions installed on the wiki.",
-       "apihelp-query+siteinfo-paramvalue-prop-fileextensions": "Returns list of file extensions allowed to be uploaded.",
+       "apihelp-query+siteinfo-paramvalue-prop-fileextensions": "Returns list of file extensions (file types) allowed to be uploaded.",
        "apihelp-query+siteinfo-paramvalue-prop-rightsinfo": "Returns wiki rights (license) information if available.",
        "apihelp-query+siteinfo-paramvalue-prop-restrictions": "Returns information on available restriction (protection) types.",
        "apihelp-query+siteinfo-paramvalue-prop-languages": "Returns a list of languages MediaWiki supports (optionally localised by using <var>$1inlanguagecode</var>).",
        "apihelp-php-description": "Output data in serialized PHP format.",
        "apihelp-php-param-formatversion": "Output formatting:\n;1:Backwards-compatible format (XML-style booleans, <samp>*</samp> keys for content nodes, etc.).\n;2:Experimental modern format. Details may change!\n;latest:Use the latest format (currently <kbd>2</kbd>), may change without warning.",
        "apihelp-phpfm-description": "Output data in serialized PHP format (pretty-print in HTML).",
-       "apihelp-rawfm-description": "Output data with the debugging elements in JSON format (pretty-print in HTML).",
+       "apihelp-rawfm-description": "Output data, including debugging elements, in JSON format (pretty-print in HTML).",
        "apihelp-txt-description": "Output data in PHP's <code>print_r()</code> format.",
        "apihelp-txtfm-description": "Output data in PHP's <code>print_r()</code> format (pretty-print in HTML).",
        "apihelp-xml-description": "Output data in XML format.",
        "api-format-prettyprint-header": "This is the HTML representation of the $1 format. HTML is good for debugging, but is unsuitable for application use.\n\nSpecify the <var>format</var> parameter to change the output format. To see the non-HTML representation of the $1 format, set <kbd>format=$2</kbd>.\n\nSee the [[mw:API|complete documentation]], or the [[Special:ApiHelp/main|API help]] for more information.",
        "api-format-prettyprint-header-only-html": "This is an HTML representation intended for debugging, and is unsuitable for application use.\n\nSee the [[mw:API|complete documentation]], or the [[Special:ApiHelp/main|API help]] for more information.",
 
-       "api-orm-param-props": "Fields to query.",
-       "api-orm-param-limit": "Max amount of rows to return.",
-
        "api-pageset-param-titles": "A list of titles to work on.",
        "api-pageset-param-pageids": "A list of page IDs to work on.",
        "api-pageset-param-revids": "A list of revision IDs to work on.",
index da7b902..2614c32 100644 (file)
@@ -81,6 +81,7 @@
        "apihelp-delete-param-title": "Titre de la page que vous voulez supprimer. Impossible de l’utiliser avec <var>$1pageid</var>.",
        "apihelp-delete-param-pageid": "ID de la page que vous voulez supprimer. Impossible à utiliser avec <var>$1title</var>.",
        "apihelp-delete-param-reason": "Motif de suppression. Si non défini, un motif généré automatiquement sera utilisé.",
+       "apihelp-delete-param-tags": "Modifier les balises à appliquer à l’entrée dans le journal des suppressions.",
        "apihelp-delete-param-watch": "Ajouter la page à la liste de suivi de l’utilisateur actuel.",
        "apihelp-delete-param-watchlist": "Ajouter ou supprimer sans distinction la page de la liste de suivi de l'utilisateur actuel, utiliser les préférences ou ne rien changer au suivi.",
        "apihelp-delete-param-unwatch": "Supprimer la page de la liste de suivi de l'utilisateur actuel.",
        "api-format-title": "Résultat de l’API de MediaWiki",
        "api-format-prettyprint-header": "Voici la représentation HTML du format $1. HTML est utile pour le débogage, mais inapproprié pour être utilisé dans une application.\n\nSpécifiez le paramètre <var>format</var> pour modifier le format de sortie. Pour voir la représentation non HTML du format $1, mettez <kbd>format=$2</kbd>.\n\nVoyez la [[mw:API|documentation complète]], ou l’[[Special:ApiHelp/main|aide de l’API]] pour plus d’information.",
        "api-format-prettyprint-header-only-html": "Ceci est une représentation HTML à des fins de déboguage, et n’est pas approprié à une utilisation applicative.\n\nVoir la [[mw:API|documentation complète]], ou l’[[Special:ApiHelp/main|aide de l’API]] pour plus d’information.",
-       "api-orm-param-props": "Champs à rechercher.",
-       "api-orm-param-limit": "Nombre maximal de lignes à renvoyer.",
        "api-pageset-param-titles": "Une liste des titres sur lesquels travailler.",
        "api-pageset-param-pageids": "Une liste des IDs de page sur lesquelles travailler.",
        "api-pageset-param-revids": "Une liste des IDs de révision sur lesquelles travailler.",
index 2b40125..f859a7b 100644 (file)
@@ -70,6 +70,7 @@
        "apihelp-delete-param-title": "Título da páxina a eliminar. Non pode usarse xunto con <var>$1pageid</var>.",
        "apihelp-delete-param-pageid": "Identificador da páxina a eliminar. Non pode usarse xunto con <var>$1title</var>.",
        "apihelp-delete-param-reason": "Razón para o borrado. Se non se indica, usarase unha razón xenerada automaticamente.",
+       "apihelp-delete-param-tags": "Cambiar as etiquetas a aplicar na entrada do rexistro de borrado.",
        "apihelp-delete-param-watch": "Engadir esta páxina á lista de vixilancia do usuario actual.",
        "apihelp-delete-param-watchlist": "Engadir ou eliminar sen condicións a páxina da lista de vixiancia do usuario actual, use as preferencias ou non cambie a vixiancia.",
        "apihelp-delete-param-unwatch": "Eliminar esta páxina da lista de vixilancia do usuario actual.",
        "api-format-title": "Resultado de API de MediaWiki",
        "api-format-prettyprint-header": "Esta é a representación HTML do formato $1. HTML é bó para depurar, pero non é axeitado para usar nunha aplicación.\n\nEspecifique o parámetro <var>format</var> para cambiar o formato de saída. Para ver a representación non-HTML do formato $1, fixe <kbd>format=$2</kbd>.\n\n\nRevise a [[mw:API|documentación completa]], ou a [[Special:ApiHelp/main|axuda da API]] para obter máis información.",
        "api-format-prettyprint-header-only-html": "Esta é unha representación HTML empregada para a depuración de erros, e non é axeitada para o uso de aplicacións.\n\nVexa a [[mw:API|documentación completa]], ou a [[Special:ApiHelp/main|axuda da API]] para máis información.",
-       "api-orm-param-props": "Campos a consultar.",
-       "api-orm-param-limit": "Número máximo de filas a mostrar.",
        "api-pageset-param-titles": "Lista de títulos nos que traballar.",
        "api-pageset-param-pageids": "Lista de identificadores de páxina nos que traballar.",
        "api-pageset-param-revids": "Unha lista de IDs de modificacións sobre as que traballar.",
index d0ff9f5..c820278 100644 (file)
        "apihelp-query+siteinfo-paramvalue-prop-usergroups": "החזרת קבוצות משתמשים וההרשאות המשויכות.",
        "apihelp-query+siteinfo-paramvalue-prop-libraries": "החזרת הספריות המותקנות בוויקי.",
        "apihelp-query+siteinfo-paramvalue-prop-extensions": "החזרת ההרחבות המותקנות בוויקי.",
-       "apihelp-query+siteinfo-paramvalue-prop-fileextensions": "החזרת רשימת סיומות קבצים שאפשר להעלות.",
+       "apihelp-query+siteinfo-paramvalue-prop-fileextensions": "החזרת רשימת סיומות קבצים (סוגי קבצים) שאפשר להעלות.",
        "apihelp-query+siteinfo-paramvalue-prop-rightsinfo": "החזרת הזכויות (הרישיון) של הוויקי, אם זמין.",
        "apihelp-query+siteinfo-paramvalue-prop-restrictions": "החזרת מידע על ההגבלות (ההגנות) הזמינות.",
        "apihelp-query+siteinfo-paramvalue-prop-languages": "החזרת השפות שמדיה־ויקי תומכת בהן (זה יכול להיות מותאם מקומים עם <var>$1inlanguagecode</var>).",
        "apihelp-php-description": "לפלוט נתונים בתסדיר PHP מוסדר.",
        "apihelp-php-param-formatversion": "תסדיר הפלט:\n;1:תסדיר עם תאימות אחורה (ערכים בוליאניים בסגנון XML, מפתחות <samp>*</samp> לצומתי תוכן, וכו').\n;2:תסדיר מודרני ניסיוני. הפרטים יכולים להשתנות!\n;latest:להשתמש בתסדיר החדש ביותר (כרגע <kbd>2</kbd>), יכול להשתנות ללא התראה.",
        "apihelp-phpfm-description": "לפלוט נתונים בתסדיר PHP מוסדר (עם הדפסה יפה ב־HTML).",
-       "apihelp-rawfm-description": "לפלוט את הנתונים עם אלמנטים לניפוי שגיאות בתסדיר JSON (עם הדפסה יפה ב־HTML).",
+       "apihelp-rawfm-description": "לפלוט את הנתונים, כולל אלמנטים לניפוי שגיאות, בתסדיר JSON (עם הדפסה יפה ב־HTML).",
        "apihelp-txt-description": "לפלוט נתונים בתסדיר <code dir=\"ltr\">print_r()</code> של PHP.",
        "apihelp-txtfm-description": "לפלוט את הנתונים בתסדיר <code dir=\"ltr\">print_r()</code> של PHP (עם הדפסה יפה ב־HTML).",
        "apihelp-xml-description": "לפלוט נתונים בתסדיר XML.",
        "api-format-title": "תוצאה של API של מדיה־ויקי",
        "api-format-prettyprint-header": "זהו ייצוג ב־HTML של תסדיר $1. תסדיר HTML טוב לתיקון שגיאות, אבל אינו מתאים ליישומים.\n\nיש לציין את הפרמטר <var>format</var> כדי לשנות את תסדיר הפלט. כדי לראות ייצוג של תסדיר $1 לא ב־HTML יש לרשום <kbd>format=$2</kbd>.\n\nר' את [[mw:API|התיעוד המלא]], או את [[Special:ApiHelp/main|העזרה של API]] למידע נוסף.",
        "api-format-prettyprint-header-only-html": "זה ייצוג HTML שמיועד לניפוי שגיאות ואינו מתאים לשימוש ביישומים.\n\nר' את [[mw:API|התיעוד המלא]] או את [[Special:ApiHelp/main|העזרה של API]] למידע נוסף.",
-       "api-orm-param-props": "באילו שדות לעשות שאילתה.",
-       "api-orm-param-limit": "מספר מרבי של שורות להחזיר.",
        "api-pageset-param-titles": "רשימת כותרות.",
        "api-pageset-param-pageids": "רשימת מזהי דף לעבוד עליהם.",
        "api-pageset-param-revids": "רשימת מזהי גרסה לעבוד עליהם.",
index c4b6164..0230ae0 100644 (file)
@@ -11,6 +11,7 @@
                        "Macofe"
                ]
        },
+       "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Documentation]]\n* [[mw:API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api メーリングリスト]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API 告知]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R バグの報告とリクエスト]\n</div>\n<strong>状態:</strong> このページに表示されている機能は全て動作するはずですが、この API は未だ活発に開発されており、変更される可能性があります。アップデートの通知を受け取るには、[https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ the mediawiki-api-announce メーリングリスト]に参加してください。\n\n<strong>誤ったリクエスト:</strong> 誤ったリクエストが API に贈られた場合、\"MediaWiki-API-Error\" HTTP ヘッダーが送信され、そのヘッダーの値と送り返されるエラーコードは同じ値にセットされます。より詳しい情報は [[mw:API:Errors_and_warnings|API: Errors and warnings]] を参照してください。",
        "apihelp-main-param-action": "実行する操作です。",
        "apihelp-main-param-format": "出力する形式です。",
        "apihelp-main-param-smaxage": "<code>s-maxage</code> HTTP キャッシュ コントロール ヘッダー に、この秒数を設定します。エラーがキャッシュされることはありません。",
@@ -29,6 +30,7 @@
        "apihelp-block-param-autoblock": "その利用者が最後に使用したIPアドレスと、ブロック後に編集を試みた際のIPアドレスを自動的にブロックします。",
        "apihelp-block-param-noemail": "Wikiを通して電子メールを送信することを禁止します。(<code>blockemail</code> 権限が必要です)",
        "apihelp-block-param-hidename": "ブロック記録から利用者名を秘匿します。(<code>hideuser</code> 権限が必要です)",
+       "apihelp-block-param-allowusertalk": "自身のトークページの編集を許可する (<var>[[mw:Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var> に依存)。",
        "apihelp-block-param-reblock": "その利用者がすでにブロックされている場合、ブロックを上書きします。",
        "apihelp-block-param-watchuser": "その利用者またはIPアドレスの利用者ページとトークページをウォッチします。",
        "apihelp-block-example-ip-simple": "IPアドレス <kbd>192.0.2.5</kbd> を <kbd>First strike<kbd> という理由で3日ブロックする",
@@ -37,6 +39,7 @@
        "apihelp-checktoken-param-type": "調べるトークンの種類。",
        "apihelp-checktoken-param-token": "調べるトークン。",
        "apihelp-checktoken-example-simple": "<kbd>csrf</kbd> トークンの妥当性を調べる。",
+       "apihelp-clearhasmsg-description": "現在の利用者の <code>hasmsg</code> フラグを消去します。",
        "apihelp-compare-description": "2つの版間の差分を取得します。\n\n\"from\" と \"to\" の両方の版番号、ページ名、もしくはページIDを渡す必要があります。",
        "apihelp-compare-param-fromtitle": "比較する1つ目のページ名。",
        "apihelp-compare-param-fromid": "比較する1つ目のページID。",
        "apihelp-createaccount-param-token": "最初のリクエストで得られたアカウント作成用トークンです。",
        "apihelp-createaccount-param-email": "利用者の電子メールアドレス (任意)。",
        "apihelp-createaccount-param-realname": "利用者の本名 (省略可能)。",
-       "apihelp-createaccount-param-mailpassword": "設定されると (その値を問わず)、ランダムなパスワードがその利用者に電子メールで送られます。",
+       "apihelp-createaccount-param-mailpassword": "設定されると (その値を問わず)、無作為なパスワードがその利用者に電子メールで送られます。",
        "apihelp-createaccount-param-reason": "ログに記録されるアカウント作成の理由 (任意)。",
+       "apihelp-createaccount-param-language": "利用者の言語コードの既定値 (省略可能, 既定ではコンテンツ言語)。",
        "apihelp-createaccount-example-pass": "利用者 <kbd>testuser</kbd> をパスワード <kbd>test123</kbd> として作成する。",
-       "apihelp-createaccount-example-mail": "利用者 <kbd>testmailuser</kbd>を作成し、ランダムに生成されたパスワードをメールで送る",
+       "apihelp-createaccount-example-mail": "利用者 <kbd>testmailuser</kbd>を作成し、無作為に生成されたパスワードをメールで送る。",
        "apihelp-delete-description": "ページを削除します。",
        "apihelp-delete-param-title": "削除するページ名です。<var>$1pageid</var> とは同時に使用できません。",
        "apihelp-delete-param-pageid": "削除するページIDです。<var>$1title</var> とは同時に使用できません。",
@@ -73,6 +77,7 @@
        "apihelp-edit-param-section": "節番号です。先頭の節の場合は <kbd>0</kbd>、新しい節の場合は <kbd>new</kbd>を指定します。",
        "apihelp-edit-param-sectiontitle": "新しい節の名前です。",
        "apihelp-edit-param-text": "ページの本文。",
+       "apihelp-edit-param-summary": "編集の要約。$1section=new で $1sectiontitle が設定されていない場合は節名としても利用されます。",
        "apihelp-edit-param-tags": "この版に適用する変更タグ。",
        "apihelp-edit-param-minor": "細部の編集",
        "apihelp-edit-param-notminor": "細部の編集ではない。",
        "apihelp-login-example-login": "ログイン",
        "apihelp-logout-description": "ログアウトしてセッションデータを消去します。",
        "apihelp-logout-example-logout": "現在の利用者をログアウトする。",
+       "apihelp-managetags-param-operation": "実行する操作:\n;create: 手動適用のための新たな変更タグを作成します。\n;delete: 変更タグをデータベースから削除し、そのタグが使用されているすべての版、最近の更新項目、記録項目からそれを除去します。\n;activate: 変更タグを有効化し、利用者がそのタグを手動で適用できるようにします。\n;deactivate: 変更タグを無効化し、利用者がそのタグを手動で適用することができないようにします。",
        "apihelp-managetags-param-tag": "作成、削除、有効化、または無効化するタグ。タグの作成の場合、そのタグは存在しないものでなければなりません。タグの削除の場合、そのタグが存在しなければなりません。タグの有効化の場合、そのタグが存在し、かつ拡張機能によって使用されていないものでなければなりません。タグの無効化の場合、そのタグが現在有効であって手動で定義されたものでなければなりません。",
        "apihelp-managetags-param-reason": "タグを作成、削除、有効化、または無効化する追加の理由。",
+       "apihelp-managetags-param-ignorewarnings": "操作中に発生したすべての警告を無視するかどうか。",
        "apihelp-managetags-example-create": "<kbd>spam</kbd> という名前のタグを <kbd>For use in edit patrolling</kbd> という理由で作成する",
        "apihelp-managetags-example-delete": "<kbd>vandlaism</kbd> タグを <kbd>Misspelt</kbd> という理由で削除する",
        "apihelp-managetags-example-activate": "<kbd>spam</kbd> という名前のタグを <kbd>For use in edit patrolling</kbd> という理由で有効化する",
        "apihelp-opensearch-param-limit": "返す結果の最大数。",
        "apihelp-opensearch-param-namespace": "検索する名前空間。",
        "apihelp-opensearch-param-suggest": "<var>[[mw:Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var> が false の場合、何もしません。",
+       "apihelp-opensearch-param-redirects": "転送を処理する方法:\n;return: 転送ページそのものを返します。\n;resolve: 転送先のページを返します。$1limit より返される結果が少なくなるかもしれません。\n歴史的な理由により、$1format=json では \"return\" が、他の形式では \"resolve\" が既定です。",
        "apihelp-opensearch-param-format": "出力する形式。",
        "apihelp-opensearch-example-te": "<kbd>Te</kbd> から始まるページを検索する。",
        "apihelp-options-example-reset": "すべて初期設定に戻す。",
        "apihelp-options-example-complex": "すべての個人設定を初期化し、<kbd>skin</kbd> および <kbd> nickname </kbd> を設定する。",
        "apihelp-paraminfo-description": "API モジュールに関する情報を取得します。",
        "apihelp-paraminfo-param-modules": "モジュールの名前のリスト (<var>action</var> および <var>format</var> パラメーターの値, または <kbd>main</kbd>). <kbd>+</kbd> を使用して下位モジュールを指定できます。",
+       "apihelp-paraminfo-param-helpformat": "ヘルプ文字列の形式。",
+       "apihelp-paraminfo-param-querymodules": "クエリモジュール名のリスト (<var>prop</var>, <var>meta</var> or <var>list</var> パラメータの値)。<kbd>$1querymodules=foo</kbd> の代わりに <kbd>$1modules=query+foo</kbd> を使用してください。",
        "apihelp-paraminfo-example-1": "<kbd>[[Special:ApiHelp/parse|action=parse]]</kbd>, <kbd>[[Special:ApiHelp/jsonfm|format=jsonfm]]</kbd>, <kbd>[[Special:ApiHelp/query+allpages|action=query&list=allpages]]</kbd>, and <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> に関する情報を表示する。",
        "apihelp-parse-param-summary": "構文解析のための要約",
        "apihelp-parse-param-prop": "どの情報を取得するか:",
        "apihelp-protect-param-watch": "指定されると、保護(解除)するページが現在の利用者のウォッチリストに追加されます。",
        "apihelp-protect-example-protect": "ページを保護する。",
        "apihelp-protect-example-unprotect2": "制限を設定されたページ保護を解除します。",
-       "apihelp-purge-description": "æ\8c\87å®\9aã\81\95ã\82\8cã\81\9fã\82¿ã\82¤ã\83\88ã\83«のキャッシュをパージします。\n\n利用者がログインしていない場合は、 POST リクエストが必要です。",
+       "apihelp-purge-description": "æ\8c\87å®\9aã\81\95ã\82\8cã\81\9fã\83\9aã\83¼ã\82¸のキャッシュをパージします。\n\n利用者がログインしていない場合は、 POST リクエストが必要です。",
        "apihelp-purge-param-forcelinkupdate": "リンクテーブルを更新します。",
        "apihelp-purge-example-simple": "ページ <kbd>Main Page</kbd> および <kbd>API</kbd> をパージする。",
        "apihelp-purge-example-generator": "標準名前空間にある最初の10ページをパージする。",
        "apihelp-query+allcategories-description": "すべてのカテゴリを一覧表示します。",
        "apihelp-query+allcategories-param-from": "列挙を開始するカテゴリ。",
        "apihelp-query+allcategories-param-to": "列挙を終了するカテゴリ。",
-       "apihelp-query+allcategories-param-prefix": "ã\81\93ã\81®å\80¤ã\81§å§\8bã\81¾ã\82\8bã\82¿ã\82¤ã\83\88ã\83«のカテゴリを検索します。",
+       "apihelp-query+allcategories-param-prefix": "ã\81\93ã\81®å\80¤ã\81§å§\8bã\81¾ã\82\8bã\83\9aã\83¼ã\82¸å\90\8dのカテゴリを検索します。",
        "apihelp-query+allcategories-param-dir": "並べ替えの方向。",
        "apihelp-query+allcategories-param-limit": "返すカテゴリの数。",
        "apihelp-query+allcategories-param-prop": "取得するプロパティ:",
        "apihelp-query+allcategories-example-size": "カテゴリを、内包するページ数の情報と共に、一覧表示する。",
        "apihelp-query+allcategories-example-generator": "<kbd>List</kbd> で始まるカテゴリページに関する情報を取得する。",
        "apihelp-query+alldeletedrevisions-description": "利用者によって削除された、または名前空間内の削除されたすべての版を一覧表示する。",
+       "apihelp-query+alldeletedrevisions-paraminfo-useronly": "<var>$3user</var> と同時に使用します。",
        "apihelp-query+alldeletedrevisions-paraminfo-nonuseronly": "<var>$3user</var> と同時に使用できません。",
        "apihelp-query+alldeletedrevisions-param-start": "列挙の始点となるタイムスタンプ。",
        "apihelp-query+alldeletedrevisions-param-end": "列挙の終点となるタイムスタンプ。",
        "apihelp-query+alldeletedrevisions-example-user": "利用者 <kbd>Example</kbd> による削除された直近の50版を一覧表示する。",
        "apihelp-query+alldeletedrevisions-example-ns-main": "標準名前空間にある削除された最初の50版を一覧表示する。",
        "apihelp-query+allfileusages-description": "存在しないものを含め、すべてのファイルの使用状況を一覧表示する。",
-       "apihelp-query+allfileusages-param-from": "å\88\97æ\8c\99ã\82\92é\96\8bå§\8bã\81\99ã\82\8bã\83\95ã\82¡ã\82¤ã\83«ã\81®ã\82¿ã\82¤ã\83\88ã\83«。",
-       "apihelp-query+allfileusages-param-to": "å\88\97æ\8c\99ã\82\92çµ\82äº\86ã\81\99ã\82\8bã\83\95ã\82¡ã\82¤ã\83«ã\81®ã\82¿ã\82¤ã\83\88ã\83«。",
-       "apihelp-query+allfileusages-param-prefix": "ã\81\93ã\81®å\80¤ã\81§å§\8bã\81¾ã\82\8bã\81\99ã\81¹ã\81¦ã\81®ã\83\95ã\82¡ã\82¤ã\83«ã\81®ã\82¿ã\82¤ã\83\88ルを検索する。",
+       "apihelp-query+allfileusages-param-from": "å\88\97æ\8c\99ã\82\92é\96\8bå§\8bã\81\99ã\82\8bã\83\95ã\82¡ã\82¤ã\83«ã\81®ã\83\9aã\83¼ã\82¸å\90\8d。",
+       "apihelp-query+allfileusages-param-to": "å\88\97æ\8c\99ã\82\92çµ\82äº\86ã\81\99ã\82\8bã\83\95ã\82¡ã\82¤ã\83«ã\81®ã\83\9aã\83¼ã\82¸å\90\8d。",
+       "apihelp-query+allfileusages-param-prefix": "ã\81\93ã\81®å\80¤ã\81§å§\8bã\81¾ã\82\8bã\83\9aã\83¼ã\82¸å\90\8dã\81®ã\81\99ã\81¹ã\81¦ã\81®ã\83\95ã\82¡ã\82¤ルを検索する。",
        "apihelp-query+allfileusages-param-prop": "どの情報を結果に含めるか:",
        "apihelp-query+allfileusages-paramvalue-prop-ids": "使用しているページのページIDを追加します ($1unique とは同時に使用できません)。",
        "apihelp-query+allfileusages-paramvalue-prop-title": "ファイルのページ名を追加します。",
-       "apihelp-query+allfileusages-example-unique": "ã\83¦ã\83\8bã\83¼ã\82¯ã\81ªã\83\95ã\82¡ã\82¤ã\83«ã\81®ã\82¿ã\82¤ã\83\88ã\83«ã\82\92ä¸\80覧。",
+       "apihelp-query+allfileusages-example-unique": "ã\83¦ã\83\8bã\83¼ã\82¯ã\81ªã\83\95ã\82¡ã\82¤ã\83«ã\82\92ä¸\80覧表示ã\81\99ã\82\8b。",
        "apihelp-query+allfileusages-example-generator": "ファイルを含むページを取得します。",
        "apihelp-query+allimages-description": "順次すべての画像を列挙します。",
        "apihelp-query+allimages-param-sort": "並べ替えに使用するプロパティ。",
        "apihelp-query+allimages-param-from": "列挙の始点となる画像タイトル。$1sort=name を指定した場合のみ使用できます。",
-       "apihelp-query+allimages-param-to": "å\88\97æ\8c\99ã\81®çµ\82ç\82¹ã\81¨ã\81ªã\82\8bç\94»å\83\8fã\82¿ã\82¤ã\83\88ã\83«。$1sort=name を指定した場合のみ使用できます。",
+       "apihelp-query+allimages-param-to": "å\88\97æ\8c\99ã\81®çµ\82ç\82¹ã\81¨ã\81ªã\82\8bç\94»å\83\8fã\81®ã\83\9aã\83¼ã\82¸å\90\8d。$1sort=name を指定した場合のみ使用できます。",
        "apihelp-query+allimages-param-start": "列挙の始点となるタイムスタンプ。$1sort=timestamp を指定した場合のみ使用できます。",
        "apihelp-query+allimages-param-end": "列挙の終点となるタイムスタンプ。$1sort=timestamp を指定した場合のみ使用できます。",
        "apihelp-query+allimages-param-prefix": "この値で始まるすべての画像タイトルを検索する。$1sort=name を指定した場合のみ使用できます。",
        "apihelp-query+allimages-example-mimetypes": "MIMEタイプが <kbd>image/png</kbd> または <kbd>image/gif</kbd> であるファイルの一覧を表示する",
        "apihelp-query+allimages-example-generator": "<kbd>T</kbd> で始まる4つのファイルに関する情報を表示する。",
        "apihelp-query+alllinks-description": "与えられた名前空間へのすべてのリンクを一覧表示します。",
-       "apihelp-query+alllinks-param-from": "å\88\97æ\8c\99ã\82\92é\96\8bå§\8bã\81\99ã\82\8bã\83ªã\83³ã\82¯ã\81®ã\82¿ã\82¤ã\83\88ã\83«。",
+       "apihelp-query+alllinks-param-from": "å\88\97æ\8c\99ã\82\92é\96\8bå§\8bã\81\99ã\82\8bã\83ªã\83³ã\82¯ã\81®ã\83\9aã\83¼ã\82¸å\90\8d。",
        "apihelp-query+alllinks-param-to": "列挙を終了するリンクのページ名。",
        "apihelp-query+alllinks-param-prefix": "この値で始まるすべてのリンクされたページを検索する。",
-       "apihelp-query+alllinks-paramvalue-prop-title": "ã\83ªã\83³ã\82¯ã\81®ã\82¿ã\82¤ã\83\88ã\83«を追加します。",
+       "apihelp-query+alllinks-paramvalue-prop-title": "ã\83ªã\83³ã\82¯ã\81®ã\83\9aã\83¼ã\82¸å\90\8dを追加します。",
        "apihelp-query+alllinks-param-namespace": "列挙する名前空間。",
        "apihelp-query+alllinks-example-B": "<kbd>B</kbd> で始まるリンクされたページ (存在しないページも含む)を、リンク元のページIDとともに表示する。",
        "apihelp-query+alllinks-example-unique": "ユニークなリンクのタイトルを一覧。",
        "apihelp-query+deletedrevs-example-mode2": "<kbd>Bob</kbd> による、削除された最後の50投稿を一覧表示する(モード 2)。",
        "apihelp-query+deletedrevs-example-mode3-main": "標準名前空間にある削除された最初の50版を一覧表示する(モード 3)。",
        "apihelp-query+deletedrevs-example-mode3-talk": "{{ns:talk}}名前空間にある削除された最初の50版を一覧表示する(モード 3)。",
-       "apihelp-query+disabled-description": "このクエリ モジュールは無効化されています。",
+       "apihelp-query+disabled-description": "このクエリモジュールは無効化されています。",
        "apihelp-query+embeddedin-param-title": "検索するページ名。$1pageid とは同時に使用できません。",
        "apihelp-query+embeddedin-param-pageid": "検索するページID. $1titleとは同時に使用できません。",
        "apihelp-query+embeddedin-param-namespace": "列挙する名前空間。",
        "apihelp-query+exturlusage-param-namespace": "列挙するページ名前空間。",
        "apihelp-query+exturlusage-example-simple": "<kbd>http://www.mediawiki.org</kbd> にリンクしているページを一覧表示する。",
        "apihelp-query+filearchive-description": "削除されたファイルをすべて順に列挙します。",
-       "apihelp-query+filearchive-param-from": "列挙の始点となるイメージ・タイトル。",
-       "apihelp-query+filearchive-param-to": "列挙の終点となるイメージ・タイトル。",
+       "apihelp-query+filearchive-param-from": "列挙の始点となる画像のページ名。",
+       "apihelp-query+filearchive-param-to": "列挙の終点となる画像のページ名。",
        "apihelp-query+filearchive-param-prop": "どの画像情報を取得するか:",
-       "apihelp-query+filearchive-paramvalue-prop-timestamp": "ã\82¢ã\83\83ã\83\97ã\83­ã\83¼ã\83\89ã\81\95ã\82\8cã\81\9fã\83\90ã\83¼ã\82¸ã\83§ã\83³ã\81®タイムスタンプを追加します。",
-       "apihelp-query+filearchive-paramvalue-prop-user": "イメージのバージョンをアップロードした利用者を追加します。",
+       "apihelp-query+filearchive-paramvalue-prop-timestamp": "ã\83\90ã\83¼ã\82¸ã\83§ã\83³ã\81\8cã\82¢ã\83\83ã\83\97ã\83­ã\83¼ã\83\89ã\81\95ã\82\8cã\81\9fタイムスタンプを追加します。",
+       "apihelp-query+filearchive-paramvalue-prop-user": "画像のバージョンをアップロードした利用者を追加します。",
        "apihelp-query+filearchive-paramvalue-prop-size": "バイト単位での画像や高さ、幅、ページ数のサイズを追加します(該当する場合)。",
        "apihelp-query+filearchive-paramvalue-prop-mime": "画像の MIME を追加します。",
        "apihelp-query+filearchive-paramvalue-prop-mediatype": "画像のメディア・タイプを追加します。",
        "apihelp-query+imageinfo-paramvalue-prop-url": "ファイルと説明ページへのURLを提供します。",
        "apihelp-query+imageinfo-paramvalue-prop-size": "バイト単位でファイルや高さ、幅、ページ数のサイズを追加します(該当する場合)。",
        "apihelp-query+imageinfo-paramvalue-prop-mime": "ファイルのMIMEタイプを追加します。",
-       "apihelp-query+imageinfo-paramvalue-prop-thumbmime": "イメージ・サムネイルのMIMEタイプを追加します(requires url and param $1urlwidth)。",
+       "apihelp-query+imageinfo-paramvalue-prop-thumbmime": "画像サムネイルのMIMEタイプを追加します(url と $1urlwidth パラメータが必須です)。",
        "apihelp-query+imageinfo-paramvalue-prop-mediatype": "ファイルのメディアタイプを追加します。",
        "apihelp-query+imageinfo-paramvalue-prop-metadata": "ファイルのバージョンの Exif メタデータを一覧表示します。",
        "apihelp-query+imageinfo-paramvalue-prop-bitdepth": "バージョンのビット深度を追加します。",
        "apihelp-query+info-paramvalue-prop-protection": "それぞれのページの保護レベルを一覧表示する。",
        "apihelp-query+info-example-simple": "<kbd>Main Page</kbd> に関する情報を取得する。",
        "apihelp-query+iwbacklinks-param-prop": "取得するプロパティ:",
-       "apihelp-query+iwbacklinks-paramvalue-prop-iwtitle": "ã\82¦ã\82£ã\82­é\96\93ã\81®ã\82¿ã\82¤ã\83\88ã\83«を追加します。",
+       "apihelp-query+iwbacklinks-paramvalue-prop-iwtitle": "ã\82¦ã\82£ã\82­é\96\93ã\83ªã\83³ã\82¯ã\81®ã\83\9aã\83¼ã\82¸å\90\8dを追加します。",
        "apihelp-query+iwbacklinks-example-simple": "[[wikibooks:Test]] へリンクしているページを取得する。",
        "apihelp-query+iwbacklinks-example-generator": "[[wikibooks:Test]] へリンクしているページの情報を取得する。",
        "apihelp-query+iwlinks-paramvalue-prop-url": "完全なURLを追加します。",
        "apihelp-query+langbacklinks-param-title": "検索する言語間リンク。$1lang と同時に使用しなければなりません。",
        "apihelp-query+langbacklinks-param-limit": "返すページの総数。",
        "apihelp-query+langbacklinks-param-prop": "取得するプロパティ:",
-       "apihelp-query+langbacklinks-paramvalue-prop-lltitle": "言語リンクのタイトルを追加します。",
+       "apihelp-query+langbacklinks-paramvalue-prop-lltitle": "言語間リンクのページ名を追加します。",
        "apihelp-query+langbacklinks-example-simple": "[[:fr:Test]] へリンクしているページを取得する。",
        "apihelp-query+langbacklinks-example-generator": "[[:fr:Test]] へリンクしているページの情報を取得する。",
        "apihelp-query+langlinks-param-limit": "返す言語間リンクの数。",
        "apihelp-query+logevents-paramvalue-prop-title": "記録イベントにページ名を追加します。",
        "apihelp-query+logevents-paramvalue-prop-type": "記録イベントのタイプを追加します。",
        "apihelp-query+logevents-paramvalue-prop-comment": "記録イベントのコメントを追加します。",
-       "apihelp-query+logevents-paramvalue-prop-parsedcomment": "ログイベントの構文解析されたコメントを追加します。",
+       "apihelp-query+logevents-paramvalue-prop-parsedcomment": "記録イベントの構文解析されたコメントを追加します。",
        "apihelp-query+logevents-paramvalue-prop-details": "記録イベントに関する追加の詳細を一覧表示します。",
        "apihelp-query+logevents-paramvalue-prop-tags": "記録イベントのタグを一覧表示します。",
        "apihelp-query+logevents-param-type": "このタイプの記録項目のみに絞り込む。",
        "apihelp-query+querypage-param-limit": "返す結果の数。",
        "apihelp-query+querypage-example-ancientpages": "[[Special:Ancientpages]] の結果を返す。",
        "apihelp-query+random-param-namespace": "この名前空間にあるページのみを返します。",
+       "apihelp-query+random-param-limit": "返す無作為なページの数を制限する。",
        "apihelp-query+random-param-redirect": "代わりに <kbd>$1filterredir=redirects</kbd> を使用してください。",
        "apihelp-query+random-param-filterredir": "転送ページを絞り込む方法。",
        "apihelp-query+random-example-simple": "標準名前空間から2つのページを無作為に返す。",
        "apihelp-query+recentchanges-param-user": "この利用者による変更のみを一覧表示する。",
        "apihelp-query+recentchanges-param-excludeuser": "この利用者による変更を一覧表示しない。",
        "apihelp-query+recentchanges-param-tag": "このタグが付与された版のみ一覧表示する。",
+       "apihelp-query+recentchanges-paramvalue-prop-parsedcomment": "構文解析された編集コメントを追加します。",
+       "apihelp-query+recentchanges-paramvalue-prop-flags": "編集のフラグを追加します。",
        "apihelp-query+recentchanges-paramvalue-prop-timestamp": "編集のタイムスタンプを追加します。",
        "apihelp-query+recentchanges-paramvalue-prop-title": "編集のページ名を追加します。",
        "apihelp-query+recentchanges-paramvalue-prop-ids": "ページID、最近の変更IDと新旧の版IDを追加します。",
        "apihelp-query+recentchanges-paramvalue-prop-sizes": "バイト単位の新旧のページの長さを追加します。",
+       "apihelp-query+recentchanges-paramvalue-prop-redirect": "編集されたページが転送ページである場合、印を付けます。",
+       "apihelp-query+recentchanges-paramvalue-prop-patrolled": "巡回可能な編集について、巡回済みかどうか印を付けます。",
        "apihelp-query+recentchanges-paramvalue-prop-loginfo": "記録項目に記録の情報 (記録ID,  記録タイプなど) を追加します。",
+       "apihelp-query+recentchanges-param-token": "代わりに <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd> を使用してください。",
        "apihelp-query+recentchanges-param-limit": "返す変更の総数。",
        "apihelp-query+recentchanges-param-toponly": "最新の版である変更のみを一覧表示する。",
        "apihelp-query+recentchanges-param-generaterevisions": "ジェネレータとして使用される場合、版IDではなくページ名を生成します。関連する版IDのない最近の変更の項目 (例えば、ほとんどの記録項目) は何も生成しません。",
        "apihelp-query+revisions+base-paramvalue-prop-parsedcomment": "その版の利用者による、構文解析されたコメント。",
        "apihelp-query+revisions+base-paramvalue-prop-content": "その版のテキスト。",
        "apihelp-query+revisions+base-paramvalue-prop-tags": "その版のタグ。",
+       "apihelp-query+revisions+base-param-limit": "返す版の数を制限する。",
        "apihelp-query+search-description": "全文検索を行います。",
        "apihelp-query+search-param-search": "この値を含むページ名または本文を検索します。Wikiの検索バックエンド実装に応じて、あなたは特別な検索機能を呼び出すための文字列を検索することができます。",
        "apihelp-query+search-param-namespace": "この名前空間内のみを検索します。",
        "apihelp-revisiondelete-example-revision": "<kbd>Main Page</kbd> の版 <kbd>12345</kbd> の本文を隠す。",
        "apihelp-rollback-param-title": "巻き戻すページ名です。<var>$1pageid</var> とは同時に使用できません。",
        "apihelp-rollback-param-pageid": "巻き戻すページのページIDです。<var>$1title</var> とは同時に使用できません。",
+       "apihelp-rollback-param-user": "巻き戻し対象の編集を行った利用者名。",
+       "apihelp-rollback-param-markbot": "巻き戻された編集と巻き戻しをボットの編集としてマークする。",
        "apihelp-rollback-example-simple": "利用者 <kbd>Example</kbd> による <kbd>Main Page</kbd> への最後の一連の編集を巻き戻す。",
+       "apihelp-rollback-example-summary": "IP利用者 <kbd>192.0.2.5</kbd> による <kbd>Main Page</kbd> への最後の一連の編集を <kbd>Reverting vandalism</kbd> という理由で、それらの編集とその差し戻しをボットの編集としてマークして差し戻す。",
        "apihelp-stashedit-param-title": "編集されているページのページ名。",
        "apihelp-tag-param-reason": "変更の理由。",
        "apihelp-tag-example-log": "<kbd>Wrongly applied</kbd> という理由で <kbd>spam</kbd> タグを 記録項目ID 123 から取り除く",
        "apihelp-json-description": "データを JSON 形式で出力します。",
        "apihelp-json-param-callback": "指定すると、指定した関数呼び出しで出力をラップします。安全のため、利用者固有のデータはすべて制限されます。",
        "apihelp-json-param-utf8": "指定すると、大部分の非 ASCII 文字 (すべてではありません) を、16 進のエスケープ シーケンスに置換する代わりに UTF-8 として符号化します。<var>formatversion</var> が <kbd>1</kbd> でない場合は既定です。",
+       "apihelp-json-param-ascii": "指定すると、すべての非ASCII文字を16進エスケープにエンコードします。<var>formatversion</var> が <kbd>1</kbd> の場合既定です。",
        "apihelp-jsonfm-description": "データを JSON 形式 (HTML に埋め込んだ形式) で出力します。",
        "apihelp-none-description": "何も出力しません。",
        "apihelp-php-description": "データを PHP のシリアル化した形式で出力します。",
        "apihelp-yamlfm-description": "データを YAML 形式 (HTML に埋め込んだ形式) で出力します。",
        "api-format-title": "MediaWiki API の結果",
        "api-format-prettyprint-header": "このページは $1 形式を HTML で表現したものです。HTML はデバッグに役立ちますが、アプリケーションでの使用には適していません。\n\n<var>format</var> パラメーターを指定すると出力形式を変更できます 。$1 形式の非 HTML 版を閲覧するには、format=$2 を設定してください。\n\n詳細情報については [[mw:API|完全な説明文書]]または [[Special:ApiHelp/main|API のヘルプ]]を参照してください。",
+       "api-pageset-param-titles": "対象のページ名のリスト。",
+       "api-pageset-param-pageids": "対象のページIDのリスト。",
+       "api-pageset-param-revids": "対象の版IDのリスト。",
+       "api-pageset-param-generator": "クエリモジュールを実行することにより対象のページの一覧を取得する。\n\n<strong>注意</strong> Generator パラメーターの名前は \"g\" で始まります。例を参照してください。",
+       "api-pageset-param-redirects-generator": "<var>$1titles</var>, <var>$1pageids</var>, および <var>$1revids</var>, および <var>$1generator</var> によって返されたページの転送を自動的に解決する。",
        "api-help-title": "MediaWiki API ヘルプ",
        "api-help-lead": "このページは自動生成された MediaWiki API の説明文書ページです。\n\n説明文書と例: https://www.mediawiki.org/wiki/API",
        "api-help-main-header": "メイン モジュール",
index b39de68..ccd0dc3 100644 (file)
@@ -9,7 +9,8 @@
                        "Alex00728",
                        "Hwangjy9",
                        "Kurousagi",
-                       "Revi"
+                       "Revi",
+                       "Yearning"
                ]
        },
        "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|설명문서]]\n* [[mw:API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api 메일링 리스트]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API 공지 사항] * [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R 버그 및 요청] </div>\n<strong>상태:</strong> 이 페이지에 표시된 모든 기능은 정상 작동할 것이지만, API는 여전히 활발하게 개발되고 있으며, 언제든지 바뀔 수 있습니다. 업데이트 정보를 받아보려면 [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ the mediawiki-api-announce 메일링 리스트]를 구독하십시오.\n\n<strong>잘못된 요청:</strong> API에 잘못된 요청이 전송되면 HTTP 헤더에서 \"MediaWiki-API-Error\" 키를 보내고, 헤더 값과 오류 코드가 같게 설정됩니다. 자세한 정보에 대해서는 [[mw:API:Errors_and_warnings|API:오류 및 경고]]를 참조하십시오.",
@@ -89,6 +90,7 @@
        "apihelp-query+pageswithprop-param-dir": "정렬 순서",
        "apihelp-query+prefixsearch-param-search": "문자열 검색",
        "apihelp-unblock-description": "사용자를 차단 해제합니다.",
+       "apihelp-rawfm-description": "출력 데이터, 디버깅 요소를 포함, (HTML에 포함된)JSON형식.",
        "api-help-title": "미디어위키 API 도움말",
        "api-help-lead": "이 페이지는 자동으로 생성된 미디어위키 API 도움말 문서입니다.\n\n설명 문서 및 예시: https://www.mediawiki.org/wiki/API",
        "api-help-main-header": "메인 모듈",
index 6ae334b..60d2a05 100644 (file)
@@ -14,7 +14,7 @@
        "apihelp-main-param-requestid": "Jehde Aanjahb vun heh weed widder med ußjejovve. Esuh kam_mer einzel Affrohre ussenein hallde.",
        "apihelp-main-param-servedby": "Donn däm ẞööver, dä et jedonn hät, singe Nahme med ußjävve.",
        "apihelp-main-param-curtimestamp": "Donn de aktoälle Zigg un et Dattum med ußjävve.",
-       "apihelp-main-param-uselang": "De schprohch för et Övversäzze vun Täxte un Nohreeschte. En Leß met de Köözelle kam_mer vun dä Sigg <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> holle, met <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">siprop=languages</kbd>, udder jiff <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">user</kbd> aan, öm dem aktoälle Metmaacher sing eetzde Schprohch ze krijje, udder nemm <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">content</kbd> öm heh dämm Wikki singe Ennhald sing Schprohch ze krijje.",
+       "apihelp-main-param-uselang": "De Schprohch för et Övversäzze vun Täxte un Nohreeschte. <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> holle, met <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">siprop=languages</kbd> jidd en Leß met de Köözelle för Schprohche uß, udder jiff <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">user</kbd> aan, öm dem aktoälle Metmaacher sing eetzde Schprohch ze krijje, udder nemm <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">content</kbd> öm heh dämm Wikki singe Ennhald sing Schprohch ze krijje.",
        "apihelp-block-description": "Ene Metmaacher schpärre.",
        "apihelp-block-param-user": "Däm Nahme vun däm Metmaacher, de <i lang=\"en\" xml:lang=\"en\" title=\"Internet Protocol\">IP</i>-Addräß udder dä Berätt, dä De Schpärre wells.",
        "apihelp-block-param-expiry": "De Zigg bes zom Ußloufe. Kam_mer als en Door aanjävve, esu wi „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">5 months</kbd>“ udder „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">2 weeks</kbd>“ un kam_mer als ene Zigg_Pongk aanjävve, esu wi „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">2014-09-18T12:34:56Z</kbd>“, un wam_mer „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">infinite</kbd>“, „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">indefinite</kbd>“ udder „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">never</kbd>“ aanjitt, dohrt di Schpärr för iiwesch.",
        "apihelp-yamlfm-description": "Donn de Dahte em <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"YAML Ain't Markup Language\">YAML</i>-Fommahd schöhn met <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"HyperText Markup Language\">HTML</i> ußjävve.",
        "api-format-title": "Wat et <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Application Programming Interface\">API</i> ußjohv.",
        "api-format-prettyprint-header-only-html": "Dat heh es en <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"HyperText Markup Language\">HTML</i>_Daaschtällong un för et Fähersöhke jedaach. Dadd is för Aanwändongsprojramme nit ze bruche.\n\nEn de [[mw:API|complete Dokkemäntazjohn]] un de [[Special:ApiHelp/main|API Hölp_Sigg]] kam_mer doh mih drövver lässe.",
-       "api-orm-param-props": "De Fällder zom Affrohre.",
-       "api-orm-param-limit": "De jrühßte Aanzahl vun Reihje zom zeröckjävve.",
        "api-pageset-param-titles": "En Leß vun Övverschreffte för ze beärbeide.",
        "api-pageset-param-pageids": "En Leß vun Kännonge vun Sigge för ze beärbeide.",
        "api-pageset-param-revids": "En Leß vun Kännonge vun Väsjohne för ze beärbeide.",
index 74db742..1b62c5c 100644 (file)
@@ -8,5 +8,10 @@
        "apihelp-main-param-action": "कोणती कार्यवाही करावयाची.",
        "apihelp-main-param-curtimestamp": "निकालात सद्य वेळठश्याचा अंतर्भाव करा.",
        "apihelp-block-description": "सदस्यास प्रतिबंधित करा.",
-       "apihelp-block-param-user": "सदस्याचे नाव, अंक-पत्त्ता, किंवा प्रतिबंध करण्यासाठीचा आयपीचा आवाका."
+       "apihelp-block-param-user": "सदस्याचे नाव, अंक-पत्त्ता, किंवा प्रतिबंध करण्यासाठीचा आयपीचा आवाका.",
+       "apihelp-query+allrevisions-description": "सर्व आवृत्त्यांची यादी",
+       "apihelp-query+allrevisions-param-user": "फक्त या सदस्याच्याच आवृत्त्यांची यादी करा",
+       "apihelp-query+allrevisions-param-excludeuser": "या सदस्याच्या आवृत्त्यांची यादी करु नका.",
+       "apihelp-stashedit-param-title": "पानाच्या मथळ्याचे संपादन होत आहे.",
+       "apihelp-stashedit-param-sectiontitle": "नविन विभागाचा मथळा"
 }
index 96741ca..b1d27c8 100644 (file)
@@ -5,7 +5,8 @@
                        "Dianakc",
                        "Cainamarques",
                        "Rhcastilhos",
-                       "Macofe"
+                       "Macofe",
+                       "Almondega"
                ]
        },
        "apihelp-main-param-action": "Qual ação executar.",
        "apihelp-query+links-param-limit": "Quantos links retornar.",
        "apihelp-query+linkshere-param-limit": "Quantos retornar.",
        "apihelp-query+prefixsearch-param-limit": "O número máximo a se retornar.",
+       "apihelp-query+search-param-prop": "Que propriedades retornar:",
+       "apihelp-query+search-paramvalue-prop-size": "Adiciona o tamanho da página em bytes.",
+       "apihelp-query+search-paramvalue-prop-wordcount": "Adiciona a contagem de palavras da página.",
+       "apihelp-query+search-paramvalue-prop-timestamp": "Adiciona a marcação de data (timestamp) de quando a página foi editada pela última vez.",
+       "apihelp-query+search-paramvalue-prop-snippet": "Adiciona um fragmento analisado da página.",
+       "apihelp-query+search-paramvalue-prop-titlesnippet": "Adiciona um fragmento analisado do título da página.",
        "apihelp-query+search-param-limit": "Quantas páginas retornar.",
        "apihelp-query+templates-param-limit": "Quantas predefinições retornar.",
        "apihelp-query+transcludedin-param-limit": "Quantos retornar.",
index 9710e16..125a155 100644 (file)
        "api-format-title": "{{technical}}\nPage title when API output is pretty-printed in HTML.",
        "api-format-prettyprint-header": "{{technical}} Displayed as a header when API output is pretty-printed in HTML.\n\nParameters:\n* $1 - Format name\n* $2 - Non-pretty-printing module name",
        "api-format-prettyprint-header-only-html": "{{technical}} Displayed as a header when API output is pretty-printed in HTML, but there is no non-html module.\n\nParameters:\n* $1 - Format name",
-       "api-orm-param-props": "{{doc-apihelp-param|orm|props|description=the \"props\" parameter in subclasses of ApiQueryORM}}",
-       "api-orm-param-limit": "{{doc-apihelp-param|orm|limit|description=the \"limit\" parameter in subclasses of ApiQueryORM}}",
        "api-pageset-param-titles": "{{doc-apihelp-param|pageset|titles|description=the \"titles\" parameter in pageset-using modules}}",
        "api-pageset-param-pageids": "{{doc-apihelp-param|pageset|pageids|description=the \"pageids\" parameter in pageset-using modules}}",
        "api-pageset-param-revids": "{{doc-apihelp-param|pageset|revids|description=the \"revids\" parameter in pageset-using modules}}",
index dfc30a8..5ce21c5 100644 (file)
@@ -11,7 +11,8 @@
                        "Ochilov",
                        "Nzeemin",
                        "INS Pirat",
-                       "Macofe"
+                       "Macofe",
+                       "Краснорядцева Елена"
                ]
        },
        "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Документация]]\n* [[mw:API:FAQ|ЧаВО]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Почтовая рассылка]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Новости API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Ошибки и запросы]\n</div>\n<strong>Статус:</strong> Все отображаемые на этой странице функции должны работать, однако API находится в статусе активной разработки, и может измениться в любой момент. Подпишитесь на  [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ почтовую рассылку mediawiki-api-announce], чтобы быть в курсе обновлений.\n\n<strong>Ошибочные запросы:</strong> Если API получает запрос с ошибкой, вернётся заголовок HTTP с ключом \"MediaWiki-API-Error\", после чего значение заголовка и код ошибки будут отправлены обратно и установлены в то же значение. Более подробную информацию см. [[mw:API:Errors_and_warnings|API: Ошибки и предупреждения]].",
        "apihelp-query+revisions-example-first5-user": "Получить 5 первых версий <kbd>Main Page</kbd> которые созданы пользователями <kbd>MediaWiki default</kbd>.",
        "apihelp-query+revisions+base-param-limit": "Ограничение на количество версий которое будут вовзращено",
        "apihelp-query+search-description": "Выполнить полнотекстовый поиск.",
+       "apihelp-query+siteinfo-paramvalue-prop-fileextensions": "Возвращает список расширений (типы файлов), которые доступны к загрузке",
        "apihelp-query+tags-description": "Список изменерий тегов.",
        "apihelp-query+tags-example-simple": "Лист доступных тегов",
        "apihelp-query+templates-param-namespace": "Показывать шаблоны только из данного списка имен",
        "apihelp-xml-description": "Выходные данные в формате XML.",
        "apihelp-yaml-description": "Выходные данные в формате yaml.",
        "api-format-title": "Результат MediaWiki API",
-       "api-orm-param-props": "Поля для запроса.",
-       "api-orm-param-limit": "Максимальное количество возвращаемых строк.",
        "api-pageset-param-titles": "Список заголовков для работы.",
        "api-pageset-param-pageids": "Список страниц идентификаторов для работы.",
        "api-pageset-param-revids": "Список идентификаторов версий для работы.",
diff --git a/includes/api/i18n/sd.json b/includes/api/i18n/sd.json
new file mode 100644 (file)
index 0000000..4cfc927
--- /dev/null
@@ -0,0 +1,8 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Mehtab ahmed"
+               ]
+       },
+       "apihelp-query+allrevisions-description": "سڀني نظر ثانين جي فهرست ٺاهيو."
+}
index 08237f3..e195520 100644 (file)
        "api-format-title": "Результат запиту до API MediaWiki",
        "api-format-prettyprint-header": "Це HTML-представлення формату $1. HTML є гарним для налагодження, однак не придатний для прикладного використання.\n\nУкажіть значення для параметру <var>format</var>, для того щоб змінити формат. Для перегляду не-HTML-представлення формату, $1, вкажіть <kbd>format=$2</kbd>.\n\nДив. [[mw:API|повну документацію]], або [[Special:ApiHelp/main|довідку з API]] для детальнішої інформації.",
        "api-format-prettyprint-header-only-html": "Це HTML-представлення призначене для налагодження, однак не придатне для прикладного використання.\n\nДив. [[mw:API|повну документацію]], або [[Special:ApiHelp/main|довідку з API]] для детальнішої інформації.",
-       "api-orm-param-props": "Поля до запиту.",
-       "api-orm-param-limit": "Яке максимальне число рядків повернути.",
        "api-pageset-param-titles": "Список назв над якими працювати.",
        "api-pageset-param-pageids": "Список ідентифікаторів сторінок над якими працювати.",
        "api-pageset-param-revids": "Список ідентифікаторів версій над якими працювати.",
index ef70589..09e9077 100644 (file)
@@ -675,7 +675,7 @@ class MessageCache {
                                'hash' => $cache['HASH'],
                                'latest' => isset( $cache['LATEST'] ) ? $cache['LATEST'] : 0
                        ),
-                       WANObjectCache::TTL_NONE
+                       WANObjectCache::TTL_INDEFINITE
                );
        }
 
index fdc9944..01f10d8 100644 (file)
@@ -76,6 +76,21 @@ class ChangesList extends ContextSource {
                }
        }
 
+       /**
+        * Format a line
+        *
+        * @since 1.27
+        *
+        * @param RecentChange $rc Passed by reference
+        * @param bool $watched (default false)
+        * @param int $linenumber (default null)
+        *
+        * @return string|bool
+        */
+       public function recentChangesLine( &$rc, $watched = false, $linenumber = null ) {
+               throw new RuntimeException( 'recentChangesLine should be implemented' );
+       }
+
        /**
         * Sets the list to use a "<li class='watchlist-(namespace)-(page)'>" tag
         * @param bool $value
index 1dcb7ae..f10307d 100644 (file)
@@ -83,15 +83,16 @@ class EnhancedChangesList extends ChangesList {
        /**
         * Format a line for enhanced recentchange (aka with javascript and block of lines).
         *
-        * @param RecentChange $baseRC
+        * @param RecentChange $rc
         * @param bool $watched
+        * @param int $linenumber (default null)
         *
         * @return string
         */
-       public function recentChangesLine( &$baseRC, $watched = false ) {
+       public function recentChangesLine( &$rc, $watched = false, $linenumber = null ) {
 
                $date = $this->getLanguage()->userDate(
-                       $baseRC->mAttribs['rc_timestamp'],
+                       $rc->mAttribs['rc_timestamp'],
                        $this->getUser()
                );
 
@@ -106,7 +107,7 @@ class EnhancedChangesList extends ChangesList {
                        $this->lastdate = $date;
                }
 
-               $cacheEntry = $this->cacheEntryFactory->newFromRecentChange( $baseRC, $watched );
+               $cacheEntry = $this->cacheEntryFactory->newFromRecentChange( $rc, $watched );
                $this->addCacheEntry( $cacheEntry );
 
                return $ret;
index 07d1487..3599f50 100644 (file)
@@ -460,7 +460,9 @@ class RecentChange {
                // Automatic patrol needs "autopatrol", ordinary patrol needs "patrol"
                $right = $auto ? 'autopatrol' : 'patrol';
                $errors = array_merge( $errors, $this->getTitle()->getUserPermissionsErrors( $right, $user ) );
-               if ( !Hooks::run( 'MarkPatrolled', array( $this->getAttribute( 'rc_id' ), &$user, false ) ) ) {
+               if ( !Hooks::run( 'MarkPatrolled',
+                                       array( $this->getAttribute( 'rc_id' ), &$user, false, $auto ) )
+               ) {
                        $errors[] = array( 'hookaborted' );
                }
                // Users without the 'autopatrol' right can't patrol their
@@ -481,7 +483,10 @@ class RecentChange {
                $this->reallyMarkPatrolled();
                // Log this patrol event
                PatrolLog::record( $this, $auto, $user );
-               Hooks::run( 'MarkPatrolledComplete', array( $this->getAttribute( 'rc_id' ), &$user, false ) );
+               Hooks::run(
+                                       'MarkPatrolledComplete',
+                                       array( $this->getAttribute( 'rc_id' ), &$user, false, $auto )
+               );
 
                return array();
        }
@@ -950,3 +955,4 @@ class RecentChange {
                return $unserializedParams;
        }
 }
+
index 76f2a7b..acaa288 100644 (file)
 class MWContentSerializationException extends MWException {
 }
 
+/**
+ * Exception thrown when an unregistered content model is requested. This error
+ * can be triggered by user input, so a separate exception class is provided so
+ * callers can substitute a context-specific, internationalised error message.
+ *
+ * @ingroup Content
+ * @since 1.27
+ */
+class MWUnknownContentModelException extends MWException {
+       /** @var string The name of the unknown content model */
+       private $modelId;
+
+       /** @param string $modelId */
+       function __construct( $modelId ) {
+               parent::__construct( "The content model '$modelId' is not registered on this wiki.\n" .
+                       'See https://www.mediawiki.org/wiki/Content_handlers to find out which extensions ' .
+                       'handle this content model.' );
+               $this->modelId = $modelId;
+       }
+
+       /** @return string */
+       public function getModelId() {
+               return $modelId;
+       }
+}
+
 /**
  * A content handler knows how do deal with a specific type of content on a wiki
  * page. Content is stored in the database in a serialized form (using a
@@ -307,7 +333,8 @@ abstract class ContentHandler {
         * @param string $modelId The ID of the content model for which to get a
         *    handler. Use CONTENT_MODEL_XXX constants.
         *
-        * @throws MWException If no handler is known for the model ID.
+        * @throws MWException For internal errors and problems in the configuration.
+        * @throws MWUnknownContentModelException If no handler is known for the model ID.
         * @return ContentHandler The ContentHandler singleton for handling the model given by the ID.
         */
        public static function getForModelID( $modelId ) {
@@ -323,7 +350,7 @@ abstract class ContentHandler {
                        Hooks::run( 'ContentHandlerForModelID', array( $modelId, &$handler ) );
 
                        if ( $handler === null ) {
-                               throw new MWException( "No handler for model '$modelId' registered in \$wgContentHandlers" );
+                               throw new MWUnknownContentModelException( $modelId );
                        }
 
                        if ( !( $handler instanceof ContentHandler ) ) {
index 64ae1c6..9c5127f 100644 (file)
@@ -396,8 +396,9 @@ class DatabasePostgres extends Database {
                        $sql = mb_convert_encoding( $sql, 'UTF-8' );
                }
                // Clear previously left over PQresult
-               while ( $res = pg_get_result( $this->mConn ) )
+               while ( $res = pg_get_result( $this->mConn ) ) {
                        pg_free_result( $res );
+               }
                if ( pg_send_query( $this->mConn, $sql ) === false ) {
                        throw new DBUnexpectedError( $this, "Unable to post new query to PostgreSQL\n" );
                }
index fbc8c8c..eda374a 100644 (file)
@@ -549,7 +549,7 @@ class LoadBalancer {
                }
 
                # Make master connections read only if in lagged slave mode
-               if ( $masterOnly && $this->getServerCount() > 1 && $this->getLaggedSlaveMode() ) {
+               if ( $masterOnly && $this->getServerCount() > 1 && $this->getLaggedSlaveMode( $wiki ) ) {
                        $conn->setLBInfo( 'readOnlyReason',
                                'The database has been automatically locked ' .
                                'while the slave database servers catch up to the master'
@@ -1142,11 +1142,13 @@ class LoadBalancer {
 
        /**
         * @note This method will trigger a DB connection if not yet done
+        *
+        * @param string|bool $wiki Wiki ID, or false for the current wiki
         * @return bool Whether the generic connection for reads is highly "lagged"
         */
-       public function getLaggedSlaveMode() {
+       public function getLaggedSlaveMode( $wiki = false ) {
                # Get a generic reader connection
-               $this->getConnection( DB_SLAVE );
+               $this->getConnection( DB_SLAVE, false, $wiki );
 
                return $this->mLaggedSlaveMode;
        }
index d784840..4a7b991 100644 (file)
@@ -108,7 +108,7 @@ class LinksDeletionUpdate extends SqlDataUpdate implements EnqueueableDataUpdate
                        'wiki' => $this->mDb->getWikiID(),
                        'job'  => new JobSpecification(
                                'deleteLinks',
-                               array( 'pageId' => $this->page->getId() ),
+                               array( 'pageId' => $this->pageId ),
                                array( 'removeDuplicates' => true ),
                                $this->page->getTitle()
                        )
index d327433..14810da 100644 (file)
@@ -420,7 +420,7 @@ class DiffEngine {
                        }
 
                        $x1 = $xoff + (int)( ( $numer + ( $xlim - $xoff ) * $chunk ) / $nchunks );
-                       // @codingStandardsIgnoreFile Ignore Squiz.WhiteSpace.SemicolonSpacing.Incorrect
+                       // @codingStandardsIgnoreStart Ignore Squiz.WhiteSpace.SemicolonSpacing.Incorrect
                        for ( ; $x < $x1; $x++ ) {
                                // @codingStandardsIgnoreEnd
                                $line = $flip ? $this->yv[$x] : $this->xv[$x];
@@ -444,7 +444,7 @@ class DiffEngine {
                                        if ( $y > $this->seq[$k - 1] ) {
                                                assert( '$y < $this->seq[$k]' );
                                                // Optimization: this is a common case:
-                                               //      next match is just replacing previous match.
+                                               // next match is just replacing previous match.
                                                $this->in_seq[$this->seq[$k]] = false;
                                                $this->seq[$k] = $y;
                                                $this->in_seq[$y] = 1;
index 4e50070..5734902 100644 (file)
@@ -380,10 +380,12 @@ TXT;
                                $text .= "{$pad}#{$level} [internal function]: ";
                        }
 
-                       if ( isset( $frame['class'] ) ) {
+                       if ( isset( $frame['class'] ) && isset( $frame['type'] ) && isset( $frame['function'] ) ) {
                                $text .= $frame['class'] . $frame['type'] . $frame['function'];
-                       } else {
+                       } elseif ( isset( $frame['function'] ) ) {
                                $text .= $frame['function'];
+                       } else {
+                               $text .= 'NO_FUNCTION_GIVEN';
                        }
 
                        if ( isset( $frame['args'] ) ) {
index 09b5929..5a2dd1a 100644 (file)
@@ -153,8 +153,9 @@ class LocalSettingsGenerator {
 
                if ( count( $this->extensions ) ) {
                        $localSettings .= "
-# Enabled Extensions. Most extensions are enabled by including the base extension file here
-# but check specific extension documentation for more details
+# Enabled extensions. Most of the extensions are enabled by adding
+# wfLoadExtensions('ExtensionName');
+# to LocalSettings.php. Check specific extension documentation for more details.
 # The following extensions were automatically enabled:\n";
 
                        foreach ( $this->extensions as $extName ) {
index 13755e3..2fadfce 100644 (file)
@@ -59,6 +59,7 @@
        "config-db-username": "اسم مستخدم قاعدة البيانات:",
        "config-db-password": "كلمة سر قاعدة البيانات:",
        "config-db-prefix": "بادئة جدول قاعدة البيانات:",
+       "config-db-charset": "مجموعة محارف قاعدة البيانات",
        "config-db-port": "منفذ قاعدة البيانات:",
        "config-db-schema": "سكيما لميدياويكي",
        "config-type-mysql": "MySQL (أو متوافق)",
@@ -74,6 +75,7 @@
        "config-mysql-engine": "محرك التخزين",
        "config-mysql-innodb": "إنو دي بي",
        "config-mysql-myisam": "ماي إسام",
+       "config-mysql-charset": "مجموعة محارف قاعدة البيانات",
        "config-mysql-binary": "ثنائي",
        "config-mysql-utf8": "يو تي إف-8",
        "config-site-name": "اسم الويكي:",
        "config-email-sender": "يرجع عنوان البريد الإلكتروني:",
        "config-upload-settings": "الصور وتحميل الملفات",
        "config-upload-enable": "تمكين تحميل الملفات",
+       "config-upload-deleted": "المجلد للملفات المحذوفة:",
        "config-logo": "مسار الشعار:",
        "config-cc-again": "اختر مجددًا",
        "config-advanced-settings": "ضبط متقدم",
        "config-install-user-alreadyexists": "المستخدم \"$1\" موجود بالفعل",
        "config-install-user-create-failed": "إنشاء مستخدم \"$1\" فشل:$2",
        "config-install-tables": "إنشاء الجداول",
+       "config-install-stats": "بدء الإحصاءات",
        "config-install-keys": "توليد المفاتيح السرية",
        "config-install-mainpage": "إنشاء صفحة رئيسية بالمحتوى الافتراضي",
        "config-help": "مساعدة",
index a1f9154..369f4ed 100644 (file)
@@ -1,7 +1,8 @@
 {
        "@metadata": {
                "authors": [
-                       "Vahe Gharakhanyan"
+                       "Vahe Gharakhanyan",
+                       "Kareyac"
                ]
        },
        "config-title": "ՄեդիաՎիքի $1-ի տեղադրում",
        "config-page-releasenotes": "Տեղեկություն տարբերակի մասին",
        "config-page-existingwiki": "Գոյություն ունեցող վիքի",
        "config-restart": "Այո, նորից սկսել",
+       "config-ns-generic": "Նախագիծ",
        "config-admin-password": "Գաղտնաբառ՝",
        "config-admin-password-confirm": "Գաղտնաբառը կրկին`",
        "config-admin-email": "Էլ-փոստի հասցեն՝",
+       "config-profile-wiki": "Բաց վիքի",
+       "config-profile-private": "Մասնավոր վիքի",
        "config-license": "Հեղինակային իրավունք և արտոնագիր`",
        "config-license-cc-by-sa": "Creative Commons Attribution-ShareAlike",
        "config-license-cc-by": "Creative Commons Attribution",
@@ -32,6 +36,7 @@
        "config-license-cc-0": "Creative Commons Zero (հանրային սեփականություն)",
        "config-license-gfdl": "GNU Free Documentation License 1.3 կամ ավելի ուշ",
        "config-license-pd": "Հանրային սեփականություն",
+       "config-cc-again": "Ընտրեեք նորից...",
        "config-help": "օգնություն",
        "mainpagetext": "'''«MediaWiki» ծրագիրը հաջողությամբ տեղադրվեց։'''",
        "mainpagedocfooter": "Այցելեք [//meta.wikimedia.org/wiki/Help:Contents User's Guide]՝ վիքի ծրագրային ապահովման օգտագործման մասին տեղեկությունների համար։\n\n== Որոշ օգտակար ռեսուրսներ ==\n\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]"
index 1fd98ff..dddba19 100644 (file)
@@ -14,7 +14,8 @@
                        "Seb35",
                        "Mar(c)",
                        "Sjoerddebruin",
-                       "Esketti"
+                       "Esketti",
+                       "JaapDeKleine"
                ]
        },
        "config-desc": "Het installatieprogramma voor MediaWiki",
@@ -72,7 +73,7 @@
        "config-magic-quotes-sybase": "'''Onherstelbare fout: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_sybase] is actief!'''\nDeze instelling zorgt voor onvoorspelbare gegevenscorruptie.\nU kunt MediaWiki niet installeren tenzij deze instelling is uitgeschakeld.",
        "config-mbstring": "'''Onherstelbare fout: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] is actief!'''\nDeze instelling zorgt voor onvoorspelbare gegevenscorruptie.\nU kunt MediaWiki niet installeren tenzij deze instelling is uitgeschakeld.",
        "config-safe-mode": "'''Waarschuwing:'''\n'''PHP's [http://www.php.net/features.safe-mode veilige modus] is actief.'''\nDit kan problemen veroorzaken, vooral bij het uploaden van bestanden en ondersteuning van <code>math</code>.",
-       "config-xml-bad": "PHP-XML-module ontbreekt.\nMediaWiki is vereist functies in deze module en zal niet werken in deze configuratie.\nMoet u de php-xml-RPM pakket.",
+       "config-xml-bad": "PHP-XML-module ontbreekt.\nMediaWiki vereist functies in deze module en zal niet werken in deze configuratie.\nMisschien werkt het om het php-xml RPM te installeren",
        "config-pcre-old": "'''Onherstelbare fout:''' PCRE $1 of een latere versie is vereist.\nUw uitvoerbare versie van PHP is gekoppeld met PCRE $2.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE Meer informatie].",
        "config-pcre-no-utf8": "'''Fataal:''' de module PRCE van PHP lijkt te zijn gecompileerd zonder ondersteuning voor PCRE_UTF8.\nMediaWiki heeft ondersteuning voor UTF-8 nodig om correct te kunnen werken.",
        "config-memory-raised": "PHP's <code>memory_limit</code> is $1 en is verhoogd tot $2.",
        "config-db-install-account": "Gebruiker voor installatie",
        "config-db-username": "Gebruikersnaam voor database:",
        "config-db-password": "Wachtwoord voor database:",
-       "config-db-password-empty": "Voer een wachtwoord in voor de nieuwe databasegebruiker: $1.\nHoewel het wellicht mogelijk is gebruikers aan te maken zonder wachtwoord, is dit niet veilig.",
-       "config-db-username-empty": "U moet een waarde invoeren voor \"{{int:config-db-username}}\".",
        "config-db-install-username": "Voer de gebruikersnaam in die gebruikt moet worden om te verbinden met de database tijdens het installatieproces. Dit is niet de gebruikersnaam van de MediaWikigebruiker. Dit is de gebruikersnaam voor de database.",
        "config-db-install-password": "Voer het wachtwoord in dat gebruikt moet worden om te verbinden met de database tijdens het installatieproces. Dit is niet het wachtwoord van de MediaWikigebruiker. Dit is het wachtwoord voor de database.",
        "config-db-install-help": "Voer de gebruikersnaam en het wachtwoord in die worden gebruikt voor de databaseverbinding tijdens het installatieproces.",
index 02e9797..d3569f7 100644 (file)
@@ -1,8 +1,9 @@
 {
        "@metadata": {
                "authors": [
-                       "Sindhu"
+                       "Sindhu",
+                       "Aursani"
                ]
        },
-       "config-xml-bad": "PHP جو XML ماڊيول کٽل آهي. ميڊيا وڪيءَ کي هن فنڪشن ۾ ماڊيول گھربل آهن ۽ ترتيب يا ڪنفيگيوريشن ۾ ڪم نه ڪندي. \nتوهان کي گھرجي ته php-xml RPM پيڪيج انسٽال ڪريو."
+       "config-xml-bad": "PHP جو XML ماڊيول کٽل آهي. ذريعات‌وڪيءَ کي ان ماڊيول ۾  فنڪشنس گھربل آهن ۽ اها موجوده ترتيب يا ڪنفيگيوريشن ۾ ڪم نہ ڪندي. \nتوهان کي گھرجي تہ php-xml RPM پيڪيج تنصيب ڪريو."
 }
index 49d05d4..216d9b7 100644 (file)
@@ -119,7 +119,6 @@ class IEUrlExtension {
 
                if ( !preg_match( '/^[a-zA-Z0-9_-]+$/', $extension ) ) {
                        // Non-alphanumeric extension, unlikely to be registered.
-                       //
                        // The regex above is known to match all registered file extensions
                        // in a default Windows XP installation. It's important to allow
                        // extensions with ampersands and percent signs, since that reduces
index b0cb775..3b9c832 100644 (file)
  * This class is intended for caching data from primary stores.
  * If the get() method does not return a value, then the caller
  * should query the new value and backfill the cache using set().
+ * When querying the store on cache miss, the closest DB replica
+ * should be used. Try to avoid heavyweight DB master or quorum reads.
  * When the source data changes, a purge method should be called.
  * Since purges are expensive, they should be avoided. One can do so if:
  *   - a) The object cached is immutable; or
  *   - b) Validity is checked against the source after get(); or
  *   - c) Using a modest TTL is reasonably correct and performant
+ *
  * The simplest purge method is delete().
  *
  * Instances of this class must be configured to point to a valid
@@ -64,10 +67,10 @@ class WANObjectCache {
        protected $procCache;
        /** @var string Cache pool name */
        protected $pool;
-       /** @var EventRelayer */
+       /** @var EventRelayer Bus that handles purge broadcasts */
        protected $relayer;
 
-       /** @var int */
+       /** @var int ERR_* constant for the "last error" registry */
        protected $lastRelayError = self::ERR_NONE;
 
        /** Max time expected to pass between delete() and DB commit finishing */
@@ -89,7 +92,7 @@ class WANObjectCache {
        const LOCK_TSE = 1;
 
        /** Idiom for set()/getWithSetCallback() TTL being "forever" */
-       const TTL_NONE = 0;
+       const TTL_INDEFINITE = 0;
        /** Idiom for getWithSetCallback() callbacks to avoid calling set() */
        const TTL_UNCACHEABLE = -1;
        /** Idiom for getWithSetCallback() callbacks to 'lockTSE' logic */
@@ -100,13 +103,11 @@ class WANObjectCache {
        /** Cache format version number */
        const VERSION = 1;
 
-       /** Fields of value holder arrays */
        const FLD_VERSION = 0;
        const FLD_VALUE = 1;
        const FLD_TTL = 2;
        const FLD_TIME = 3;
 
-       /** Possible values for getLastError() */
        const ERR_NONE = 0; // no error
        const ERR_NO_RESPONSE = 1; // no response
        const ERR_UNREACHABLE = 2; // can't connect
@@ -133,7 +134,9 @@ class WANObjectCache {
        }
 
        /**
-        * @return WANObjectCache Cache that wraps EmptyBagOStuff
+        * Get an instance that wraps EmptyBagOStuff
+        *
+        * @return WANObjectCache
         */
        public static function newEmpty() {
                return new self( array(
@@ -174,7 +177,7 @@ class WANObjectCache {
         * However, pre-snapshot values might still be seen if an update was made
         * in a remote datacenter but the purge from delete() didn't relay yet.
         *
-        * Consider using getWithSetCallback() instead of get()/set() cycles.
+        * Consider using getWithSetCallback() instead of get() and set() cycles.
         * That method has cache slam avoiding features for hot/expensive keys.
         *
         * @param string $key Cache key
@@ -197,7 +200,7 @@ class WANObjectCache {
         *
         * @param array $keys List of cache keys
         * @param array $curTTLs Map of (key => approximate TTL left) for existing keys [returned]
-        * @param array $checkKeys List of "check" keys
+        * @param array $checkKeys List of "check" keys to apply to all of $keys
         * @return array Map of (key => value) for keys that exist
         */
        final public function getMulti(
@@ -258,7 +261,7 @@ class WANObjectCache {
        }
 
        /**
-        * Set the value of a key from cache
+        * Set the value of a key in cache
         *
         * Simply calling this method when source data changes is not valid because
         * the changes do not replicate to the other WAN sites. In that case, delete()
@@ -272,7 +275,7 @@ class WANObjectCache {
         *   - d) T1 reads the row and calls set() due to a cache miss
         *   - e) Stale value is stuck in cache
         *
-        * Setting 'lag' helps avoids keys getting stuck in long-term stale states.
+        * Setting 'lag' and 'since' help avoids keys getting stuck in stale states.
         *
         * Example usage:
         * @code
@@ -291,16 +294,16 @@ class WANObjectCache {
         *   - lag     : Seconds of slave lag. Typically, this is either the slave lag
         *               before the data was read or, if applicable, the slave lag before
         *               the snapshot-isolated transaction the data was read from started.
-        *               [Default: 0 seconds]
+        *               Default: 0 seconds
         *   - since   : UNIX timestamp of the data in $value. Typically, this is either
         *               the current time the data was read or (if applicable) the time when
         *               the snapshot-isolated transaction the data was read from started.
-        *               [Default: 0 seconds]
+        *               Default: 0 seconds
         *   - lockTSE : if excessive possible snapshot lag is detected,
         *               then stash the value into a temporary location
         *               with this TTL. This is only useful if the reads
         *               use getWithSetCallback() with "lockTSE" set.
-        *               [Default: WANObjectCache::TSE_NONE]
+        *               Default: WANObjectCache::TSE_NONE
         * @return bool Success
         */
        final public function set( $key, $value, $ttl = 0, array $opts = array() ) {
@@ -347,10 +350,12 @@ class WANObjectCache {
         * This is implemented by storing a special "tombstone" value at the cache
         * key that this class recognizes; get() calls will return false for the key
         * and any set() calls will refuse to replace tombstone values at the key.
-        * For this to always avoid writing stale values, the following must hold:
+        * For this to always avoid stale value writes, the following must hold:
         *   - a) Replication lag is bounded to being less than HOLDOFF_TTL; or
         *   - b) If lag is higher, the DB will have gone into read-only mode already
         *
+        * Note that set() can also be lag-aware and lower the TTL if it's high.
+        *
         * When using potentially long-running ACID transactions, a good pattern is
         * to use a pre-commit hook to issue the delete. This means that immediately
         * after commit, callers will see the tombstone in cache in the local datacenter
@@ -409,7 +414,7 @@ class WANObjectCache {
         * if the key was evicted from cache, such calculations may show the
         * time since expiry as ~0 seconds.
         *
-        * Note that "check" keys won't collide with other regular keys
+        * Note that "check" keys won't collide with other regular keys.
         *
         * @param string $key
         * @return float UNIX timestamp of the key
@@ -437,20 +442,23 @@ class WANObjectCache {
         * keys, the relevant "check" keys must be supplied for this to work.
         *
         * The "check" key essentially represents a last-modified field.
-        * It is set in the future a few seconds when this is called, to
-        * avoid race conditions where dependent keys get updated with a
-        * stale value (e.g. from a DB slave).
+        * When touched, keys using it via get(), getMulti(), or getWithSetCallback()
+        * will be invalidated. It is treated as being HOLDOFF_TTL seconds in the future
+        * by those methods to avoid race conditions where dependent keys get updated
+        * with stale values (e.g. from a DB slave).
         *
-        * This is typically useful for keys with static names or some cases
+        * This is typically useful for keys with hardcoded names or in some cases
         * dynamically generated names where a low number of combinations exist.
         * When a few important keys get a large number of hits, a high cache
-        * time is usually desired as well as lockTSE logic. The resetCheckKey()
+        * time is usually desired as well as "lockTSE" logic. The resetCheckKey()
         * method is less appropriate in such cases since the "time since expiry"
         * cannot be inferred.
         *
-        * Note that "check" keys won't collide with other regular keys
+        * Note that "check" keys won't collide with other regular keys.
         *
         * @see WANObjectCache::get()
+        * @see WANObjectCache::getWithSetCallback()
+        * @see WANObjectCache::resetCheckKey()
         *
         * @param string $key Cache key
         * @return bool True if the item was purged or not found, false on failure
@@ -467,8 +475,8 @@ class WANObjectCache {
        /**
         * Delete a "check" key from all datacenters, invalidating keys that use it
         *
-        * This is similar to touchCheckKey() in that keys using it via
-        * getWithSetCallback() will be invalidated. The differences are:
+        * This is similar to touchCheckKey() in that keys using it via get(), getMulti(),
+        * or getWithSetCallback() will be invalidated. The differences are:
         *   - a) The timestamp will be deleted from all caches and lazily
         *        re-initialized when accessed (rather than set everywhere)
         *   - b) Thus, dependent keys will be known to be invalid, but not
@@ -482,10 +490,11 @@ class WANObjectCache {
         * This is typically useful for keys with dynamically generated names
         * where a high number of combinations exist.
         *
-        * Note that "check" keys won't collide with other regular keys
+        * Note that "check" keys won't collide with other regular keys.
         *
-        * @see WANObjectCache::touchCheckKey()
         * @see WANObjectCache::get()
+        * @see WANObjectCache::getWithSetCallback()
+        * @see WANObjectCache::touchCheckKey()
         *
         * @param string $key Cache key
         * @return bool True if the item was purged or not found, false on failure
@@ -502,24 +511,21 @@ class WANObjectCache {
         * Method to fetch/regenerate cache keys
         *
         * On cache miss, the key will be set to the callback result via set()
-        * unless the callback returns false. The arguments supplied to it are:
-        *     (current value or false, &$ttl, &$setOpts)
-        * The callback function returns the new value given the current
-        * value (false if not present). Preemptive re-caching and $checkKeys
-        * can result in a non-false current value. The TTL of the new value
-        * can be set dynamically by altering $ttl in the callback (by reference).
-        * The $setOpts array can be altered and is given to set() when called;
-        * it is recommended to set the 'since' field to avoid race conditions.
-        * Setting 'lag' helps avoids keys getting stuck in long-term stale states.
-        *
-        * Usually, callbacks ignore the current value, but it can be used
-        * to maintain "most recent X" values that come from time or sequence
-        * based source data, provided that the "as of" id/time is tracked.
-        *
-        * Usage of $checkKeys is similar to get() and getMulti(). However,
-        * rather than the caller having to inspect a "current time left"
-        * variable (e.g. $curTTL, $curTTLs), a cache regeneration will be
-        * triggered using the callback.
+        * (unless the callback returns false) and that result will be returned.
+        * The arguments supplied to the callback are:
+        *   - $oldValue : current cache value or false if not present
+        *   - &$ttl : a reference to the TTL which can be altered
+        *   - &$setOpts : a reference to options for set() which can be altered
+        *
+        * It is strongly recommended to set the 'lag' and 'since' fields to avoid race conditions
+        * that can cause stale values to get stuck at keys. Usually, callbacks ignore the current
+        * value, but it can be used to maintain "most recent X" values that come from time or
+        * sequence based source data, provided that the "as of" id/time is tracked. Note that
+        * preemptive regeneration and $checkKeys can result in a non-false current value.
+        *
+        * Usage of $checkKeys is similar to get() and getMulti(). However, rather than the caller
+        * having to inspect a "current time left" variable (e.g. $curTTL, $curTTLs), a cache
+        * regeneration will automatically be triggered using the callback.
         *
         * The simplest way to avoid stampedes for hot keys is to use
         * the 'lockTSE' option in $opts. If cache purges are needed, also:
@@ -627,11 +633,12 @@ class WANObjectCache {
         *
         * @param string $key Cache key
         * @param integer $ttl Seconds to live for key updates. Special values are:
-        *   - WANObjectCache::TTL_NONE : Cache forever
+        *   - WANObjectCache::TTL_INDEFINITE: Cache forever
         *   - WANObjectCache::TTL_UNCACHEABLE: Do not cache at all
         * @param callable $callback Value generation function
         * @param array $opts Options map:
-        *   - checkKeys: List of "check" keys.
+        *   - checkKeys: List of "check" keys. The key at $key will be seen as invalid when either
+        *      touchCheckKey() or resetCheckKey() is called on any of these keys.
         *   - lowTTL: Consider pre-emptive updates when the current TTL (sec) of the key is less than
         *      this. It becomes more likely over time, becoming a certainty once the key is expired.
         *      Default: WANObjectCache::LOW_TTL seconds.
@@ -647,7 +654,7 @@ class WANObjectCache {
         *      network I/O when a key is read several times. This will not cache if the callback
         *      returns false however. Note that any purges will not be seen while process cached;
         *      since the callback should use slave DBs and they may be lagged or have snapshot
-        *      isolation anyway, this should not matter much
+        *      isolation anyway, this should not typically matter.
         *      Default: WANObjectCache::TTL_UNCACHEABLE.
         * @param array $oldOpts Unused (mentioned only to avoid PHPDoc warnings)
         * @return mixed Value to use for the key
@@ -687,6 +694,8 @@ class WANObjectCache {
        }
 
        /**
+        * Do the actual I/O for getWithSetCallback() when needed
+        *
         * @see WANObjectCache::getWithSetCallback()
         *
         * @param string $key
index 31dd395..044bb53 100644 (file)
@@ -76,7 +76,7 @@ class EmailNotification {
         *  timestamp will not be updated(they have already seen it)
         * @param Title $title The title to update timestamps for
         * @param string $timestamp Set the update timestamp to this value
-        * @return int[]
+        * @return int[] Array of user IDs
         */
        public static function updateWatchlistTimestamp( User $editor, Title $title, $timestamp ) {
                global $wgEnotifWatchlist, $wgShowUpdatedMarker;
index 692e5a6..faf40b3 100644 (file)
@@ -161,6 +161,8 @@ class BitmapHandler extends TransformationalImageHandler {
                        ( $params['comment'] !== ''
                                ? array( '-set', 'comment', $this->escapeMagickProperty( $params['comment'] ) )
                                : array() ),
+                       // T108616: Avoid exposure of local file path
+                       array( '+set', 'Thumb::URI' ),
                        array( '-depth', 8 ),
                        $sharpen,
                        array( '-rotate', "-$rotation" ),
index a1cb01c..5b57821 100644 (file)
@@ -1,6 +1,4 @@
 <?php
-// @codingStandardsIgnoreFile
-// PHPCS can't handle the level of nesting in this file
 /**
  * Formatting of image metadata values into human readable form.
  *
index 840b9d8..999be92 100644 (file)
@@ -76,7 +76,7 @@ application/x-bzip2   [ARCHIVE]
 application/x-tar      [ARCHIVE]
 application/x-stuffit  [ARCHIVE]
 application/x-opc+zip  [ARCHIVE]
-
+application/x-7z-compressed [ARCHIVE]
 
 text/javascript application/x-javascript application/x-ecmascript text/ecmascript      [EXECUTABLE]
 application/x-bash     [EXECUTABLE]
index 210610a..3b9899f 100644 (file)
@@ -20,6 +20,7 @@ application/vnd.wap.wbxml wbxml
 application/vnd.wap.wmlc wmlc
 application/vnd.wap.wmlscriptc wmlsc
 application/voicexml+xml vxml
+application/x-7z-compressed 7z
 application/x-bcpio bcpio
 application/x-bzip bz
 application/x-bzip2 bz2
index bc16537..d739d8e 100644 (file)
@@ -43,12 +43,12 @@ use MediaWiki\Logger\LoggerFactory;
  * Primary entry points:
  *
  * - ObjectCache::newAccelerator( $fallbackType )
- *   Purpose: Cache.
+ *   Purpose: Cache for very hot keys.
  *   Stored only on the individual web server.
  *   Not associated with other servers.
  *
  * - ObjectCache::getMainClusterInstance()
- *   Purpose: Cache.
+ *   Purpose: Memory storage for per-cluster coordination and tracking.
  *   Stored centrally within the local data-center.
  *   Not replicated to other DCs.
  *   Also known as $wgMemc. Configured by $wgMainCacheType.
@@ -71,10 +71,9 @@ use MediaWiki\Logger\LoggerFactory;
  * @ingroup Cache
  */
 class ObjectCache {
-       /** @var Array Map of (id => BagOStuff) */
+       /** @var BagOStuff[] Map of (id => BagOStuff) */
        public static $instances = array();
-
-       /** @var Array Map of (id => WANObjectCache) */
+       /** @var WANObjectCache[] Map of (id => WANObjectCache) */
        public static $wanInstances = array();
 
        /**
index d656bad..3f6a4db 100644 (file)
@@ -2780,7 +2780,7 @@ class WikiPage implements Page, IDBAccessObject {
 
                $user = is_null( $user ) ? $wgUser : $user;
                if ( !Hooks::run( 'ArticleDelete',
-                       array( &$this, &$user, &$reason, &$error, &$status )
+                       array( &$this, &$user, &$reason, &$error, &$status, $suppress )
                ) ) {
                        if ( $status->isOK() ) {
                                // Hook aborted but didn't set a fatal status
@@ -3540,7 +3540,7 @@ class WikiPage implements Page, IDBAccessObject {
         *
         * @param Content|null $content Optional Content object for determining the
         *   necessary updates.
-        * @return array An array of DataUpdates objects
+        * @return DataUpdate[]
         */
        public function getDeletionUpdates( Content $content = null ) {
                if ( !$content ) {
index 3745238..37b45a6 100644 (file)
@@ -44,7 +44,7 @@ class ParserOutput extends CacheTime {
        public $mIndicators = array();
 
        /**
-        * @var string $mTitleText Title text of the chosen language variant
+        * @var string $mTitleText Title text of the chosen language variant, as HTML.
         */
        public $mTitleText;
 
@@ -700,9 +700,13 @@ class ParserOutput extends CacheTime {
 
        /**
         * Override the title to be used for display
-        * -- this is assumed to have been validated
+        *
+        * @note this is assumed to have been validated
         * (check equal normalisation, etc.)
         *
+        * @note this is expected to be safe HTML,
+        * ready to be served to the client.
+        *
         * @param string $text Desired title text
         */
        public function setDisplayTitle( $text ) {
@@ -711,9 +715,12 @@ class ParserOutput extends CacheTime {
        }
 
        /**
-        * Get the title to be used for display
+        * Get the title to be used for display.
+        *
+        * As per the contract of setDisplayTitle(), this is safe HTML,
+        * ready to be served to the client.
         *
-        * @return string
+        * @return string HTML
         */
        public function getDisplayTitle() {
                $t = $this->getTitleText();
index 86a3fef..e1f272b 100644 (file)
@@ -188,4 +188,38 @@ final class PasswordFactory {
                        return $password->needsUpdate();
                }
        }
+
+       /**
+        * Generate a random string suitable for a password
+        *
+        * @param int $minLength Minimum length of password to generate
+        * @return string
+        */
+       public static function generateRandomPasswordString( $minLength = 10 ) {
+               // Decide the final password length based on our min password length,
+               // stopping at a minimum of 10 chars.
+               $length = max( 10, $minLength );
+               // Multiply by 1.25 to get the number of hex characters we need
+               $length = $length * 1.25;
+               // Generate random hex chars
+               $hex = MWCryptRand::generateHex( $length );
+               // Convert from base 16 to base 32 to get a proper password like string
+               return wfBaseConvert( $hex, 16, 32 );
+       }
+
+       /**
+        * Create an InvalidPassword
+        *
+        * @return InvalidPassword
+        */
+       public static function newInvalidPassword() {
+               static $password = null;
+
+               if ( $password === null ) {
+                       $factory = new self();
+                       $password = new InvalidPassword( $factory, array( 'type' => '' ), null );
+               }
+
+               return $password;
+       }
 }
index f811231..b415bca 100644 (file)
@@ -37,7 +37,7 @@ class ResourceLoaderEditToolbarModule extends ResourceLoaderFileModule {
                $vars = parent::getLessVars( $context );
                $language = Language::factory( $context->getLanguage() );
                foreach ( $language->getImageFiles() as $key => $value ) {
-                       $vars[ $key ] = CSSMin::serializeStringValue( $value );
+                       $vars[$key] = CSSMin::serializeStringValue( $value );
                }
                return $vars;
        }
index 7aac3b8..7ffb427 100644 (file)
@@ -73,6 +73,25 @@ abstract class RevDelList extends RevisionListBase {
                return $target;
        }
 
+       /**
+        * Indicate whether any item in this list is suppressed
+        * @since 1.25
+        * @return bool
+        */
+       public function areAnySuppressed() {
+               $bit = $this->getSuppressBit();
+
+               // @codingStandardsIgnoreStart Generic.CodeAnalysis.ForLoopWithTestFunctionCall.NotAllowed
+               for ( $this->reset(); $this->current(); $this->next() ) {
+                       // @codingStandardsIgnoreEnd
+                       $item = $this->current();
+                       if ( $item->getBits() & $bit ) {
+                               return true;
+                       }
+               }
+               return false;
+       }
+
        /**
         * Set the visibility for the revisions in this list. Logging and
         * transactions are done here.
index 23bd394..ccdf3fa 100644 (file)
@@ -383,7 +383,7 @@ abstract class ChangesListSpecialPage extends SpecialPage {
         *
         * @param FormOptions $opts
         */
-       function setTopText( FormOptions $opts ) {
+       public function setTopText( FormOptions $opts ) {
                // nothing by default
        }
 
@@ -393,7 +393,7 @@ abstract class ChangesListSpecialPage extends SpecialPage {
         *
         * @param FormOptions $opts
         */
-       function setBottomText( FormOptions $opts ) {
+       public function setBottomText( FormOptions $opts ) {
                // nothing by default
        }
 
@@ -405,7 +405,7 @@ abstract class ChangesListSpecialPage extends SpecialPage {
         * @param FormOptions $opts
         * @return array
         */
-       function getExtraOptions( $opts ) {
+       public function getExtraOptions( $opts ) {
                return array();
        }
 
index cd6cc76..e125d94 100644 (file)
@@ -361,6 +361,8 @@ class SpecialBlock extends FormSpecialPage {
        protected function postText() {
                $links = array();
 
+               $this->getOutput()->addModuleStyles( 'mediawiki.special' );
+
                # Link to the user's contributions, if applicable
                if ( $this->target instanceof User ) {
                        $contribsPage = SpecialPage::getTitleFor( 'Contributions', $this->target->getName() );
index 6a4347d..df68b12 100644 (file)
@@ -301,8 +301,8 @@ class SpecialChangePassword extends FormSpecialPage {
                        $remember = $this->getRequest()->getCookie( 'Token' ) !== null;
                        $user->setCookies( null, null, $remember );
                }
-               $user->resetPasswordExpiration();
                $user->saveSettings();
+               $this->resetPasswordExpiration( $user );
        }
 
        public function requiresUnblock() {
@@ -312,4 +312,28 @@ class SpecialChangePassword extends FormSpecialPage {
        protected function getGroupName() {
                return 'users';
        }
+
+       /**
+        * For resetting user password expiration, until AuthManager comes along
+        * @param User $user
+        */
+       private function resetPasswordExpiration( User $user ) {
+               global $wgPasswordExpirationDays;
+               $newExpire = null;
+               if ( $wgPasswordExpirationDays ) {
+                       $newExpire = wfTimestamp(
+                               TS_MW,
+                               time() + ( $wgPasswordExpirationDays * 24 * 3600 )
+                       );
+               }
+               // Give extensions a chance to force an expiration
+               Hooks::run( 'ResetPasswordExpiration', array( $this, &$newExpire ) );
+               $dbw = wfGetDB( DB_MASTER );
+               $dbw->update(
+                       'user',
+                       array( 'user_password_expires' => $dbw->timestampOrNull( $newExpire ) ),
+                       array( 'user_id' => $user->getID() ),
+                       __METHOD__
+               );
+       }
 }
index 4c0c75f..8c9a76b 100644 (file)
@@ -151,6 +151,7 @@ class FileDuplicateSearchPage extends QueryPage {
                        if ( $img ) {
                                $thumb = $img->transform( array( 'width' => 120, 'height' => 120 ) );
                                if ( $thumb ) {
+                                       $out->addModuleStyles( 'mediawiki.special' );
                                        $out->addHTML( '<div id="mw-fileduplicatesearch-icon">' .
                                                $thumb->toHtml( array( 'desc-link' => false ) ) . '<br />' .
                                                $this->msg( 'fileduplicatesearch-info' )->numParams(
index f1eb8c2..53e1d1b 100644 (file)
@@ -139,7 +139,7 @@ class SpecialPasswordReset extends FormSpecialPage {
         * @return bool|array
         */
        public function onSubmit( array $data ) {
-               global $wgAuth;
+               global $wgAuth, $wgMinimalPasswordLength;
 
                if ( isset( $data['Domain'] ) ) {
                        if ( $wgAuth->validDomain( $data['Domain'] ) ) {
@@ -254,7 +254,7 @@ class SpecialPasswordReset extends FormSpecialPage {
 
                $passwords = array();
                foreach ( $users as $user ) {
-                       $password = $user->randomPassword();
+                       $password = PasswordFactory::generateRandomPasswordString( $wgMinimalPasswordLength );
                        $user->setNewpassword( $password );
                        $user->saveSettings();
                        $passwords[] = $this->msg( 'passwordreset-emailelement', $user->getName(), $password )
index 72d21eb..553e2b1 100644 (file)
@@ -269,13 +269,27 @@ class SpecialRedirect extends FormSpecialPage {
         */
        protected function getSubpagesForPrefixSearch() {
                return array(
-                       "file",
-                       "page",
-                       "revision",
-                       "user",
+                       'file',
+                       'page',
+                       'revision',
+                       'user',
                );
        }
 
+       /**
+        * @return bool
+        */
+       public function requiresWrite() {
+               return false;
+       }
+
+       /**
+        * @return bool
+        */
+       public function requiresUnblock() {
+               return false;
+       }
+
        protected function getGroupName() {
                return 'redirects';
        }
index 7c27ac4..65cb8e5 100644 (file)
@@ -170,11 +170,10 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
                $this->typeLabels = self::$UILabels[$this->typeName];
                $list = $this->getList();
                $list->reset();
-               $bitfield = $list->current()->getBits();
                $this->mIsAllowed = $user->isAllowed( RevisionDeleter::getRestriction( $this->typeName ) );
                $canViewSuppressedOnly = $this->getUser()->isAllowed( 'viewsuppressed' ) &&
                        !$this->getUser()->isAllowed( 'suppressrevision' );
-               $pageIsSuppressed = $bitfield & Revision::DELETED_RESTRICTED;
+               $pageIsSuppressed = $list->areAnySuppressed();
                $this->mIsAllowed = $this->mIsAllowed && !( $canViewSuppressedOnly && $pageIsSuppressed );
 
                $this->otherReason = $request->getVal( 'wpReason' );
@@ -408,6 +407,8 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
 
                // Show form if the user can submit
                if ( $this->mIsAllowed ) {
+                       $out->addModuleStyles( 'mediawiki.special' );
+
                        $form = Xml::openElement( 'form', array( 'method' => 'post',
                                        'action' => $this->getPageTitle()->getLocalURL( array( 'action' => 'submit' ) ),
                                        'id' => 'mw-revdel-form-revisions' ) ) .
index 00ee327..447c3ef 100644 (file)
@@ -587,7 +587,7 @@ class PageArchive {
                $restored = 0;
 
                foreach ( $result as $row ) {
-                       // Check for key dupes due to shitty archive integrity.
+                       // Check for key dupes due to needed archive integrity.
                        if ( $row->ar_rev_id ) {
                                $exists = $dbw->selectField( 'revision', '1',
                                        array( 'rev_id' => $row->ar_rev_id ), __METHOD__ );
index 10d55b2..6692bb6 100644 (file)
@@ -263,7 +263,7 @@ class SpecialUpload extends SpecialPage {
                }
 
                # Give a notice if the user is uploading a file that has been deleted or moved
-               # Note that this is independent from the message 'filewasdeleted' that requires JS
+               # Note that this is independent from the message 'filewasdeleted'
                $desiredTitleObj = Title::makeTitleSafe( NS_FILE, $this->mDesiredDestName );
                $delNotice = ''; // empty by default
                if ( $desiredTitleObj instanceof Title && !$desiredTitleObj->exists() ) {
@@ -366,6 +366,19 @@ class SpecialUpload extends SpecialPage {
                        }
                        if ( $warning == 'exists' ) {
                                $msg = "\t<li>" . self::getExistsWarning( $args ) . "</li>\n";
+                       } elseif ( $warning == 'was-deleted' ) {
+                               # If the file existed before and was deleted, warn the user of this
+                               $ltitle = SpecialPage::getTitleFor( 'Log' );
+                               $llink = Linker::linkKnown(
+                                       $ltitle,
+                                       wfMessage( 'deletionlog' )->escaped(),
+                                       array(),
+                                       array(
+                                               'type' => 'delete',
+                                               'page' => Title::makeTitle( NS_FILE, $args )->getPrefixedText(),
+                                       )
+                               );
+                               $msg = "\t<li>" . wfMessage( 'filewasdeleted' )->rawParams( $llink )->parse() . "</li>\n";
                        } elseif ( $warning == 'duplicate' ) {
                                $msg = $this->getDupeWarning( $args );
                        } elseif ( $warning == 'duplicate-archive' ) {
@@ -462,6 +475,14 @@ class SpecialUpload extends SpecialPage {
                        }
                }
 
+               // This is as late as we can throttle, after expected issues have been handled
+               if ( UploadBase::isThrottled( $this->getUser() ) ) {
+                       $this->showRecoverableUploadError(
+                               $this->msg( 'actionthrottledtext' )->escaped()
+                       );
+                       return;
+               }
+
                // Get the page text if this is not a reupload
                if ( !$this->mForReUpload ) {
                        $pageText = self::getInitialPageText( $this->mComment, $this->mLicense,
@@ -711,19 +732,6 @@ class SpecialUpload extends SpecialPage {
                        $warning = wfMessage( 'file-thumbnail-no', $badPart )->parse();
                } elseif ( $exists['warning'] == 'bad-prefix' ) {
                        $warning = wfMessage( 'filename-bad-prefix', $exists['prefix'] )->parse();
-               } elseif ( $exists['warning'] == 'was-deleted' ) {
-                       # If the file existed before and was deleted, warn the user of this
-                       $ltitle = SpecialPage::getTitleFor( 'Log' );
-                       $llink = Linker::linkKnown(
-                               $ltitle,
-                               wfMessage( 'deletionlog' )->escaped(),
-                               array(),
-                               array(
-                                       'type' => 'delete',
-                                       'page' => $filename
-                               )
-                       );
-                       $warning = wfMessage( 'filewasdeleted' )->rawParams( $llink )->parseAsBlock();
                }
 
                return $warning;
@@ -819,6 +827,7 @@ class UploadForm extends HTMLForm {
 
                # Add a link to edit MediaWik:Licenses
                if ( $this->getUser()->isAllowed( 'editinterface' ) ) {
+                       $this->getOutput()->addModuleStyles( 'mediawiki.special' );
                        $licensesLink = Linker::linkKnown(
                                $this->msg( 'licenses' )->inContentLanguage()->getTitle(),
                                $this->msg( 'licenses-edit' )->escaped(),
index 085cfee..0da598b 100644 (file)
@@ -826,7 +826,7 @@ class LoginForm extends SpecialPage {
                } elseif ( $wgBlockDisablesLogin && $u->isBlocked() ) {
                        // If we've enabled it, make it so that a blocked user cannot login
                        $retval = self::USER_BLOCKED;
-               } elseif ( $u->getPasswordExpired() == 'hard' ) {
+               } elseif ( $this->checkUserPasswordExpired( $u ) == 'hard' ) {
                        // Force reset now, without logging in
                        $retval = self::RESET_PASS;
                        $this->mAbortLoginErrorMsg = 'resetpass-expired';
@@ -994,7 +994,7 @@ class LoginForm extends SpecialPage {
                                        $this->getContext()->setLanguage( $userLang );
                                        // Reset SessionID on Successful login (bug 40995)
                                        $this->renewSessionId();
-                                       if ( $this->getUser()->getPasswordExpired() == 'soft' ) {
+                                       if ( $this->checkUserPasswordExpired( $this->getUser() ) == 'soft' ) {
                                                $this->resetLoginForm( $this->msg( 'resetpass-expired-soft' ) );
                                        } elseif ( $wgInvalidPasswordReset
                                                && !$user->isValidPassword( $this->mPassword )
@@ -1121,7 +1121,7 @@ class LoginForm extends SpecialPage {
        function mailPasswordInternal( $u, $throttle = true, $emailTitle = 'passwordremindertitle',
                $emailText = 'passwordremindertext'
        ) {
-               global $wgNewPasswordExpiry;
+               global $wgNewPasswordExpiry, $wgMinimalPasswordLength;
 
                if ( $u->getEmail() == '' ) {
                        return Status::newFatal( 'noemail', $u->getName() );
@@ -1134,7 +1134,7 @@ class LoginForm extends SpecialPage {
                $currentUser = $this->getUser();
                Hooks::run( 'User::mailPasswordInternal', array( &$currentUser, &$ip, &$u ) );
 
-               $np = $u->randomPassword();
+               $np = PasswordFactory::generateRandomPasswordString( $wgMinimalPasswordLength );
                $u->setNewpassword( $np, $throttle );
                $u->saveSettings();
                $userLanguage = $u->getOption( 'language' );
@@ -1717,4 +1717,25 @@ class LoginForm extends SpecialPage {
        protected function getGroupName() {
                return 'login';
        }
+
+       /**
+        * Private function to check password expiration, until AuthManager comes
+        * along to handle that.
+        * @param User $user
+        * @return string|bool
+        */
+       private function checkUserPasswordExpired( User $user ) {
+               global $wgPasswordExpireGrace;
+               $dbr = wfGetDB( DB_SLAVE );
+               $ts = $dbr->selectField( 'user', 'user_password_expires', array( 'user_id' => $user->getId() ) );
+
+               $expired = false;
+               $now = wfTimestamp();
+               $expUnix = wfTimestamp( TS_UNIX, $ts );
+               if ( $ts !== null && $expUnix < $now ) {
+                       $expired = ( $expUnix + $wgPasswordExpireGrace < $now ) ? 'hard' : 'soft';
+               }
+               return $expired;
+       }
+
 }
index 1ed392f..a6fe1b5 100644 (file)
@@ -31,6 +31,10 @@ class UserrightsPage extends SpecialPage {
        # either a GET parameter or a subpage-style parameter, so have a member
        # variable for it.
        protected $mTarget;
+       /*
+        * @var null|User $mFetchedUser The user object of the target username or null.
+        */
+       protected $mFetchedUser = null;
        protected $isself = false;
 
        public function __construct() {
@@ -75,6 +79,8 @@ class UserrightsPage extends SpecialPage {
                // any groups, it's a bit silly to give them the user search prompt.
 
                $user = $this->getUser();
+               $request = $this->getRequest();
+               $out = $this->getOutput();
 
                /*
                 * If the user is blocked and they only have "partial" access
@@ -85,8 +91,6 @@ class UserrightsPage extends SpecialPage {
                        throw new UserBlockedError( $user->getBlock() );
                }
 
-               $request = $this->getRequest();
-
                if ( $par !== null ) {
                        $this->mTarget = $par;
                } else {
@@ -110,13 +114,17 @@ class UserrightsPage extends SpecialPage {
                        $this->isself = true;
                }
 
+               $fetchedStatus = $this->fetchUser( $this->mTarget );
+               if ( $fetchedStatus->isOk() ) {
+                       $this->mFetchedUser = $fetchedStatus->value;
+               }
+
                if ( !$this->userCanChangeRights( $user, true ) ) {
                        if ( $this->isself && $request->getCheck( 'success' ) ) {
                                // bug 48609: if the user just removed its own rights, this would
                                // leads it in a "permissions error" page. In that case, show a
                                // message that it can't anymore use this page instead of an error
                                $this->setHeaders();
-                               $out = $this->getOutput();
                                $out->wrapWikiMsg( "<div class=\"successbox\">\n$1\n</div>", 'userrights-removed-self' );
                                $out->returnToMain();
 
@@ -128,12 +136,19 @@ class UserrightsPage extends SpecialPage {
                        throw new PermissionsError( null, array( array( $msg ) ) );
                }
 
+               // show a successbox, if the user rights was saved successfully
+               if ( $request->getCheck( 'success' ) && $this->mFetchedUser !== null ) {
+                       $out->wrapWikiMsg(
+                               "<div class=\"successbox\">\n$1\n</div>",
+                               array( 'savedrights', $this->mFetchedUser->getName() )
+                       );
+               }
+
                $this->checkReadOnly();
 
                $this->setHeaders();
                $this->outputHeader();
 
-               $out = $this->getOutput();
                $out->addModuleStyles( 'mediawiki.special' );
                $this->addHelpLink( 'Help:Assigning permissions' );
 
@@ -149,14 +164,13 @@ class UserrightsPage extends SpecialPage {
                        $user->matchEditToken( $request->getVal( 'wpEditToken' ), $this->mTarget )
                ) {
                        // save settings
-                       $status = $this->fetchUser( $this->mTarget );
-                       if ( !$status->isOK() ) {
-                               $this->getOutput()->addWikiText( $status->getWikiText() );
+                       if ( !$fetchedStatus->isOK() ) {
+                               $this->getOutput()->addWikiText( $fetchedStatus->getWikiText() );
 
                                return;
                        }
 
-                       $targetUser = $status->value;
+                       $targetUser = $this->mFetchedUser;
                        if ( $targetUser instanceof User ) { // UserRightsProxy doesn't have this method (bug 61252)
                                $targetUser->clearInstanceCache(); // bug 38989
                        }
index 5193a7f..f600e32 100644 (file)
@@ -125,6 +125,16 @@ abstract class UploadBase {
                return true;
        }
 
+       /**
+        * Returns true if the user has surpassed the upload rate limit, false otherwise.
+        *
+        * @param User $user
+        * @return bool
+        */
+       public static function isThrottled( $user ) {
+               return $user->pingLimiter( 'upload' );
+       }
+
        // Upload handlers. Should probably just be a global.
        private static $uploadHandlers = array( 'Stash', 'File', 'Url' );
 
@@ -643,6 +653,10 @@ abstract class UploadBase {
                        $warnings['exists'] = $exists;
                }
 
+               if ( $localFile->wasDeleted() && !$localFile->exists() ) {
+                       $warnings['was-deleted'] = $filename;
+               }
+
                // Check dupes against existing files
                $hash = $this->getTempFileSha1Base36();
                $dupes = RepoGroup::singleton()->findBySha1( $hash );
@@ -1745,10 +1759,6 @@ abstract class UploadBase {
                        return array( 'warning' => 'page-exists', 'file' => $file );
                }
 
-               if ( $file->wasDeleted() && !$file->exists() ) {
-                       return array( 'warning' => 'was-deleted', 'file' => $file );
-               }
-
                if ( strpos( $file->getName(), '.' ) == false ) {
                        $partname = $file->getName();
                        $extension = '';
@@ -1763,7 +1773,7 @@ abstract class UploadBase {
                        // We're not using the normalized form of the extension.
                        // Normal form is lowercase, using most common of alternate
                        // extensions (eg 'jpg' rather than 'JPEG').
-                       //
+
                        // Check for another file using the normalized form...
                        $nt_lc = Title::makeTitle( NS_FILE, "{$partname}.{$normalizedExtension}" );
                        $file_lc = wfLocalFile( $nt_lc );
index b9a1bbf..b971c00 100644 (file)
@@ -221,7 +221,6 @@ class UploadStash {
                // If no key was supplied, make one.  a mysql insertid would be totally
                // reasonable here, except that for historical reasons, the key is this
                // random thing instead.  At least it's not guessable.
-               //
                // Some things that when combined will make a suitably unique key.
                // see: http://www.jwz.org/doc/mid.html
                list( $usec, $sec ) = explode( ' ', microtime() );
index b7767eb..7cedcc5 100644 (file)
@@ -68,10 +68,10 @@ class LanguageHy extends Language {
                                case 'accusative': # Հայցական հոլով
                                        # stub
                                        break;
-                               case 'instrumental':  #
+                               case 'instrumental':
                                        # stub
                                        break;
-                               case 'prepositional': #
+                               case 'prepositional':
                                        # stub
                                        break;
                        }
index 98d138d..3520298 100644 (file)
@@ -50,7 +50,6 @@ class LanguageWa extends Language {
                $datePreference = $this->dateFormat( $format );
 
                # ISO (YYYY-mm-dd) format
-               #
                # we also output this format for YMD (eg: 2001 January 15)
                if ( $datePreference == 'ISO 8601' ) {
                        $d = substr( $ts, 0, 4 ) . '-' . substr( $ts, 4, 2 ) . '-' . substr( $ts, 6, 2 );
@@ -64,7 +63,6 @@ class LanguageWa extends Language {
                }
 
                # Walloon format
-               #
                # we output this in all other cases
                $m = substr( $ts, 4, 2 );
                $n = substr( $ts, 6, 2 );
index e80f11c..2499aee 100644 (file)
        "upload-dialog-button-done": "Gedoen",
        "upload-dialog-button-save": "Stoor",
        "upload-dialog-button-upload": "Oplaai",
-       "upload-process-error": "'n Fout het voorgekom",
-       "upload-process-warning": "'n Waarskuwing is uitgereik",
        "upload-form-label-select-file": "Kies lêer",
        "upload-form-label-infoform-title": "Details",
        "upload-form-label-infoform-name": "Naam",
        "creditspage": "Outeursblad",
        "nocredits": "Geen outeursinligting is vir hierdie bladsy nie beskikbaar nie.",
        "spamprotectiontitle": "Spamfilter",
-       "spamprotectiontext": "Die bladsy wat u wou stoor was geblok deur die gemorspos-filter.\nHierdie situasie was waarskynlik deur 'n skakel na 'n eksterne webtuiste op ons swartlys veroorsaak.",
+       "spamprotectiontext": "Die bladsy wat u wou stoor is deur die gemorspos-filter geblokkeer. Dit is waarskynlik deur 'n eksterne skakel op ons swartlys veroorsaak.",
        "spamprotectionmatch": "Die volgende teks is wat ons gemorspos-filter geaktiveer het: $1",
        "spambot_username": "MediaWiki opruiming van spam",
        "spam_reverting": "Besig met terugrol na die laaste weergawe wat nie skakels na $1 bevat nie",
        "mw-widgets-dateinput-placeholder-day": "JJJJ-MM-DD",
        "mw-widgets-dateinput-placeholder-month": "JJJJ-MM",
        "mw-widgets-titleinput-description-new-page": "bladsy bestaan nog nie",
-       "mw-widgets-titleinput-description-redirect": "aanstuur na $1"
+       "mw-widgets-titleinput-description-redirect": "aanstuur na $1",
+       "api-error-blacklisted": "Kies asseblief 'n ander, beskrywende titel."
 }
index 77d5e69..2dcf85b 100644 (file)
        "summary-preview": "Parapamja e përmbledhjes:",
        "subject-preview": "Parapâmja e temës/kryetitullit:",
        "blockedtitle": "Përdoruesi âsht i bllokuem",
-       "blockedtext": "'''Llogaria juej apo adresa IP âsht bllokue.'''\n\nBllokim âsht bâ prej $1.\nArsyeja e dhânë âsht ''$2''.\n\n* Fillimi i bllokimit: $8\n* Përfundimi i bllokimit: $6\n* I bllokuemi i synuem: $7\n\nMundeni me kontaktue $1 ose ndonji [[{{MediaWiki:Grouppage-sysop}}|administrator]] për me diskutue bllokimin.\nNuk mundeni me shfrytëzue funksionin 'dërgo email këtij përdoruesi' përveç nëse keni specifikue adresë emaili në [[Special:Preferences|parapëlqimet e llogarisë]] dhe nuk jeni bllokue.\nAdresa juej aktuale e IP âsht $3, dhe ID e bllokimit âsht #$5.\nJu lutemi përfshini këto shenime në të gjitha shkresat që i bâni.",
+       "blockedtext": "<strong>Llogaria e juaj apo adresa IP është bllokuar.</strong>\n\nBllokimi është bërë prej $1.\nArsyeja e dhënë është <em>$2</em>.\n\n\n* Fillimi i bllokimit: $8\n* Përfundimi i bllokimit: $6\n* I bllokuaru i synuar: $7\n\nJu mund të kontaktoni $1 ose ndonjë [[{{MediaWiki:Grouppage-sysop}}|administrator]] për ta diskutuar bllokimin.\nNuk mund ta shfrytëzoni funksionin 'dërgo email këtij përdoruesi' përveç nëse keni specifikuar adresë emaili në [[Special:Preferences|parapëlqimet e llogarisë]] dhe nuk jeni bllokuar.\nAdresa e juaj aktuale e IP është $3, dhe ID e bllokimit është #$5.\nJu lutemi përfshini këto shënime në të gjitha shkresat që i bëni.",
        "autoblockedtext": "Adresa juej e IPs âsht bllokue automatikisht meqenëse âsht përdorë prej nji përdoruesi tjetër, i cili âsht bllokue prej $1.\nArsyeja e dhânë âsht kjo:\n\n:''$2''\n\n* Fillimi i bllokimit: $8\n* Përfundimi i bllokimit: $6\n* I bllokuemi i synuem: $7\n\nMundeni me kontaktue $1 ose ndonji [[{{MediaWiki:Grouppage-sysop}}|administrator]] për me diskutue bllokimin.\n\nNuk mundeni me shfrytëzue funksionin 'dërgo email këtij përdoruesi' përveç nëse keni specifikue adresë emaili në [[Special:Preferences|parapëlqimet e llogarisë]] dhe nuk jeni bllokue.\n\nAdresa juej aktuale e IP âsht $3, dhe ID e bllokimit âsht #$5.\nJu lutemi përfshini këto shenime në të gjitha shkresat që i bâni.",
        "blockednoreason": "nuk âsht dhânë arsye",
        "whitelistedittext": "Duheni me u $1 për me redaktue artikuj.",
        "accmailtext": "Nji fjalëkalim i krijuem rastësisht për [[User talk:$1|$1]] u dërgue në $2.\n\nFjalëkalimi për këtë llogari mundet me u ndryshue në faqen ''[[Special:ChangePassword|ndrysho fjalëkalimin]]'' mbas kyçjes.",
        "newarticle": "(I ri)",
        "newarticletext": "Ke ndjekë nji vegëz për te nji faqe që nuk ekziston.\nMe krijue kët faqe, shkruej në kutinë ma poshtë (shih [$1 faqen e ndihmës] për ma shum udhzime).\nNëse ke hy këtu gabimisht, klikoje sustën '''mbrapa''' në shfletues.",
-       "anontalkpagetext": "----''Kjo âsht faqe diskutimi e nji përdoruesi anonim, i cili nuk ka krijue llogari, apo nuk e përdor atê.\nPrandej përdoret adresa numerike IP e tij për me identifikue.\nAdresa IP mundet me u shfrytëzue prej disa përdoruesve.\nNëse jeni përdorues anonim dhe keni përshtypjen se po ju drejtohen komente jorelevante, ju lutemi [[Special:UserLogin/signup|krijoni nji llogari]] apo [[Special:UserLogin|kyçuni]] për me iu shmângë ngatërrimit me përdorues tjerë anonim.''",
+       "anontalkpagetext": "<em>Kjo është faqe diskutimi e një përdoruesi anonim, i cili nuk ka krijuar llogari, apo nuk e përdor atë.</em>\nPrandaj ne do të përdorim adresën numerike të IP së tij për ta identifikuar.\nAdresa IP mund të shfrytëzohet prej disa përdoruesve.\nNëse jeni përdorues anonim dhe keni përshtypjen se po ju drejtohen komente jorelevante, ju lutemi [[Special:UserLogin/signup|krijoni një llogari]] apo [[Special:UserLogin|identifikohuni]] për të ju shmangur ngatërrimev me përdorues të tjerë anonim.",
        "noarticletext": "Momentalisht nuk ka tekst në këtë faqe.\nJu mundeni [[Special:Search/{{PAGENAME}}|me kërkue këtë titull]] në faqe tjera,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} me kërkue në regjistrat tematikisht të afërm],\napo [{{fullurl:{{FULLPAGENAME}}|action=edit}} me redaktue këtë faqe]</span>.",
        "userpage-userdoesnotexist": "Llogaria e përdoruesit \"<nowiki>$1</nowiki>\" nuk âsht regjistrue.\nJu lutemi kontrolloni nëse doni me krijue/redaktue këtë faqe.",
        "clearyourcache": "'''Shenim - Mbas ruejtjes, ka mundësi që duheni me shmângë memorizimin në cache për me i pâ ndryshimet.'''\n'''Mozilla / Firefox / Safari:''' mbani ''Shift'' tue klikue në ''Reload'', ose trusni ''Ctrl-F5'' ose ''Ctrl-R'' (''Command-R'' në Mac);\n'''Konqueror: '''klikoni ''Reload'' ose trusni ''F5'';\n'''Opera:''' fshini cachein në ''Tools → Preferences'';\n'''Internet Explorer:''' mbani ''Ctrl'' tue klikue në ''Refresh,'' ose trusni ''Ctrl-F5''.",
        "usercssyoucanpreview": "'''Këshillë:''' Përdorni butonin 'Trego parapâmjen' për me testue CSS para se me i regjistrue ndryshimet.",
        "userjsyoucanpreview": "'''Këshillë:''' Përdorni butonin 'Trego parapâmjen' për me testue JS para se me i regjistrue ndryshimet.",
        "usercsspreview": "'''Vini re, jeni tue pâ veç parapâmjen e CSSit tuej.'''\n'''Ende nuk e keni ruejtë!'''",
-       "userjspreview": "'''Vini re, jeni tue testue/pâ veç parapâmjen e JavaScriptit tuej.'''\n'''Ende nuk e keni ruejtë!'''",
+       "userjspreview": "<strong>Vini re, jeni duke testuar/parë vetëm parapamjen e JavaScriptit tuaj.\nEnde nuk e keni ruajtur!</strong>",
        "userinvalidcssjstitle": "'''Kujdes:''' Nuk ka pâmje me emën \"$1\".\nVini re që faqet .css dhe .js përdorin vetëm titull me germa të vogla, psh. {{ns:user}}:Foo/vector.css për dallim prej {{ns:user}}:Foo/Vector.css.",
        "updated": "(E ndryshueme)",
        "note": "'''Shenim:'''",
index dbc005c..53d2471 100644 (file)
        "special-characters-group-lao": "Laosiano",
        "special-characters-group-khmer": "Khmer",
        "mw-widgets-dateinput-placeholder-day": "AAAA-MM-DD",
-       "mw-widgets-dateinput-placeholder-month": "AAAA-MM"
+       "mw-widgets-dateinput-placeholder-month": "AAAA-MM",
+       "api-error-blacklisted": "Trigue un titol diferent, mas descriptivo."
 }
index 04985a4..79ccd59 100644 (file)
        "recentchangeslinked-summary": "هذه قائمة بالتغييرات التي تمت حديثا للصفحات الموصولة من صفحة معينة (أو إلى الأعضاء ضمن تصنيف معين).\nالصفحات في [[Special:Watchlist|قائمة مراقبتك]] '''مغلظة'''",
        "recentchangeslinked-page": "اسم الصفحة:",
        "recentchangeslinked-to": "أظهر التغييرات للصفحات الموصولة للصفحة المعطاة عوضا عن ذلك",
+       "recentchanges-page-added-to-category": "[[:$1]] أضيفت إلى التصنيف",
        "upload": "ارفع ملفا",
        "uploadbtn": "ارفع الملف",
        "reuploaddesc": "إلغاء الرفع والرجوع إلى استمارة الرفع",
        "upload-dialog-button-done": "تم",
        "upload-dialog-button-save": "احفظ",
        "upload-dialog-button-upload": "رفع",
-       "upload-process-error": "حدث خطأ",
-       "upload-process-warning": "حدث تنبيه",
        "upload-form-label-select-file": "اختر ملفا",
        "upload-form-label-infoform-title": "التفاصيل",
        "upload-form-label-infoform-name": "الاسم",
        "special-characters-title-minus": "علامة الطرح",
        "mw-widgets-dateinput-no-date": "لا تاريخ تم اختياره",
        "mw-widgets-titleinput-description-new-page": "الصفحة غير موجودة بعد",
-       "mw-widgets-titleinput-description-redirect": "تحويل إلى $1"
+       "mw-widgets-titleinput-description-redirect": "تحويل إلى $1",
+       "api-error-blacklisted": "اختر عنوانا مختلفا ومفهوما."
 }
index 2ad3c0e..cb750de 100644 (file)
        "upload-dialog-button-done": "কৰা হ’ল",
        "upload-dialog-button-save": "সাঁচি থওক",
        "upload-dialog-button-upload": "আপল'ড",
-       "upload-process-error": "এটা ত্ৰুটি পোৱা গৈছে",
-       "upload-process-warning": "এটা সতৰ্কবাণী পোৱা গৈছে",
        "upload-form-label-select-file": "ফাইল নিৰ্বাচন কৰক",
        "upload-form-label-infoform-title": "বিস্তাৰিত",
        "upload-form-label-infoform-name": "নাম",
        "special-characters-group-khmer": "খেমাৰ",
        "special-characters-title-endash": "en দেছ্‌",
        "special-characters-title-emdash": "em দেছ‌",
-       "special-characters-title-minus": "বিয়োগ চিন"
+       "special-characters-title-minus": "বিয়োগ চিন",
+       "api-error-blacklisted": "অনুগ্ৰহ কৰি অন্য এটা বৰ্ণনামূলক শিৰোনাম নিৰ্বাচন কৰক"
 }
index 80dbb7d..cdc239c 100644 (file)
        "passwordreset-emailsent-capture": "Unvióse un corréu electrónicu pa reaniciar la contraseña, que s'amuesa abaxo.",
        "passwordreset-emailerror-capture": "Unvióse un corréu electrónicu pa reaniciar la contraseña, que s'amuesa abaxo, pero falló l'unviu {{GENDER:$2|al usuariu|a la usuaria}}: $1",
        "changeemail": "Camudar o desaniciar la dirección de corréu electrónicu",
-       "changeemail-header": "Camudar la direición de corréu electrónicu de la cuenta",
+       "changeemail-header": "Completa esti formulariu pa camudar la dirección de corréu electrónicu. Si quies desaniciar l'asociación de cualquier dirección de corréu electrónicu de la to cuenta, dexa en blancu la nueva dirección de corréu electrónicu cuando unvies el formulariu.",
+       "changeemail-passwordrequired": "Vas tener qu'escribir la contraseña pa confirmar esti cambéu.",
        "changeemail-no-info": "Tien d'aniciar sesión pa entrar direutamente a esta páxina.",
        "changeemail-oldemail": "Direición de corréu electrónicu actual:",
        "changeemail-newemail": "Direición de corréu electrónicu nueva:",
        "sig_tip": "La to robla con data y hora",
        "hr_tip": "Llinia horizontal (úsala con moderación)",
        "summary": "Resume:",
-       "subject": "Asuntu/títulu:",
+       "subject": "Asuntu:",
        "minoredit": "Esta ye una edición menor",
        "watchthis": "Vixilar esta páxina",
        "savearticle": "Guardar la páxina",
        "missingsummary": "'''Recordatoriu:''' Nun conseñasti un resume d'edición.\nSi calques nuevamente \"{{int:savearticle}}\", la to edición guardaráse ensin nengún resume.",
        "selfredirect": "<strong>Atención:</strong> Tas redirixendo esta páxina a ella mesma.\nSeique conseñaras un oxetivu enquivocáu pa la redireición, o que teas editando una páxina enquivocada. Si vuelves a facer clic en «{{int:savearticle}}», crearáse la redireición de toles maneres.",
        "missingcommenttext": "Por favor, escribi un comentariu abaxo.",
-       "missingcommentheader": "'''Recordatoriu:''' Nun conseñasti un asuntu/titular pa esti comentariu.\nSi calques nuevamente \"{{int:savearticle}}\", la to edición guardaráse ensin dengún.",
+       "missingcommentheader": "<strong>Recordatoriu:</strong> Nun conseñasti un asuntu pa esti comentariu.\nSi calques nuevamente «{{int:savearticle}}», la to edición guardaráse ensin nengunu.",
        "summary-preview": "Vista previa del resume:",
-       "subject-preview": "Vista previa del asuntu/titular:",
+       "subject-preview": "Vista previa del asuntu:",
        "previewerrortext": "Hebo un error al intentar entever los cambios.",
        "blockedtitle": "L'usuariu ta bloquiáu",
        "blockedtext": "'''El to nome d'usuariu o direición IP ta bloquiáu.'''\n\nEl bloquéu fexolu $1.\nEl motivu conseñáu ye ''$2''.\n\n* Principiu del bloquéu: $8\n* Caducidá del bloquéu: $6\n* Usuariu a bloquiar: $7\n\nPues ponete'n contautu con $1 o con otru [[{{MediaWiki:Grouppage-sysop}}|alministrador]] p'aldericar sobre'l bloquéu.\nNun pues usar la función 'manda-y un corréu electrónicu a esti usuariu' a nun ser que tea especificada una direición de\ncorréu electrónicu válida nes tos [[Special:Preferences|preferencies de cuenta]] y que nun tengas torgao usala.\nLa to direición IP actual ye $3, y la ID del bloquéu ye #$5.\nPor favor, incluye tolos detalles anteriores nes consultes que faigas.",
        "upload-dialog-button-done": "Fecho",
        "upload-dialog-button-save": "Guardar",
        "upload-dialog-button-upload": "Xubir",
-       "upload-process-error": "Hebo un error",
-       "upload-process-warning": "Hebo un avisu",
        "upload-form-label-select-file": "Seleiciona un ficheru",
        "upload-form-label-infoform-title": "Detalles",
        "upload-form-label-infoform-name": "Nome",
        "foreign-structured-upload-form-label-own-work": "Esti ye'l mio propiu trabayu",
        "foreign-structured-upload-form-label-infoform-categories": "Categoríes",
        "foreign-structured-upload-form-label-infoform-date": "Data",
+       "foreign-structured-upload-form-label-own-work-message-local": "Confirmo que xubo esti ficheru siguiendo les condiciones de serviciu y les polítiques de llicencies de {{SITENAME}}.",
+       "foreign-structured-upload-form-label-not-own-work-message-local": "Si nun puedes xubir esti ficheru baxo les polítiques de {{SITENAME}}, zarra esti diálogu y prueba otru métodu.",
+       "foreign-structured-upload-form-label-not-own-work-local-local": "Quiciabes quieras probar tamién [[Special:Upload|la páxina predeterminada de xubíes]].",
        "foreign-structured-upload-form-label-own-work-message-default": "Entiendo que toi xubiendo esti ficheru a un depósitu compartíu. Confirmo que toi faciéndolo cumpliendo les condiciones de serviciu y les polítiques de llicencies d'esi sitiu.",
        "foreign-structured-upload-form-label-not-own-work-message-default": "Si nun puedes xubir esti ficheru baxo les polítiques del depósitu compartíu, zarra esti diálogu y prueba otru métodu.",
        "foreign-structured-upload-form-label-not-own-work-local-default": "Tamién pué interesate usar [[Special:Upload|la páxina de carga de {{SITENAME}}]] si esti ficheru pué xubise allí baxo les sos polítiques.",
        "mw-widgets-dateinput-placeholder-day": "AAAA-MM-DD",
        "mw-widgets-dateinput-placeholder-month": "AAAA-MM",
        "mw-widgets-titleinput-description-new-page": "la páxina inda nun esiste",
-       "mw-widgets-titleinput-description-redirect": "redirixir a $1"
+       "mw-widgets-titleinput-description-redirect": "redirixir a $1",
+       "api-error-blacklisted": "Escueyi un títulu distintu, más descriptivu."
 }
index 92ae16e..9a1c8fb 100644 (file)
        "expand_templates_generate_xml": "Ipahiling an panlunhay na kahoy nin XML",
        "expand_templates_preview": "Patânaw",
        "mw-widgets-dateinput-placeholder-day": "TTTT-BB-AA",
-       "mw-widgets-dateinput-placeholder-month": "TTTT-BB"
+       "mw-widgets-dateinput-placeholder-month": "TTTT-BB",
+       "api-error-blacklisted": "Pakipili tabi nin sarong nalalaen, deskriptibong titulo."
 }
index ace7059..5b37a8f 100644 (file)
        "missingsummary": "'''Напамін:''' Вы не пазначылі кароткае апісаньне зьменаў.\nКалі Вы націсьніце кнопку «Запісаць» яшчэ раз, Вашае рэдагаваньне будзе запісанае без апісаньня.",
        "selfredirect": "<strong>Папярэджаньне:</strong> вы перанакіроўваеце старонку саму на сябе.\nМагчыма, вы пазначылі няслушную старонку для перанакіраваньня або вы рэдагуеце ня тую старонку.\nКалі вы націсьніце «{{int:savearticle}}» яшчэ раз, перанакіраваньне будзе створанае.",
        "missingcommenttext": "Калі ласка, увядзіце камэнтар ніжэй.",
-       "missingcommentheader": "'''Напамін:''' Вы не пазначылі загаловак камэнтара.\nКалі Вы націсьніце кнопку «{{int:savearticle}}» яшчэ раз, Ваш камэнтар захаваецца бяз тэмы.",
+       "missingcommentheader": "<strong>Напамін:</strong> Вы не пазначылі загаловак камэнтара. Калі Вы націсьніце кнопку «{{int:savearticle}}» яшчэ раз, Вашая зьмена будзе захаваная без камэнтара.",
        "summary-preview": "Папярэдні прагляд апісаньня:",
        "subject-preview": "Папярэдні прагляд загалоўку:",
        "previewerrortext": "Адбылася памылка пры спробе папярэдняга прагляду вашых зьменаў.",
        "prefs-help-recentchangescount": "Гэта датычыцца апошніх зьменах, гісторый старонак і журналаў.",
        "prefs-help-watchlist-token2": "Гэта сакрэтны ключ да стужкі вашага сьпісу назіраньня.\nКожны, хто ведае яго, можа набыць доступ да вашага сьпісу назіраньня, таму не дзяліцеся ім.\n[[Special:ResetTokens|Пстрыкніце тут, калі вам трэба скінуць яго]].",
        "savedprefs": "Вашыя налады былі захаваныя.",
+       "savedrights": "Правы {{GENDER:$1|ўдзельніка|ўдзельніцы}} $1 былі захаваныя.",
        "timezonelegend": "Часавы пояс:",
        "localtime": "Мясцовы час:",
        "timezoneuseserverdefault": "Выкарыстоўваць стандартныя налады {{GRAMMAR:родны|{{SITENAME}}}} ($1)",
        "recentchanges-page-added-to-category-bundled": "[[:$1]] і яшчэ {{PLURAL:$2|$2 старонка была дададзеная|$2 старонкі былі дададзеныя|$2 старонак былі дададзеныя}} да катэгорыі",
        "recentchanges-page-removed-from-category": "[[:$1]] выдаленая з катэгорыі",
        "recentchanges-page-removed-from-category-bundled": "[[:$1]] і яшчэ $2 {{PLURAL:$2|старонка была выдаленая|старонкі былі выдаленыя|старонак былі выдаленыя}} з катэгорыі",
+       "autochange-username": "Аўтаматычная зьмена MediaWiki",
        "upload": "Загрузіць файл",
        "uploadbtn": "Загрузіць файл",
        "reuploaddesc": "Скасаваць загрузку і вярнуцца да формы загрузкі",
        "upload-options": "Налады загрузкі",
        "watchthisupload": "Назіраць за гэтым файлам",
        "filewasdeleted": "Файл з такой назвай загружаўся, але быў выдалены.\nВам трэба праверыць $1 перад новай загрузкай.",
+       "filename-thumb-name": "Гэта выглядае як назва мініятуры. Калі ласка, не загружайце мініятуры назад у тую ж вікі. Калі вам неабходны гэты файл, выпраўце назву на больш зразумелую, каб яна ня ўтрымлівала прэфікс мініятуры.",
        "filename-bad-prefix": "Назва файла, які Вы загружаеце, пачынаецца з '''«$1»'''. Падобныя бессэнсоўныя назвы звычайна ствараюцца аўтаматычна лічбавымі фотаапаратамі. Калі ласка, абярыце больш зразумелую назву для Вашага файла.",
        "upload-success-subj": "Загрузка пасьпяхова скончылася",
        "upload-success-msg": "Вашая загрузка з [$2] была пасьпяховая. Яна даступная тут: [[:{{ns:file}}:$1]]",
        "upload-dialog-button-done": "Зроблена",
        "upload-dialog-button-save": "Захаваць",
        "upload-dialog-button-upload": "Загрузіць",
-       "upload-process-error": "Адбылася памылка",
-       "upload-process-warning": "Зьявілася папярэджаньне",
        "upload-form-label-select-file": "Абраць файл",
        "upload-form-label-infoform-title": "Падрабязнасьці",
        "upload-form-label-infoform-name": "Назва",
        "upload-form-label-infoform-description": "Апісаньне",
        "upload-form-label-usage-title": "Выкарыстаньне",
        "upload-form-label-usage-filename": "Назва файлу",
+       "foreign-structured-upload-form-label-own-work": "Гэта мая ўласная праца",
        "backend-fail-stream": "Немагчыма накіраваць файл $1.",
        "backend-fail-backup": "Немагчыма зрабіць рэзэрвовую копію файла $1.",
        "backend-fail-notexists": "Файл $1 не існуе.",
        "special-characters-title-minus": "мінус",
        "mw-widgets-dateinput-placeholder-day": "ГГГГ-ММ-ДД",
        "mw-widgets-dateinput-placeholder-month": "ГГГГ-ММ",
-       "mw-widgets-titleinput-description-new-page": "старонка яшчэ не існуе"
+       "mw-widgets-titleinput-description-new-page": "старонка яшчэ не існуе",
+       "api-error-blacklisted": "Калі ласка, выбярыце іншую, апісальную назву."
 }
index df22dec..3b2366e 100644 (file)
@@ -38,7 +38,7 @@
        "tog-hidepatrolled": "Скриване на патрулираните редакции от списъка с последните промени",
        "tog-newpageshidepatrolled": "Скриване на патрулираните редакции от списъка на новите страници",
        "tog-extendwatchlist": "Разширяване на списъка за наблюдение, така че да показва всички промени, не само последните",
-       "tog-usenewrc": "Ð\93Ñ\80Ñ\83пиÑ\80ане Ð½Ð° Ð¿Ñ\80омени Ð¿Ð¾ Ñ\81Ñ\82Ñ\80аниÑ\86иÑ\82е Ð½Ð° Ð¿Ð¾Ñ\81ледниÑ\82е Ð¿Ñ\80омени Ð¸ списъка за наблюдение",
+       "tog-usenewrc": "Ð\93Ñ\80Ñ\83пиÑ\80ане Ð¿Ð¾ Ñ\81Ñ\82Ñ\80аниÑ\86и Ð½Ð° Ð¿Ñ\80омениÑ\82е Ð½Ð° Ð\9fоÑ\81ледни Ð¿Ñ\80омени Ð¸ Ð² списъка за наблюдение",
        "tog-numberheadings": "Автоматично номериране на заглавията",
        "tog-showtoolbar": "Показване на лентата с инструменти за редактиране",
        "tog-editondblclick": "Редактиране на страниците чрез двойно щракване",
        "special-characters-title-emdash": "дълго тире",
        "special-characters-title-minus": "знак минус",
        "mw-widgets-dateinput-placeholder-day": "ГГГГ-ММ-ДД",
-       "mw-widgets-dateinput-placeholder-month": "ГГГГ-ММ"
+       "mw-widgets-dateinput-placeholder-month": "ГГГГ-ММ",
+       "api-error-blacklisted": "Моля, изберете различно, описателно заглавие."
 }
index bfea927..92d2a03 100644 (file)
        "prefs-labs": "آزمایشی ئین ویژگی ئان",
        "prefs-user-pages": "کار زوروکی تاکدیمان",
        "prefs-personal": "کار زوروکی پروفایل",
-       "prefs-rc": "آخیرین تغیراتان",
+       "prefs-rc": "نۆکین تغیران",
        "prefs-watchlist": "واچلیست",
        "prefs-editwatchlist": "واچلیستی ایڈیٹ کورتین",
        "prefs-editwatchlist-label": "وتئ واچلیست ئی موچین لڑلیستانئ ایڈیٹ:",
        "stub-threshold": "آستانه په کۆنڈ لینکاني قالب بندیا ($1):",
        "stub-threshold-sample-link": "نمونه",
        "stub-threshold-disabled": "غیرفعال",
-       "recentchangesdays": "روچانی اندازه گ بئ آخیر ئین تغیراتانئ تا نشان داته بوته انت:",
+       "recentchangesdays": "روچانی اندازه گ بِه آخیرئین تغیراتانئ تا نشان داته بوته انت:",
        "recentchangesdays-max": "حداکثر $1 {{PLURAL:$1|روچ}}",
        "recentchangescount": "پیش پرزین نشان داته بوته ئین ایڈیٹ ئانی اندازه گ:",
-       "prefs-help-recentchangescount": "اÛ\8c Ø´Ø§Ù\85Û\8cÙ\84 Ø¢Ø®Û\8cرئÛ\8cÙ\86 ØªØºÛ\8cراÙ\86Û\8cØ\8cتاکدÛ\8cÙ\85اÙ\86Û\8c ØªØ§Ø±Û\8cØ®Ú\86Ù\87 Ø¦Û\8c Ù\88 Ø³Û\8cاÙ\87Ù\87 Ø¦Ø§Ù\86Û\8c Ø§Ø³ت.",
+       "prefs-help-recentchangescount": "اÛ\8c Ø´Ø§Ù\85Û\8cÙ\84 Ø¦Ù\87 Ø¨Û\8cت Ø´Ù\87 Ø¢Ø®Û\8cرئÛ\8cÙ\86 ØªØºÛ\8cراÙ\86Ø\8cÚ©Ù\87 ØªØ§Ú©Ø¯Û\8cÙ\85اÙ\86Û\8c ØªØ§Ø±Û\8cØ®Ú\86Ù\87 Ù\88 Ø®Ø§Ù\84Û\8cگاÙ\87 Ø§Ù\86ت.",
        "savedprefs": "شمی تنظیمات ذخیره بوتنت.",
        "timezonelegend": "منطقهٔ زمانی:",
        "localtime": "محلی ئن وخت:",
        "right-importupload": "تاکدیمئ داخل کورتین شه فایلئ اپلوڈ کورتین ئا",
        "right-patrol": "دیگرانئ ایڈیٹانی مارک جتین",
        "right-autopatrol": "اوتوماتیکین مارک وارتین ایڈیٹ ئانی",
-       "right-patrolmarks": "آخیرئین گشت وارته ئین برچسپ ئی دیستین",
+       "right-patrolmarks": "گشت وارته ئین علامتاني نۆکین تغیرانئ دیستین",
        "right-unwatchedpages": "دیستین آ دیمانی لیستی که پدگیری ئه نه بیئنت",
        "right-mergehistory": "تاکدیمانی تاریخچه ئی ادغام کورتین",
        "right-userrights": "ایڈیٹ کورتین کار زوروکئ موچین اختیارانئ",
        "nchanges": "$1 {{PLURAL:$1|ٹگل|ٹگل}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|شه اخر ئین دیستینا}}",
        "enhancedrc-history": "تاریخچه",
-       "recentchanges": "آخیرین تغیراتان",
+       "recentchanges": "نۆکین تغیران",
        "recentchanges-legend": "آخیر ئین تغیراتانئ آپشن",
-       "recentchanges-summary": "ویکی ئی آخیر ئین تغیرانا بئ تاکدیمی تا بچاریت.",
+       "recentchanges-summary": "به ائ ویکیێ تا نۆکین و آخیرئین تغیرانه به ای دیمئ تا بگیندێت.",
        "recentchanges-noresult": "هیچ تغیری بئ تعین بوته ئین دوره ئی تا گۆ ای معیاران هموانی نداشت.",
-       "recentchanges-feed-description": "اÛ\8c Ù\88Û\8cÚ©Û\8c Ø¦Û\8c Ø¢Ø®Û\8cر Ø¦Û\8cÙ\86 ØªØºÛ\8cراÙ\86ا Ø¨Ø¦ Ø§Û\8c Ù\88ارگ Ø¦Û\8c ØªØ§ Ø¨Ú\86ارÛ\8cت.",
+       "recentchanges-feed-description": "بÙ\87 Ø§Ø¦ Ù\88Û\8cÚ©Û\8cÛ\8e ØªØ§ Ù\86Û\86Ú©Û\8cÙ\86 Ù\88 Ø¢Ø®Û\8cرئÛ\8cÙ\86 ØªØºÛ\8cراÙ\86Ù\87 Ø¨Ù\87 Ø§Û\8c Ù\81Û\8cÚ\88ئ ØªØ§ Ø¨Ú¯Û\8cÙ\86دÛ\8eت.",
        "recentchanges-label-newpage": "ای ایڈیٹ نوکین تاکدیمی ئا جوڑ کورت",
        "recentchanges-label-minor": "ای یک گونڈین ایڈیٹئ است",
        "recentchanges-label-bot": "ای ایڈیٹا یک ربات ئی کورته",
        "upload-dialog-button-done": "اجراء",
        "upload-dialog-button-save": "ساتیتێن",
        "upload-dialog-button-upload": "بُرز کورتین",
-       "upload-process-error": "یک خطای رخ دات",
-       "upload-process-warning": "یک اخطاری رخ دات",
        "upload-form-label-select-file": "فایلئ نشاني کورتین",
        "upload-form-label-infoform-title": "پاک کورتین (شه بین بورتین)",
        "upload-form-label-infoform-name": "نام",
        "tooltip-n-mainpage-description": "بُنیاد ئین تاکدیمی دیستین",
        "tooltip-n-portal": "بی پروژه ئی موریدا٬ آنچه که توانیت انجام دهیت و ای که چی چیزی ئا شه گوجا ودی بکنیت",
        "tooltip-n-currentevents": "پدزمینه ئین مئلوماتئ بدست آورتین شه انونین رویداد ئان",
-       "tooltip-n-recentchanges": "ویکی ئی آخیرین تغیرايانی لڑ لیست",
+       "tooltip-n-recentchanges": "ائ ویکیێ نۆکین و آخیرئین تغیراني لڑ",
        "tooltip-n-randompage": "یک تصادفی ئین دیمی آورتین",
        "tooltip-n-help": "جای په ودی کورتین ئا",
        "tooltip-t-whatlinkshere": "موچین تاکدیمانی لڑ لیست که گۆ ای دیما لینک وارته انت",
index af8a0eb..75746dc 100644 (file)
        "passwordreset-emailsent-capture": "স্মরণ করিয়ে দেয়ার জন্য একটি ইমেইল করা হয়েছে, যা নিচে দেখানো হচ্ছে।",
        "passwordreset-emailerror-capture": "স্মরণ করিয়ে দেয়ার জন্য একটি ইমেইল তৈরী করা হয়েছিল, যা নিচে দেখানো হচ্ছে, তবে $1 {{GENDER:$2|ব্যবহারকারীকে}} এটি পাঠানো যায়নি!",
        "changeemail": "ই-মেইল ঠিকানা পরিবর্তন",
-       "changeemail-text": "ই-মেইল ঠিকানা পরিবর্তন করতে আপনাকে এই ফরমটি পূরণ করতে হবে। এই পরিবর্তনটি নিশ্চিত করতে আপনার পাসওয়ার্ড প্রদানের প্রয়োজন হবে।",
+       "changeemail-header": "অ্যাকাউন্ট ই-মেইল ঠিকানা পরিবর্তন",
        "changeemail-no-info": "এই পাতাটিতে সরাসরি প্রবেশাধিকার পেতে আপনাকে অবশ্যই লগইন করতে হবে।",
        "changeemail-oldemail": "বর্তমান ই-মেইল ঠিকানা:",
        "changeemail-newemail": "নতুন ই-মেইল ঠিকানা:",
        "upload-dialog-button-done": "সম্পন্ন",
        "upload-dialog-button-save": "সংরক্ষণ",
        "upload-dialog-button-upload": "আপলোড",
-       "upload-process-error": "একটি ত্রুটি দেখা দিয়েছে",
-       "upload-process-warning": "একটি সতর্কবার্তা দেখা দিয়েছে",
        "upload-form-label-select-file": "ফাইল নির্বাচন করুন",
        "upload-form-label-infoform-title": "বিস্তারিত",
        "upload-form-label-infoform-name": "নাম",
        "mw-widgets-dateinput-placeholder-day": "বববব-মম-দদ",
        "mw-widgets-dateinput-placeholder-month": "বববব-মম",
        "mw-widgets-titleinput-description-new-page": "পাতা এখনো বিদ্যমান নয়",
-       "mw-widgets-titleinput-description-redirect": "$1-এ পুনঃনির্দেশিত"
+       "mw-widgets-titleinput-description-redirect": "$1-এ পুনঃনির্দেশিত",
+       "api-error-blacklisted": "অনুগ্রহ করে অপর কোনো বর্ণনামূলক নাম ব্যবহার করুন।"
 }
index 0c35756..b6209b1 100644 (file)
        "special-characters-group-devanagari": "Devanagari",
        "special-characters-group-thai": "Thai",
        "special-characters-group-lao": "Laoseg",
-       "special-characters-group-khmer": "Khmer"
+       "special-characters-group-khmer": "Khmer",
+       "api-error-blacklisted": "Dibabit un titl deskrivañ all"
 }
index 7d3ffe8..24891c8 100644 (file)
        "upload-dialog-button-done": "Fet",
        "upload-dialog-button-save": "Desa",
        "upload-dialog-button-upload": "Carrega",
-       "upload-process-error": "S’ha produït un error",
-       "upload-process-warning": "S'ha produït un avís",
        "upload-form-label-select-file": "Seleccioneu fitxer",
        "upload-form-label-infoform-title": "Detalls",
        "upload-form-label-infoform-name": "Nom",
        "mw-widgets-dateinput-placeholder-day": "AAAA-MM-DD",
        "mw-widgets-dateinput-placeholder-month": "AAAA-MM",
        "mw-widgets-titleinput-description-new-page": "la pàgina no existeix encara",
-       "mw-widgets-titleinput-description-redirect": "redirigeix a $1"
+       "mw-widgets-titleinput-description-redirect": "redirigeix a $1",
+       "api-error-blacklisted": "Trieu un títol diferent, més descriptiu."
 }
index b729a55..3972e39 100644 (file)
        "special-characters-group-sinhala": "سینھالا",
        "special-characters-group-gujarati": "گوجەراتی",
        "special-characters-group-thai": "تایلەندی",
-       "special-characters-group-khmer": "خمێری"
+       "special-characters-group-khmer": "خمێری",
+       "api-error-blacklisted": "هەڵبژێرە ناونیشانی جیاوازتر و واتادارتر."
 }
index 1f7207f..24499a9 100644 (file)
        "passwordreset-emailsent-capture": "Byl odeslán e-mail pro získání nového hesla, který je zobrazen níže.",
        "passwordreset-emailerror-capture": "Byl vygenerován e-mail pro získání nového hesla, který je zobrazen níže, ale {{GENDER:$2|uživateli|uživatelce}} se ho nepodařilo odeslat: $1",
        "changeemail": "Změna nebo odstranění e-mailové adresy",
-       "changeemail-header": "Změna e-mailové adresy k účtu",
+       "changeemail-header": "Vyplněním tohoto formuláře můžete změnit svou e-mailovou adresu. Pokud chcete ze svého účtu odstranit vazbu na všechny e-mailové adresy, ponechte při odeslání formuláře novou e-mailovou adresu prázdnou.",
+       "changeemail-passwordrequired": "Pro potvrzení této změny musíte zadat své heslo.",
        "changeemail-no-info": "K této stránce mají přímý přístup jen přihlášení uživatelé.",
        "changeemail-oldemail": "Stávající e-mailová adresa:",
        "changeemail-newemail": "Nová e-mailová adresa:",
        "prefs-help-recentchangescount": "Týká se posledních změn, historie stránek a protokolovacích záznamů.",
        "prefs-help-watchlist-token2": "Toto je tajný klíč k webovému kanálu vašich sledovaných stránek. Kdokoli, kdo bude tento klíč znát, bude moci váš seznam sledovaných stránek číst, takže ho nešiřte.\n[[Special:ResetTokens|Kliknutím sem ho můžete reinicializovat.]]",
        "savedprefs": "Nastavení byla uložena.",
+       "savedrights": "Práva {{GENDER:$1|uživatele|uživatelky}} $1 byla uložena.",
        "timezonelegend": "Časové pásmo:",
        "localtime": "Místní čas:",
        "timezoneuseserverdefault": "Použít časové pásmo wiki ($1)",
        "recentchanges-page-added-to-category-bundled": "Stránka [[:$1]] a {{PLURAL:$2|jedna další zařazeny|$2 další zařazeny|$2 dalších zařazeno}} do kategorie",
        "recentchanges-page-removed-from-category": "Stránka [[:$1]] vyřazena z kategorie",
        "recentchanges-page-removed-from-category-bundled": "Stránka [[:$1]] a {{PLURAL:$2|jedna další vyřazeny|$2 další vyřazeny|$2 dalších vyřazeno}} z kategorie",
+       "autochange-username": "Automatická změna MediaWiki",
        "upload": "Načíst soubor",
        "uploadbtn": "Načíst soubor",
        "reuploaddesc": "Zrušit načítání a vrátit se do formuláře.",
        "upload-dialog-button-done": "Hotovo",
        "upload-dialog-button-save": "Uložit",
        "upload-dialog-button-upload": "Načíst",
-       "upload-process-error": "Došlo k chybě",
-       "upload-process-warning": "Objevilo se upozornění",
        "upload-form-label-select-file": "Výběr souboru",
        "upload-form-label-infoform-title": "Podrobnosti",
        "upload-form-label-infoform-name": "Název",
        "upload-form-label-infoform-description": "Popis",
        "upload-form-label-usage-title": "Použití",
        "upload-form-label-usage-filename": "Jméno souboru",
+       "foreign-structured-upload-form-label-own-work": "Je to mé vlastní dílo",
        "foreign-structured-upload-form-label-infoform-categories": "Kategorie",
        "foreign-structured-upload-form-label-infoform-date": "Datum",
+       "foreign-structured-upload-form-label-own-work-message-local": "Potvrzuji, že tento soubor načítám v souladu s podmínkami užití a licenčními pravidly na {{grammar:6sg|{{SITENAME}}}}.",
+       "foreign-structured-upload-form-label-not-own-work-message-local": "Pokud nemůžete tento soubor načíst v souladu s pravidly {{grammar:2sg|{{SITENAME}}}}, zavřete prosím tento dialog a zkuste jiný způsob.",
+       "foreign-structured-upload-form-label-own-work-message-default": "Chápu, že soubor načítám na sdílené úložiště. Potvrzuji, že tak činím v souladu s tamními podmínkami užití a licenčními pravidly.",
+       "foreign-structured-upload-form-label-not-own-work-message-default": "Pokud nemůžete tento soubor načíst v souladu s pravidly sdíleného úložiště, zavřete prosím tento dialog a zkuste jiný způsob.",
+       "foreign-structured-upload-form-label-own-work-message-shared": "Potvrzuji, že jsem držitelem autorských práv k tomuto souboru a neodvolatelně souhlasím s jeho zveřejněním na Wikimedia Commons pod licencí [https://creativecommons.org/licenses/by-sa/4.0/deed.cs Creative Commons Uveďte původ – Zachovejte licenci 4.0] a souhlasím s [https://wikimediafoundation.org/wiki/Terms_of_Use/cs Podmínkami užití].",
+       "foreign-structured-upload-form-label-not-own-work-message-shared": "Pokud nejste držiteli autorských práv k tomuto souboru nebo si ho přejete zveřejnit pod jinou licencí, zvažte použití [https://commons.wikimedia.org/wiki/Special:UploadWizard Průvodce načítáním souborů na Commons].",
        "backend-fail-stream": "Soubor $1 nelze streamovat.",
        "backend-fail-backup": "Soubor $1 nelze zazálohovat.",
        "backend-fail-notexists": "Soubor $1 neexistuje.",
        "svg-long-error": "Neplatný soubor SVG: $1",
        "show-big-image": "Původní soubor",
        "show-big-image-preview": "Velikost tohoto náhledu: $1.",
+       "show-big-image-preview-differ": "Velikost tohoto $3 náhledu tohoto $2 souboru: $1.",
        "show-big-image-other": "{{PLURAL:$2|Jiné|Jiná}} rozlišení: $1.",
        "show-big-image-size": "$1 × $2 pixelů",
        "file-info-gif-looped": "ve smyčce",
        "mw-widgets-dateinput-placeholder-day": "RRRR-MM-DD",
        "mw-widgets-dateinput-placeholder-month": "RRRR-MM",
        "mw-widgets-titleinput-description-new-page": "stránka zatím neexistuje",
-       "mw-widgets-titleinput-description-redirect": "přesměrování na $1"
+       "mw-widgets-titleinput-description-redirect": "přesměrování na $1",
+       "api-error-blacklisted": "Zvolte prosím jiný, popisný název."
 }
index dba2662..f8d3a0a 100644 (file)
        "changed": "улăштарнă",
        "deletepage": "Кăларса парахнă статьясем",
        "confirm": "Çирĕплетни",
-       "excontent": "ăшлăхĕ: «$1»",
-       "excontentauthor": "ăшлăхĕ: «$1» ([[Special:Contributions/$2|$2]] пĕччен кăна улшăнусем кĕртнĕ)",
+       "excontent": "ăшĕнче пулнă: \"$1\"",
+       "excontentauthor": "ăшĕнче пулнă: \"$1\", пĕртен пĕр хушакан пулнă \"[[Special:Contributions/$2|$2]]\" ([[User talk:$2|talk]])",
        "actioncomplete": "Турăмăр",
        "deletedtext": "«$1» кăларса парахрăмăр.\nЮлашки кăларса пăрахнă статьясен списокне курмашкăн кунта пăхăр: $2.",
        "dellogpage": "Кăларса пăрахнисем",
        "unblocklink": "блокировкăран кăлар",
        "contribslink": "хушни",
        "blocklogpage": "Ĕçлеме чарнисен журналĕ",
+       "blocklogentry": "[[$1]] чарса хучĕ $2 пĕтиччен $3",
        "unblocklogentry": "«$1» блокировкăран кăларнă",
        "block-log-flags-anononly": "анонимлă хутшăнакансем кăна",
        "block-log-flags-nocreate": "хутшăнакансене регистрациленме чарнă",
        "block-log-flags-noemail": "çыру яма чарнă",
        "move-page-legend": "Страницăна куçарнă",
-       "movearticle": "Страницăн ятне улăштар",
        "newtitle": "Çĕнĕ ят",
        "move-watch": "Ку страницăна сăнамаллисем шутне хуш",
        "movepagebtn": "Страницăн ятне улăштар",
        "htmlform-selectorother-other": "Урăххи",
        "htmlform-no": "Çук",
        "logentry-delete-delete": "$1 $3 страница {{GENDER:$2|пăсса утрĕ}}",
+       "logentry-block-block": "$1 {{GENDER:$4|$3}} {{GENDER:$2|чарса хучĕ}} $5 пĕтиччен $6",
        "logentry-move-move": "$1 страницă {{GENDER:$2|ятне улăштарчĕ}} $3 - $4",
        "rightsnone": "(çук)",
        "feedback-back": "Каялла",
index 156470d..ae34411 100644 (file)
        "special-characters-title-emdash": "heiffen em",
        "special-characters-title-minus": "arwydd minws",
        "mw-widgets-dateinput-placeholder-day": "BBBB-MM-DD",
-       "mw-widgets-dateinput-placeholder-month": "BBBB-MM"
+       "mw-widgets-dateinput-placeholder-month": "BBBB-MM",
+       "api-error-blacklisted": "Dewiswch deitl gwahanol sy'n disgrifio'r gwaith, os gwelwch yn dda."
 }
index a04ac62..01a6847 100644 (file)
        "viewsource": "Vis kildetekst",
        "viewsource-title": "Se kildekoden til $1",
        "actionthrottled": "Begrænsning af handling",
-       "actionthrottledtext": "For at modvirke spam, er det ikke muligt at udføre denne handling mange gange på kort tid. Du har overskredet grænsen, hvorfor handlingen er blevet afbrudt. Vær venlig at forsøge igen om et par minutter.",
+       "actionthrottledtext": "For at modvirke spam, er det ikke muligt at udføre denne handling mange gange på kort tid. Du har overskredet grænsen, hvorfor handlingen er blevet afbrudt. Du kan forsøge igen om et par minutter.",
        "protectedpagetext": "Denne side er blevet beskyttet, for at forhindre redigering eller andre handlinger.",
        "viewsourcetext": "Du kan se og kopiere kildekoden til siden:",
-       "viewyourtext": "Du kan se og kopiere kildekoden for '''dine redigeringer''' til denne side:",
+       "viewyourtext": "Du kan se og kopiere kildekoden for <strong>dine redigeringer</strong> til denne side.",
        "protectedinterface": "Denne side indeholder teksten i brugergrænsefladen til softwaren på denne wiki, og er beskyttet for at forhindre misbrug.\nHvis du vil tilføje eller ændre oversættelser for alle wiki-websteder, så brug venligst [//translatewiki.net/ translatewiki.net], projektet for oversættelse af MediaWiki.",
        "editinginterface": "<strong>Advarsel:</strong> Du redigerer en side, som bruges til at give interface-tekst til softwaren.\nÆndringer på denne side vil påvirke udseendet af brugergrænsefladen for andre brugere på denne wiki.",
        "translateinterface": "For at tilføje eller ændre oversættelser for alle wikier, skal du bruge [//translatewiki.net/ translatewiki.net], der er MediaWikis lokaliseringsprojekt.",
        "createacct-benefit-body2": "{{PLURAL:$1|side|sider}}",
        "createacct-benefit-body3": "{{PLURAL:$1|nylig bidragyder|nylige bidragydere}}",
        "badretype": "De indtastede adgangskoder er ikke ens.",
+       "usernameinprogress": "En oprettelse af konto for dette brugernavn er allerede i gang.\nVent venligst.",
        "userexists": "Det brugernavn, du har valgt, er allerede i brug.\nVælg venligst et andet brugernavn.",
        "loginerror": "Logon mislykket",
        "createacct-error": "Fejl ved kontooprettelse",
        "passwordreset-emailtext-ip": "Nogen (sandsynligvis dig, fra IP-adressen $1) har anmodet om at få nulstillet din adgangskode til {{SITENAME}} ($4). {{PLURAL:$3|Den følgende brugerkonto er associeret|De følgende brugerkonti er associerede}} med denne e-mailadresse:\n\n$2\n\n{{PLURAL:$3|Denne midlertidige adgangskode|Disse midlertidige adgangskoder}} vil udløbe om {{PLURAL:$5|en dag|$5 dage}}.\nDu bør logge på og vælge en ny adgangskode nu. Hvis en anden end dig har lavet denne anmodning, eller hvis du er kommet i tanke om din oprindelig adgangskode og ikke længere ønsker at ændre den, kan du ignorere denne meddelelse og fortsætte med at bruge din gamle adgangskode.",
        "passwordreset-emailtext-user": "Brugeren $1 på {{SITENAME}} har anmodet om at få nulstillet din adgangskode til {{SITENAME}} ($4). {{PLURAL:$3|Den følgende brugerkonto er associeret|De følgende brugerkonti er associerede}} med denne e-mailadresse:\n\n$2\n\n{{PLURAL:$3|Denne midlertidige adgangskode|Disse midlertidige adgangskoder}} vil udløbe om {{PLURAL:$5|en dag|$5 dage}}.\nDu bør logge på og vælge en ny adgangskode nu. Hvis en anden end dig har lavet denne anmodning, eller hvis du er kommet i tanke om din oprindelig adgangskode og ikke længere ønsker at ændre den, kan du ignorere denne meddelelse og fortsætte med at bruge din gamle adgangskode.",
        "passwordreset-emailelement": "Brugernavn: \n$1\n\nMidlertidig adgangskode: \n$2",
-       "passwordreset-emailsent": "En e-mail om nulstilling af adgangskode er blevet sendt.",
+       "passwordreset-emailsent": "Hvis dettte er en registreret e-mail-adresse til din konto, så vil en nulstilling af adgangskoden e-mail blive sendt.",
        "passwordreset-emailsent-capture": "En e-mail om nulstilling af adgangskode, som vist nedenfor, er blevet sendt.",
        "passwordreset-emailerror-capture": "En mail om nulstilling af adgangskode, som vist nedenfor, blev genereret, men det lykkedes ikke at sende den til {{GENDER:$2|bruger}}: $1",
        "changeemail": "Ændr eller fjern e-mailadresse",
-       "changeemail-header": "Ændre kontoens e-mailadresse",
+       "changeemail-header": "Udfyld denne formular for at ændre din e-mail-adresse. Hvis du gerne vil  fjerne den forbindelsen af e-mail-adresse fra din konto, så lad den nye e-mailadresse være blank, når du sender formularen.",
+       "changeemail-passwordrequired": "Du er nødt til at indtaste din adgangskode for at bekræfte denne ændring.",
        "changeemail-no-info": "Du skal være logget på for at komme direkte til denne side.",
        "changeemail-oldemail": "Nuværende e-mailadresse:",
        "changeemail-newemail": "Ny e-mailadresse:",
        "tooltip-pt-logout": "Log af",
        "tooltip-pt-createaccount": "Du opfordres til at oprette en konto og logge på, men det er ikke obligatorisk",
        "tooltip-ca-talk": "Diskussion om indholdet på siden",
-       "tooltip-ca-edit": "Du kan redigere denne side. Brug venligst forhåndsvisning før du gemmer.",
+       "tooltip-ca-edit": "Redigér denne side",
        "tooltip-ca-addsection": "Start et nyt afsnit",
        "tooltip-ca-viewsource": "Denne side er beskyttet.\nDu kan se på kildeteksten.",
        "tooltip-ca-history": "Tidligere versioner af denne side",
        "tooltip-ca-nstab-main": "Se indholdssiden",
        "tooltip-ca-nstab-user": "Se brugersiden",
        "tooltip-ca-nstab-media": "Se mediasiden",
-       "tooltip-ca-nstab-special": "Dette er en specialside; man kan ikke redigere sådanne sider",
+       "tooltip-ca-nstab-special": "Dette er en specialside og kan ikke redigeres",
        "tooltip-ca-nstab-project": "Vis projektsiden",
        "tooltip-ca-nstab-image": "Se filsiden",
        "tooltip-ca-nstab-mediawiki": "Se systembeskeden",
        "spam_reverting": "Sidste version uden henvisning til $1 gendannet.",
        "spam_blanking": "Alle versioner, som indeholdt henvisninger til $1, er renset.",
        "spam_deleting": "Alle versioner indeholder henvisninger til $1, sletter",
-       "simpleantispam-label": "Anti-spam tjek.\nUdfyld '''IKKE''' dette!",
+       "simpleantispam-label": "Anti-spam tjek.\nUdfyld <strong>ikke</strong> dette!",
        "pageinfo-title": "Information om \"$1\"",
        "pageinfo-not-current": "Beklager, det er umuligt at give denne information for gamle udgaver.",
        "pageinfo-header-basic": "Grundlæggende oplysninger",
        "exif-primarychromaticities": "Kromaticitet af primærfarver",
        "exif-ycbcrcoefficients": "YCbCr-koefficienter",
        "exif-referenceblackwhite": "Sort/hvide-referencepunkter",
-       "exif-datetime": "Lagringstidspunkt",
+       "exif-datetime": "Dato og tid for ændring af fil",
        "exif-imagedescription": "Billedtitel",
-       "exif-make": "Producent",
-       "exif-model": "Model",
+       "exif-make": "Kameraproducent",
+       "exif-model": "Kameramodel",
        "exif-software": "Software",
        "exif-artist": "Fotograf",
        "exif-copyright": "Ophavsret",
        "exif-usercomment": "Brugerkommentarer",
        "exif-relatedsoundfile": "Tilhørende lydfil",
        "exif-datetimeoriginal": "Optagelsestidspunkt",
-       "exif-datetimedigitized": "Digitaliseringstidspunkt",
+       "exif-datetimedigitized": "Dato og tid for digitalisering",
        "exif-subsectime": "Lagringstidspunkt (1/100 s)",
        "exif-subsectimeoriginal": "Optagelsestidspunkt (1/100 s)",
        "exif-subsectimedigitized": "Digitaliseringstidspunkt (1/100 s)",
        "special-characters-title-emdash": "lang tankestreg",
        "special-characters-title-minus": "minustegn",
        "mw-widgets-dateinput-placeholder-day": "ÅÅÅÅ-MM-DD",
-       "mw-widgets-dateinput-placeholder-month": "ÅÅÅÅ-MM"
+       "mw-widgets-dateinput-placeholder-month": "ÅÅÅÅ-MM",
+       "api-error-blacklisted": "Vælg venligst en anden, beskrivende titel."
 }
index 3412983..8afd623 100644 (file)
@@ -81,7 +81,8 @@
                        "Tiin",
                        "Freddy2001",
                        "Luke081515",
-                       "J. 'mach' wust"
+                       "J. 'mach' wust",
+                       "R4c0r"
                ]
        },
        "tog-underline": "Links unterstreichen:",
        "prefs-help-recentchangescount": "Dies umfasst die Liste der letzten Änderungen, die Versionsgeschichte und die Logbücher.",
        "prefs-help-watchlist-token2": "Dies ist der geheime Schlüssel zum Webfeed deiner Beobachtungsliste.\nJeder, der ihn kennt, kann deine Beobachtungsliste lesen. Teile ihn deshalb nicht Anderen mit.\nSofern notwendig, [[Special:ResetTokens|kannst du ihn zurücksetzen]].",
        "savedprefs": "Deine Einstellungen wurden gespeichert.",
+       "savedrights": "Die Benutzerrechte von {{GENDER:$1|$1}} wurden gespeichert.",
        "timezonelegend": "Zeitzone:",
        "localtime": "Ortszeit:",
        "timezoneuseserverdefault": "Standardzeit dieses Wikis nutzen ($1)",
        "upload-dialog-button-done": "Schließen",
        "upload-dialog-button-save": "Speichern",
        "upload-dialog-button-upload": "Hochladen",
-       "upload-process-error": "Es ist ein Fehler aufgetreten",
-       "upload-process-warning": "Es ist eine Warnung aufgetreten",
        "upload-form-label-select-file": "Datei auswählen",
        "upload-form-label-infoform-title": "Einzelheiten",
        "upload-form-label-infoform-name": "Name",
        "svg-long-error": "Ungültige SVG-Datei: $1",
        "show-big-image": "Originaldatei",
        "show-big-image-preview": "Größe dieser Vorschau: $1.",
+       "show-big-image-preview-differ": "Größe der $3-Vorschau dieser $2-Datei: $1.",
        "show-big-image-other": "Weitere {{PLURAL:$2|Auflösung|Auflösungen}}: $1.",
        "show-big-image-size": "$1 × $2 Pixel",
        "file-info-gif-looped": "Endlosschleife",
        "mw-widgets-dateinput-placeholder-day": "JJJJ-MM-TT",
        "mw-widgets-dateinput-placeholder-month": "JJJJ-MM",
        "mw-widgets-titleinput-description-new-page": "Seite ist noch nicht vorhanden",
-       "mw-widgets-titleinput-description-redirect": "Weiterleitung nach $1"
+       "mw-widgets-titleinput-description-redirect": "Weiterleitung nach $1",
+       "api-error-blacklisted": "Bitte einen anderen, aussagekräftigen Titel wählen."
 }
index 8f90d6c..2fc71a2 100644 (file)
        "special-characters-title-emdash": "tira derge",
        "special-characters-title-minus": "işaretê kemiye",
        "mw-widgets-dateinput-placeholder-day": "SSSS-AA-RR",
-       "mw-widgets-dateinput-placeholder-month": "SSSS-AA"
+       "mw-widgets-dateinput-placeholder-month": "SSSS-AA",
+       "api-error-blacklisted": "Reca keme zewbina weçine, name wa şınasnaye bo."
 }
index 765106b..d8efcde 100644 (file)
        "userjsyoucanpreview": "'''Χρήσιμη συμβουλή:''' Χρησιμοποιήστε το κουμπί \"{{int:showpreview}}\" για να ελέγξτε τη νέα σας JS πριν την αποθηκεύσετε.",
        "usercsspreview": "'''Σας υπενθυμίζουμε ότι κάνετε απλώς έλεγχο/προεπισκόπηση του CSS του χρήστη -δεν το έχετε ακόμα αποθηκεύσει! '''",
        "userjspreview": "'''Σας υπενθυμίζουμε ότι κάνετε απλώς έλεγχο/προεπισκόπηση του JavaScript του χρήστη -δεν το έχετε ακόμα αποθηκεύσει!'''",
-       "sitecsspreview": "''' Θυμηθείτε ότι κάνετε μόνο προεπισκόπηση σ' αυτή τη  CSS.'' '\n'' ' Δεν το έχετε σώσει  ακόμη!'' '",
+       "sitecsspreview": "<strong>Θυμηθείτε ότι είναι απλώς μια προεπισκόπηση αυτού του CSS.\nΔεν έχει αποθηκευτεί ακόμα!</strong>",
        "sitejspreview": "''' Θυμηθείτε ότι κάνετε μόνο προεπισκόπηση σ'αυτόν τον κώδικα JavaScript.'' '\n'' ' Δεν τον έχετε αποθηκεύσει ακόμη!'' '",
        "userinvalidcssjstitle": "'''Προσοχή:''' Δεν υπάρχει skin με τίτλο \"$1\". Θυμηθείτε οι προσαρμοσμένες σελίδες .css και .js χρησιμοποιούν έναν τίτλο με μικρά γράμματα, π.χ. {{ns:user}}:Foo/vector.css σε αντίθεση με το {{ns:user}}:Foo/Vector.css.",
        "updated": "(Ενημερώθηκε)",
        "upload-dialog-button-done": "Ολοκληρώθηκε",
        "upload-dialog-button-save": "Αποθήκευση",
        "upload-dialog-button-upload": "Ανέβασμα",
-       "upload-process-error": "Ένα σφάλμα συνέβη",
-       "upload-process-warning": "Προέκυψε μία προειδοποίηση",
        "upload-form-label-select-file": "Επιλογή αρχείου",
        "upload-form-label-infoform-title": "Λεπτομέρειες",
        "upload-form-label-infoform-name": "Όνομα",
        "mw-widgets-dateinput-placeholder-day": "ΕΕΕΕ-ΜΜ-ΗΗ",
        "mw-widgets-dateinput-placeholder-month": "ΕΕΕΕ-ΜΜ",
        "mw-widgets-titleinput-description-new-page": "η σελίδα που δεν υπάρχει ακόμα",
-       "mw-widgets-titleinput-description-redirect": "ανακατεύθυνση στο $1"
+       "mw-widgets-titleinput-description-redirect": "ανακατεύθυνση στο $1",
+       "api-error-blacklisted": "Παρακαλώ επιλέξτε ένα διαφορετικό, περιγραφικό τίτλο."
 }
index b284d09..8f4ef96 100644 (file)
        "prefs-help-recentchangescount": "This includes recent changes, page histories, and logs.",
        "prefs-help-watchlist-token2": "This is the secret key to the web feed of your watchlist.\nAnyone who knows it will be able to read your watchlist, so do not share it.\nIf you need to, [[Special:ResetTokens|you can reset it]].",
        "savedprefs": "Your preferences have been saved.",
+       "savedrights": "The user rights of {{GENDER:$1|$1}} have been saved.",
        "timezonelegend": "Time zone:",
        "localtime": "Local time:",
        "timezoneuseserverdefault": "Use wiki default ($1)",
        "upload-dialog-button-done": "Done",
        "upload-dialog-button-save": "Save",
        "upload-dialog-button-upload": "Upload",
-       "upload-process-error": "An error occurred",
-       "upload-process-warning": "A warning occurred",
        "upload-form-label-select-file": "Select file",
        "upload-form-label-infoform-title": "Details",
        "upload-form-label-infoform-name": "Name",
        "mw-widgets-dateinput-placeholder-day": "YYYY-MM-DD",
        "mw-widgets-dateinput-placeholder-month": "YYYY-MM",
        "mw-widgets-titleinput-description-new-page": "page does not exist yet",
-       "mw-widgets-titleinput-description-redirect": "redirect to $1"
+       "mw-widgets-titleinput-description-redirect": "redirect to $1",
+       "api-error-blacklisted": "Please choose a different, descriptive title."
 }
index 11bfb3d..d9362f9 100644 (file)
        "special-characters-title-emdash": "longa streketo",
        "special-characters-title-minus": "minus-signo",
        "mw-widgets-dateinput-placeholder-day": "JJJJ-MM-TT",
-       "mw-widgets-dateinput-placeholder-month": "JJJJ-MM"
+       "mw-widgets-dateinput-placeholder-month": "JJJJ-MM",
+       "api-error-blacklisted": "Bonvolu elekti alian, priskriban titolon."
 }
index 0cc5e82..e5343a6 100644 (file)
        "prefs-help-recentchangescount": "Esto incluye cambios recientes, historiales de páginas y registros.",
        "prefs-help-watchlist-token2": "Esta es la clave secreta del canal de suscripción de tu lista de seguimiento.\nCualquier persona que la conozca podría leer tu lista, así que no la compartas.\n[[Special:ResetTokens|Pulsa aquí si necesitas restablecerla]].",
        "savedprefs": "Se han guardado tus preferencias.",
+       "savedrights": "Se han guardado los permisos de {{GENDER:$1|$1}}.",
        "timezonelegend": "Huso horario:",
        "localtime": "Hora local:",
        "timezoneuseserverdefault": "Usar la hora del servidor ($1)",
        "upload-dialog-button-done": "Hecho",
        "upload-dialog-button-save": "Guardar",
        "upload-dialog-button-upload": "Subir",
-       "upload-process-error": "Ha ocurrido un error",
-       "upload-process-warning": "Ha ocurrido una advertencia",
        "upload-form-label-select-file": "Seleccionar archivo",
        "upload-form-label-infoform-title": "Detalles",
        "upload-form-label-infoform-name": "Nombre",
        "mw-widgets-dateinput-placeholder-day": "AAAA-MM-DD",
        "mw-widgets-dateinput-placeholder-month": "AAAA-MM",
        "mw-widgets-titleinput-description-new-page": "la página aún no existe",
-       "mw-widgets-titleinput-description-redirect": "redirigir a $1"
+       "mw-widgets-titleinput-description-redirect": "redirigir a $1",
+       "api-error-blacklisted": "Elige un título diferente, más descriptivo."
 }
index c74ef89..1f2a107 100644 (file)
        "viewsource": "Vaata lähteteksti",
        "viewsource-title": "Lehekülje $1 lähteteksti vaatamine",
        "actionthrottled": "Toiming nurjus",
-       "actionthrottledtext": "Rämpsmuudatuste vastase meetmena pole sul lühikse aja jooksul seda toimingut liiga palju kordi lubatud sooritada. Sa oled lühikse aja jooskul seda toimingut liiga palju kordi sooritanud.\nPalun proovi mõne minuti pärast uuesti.",
+       "actionthrottledtext": "Väärtarvituse vastase meetmena pole sul lühikse aja jooksul seda toimingut liiga palju kordi lubatud sooritada. Sa oled lühikse aja jooskul seda toimingut liiga palju kordi sooritanud.\nPalun proovi mõne minuti pärast uuesti.",
        "protectedpagetext": "See lehekülg on lukustatud, et ei tehtaks muudatusi ega sooritataks muid toiminguid.",
        "viewsourcetext": "Saad vaadata ja kopeerida selle lehekülje lähteteksti.",
        "viewyourtext": "Saad vaadata ja kopeerida sellel leheküljel tehtud <strong>enda muudatuste</strong> lähteteksti.",
        "passwordreset-emailtext-ip": "Keegi, arvatavasti sina ise, IP-aadressilt $1 palus lähtestada sinu {{GRAMMAR:genitive|{{SITENAME}}}} ($4) parooli. Selle e-posti aadressiga on seotud {{PLURAL:$3|järgmine konto|järgmised kontod}}:\n\n$2\n\n{{PLURAL:$3|See ajutine parool aegub|Need ajutised paroolid aeguvad}} {{PLURAL:$5|ühe|$5}} päeva pärast.\nPeaksid nüüd sisse logima ja uue parooli valima. Kui selle palve esitas keegi teine või kui sulle meenus su parool ja sa ei soovi seda enam muuta, võid teadet eirata ja jätkata vana parooli kasutamist.",
        "passwordreset-emailtext-user": "{{GRAMMAR:genitive|{{SITENAME}}}} kasutaja $1 palus lähtestada sinu {{GRAMMAR:genitive|{{SITENAME}}}} ($4) parooli. Selle e-posti aadressiga on seotud {{PLURAL:$3|järgmine konto|järgmised kontod}}:\n\n$2\n\n{{PLURAL:$3|See ajutine parool aegub|Need ajutised paroolid aeguvad}} {{PLURAL:$5|ühe|$5}} päeva pärast.\nPeaksid nüüd sisse logima ja uue parooli valima. Kui selle palve esitas keegi teine või kui sulle meenus su parool ja sa ei soovi seda enam muuta, võid teadet eirata ja jätkata vana parooli kasutamist.",
        "passwordreset-emailelement": "Kasutajanimi: \n$1\n\nAjutine parool: \n$2",
-       "passwordreset-emailsent": "Parooli lähtestamise e-kiri on saadetud.",
+       "passwordreset-emailsent": "Kui oled sidunud konto selle e-posti aadressiga, siis saadetakse sulle parooli lähtestamise e-kiri.",
        "passwordreset-emailsent-capture": "E-kirjatsi on saadetud allpool näidatav parooli lähtestuskiri.",
        "passwordreset-emailerror-capture": "Koostati allpool näidatav parooli lähtestuskiri, aga selle e-kirjatsi {{GENDER:$2|kasutajale}} saatmine ebaõnnestus: $1",
-       "changeemail": "E-posti aadressi muutmine",
-       "changeemail-text": "Täida see vorm, et muuta oma e-posti aadress. Et seda muudatust kinnitada, pead sisestama oma parooli.",
+       "changeemail": "E-posti aadressi muutmine või eemaldamine",
+       "changeemail-header": "Täida see vorm, et muuta oma e-posti aadress. Kui soovid, et konto poleks enam seotud ühegi e-posti aadressiga, siis jäta vormi esitamisel e-posti aadressi väli tühjaks.",
+       "changeemail-passwordrequired": "Et muudatus kinnitada, pead sisestama oma parooli.",
        "changeemail-no-info": "Otselingi kaudu sellele lehele jõudmiseks pead olema sisse loginud.",
        "changeemail-oldemail": "Praegune e-posti aadress:",
        "changeemail-newemail": "Uus e-posti aadress:",
+       "changeemail-newemail-help": "See väli tuleks jätta tühjaks juhul, kui tahad oma e-posti aadressi eemaldada. Kui eemaldad e-posti aadressi, ei sa siin vikis unustatud parooli lähtestada ja sulle ei saa e-kirju saata.",
        "changeemail-none": "(puudub)",
        "changeemail-password": "Sinu parool {{GRAMMAR:inessive|{{SITENAME}}}}:",
        "changeemail-submit": "Muuda e-posti aadress",
        "sig_tip": "Sinu allkiri ajatempliga",
        "hr_tip": "Rõhtkriips (kasuta liialdamata)",
        "summary": "Resümee:",
-       "subject": "Pealkiri:",
+       "subject": "Teema:",
        "minoredit": "See on pisiparandus",
        "watchthis": "Jälgi seda lehekülge",
        "savearticle": "Salvesta",
        "missingsummary": "'''Meeldetuletus:''' Sa ei ole lisanud muudatuse resümeed.\nKui vajutad uuesti salvestamise nupule, salvestatakse muudatus ilma resümeeta.",
        "selfredirect": "<strong>Hoiatus:</strong> Suunad selle lehekülje iseeneda juurde.\nVõimalik, et oled määranud ümbersuunamise jaoks vale sihtleheküljeks või redigeerid vale lehekülge.\nÜmbersuunamine luuakse sellest hoolimata, kui klõpsad uuesti \"{{int:savearticle}}\".",
        "missingcommenttext": "Palun sisesta siit allapoole kommentaar.",
-       "missingcommentheader": "'''Meeldetuletus:''' Sa pole kirjutanud kommentaarile teemat ega pealkirja.\nKui klõpsad uuesti \"{{int:savearticle}}\", salvestatakse su kommentaar kummatagi.",
+       "missingcommentheader": "<strong>Meeldetuletus:</strong> Sa pole kirjutanud kommentaarile teemat.\nKui klõpsad uuesti \"{{int:savearticle}}\", salvestatakse su kommentaar ilma teemata.",
        "summary-preview": "Resümee eelvaade:",
        "subject-preview": "Alaosa pealkirja eelvaade:",
        "previewerrortext": "Sinu muudatuste eelvaatluse juures esines tõrge.",
        "prefs-watchlist-token": "Jälgimisloendi luba:",
        "prefs-misc": "Muu",
        "prefs-resetpass": "Muuda parool",
-       "prefs-changeemail": "Muuda e-posti aadressi",
+       "prefs-changeemail": "Muuda e-posti aadressi või eemalda see",
        "prefs-setemail": "Määra e-posti aadress",
        "prefs-email": "E-posti sätted",
        "prefs-rendering": "Ilme",
        "recentchanges-page-added-to-category-bundled": "kategooriasse lisatud \"[[:$1]]\" ja veel {{PLURAL:$2|üks lehekülg|$2 lehekülge}}",
        "recentchanges-page-removed-from-category": "kategooriast eemaldatud \"[[:$1]]\"",
        "recentchanges-page-removed-from-category-bundled": "kategooriast eemaldatud \"[[:$1]]\" ja veel {{PLURAL:$2|üks lehekülg|$2 lehekülge}}",
+       "autochange-username": "MediaWiki automaatne muudatus",
        "upload": "Faili üleslaadimine",
        "uploadbtn": "Laadi fail üles",
        "reuploaddesc": "Tagasi üleslaadimise vormi juurde.",
        "upload-options": "Üleslaadimise sätted",
        "watchthisupload": "Jälgi seda faili",
        "filewasdeleted": "Selle nimega fail on lisatud ja kustutatud hiljuti.\nKontrolli $1 enne jätkamist.",
+       "filename-thumb-name": "Tundub, et tegu on pisipildi pealkirjaga. Palun ära laadi pisipilti samas vikis uuesti üles. Või siis paranda palun failinimi, nii et see oleks sisukam ja ei sisaldaks pisipildi eesliidet.",
        "filename-bad-prefix": "Üleslaaditava faili nimi algab eesliitega '''\"$1\"''', mis on omane digikaamera antud ebamäärastele nimedele.\nPalun vali oma failile kirjeldavam nimi.",
        "filename-prefix-blacklist": " #<!-- jäta see rida muutmata --> <pre>\n# Süntaks on järgmine:\n#   * Kõik alates märgist \"#\" kuni rea lõpuni on kommentaar.\n#   * Iga mittetühi rida on tüüpiline eesliide, mille digikaamerad automaatselt failinimele lisavad.\nCIMG # Casio\nDSC_ # Nikon\nDSCF # Fuji\nDSCN # Nikon\nDUW # mõned mobiiltelefonid\nIMG # üldine\nJD # Jenoptik\nMGP # Pentax\nPICT # erinevad\n #</pre> <!-- jäta see rida muutmata -->",
        "upload-success-subj": "Üleslaadimine õnnestus",
        "upload-dialog-button-done": "Valmis",
        "upload-dialog-button-save": "Salvesta",
        "upload-dialog-button-upload": "Laadi üles",
-       "upload-process-error": "Esines tõrge",
-       "upload-process-warning": "Esines hoiatus",
        "upload-form-label-select-file": "Vali fail",
        "upload-form-label-infoform-title": "Üksikasjad",
        "upload-form-label-infoform-name": "Pealkiri",
        "upload-form-label-infoform-description": "Kirjeldus",
        "upload-form-label-usage-title": "Kasutus",
        "upload-form-label-usage-filename": "Failinimi",
+       "foreign-structured-upload-form-label-own-work": "See on minu enda töö",
+       "foreign-structured-upload-form-label-infoform-categories": "Kategooriad",
+       "foreign-structured-upload-form-label-infoform-date": "Kuupäev",
+       "foreign-structured-upload-form-label-own-work-message-local": "Kinnitan, et seda faili üles laadides järgin saidi {{SITENAME}} kasutustingimusi ja litsentsipõhimõtteid.",
+       "foreign-structured-upload-form-label-not-own-work-message-local": "Kui sul pole võimalik laadida seda faili üles kooskõlas saidi {{SITENAME}} reeglitega, siis palun sule see dialoog ja proovi teisiti toimida.",
+       "foreign-structured-upload-form-label-not-own-work-local-local": "Võimalik, et soovid kasutada [[Special:Upload|harilikku üleslaadimislehekülge]].",
+       "foreign-structured-upload-form-label-own-work-message-default": "Saan aru, et laadin selle faili jagatud varamusse. Kinnitan, et teen seda kooskõlas sealsete kasutustingimuste ja litsentsipõhimõtetega.",
+       "foreign-structured-upload-form-label-not-own-work-message-default": "Kui sul pole võimalik laadida seda faili üles kooskõlas jagatud varamu reeglitega, siis palun sule see dialoog ja proovi teisiti toimida.",
+       "foreign-structured-upload-form-label-not-own-work-local-default": "Võimalik, et soovid [[Special:Upload|laadida selle faili üles saidil {{SITENAME}}]], kui seda on võimalik teha kooskõlas sealsete reeglitega.",
+       "foreign-structured-upload-form-label-own-work-message-shared": "Kinnitan, et olen selle faili autoriõiguse valdaja ja nõustun faili avaldamisega Wikimedia Commonsis pöördumatult Creative Commonsi litsentsi \"[https://creativecommons.org/licenses/by-sa/4.0/deed.et Autorile viitamine + jagamine samadel tingimustel 4.0]\" all. Samuti nõustun [https://wikimediafoundation.org/wiki/Terms_of_Use kasutustingimustega].",
+       "foreign-structured-upload-form-label-not-own-work-message-shared": "Kui sa pole selle faili autoriõiguse valdaja või kui soovid avaldada seda teise litsentsi all, siis on sul võimalik kasutada [https://commons.wikimedia.org/wiki/Special:UploadWizard Commonsi üleslaadimisviisardit].",
+       "foreign-structured-upload-form-label-not-own-work-local-shared": "Võimalik, et soovid kasutada [[Special:Upload|saidi {{SITENAME}} üleslaadimislehekülge]], kui seda faili on lubatud üles laadida kooskõlas sealsete reeglitega.",
        "backend-fail-stream": "Faili $1 ei saanud edastada.",
        "backend-fail-backup": "Faili $1 ei saanud varundada.",
        "backend-fail-notexists": "Faili $1 pole olemas.",
        "move-page-legend": "Lehekülje teisaldamine",
        "movepagetext": "Allolevat vormi kasutades saad lehekülje ümber nimetada. Lehekülje ajalugu tõstetakse uue pealkirja alla automaatselt.\nPraeguse pealkirjaga leheküljest saab ümbersuunamislehekülg uuele leheküljele.\nSaad senisele pealkirjale viitavad ümbersuunamised automaatselt parandada.\nKui sa seda ei tee, kontrolli, et teisaldamise tõttu ei jää maha [[Special:DoubleRedirects|kahekordseid]] ega [[Special:BrokenRedirects|katkiseid ümbersuunamisi]].\nSinu kohus on hoolitseda selle eest, et kõik jääks toimima, nagu ette nähtud.\n\nPane tähele, et lehekülge '''ei teisaldata''' juhul, kui uue pealkirjaga lehekülg on juba olemas. Erandiks on juhud, kui viimane on redigeerimisajaloota ümbersuunamislehekülg.\nSee tähendab, et kogemata ei saa üle kirjutada juba olemasolevat lehekülge, kuid saab ebaõnnestunud ümbernimetamise tagasi pöörata.\n\n'''Hoiatus!'''\nTegu võib olla väga loetava lehekülje jaoks tõsise ja ootamatu muudatusega;\nenne jätkamist teadvusta palun tagajärgi.",
        "movepagetext-noredirectfixer": "Allolevat vormi kasutades saad lehekülje ümber nimetada. Lehekülje ajalugu tõstetakse uue pealkirja alla automaatselt.\nPraeguse pealkirjaga leheküljest saab ümbersuunamislehekülg uuele leheküljele.\nKontrolli, et teisaldamise tõttu ei jää maha [[Special:DoubleRedirects|kahekordseid]] ega [[Special:BrokenRedirects|katkiseid ümbersuunamisi]].\nSinu kohus on hoolitseda selle eest, et kõik jääks toimima, nagu ette nähtud.\n\nPane tähele, et lehekülge '''ei teisaldata''' juhul, kui uue pealkirjaga lehekülg on juba olemas. Erandiks on juhud, kui olemasolev lehekülg on tühi või redigeerimisajaloota ümbersuunamislehekülg.\nSee tähendab, et kogemata ei saa üle kirjutada juba olemasolevat lehekülge, kuid saab ebaõnnestunud ümbernimetamise tagasi pöörata.\n\n'''Hoiatus!'''\nTegu võib olla väga loetava lehekülje jaoks tõsise ja ootamatu muudatusega;\nenne jätkamist teadvusta palun tagajärgi.",
-       "movepagetalktext": "Koos artiklileheküljega teisaldatakse automaatselt ka arutelulehekülg, '''välja arvatud juhtudel, kui:'''\n*uue pealkirja all on juba arutelulehekülg, mis pole tühi;\n*jätad alloleva märkeruudu valimata.\n\nNeil juhtudel saad lehekülje soovi korral käsitsi teisaldada või liita.",
+       "movepagetalktext": "Kui märgid selle ruudu, teisaldatakse arutelulehekülg automaatselt uue pealkirja alla. Seda välja arvatud juhul, kui uue pealkirja all on juba arutelulehekülg, mis pole tühi.\n\nSel juhul saad lehekülje soovi korral käsitsi teisaldada või liita.",
        "moveuserpage-warning": "'''Hoiatus:''' Oled teisaldamas kasutajalehekülge. Pane tähele, et teisaldatakse ainult lehekülg ja kasutajat '''ei''' nimetata ümber.",
        "movecategorypage-warning": "<strong>Hoiatus:</strong> Oled teisaldamas kategoorialehekülge. Pane palun tähele, et teisaldatakse vaid see lehekülg ja ühtegi vanas kategoorias sisalduvat lehekülge <em>ei</em> kategoriseerita ümber uude kategooriasse.",
        "movenologintext": "Lehekülje teisaldamiseks pead registreeruma ja [[Special:UserLogin|sisse logima]].",
        "cant-move-to-user-page": "Sul ei ole õigust teisaldada lehekülge kasutajaleheks (ei käi kasutaja alamlehe kohta).",
        "cant-move-category-page": "Sul pole õigust kategoorialehekülgi teisaldada.",
        "cant-move-to-category-page": "Sul pole õigust teisaldada lehekülge kategoorialeheküljele.",
-       "newtitle": "Uue pealkirja alla:",
+       "newtitle": "Uus pealkiri:",
        "move-watch": "Jälgi lähte- ja sihtlehekülge",
        "movepagebtn": "Teisalda lehekülg",
        "pagemovedsub": "Lehekülg on teisaldatud",
        "svg-long-error": "Vigane SVG-fail: $1",
        "show-big-image": "Algfail",
        "show-big-image-preview": "Selle eelvaate suurus: $1.",
+       "show-big-image-preview-differ": "Selle $2-faili $3-vormingus eelvaate suurus: $1.",
        "show-big-image-other": "{{PLURAL:$2|Teine eraldusvõime|Teised eraldusvõimed}}: $1.",
        "show-big-image-size": "$1 × $2 pikslit",
        "file-info-gif-looped": "korduv",
        "mw-widgets-dateinput-placeholder-day": "AAAA-KK-PP",
        "mw-widgets-dateinput-placeholder-month": "AAAA-KK",
        "mw-widgets-titleinput-description-new-page": "lehekülge pole veel",
-       "mw-widgets-titleinput-description-redirect": "ümbersuunamine leheküljele \"$1\""
+       "mw-widgets-titleinput-description-redirect": "ümbersuunamine leheküljele \"$1\"",
+       "api-error-blacklisted": "Palun vali muu pealkiri, mis on kirjeldav."
 }
index fff3e79..630bea2 100644 (file)
        "actionthrottled": "Ekintzaren gainetik pasa da",
        "actionthrottledtext": "Spamaren aurkako neurri gisa ekintza hau denbora tarte laburrean aldi askotan egiteko mugapena duzu, eta muga hori zeharkatu duzu.\nSaia zaitez berriro minutu batzuen buruan, mesedez.",
        "protectedpagetext": "Orri hau babestu da, edizioak edo beste ekintza batzuk egin ez daitezen.",
-       "viewsourcetext": "Orri honen iturburu-testua ikusi eta kopiatu dezakezu:",
-       "viewyourtext": "Ondorengo orri honetan '''zeuk egin dituzun aldaketen''' iturburu kodea ikus eta kopia dezakezu:",
+       "viewsourcetext": "Orri honen iturburu-testua ikusi eta kopiatu dezakezu.",
+       "viewyourtext": "Ondorengo orri honetan <strong>zeuk egin dituzun aldaketen</strong> iturburu kodea ikus eta kopia dezakezu:",
        "protectedinterface": "Orrialde honek softwarearentzako interfaze testua gordetzen du eta blokeatuta dago bandalismoak saihesteko.\nWiki guztientzako aldaketak egin edo gehitzeko, mesedez erabili [//translatewiki.net/ translatewiki.net], MediaWikiren lokalizazio proiektua.",
-       "editinginterface": "'''Oharra:''' Softwarearen interfazerako testua duen orri bat aldatzen ari zara.\nOrri honetako aldaketek wiki honetako erabiltzaile guztiei eragingo diete.\nItzulpenetarako, erabil ezazu [//translatewiki.net/ translatewiki.net], MediaWiki proiektuan.",
+       "editinginterface": "<strong> Oharra:</strong> Softwarearen interfazerako testua duen orri bat aldatzen ari zara.\nOrri honetako aldaketek wiki honetako erabiltzaile guztiei eragingo diete.",
+       "translateinterface": "Itzulpenetarako, erabil ezazu [//translatewiki.net/ translatewiki.net], MediaWiki proiektuan.",
        "cascadeprotected": "Orri hau aldaketen aurka babestua dago, sartuta dagoelako «kaskadako babesa» aukerarekin babestu {{PLURAL:$1|duten orri honetan|dituzten orri hauetan}}:\n$2",
        "namespaceprotected": "Ez daukazu '''$1''' izen-tarteko orrialdeak aldatzeko baimenik.",
        "customcssprotected": "Ez duzu baimenik CSS orrialde hau aldatzeko beste erabiltzaile baten hobespen pertsonalak dituelako.",
        "invalidtitle-knownnamespace": "Izenburua gaizki dago \"$2\" izen eremuan eta \"$3\" testuan",
        "invalidtitle-unknownnamespace": "Izenburua gaizki dago \"$1\" izen eremuan ezezagunean eta \"$2\" testuan",
        "exception-nologin": "Saioa hasi gabe",
-       "exception-nologin-text": "Orri honetan sartzeko edo ekintza hau egiteko, [[Special:Userlogin|saioa hasi]] behar duzu.",
+       "exception-nologin-text": "Orri honetan sartzeko edo ekintza hau egiteko, saioa hasi behar duzu.",
        "exception-nologin-text-manual": "Mesedez $1 orrialde honetan sartu edo ekintza hau egiteko.",
        "virus-badscanner": "Ezarpen txarrak: antibirus ezezaguna: ''$1''",
        "virus-scanfailed": "eskaneatze txarra ($1 kodea)",
        "passwordreset-emailelement": "Erabiltzaile izena: \n$1\n\nBehin-behineko pasahitza: \n$2",
        "passwordreset-emailsent": "Pasahitza berrezartzeko e-posta bidali da.",
        "passwordreset-emailsent-capture": "Pasahitza berrezartzeko e-posta bat bidali dizugu, behean erakusten dena.",
-       "changeemail": "Aldatu e-mail helbidea",
+       "changeemail": "Aldatu edo kendu e-mail helbidea",
        "changeemail-header": "Aldatu kontuko e-posta helbidea",
        "changeemail-no-info": "Orrialde honetara zuzenean sartzeko izena eman behar duzu.",
        "changeemail-oldemail": "Egungo e-mail helbidea:",
        "missingcommenttext": "Mesedez, iruzkin bat idatzi jarraian.",
        "missingcommentheader": "'''Oharra:''' Ez duzu iruzkin honetarako gairik edo goiburukorik ezarri. «{{int:Savearticle}}» klikatzen baduzu, hutsune horrekin gordeko da.",
        "summary-preview": "Laburpenaren aurreikuspena:",
-       "subject-preview": "Gaia/Izenburuaren aurreikuspena:",
+       "subject-preview": "Gaiaren aurrebista:",
        "blockedtitle": "Erabiltzailea blokeatuta dago",
        "blockedtext": "'''Zure erabiltzaile izena edo IP helbidea blokeaturik dago.'''\n\n$1 administratzaileak ezarri du blokeoa.\nEmandako arrazoia hau da: ''$2''.\n\n* Blokeoaren hasiera: $8\n* Blokeoaren bukaera: $6\n* Blokeatua: $7\n\nBlokeoari buruz eztabaidatzeko, jo ezazu $1 administratzailearengana edo beste [[{{MediaWiki:Grouppage-sysop}}|administratzaile]] batengana.\n«Bidali mezu elektronikoa lankide honi» tresna erabili ahal izateko, ezinbestekoa da zure [[Special:Preferences|hobespenetan]] baliozkoa den helbide elektroniko bat emanda izatea, eta tresna hori erabiltzeko aukera zuri blokeatu ez izana.\nOrain duzun IP helbidea $3 da, eta blokeoaren zenbakia #$5 da.\nEman itzazu datu hauek guztiak, blokeoari buruzko edozein eskaera egitean.",
        "autoblockedtext": "Zure IP helbidea automatikoki blokeaturik dago, $1 administratzaileak blokeatutako beste wikilari batek erabili zuelako. Emandako arrazoia hau da:\n\n:''$2''\n\n* Blokeoaren hasiera: $8\n* Blokeoaren bukaera: $6\n* Blokeatua: $7\n\nBlokeoari buruz eztabaidatzeko, jo ezazu $1 administratzailearengana edo beste [[{{MediaWiki:Grouppage-sysop}}|administratzaile]] batengana.\n\n«Bidali mezu elektronikoa lankide honi» tresna erabili ahal izateko, ezinbestekoa da zure [[Special:Preferences|hobespenetan]] baliozkoa den helbide elektroniko bat emanda izatea, eta tresna hori erabiltzeko aukera zuri blokeatu ez izana.\n\nOrain duzun IP helbidea $3 da, eta blokeoaren zenbakia #$5 da.\n\nEman itzazu datu hauek guztiak, blokeoari buruzko edozein eskaera egitean.",
        "prefs-watchlist-token": "Jarraipen zerrendaren tokena:",
        "prefs-misc": "Denetarik",
        "prefs-resetpass": "Pasahitza aldatu",
-       "prefs-changeemail": "Aldatu e-mail helbidea",
+       "prefs-changeemail": "Aldatu edo kendu e-mail helbidea",
        "prefs-setemail": "E-mail helbide bat ezarri",
        "prefs-email": "E-posta aukerak",
        "prefs-rendering": "Itxura",
        "upload-dialog-button-done": "Egina",
        "upload-dialog-button-save": "Gorde",
        "upload-dialog-button-upload": "Igo",
-       "upload-process-error": "Errore bat gertatu da",
        "upload-form-label-select-file": "Fitxategia Aukeratu",
        "upload-form-label-infoform-title": "Xehetasunak",
        "upload-form-label-infoform-name": "Izena",
index 9949d16..f3701af 100644 (file)
        "upload-dialog-button-done": "انجام شد",
        "upload-dialog-button-save": "ذخیره",
        "upload-dialog-button-upload": "بارگذاری",
-       "upload-process-error": "يک خطا اتفاق افتاد",
-       "upload-process-warning": "یک هشدار رخ‌داد",
        "upload-form-label-select-file": "یک فایل انتخاب کنید",
        "upload-form-label-infoform-title": "جزئیات",
        "upload-form-label-infoform-name": "نام",
        "special-characters-title-minus": "علامت منفی",
        "mw-widgets-dateinput-no-date": "هیچ داده‌ای انتخاب نشده",
        "mw-widgets-titleinput-description-new-page": "این صفحه هنوز وجود ندارد",
-       "mw-widgets-titleinput-description-redirect": "تغییر مسیر به $1"
+       "mw-widgets-titleinput-description-redirect": "تغییر مسیر به $1",
+       "api-error-blacklisted": "لطفاً یک عنوان توصیفی متفاوت انتخاب کنید."
 }
index faee6da..c0233f2 100644 (file)
        "upload-dialog-button-done": "Valmis",
        "upload-dialog-button-save": "Tallenna",
        "upload-dialog-button-upload": "Tallenna",
-       "upload-process-error": "Tapahtui virhe",
-       "upload-process-warning": "Sisältää varoituksen",
        "upload-form-label-select-file": "Valitse tiedosto",
        "upload-form-label-infoform-title": "Yksityiskohdat",
        "upload-form-label-infoform-name": "Nimi",
        "mw-widgets-dateinput-placeholder-day": "VVVV-KK-PP",
        "mw-widgets-dateinput-placeholder-month": "VVVV-KK",
        "mw-widgets-titleinput-description-new-page": "sivua ei ole olemassa vielä",
-       "mw-widgets-titleinput-description-redirect": "ohjaus kohteeseen $1"
+       "mw-widgets-titleinput-description-redirect": "ohjaus kohteeseen $1",
+       "api-error-blacklisted": "Valitse toinen, kuvaava nimi."
 }
index 52b959b..ce67f3e 100644 (file)
        "expand_templates_preview": "Forskoðan",
        "mw-widgets-dateinput-placeholder-day": "ÁÁÁÁ-MM-DD",
        "mw-widgets-dateinput-placeholder-month": "ÁÁÁÁ-MM",
-       "mw-widgets-titleinput-description-new-page": "síðan er ikki til enn"
+       "mw-widgets-titleinput-description-new-page": "síðan er ikki til enn",
+       "api-error-blacklisted": "Vinarliga vel ein annarleiðis tittul, sum lýsir fíluna betri."
 }
index 9731f4c..5fe2ea2 100644 (file)
        "passwordreset-emailsent-capture": "Un courriel de réinitialisation de mot de passe a été envoyé, qui est affiché ci-dessous.",
        "passwordreset-emailerror-capture": "Un courriel de réinitialisation de mot de passe a été généré, qui est affiché ci-dessous, mais l'envoi à l'{{GENDER:$2|utilisateur|utilisatrice}} a échoué : $1",
        "changeemail": "Changer ou supprimer l’adresse de courriel",
-       "changeemail-header": "Changer l’adresse de courriel du compte",
+       "changeemail-header": "Complétez ce formulaire pour modifier votre adresse de courriel. Si vous voulez supprimer l’association d’une adresse de courriel avec votre compte, laissez la nouvelle adresse de courriel vide lors de la soumission du formulaire.",
+       "changeemail-passwordrequired": "Vous devrez saisir votre mot de passe pour confirmer cette modification.",
        "changeemail-no-info": "Vous devez être connecté pour pouvoir accéder directement à cette page.",
        "changeemail-oldemail": "Adresse de courriel actuelle :",
        "changeemail-newemail": "Nouvelle adresse de courriel :",
        "sig_tip": "Votre signature avec la date",
        "hr_tip": "Ligne horizontale (ne pas en abuser)",
        "summary": "Résumé :",
-       "subject": "Sujet / titre :",
+       "subject": "Sujet :",
        "minoredit": "Modification mineure",
        "watchthis": "Suivre cette page",
        "savearticle": "Enregistrer",
        "missingsummary": "'''Rappel :''' vous n'avez pas encore fourni le résumé de votre modification.\nSi vous cliquez de nouveau sur le bouton « {{int:savearticle}} », la publication sera faite sans nouvel avertissement.",
        "selfredirect": "<strong>Attention :</strong> Vous êtes en train de rediriger la page vers elle-même.\nVous pouvez avoir spécifié la mauvaise cible pour la redirection, ou vous modifiez peut-être la mauvaise page.\nSi vous cliquez de nouveau sur « {{int:savearticle}} », la redirection sera créée tout de même.",
        "missingcommenttext": "Veuillez entrer un commentaire ci-dessous.",
-       "missingcommentheader": "'''Rappel :''' vous n'avez pas fourni de sujet ou de titre à ce commentaire.\nSi vous cliquez de nouveau sur « {{int:Savearticle}} », votre modification sera enregistrée sans titre.",
+       "missingcommentheader": "<strong>Rappel :</strong> Vous n’avez pas fourni de sujet pour ce commentaire.\nSi vous cliquez de nouveau sur « {{int:Savearticle}} », votre modification sera enregistrée sans sujet.",
        "summary-preview": "Aperçu du résumé :",
-       "subject-preview": "Prévisualisation du sujet/titre :",
+       "subject-preview": "Aperçu du sujet :",
        "previewerrortext": "Une erreur s’est produite lors de la tentative de prévisualisation de vos modifications.",
        "blockedtitle": "L’utilisateur est bloqué.",
        "blockedtext": "'''Votre compte utilisateur ou votre adresse IP a été bloqué.'''\n\nLe blocage a été effectué par $1.\nLa raison invoquée est la suivante : ''$2''.\n\n* Début du blocage : $8\n* Expiration du blocage : $6\n* Compte bloqué : $7.\n\nVous pouvez contacter $1 ou un autre [[{{MediaWiki:Grouppage-sysop}}|administrateur]] pour en discuter.\nVous ne pouvez utiliser la fonction « {{int:emailuser}} » que si une adresse de courriel valide est spécifiée dans vos [[Special:Preferences|préférences]] et que si cette fonctionnalité n’a pas été bloquée.\nVotre adresse IP actuelle est $3 et votre identifiant de blocage est $5.\nVeuillez préciser ces indications dans toutes les requêtes que vous ferez.",
        "prefs-help-recentchangescount": "Ceci inclut les modifications récentes, les pages d'historiques et les journaux.",
        "prefs-help-watchlist-token2": "Voici la clé secrète du flux Web de votre liste de suivi.\nToute personne la connaissant pourra lire votre liste de suivi, ne la communiquez donc pas.\n[[Special:ResetTokens|Cliquez ici si vous devez la réinitialiser]].",
        "savedprefs": "Les préférences ont été sauvegardées.",
+       "savedrights": "Les droits utilisateur de {{GENDER:$1|$1}} ont été enregistrés.",
        "timezonelegend": "Fuseau horaire :",
        "localtime": "Heure locale :",
        "timezoneuseserverdefault": "Utiliser la valeur par défaut du wiki ($1)",
        "upload-dialog-button-done": "Fait",
        "upload-dialog-button-save": "Enregistrer",
        "upload-dialog-button-upload": "Téléverser",
-       "upload-process-error": "Une erreur est survenue",
-       "upload-process-warning": "Un avertissement s’est produit",
        "upload-form-label-select-file": "Sélectionner un fichier",
        "upload-form-label-infoform-title": "Détails",
        "upload-form-label-infoform-name": "Nom",
        "svg-long-error": "Fichier SVG non valide: $1",
        "show-big-image": "Fichier d'origine",
        "show-big-image-preview": "Taille de cet aperçu : $1.",
+       "show-big-image-preview-differ": "Taille de cet aperçu $3 de ce fichier $2 : $1.",
        "show-big-image-other": "{{PLURAL:$2|Autre résolution|Autres résolutions}} : $1.",
        "show-big-image-size": "$1 × $2 pixels",
        "file-info-gif-looped": "en boucle",
        "mw-widgets-dateinput-placeholder-day": "AAAA-MM-JJ",
        "mw-widgets-dateinput-placeholder-month": "AAAA-MM",
        "mw-widgets-titleinput-description-new-page": "la page n’existe pas encore",
-       "mw-widgets-titleinput-description-redirect": "redirection vers $1"
+       "mw-widgets-titleinput-description-redirect": "redirection vers $1",
+       "api-error-blacklisted": "Merci de choisir un autre titre descriptif."
 }
index b101045..081306a 100644 (file)
        "special-characters-title-emdash": "terèt èm",
        "special-characters-title-minus": "segno muens",
        "mw-widgets-dateinput-placeholder-day": "AAAA-MM-JJ",
-       "mw-widgets-dateinput-placeholder-month": "AAAA-MM"
+       "mw-widgets-dateinput-placeholder-month": "AAAA-MM",
+       "api-error-blacklisted": "Volyéd chouèsir un ôtro titro dèscriptif."
 }
index de60d04..411ed1a 100644 (file)
        "passwordreset-emailsent-capture": "Enviouse un correo electrónico de restablecemento do contrasinal, mostrado a continuación.",
        "passwordreset-emailerror-capture": "Xerouse un correo electrónico de restablecemento do contrasinal, mostrado a continuación, pero o envío {{GENDER:$2|ao usuario|á usuaria}} fallou: $1",
        "changeemail": "Cambiar ou eliminar o enderezo de correo electrónico",
-       "changeemail-header": "Cambiar o enderezo de correo electrónico da conta",
+       "changeemail-header": "Encha este formulario para cambiar o seu enderezo de correo electrónico. Se vostede quere eliminar a asociación da dirección de correo electrónico da súa conta, deixe en branco a nova dirección de correo electrónico cando envíe o formulario.",
+       "changeemail-passwordrequired": "Terá que escribir o seu contrasinal para confirmar este cambio.",
        "changeemail-no-info": "Debe rexistrarse para acceder directamente a esta páxina.",
        "changeemail-oldemail": "Enderezo de correo electrónico actual:",
        "changeemail-newemail": "Novo enderezo de correo electrónico:",
        "sig_tip": "A súa sinatura con data e hora",
        "hr_tip": "Liña horizontal (úsea con moderación)",
        "summary": "Resumo:",
-       "subject": "Asunto/título:",
+       "subject": "Asunto:",
        "minoredit": "Esta é unha edición pequena",
        "watchthis": "Vixiar esta páxina",
        "savearticle": "Gardar a páxina",
        "missingsummary": "'''Aviso:''' Esqueceu incluír o texto do campo resumo.\nSe preme en \"{{int:savearticle}}\" a súa edición gardarase sen ningunha descrición da edición.",
        "selfredirect": "<strong>Atención:</strong> Está redirecionando esta páxina a ela mesma. Vostede pode ter especificado a páxina incorrecta para a redireción, ou pode que estea a editar a páxina incorrecta. Se preme \"{{int:savearticle}}\" de novo, crearase a redireción de tódolos xeitos.",
        "missingcommenttext": "Por favor, escriba un comentario a continuación.",
-       "missingcommentheader": "'''Aviso:''' Non escribiu ningún texto no asunto/título deste comentario.\nSe preme sobre \"{{int:savearticle}}\", a súa edición gardarase sen el.",
+       "missingcommentheader": "<strong>Aviso:</strong> Non escribiu ningún texto no asunto deste comentario.\nSe preme sobre \"{{int:savearticle}}\", a súa edición gardarase sen el.",
        "summary-preview": "Vista previa do resumo:",
-       "subject-preview": "Vista previa do asunto/título:",
+       "subject-preview": "Vista previa do asunto:",
        "previewerrortext": "Houbo un erro ó tentar previsualizar os cambios.",
        "blockedtitle": "O usuario está bloqueado",
        "blockedtext": "'''O seu nome de usuario ou enderezo IP foi bloqueado.'''\n\nO bloqueo foi realizado por $1.\nA razón que deu foi ''$2''.\n\n* Inicio do bloqueo: $8\n* Caducidade do bloqueo: $6\n* Pretendeuse bloquear: $7\n\nPode contactar con $1 ou con calquera outro [[{{MediaWiki:Grouppage-sysop}}|administrador]] para discutir este bloqueo.\nNon pode empregar a característica \"Enviar un correo electrónico a este usuario\" a non ser que dispoña dun enderezo electrónico válido rexistrado nas súas [[Special:Preferences|preferencias de usuario]] e que o seu uso non fose bloqueado.\nO seu enderezo IP actual é $3 e o ID do bloqueo é #$5.\nPor favor, inclúa eses datos nas consultas que faga.",
        "prefs-help-recentchangescount": "Isto inclúe os cambios recentes, os historiais e mais os rexistros.",
        "prefs-help-watchlist-token2": "Esta é a clave secreta da fonte de novas web para a súa lista de vixilancia.\nCalquera persoa que a saiba poderá ler a súa lista de vixilancia; non comparta esta clave.\n[[Special:ResetTokens|Prema aquí se necesita restablecela]].",
        "savedprefs": "Gardáronse as súas preferencias.",
+       "savedrights": "Gardáronse os permisos de {{GENDER:$1|$1}}.",
        "timezonelegend": "Fuso horario:",
        "localtime": "Hora local:",
        "timezoneuseserverdefault": "Usar a hora do servidor por defecto ($1)",
        "upload-dialog-button-done": "Feito",
        "upload-dialog-button-save": "Gardar",
        "upload-dialog-button-upload": "Subir",
-       "upload-process-error": "Houbo un erro",
-       "upload-process-warning": "Produciuse unha advertencia",
        "upload-form-label-select-file": "Seleccionar un ficheiro",
        "upload-form-label-infoform-title": "Detalles",
        "upload-form-label-infoform-name": "Nome",
        "foreign-structured-upload-form-label-own-work": "Isto é o meu propio traballo",
        "foreign-structured-upload-form-label-infoform-categories": "Categorías",
        "foreign-structured-upload-form-label-infoform-date": "Data",
+       "foreign-structured-upload-form-label-own-work-message-local": "Confirmo que estou a cargar este ficheiro seguindo os termos de uso e políticas de licenza de {{SITENAME}}.",
+       "foreign-structured-upload-form-label-not-own-work-local-local": "Quizais tamén queira probar [[Special:Upload|a páxina predeterminada de subidas]].",
+       "foreign-structured-upload-form-label-own-work-message-default": "Comprendo que estou a cargar este ficheiro nun repositorio compartido. Confirmo que fago isto seguindo os termos de uso e políticas de licenza existentes alí.",
        "backend-fail-stream": "Non se puido transmitir o ficheiro \"$1\".",
        "backend-fail-backup": "Non se puido facer unha copia de seguridade do ficheiro \"$1\".",
        "backend-fail-notexists": "O ficheiro \"$1\" non existe.",
        "svg-long-error": "Ficheiro SVG non válido: $1",
        "show-big-image": "Ficheiro orixinal",
        "show-big-image-preview": "Tamaño desta vista previa: $1.",
+       "show-big-image-preview-differ": "Tamaño desta revisión $3 do ficheiro $2: $1.",
        "show-big-image-other": "{{PLURAL:$2|Outra resolución|Outras resolucións}}: $1.",
        "show-big-image-size": "$1 × $2 píxeles",
        "file-info-gif-looped": "en bucle",
        "mw-widgets-dateinput-placeholder-day": "AAAA-MM-DD",
        "mw-widgets-dateinput-placeholder-month": "AAAA-MM",
        "mw-widgets-titleinput-description-new-page": "a páxina aínda non existe",
-       "mw-widgets-titleinput-description-redirect": "redirección cara a $1"
+       "mw-widgets-titleinput-description-redirect": "redirección cara a $1",
+       "api-error-blacklisted": "Escolla un título diferente e descritivo."
 }
index b38176e..b30c69e 100644 (file)
        "statistics-files": "Upload kel'le faili",
        "brokenredirects-edit": "bodol",
        "brokenredirects-delete": "Kadun udoi",
-       "nbytes": "$1 {{PLURAL:$1|byte|bytesi}}",
+       "nbytes": "$1 {{PLURAL:$1|byte|byti}}",
        "nmembers": "$1 {{PLURAL:$1|vangddi}}",
        "prefixindex": "Panam jenche nanvache survatek asa...",
        "shortpages": "Dhaktim panam",
index bc83861..bf5e352 100644 (file)
        "upload-dialog-button-done": "Fertig",
        "upload-dialog-button-save": "Spychere",
        "upload-dialog-button-upload": "Ufelade",
-       "upload-process-error": "Es het e Fähler ’gä",
-       "upload-process-warning": "Es het e Warnig ’gä",
        "upload-form-label-select-file": "Datei ussueche",
        "upload-form-label-infoform-title": "Details",
        "upload-form-label-infoform-name": "Name",
        "mw-widgets-dateinput-placeholder-day": "JJJJ-MM-TT",
        "mw-widgets-dateinput-placeholder-month": "JJJJ-MM",
        "mw-widgets-titleinput-description-new-page": "d Syte git’s no nid",
-       "mw-widgets-titleinput-description-redirect": "Wyterleitig uf $1"
+       "mw-widgets-titleinput-description-redirect": "Wyterleitig uf $1",
+       "api-error-blacklisted": "Bitte due en andre, ussagechräftigere Titel usswääle."
 }
index 1e463ae..773448b 100644 (file)
        "nstab-template": "ઢાંચો",
        "nstab-help": "મદદનું પાનું",
        "nstab-category": "શ્રેણી",
+       "mainpage-nstab": "મુખપૃષ્ઠ",
        "nosuchaction": "આવી કોઇ ક્રિયા નથી",
        "nosuchactiontext": "આ URL દ્વારા દર્શાવેલી ક્રિયા અયોગ્ય છે.\nતમે કદાચ ખોટો URL છાપ્યો હશે અથવા ખોટી કડીથી અહીં આવ્યા હશો.\nતમે સોફ્ટવેરની આ ખામી {{SITENAME}} પર દર્શાવી શકો છો.",
        "nosuchspecialpage": "એવું ખાસ પાનું નથી",
        "passwordreset-emailsent-capture": "પાસવર્ડ બદલવાનો ઇમેલ મોકલવામાં આવ્યો છે, જે નીચે પ્રમાણે છે.",
        "passwordreset-emailerror-capture": "પાસવર્ડ ફરી ગોઠવવા માટેનો ઇમેલ બનાવવામાં આવ્યો છે, જે નીચે પ્રમાણે છે, પરંતુ તે {{GENDER:$2|સભ્ય}}ને મોકલવામાં નિષ્ફળ થયો છે: $1",
        "changeemail": "ઇમેલ સરનામું બદલો",
-       "changeemail-text": "તમારું ઈ-મેઈલ સરનામું બદલવા માટે આ ફોર્મ ભરો. આ ફેરફાર કાયમ કરવા માટે તમારે પાસવર્ડ ભરવાની જરૂર પડશે.",
+       "changeemail-header": "તમારા ખાતાનું ઇમેલ સરનામું બદલો",
        "changeemail-no-info": "બારોબાર આ પાનું જોવા માટે પ્રવેશ કરવો આવશ્યક છે.",
        "changeemail-oldemail": "હાલનું ઈમેલ સરનામું:",
        "changeemail-newemail": "નવું ઈમેલ સરનામું:",
        "special-characters-group-thai": "થાઈ",
        "special-characters-group-lao": "લાઓ",
        "special-characters-group-khmer": "ખ્મેર",
-       "mw-widgets-titleinput-description-new-page": "પાનું અસ્તિત્વ ધરાવતું નથી."
+       "mw-widgets-titleinput-description-new-page": "પાનું અસ્તિત્વ ધરાવતું નથી.",
+       "api-error-blacklisted": "મહેરબાની કરી વધુ વિસ્તૃત અર્થ સભર શીર્ષક આપો."
 }
index 6e2247b..d231dee 100644 (file)
        "prefs-help-recentchangescount": "כולל דף השינויים האחרונים, דפי היסטוריית גרסאות ויומנים.",
        "prefs-help-watchlist-token2": "זהו המפתח הסודי של ההזנה של רשימת המעקב שלך.\nכל מי שיודע אותו יוכל לקרוא את רשימת המעקב שלך, לכן אין לשתף אותו.\n[[Special:ResetTokens|אם יש בכך צורך, אפשר לאפס אותו כאן]].",
        "savedprefs": "ההעדפות שלך נשמרו.",
+       "savedrights": "הרשאות {{GENDER:$1|המשתמש|המשתמשת}} של $1 נשמרו.",
        "timezonelegend": "אזור זמן:",
        "localtime": "זמן מקומי:",
        "timezoneuseserverdefault": "ברירת המחדל של האתר ($1)",
        "upload-dialog-button-done": "בוצע",
        "upload-dialog-button-save": "שמירה",
        "upload-dialog-button-upload": "העלאה",
-       "upload-process-error": "אירעה שגיאה",
-       "upload-process-warning": "אירעה אזהרה",
        "upload-form-label-select-file": "בחירת קובץ",
        "upload-form-label-infoform-title": "פרטים",
        "upload-form-label-infoform-name": "שם",
        "svg-long-desc-animated": "קובץ SVG מונפש, הגודל המקורי: <span dir=\"ltr\">$1 × $2</span> פיקסלים, גודל הקובץ: $3",
        "svg-long-error": "קובץ SVG לא תקין: $1",
        "show-big-image": "לקובץ המקורי",
-       "show-big-image-preview": "גודל תצוגה זו: $1.",
+       "show-big-image-preview": "גודל התצוגה המקדימה הזאת: $1.",
+       "show-big-image-preview-differ": "גודל התצוגה המקדימה הזאת מסוג $3 של קובץ ה־$2 הזה: $1.",
        "show-big-image-other": "{{PLURAL:$2|רזולוציה אחרת|רזולוציות אחרות}}: $1.",
        "show-big-image-size": "<span dir=\"ltr\">$1 × $2</span> פיקסלים",
        "file-info-gif-looped": "בלולאה",
        "special-characters-title-minus": "מינוס",
        "mw-widgets-dateinput-no-date": "לא נבחר תאריך",
        "mw-widgets-titleinput-description-new-page": "הדף עדיין לא קיים",
-       "mw-widgets-titleinput-description-redirect": "הפניה ל{{GRAMMAR:תחילית|$1}}"
+       "mw-widgets-titleinput-description-redirect": "הפניה ל{{GRAMMAR:תחילית|$1}}",
+       "api-error-blacklisted": "נא לבחור כותרת אחרת, המתארת טוב יותר את התוכן."
 }
index 2f376de..a00d316 100644 (file)
@@ -66,7 +66,8 @@
                        "राम प्रसाद जोशी",
                        "ShrUtiable",
                        "Matma Rex",
-                       "Angpradesh"
+                       "Angpradesh",
+                       "Sfic"
                ]
        },
        "tog-underline": "कड़ियाँ अधोरेखन:",
        "createacct-captcha": "सुरक्षा जाँच",
        "createacct-imgcaptcha-ph": "उपरोक्त पाठ लिखें",
        "createacct-submit": "अपना खाता बनाएँ",
-       "createacct-another-submit": "à¤\8fà¤\95 à¤\85नà¥\8dय à¤\96ाता à¤\96à¥\8bलà¥\87à¤\82",
+       "createacct-another-submit": "à¤\96ाता à¤¬à¤¨à¤¾à¤\8fà¤\81",
        "createacct-benefit-heading": "{{SITENAME}} आपके जैसे लोगों द्वारा बनायी गई है।",
        "createacct-benefit-body1": "{{PLURAL:$1|सम्पादन}}",
        "createacct-benefit-body2": "{{PLURAL:$1|पृष्ठ}}",
index 8c01de8..0c8cc3a 100644 (file)
        "special-characters-title-emdash": "dołha ležaca smužka",
        "special-characters-title-minus": "minusowe znamješko",
        "mw-widgets-dateinput-placeholder-day": "JJJJ-MM-TT",
-       "mw-widgets-dateinput-placeholder-month": "JJJJ-MM"
+       "mw-widgets-dateinput-placeholder-month": "JJJJ-MM",
+       "api-error-blacklisted": "Prošu wubjer druhi, wuprajiwy titul."
 }
index bde8353..082562c 100644 (file)
        "mw-widgets-dateinput-placeholder-day": "ÉÉÉÉ-HH-NN",
        "mw-widgets-dateinput-placeholder-month": "ÉÉÉÉ-HH",
        "mw-widgets-titleinput-description-new-page": "a lap még nem létezik",
-       "mw-widgets-titleinput-description-redirect": "átirányítás ide: $1"
+       "mw-widgets-titleinput-description-redirect": "átirányítás ide: $1",
+       "api-error-blacklisted": "Válasszon egy másik, leíró címet."
 }
index 7ac7837..45aab5d 100644 (file)
        "passwordreset-emailsent-capture": "Un message de e-mail pro le reinitialisation del contrasigno ha essite inviate; iste message es monstrate hic infra.",
        "passwordreset-emailerror-capture": "Un e-mail pro le reinitialisation del contrasigno ha essite generate; iste message es monstrate hic infra, ma le invio al {{GENDER:$2|usator}} ha fallite: $1",
        "changeemail": "Cambiar o remover adresse de e-mail",
-       "changeemail-header": "Cambiar le adresse de e-mail del conto",
+       "changeemail-header": "Completa iste formulario pro cambiar tu adresse de e-mail. Si tu vole remover le association de omne adresse de e-mail ab tu conto, lassa le campo pro le nove adresse de e-mail vacue quando tu submitte le formulario.",
+       "changeemail-passwordrequired": "Essera necessari entrar tu contrasigno pro confirmar iste cambiamento.",
        "changeemail-no-info": "Tu debe aperir un session pro poter acceder directemente a iste pagina.",
        "changeemail-oldemail": "Adresse de e-mail actual:",
        "changeemail-newemail": "Adresse de e-mail nove:",
        "sig_tip": "Tu signatura con data e hora",
        "hr_tip": "Linea horizontal (usa con moderation)",
        "summary": "Summario:",
-       "subject": "Subjecto/titulo:",
+       "subject": "Subjecto:",
        "minoredit": "Isto es un modification minor",
        "watchthis": "Observar iste pagina",
        "savearticle": "Publicar pagina",
        "missingsummary": "'''Rememoration:''' Tu non ha specificate un summario del modification.\nSi tu clicca super \"{{int:savearticle}}\" de novo, le modification essera publicate sin summario.",
        "selfredirect": "<strong>Attention:</strong> Tu redirige iste pagina verso se mesme.\nTu pote haber specificate le mal destination pro le redirection, o tu modifica forsan le mal pagina.\nSi tu clicca sur \"{{int:savearticle}}\" de novo, le redirection essera create in despecto de isto.",
        "missingcommenttext": "Per favor entra un commento infra.",
-       "missingcommentheader": "'''Rememoration:''' Tu non ha specificate un subjecto/titulo pro iste commento.\nSi tu clicca super \"{{int:savearticle}}\" de novo, le modification essera publicate sin titulo.",
+       "missingcommentheader": "<strong>Rememoration:</strong> Tu non ha fornite un subjecto pro iste commento.\nSi tu clicca super \"{{int:savearticle}}\" de novo, le modification essera publicate sin subjecto.",
        "summary-preview": "Previsualisation del summario:",
-       "subject-preview": "Previsualisation del subjecto/titulo:",
+       "subject-preview": "Previsualisation del subjecto:",
        "previewerrortext": "Un error ha occurrite durante le tentativa de previsualisar le cambiamentos.",
        "blockedtitle": "Le usator es blocate",
        "blockedtext": "'''Tu nomine de usator o adresse IP ha essite blocate.'''\n\nLe blocada esseva facite per $1.\nLe motivo presentate es ''$2''.\n\n* Initio del blocada: $8\n* Expiration del blocada: $6\n* Le blocato intendite: $7\n\nTu pote contactar $1 o un altere [[{{MediaWiki:Grouppage-sysop}}|administrator]] pro discuter le blocada.\nTu non pote usar le function 'inviar e-mail a iste usator' salvo que un adresse de e-mail valide es specificate in le\n[[Special:Preferences|preferentias de tu conto]] e que tu non ha essite blocate de usar lo.\nTu adresse IP actual es $3, e le ID del blocada es #$5.\nPer favor include tote le detalios supra specificate in omne correspondentia.",
        "upload-dialog-button-done": "Facite",
        "upload-dialog-button-save": "Salveguardar",
        "upload-dialog-button-upload": "Incargar",
-       "upload-process-error": "Un error ha occurrite",
-       "upload-process-warning": "Un advertimento se ha producite",
        "upload-form-label-select-file": "Seliger file",
        "upload-form-label-infoform-title": "Detalios",
        "upload-form-label-infoform-name": "Nomine",
        "svg-long-error": "File SVG invalide: $1",
        "show-big-image": "File original",
        "show-big-image-preview": " Dimension de iste previsualisation: $1.",
+       "show-big-image-preview-differ": "Dimension de iste previsualisation $3 de iste file $2: $1.",
        "show-big-image-other": "Altere {{PLURAL:$2|resolution|resolutiones}}: $1.",
        "show-big-image-size": "$1 × $2 pixels",
        "file-info-gif-looped": "repetente",
        "mw-widgets-dateinput-placeholder-day": "AAAA-MM-DD",
        "mw-widgets-dateinput-placeholder-month": "AAAA-MM",
        "mw-widgets-titleinput-description-new-page": "pagina non existe ancora",
-       "mw-widgets-titleinput-description-redirect": "redirection a $1"
+       "mw-widgets-titleinput-description-redirect": "redirection a $1",
+       "api-error-blacklisted": "Per favor elige un altere titulo, plus descriptive."
 }
index 6a97e39..e623de5 100644 (file)
        "special-characters-title-emdash": "em dash",
        "special-characters-title-minus": "tanda kurang",
        "mw-widgets-dateinput-placeholder-day": "TTTT-BB-HH",
-       "mw-widgets-dateinput-placeholder-month": "TTTT-BB"
+       "mw-widgets-dateinput-placeholder-month": "TTTT-BB",
+       "api-error-blacklisted": "Pilih judul lain yang deskriptif"
 }
index d6b73b5..68b8cd6 100644 (file)
        "upload-dialog-button-done": "Nalpasen",
        "upload-dialog-button-save": "Idulin",
        "upload-dialog-button-upload": "Agikarga",
-       "upload-process-error": "Adda napasamak a biddut",
-       "upload-process-warning": "Adda napasamak a ballaag",
        "upload-form-label-select-file": "Pilien ti papeles",
        "upload-form-label-infoform-title": "Dagiti salaysay",
        "upload-form-label-infoform-name": "Nagan",
        "mw-widgets-dateinput-placeholder-day": "TTTT-BB-AA",
        "mw-widgets-dateinput-placeholder-month": "TTTT-BB",
        "mw-widgets-titleinput-description-new-page": "awan pay ti panid",
-       "mw-widgets-titleinput-description-redirect": "ibaw-ing iti $1"
+       "mw-widgets-titleinput-description-redirect": "ibaw-ing iti $1",
+       "api-error-blacklisted": "Pangngaasi nga agpili iti sabali, a mangipalpalawag a titulo."
 }
index c850f8f..adfe655 100644 (file)
        "special-characters-group-thai": "Taílenskt",
        "special-characters-group-lao": "Laoskt",
        "mw-widgets-titleinput-description-new-page": "síðan er ekki enn til",
-       "mw-widgets-titleinput-description-redirect": "tilvísun á $1"
+       "mw-widgets-titleinput-description-redirect": "tilvísun á $1",
+       "api-error-blacklisted": "Vinsamlegast veldu annað lýsandi skráarnafn"
 }
index c2f8bf0..541534a 100644 (file)
        "prefs-help-recentchangescount": "Comprende ultime modifiche, cronologie e registri.",
        "prefs-help-watchlist-token2": "Questa è la chiave segreta per il feed web dei tuoi osservati speciali.\nChiunque la conosce sarà in grado di leggere i tuoi osservati speciali, per cui non condividerla. [[Special:ResetTokens|Clicca qui se hai bisogno di reimpostarla]].",
        "savedprefs": "Le preferenze sono state salvate.",
+       "savedrights": "I diritti utente di {{GENDER:$1|$1}} sono stati salvati.",
        "timezonelegend": "Fuso orario:",
        "localtime": "Ora locale:",
        "timezoneuseserverdefault": "Usa ora predefinita del wiki ($1)",
        "upload-dialog-button-done": "Fatto",
        "upload-dialog-button-save": "Salva",
        "upload-dialog-button-upload": "Carica",
-       "upload-process-error": "Si è verificato un errore",
-       "upload-process-warning": "Si è verificato un avviso",
        "upload-form-label-select-file": "Seleziona file",
        "upload-form-label-infoform-title": "Dettagli",
        "upload-form-label-infoform-name": "Nome",
        "pageinfo-category-pages": "Numero di pagine",
        "pageinfo-category-subcats": "Numero di sottocategorie",
        "pageinfo-category-files": "Numero di file",
-       "markaspatrolleddiff": "Segna la modifica come verificata",
+       "markaspatrolleddiff": "Segna come verificata",
        "markaspatrolledtext": "Segna questa pagina come verificata",
        "markedaspatrolled": "Modifica verificata",
        "markedaspatrolledtext": "La modifica di [[:$1]] selezionata è stata segnata come verificata.",
        "svg-long-error": "File SVG non valido: $1",
        "show-big-image": "File originale",
        "show-big-image-preview": "Dimensioni di questa anteprima: $1.",
+       "show-big-image-preview-differ": "Dimensioni di questa anteprima $3 per questo file $2: $1.",
        "show-big-image-other": "{{PLURAL:$2|Altra risoluzione|Altre risoluzioni}}: $1.",
        "show-big-image-size": "$1 × $2 pixel",
        "file-info-gif-looped": "ciclico",
        "mw-widgets-dateinput-placeholder-day": "AAAA-MM-GG",
        "mw-widgets-dateinput-placeholder-month": "AAAA-MM",
        "mw-widgets-titleinput-description-new-page": "questa pagina non esiste ancora",
-       "mw-widgets-titleinput-description-redirect": "reindirizzamento a $1"
+       "mw-widgets-titleinput-description-redirect": "reindirizzamento a $1",
+       "api-error-blacklisted": "Per favore scegli un titolo diverso e descrittivo."
 }
index 18419c0..9a45d29 100644 (file)
        "upload-dialog-button-done": "完了",
        "upload-dialog-button-save": "保存",
        "upload-dialog-button-upload": "アップロード",
-       "upload-process-error": "エラーが発生しました",
-       "upload-process-warning": "警告",
        "upload-form-label-select-file": "ファイル選択",
        "upload-form-label-infoform-title": "詳細",
        "upload-form-label-infoform-name": "名前",
        "exif-sharpness": "撮影シャープネス",
        "exif-devicesettingdescription": "撮影条件記述情報",
        "exif-subjectdistancerange": "被写体距離レンジ",
-       "exif-imageuniqueid": "画像ユニークID",
+       "exif-imageuniqueid": "ユニーク画像ID",
        "exif-gpsversionid": "GPSタグのバージョン",
        "exif-gpslatituderef": "北緯/南緯",
        "exif-gpslatitude": "緯度",
        "special-characters-title-minus": "マイナス記号",
        "mw-widgets-dateinput-no-date": "選択されたデータ無し",
        "mw-widgets-titleinput-description-new-page": "ページは存在しません",
-       "mw-widgets-titleinput-description-redirect": "$1 へのリダイレクト"
+       "mw-widgets-titleinput-description-redirect": "$1 へのリダイレクト",
+       "api-error-blacklisted": "他の、説明的なタイトルをお選びください。"
 }
index 19f82a1..9c082b8 100644 (file)
        "recentchanges-label-minor": "Iki suntingan sithik",
        "recentchanges-label-bot": "Suntingan iki diayahi déning bot",
        "recentchanges-label-unpatrolled": "Suntingan iki durung dipatroli",
-       "recentchanges-label-plusminus": "Gedhene kaca wis diowahi segede niki.",
+       "recentchanges-label-plusminus": "Agengipun kaca sampun dipunowahi samekaten.",
        "recentchanges-legend-heading": "'''Katrangan:'''",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (dhelengen uga: [[Special:NewPages|daftar kaca anyar]])",
        "recentchanges-legend-plusminus": "(''±123'')",
        "special-characters-group-devanagari": "Dewanagari",
        "special-characters-group-thai": "Thailand",
        "special-characters-group-lao": "Lao",
-       "special-characters-group-khmer": "Khmer"
+       "special-characters-group-khmer": "Khmer",
+       "api-error-blacklisted": "Mangga pilih judhul liya sing njelasaké"
 }
index 844cfea..045e7d1 100644 (file)
        "upload-dialog-button-done": "შესრულდა",
        "upload-dialog-button-save": "შენახვა",
        "upload-dialog-button-upload": "ატვირთვა",
-       "upload-process-error": "მოხდა შეცდომა",
-       "upload-process-warning": "გაჩნდა გაფრთხილება",
        "upload-form-label-select-file": "ფაილის არჩევა",
        "upload-form-label-infoform-title": "დეტალები",
        "upload-form-label-infoform-name": "სახელი",
        "mw-widgets-dateinput-placeholder-day": "წწწწ-თთ-დდ",
        "mw-widgets-dateinput-placeholder-month": "წწწწ-თთ",
        "mw-widgets-titleinput-description-new-page": "გვერდი ჯერ არ არსებობს",
-       "mw-widgets-titleinput-description-redirect": "გადამისამართება $1-ზე"
+       "mw-widgets-titleinput-description-redirect": "გადამისამართება $1-ზე",
+       "api-error-blacklisted": "გთხოვთ, აირჩიეთ სხვა, აღწერილობითი სათაური."
 }
index 193c4a1..e904f3b 100644 (file)
        "upload-dialog-button-done": "Бітті",
        "upload-dialog-button-save": "Сақтау",
        "upload-dialog-button-upload": "Жүктеу",
-       "upload-process-error": "Белгісіз қате кездесті",
-       "upload-process-warning": "Ескерту кездесті",
        "upload-form-label-select-file": "Файлды таңдау",
        "upload-form-label-infoform-title": "Егжей-тегжейі",
        "upload-form-label-infoform-name": "Атауы",
        "mw-widgets-dateinput-placeholder-day": "ЖЖЖЖ-АА-КК",
        "mw-widgets-dateinput-placeholder-month": "ЖЖЖЖ-АА",
        "mw-widgets-titleinput-description-new-page": "бет жоқ екен",
-       "mw-widgets-titleinput-description-redirect": "$1 дегенге бағыттату"
+       "mw-widgets-titleinput-description-redirect": "$1 дегенге бағыттату",
+       "api-error-blacklisted": "Өтініш, сипаттама атауының басқасын таңдаңыз."
 }
index e99c62f..214388c 100644 (file)
        "passwordreset-emailsent-capture": "អ៊ីមែលស្ដារពាក្យសម្ងាត់មួយដូចបង្ហាញខាងក្រោមត្រូវបានផ្ញើទៅហើយ។",
        "passwordreset-emailerror-capture": "អ៊ីមែលស្ដារពាក្យសម្ងាត់មួយដូចបង្ហាញខាងក្រោមត្រូវបានបង្កើតហើយ ប៉ុន្តែការផ្ញើទៅកាន់ {{GENDER:$2|អ្នកប្រើប្រាស់}}មិនបានសំរេចទេ៖ $1",
        "changeemail": "ផ្លាស់ប្ដូរអាសយដ្ឋានអ៊ីមែល",
-       "changeemail-text": "សូមបំពេញសំនុំបែបបទនេះដើម្បីផ្លាស់ប្ដូរអាសយដ្ឋានអ៊ីមែលរបស់អ្នក។ អ្នកនឹងត្រូវបញ្ចូលពាក្យសម្ងាត់ដើម្បីអះអាងលើការផ្លាស់ប្ដូរនេះ។",
+       "changeemail-header": "ផ្លាស់ប្ដូរអាសយដ្ឋានអ៊ីមែលសំរាប់គណនីនេះ",
        "changeemail-no-info": "អ្នក​ចាំបាច់​ត្រូវតែ​កត់ឈ្មោះចូល ដើម្បី​ចូលទៅកាន់​ទំព័រ​នេះ​ដោយផ្ទាល់​។",
        "changeemail-oldemail": "អាសយដ្ឋានអ៊ីមែលបច្ចុប្បន្ន៖",
        "changeemail-newemail": "អាសយដ្ឋានអ៊ីមែលថ្មី៖",
        "upload-dialog-button-done": "រួចរាល់",
        "upload-dialog-button-save": "រក្សាទុក",
        "upload-dialog-button-upload": "ផ្ទុកឡើង",
-       "upload-process-error": "មានបញ្ហាកើតឡើង",
-       "upload-process-warning": "មានការព្រមាន",
        "upload-form-label-select-file": "ជ្រើសរើសឯកសារ",
        "upload-form-label-infoform-title": "ព័ត៌មាន​លំអិត",
        "upload-form-label-infoform-name": "ឈ្មោះ​",
        "special-characters-title-minus": "សញ្ញាដក",
        "mw-widgets-dateinput-no-date": "គ្មានកាលបរិច្ឆេទត្រូវបានជ្រើសរើស",
        "mw-widgets-titleinput-description-new-page": "ទំព័រមិនទាន់មាននៅឡើយទេ",
-       "mw-widgets-titleinput-description-redirect": "បញ្ជូនបន្តទៅ $1"
+       "mw-widgets-titleinput-description-redirect": "បញ្ជូនបន្តទៅ $1",
+       "api-error-blacklisted": "សូមជ្រើសរើសឈ្មោះផ្សេងដែលក្បោះក្បាយជាង។"
 }
index 27779f9..ced19da 100644 (file)
        "upload-dialog-button-done": "완료",
        "upload-dialog-button-save": "저장",
        "upload-dialog-button-upload": "올리기",
-       "upload-process-error": "오류가 발생했습니다",
-       "upload-process-warning": "경고가 일어났습니다",
        "upload-form-label-select-file": "파일을 선택해주세요.",
        "upload-form-label-infoform-title": "자세한 사항",
        "upload-form-label-infoform-name": "이름",
        "logentry-tag-update-add-logentry": "$1 사용자가 $3 문서의 기록 항목 $5에 $6 {{PLURAL:$7|태그}}를 {{GENDER:$2|추가했습니다}}",
        "logentry-tag-update-remove-revision": "$1 사용자가 $3 문서의 $4판에서 $8 {{PLURAL:$9|태그}}를 {{GENDER:$2|제거했습니다}}",
        "logentry-tag-update-remove-logentry": "$1 사용자가 $3 문서의 기록 항목 $5에서 $8 {{PLURAL:$9|태그}}를 {{GENDER:$2|제거했습니다}}",
+       "logentry-tag-update-revision": "$1 사용자가 $3 문서의 $4 판에서 태그를 {{GENDER:$2|수정했습니다}} ($6을(를) {{PLURAL:$7|추가함}}; $8을(를) {{PLURAL:$9|제거함}})",
        "rightsnone": "(없음)",
        "revdelete-summary": "편집 요약",
        "feedback-adding": "문서에 피드백을 올리는 중...",
        "special-characters-title-minus": "빼기 기호",
        "mw-widgets-dateinput-no-date": "선택된 날짜 없음",
        "mw-widgets-titleinput-description-new-page": "문서가 존재하지 않습니다",
-       "mw-widgets-titleinput-description-redirect": "$1 문서로 넘겨주기"
+       "mw-widgets-titleinput-description-redirect": "$1 문서로 넘겨주기",
+       "api-error-blacklisted": "이 파일을 설명할 수 있는 다른 제목을 선택하세요."
 }
index 8a1b519..e5bc1cd 100644 (file)
        "upload-dialog-button-done": "Jedonn",
        "upload-dialog-button-save": "Faßhalde",
        "upload-dialog-button-upload": "Lohß Jonn!",
-       "upload-process-error": "Ene Fähler es opjetrodde",
-       "upload-process-warning": "En Warnong wood ußjejovve.",
        "upload-form-label-select-file": "De ußjesöhk Dattei",
        "upload-form-label-infoform-title": "Eijnzelheijte",
        "upload-form-label-infoform-name": "Nahme",
        "move-page-legend": "Sigg Ömnenne",
        "movepagetext": "Heh kanns De en Sigg ömnenne.\nDomet kritt di Sigg ene neue Name, un all vörherije Versione vun dä Sigg och.\nUnger däm ahle Tittel weed automatisch en Ömleidong op dä neue Tittel enjedrare.\n\nDo kannß dat Höksche säze domet Ömleidonge automattesch aanjepaß wääde, di op dä ahle Tittel zeije — dat weet ävver nur allmählesch pö a pö hengerher jemaat.\nLinks op dä ahle Tittel blieve ävver wi se wore, wann De dat Höksche nit säz.\nDat heiß, dann moß De selver nohluure, of do jäz [[Special:DoubleRedirects|dubbelde Ömleidonge]] udder [[Special:BrokenRedirects|kapodde Ömleiduoge]] bei eruskumme.\nWann De en Sigg ömnenne deis, häs Do och doför ze sorje, dat de betroffene Links do henjonn, wo se hen jonn solle.\nAlsu holl Der de Liss „Wat noh heh link“ fun dä Sigg heh un jangk se dorsch!\n\nDe Sigg weed '''nit''' ömjenannt, wann et met däm neue Name ald en Sigg jitt, '''ußer''' et es en Ömleidong un se es noch nie jeändert woode.\nEsu kam_mer en Sigg jlich widder zeröck ömbenänne, wam_mer sich bem Ömbenänne verdonn hät, un mer kann och kein Sigge kapottmaache, wo ald jet drop schteiht.\n\n'''Oppjepass!'''\nWat beim Ömnenne erus kütt, künnt en opfällije un villeisch stüürende Änderong aam Wiki sin, besönders bei öff jebruchte Sigge.\nAlsu bes secher, dat De verschteihs, wat De heh am maache bes, ih dat De et mähs!",
        "movepagetext-noredirectfixer": "Heh kanns De en Sigg ömnenne.\nDomet kritt di Sigg ene neue Nahme, un all vörherije Väsjohne vun dä Sigg och.\nOnger däm ahle Tittel weed automattesch en Ömleidong op dä neue Tittel enjedrare.\n\nLenks op dä ahle Tittel bliive ävver, wie se wohre.\nDat heiß, Do moß selver nohloore, ov doh jetz [[Special:DoubleRedirects|dubbelde]] oder [[Special:BrokenRedirects|kapodde Ömleidonge]] bei eruskumme.\nWann De en Sigg ömnenne deiß, häs Do och doför ze sorje, dat de betroffe Links doh henjonn, wo se hen jonn solle.\nAlsu holl Der di Liss „Wat noh heh link“ fun dä Sigg heh un jangk se dorsch!\n\nDi Sigg weed '''nit''' ömjenannt, wann et met däm neue Tittel ald en Sigg jitt, '''ußer''' doh es nix drop, oder et es en Ömleijdong un se es noch nie jeändert woode.\nEsu kam_mer en Sigg jlich widder retuur ömnänne, wam_mer sich mem Ömnänne verdonn hät, un mer kann och kein Sigge kapottmaache, wo ald jet drop schteiht.\n\n<strong>Oppjepaß!</strong>\nWat beim Ömnänne erus kütt, künnt en opfällije un velleijsch stührende Änderong aam Wikki sin, besönders bei öff jebruchte Sigge.\nAlsu bes secher, dat De verschteihs, wat De heh am maache bes, ih dat De et mähs!",
-       "movepagetalktext": "Dä Sigg ehr Klaafsigg, wann se ein hät, weed automatisch met  ömjenannt, '''usser''' wann:\n* de Sigg en en ander Appachtemeng kütt,\n* en Klaafsigg met däm neue Name ald do es, un et steiht och jet drop,\n* De unge en däm Kääsje '''kei''' Hökche aan häs.\nEn dänne Fäll, muss De Der dä Enhald vun dä Klaafsigge selvs vörnemme, un eröm kopeere watte bruchs.",
+       "movepagetalktext": "Wam_mer en däm Kääsje e Höhksche määt, weed heh di Sigg automattesch ömjenannd op di neuje Övverschreff, ußer wann en Klaafsigg met dä neuje Övverschrev ald do es, un et steiht och jet drop.\n\nEn dämm Fall mpß De Der dä Enhald vun dä Klaafsigge selvs vörnemme, un eröm kopeere wat De bruchs.",
        "moveuserpage-warning": "'''Opjepaß:''' Do wells en Metmaachersigg ömnänne, domet weed ävver dä Metmaacher sellver ''nit'' met ömjenannt.",
        "movecategorypage-warning": "<strong>Opjepaß:</strong> Do kanns bloß di Sigg vun dä Saachjropp ömbenänne. Sigge, di en dä ahle Saachjropp sin, blieve doh. Se kumme nit met en di neue Saachjropp.",
        "movenologintext": "Do mööts ald aanjemeldt un [[Special:UserLogin|enjelogg]] sin, öm en Sigg ömzenenne.",
        "svg-long-error": "En kapodde <i lang=\"en\">SVG</i>-Dattei: $1",
        "show-big-image": "Ojinaal-Dattei",
        "show-big-image-preview": "Heh di Vör_Aanseesch es $1 jruuß.",
+       "show-big-image-preview-differ": "Der Ömvang vun heh däm $3-Minnibeldsche vun dä Ojinahl $2-Datteij es: $1.",
        "show-big-image-other": "{{PLURAL:$2|Ander Oplühsung|Ander Oplühsunge|kein ander Oplühsunge}}: $1.",
        "show-big-image-size": "{{PLURAL:$1|Ei Pixel|$1 Pixelle}} breed × {{PLURAL:$2|Ei Pixel|$2 Pixelle}} huh",
        "file-info-gif-looped": "läuf emmer widder vun vürre",
        "special-characters-title-minus": "Et Winnijer-Zeische",
        "mw-widgets-dateinput-no-date": "Kein Dattom es ußjewählt",
        "mw-widgets-titleinput-description-new-page": "di Sigg jidd_et noch nit",
-       "mw-widgets-titleinput-description-redirect": "ömleijde op „$1“"
+       "mw-widgets-titleinput-description-redirect": "ömleijde op „$1“",
+       "api-error-blacklisted": "Söhk Der ene anndere Nahme uß, dä mih drövver säht."
 }
index d0d98b4..05b6d26 100644 (file)
@@ -91,7 +91,7 @@
        "march-gen": "Março",
        "april-gen": "Abril",
        "may-gen": "Mayo",
-       "june-gen": "Juño",
+       "june-gen": "Junio",
        "july-gen": "Julio",
        "august-gen": "Agosto",
        "september-gen": "Setiembre",
        "passwordreset-email": "Adresso de letral:",
        "passwordreset-emailelement": "Usuario: \n$1\n\nKontrasenya temporal: \n$2",
        "changeemail": "Kambiar adreso de korreo elektroniko",
+       "changeemail-header": "Kambiar adreso de korreo elektroniko de kuento",
        "changeemail-oldemail": "Adreso de korreo elektroniko aktual:",
        "changeemail-newemail": "Muevo adreso de korreo elektroniko:",
        "changeemail-none": "(dinguno)",
        "lockedbyandtime": "(por {{GENDER:$1|$1}} el $2 a la $3)",
        "movepagetext": "Uzando el sigiente formulario va renombrar una pajina, kitando todo su istoria a su nuevo nombre.\nEl titulo orijinal se va convertir en una redireksyon al muevo titulo.\nPuede aktualizar otomatikamente las redireksyones al titulo orijinal.\nSi eskoje no azerlo, asegurate de verifikar ke no ay  [[Special:DoubleRedirects|redireksyones dobles]] o [[Special:BrokenRedirects|rotas]].\nTú sos responsable de asegurar ke los enlases funksyonan korrectamente.\n\nNota ke la pajina '''no''' va ser renombrada si ya egziste una hoja con esta muevo título, a no ser que sea una redireksyon sin istoria.\nEsto sinyifica que vas pueder renombrar una pajina a su titulo orijinal si hazes un yerro, ma que no vas pueder sobreskrivir una pajina que ya existe.\n\n'''Aviso!'''\nEste puede ser un trocamiento muy muy emportante e inesperado para una pajina popular;\nasegurate de entender las resultados del lo que azes antes de ir endelantre.",
        "movepagetalktext": "La hoja de diskussión associada, si egziste, va ser renombrada otomáticamente '''a menos que:'''\n*Esté renombrando la hoja entre espacios de nombres diferentes,\n*Una hoja de diskussión no vazía ya egziste con el nombre nuevo, o\n*Desactivara la opción \"Renombrar la hoja de diskussión también\".\n\nEn estos casos, va deber trasladar manualmente el contenido de la hoja de diskussión.",
-       "movearticle": "Renombra la hoja",
        "newtitle": "A título nuevo",
        "move-watch": "Cudiar este artículo",
        "movepagebtn": "Renombra la hoja",
        "hebrew-calendar-m8": "Iyyar",
        "hebrew-calendar-m9": "Siván",
        "hebrew-calendar-m10": "Tammuz",
-       "hebrew-calendar-m1-gen": "Tishre",
-       "hebrew-calendar-m2-gen": "Ḥeshvan",
+       "hebrew-calendar-m1-gen": "Tishri",
+       "hebrew-calendar-m2-gen": "Ḥeshván",
+       "hebrew-calendar-m4-gen": "Teveth",
+       "hebrew-calendar-m6-gen": "Adhar",
+       "hebrew-calendar-m6a-gen": "Adhar I",
+       "hebrew-calendar-m6b-gen": "Adhar II",
+       "hebrew-calendar-m7-gen": "Nissán",
+       "hebrew-calendar-m8-gen": "Iyyar",
+       "hebrew-calendar-m9-gen": "Siván",
+       "hebrew-calendar-m10-gen": "Tammuz",
        "duplicate-defaultsort": "'''Aviso:''' la klave primaria para ordenamiento \"$2\" anula la primera \"$1\"",
        "version": "Versión",
        "version-specialpages": "Pajinas espesiales",
index 84892bf..39a6e97 100644 (file)
        "upload-dialog-button-done": "Fäerdeg",
        "upload-dialog-button-save": "Späicheren",
        "upload-dialog-button-upload": "Eroplueden",
-       "upload-process-error": "Et ass e Feeler geschitt",
-       "upload-process-warning": "Eng Warnung gouf ausgeschwat",
        "upload-form-label-select-file": "Fichier eraussichen",
        "upload-form-label-infoform-title": "Detailer",
        "upload-form-label-infoform-name": "Numm",
        "mw-widgets-dateinput-placeholder-day": "JJJJ-MM-DD",
        "mw-widgets-dateinput-placeholder-month": "JJJJ-MM",
        "mw-widgets-titleinput-description-new-page": "Säit gëtt et nach net",
-       "mw-widgets-titleinput-description-redirect": "viruleeden op $1"
+       "mw-widgets-titleinput-description-redirect": "viruleeden op $1",
+       "api-error-blacklisted": "Sicht w.e.g. en aneren Titel, deen méi iwwer de Sujet ausseet."
 }
index cb6e321..4cc3907 100644 (file)
        "special-characters-group-lao": "Lao",
        "special-characters-group-khmer": "Cambodzjaans",
        "mw-widgets-dateinput-placeholder-day": "JJJJ-MM-DD",
-       "mw-widgets-dateinput-placeholder-month": "JJJJ-MM"
+       "mw-widgets-dateinput-placeholder-month": "JJJJ-MM",
+       "api-error-blacklisted": "Kees 'nen angere, besjrievendje naam."
 }
index 7db32b5..b632308 100644 (file)
        "thu": "Ket",
        "fri": "Pen",
        "sat": "Šeš",
-       "january": "Sausis",
+       "january": "sausio",
        "february": "vasario",
        "march": "kovo",
-       "april": "Balandis",
+       "april": "balandžio",
        "may_long": "Gegužė",
-       "june": "Birželis",
-       "july": "Liepa",
-       "august": "Rugpjūtis",
+       "june": "birželio",
+       "july": "liepos",
+       "august": "rugpjūčio",
        "september": "rugsėjo",
-       "october": "Spalis",
-       "november": "Lapkritis",
+       "october": "spalio",
+       "november": "lapkričio",
        "december": "gruodžio",
        "january-gen": "Sausio",
        "february-gen": "Vasario",
        "passwordreset-emailerror-capture": "Priminimo elektroninis laiškas buvo sukurtas, toks, koks parodytas žemiau, bet pasiuntimas naudotojui buvo nesėkmingas: $1",
        "changeemail": "Pakeisti ar pašalinti el. pašto adresą",
        "changeemail-header": "Keisti paskyros el. pašto adresą",
+       "changeemail-passwordrequired": "Jums reikės įvesti savo slaptažodį, kad patvirtintumėte šį pakeitimą.",
        "changeemail-no-info": "Jūs turite būti prisijungęs, kad pasiektumėte puslapį tiesiogiai.",
        "changeemail-oldemail": "Dabartinis el. pašto adresas:",
        "changeemail-newemail": "Naujas el. pašto adresas:",
        "upload-dialog-button-done": "Atlikta",
        "upload-dialog-button-save": "Išsaugoti",
        "upload-dialog-button-upload": "Įkelti",
-       "upload-process-error": "Įvyko klaida",
-       "upload-process-warning": "Įvyko įspėjimas",
        "upload-form-label-select-file": "Pasirinkti failą",
        "upload-form-label-infoform-title": "Detalės",
        "upload-form-label-infoform-name": "Pavadinimas",
        "filerevert-legend": "Failo sugrąžinimas",
        "filerevert-intro": "<span class=\"plainlinks\">Jūs grąžinate '''[[Media:$1|$1]]''' į versiją $4 ($2, $3).</span>",
        "filerevert-comment": "Priežastis:",
-       "filerevert-defaultcomment": "Grąžinta į $1, $2 versiją",
+       "filerevert-defaultcomment": "Grąžinta į $1, $2 ($3) versiją",
        "filerevert-submit": "Grąžinti",
        "filerevert-success": "<span class=\"plainlinks\">'''[[Media:$1|$1]]''' buvo sugrąžintas į versiją $4 ($2, $3).</span>",
        "filerevert-badversion": "Nėra jokių ankstesnių vietinių šio failo versijų su pateiktu laiku.",
        "deletepage": "Trinti puslapį",
        "confirm": "Tvirtinu",
        "excontent": "buvęs turinys: „$1“",
-       "excontentauthor": "buvęs turinys: „$1“ (redagavo tik „[[Special:Contributions/$2|$2]]“)",
+       "excontentauthor": "buvęs turinys: „$1“; redagavo tik „[[Special:Contributions/$2|$2]]“ ([[User talk:$2|aptarimas]])",
        "exbeforeblank": "prieš ištrinant turinys buvo: „$1“",
        "delete-confirm": "Ištrinti „$1“",
        "delete-legend": "Trynimas",
        "svg-long-error": "Neleistinas SVG failas: $1",
        "show-big-image": "Pradinė rinkmena",
        "show-big-image-preview": "Šios peržiūros dydis: $1.",
+       "show-big-image-preview-differ": "Rinkmenos $2 peržiūros $3 dydisː $1.",
        "show-big-image-other": "{{PLURAL:$2|Kita rezoliucija|Kitos $2 rezoliucijos|Kitų $2 rezoliucijų}}: $1.",
        "show-big-image-size": "$1 × $2 taškų",
        "file-info-gif-looped": "ciklinis",
        "api-error-badaccess-groups": "Jums neleidžiama įkelti failus į šią wiki.",
        "api-error-badtoken": "Vidinė klaida: blogai atpažinimo ženklas.",
        "api-error-copyuploaddisabled": "Siuntimas pagal URL yra išjungtas šiame serveryje.",
-       "api-error-duplicate": "Jau {{PLURAL:$1|yra kitas failas|yra kiti failai}} puslapyje su tuo pačiu turiniu..",
+       "api-error-duplicate": "Jau {{PLURAL:$1|yra kitas failas|yra kiti failai}} puslapyje su tuo pačiu turiniu.",
        "api-error-duplicate-archive": "Jau {{PLURAL:$1|buvo kitas failas|buvo kitų failų}} puslapyje su tuo pačiu turiniu, bet {{PLURAL:$1|buvo|buvo}} ištrinti.",
        "api-error-empty-file": "Pateikta failas buvo tuščias.",
        "api-error-emptypage": "Kurti naujus, tuščius puslapius neleidžiama.",
        "default-skin-not-found-no-skins": "Ups! Jūsų viki numatytoji išvaizdą, nurodyta <code>$wgDefaultSkin</code> <code>$1</code>, yra negalima.\n\nJūs neturite įdiegtų išvaizdų.\n\n; Jei ką tik įsidiegėte MediaWiki:\n: Jūs tikriausiai įsidiegėte iš git arba tiesiai iš kodo naudodami kitą metodą. To buvo tikimasi. Pabandykite įsidiegti išvaizdų iš [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org išvaizdų katalogo] taip:\n:* Parsisiųsdami  [https://www.mediawiki.org/wiki/Download tvarkyklę], kuri turi kelias išvaizdas ir plėtinius. Jūs galite nukopijuoti ir įklijuoti <code>skins/</code> katalogą iš jos.\n:* Persiųsdami individualias išvaizdas iš [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Naudodami Git išvaizdų parsisiuntimui].\n: Tai neturėtų trukdyti Jūsų git saugyklai jei Jūs esate MediaWiki kūrėjas. Žiūrėkite [https://www.mediawiki.org/wiki/Manual:Skin_configuration Instrukcija: Išvaizdos konfigūracija] dėl informacijos kaip įgalinti išvaizdas ir pasirinkti numatytąją.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (įgalinta)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''išjungtas''')",
-       "mediastatistics": "Medios statistika",
+       "mediastatistics": "Daugialypės terpės statistika",
        "mediastatistics-summary": "Statistika apie įkeltus failo tipus. Tai apima tik naujausias failo versijas. Senos ar ištrintos failų versijos nėra įtrauktos.",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 bitas|$1 bitai}} ($2; $3%)",
        "mediastatistics-table-mimetype": "MIME tipas",
        "special-characters-title-minus": "minuso ženklas",
        "mw-widgets-dateinput-no-date": "Nepasirinkta data",
        "mw-widgets-titleinput-description-new-page": "puslapis dar neegzistuoja",
-       "mw-widgets-titleinput-description-redirect": "nukreipti į $1"
+       "mw-widgets-titleinput-description-redirect": "nukreipti į $1",
+       "api-error-blacklisted": "Prašome pasirinkti kitą, aprašomąją antraštę."
 }
index fa8e3aa..c56b3b6 100644 (file)
        "passwordreset-emailsent-capture": "Hriat nawntirna e-lehkha thawn a ni, a hnuaia tarlan ang khuan.",
        "passwordreset-emailerror-capture": "Hriat nawntirna e-lehkha siam chhuah a ni a, a hnuaia tarlan ang khuan; mahsé thawn hlawhchham a ni: $1",
        "changeemail": "E-chenhmun thlâk rawh",
-       "changeemail-text": "I e-chenhmun thlâk tùrin hei hi dahkhat vek rawh. I tihdanglam nemngheh nan i thurûk ziahluh i ngai ang.",
+       "changeemail-header": "Siangchan e-chenhmun thlâk rawh",
        "changeemail-no-info": "He phêk lut mai tùr chuan i inziahluh a ngai.",
        "changeemail-oldemail": "Tùna i e-chenhmun:",
        "changeemail-newemail": "E-chenhmun thar:",
        "move-page": "$1 hming thlâkna",
        "move-page-legend": "Phêk hming thlâkna",
        "movepagetext-noredirectfixer": "Hei hi phêk hming thlâkna a ni. A phêk chanchin-hlui zawng zawng pawh a sawn nghâl vek ang.\nA hming hlui kha hming thara hruailuhna phêkah chantir nghal a ni bawk dawn a ni.\n[[Special:DoubleRedirects|Hming thlâk nawn]] leh [[Special:BrokenRedirects|Hming thlâk chhumbung]] a awm loh nan fimkhur ang che.\nHe phêk hlui zawmtute a hmun dik taka hruailuh a nih leh nih lohvah mawh i phur ang.\n\nI hming thar vuah ang hmingpu dang phêk a awm tawh chuan he phêk hming i thlak tum hi a thlak theih loh vang, a ruak emaw, hruailuhna phêk a ni emaw, siamţhat a la ni lo emaw te a nih ngawt loh chuan.\nChumi awmzia chu, phêk awmsa i luahlantir thei lo va, mahsé a phêk hming hlui ngai i puttir leh thei thung tihna a ni.\n\n'''Vaukhanna!'''\nPhêk lar deuh tan chuan hei hi danglamna râpthlâk leh beisei loh tak i thlen thut thei tih hrechiang ang che;\nphêk hming thlâkina a nghawng theih thilte i hrechiang tih infiah ang che.",
-       "movearticle": "Phêk hming thlâk tùr:",
        "moveuserpage-warning": "'''Vaukhanna:''' Hmangtu phêk i thlak dawn mek. A hmangtu phêk i thlak ringawt ang a, hmangtu hming erawh i thlâk dawn lo tih hria ang che.",
        "movenologintext": "Phêk hming thlâk tùrin  [[Special:UserLogin|i (inziah)luh]] a ngai.",
        "movenotallowed": "Phêk sawn phalna i nei lo.",
        "special-characters-group-lao": "Lao",
        "special-characters-group-khmer": "Khmer",
        "mw-widgets-dateinput-placeholder-day": "KKKK-TT-NN",
-       "mw-widgets-dateinput-placeholder-month": "KKKK-TT"
+       "mw-widgets-dateinput-placeholder-month": "KKKK-TT",
+       "api-error-blacklisted": "Hming dang, chiang zâwk deuh thlang hräm rawh le."
 }
index 1920124..b10cf28 100644 (file)
        "special-characters-group-telugu": "Telugu",
        "special-characters-group-sinhala": "Singāļu",
        "special-characters-group-gujarati": "Gudžarati",
-       "mw-widgets-dateinput-no-date": "Nav izvēlēts datums"
+       "mw-widgets-dateinput-no-date": "Nav izvēlēts datums",
+       "api-error-blacklisted": "Lūdzu, izvēlieties citu, aprakstošu nosaukumu!"
 }
index 5f0c2ac..bf9f680 100644 (file)
        "prefs-help-recentchangescount": "Подразбира скорешни промени, истории на страници и дневници.",
        "prefs-help-watchlist-token2": "Ова е тајна шифра за вашиот канализиран список на набљудувања.\nСекој што ја знае ќе може да ја чита, па затоа ви препорачуваме да не ја кажувате никому.\n[[Special:ResetTokens|Стиснете тука ако треба да зададете нова]].",
        "savedprefs": "Вашите нагодувања се зачувани.",
+       "savedrights": "Корисничките права на {{GENDER:$1|$1}} не се зачувани.",
        "timezonelegend": "Часовен појас:",
        "localtime": "Месно време:",
        "timezoneuseserverdefault": "Од викито ($1)",
        "upload-dialog-button-done": "Готово",
        "upload-dialog-button-save": "Зачувај",
        "upload-dialog-button-upload": "Подигни",
-       "upload-process-error": "Се појави грешка",
-       "upload-process-warning": "Се јави предупредување",
        "upload-form-label-select-file": "Одберете податотека",
        "upload-form-label-infoform-title": "Подробно",
        "upload-form-label-infoform-name": "Назив",
        "svg-long-error": "Неважечка SVG-податотека: $1",
        "show-big-image": "Изворна податотека",
        "show-big-image-preview": "Големина на овој преглед: $1.",
+       "show-big-image-preview-differ": "Големина на овој $3-преглед на оваа $2-податотека: $1.",
        "show-big-image-other": "{{PLURAL:$2|Друга разделеност|Други разделености}}: $1.",
        "show-big-image-size": "$1 × $2 пиксели",
        "file-info-gif-looped": "кружно",
        "mw-widgets-dateinput-placeholder-day": "ГГГГ-ММ-ДД",
        "mw-widgets-dateinput-placeholder-month": "ГГГГ-ММ",
        "mw-widgets-titleinput-description-new-page": "страницата сè уште не постои",
-       "mw-widgets-titleinput-description-redirect": "пренасочување кон $1"
+       "mw-widgets-titleinput-description-redirect": "пренасочување кон $1",
+       "api-error-blacklisted": "Одберете поинаков, описен наслов."
 }
index db58d81..0c117a5 100644 (file)
        "viewsource": "മൂലരൂപം കാണുക",
        "viewsource-title": "$1 എന്ന താളിന്റെ മൂലരൂപം കാണുക",
        "actionthrottled": "പ്രവൃത്തി നടത്തിയിരിക്കുന്നു",
-       "actionthrottledtext": "പാഴàµ\86à´´àµ\81ത്തിനെതിരെയുള്ള മുൻകരുതൽ എന്ന നിലയിൽ ഒരേ പ്രവൃത്തി കുറഞ്ഞ സമയത്തിനുള്ളിൽ നിരവധി തവണ ആവർത്തിക്കുന്നതു പരിമിതപ്പെടുത്തിയിരിക്കുന്നു. താങ്കൾ ആ പരിധി ലംഘിച്ചിരിക്കുന്നു. കുറച്ച് മിനിറ്റുകൾക്കു ശേഷം വീണ്ടും ശ്രമിക്കുക.",
+       "actionthrottledtext": "à´¦àµ\81à´°àµ\81പയàµ\8bà´\97ത്തിനെതിരെയുള്ള മുൻകരുതൽ എന്ന നിലയിൽ ഒരേ പ്രവൃത്തി കുറഞ്ഞ സമയത്തിനുള്ളിൽ നിരവധി തവണ ആവർത്തിക്കുന്നതു പരിമിതപ്പെടുത്തിയിരിക്കുന്നു. താങ്കൾ ആ പരിധി ലംഘിച്ചിരിക്കുന്നു. കുറച്ച് മിനിറ്റുകൾക്കു ശേഷം വീണ്ടും ശ്രമിക്കുക.",
        "protectedpagetext": "ഈ താൾ തിരുത്തോ മറ്റു പ്രവൃത്തികളോ തടയാനാകും വിധം സംരക്ഷിക്കപ്പെട്ടിട്ടുള്ളതാണ്.",
        "viewsourcetext": "താങ്കൾക്ക് ഈ താളിന്റെ മൂലരൂപം കാണാനും പകർത്താനും സാധിക്കും.",
        "viewyourtext": "താങ്കൾക്ക് ഈ താളിലെ <strong>താങ്കളുടെ തിരുത്തുകളുടെ</strong> മൂലരൂപം കാണാനും പകർത്താനും സാധിക്കും.",
        "passwordreset-emailsent-capture": "രഹസ്യവാക്ക് പുനർസജ്ജീകരണ ഇമെയിൽ അയച്ചിട്ടുണ്ട്, അത് താഴെക്കൊടുക്കുന്നു.",
        "passwordreset-emailerror-capture": "താഴെക്കൊടുത്തിരിക്കുന്ന, രഹസ്യവാക്ക് പുനർസജ്ജീകരണ ഇമെയിൽ സൃഷ്ടിക്കാനായെങ്കിലും, അത് {{GENDER:$2|ഉപയോക്താവിന്}} അയയ്ക്കുന്നത് പരാജയപ്പെട്ടു: $1",
        "changeemail": "ഇമെയിൽ വിലാസം മാറ്റുക അല്ലെങ്കിൽ നീക്കംചെയ്യുക",
-       "changeemail-header": "അംഗത്വത്തിന്റെ ഇമെയിൽ വിലാസത്തിൽ മാറ്റംവരുത്തുക",
+       "changeemail-header": "താങ്കളുടെ ഇമെയിൽ വിലാസത്തിൽ മാറ്റംവരുത്താൻ ഈ ഫോം പൂരിപ്പിച്ചു നൽകുക.താങ്കളുടെ അംഗത്വവുമായി ഏതെങ്കിലുമൊരു ഇമെയിൽ വിലാസത്തിനുള്ള ബന്ധം ഒഴിവാക്കാൻ ഫോം പൂരിപ്പിക്കുമ്പോൾ പുതിയ ഇമെയിൽ വിലാസത്തിനുള്ള ഭാഗം ഒഴിച്ചിടുക.",
+       "changeemail-passwordrequired": "ഈ മാറ്റം സ്ഥിരീകരിക്കാൻ താങ്കളുടെ രഹസ്യവാക്ക് നൽകുക.",
        "changeemail-no-info": "ഈ താൾ നേരിട്ടു കാണുന്നതിന് താങ്കൾ ലോഗിൻ ചെയ്തിരിക്കണം.",
        "changeemail-oldemail": "ഇപ്പോഴത്തെ ഇമെയിൽ വിലാസം:",
        "changeemail-newemail": "പുതിയ ഇമെയിൽ വിലാസം:",
        "sig_tip": "തിരുത്തൽ സമയമടക്കമുള്ള താങ്കളുടെ ഒപ്പ്",
        "hr_tip": "തിരശ്ചീനരേഖ (മിതമായി മാത്രം ഉപയോഗിക്കുക)",
        "summary": "ചുരുക്കം:",
-       "subject": "വിഷയം/തലക്കെട്ട്:",
+       "subject": "വിഷയം:",
        "minoredit": "ഇതൊരു ചെറിയ തിരുത്താണ്",
        "watchthis": "ഈ താളിലെ മാറ്റങ്ങൾ ശ്രദ്ധിക്കുക",
        "savearticle": "താൾ സേവ് ചെയ്യുക",
        "missingsummary": "'''ഓർമ്മക്കുറിപ്പ്:''' താങ്കൾ തിരുത്തലിന്റെ ചുരുക്കരൂപം നൽകിയിട്ടില്ല. ''സേവ് ചെയ്യുക'' ബട്ടൺ ഒരുവട്ടം കൂടി അമർത്തിയാൽ താങ്കൾ വരുത്തിയ മാറ്റം കാത്തുസൂക്ഷിക്കുന്നതാണ്.",
        "selfredirect": "<strong>മുന്നറിയിപ്പ്:</strong> ഈ താളിലേക്ക് തന്നെയുള്ള തിരിച്ചുവിടലാണ് താങ്കൾ സൃഷ്ടിക്കുന്നത്.\nതിരിച്ചുവിടലിനു താങ്കൾ നൽകിയ ലക്ഷ്യം തെറ്റിയിരിക്കാം അല്ലെങ്കിൽ താങ്കൾ തിരുത്തുന്നത് തെറ്റായ താൾ ആയിരിക്കാം.\nഎന്തായാലും, വീണ്ടും \"{{int:savearticle}}\" അമർത്തിയാൽ, തിരിച്ചുവിടൽ സൃഷ്ടിക്കപ്പെടുന്നതാണ്.",
        "missingcommenttext": "താങ്കളുടെ അഭിപ്രായം ദയവായി താഴെ രേഖപ്പെടുത്തുക.",
-       "missingcommentheader": "'''ഓർമ്മക്കുറിപ്പ്:''' ഈ കുറിപ്പിന് താങ്കൾ വിഷയം/തലക്കെട്ട് നൽകിയിട്ടില്ല. ''{{int:savearticle}}'' എന്ന ബട്ടൺ ഒരുവട്ടം കൂടി അമർത്തിയാൽ വിഷയം/തലക്കെട്ട് ഇല്ലാതെ തന്നെ കാത്തുസൂക്ഷിക്കുന്നതാവും.",
+       "missingcommentheader": "<strong>ഓർമ്മക്കുറിപ്പ്:</strong> ഈ കുറിപ്പിന് താങ്കൾ വിഷയം/തലക്കെട്ട് നൽകിയിട്ടില്ല. ''{{int:savearticle}}'' എന്ന ബട്ടൺ ഒരുവട്ടം കൂടി അമർത്തിയാൽ വിഷയം/തലക്കെട്ട് ഇല്ലാതെ തന്നെ കാത്തുസൂക്ഷിക്കുന്നതാവും.",
        "summary-preview": "ചുരുക്കരൂപം എങ്ങനെയുണ്ടെന്നു കാണുക:",
-       "subject-preview": "വിഷയം/തലക്കെട്ട് എങ്ങനെയുണ്ടെന്ന് കാണുക:",
+       "subject-preview": "വിഷയം എങ്ങനെയുണ്ടെന്ന് കാണുക:",
        "previewerrortext": "താങ്കളുടെ മാറ്റങ്ങൾ എങ്ങനെയുണ്ടെന്ന് കാണാൻ ശ്രമിച്ചപ്പോൾ പിഴവുണ്ടായി.",
        "blockedtitle": "ഉപയോക്താവിനെ തടഞ്ഞിരിക്കുന്നു",
        "blockedtext": "'''താങ്കളുടെ ഉപയോക്തൃനാമത്തേയോ താങ്കൾ ഇപ്പോൾ ലോഗിൻ ചെയ്തിട്ടുള്ള ഐ.പി. വിലാസത്തേയോ ഈ വിക്കി തിരുത്തുന്നതിൽ നിന്നു തടഞ്ഞിരിക്കുന്നു'''\n\n$1 ആണ് ഈ തടയൽ നടത്തിയത്. ''$2'' എന്നതാണു് അതിനു രേഖപ്പെടുത്തിയിട്ടുള്ള കാരണം.\n\n* തടയലിന്റെ തുടക്കം: $8\n* തടയലിന്റെ കാലാവധി: $6\n* തടയപ്പെട്ട ഉപയോക്താവ്: $7\n\nഈ തടയലിനെ പറ്റി ചർച്ച ചെയ്യാൻ താങ്കൾക്ക് $1 എന്ന ഉപയോക്താവിനേയോ മറ്റ് [[{{MediaWiki:Grouppage-sysop}}|കാര്യനിർവാഹകരെയോ]] സമീപിക്കാവുന്നതാണ്. [[Special:Preferences|താങ്കളുടെ ക്രമീകരണങ്ങളിൽ]] താങ്കൾ സാധുവായ ഇമെയിൽ വിലാസം കൊടുത്തിട്ടുണ്ടെങ്കിൽ, അതു അയക്കുന്നതിൽ നിന്നു താങ്കൾ തടയപ്പെട്ടിട്ടില്ലെങ്കിൽ, 'ഇദ്ദേഹത്തിന് ഇമെയിൽ അയക്കൂ' എന്ന സം‌വിധാനം ഉപയോഗിച്ച് താങ്കൾക്ക് മറ്റുപയോക്താക്കളുമായി ബന്ധപ്പെടാം. താങ്കളുടെ നിലവിലുള്ള ഐ.പി. വിലാസം $3 ഉം, താങ്കളുടെ തടയൽ ഐ.ഡി. #$5 ഉം ആണ്. ഇവ രണ്ടും താങ്കൾ കാര്യനിർവാഹകനെ ബന്ധപ്പെടുമ്പോൾ ചേർക്കുക.",
        "prefs-help-recentchangescount": "പുതിയ മാറ്റങ്ങൾ, താളിന്റെ നാൾവഴികൾ, രേഖകൾ എന്നിവക്കും ഇത് ബാധകമാണ്.",
        "prefs-help-watchlist-token2": "ഇത് താങ്കൾ ശ്രദ്ധിക്കുന്നവയുടെ  പട്ടികയുടെ വെബ്‌ഫീഡിനുള്ള രഹസ്യചാവിയാണ്.\nഇത് അറിയാവുന്നവർക്ക് താങ്കൾ ശ്രദ്ധിക്കുന്നവയെന്താണെന്ന് വായിക്കാനാവുമെന്നതിനാൽ, പങ്ക് വെയ്ക്കാതിരിക്കുക.\n[[Special:ResetTokens|ഇത് പുനസജ്ജീകരിക്കണമെങ്കിൽ ഇവിടെ ഞെക്കുക]].",
        "savedprefs": "താങ്കളുടെ ക്രമീകരണങ്ങൾ കാത്തുസൂക്ഷിച്ചിരിക്കുന്നു.",
+       "savedrights": "{{GENDER:$1|$1}} എന്ന ഉപയോക്താവിന്റെ ഉപയോക്തൃ അവകാശങ്ങൾ സേവ് ചെയ്തിരിക്കുന്നു.",
        "timezonelegend": "സമയ മേഖല:",
        "localtime": "പ്രാദേശിക സമയം:",
        "timezoneuseserverdefault": "വിക്കിയിൽ സ്വതേയുള്ളത് ഉപയോഗിക്കുക ($1)",
        "upload-options": "അപ്‌‌ലോഡ് ഐച്ഛികങ്ങൾ",
        "watchthisupload": "ഈ പ്രമാണം ശ്രദ്ധിക്കുക",
        "filewasdeleted": "ഈ പേരിലുള്ള ഒരു പ്രമാണം ഇതിനു മുൻപ് അപ്‌ലോഡ് ചെയ്യുകയും പിന്നീട് മായ്ക്കുകയും ചെയ്തിട്ടുള്ളതാണ്‌. ഈ പ്രമാണം തുടർന്നും അപ്‌ലോഡ് ചെയ്യുന്നതിനു മുൻപ് $1 പരിശോധിക്കേണ്ടതാണ്‌.",
+       "filename-thumb-name": "ഇത് കണ്ടിട്ട് ലഘുചിത്രത്തിന്റെ തലക്കെട്ട് പോലെയുണ്ട്. ദയവായി ഇതേ വിക്കിയിലെ ചിത്രങ്ങളുടെ ലഘുചിത്രം തന്നെ അപ്‌ലോഡ് ചെയ്യരുത്. അങ്ങനെയല്ലെങ്കിൽ, ലഘുചിത്രമെന്ന പൂർവ്വപദഭാഗമില്ലാതെ, കൂടുതൽ അർത്ഥപൂർണ്ണമായ പേര് നൽകുക.",
        "filename-bad-prefix": "താങ്കൾ അപ്‌ലോഡ് ചെയ്യുവാൻ ശ്രമിക്കുന്ന പ്രമാണത്തിന്റെ പേര്‌ '''\"$1\"''' എന്നാണ്‌ തുടങ്ങുന്നത്. ഇതു ഡിജിറ്റൽ ക്യാമറയിൽ പടങ്ങൾക്കു യാന്ത്രികമായി ചേർക്കുന്ന പേരാണ്‌. ദയവു ചെയ്തു താങ്കൾ അപ്‌ലോഡ് ചെയ്യുന്ന പ്രമാണത്തെ വിശദീകരിക്കുന്ന അനുയോജ്യമായ ഒരു പേരു തിരഞ്ഞെടുക്കുക.",
        "upload-success-subj": "അപ്‌ലോഡ് വിജയിച്ചിരിക്കുന്നു",
        "upload-success-msg": "താങ്കളുടെ [$2]-ൽ നിന്നും വിജയകരമായി അപ്‌ലോഡ് ചെയ്തിരിക്കുന്നു. [[:{{ns:file}}:$1]] കാണുക",
        "upload-dialog-button-done": "ചെയ്തു കഴിഞ്ഞു",
        "upload-dialog-button-save": "സേവ് ചെയ്യുക",
        "upload-dialog-button-upload": "അപ്‌‌ലോഡ്",
-       "upload-process-error": "ഒരു പിഴവുണ്ടായി",
-       "upload-process-warning": "ഒരു മുന്നറിയിപ്പുണ്ടായി",
        "upload-form-label-select-file": "പ്രമാണം തിരഞ്ഞെടുക്കുക",
        "upload-form-label-infoform-title": "വിശദാംശങ്ങൾ",
        "upload-form-label-infoform-name": "പേര്‌",
        "foreign-structured-upload-form-label-own-work": "ഇതെന്റെ സ്വന്തം സൃഷ്ടി ആണ്",
        "foreign-structured-upload-form-label-infoform-categories": "വർഗ്ഗങ്ങൾ",
        "foreign-structured-upload-form-label-infoform-date": "തീയതി",
+       "foreign-structured-upload-form-label-own-work-message-local": "{{SITENAME}} സംരംഭത്തിലെ സേവന നിബന്ധനകൾക്കും ഉപയോഗാനുമതി നയങ്ങൾക്കും അനുസരിച്ചാണ് ഈ പ്രമാണം അപ്‌ലോഡ് ചെയ്യുന്നതെന്ന് ഞാൻ സ്ഥിരീകരിക്കുന്നു.",
+       "foreign-structured-upload-form-label-not-own-work-message-local": "{{SITENAME}} സംരംഭത്തിലെ നയങ്ങളനുസരിച്ച് താങ്കൾക്ക് ഈ പ്രമാണം അപ്‌ലോഡ് ചെയ്യാൻ കഴിയില്ലെങ്കിൽ, ദയവായി ഇത് അടച്ച് മറ്റൊരു മാർഗ്ഗം ശ്രമിക്കുക.",
+       "foreign-structured-upload-form-label-not-own-work-local-local": "താങ്കൾക്ക് [[Special:Upload|സ്വതേ ഉള്ള അപ്‌ലോഡ് താളും]] പരിശോധിക്കാവുന്നതാണ്.",
        "foreign-structured-upload-form-label-own-work-message-default": "ഈ പ്രമാണം പങ്ക് വെയ്ക്കപ്പെട്ടിരിക്കുന്ന ഒരു ശേഖരത്തിലോട്ടാണ് അപ്‌ലോഡ് ചെയ്യുന്നതെന്ന് ഞാൻ മനസ്സിലാക്കുന്നു. അവിടുത്തെ ഉപയോഗ നിബന്ധനകൾക്കും അനുമതി നയങ്ങൾക്കും അനുസൃതമായാണ് ഇത് ചെയ്യുന്നതെന്ന് ഞാൻ സ്ഥിരീകരിക്കുന്നു.",
        "foreign-structured-upload-form-label-not-own-work-message-default": "പങ്ക് വെയ്ക്കപ്പെട്ടിരിക്കുന്ന ശേഖരത്തിന്റെ നയങ്ങളനുസരിച്ച് താങ്കൾക്ക് ഈ പ്രമാണം അപ്‌ലോഡ് ചെയ്യാൻ കഴിയില്ലെങ്കിൽ, ദയവായി ഇത് അടക്കുകയും മറ്റൊരു മാർഗ്ഗം ശ്രമിക്കുകയും ചെയ്യുക.",
        "foreign-structured-upload-form-label-not-own-work-local-default": "ഈ പ്രമാണം അവരുടെ നയങ്ങളുമായി ചേർന്നുപോകുമെങ്കിൽ താങ്കൾക്ക് [[Special:Upload|{{SITENAME}} സംരംഭത്തിലെ അപ്‌ലോഡ് താൾ]] പരീക്ഷിച്ചു നോക്കാവുന്നതാണ്.",
        "special-characters-title-minus": "വ്യവകലന ചിഹ്നം",
        "mw-widgets-dateinput-no-date": "തീയതി ഒന്നും തിരഞ്ഞെടുത്തിട്ടില്ല",
        "mw-widgets-titleinput-description-new-page": "താൾ ഇപ്പോൾ നിലവിലില്ല",
-       "mw-widgets-titleinput-description-redirect": "$1 എന്ന താളിലേക്കുള്ള തിരിച്ചുവിടൽ"
+       "mw-widgets-titleinput-description-redirect": "$1 എന്ന താളിലേക്കുള്ള തിരിച്ചുവിടൽ",
+       "api-error-blacklisted": "ദയവായി മറ്റൊരു വിവരണാത്മകമായ തലക്കെട്ട് തിരഞ്ഞെടുക്കുക."
 }
index 4acdba5..7248767 100644 (file)
@@ -76,7 +76,7 @@
        "tog-shownumberswatching": "पहारा देणाऱ्या सदस्यांचा आकडा दाखवा",
        "tog-oldsig": "सध्याची सही:",
        "tog-fancysig": "सही विकिसंज्ञा म्हणून वापरा (आपोआप दुव्याशिवाय)",
-       "tog-uselivepreview": "सà¤\82पादन à¤\95रता à¤\95रताà¤\9a à¤\9dलà¤\95 à¤¦à¤¾à¤\96वा (पà¥\8dरयà¥\8bà¤\97à¤\95à¥\8dषम)",
+       "tog-uselivepreview": "सà¤\9cà¥\80व à¤\9dलà¤\95 à¤¦à¤¾à¤\96वा",
        "tog-forceeditsummary": "जर ’बदलांचा आढावा’ दिला नसेल तर मला सूचित करा",
        "tog-watchlisthideown": "पहाऱ्याच्या सूचीतून माझे बदल लपवा",
        "tog-watchlisthidebots": "पहाऱ्याच्या सूचीतून सांगकाम्यांचे बदल लपवा",
        "view": "दाखवा",
        "view-foreign": "$1 वर पहा",
        "edit": "संपादन",
+       "edit-local": "स्थानिक वर्णन संपादा",
        "create": "तयार करा",
        "create-local": "स्थानिक वर्णन जोडा",
        "editthispage": "हे पृष्ठ संपादित करा",
        "jumptonavigation": "सुचालन",
        "jumptosearch": "शोध",
        "view-pool-error": "माफ करा. यावेळेस सर्व्हरवर ताण आहे. अनेक सदस्य हे पान बघण्याचा प्रयत्न करित आहेत. पुन्हा या पानावर येण्यासाठी थोडा वेळ थांबून परत प्रयत्‍न करा.\n$1",
+       "generic-pool-error": "माफ करा. यावेळेस सर्व्हरवर ताण आहे. अनेक सदस्य हे पान बघण्याचा प्रयत्न करित आहेत. पुन्हा या पानावर येण्यासाठी थोडा वेळ थांबून परत प्रयत्‍न करा.",
        "pool-timeout": "ताळ्यासाठी वाट पाहण्याची वेळ संपली",
        "pool-queuefull": "सर्व्हरवर ताण आहे.",
        "pool-errorunknown": "अपरिचित त्रुटी",
        "actionthrottled": "कृती नियामक(थ्रॉटल) केली",
        "actionthrottledtext": "अपशब्द-विरोधी उपायाच्या दृष्टीने(अँटी-अब्युज मेझर ),ही कृती थोड्या कालावधीत असंख्यवेळा करण्यापासून, तुम्हाला प्रतिबंधित करण्यात आले आहे, आणि आपण या मर्यादेचे उल्लंघन केले आहे. कृपया काही मिनीटांनंतर पुन्हा प्रयत्न करा.",
        "protectedpagetext": "हे पान बदल अथवा इतर कृती होऊ नयेत म्हणून सुरक्षित केले आहे.",
-       "viewsourcetext": "तà¥\81मà¥\8dहà¥\80 à¤¯à¤¾ à¤ªà¤¾à¤¨à¤¾à¤\9aा à¤¸à¥\8dरà¥\8bत à¤ªà¤¾à¤¹à¥\82 à¤¶à¤\95ता à¤µ à¤ªà¥\8dरत à¤\95रà¥\82 à¤¶à¤\95ता:",
-       "viewyourtext": "तुम्ही या पानाची, '''तुमची संपादने''' पाहू शकता व त्याची प्रत करू शकता:",
+       "viewsourcetext": "तà¥\81मà¥\8dहà¥\80 à¤¯à¤¾ à¤ªà¤¾à¤¨à¤¾à¤\9aा à¤¸à¥\8dरà¥\8bत à¤ªà¤¾à¤¹à¥\82 à¤µ à¤ªà¥\8dरत à¤\95रà¥\82 à¤¶à¤\95ता.",
+       "viewyourtext": "तुम्ही या पानाची,<strong>तुमची संपादने</strong> पाहू शकता व त्याची प्रत करू शकता.",
        "protectedinterface": "हे पान सॉफ्टवेअरला इंटरफेस लेखन पुरवते, म्हणून दुरूपयोग टाळण्यासाठी संरक्षित केलेले आहे.\n\nसर्व विकिंवर, अनुवाद जोडण्याकरता किंवा बदलण्याकरता अथवा शुद्धलेखन चिकित्सेकरीता , कृपया [//translatewiki.net/ translatewiki.net], या मिडियाविकि स्थानिकीकरण प्रकल्पावर जा.",
-       "editinginterface": "'''सावधान:''' तुम्ही संचेतनाचे (सॉफ्टवेअर) संपर्क माध्यम मजकूर असलेले पान संपादित करित आहात. या पानावरील बदल या विकिवरील इतर सदस्यांच्या सदस्य संपर्क माध्यमाचे स्वरूप बदलू शकते.सर्व विकिंवरील भाषांतरासाठी  कृपया मिडीयाविकि स्थानिकीकरण प्रकल्पाच्या [//translatewiki.net/ translatewiki.net]या सुविधेचा वापर करा.",
+       "editinginterface": "<strong>सावधान</strong>तुम्ही संचेतनाचे (सॉफ्टवेअर) संपर्क माध्यम मजकूर असलेले पान संपादित करित आहात. या पानावरील बदल या विकिवरील इतर सदस्यांच्या सदस्य संपर्क माध्यमाचे स्वरूप बदलू शकते.",
        "cascadeprotected": "हे पान संपादनांपासून सुरक्षित केल्या गेले आहे, कारण ते खालील {{PLURAL:$1|पानात|पानांमध्ये}} अंतर्भूत केलेले आहे,{{PLURAL:$1|जे पान|जी पाने }} निपतन पर्याय सुरु केल्यामुळे सुरक्षित आहेत:\n$2",
        "namespaceprotected": "'''$1''' नामविश्वातील पाने संपादण्याची आपणांस परवानगी नाही.",
        "customcssprotected": "या पानावर इतर सदस्याची वैयक्तिक मांडणी असल्यामुळे, तुम्हाला हे सीएसएस पान संपादित करण्याची परवानगी नाही.",
        "passwordreset-emailsent-capture": "'परवलीचा शब्द' पुनर्स्थापनेबाबत एक विपत्र पाठवण्यात आले आहे जे खाली दर्शविण्यात आले आहे.",
        "passwordreset-emailerror-capture": "'परवलीचा शब्द' पुनर्स्थापनेबाबत एक विपत्र निर्माण करण्यात आले, जे खाली दर्शविण्यात आले आहे.परंतु,{{GENDER:$2|सदस्य}}ला पाठविणे असफल झाले: $1",
        "changeemail": "विपत्रपत्ता बदला किंवा हटवा",
-       "changeemail-header": "आपल्या खात्याचा ईमेल पत्ता बदला.",
+       "changeemail-header": "आपला विपत्रपत्ता बदलण्यास हे आवेदन पूर्ण करा.जर आपणास आपल्या खात्याशी संलग्न कोणताही विपत्रपत्ता हटवायचा असेल तर,आवेदन सादर करण्यापूर्वी, नविन विपत्रपत्त्यासाठी असलेली जागा कोरी ठेवा.",
+       "changeemail-passwordrequired": "हे बदल नक्की करण्यासाठी आपणास आपला संकेतांक टाकावा लागेल.",
        "changeemail-no-info": "हे पान थेट बघण्यासठी तुम्हाला सनोंद-प्रवेशित असावे लागेल.",
        "changeemail-oldemail": "सध्याचा ईमेल पत्ता :",
        "changeemail-newemail": "नवा ईमेल पत्ता:",
        "sig_tip": "वेळेबरोबर तुमची सही",
        "hr_tip": "आडवी रेषा (अपवादानेच वापरा)",
        "summary": "बदलांचा आढावा :",
-       "subject": "विषय/मथळा:",
+       "subject": "विषय:",
        "minoredit": "हा एक छोटा बदल आहे",
        "watchthis": "या लेखावर लक्ष ठेवा",
        "savearticle": "हा लेख साठवा",
        "anonpreviewwarning": "\"'''सावधान:''' तुम्ही विकिपीडियाचे सदस्य म्हणून सनोंद-प्रवेश (लॉग-इन) केलेला नाही. या पानाच्या संपादन इतिहासात तुमचा अंकपत्ता (आय.पी. ॲड्रेस) नोंदला जाईल.\"",
        "missingsummary": "'''आठवण:''' आपण संपादन सारांश पुरवलेला नाही.आपण 'जतन करा' वर पुन्हा टिचकी मारली तर, ते त्याशिवायच जतन होईल.",
        "missingcommenttext": "कृपया खाली प्रतिक्रिया भरा.",
-       "missingcommentheader": "'''आठवण:''' आपण या लेखनाकरिता विषय किंवा मथळा दिलेला नाही. आपण पुन्हा \"{{int:savearticle}}\" वर टिचकले तर, तुमचे संपादन त्याशिवायच जतन होईल.",
+       "missingcommentheader": "<strong>आठवण:<strong> आपण या लेखनाकरिता विषय दिलेला नाही. आपण पुन्हा \"{{int:savearticle}}\" वर टिचकले तर, तुमचे संपादन त्याशिवायच जतन होईल.",
        "summary-preview": "आढाव्याची झलक:",
-       "subject-preview": "विषय/मथळा झलक:",
+       "subject-preview": "विषय झलक:",
        "blockedtitle": "हा सदस्य प्रतिबंधित आहे",
        "blockedtext": "'''तुमचे सदस्यनाव अथवा IP पत्ता ब्लॉक केलेला आहे.'''\n\nहा ब्लॉक $1 यांनी केलेला आहे.\nयासाठी ''$2'' हे कारण दिलेले आहे.\n\n* ब्लॉकची सुरूवात: $8\n* ब्लॉकचा शेवट: $6\n* कुणाला ब्लॉक करायचे आहे: $7\n\nतुम्ही ह्या ब्लॉक संदर्भातील चर्चेसाठी $1 अथवा [[{{MediaWiki:Grouppage-sysop}}|प्रबंधकांशी]] संपर्क करू शकता.\nतुम्ही जोवर वैध ई-मेल पत्ता आपल्या [[Special:Preferences|'माझ्या पसंती']] पानावर देत नाही तोवर तुम्ही ’सदस्याला ई-मेल पाठवा’ हा दुवा वापरू शकत नाही. तसेच असे करण्यापासून आपल्याला ब्लॉक केलेले नाही.\nतुमचा सध्याचा IP पत्ता $3 हा आहे, व तुमचा ब्लॉक क्रमांक #$5 हा आहे.\nकृपया या संदर्भातील चर्चेमध्ये वरील सर्व तपशिल उद्घृत करा.",
        "autoblockedtext": "तुमचा आंतरजालीय अंकपत्ता आपोआप स्थगित केला आहे कारण तो इतर अशा सदस्याने वापरला, ज्याला $1ने प्रतिबंधित केले.\nआणि दिलेले कारण खालील प्रमाणे आहे\n:''$2''\nब्लॉकची सुरूवात: $8\nब्लॉकचा शेवट: $6\nकुणाला ब्लॉक करायचे आहे: $7\n\nतुम्ही $1शी संपर्क करू शकता किंवा इतर [[{{MediaWiki:Grouppage-sysop}}|प्रबंधकां पैकी]] एकाशी स्थगनाबद्दल चर्चा करू शकता.\n\n[[Special:Preferences|सदस्य पसंतीत]]त शाबीत विपत्र पत्ता नमूद असल्या शिवाय आणि तुम्हाला  तो वापरण्या पासून प्रतिबंधित केले असल्यास तुम्ही  \"या सदस्यास विपत्र पाठवा\" सुविधा  वापरू शकणार नाही.\nतुमचा सध्याचा IP पत्ता $3 हा आहे, व तुमचा ब्लॉक क्रमांक #$5 हा आहे. \nतुमचा स्थगन क्र $5 आहे. कृपया या संदर्भातील चर्चेमध्ये वरील सर्व तपशिल उद्घृत करा.",
        "parser-template-recursion-depth-warning": "साचा पुनरावर्तन खोली मर्यादा ओलांडली ($1)",
        "language-converter-depth-warning": "भाषा रुपांतरण खोली मर्यादा ओलांडली ($1)",
        "node-count-exceeded-category": "लेख जेथे निस्पंद-गणना(नोड-काऊंट) पार केल्या गेला",
-       "node-count-exceeded-warning": "लेखाची पर्वसंधि-गणना(नोड-काऊंट) पार झाली",
+       "node-count-exceeded-warning": "लेखाची पर्वसंधि-गणना(नोड-काऊंट)मर्यादा पार झाली",
        "expansion-depth-exceeded-category": "लेख जेथे विस्तार-तळ(एक्सपांशन डेप्थ) पार केल्या गेली",
        "expansion-depth-exceeded-warning": "लेखाने विस्तार-तळ(एक्सपांशन डेप्थ) पार केला",
        "parser-unstrip-loop-warning": "'अनस्ट्रिप'(अरोखीत) वलय(लुप) आढळले",
        "upload-too-many-redirects": "या आंतरजालपत्त्यात खूप पुनर्निर्देशने आहेत",
        "upload-http-error": "एक एचटीटीपी चूक उद्भवली: $1",
        "upload-copy-upload-invalid-domain": "संक्रमित केलेली महिती अधिक्षेत्रात उपलब्ध नाही.",
+       "upload-dialog-title": "संचिकेचे अपभारण करा",
+       "upload-dialog-button-cancel": "रद्द करा",
+       "upload-dialog-button-done": "झाले",
+       "upload-dialog-button-save": "जतन करा",
+       "upload-dialog-button-upload": "अपभारण करा",
+       "upload-form-label-select-file": "संचिका निवडा",
+       "upload-form-label-infoform-title": "तपशील",
+       "upload-form-label-infoform-name": "नाव",
+       "upload-form-label-infoform-description": "वर्णन",
+       "upload-form-label-usage-title": "वापर",
+       "upload-form-label-usage-filename": "संचिका नाम",
        "foreign-structured-upload-form-label-own-work": "हे माझे स्वत:चे काम आहे",
+       "foreign-structured-upload-form-label-infoform-categories": "वर्ग",
+       "foreign-structured-upload-form-label-infoform-date": "दिनांक",
        "backend-fail-stream": "$1 या संचिकेचा स्त्रोत शोधता आला नाही.",
        "backend-fail-backup": "$1 या संचिकेची आधारप्रत बनविता आली नाही.",
        "backend-fail-notexists": "$1 ही संचिका अस्तित्वात नाही.",
        "license": "परवाना:",
        "license-header": "परवाना:",
        "nolicense": "काही निवडलेले नाही",
+       "licenses-edit": "परवान्याच्या विकल्पाचे संपादन करा",
        "license-nopreview": "(झलक उपलब्ध नाही)",
-       "upload_source_url": "(एक सुयोग्य,सार्वजनिकरित्या उपलब्ध URL)",
-       "upload_source_file": "(तुमच्या संगणकावरील एक संचिका)",
+       "upload_source_url": "(एक सुयोग्य,सार्वजनिकरित्या उपलब्ध URL निवडली आहे)",
+       "upload_source_file": "(तुमच्या संगणकावरील एक संचिका निवडली आहे)",
+       "listfiles-delete": "वगळा",
        "listfiles-summary": "हे विशेष पान सर्व अपभारिलेल्या संचिका दर्शिविते.",
        "listfiles_search_for": "चित्र नावाने शोध:",
+       "listfiles-userdoesnotexist": "सदस्यखाते \"$1\"  हे नोंदलेले नाही.",
        "imgfile": "संचिका",
        "listfiles": "चित्र यादी",
        "listfiles_thumb": "नखुले",
        "filerevert-legend": "संचिका पूर्वपदास",
        "filerevert-intro": "तुम्ही [$3, $2 प्रमाणे आवर्तन$4 कडे]<strong>[[Media:$1|$1]]</strong>  उलटवत आहात.",
        "filerevert-comment": "कारण:",
-       "filerevert-defaultcomment": "$2, $1 à¤\9aà¥\8dया à¤\86वà¥\83तà¥\8dतà¥\80त à¤ªà¥\82रà¥\8dवपदास",
+       "filerevert-defaultcomment": "$2, $1 à¤\9aà¥\8dया à¤\86वà¥\83तà¥\8dतà¥\80स à¤ªà¥\82रà¥\8dवपदावर ($3)",
        "filerevert-submit": "पूर्वपद",
        "filerevert-success": "[$3, $2 प्रमाणे आवर्तन $4]कडे<strong>[[Media:$1|$1]]</strong>उलटवण्यात आली.",
        "filerevert-badversion": "दिलेलेल्या वेळ मापनानुसार,या संचिकेकरिता कोणतीही पूर्वीची स्थानिक आवृत्ती नाही.",
        "filedelete-maintenance": "देखभालीदरम्यान, संचिका वगळणे व पुनर्स्थापित करणे तात्पुरते अक्षम केल्या गेले आहे.",
        "filedelete-maintenance-title": "संचिका (फाईल) वगळू शकत नाही.",
        "mimesearch": "विविधामाप (माईम) शोधा",
-       "mimesearch-summary": "हे पान विविधामाप (माईम)-प्रकारांकरिता संचिकांची चाळणी करण्याची सुविधा पुरवते:\nInput:contenttype/subtype, e.g. <code>image/jpeg</code>.",
+       "mimesearch-summary": "हे पान विविधामाप (माईम)-प्रकारांकरिता संचिकांची चाळणी करण्याची सुविधा पुरवते.\nInput:contenttype/subtype, e.g. <code>image/jpeg</code>.",
        "mimetype": "विविधामाप (माईम) प्रकार:",
        "download": "अधिभारण करा",
        "unwatchedpages": "देखरेख नसलेली पाने",
        "randomincategory": "वर्गातील अनियत पान",
        "randomincategory-invalidcategory": "\"$1\" हे अधिकृत वर्गाचे नाव नाही.",
        "randomincategory-nopages": "[[:Category:$1]] यात काहीच पाने नाहीत.",
+       "randomincategory-category": "वर्ग:",
+       "randomincategory-legend": "वर्गातील अविशिष्ट पान",
        "randomincategory-submit": "चला",
        "randomredirect": "अविशिष्ट पुनर्निर्देशन",
        "randomredirect-nopages": "$1 या नामविश्वात कोणतीही पुर्ननिर्देशने नाहीत.",
        "pageswithprop-prophidden-binary": "बायनरी गुणधर्माची किंमत लपविलेली आहे ($1)",
        "doubleredirects": "दुहेरी-पुनर्निर्देशने",
        "doubleredirectstext": "हे पान, अशा पानांची यादी पुरवते की जी पाने, दुसऱ्या पुर्ननिर्देशीत पानाकडे पुर्ननिर्देशीत झाली आहेत.प्रत्येक ओळीत पहिल्या आणि दुसऱ्या पुर्ननिर्देशनाचा दुवा दिला आहे,तसेच, दुसऱ्या  पुर्ननिर्देशनाचे लक्ष्य पान पण दिले आहे,जे मुळात ते \nलक्ष्यपान आहे ज्याकडे, पहिले पुनर्निर्देशन असावयास हवे.\n\n<del>खोडलेल्या प्रविष्टी</del>समायोजित करण्यात आलेल्या आहेत.",
-       "double-redirect-fixed-move": "[[$1]] हलवले गेले आहे.\nते आता [[$2]] येथे निर्देशित होते.",
+       "double-redirect-fixed-move": "[[$1]] हलवले गेले आहे.\nते आता स्वयंचलितरित्या अद्यतन केल्या गेले व [[$2]] येथे निर्देशित होते.",
        "double-redirect-fixed-maintenance": "[[$1]] ते [[$2]] हे चुकीचे पुनर्निर्देशन ठिकठाक केले.",
        "double-redirect-fixer": "पुनर्निर्देशन ठिकठाक करणारा",
        "brokenredirects": "मोडकी पुनर्निर्देशने",
        "listgrouprights-removegroup-self": "स्वतःच्या खात्यातून हे {{PLURAL:$2|गट}} वगळा: $1",
        "listgrouprights-addgroup-self-all": "सर्व गट स्वतःच्या खात्यात जोडा",
        "listgrouprights-removegroup-self-all": "सर्व गट स्वतःच्या खात्यातून काढून टाका",
+       "listgrouprights-namespaceprotection-header": "नामविश्व प्रतिबंध",
+       "listgrouprights-namespaceprotection-namespace": "नामविश्व",
+       "trackingcategories": "वर्ग शोधत आहोत",
+       "trackingcategories-name": "संदेश नाम",
        "mailnologin": "पाठविण्याचा पत्ता नाही",
        "mailnologintext": "इतर सदस्यांना विपत्र(ई-मेल) पाठवण्याकरिता तुम्ही [[Special:UserLogin|प्रवेश केलेला]] असणे आणि  प्रमाणित (ई-मेल) पत्ता तुमच्या [[Special:Preferences|पसंतीत]] नमूद असणे आवश्यक आहे.",
        "emailuser": "या सदस्याला ई-मेल पाठवा",
        "rollback-success": "$1 ने उलटवलेली संपादने;$2 च्या आवृत्तीस परत नेली.",
        "sessionfailure-title": "सत्र त्रुटी",
        "sessionfailure": "तुमच्या दाखल सत्रात काही समस्या दिसते;सत्र अपहारणापासून \nवाचविण्याचे दृष्टीने ही कृती रद्द केल्या गेली आहे.कृपया आपल्या विचरकाच्या \"back\" कळीवर टिचकी मारा आणि तुम्ही ज्या पानावरून आला ते पुन्हा चढवा,आणि परत प्रयत्न करा.",
+       "changecontentmodel-title-label": "लेखपान शीर्ष",
+       "changecontentmodel-reason-label": "कारण:",
        "protectlogpage": "सुरक्षा नोंदी",
        "protectlogtext": "पानांना लावलेल्या ताळ्यांची आणि ताळे उघडण्याबद्दलच्या पानाची खाली सूची दिली आहे.सध्याच्या सुरक्षित पानांबद्दलच्या माहितीकरिता [[Special:ProtectedPages|सुरक्षीत पानांची सूची]] पहा.",
        "protectedarticle": "\"[[$1]]\" सुरक्षित केला",
        "undeletepagetext": "खालील {{PLURAL:$1|पान वगळले आहे तरीसुद्धा विदागारात जतन आहे आणि पुनर्स्थापित करणे शक्य आहे|$1 पाने वगळली आहेत तरी सुद्धा विदागारात जतन आहेत आणि पुनर्स्थापित करणे शक्य आहेत}}. विदागारातील साठवण ठरावीक कालावधीने स्वच्छ करता येते.",
        "undelete-fieldset-title": "आवर्तने पुनर्स्थापित करा",
        "undeleteextrahelp": "पानाचा संपूर्ण इतिहास पुनर्स्थापित करण्यासाठी,साऱ्या चौकटपेट्या (चेकबॉक्सेस) रिकाम्या ठेवा\nआणि  '''''{{int:undeletebtn}}''''' वर टिचकी मारा. निवडक पुनर्स्थापन करण्याकरिता, ज्या आवर्तनांचे पुनर्स्थापन करावयाचे त्यांचेशी सुसंगत चौकटपेट्या (चेकबॉक्सेस) निवडा , आणि '''''{{int:undeletebtn}}''''' वर टिचकी मारा.",
-       "undeleterevisions": "$1 {{PLURAL:$1|आवर्तन|आवर्तने}}विदागारात संचीत",
+       "undeleterevisions": "$1 {{PLURAL:$1|आवर्तन वगळले|आवर्तने वगळली}}",
        "undeletehistory": "जर तुम्ही पान पुनर्स्थापित केले तर ,सारी आवर्तने इतिहासात पुनर्स्थापित होतील.\nवगळल्या पासून त्याच नावाचे नवे पान तयार केले गेले असेले तर, पुनर्स्थापित आवर्तने पाठीमागील इतिहासात दिसतील. पुनर्स्थापना नंतर संचिकांच्या आवर्तनांवरील बंधने गळून पडतील याची नोंद घ्या.",
        "undeleterevdel": "पृष्ठ पानाचे आवर्तन अर्धवट वगळले जाणार असेल तर पुनर्स्थापनाची कृती केली जाणार नाही.\nअशा प्रसंगी, तुम्ही अगदी अलीकडील वगळलेली आवर्तने अनचेक किंवा अनहाईड केलीच पाहिजे.",
        "undeletehistorynoadmin": "हे पान वगळले गेले आहे.वगळण्याचे कारण खालील आढाव्यात,वगळण्यापूर्वी संपादित करणाऱ्या संपादकांच्या माहिती सोबत,दाखवले आहे. वगळलेल्या आवर्तनांचा नेमका मजकूर केवळ प्रचालकांना उपलब्ध असेल.",
        "move-page-legend": "पृष्ठ स्थानांतरण",
        "movepagetext": "खालील अर्ज हा एखाद्या लेखाचे शीर्षक बदलण्यासाठी वापरता येईल. खालील अर्ज भरल्यानंतर लेखाचे शीर्षक बदलले जाईल तसेच त्या लेखाचा सर्व इतिहास हा नवीन लेखामध्ये स्थानांतरित केला जाईल.\nजुने शीर्षक नवीन शीर्षकाला पुनर्निर्देशित करेल.\nजुन्या शीर्षकाला असलेले दुवे बदलले जाणार नाहीत, तरी तुम्हाला विनंती आहे की स्थानांतरण केल्यानंतर\n[[Special:DoubleRedirects|दुहेरी]] अथवा [[Special:BrokenRedirects|मोडकी]] पुनर्निर्देशने तपासावीत.\nचुकीचे दुवे टाळण्याची जबाबदारी सर्वस्वी तुमच्यावर राहील.\n\nजर नवीन शीर्षकाचा लेख अस्तित्वात असेल तर स्थानांतरण होणार '''नाही'''.\nपण जर नवीन शीर्षकाचा लेख हा रिकामा असेल अथवा पुनर्निर्देशन असेल (म्हणजेच त्या लेखाला जर संपादन इतिहास नसेल) तर स्थानांतरण होईल. याचा अर्थ असा की जर काही चूक झाली तर तुम्ही पुन्हा जुन्या शीर्षकाकडे स्थानांतरण करू शकता.\n\n'''सूचना!'''\nस्थानांतरण केल्यास एखाद्या महत्वाच्या लेखामध्ये अनपेक्षित बदल होऊ शकतात. तुम्हाला विनंती आहे की तुम्ही पूर्ण काळजी घ्या व होणारे परिणाम समजावून घ्या.\nजर तुम्हाला शंका असेल तर प्रबंधकांशी संपर्क करा.",
        "movepagetext-noredirectfixer": "खालील अर्ज हा एखाद्या लेखाचे शीर्षक बदलण्यासाठी वापरता येईल. खालील अर्ज भरल्यानंतर लेखाचे शीर्षक बदलले जाईल तसेच त्या लेखाचा सर्व इतिहास हा नवीन लेखामध्ये स्थानांतरित केला जाईल.\n\nजुने शीर्षक नवीन शीर्षकाकडे पुनर्निर्देशित करेल.\n\n[[Special:DoubleRedirects|दुहेरी]] अथवा [[Special:BrokenRedirects|मोडकी]] पुनर्निर्देशनांकरीता तपासण्याची काळजी घ्या.\nउपलब्ध दुवे  जिथे उघडणे अभिप्रेत होते तसेच उघडतील याची तुम्ही जबाबदारी घेत आहात\n\nजर नवीन शीर्षकाचा लेख अस्तित्वात असेल तर स्थानांतरण होणार '''नाही'''.\nपण जर नवीन शीर्षकाचा लेख हा रिकामा असेल अथवा पुनर्निर्देशन असेल (म्हणजेच त्या लेखाला जर संपादन इतिहास नसेल) तर स्थानांतरण होईल. याचा अर्थ असा की जर काही चूक झाली तर तुम्ही पुन्हा जुन्या शीर्षकाकडे स्थानांतरण करू शकता.\n<strong>ईशारा!</strong>\nअसे केल्याने एखाद्या महत्वाच्या/लोकप्रीय लेखामध्ये अनपेक्षित आणि महत्वाचे बदल होऊ शकतात. तुम्हाला विनंती आहे की तुम्ही पूर्ण काळजी घ्या व होणारे परिणाम समजावून घ्या.\nजर तुम्हाला शंका असेल तर प्रचालक/प्रबंधकांशी संपर्क करा.",
-       "movepagetalktext": "सà¤\82बà¤\82धित à¤\9aरà¥\8dà¤\9aा à¤ªà¥\83षà¥\8dठ à¤¯à¤¾à¤¬à¤°à¥\8bबर à¤¸à¥\8dथानाà¤\82तरà¥\80त à¤¹à¥\8bणार à¤¨à¤¾à¤¹à¥\80 '''à¤\9cर:'''\n* à¤¤à¥\81मà¥\8dहà¥\80 à¤ªà¥\83षà¥\8dठ à¤¦à¥\81सऱà¥\8dया à¤¨à¤¾à¤®à¤µà¤¿à¤¶à¥\8dवात à¤¸à¥\8dथानाà¤\82तरà¥\80त à¤\95रत à¤\85साल\n* à¤¯à¤¾ à¤¨à¤¾à¤µà¤¾à¤\9aà¥\87 à¤\9aरà¥\8dà¤\9aा à¤ªà¤¾à¤¨ à¤\85à¤\97à¥\8bदरà¤\9a à¤\85सà¥\8dतितà¥\8dवात à¤\85सà¥\87ल à¤¤à¤°, à¤\95िà¤\82वा\n* à¤\96ालà¥\80ल à¤\9aà¥\8cà¤\95à¤\9fपà¥\87à¤\9fà¥\80 (à¤\9aà¥\87à¤\95बà¥\89à¤\95à¥\8dस) à¤°à¤¿à¤\95ामà¥\80 à¤ à¥\87वलà¥\80 à¤¤à¤°.\n\nया à¤¬à¤¾à¤¬à¤¤à¥\80त à¤¤à¥\81मà¥\8dहाला à¤¸à¥\8dवतà¤\83ला à¤¹à¥\80 à¤ªà¤¾à¤¨à¥\87 à¤\8fà¤\95तà¥\8dर करावी लागतील.",
+       "movepagetalktext": "à¤\9cर à¤\86पण à¤¹à¤¾ à¤¬à¥\89à¤\95à¥\8dस 'à¤\9aà¥\87à¤\95' à¤\95à¥\87ला à¤¤à¤°,यातà¥\80ल à¤¸à¤\82लà¤\97à¥\8dन à¤\9aरà¥\8dà¤\9aा à¤ªà¤¾à¤¨à¥\87 à¤\86पà¥\8bà¤\86प à¤¨à¤µà¤¿à¤¨ à¤®à¤¥à¤³à¥\8dयास à¤¸à¤\82लà¤\97à¥\8dन à¤¹à¥\8bतà¥\80ल.(तà¥\87थà¥\87 à¤ªà¥\81रà¥\8dवà¥\80à¤\9a à¤²à¤¿à¤¹à¤¿à¤²à¥\87लà¥\87 à¤\9aरà¥\8dà¤\9aापान à¤¨à¤¸à¥\87ल à¤¤à¤°)\n\nया à¤¬à¤¾à¤¬à¤¤à¥\80त à¤¤à¥\81मà¥\8dहाला à¤¸à¥\8dवतà¤\83ला à¤¹à¥\80 à¤ªà¤¾à¤¨à¥\87 à¤¸à¥\8dवत:à¤\9a à¤¹à¤²à¤µà¤¾à¤µà¥\80 à¤\95िà¤\82वा à¤µà¤¿à¤²à¥\80न करावी लागतील.",
        "moveuserpage-warning": "'''सावधान:''' आपण एक सदस्य पान स्थलांतरित करत आहात. कृपया लक्षात घ्या की, फक्त हे पान स्थलांतरित होइल, सदस्य नाम बदलले जाणार नाही.",
        "movenologintext": "पान स्थानांतरित करण्यासाठी तुम्ही नोंदीकृत सदस्य हवे व तुम्हाला [[Special:UserLogin|सनोंद-प्रवेश]] करावा लागेल.",
        "movenotallowed": "{{SITENAME}}वरील पाने स्थानांतरीत करण्याची आपल्यास परवानगी नाही.",
        "thumbnail_image-missing": "संचिका सापडत नाही: $1",
        "thumbnail_image-failure-limit": "हे नखुले देण्यासाठी नुकतेच अनेक अयशस्वी प्रयत्न($1 किंवा अधिक) केल्या गेले आहेत.कृपया नंतर पुन्हा प्रयत्न करा.",
        "import": "पाने आयात करा",
-       "importinterwiki": "à¤\86à¤\82तरविà¤\95ि à¤\86यात",
+       "importinterwiki": "दà¥\81सऱà¥\8dया à¤µà¤¿à¤\95à¥\80वरà¥\81न à¤\86यात à¤\95रा",
        "import-interwiki-text": "आयात करण्याकरिता एक विकि आणि पानाचा मथळा निवडा.\nआवर्तनांच्या तारखा आणि संपादकांची नावे जतन केली जातील.\nसर्व आंतरविकि आयात क्रिया [[Special:Log/import|आयात नोंदीत]] दाखल केल्या आहेत.",
+       "import-interwiki-sourcewiki": "स्रोत विकि:",
+       "import-interwiki-sourcepage": "स्रोत पान:",
        "import-interwiki-history": "या पानाकरिताची साऱ्या इतिहास आवर्तनांची नक्कल करा",
        "import-interwiki-templates": "साचे आंतरभूत करा",
        "import-interwiki-submit": "आयात",
        "autosumm-replace": "पान '$1' वापरून बदलले.",
        "autoredircomment": "[[$1]] कडे पुनर्निर्देशित",
        "autosumm-new": "नवीन पान \"$1\"",
+       "autosumm-newblank": "रिकामे पान बनविले",
        "size-bytes": "$1 बा.",
        "size-kilobytes": "$1 कि.बा.",
        "size-megabytes": "$1 मे.बा.",
        "watchlistedit-raw-done": "तुमची पहाऱ्याची सूची परिष्कृत करण्यात आली आहे.",
        "watchlistedit-raw-added": "{{PLURAL:$1|1 शीर्षक होते |$1 शीर्षक होती }} भर घातली:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|1 शीर्षक होते |$1 शीर्षक होती }} वगळले:",
+       "watchlistedit-clear-title": "निरीक्षणसूची साफ केली",
+       "watchlistedit-clear-legend": "निरीक्षणसूची साफ करा",
+       "watchlistedit-clear-explain": "आपल्या ननिरीक्षणसूचीतील सर्व शिर्षक हटविल्या जातील.",
+       "watchlistedit-clear-titles": "शिर्षके:",
+       "watchlisttools-clear": "निरीक्षणसूची साफ करा",
        "watchlisttools-view": "संबंधित बदल पहा",
        "watchlisttools-edit": "पहाऱ्याची  सूची पहा आणि संपादित करा",
        "watchlisttools-raw": "नित्य पहाण्याची कच्ची-सूची संपादित करा",
        "version-entrypoints": "आत येणारी यू॰आर॰एल",
        "version-entrypoints-header-entrypoint": "आत येण्याचा मार्ग",
        "version-entrypoints-header-url": "यू॰आर॰एल",
+       "version-libraries-library": "ग्रंथालय",
+       "version-libraries-version": "आवृत्ती",
+       "version-libraries-license": "परवाना",
+       "version-libraries-description": "वर्णन",
+       "version-libraries-authors": "लेखक",
        "redirect": "संचिका,सदस्य किंवा आवृत्ती या ओळखणीनुसार पुनर्निर्देशन",
        "redirect-legend": "संचिका अथवा पानास पुनर्निर्देशन",
        "redirect-summary": "हे विशेष पान एक संचिकेस पुनर्निर्देशित करते(दिलेले संचिकानाम),एक पान(दिलेली आवृत्ती किंवा पान ओळखण) किंवा एक सदस्यपान(दिलेला सदस्य अंक).\nवापर:[[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], किंवा [[{{#Special:Redirect}}/user/101]].",
        "tags-tag": "खूण नाव",
        "tags-display-header": "बदल सुचीवर कसे दिसेल",
        "tags-description-header": "अर्थाची पूर्ण माहिती",
+       "tags-source-header": "स्रोत",
        "tags-active-header": "सक्रिय?",
        "tags-hitcount-header": "खुणा केलेले बदल",
+       "tags-actions-header": "क्रिया",
        "tags-active-yes": "होय",
        "tags-active-no": "नाही",
+       "tags-source-none": "वापरात नाही",
        "tags-edit": "संपादन करा",
+       "tags-delete": "वगळा",
+       "tags-activate": "सक्रीय करा",
+       "tags-deactivate": "निष्क्रिय करा",
        "tags-hitcount": "$1 {{PLURAL:$1|बदल|बदल}}",
+       "tags-create-heading": "नवीन बिल्ला तयार करा",
+       "tags-create-reason": "कारण:",
+       "tags-create-submit": "निर्मित करा",
+       "tags-delete-reason": "कारण:",
+       "tags-activate-reason": "कारण:",
+       "tags-activate-submit": "सक्रीय करा",
+       "tags-deactivate-reason": "कारण:",
+       "tags-deactivate-submit": "निष्क्रिय करा",
+       "tags-edit-reason": "कारण:",
        "comparepages": "पानांची तुलना करा",
        "compare-page1": "पान १",
        "compare-page2": "पान २",
        "htmlform-no": "नाही",
        "htmlform-yes": "होय",
        "htmlform-chosen-placeholder": "पर्याय निवडा",
+       "htmlform-cloner-create": "अधिक जोडा",
+       "htmlform-cloner-delete": "हटवा",
+       "htmlform-cloner-required": "किमान एक किंमत हवी",
+       "htmlform-title-not-exists": "[[:$1]] अस्तीत्वात नाही.",
+       "htmlform-user-not-exists": "<strong>$1</strong> अस्तीत्वात नाही.",
+       "htmlform-user-not-valid": "<strong>$1</strong> हे वैध सदस्यनाम नाही.",
        "sqlite-has-fts": "पूर्ण-मजकूर शोध समर्थनासहित $1",
        "sqlite-no-fts": "पूर्ण-मजकूर शोध समर्थनाविरहित $1",
        "logentry-delete-delete": "$1 {{GENDER:$2|वगळलेले पान}} $3",
        "rightsnone": "(काहीही नाही)",
        "revdelete-summary": "संपादन माहिती",
        "feedback-adding": "आपला पश्चप्रदाय (फिडबॅक)  जोडत आहोत या पानास.......",
+       "feedback-back": "परत",
        "feedback-bugcheck": "उत्तम! फक्त एकदा खात्री करा की हा [$1 अगोदरच माहिती असलेला बग] तर नाहीये.",
        "feedback-bugnew": "मी तपासले आहे. हा एक नवीन बग म्हणून नोंद करावी",
        "feedback-bugornote": "जर आपण तांत्रिक प्रश्न  विस्तृतपणे मांडण्यास तयार असाल तर कृपया [$1 गणकदोष वृतांत] पाठवा. नपेक्षा, खाली देण्यात आलेले सोपे आवेदनपत्र वापरा. आपली टिप्पणी \"[$3 $2]\" या पानास आपले सदस्यनाव व आपण कोणता ब्राउजर वापरता यासह जोडण्यात येईल.",
        "feedback-cancel": "रद्द करा",
        "feedback-close": "झाले",
+       "feedback-error-title": "चूक",
        "feedback-error1": "चूक: API कडून अनोळखी परिणाम",
        "feedback-error2": "त्रुटी: संपादन रद्द",
        "feedback-error3": "त्रुटी:एपीआय तर्फे काहीच प्रत्युत्तर नाही",
        "api-error-badaccess-groups": "आपणास ह्या विकिवर संचिका चढवण्याची परवानगी नाही",
        "api-error-badtoken": "अंतर्गत चूक: अयोग्य टोकन",
        "api-error-copyuploaddisabled": "या विदागारावर 'संकेतस्थळावरील संचिका चढविणे' अक्षम करण्यात आले आहे.",
-       "api-error-duplicate": "या संकेतस्थळावर यासारखाच आशय असलेली {{PLURAL:$1|संचिका आहे दुसरी संचिका| दुसऱ्या संचिका}} आहेत.",
-       "api-error-duplicate-archive": "{{PLURAL:$1| another file| some other files}} हे याच नावाने साईट वर आहे आणि   पान {{PLURAL:$1|it was|they were}} वगळले गेले आहे",
+       "api-error-duplicate": "{{PLURAL:$1|दुसरी संचिका|दुसऱ्या इतर संचिका}}ही याच नावाने व याच आशयासह संकेतस्थळावर आहेत.",
+       "api-error-duplicate-archive": "{{PLURAL:$1|दुसरी संचिका|दुसऱ्या इतर संचिका}}ही याच नावाने व याच आशयासह संकेतस्थळावर आहे परंतु{{PLURAL:$1|ते वगळल्या गेले|ती वगळल्या गेलीत}}",
        "api-error-empty-file": "तुम्ही प्रस्तुत केलेली संचिका रिकामी होती.",
        "api-error-emptypage": "नवीन आणि मोकळी पाने बनवायला परवानगी नाही",
        "api-error-fetchfileerror": "अंतर्गत चूक: फाइल मिळवतांना काहीतरी चूक झाली आहे",
        "expand_templates_remove_nowiki": "निकालात <nowiki>खूणपतका दाखवू नका",
        "expand_templates_generate_xml": "XML चा पार्स (parse) वृक्ष दाखवा",
        "expand_templates_preview": "झलक",
+       "pagelang-name": "पान",
+       "mediastatistics-header-office": "कार्यालय",
        "special-characters-group-latin": "लॅटीन",
        "special-characters-group-latinextended": "विस्तारीत लॅटीन भाषा",
        "special-characters-group-ipa": "आंतरराष्ट्रीय उच्चारानुरूप अक्षरपद्धती",
        "special-characters-group-thai": "थाई भाषा",
        "special-characters-group-lao": "लाऒ भाषा",
        "special-characters-group-khmer": "ख्मेर",
-       "special-characters-title-minus": "ॠण चिन्ह"
+       "special-characters-title-minus": "ॠण चिन्ह",
+       "mw-widgets-dateinput-no-date": "कोणताही दिनांक निवडला नाही",
+       "mw-widgets-titleinput-description-new-page": "अद्याप पान अस्तित्वात नाही",
+       "api-error-blacklisted": "कुपया वेगळे वर्णनात्मक शीर्षक निवडा"
 }
index 67508af..8847169 100644 (file)
        "special-characters-group-khmer": "Khmer",
        "special-characters-title-endash": "sengkang en",
        "special-characters-title-emdash": "sengkang em",
-       "special-characters-title-minus": "tanda tolak"
+       "special-characters-title-minus": "tanda tolak",
+       "api-error-blacklisted": "Sila pilih tajuk yang berbeza dan deskriptif."
 }
index 41bc527..af31a1c 100644 (file)
        "special-characters-group-lao": "Lao",
        "special-characters-group-khmer": "Khmer",
        "mw-widgets-dateinput-placeholder-day": "SSSS-XX-ĠĠ",
-       "mw-widgets-dateinput-placeholder-month": "SSSS-XX"
+       "mw-widgets-dateinput-placeholder-month": "SSSS-XX",
+       "api-error-blacklisted": "Jekk jogħġbok agħżel titlu differenti u deskrittiv."
 }
index 216e2f1..6728fed 100644 (file)
        "api-error-unknown-error": "خطای داخلی: زمونی که شما تلاش کاردنی باربی‌یشتن پرونده ره انجوم هادین، اتا چی اشتباه پیش بورده.",
        "api-error-unknown-warning": "اخطار نشناسی‌یه: $1",
        "api-error-uploaddisabled": "باربی‌یشتن این ویکی دله غیرفعاله.",
-       "api-error-verification-error": "ممکن هسته که پرونده رِقِد بورد بائه یا پسوند غلط داره."
+       "api-error-verification-error": "ممکن هسته که پرونده رِقِد بورد بائه یا پسوند غلط داره.",
+       "api-error-blacklisted": "اتا عنوان توصیفی دیگه انتخاب هاکنین."
 }
index c306165..08b2530 100644 (file)
        "prefs-help-recentchangescount": "Chesto ntenne ll'urdeme cagnamiente, 'e cronologgie 'e paggena, e riggistre.",
        "prefs-help-watchlist-token2": "Chest'è 'a chiave segreta pe se ffà 'o feed web 'e l'elenco 'e cuntrolo d' 'o vuosto.\nSi coccheruno 'a cunoscesse, allora putesse vedé l'elenco 'e cuntrollo, picciò nun 'a spartite. [[Special:ResetTokens|Cliccate ccà se tenite necessità d' 'a rimpizzà]].",
        "savedprefs": "'E preferenze songo state sarvate.",
+       "savedrights": "'E dritte 'e l'utente {{GENDER:$1|$1}} sto state sarvate.",
        "timezonelegend": "Fuso orario:",
        "localtime": "Ora lucale:",
        "timezoneuseserverdefault": "Aúsa ora predefinita d' 'o wiki ($1)",
        "upload-dialog-button-done": "Fatto",
        "upload-dialog-button-save": "Sarva",
        "upload-dialog-button-upload": "Carreca",
-       "upload-process-error": "N'errore cumparette",
-       "upload-process-warning": "N'avviso cumparette",
        "upload-form-label-select-file": "Sceglie file",
        "upload-form-label-infoform-title": "Dettaglie",
        "upload-form-label-infoform-name": "Nomme",
        "svg-long-error": "File SVG invalido: $1",
        "show-big-image": "File 'e origgine",
        "show-big-image-preview": "Dimenziune 'e sta anteprimma: $1.",
+       "show-big-image-preview-differ": "Grannezza 'e sta $3 mostra 'e stu $2 file: $1.",
        "show-big-image-other": "{{PLURAL:$2|N'ata resoluzione|Ati resoluziune}}: $1.",
        "show-big-image-size": "$1 x $2 pixel",
        "file-info-gif-looped": "ciclico",
        "special-characters-title-minus": "segno meno",
        "mw-widgets-dateinput-no-date": "Nisciuna data scigliuta",
        "mw-widgets-titleinput-description-new-page": "'a pàggene nun esiste ancore",
-       "mw-widgets-titleinput-description-redirect": "redirezionate ncopp' a $1"
+       "mw-widgets-titleinput-description-redirect": "redirezionate ncopp' a $1",
+       "api-error-blacklisted": "Pe' piacere sciglite nu titolo differente e descrittivo."
 }
index fe94033..10c8d76 100644 (file)
        "upload-dialog-button-done": "Utført",
        "upload-dialog-button-save": "Lagre",
        "upload-dialog-button-upload": "Last opp",
-       "upload-process-error": "En feil oppstod",
-       "upload-process-warning": "En advarsel oppstod",
        "upload-form-label-select-file": "Velg fil",
        "upload-form-label-infoform-title": "Detaljer",
        "upload-form-label-infoform-name": "Navn",
        "mw-widgets-dateinput-placeholder-day": "ÅÅÅÅ-MM-DD",
        "mw-widgets-dateinput-placeholder-month": "ÅÅÅÅ-MM",
        "mw-widgets-titleinput-description-new-page": "side eksisterer ikke enda",
-       "mw-widgets-titleinput-description-redirect": "omdiriger til $1"
+       "mw-widgets-titleinput-description-redirect": "omdiriger til $1",
+       "api-error-blacklisted": "Vennligst velg en annen beskrivende tittel."
 }
index cd97178..0292bf1 100644 (file)
        "special-characters-group-khmer": "Khmer",
        "special-characters-title-endash": "liggend streepjen",
        "special-characters-title-emdash": "gedachtenstreepjen",
-       "special-characters-title-minus": "minteken"
+       "special-characters-title-minus": "minteken",
+       "api-error-blacklisted": "Kies n aandere, beschrievende naam."
 }
index 861cd64..8af08a5 100644 (file)
        "upload-dialog-button-done": "सकियो",
        "upload-dialog-button-save": "सङ्ग्रह गर्ने",
        "upload-dialog-button-upload": "अपलोड गर्ने",
-       "upload-process-error": "एक त्रुटि भयो ।",
        "upload-form-label-select-file": "फाइल छान्नुहोस्",
        "upload-form-label-infoform-title": "विवरणहरू",
        "upload-form-label-infoform-name": "नाम",
        "special-characters-title-emdash": "इएम ड्यास",
        "special-characters-title-minus": "घटाउने चिन्ह",
        "mw-widgets-titleinput-description-new-page": "हालसम्म पृष्ठ उपलब्ध छैन्",
-       "mw-widgets-titleinput-description-redirect": "$1 मा जाने"
+       "mw-widgets-titleinput-description-redirect": "$1 मा जाने",
+       "api-error-blacklisted": "एउटा फरक वर्णनात्मक शीर्षक चयन गर्नुहोस् ।"
 }
index 2a28340..93ede18 100644 (file)
        "upload-dialog-button-done": "Afgerond",
        "upload-dialog-button-save": "Opslaan",
        "upload-dialog-button-upload": "Upload",
-       "upload-process-error": "Er is een fout opgetreden",
-       "upload-process-warning": "Een waarschuwing is opgetreden",
        "upload-form-label-select-file": "Selecteer bestand",
        "upload-form-label-infoform-title": "Details",
        "upload-form-label-infoform-name": "Naam",
        "mw-widgets-dateinput-placeholder-day": "JJJJ-MM-DD",
        "mw-widgets-dateinput-placeholder-month": "JJJJ-MM",
        "mw-widgets-titleinput-description-new-page": "pagina bestaat nog niet",
-       "mw-widgets-titleinput-description-redirect": "doorverwijzing naar $1"
+       "mw-widgets-titleinput-description-redirect": "doorverwijzing naar $1",
+       "api-error-blacklisted": "Kies een andere, beschrijvende naam."
 }
index a8b69d5..54a1f20 100644 (file)
        "special-characters-group-sinhala": "Singalesisk",
        "special-characters-group-gujarati": "Gujarati",
        "mw-widgets-dateinput-placeholder-day": "ÅÅÅÅ-MM-DD",
-       "mw-widgets-dateinput-placeholder-month": "ÅÅÅÅ-MM"
+       "mw-widgets-dateinput-placeholder-month": "ÅÅÅÅ-MM",
+       "api-error-blacklisted": "Vel eit anna namn som er meir skildrande."
 }
index 61c61ac..3a6808d 100644 (file)
        "tog-enotifrevealaddr": "Näytä minun sähköpoštuadressii muile lähetettylöis ilmoituksis",
        "tog-shownumberswatching": "Ozuta tädä sivuu tarkailevien käyttäjien miäriä",
        "tog-oldsig": "Nygöine allekirjutus:",
+       "tog-fancysig": "Allekirjutus wikitekstannu (automuattizettah linkittäh)",
        "tog-uselivepreview": "Käytä välittömiä ezikaččeluu",
        "tog-forceeditsummary": "Huomavuta minuu, gu en olle kirjutannuh yhtehveduo",
-       "tog-watchlisthideown": "Peittiä minun korjavukset valvonduluvettelospäi",
+       "tog-watchlisthideown": "Peitä minun korjavukset valvonduluvettelospäi",
        "tog-watchlisthidebots": "Peitä botan kohendukset valdondulistalpäi",
        "tog-watchlisthideminor": "Peitä pienet kohendukset valvondulistalpäi",
        "tog-watchlisthideliu": "Peitä kirjutannuhuoloin käyttäjien kohendukset valvondulistalpäi",
@@ -42,6 +43,8 @@
        "tog-diffonly": "Älä ozuta sivun syväindyö eroverdailun alapuolel",
        "tog-showhiddencats": "Ozuta peitetyt kategouriet",
        "tog-norollbackdiff": "Älä ozuta eroloi, konzu olet ottanuh järilleh aijemban versien järilleh tuondu -toimindol",
+       "tog-useeditwarning": "Ollen lähtemäs sivulpäi iäre tallendamattah muutoksii, huomaita minuu",
+       "tog-prefershttps": "Käytä ainos suojattuu yhtevytty ku olet kirjutannuhes",
        "underline-always": "Ainos",
        "underline-never": "Nikonzu",
        "underline-default": "Ketun libo livaimen piäazetus",
        "hidden-categories": "{{PLURAL:$1|Peitetty kategourii|Peitetyt kategouriet}}",
        "hidden-category-category": "Peitetyt kategouriet",
        "category-subcat-count": "{{PLURAL:$2|Täs kategouries on vaiku tämä alikategourii.|Täs kategouries on nämmä {{PLURAL:$1|subcategory|$1 alikategouriedu}}, kaikkiedah $2.}}",
+       "category-subcat-count-limited": "Täs kategouries on {{PLURAL:$1| alakategourii|$1 alakategouriedu}}.",
        "category-article-count": "{{PLURAL:$2|Täs kategouries on vaiku tämä sivu.|{{PLURAL:$1|Tämä sivu on|$1 Nämmä sivut ollah}} täs kategouries, $2 kaikkiedah.}}",
+       "category-article-count-limited": "{{PLURAL:$1|Tämä sivu on|$1 Nämmä sivut ollah}} täs kategouries.",
        "category-file-count": "{{PLURAL:$2|Täs kategouriis on vaiku tämä failu.| {{PLURAL:$1|Tämä failu on|$1 Nämmä failat ollah}} täs kategouries, $2 kaikkiedah.}}",
        "listingcontinuesabbrev": "(jatko)",
        "index-category": "Indeksiruitut sivut",
index 2d78f6e..7b33d53 100644 (file)
        "passwordreset-emailsent-capture": "ତଳେ ଦେଖାଯାଉଥିବା ଭଳି, ପାସୱାର୍ଡ଼ ପୁନଃସ୍ଥାପନ ଇମେଲଟିଏ ପଠାଇଦିଆଯାଇଛି ।",
        "passwordreset-emailerror-capture": "ପାସୱାର୍ଡ଼ ବଦଳାଇବା ସୂଚନା ସହ ଇମେଲଟିଏ ତିଆରି ହୋଇଛି, ଯାହା ତଳେ ଦେଖିପାରିବେ । କିନ୍ତୁ ଏହାକୁ {{GENDER:$2|ସଭ୍ୟ}}ଙ୍କୁ ପଠାଇବାରେ ବିଫଳ ହେଲୁ, କାରଣ: $1",
        "changeemail": "ଇ-ମେଲ ଠିକଣା ବଦଳାଇବେ",
-       "changeemail-text": "ଆପଣା ଇ-ମେଲ ଠିକଣା ବଦଳାଇବା ନିମନ୍ତେ ଏହି ଆବେଦନ ପତ୍ରଟି ପୂରଣ କରନ୍ତୁ । ଆପଣଙ୍କୁ ଏହି ବଦଳ ଥୟ କରିବା ପାଇଁ ନିଜର ପାସୱାର୍ଡ଼ ଦେବାକୁ ପଡ଼ିବ ।",
+       "changeemail-header": "ଖାତା ଇ-ମେଲ ଠିକଣା ବଦଳାଇବେ",
        "changeemail-no-info": "ଏହି ପୃଷ୍ଠାଟିକୁ ସିଧା ଖୋଲିବା ନିମନ୍ତେ ଆପଣଙ୍କୁ ଲଗ ଇନ କରିବାକୁ ପଡ଼ିବ ।",
        "changeemail-oldemail": "ଏବେର ଇ-ମେଲ ଠିକଣା:",
        "changeemail-newemail": "ନୂଆ ଇ-ମେଲ ଠିକଣା:",
        "special-characters-title-endash": "en ଡ୍ୟାସ",
        "special-characters-title-emdash": "em dash",
        "special-characters-title-minus": "ମେନୁଗୁଡିକର ଚିହ୍ନ",
-       "mw-widgets-titleinput-description-redirect": "$1କୁ ପୁନଃପ୍ରେରଣ କରିବେ"
+       "mw-widgets-titleinput-description-redirect": "$1କୁ ପୁନଃପ୍ରେରଣ କରିବେ",
+       "api-error-blacklisted": "ଦୟାକରି ଏକ ଅଲଗା, ବିବରଣୀ ଶିରୋନାମାରେ ରଖିବେ ।"
 }
index 121713b..7424ca8 100644 (file)
        "upload-dialog-button-done": "Gotowe",
        "upload-dialog-button-save": "Zapisz",
        "upload-dialog-button-upload": "Prześlij",
-       "upload-process-error": "Wystąpił błąd",
-       "upload-process-warning": "Pojawiło się ostrzeżenie",
        "upload-form-label-select-file": "Wybierz plik",
        "upload-form-label-infoform-title": "Szczegóły",
        "upload-form-label-infoform-name": "Nazwa",
        "svg-long-error": "Nieprawidłowy plik SVG:$1",
        "show-big-image": "Rozmiar pierwotny",
        "show-big-image-preview": "Rozmiar podglądu – $1.",
+       "show-big-image-preview-differ": "Wielkość pliku podglądu $3 dla pliku $2: $1",
        "show-big-image-other": "{{PLURAL:$2|Inna rozdzielczość|Inne rozdzielczości}}: $1.",
        "show-big-image-size": "$1 x $2 pikseli",
        "file-info-gif-looped": "zapętlony",
        "mw-widgets-dateinput-placeholder-day": "RRRR-MM-DD",
        "mw-widgets-dateinput-placeholder-month": "RRRR-MM",
        "mw-widgets-titleinput-description-new-page": "strona jeszcze nie istnieje",
-       "mw-widgets-titleinput-description-redirect": "przekierowanie do $1"
+       "mw-widgets-titleinput-description-redirect": "przekierowanie do $1",
+       "api-error-blacklisted": "Wybierz inny, opisowy tytuł."
 }
index e8dce60..207f175 100644 (file)
        "passwordreset-emailsent-capture": "Un mëssagi ëd riampostassion ëd la ciav a l'é stàit mandà, e a l'é mostrà sì-sota.",
        "passwordreset-emailerror-capture": "Un mëssagi ëd riampostassion ëd la ciav a l'é stàit generà, e a l'é smonù sì-sota, ma la spedission a {{GENDER:$2|l'utent}} a l'é falìa: $1",
        "changeemail": "Cangé l'adrëssa ëd pòsta eletrònica",
-       "changeemail-text": "Ch'a completa 's formolari për cangé soa adrëssa eletrònica. A dev anserì soa ciav për confirmé costa modìfica.",
+       "changeemail-header": "Cangé l'adrëssa ëd pòsta eletrònica dël cont",
        "changeemail-no-info": "A dev esse intrà ant ël sistema për andé diretament a costa pàgina.",
        "changeemail-oldemail": "Adrëssa ëd pòsta eletrònica atual:",
        "changeemail-newemail": "Adrëssa ëd pòsta eletrònica neuva:",
        "special-characters-title-emdash": "tratin em",
        "special-characters-title-minus": "segn meno",
        "mw-widgets-dateinput-placeholder-day": "AAAA-MM-DD",
-       "mw-widgets-dateinput-placeholder-month": "AAAA-MM"
+       "mw-widgets-dateinput-placeholder-month": "AAAA-MM",
+       "api-error-blacklisted": "Për piasì sern un tìtol diferent, descritiv."
 }
index b6c17e3..e90a32f 100644 (file)
        "passwordreset-emailsent-capture": "اک یاد کران والی ای-میل پیج دتی گئی اے، جیہڑی تھلے دسی گئی اے۔",
        "passwordreset-emailerror-capture": "اک یادکراؤ ای-میل بنائی گئی اے، جیہڑی کہ تھلے دسی گئی اے، پر ورتن والے تک پیجنا نئیں ہوسکیا:$1",
        "changeemail": "ای-میل پتہ بدلو",
-       "changeemail-text": "اس فارم نوں پورا کر کے ای-میل پتہ بدلو۔ اس کم نوں پورا کرن واسطے توانوں اپنی کنجی لکھنی پۓ گی۔",
+       "changeemail-header": "کھاتے دا ای-میل پتہ بدلو",
        "changeemail-no-info": "تسی لاگ ان ہوکے ای اس صفحے نوں ویکھ سکدے او۔",
        "changeemail-oldemail": "ہلے دا ای-میل پتہ:",
        "changeemail-newemail": "نواں ای-میل پتہ:",
        "special-characters-group-gujarati": "گجراتی",
        "special-characters-group-thai": "تھائی",
        "special-characters-group-lao": "لاؤ",
-       "special-characters-group-khmer": "کھیمر"
+       "special-characters-group-khmer": "کھیمر",
+       "api-error-blacklisted": "مہربانی کرکے وکھری سرخی چنو۔"
 }
index 7d0c45f..f3f39a9 100644 (file)
        "upload-dialog-button-done": "ترسره شو",
        "upload-dialog-button-save": "خوندي کول",
        "upload-dialog-button-upload": "پورته کول",
-       "upload-process-error": "يوه ستونزه پېښه شوې",
-       "upload-process-warning": "يوه گواښنه رامېنځ ته شوه",
        "upload-form-label-select-file": "دوتنه ټاکل",
        "upload-form-label-infoform-title": "ځانگړنې",
        "upload-form-label-infoform-name": "نوم",
index 1be7713..e23b815 100644 (file)
@@ -85,7 +85,8 @@
                        "L",
                        "Walesson",
                        "Rhcastilhos",
-                       "Claudio Emanuel Weiler"
+                       "Claudio Emanuel Weiler",
+                       "Almondega"
                ]
        },
        "tog-underline": "Sublinhar links:",
        "prefs-help-recentchangescount": "Isto inclui mudanças recentes, histórico de páginas e registros.",
        "prefs-help-watchlist-token2": "Esta é a senha secreta para o feed da Web com sua lista de tokens vigiados.\nQualquer pessoa que descobrir esta senha será capaz de ler sua lista, então não a compartilhe.\n[[Special:ResetTokens|Clique aqui para redefini-la]].",
        "savedprefs": "As suas preferências foram salvas.",
+       "savedrights": "Os direitos de usuário de {{GENDER:$1|$1}} foram salvos.",
        "timezonelegend": "Fuso horário:",
        "localtime": "Horário local:",
        "timezoneuseserverdefault": "Utilizar padrão do wiki ($1)",
        "upload-dialog-button-done": "Feito",
        "upload-dialog-button-save": "Salvar",
        "upload-dialog-button-upload": "Enviar",
-       "upload-process-error": "Ocorreu um erro",
-       "upload-process-warning": "Ocorreu um aviso",
        "upload-form-label-select-file": "Selecionar arquivo",
        "upload-form-label-infoform-title": "Detalhes",
        "upload-form-label-infoform-name": "Nome",
        "mw-widgets-dateinput-placeholder-day": "AAAA-MM-DD",
        "mw-widgets-dateinput-placeholder-month": "AAAA-MM",
        "mw-widgets-titleinput-description-new-page": "a página ainda não existe",
-       "mw-widgets-titleinput-description-redirect": "redirecionar para $1"
+       "mw-widgets-titleinput-description-redirect": "redirecionar para $1",
+       "api-error-blacklisted": "Por favor, escolha  um título descritivo diferente."
 }
index 99cdc20..2e05bd6 100644 (file)
        "upload-dialog-button-done": "Feito",
        "upload-dialog-button-save": "Gravar",
        "upload-dialog-button-upload": "Carregar",
-       "upload-process-error": "Ocorreu um erro",
-       "upload-process-warning": "Ocorreu um aviso",
        "upload-form-label-select-file": "Selecionar ficheiro",
        "upload-form-label-infoform-title": "Detalhes",
        "upload-form-label-infoform-name": "Nome",
        "mw-widgets-dateinput-placeholder-day": "AAAA-MM-DD",
        "mw-widgets-dateinput-placeholder-month": "AAAA-MM",
        "mw-widgets-titleinput-description-new-page": "a página ainda não existe.",
-       "mw-widgets-titleinput-description-redirect": "redirecionar para $1"
+       "mw-widgets-titleinput-description-redirect": "redirecionar para $1",
+       "api-error-blacklisted": "Escolha um título diferente e descritivo, por favor."
 }
index 996685e..95bd205 100644 (file)
        "prefs-help-recentchangescount": "Used in [[Special:Preferences]], tab \"Recent changes\".",
        "prefs-help-watchlist-token2": "Used in [[Special:Preferences]], tab Watchlist. (Formerly in {{msg-mw|prefs-help-watchlist-token}}.)",
        "savedprefs": "This message appears after saving changes to your user preferences.",
+       "savedrights": "This message appears after saving the user rights on [[Special:UserRights]].\n* $1 - The user name of the user which rights was saved.",
        "timezonelegend": "{{Identical|Time zone}}",
        "localtime": "Used as label in [[Special:Preferences#mw-prefsection-datetime|preferences]].",
        "timezoneuseserverdefault": "[[Special:Preferences]] > Date and time > Time zone\n\nThis option lets your time zone setting use the one that is used on the wiki (often UTC).\n\nParameters:\n* $1 - timezone name, or timezone offset (in \"%+03d:%02d\" format)",
        "upload-dialog-button-done": "Button to close the dialog once upload is complete\n{{Identical|Done}}",
        "upload-dialog-button-save": "Button to save the file\n{{Identical|Save}}",
        "upload-dialog-button-upload": "Button to initiate upload\n{{Identical|Upload}}",
-       "upload-process-error": "Error message from upload",
-       "upload-process-warning": "Warning message from upload",
        "upload-form-label-select-file": "Label for the select file widget\n{{Identical|Select file}}",
        "upload-form-label-infoform-title": "Title for the information form\n{{Identical|Detail}}",
        "upload-form-label-infoform-name": "Label for the file name input\n{{Identical|Name}}",
        "mw-widgets-dateinput-placeholder-day": "[[File:DateInputWidget active, empty.png|frame|Screenshot]]\nPlaceholder displayed in a date input field when it's empty, representing a date format with 4 digits for year, 2 digits for month, and 2 digits for day, separated with hyphens. This should be uppercase, if possible, and must not include any additional explanations. If there is no good way to translate it, make this message blank.",
        "mw-widgets-dateinput-placeholder-month": "Placeholder displayed in a date input field when it's empty, representing a date format with 4 digits for year and 2 digits for month, separated with hyphens (without a day). This should be uppercase, if possible, and must not include any additional explanations. If there is no good way to translate it, make this message blank.",
        "mw-widgets-titleinput-description-new-page": "Description label for a new page in the title input widget.",
-       "mw-widgets-titleinput-description-redirect": "Description label for a redirect in the title input widget."
+       "mw-widgets-titleinput-description-redirect": "Description label for a redirect in the title input widget.",
+       "api-error-blacklisted": "Used as error message.\n\nFollowed by the link {{msg-mw|Mwe-upwiz-feedback-blacklist-info-prompt}}."
 }
index d770e7f..d0b800d 100644 (file)
        "redirectedfrom": "(Redirecționat de la $1)",
        "redirectpagesub": "Pagină de redirecționare",
        "redirectto": "Redirecționare către:",
-       "lastmodifiedat": "Ultima modificare efectuată pe $1, la $2.",
+       "lastmodifiedat": "Ultima modificare a paginii efectuată la $1, ora $2.",
        "viewcount": "Pagina a fost accesată {{PLURAL:$1|o dată|de $1 ori|de $1 de ori}}.",
        "protectedpage": "Pagină protejată",
        "jumpto": "Salt la:",
        "prefs-help-recentchangescount": "Sunt incluse schimbările recente, istoricul paginilor și jurnalele.",
        "prefs-help-watchlist-token2": "Aceasta este cheia secretă pentru fluxul web al listei dumneavoastră de pagini urmărite.\nOricine o cunoaște vă va putea citi lista de pagini urmărite, așa că n-o partajați cu nimeni.\n[[Special:ResetTokens|Faceți clic aici dacă doriți să o resetați]].",
        "savedprefs": "Preferințele dumneavoastră au fost salvate.",
+       "savedrights": "Drepturile utilizatorului {{GENDER:$1|$1}} au fost salvate.",
        "timezonelegend": "Fus orar:",
        "localtime": "Ora locală:",
        "timezoneuseserverdefault": "Folosește ora implicită a wikiului ($1)",
        "upload-dialog-button-done": "Realizat",
        "upload-dialog-button-save": "Salvare",
        "upload-dialog-button-upload": "Încarcă",
-       "upload-process-error": "A apărut o eroare",
-       "upload-process-warning": "A apărut o atenționare",
        "upload-form-label-select-file": "Selectează fișier",
        "upload-form-label-infoform-title": "Detalii",
        "upload-form-label-infoform-name": "Nume",
        "svg-long-error": "Fișier SVG invalid: $1",
        "show-big-image": "Fișier original",
        "show-big-image-preview": "Mărimea acestei previzualizări: $1.",
+       "show-big-image-preview-differ": "Mărimea acestei previzualizări $3 a acestui fișier $2: $1.",
        "show-big-image-other": "{{PLURAL:$2|Altă rezoluție|Alte rezoluții}}: $1.",
        "show-big-image-size": "$1 × $2 pixeli",
        "file-info-gif-looped": "în buclă",
        "mw-widgets-dateinput-placeholder-day": "AAAA-LL-ZZ",
        "mw-widgets-dateinput-placeholder-month": "AAAA-LL",
        "mw-widgets-titleinput-description-new-page": "pagina nu există încă",
-       "mw-widgets-titleinput-description-redirect": "redirecționare către $1"
+       "mw-widgets-titleinput-description-redirect": "redirecționare către $1",
+       "api-error-blacklisted": "Vă rugăm să alegeți un alt titlu, mai descriptiv."
 }
index 50a1f78..ef53640 100644 (file)
        "passwordreset-emailsent": "Ce quiste jè 'n'e-mail pu cunde tune, allore 'na password azzerate ha state mannate addà.",
        "passwordreset-emailsent-capture": "'Na e-mail pe azzeramende d'a passuord ha state mannate, ca jè fatte vedè aqquà sotte.",
        "passwordreset-emailerror-capture": "'Na e-mail de azzeramende d'a passuord ha state generate, ca jè fatte vedè aqquà sotte, ma 'u 'nvie a {{GENDER:$2|l'utende}} ha fallite: $1",
-       "changeemail": "Cange 'u 'ndirizze e-mail",
+       "changeemail": "Cange o live 'u 'ndirizze e-mail",
        "changeemail-header": "Cange 'u 'ndirizze e-mail d'u cunde",
        "changeemail-no-info": "Tu a essere collegate pe accedere a sta pàgene direttamende.",
        "changeemail-oldemail": "Indirizze e-mail de mò:",
        "sig_tip": "'A firma toje cu l'orarie e 'a sciurnete",
        "hr_tip": "Linee orizzondele (ausele picche)",
        "summary": "Riepileghe:",
-       "subject": "Oggette/Testate:",
+       "subject": "Oggette:",
        "minoredit": "Cangiaminde stuèdeche",
        "watchthis": "Condrolle sta pàgene",
        "savearticle": "Registre 'a vôsce",
        "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.",
        "selfredirect": "<strong>Attenziò:</strong> Tu ste redirezione sta pàgene da sule.\nTu puè avè specificate 'a destinazione sbagliate pe stu redirezionamende, o tu ste cange 'a pàgena sbagliate.\nCe tu cazze \"{{int:savearticle}}\" arrete, 'u redirezionamende avène ccrejate 'u stesse.",
        "missingcommenttext": "Pe piacere mitte 'nu commende aqquà sotte.",
-       "missingcommentheader": "'''Arrecuèrdete:''' Tu non g'è provvedute a 'nu soggette/testate pe stu commende.\nCe tu cazze \"{{int:savearticle}}\" 'n'otra vote, 'u cangiamende tune avène memorizzate senze jidde.",
+       "missingcommentheader": "<strong>Arrecuèrdete:</strong> Tu non g'è provvedute a 'nu soggette pe stu commende.\nCe tu cazze \"{{int:savearticle}}\" 'n'otra vote, 'u cangiamende tune avène memorizzate senze jidde.",
        "summary-preview": "Andeprime d'u riepileghe:",
-       "subject-preview": "Andeprime de l'Oggette/Testete:",
+       "subject-preview": "Andeprime de l'Oggette:",
        "previewerrortext": "'N'errore ha assute quanne ste facive l'andeprime de le cangiaminde.",
        "blockedtitle": "L'utende è blocchete",
        "blockedtext": "''''U nome de l'utende o l'indirizze IP ha state bloccate.'''\n\n'U blocche ha state fatte da $1.\n'U mutive date jè ''$2''.\n\n* 'U Blocche accumenze: $8\n* 'U Blocche spicce: $6\n* Tipe de blocche: $7\n\nTu puè condatta $1 o n'otre [[{{MediaWiki:Grouppage-sysop}}|amministratore]] pe 'ngazzarte sus a 'u blocche.\nTu non ge puè ausà 'u strumende 'manne 'na mail a stu utende' senza ca mitte n'indirizze e-mail valide jndr'à le\n[[Special:Preferences|preferenze tue]] e ce è state blocchete sus 'a l'use sue.\nL'IP ca tine mò jè $3 e 'u codece d'u blocche jè #$5.\nPe piacere mitte ste doje 'mbormaziune ce manne 'na richieste de sblocche.",
        "mergehistory-go": "Fà vedè le cangiaminde ca se ponne squagghià 'nzieme",
        "mergehistory-submit": "Scuagghije 'nzieme le revisiune",
        "mergehistory-empty": "Nisciuna revisione pò essere scuagghiate.",
-       "mergehistory-done": "$3 {{PLURAL:$3|revisione|revisiune}} de $1 onne state scuagghiate jndr'à [[:$2]] correttamende.",
+       "mergehistory-done": "$3 {{PLURAL:$3|revisione|revisiune}} de $1 {{PLURAL:$3|ha|onne}} state scuagghiate jndr'à [[:$2]].",
        "mergehistory-fail": "Non ge se pò fa vedè 'a storie d'u scuagghiamende, pe piacere verifiche 'n'otra vota a pàgene e le parametre de l'orarie.",
        "mergehistory-fail-toobig": "Non ge pozze combletà 'u scuagghiamende s'u cunde purcé supranesce 'u limite de $1 {{PLURAL:$1|revisione|revisiune}} ca onna essere spustate.",
        "mergehistory-no-source": "'A pàgena sorgende $1 non g'esiste.",
        "prefs-watchlist-token": "Token de le pàggene condrollate:",
        "prefs-misc": "Misc",
        "prefs-resetpass": "Cange a 'password",
-       "prefs-changeemail": "Cange e-mail",
+       "prefs-changeemail": "Cange o live 'u 'ndirizze e-mail",
        "prefs-setemail": "Mitte 'n'indirizze e-mail",
        "prefs-email": "Opziune de l'e-mail",
        "prefs-rendering": "Aspette",
        "recentchangeslinked-summary": "Queste jè 'a liste de le cangiaminde fatte de recende a le pàggene culleghete da ' na pàgene specifiche (o a le membre de 'na specifiche categorije).\nPàggene sus 'a [[Special:Watchlist|le Pàggene condrollete]] sonde in '''grascette'''.",
        "recentchangeslinked-page": "Nome d'a vôsce:",
        "recentchangeslinked-to": "Fa vedè le cangiaminde de le pàggene colleghete a 'na certa pàgene",
+       "recentchanges-page-added-to-category": "[[:$1]] aggiunde a categorije",
        "upload": "Careche 'u file",
        "uploadbtn": "Careche 'nu fail",
        "reuploaddesc": "Scangille 'u carecamende e tuerne a 'a schermete de le carecaminde",
        "upload-dialog-button-done": "Fatte",
        "upload-dialog-button-save": "Reggìstre",
        "upload-dialog-button-upload": "Careche",
-       "upload-process-error": "Ave assute 'n'errore",
-       "upload-process-warning": "Ha assute 'n'avvise",
        "upload-form-label-select-file": "Scacchie 'u file",
        "upload-form-label-infoform-title": "Dettaglie",
        "upload-form-label-infoform-name": "Nome",
        "upload-form-label-infoform-description": "Descrizione",
        "upload-form-label-usage-title": "Ause",
        "upload-form-label-usage-filename": "Nome d'u file",
+       "foreign-structured-upload-form-label-infoform-categories": "Categorije",
+       "foreign-structured-upload-form-label-infoform-date": "Date",
        "backend-fail-stream": "Non ge pozze trasmettere 'u file $1.",
        "backend-fail-backup": "Non ge pozze cupià 'u file $1.",
        "backend-fail-notexists": "'U file $1 non g'esiste.",
        "deletepage": "Scangille 'a pàgene",
        "confirm": "Conferme",
        "excontent": "'u condenute ere: '$1'",
-       "excontentauthor": "'u condenute ere: '$1' (e l'uneche condrebbutore ere '[[Special:Contributions/$2|$2]]')",
+       "excontentauthor": "'u condenute ere: '$1' e l'uneche condrebbutore ere \"[[Special:Contributions/$2|$2]]\" ([[User talk:$2|'ngazzamende]])",
        "exbeforeblank": "'u condenute apprime d'a pulizie ere: '$1'",
        "delete-confirm": "Scangille \"$1\"",
        "delete-legend": "Scangille",
        "move-page-legend": "Spuèste 'a pàgene",
        "movepagetext": "Ausanne 'u form aqquà sotte ste cange 'u nome d'a pàgene, spustanne tutte 'a storia soje sus a 'u nome nuéve.\nU' vecchie titole devènde 'nu ridirezionamende sus 'a pàgena nove.\nTu puè aggiornà 'u ridirezionamende ca apponde a 'u titole origgenale automaticamende.\nCe tu no ste scacchie, sta secure de condrollà [[Special:DoubleRedirects|doppie ridirezionaminde]] o [[Special:BrokenRedirects|ridirezionaminde scuasciate]].\nTu si 'u responsabbile de quidde ca cumbine, assicurate ca 'u collegamende condinue a appondà addò avessa scè.\n\nVide Bbuene ca 'a pàgene '''non''' g'avène spustate ce esiste n'otra pàgene cu 'u titole nuéve, a mene ca jè vacande o jè 'na pàgene de ridirezionamende senza storie.\nQuieste significhe ca tu puè fà turnà 'u vecchie nome 'a pàgene ce jedde ha state renomenate e t'è rese conde ca è fatte 'na studecarije sovrascrevènne 'na pàgene esistende.\n\n'''ATTENZIONE!'''\nQuiste pò essere 'nu cangiamende drastiche e inaspettate de 'na pàgene famose assaje;\npe piacere a essere secure-secure de le conseguenze apprime de condinuà.",
        "movepagetext-noredirectfixer": "Ausanne 'u module aqquà sotte puè renomenà 'na pàgene, spustanne tutte 'a storia soje sotte a 'u nome nuève.\n'U titele vecchie addevende 'na pàgene de ridirezionamende a 'u titele nuève.\nMe raccomande condrolle le redirezionaminde [[Special:DoubleRedirects|a doppie]] o [[Special:BrokenRedirects|scuasciate]].\nTu si responsabbele de assicurarte ca le collagaminde appondene a 'u punde giuste.\n\nVide ca 'a pàgene '''non''' g'avene spustate ce già stè 'na pàgene cu 'u titele nuève, a meno che non g'è vacande o jè 'nu ridirezionamende e non ge tène 'na storie de cangiaminde.\nQuiste signifeche ca jè possibbele renominà 'na pàgene accume se chiamave apprime addò tu è fatte 'n'errore e non g'è possibbele sovrascirevere 'na pàgene esistende.\n\n'''Fà Attenziò!'''\nQuiste pò essere 'nu cangiamende inaspettate pe 'na pàgene popolare;\nPe piacere ha essere secure secure de avere capite le conzeguenze apprime de scè nnande.",
-       "movepagetalktext": "'A pagene de le 'ngazzaminde associete avène spustete automaticamende ce però:\n\n* Ste 'na pàgene de 'ngazzaminde chiena sotte 'a vôsce nova, o\n* Non ge signe 'u cieck box de sotte.\n\nJndr'à ste case, 'a pàgene non g'avène spustete e pò t'a cupià a màne 'u codenute sue.",
+       "movepagetalktext": "Ce tu cazze sta buatte, 'A pàgene de le 'ngazzaminde associate avène spustate automaticamende, sembre ca non g'esisite 'n'otra pàgene de le 'ngazzaminde.\n\nJndr'à stu case, 'a pàgene non g'avène spustate e pò t'a cupià a màne 'u condenute sue.",
        "moveuserpage-warning": "'''Attenziò:''' Tu stè spuèste 'na pàgene utende. Vide bbuène ca sulamende 'a pàgene avène spustate ma l'utende ''non'' g'avene renomenate.",
        "movecategorypage-warning": "<strong>Attenziò:</strong> Tu vuè ccu spuéste 'na pàgene categorije. Vide ca sulamende 'a pàgene avène spustate ma tutte le pàggene ca stonne jndr'à categorije <em>non</em> g'avène spustate sotte a quedda nove.",
        "movenologintext": "Tu a essere 'n'utende reggistrete e [[Special:UserLogin|colleghete]] pe spustà 'na pàgene.",
        "cant-move-to-user-page": "Tu non ge tìne 'u permesse pe spustà 'na pàgene a 'na pàgene utende (sulamende pe le sottopàggene de l'utinde).",
        "cant-move-category-page": "Tu non ge tìne 'u permesse pe spustà le pàggene de categorije.",
        "cant-move-to-category-page": "Tu non ge tìne 'u permesse pe spustà 'na pàgena cumme 'na pàgene de categorije.",
-       "newtitle": "A 'u titele nuève:",
+       "newtitle": "Titole nuève:",
        "move-watch": "condrolle sta pàgene",
        "movepagebtn": "Spueste 'a pàgene",
        "pagemovedsub": "Spustaminde eseguite",
        "svg-long-error": "File SVG invalide: $1",
        "show-big-image": "File origgenale",
        "show-big-image-preview": "Dimenziune de sta andeprime: $1.",
+       "show-big-image-preview-differ": "Dimenzione de quiste $3 andeprime de quiste $2 file: $1.",
        "show-big-image-other": "Otre {{PLURAL:$2|resoluzione|resoluziune}}: $1.",
        "show-big-image-size": "$1 x $2 pixel",
        "file-info-gif-looped": "infinite",
        "special-characters-title-minus": "segne mene",
        "mw-widgets-dateinput-no-date": "Nisciune date scacchiate",
        "mw-widgets-titleinput-description-new-page": "'a pàgene non g'esiste angore",
-       "mw-widgets-titleinput-description-redirect": "redirezionate sus a $1"
+       "mw-widgets-titleinput-description-redirect": "redirezionate sus a $1",
+       "api-error-blacklisted": "Pe piacere scacchie 'nu titole diverse, descrittive."
 }
index 5e84b9d..7858a58 100644 (file)
@@ -84,7 +84,8 @@
                        "Normalex",
                        "WindEwriX",
                        "Nzeemin",
-                       "INS Pirat"
+                       "INS Pirat",
+                       "Краснорядцева Елена"
                ]
        },
        "tog-underline": "Подчёркивание ссылок:",
        "viewsource": "Просмотр",
        "viewsource-title": "Просмотр исходного текста страницы $1",
        "actionthrottled": "Ограничение по скорости",
-       "actionthrottledtext": "Ð\92 ÐºÐ°Ñ\87еÑ\81Ñ\82ве Ð¼ÐµÑ\80Ñ\8b Ð±Ð¾Ñ\80Ñ\8cбÑ\8b Ñ\81о Ñ\81памом, Ñ\83Ñ\81Ñ\82ановлено Ð¾Ð³Ñ\80аниÑ\87ение Ð½Ð° Ð¼Ð½Ð¾Ð³Ð¾ÐºÑ\80аÑ\82ное Ð¿Ñ\80именение Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ Ð´ÐµÐ¹Ñ\81Ñ\82виÑ\8f Ð² Ñ\82еÑ\87ение ÐºÐ¾Ñ\80оÑ\82кого Ð¿Ñ\80омежÑ\83Ñ\82ка Ð²Ñ\80емени. Пожалуйста, повторите попытку через несколько минут.",
+       "actionthrottledtext": "Ð\94лÑ\8f Ð±Ð¾Ñ\80Ñ\8cбÑ\8b Ñ\81о Ñ\81памом Ð±Ñ\8bло Ñ\83Ñ\81Ñ\82ановлено Ð¾Ð³Ñ\80аниÑ\87ение Ð½Ð° Ð¼Ð°ÐºÑ\81ималÑ\8cное Ñ\87иÑ\81ло Ð¿Ð¾Ð¿Ñ\8bÑ\82ок Ð²Ñ\8bполнениÑ\8f Ñ\8dÑ\82ого Ð´ÐµÐ¹Ñ\81Ñ\82виÑ\8f Ð² ÐºÐ¾Ñ\80оÑ\82кий Ð¿Ñ\80омежÑ\83Ñ\82ок Ð²Ñ\80емени â\80\94 Ð¸ Ð²Ñ\8b Ð¸Ñ\81Ñ\87еÑ\80пали Ñ\8dÑ\82оÑ\82 Ð»Ð¸Ð¼Ð¸Ñ\82. Пожалуйста, повторите попытку через несколько минут.",
        "protectedpagetext": "Эта страница защищена для предотвращения её редактирования или совершений других действий.",
        "viewsourcetext": "Вы можете просмотреть и скопировать исходный текст этой страницы.",
        "viewyourtext": "Вы можете просмотреть и скопировать исходный текст <strong>ваших правок</strong> на этой странице.",
        "passwordreset-emailsent-capture": "Отправлено электронное письмо с информацией о сбросе пароля, текст которого можно увидеть ниже.",
        "passwordreset-emailerror-capture": "Было создано электронное письмо с информацией о сбросе пароля, текст которого можно увидеть ниже, однако его не удалось отправить {{GENDER:$2|участнику|участнице}} по следующей причине: $1",
        "changeemail": "Изменить или удалить адрес электронной почты",
-       "changeemail-header": "Изменение адреса электронной почты",
+       "changeemail-header": "Заполните эту форму, чтобы изменить свой адрес электронной почты. Если вы хотите отвязать свой адрес электронной почты от учётной записи, то при заполнении формы оставьте пустым поле нового адреса электронной почты.",
+       "changeemail-passwordrequired": "Чтобы подтвердить это изменение, вам нужно будет ввести свой пароль.",
        "changeemail-no-info": "Чтобы обращаться непосредственно к этой странице, вам следует представиться системе.",
        "changeemail-oldemail": "Текущий адрес электронной почты:",
        "changeemail-newemail": "Новый адрес электронной почты:",
        "missingsummary": "'''Напоминание.''' Вы не дали краткого описания изменений. При повторном нажатии на кнопку «{{int:savearticle}}» ваши изменения будут сохранены без комментария.",
        "selfredirect": "<strong>Внимание:</strong> Вы создаёте перенаправление на ту же самую статью.\nВозможно, Вы выбрали неправильную целевую страницу для перенаправления или редактируете не ту страницу.\nЕсли Вы нажмёте кнопку «{{int:savearticle}}» ещё раз, перенаправление всё же будет создано.",
        "missingcommenttext": "Пожалуйста, введите ниже ваше сообщение.",
-       "missingcommentheader": "'''Напоминание.''' Вы не указали тему/заголовок для этого комментария.\nПри повторном нажатии на кнопку «{{int:savearticle}}», ваша правка будет записана без заголовка.",
+       "missingcommentheader": "<strong>Напоминание.</strong> Вы не указали тему/заголовок для этого комментария.\nПри повторном нажатии на кнопку «{{int:savearticle}}», ваша правка будет записана без заголовка.",
        "summary-preview": "Описание будет:",
-       "subject-preview": "Заголовок будет:",
+       "subject-preview": "Заголовок будет выглядеть так:",
        "previewerrortext": "При попытке отобразить предварительный просмотр ваших изменений произошла ошибка.",
        "blockedtitle": "Участник заблокирован",
        "blockedtext": "'''Ваша учётная запись или IP-адрес заблокированы.'''\n\nБлокировка произведена администратором $1.\nУказана следующая причина: «''$2''».\n\n* Начало блокировки: $8\n* Окончание блокировки: $6\n* Цель блокировки: $7\n\nВы можете связаться с $1 или любым другим [[{{MediaWiki:Grouppage-sysop}}|администратором]], чтобы обсудить блокировку.\nОбратите внимание, что не сможете использовать функцию «письмо участнику», если в своих [[Special:Preferences|персональных настройках]] не задали или не подтвердили корректный адрес электронной почты, или если ваша блокировка включает запрет отправки писем подобным образом.\nВаш IP-адрес — $3, идентификатор блокировки — $5.\nПожалуйста, указывайте эти сведения в любых своих обращениях.",
        "parser-template-loop-warning": "Обнаружена петля в шаблонах: [[$1]]",
        "parser-template-recursion-depth-warning": "Превышен предел глубины рекурсии шаблона ($1)",
        "language-converter-depth-warning": "Превышен предел глубины преобразователя языков ($1)",
-       "node-count-exceeded-category": "Странице, на которых превышено число узлов",
+       "node-count-exceeded-category": "Страницы, на которых превышено число узлов",
        "node-count-exceeded-category-desc": "У страницы превышено максимально допустимое число узлов.",
        "node-count-exceeded-warning": "Страница, на которой превышено максимально допустимое число узлов.",
        "expansion-depth-exceeded-category": "Страницы с превышением глубины раскрытия",
        "prefs-help-recentchangescount": "Включает свежие правки, истории страниц, журналы.",
        "prefs-help-watchlist-token2": "Это секретный ключ для веб-канала вашего списка наблюдений.\nЛюбой, кто знает его, сможет читать ваш список наблюдения, поэтому не сообщайте его другим. [[Special:ResetTokens|Нажмите здесь, если вам нужно сбросить его]].",
        "savedprefs": "Ваши настройки сохранены.",
+       "savedrights": "Права пользователя {{GENDER:$1|$1}} были сохранены.",
        "timezonelegend": "Часовой пояс:",
        "localtime": "Местное время:",
        "timezoneuseserverdefault": "Использовать настройки сервера ($1)",
        "upload-dialog-button-done": "Готово",
        "upload-dialog-button-save": "Сохранить",
        "upload-dialog-button-upload": "Загрузить",
-       "upload-process-error": "Произошла ошибка",
-       "upload-process-warning": "Появилось предупреждение",
        "upload-form-label-select-file": "Выбрать файл",
        "upload-form-label-infoform-title": "Подробности",
        "upload-form-label-infoform-name": "Имя",
        "foreign-structured-upload-form-label-not-own-work-message-local": "Если Вы не можете загрузить этот файл в соответствиями с правилами сайта {{SITENAME}}, пожалуйста, закройте это диалоговое окно и попробуйте другой метод.",
        "foreign-structured-upload-form-label-not-own-work-local-local": "Возможно, вы также захотите попробовать [[Special:Upload|страницу загрузки по умолчанию]].",
        "foreign-structured-upload-form-label-own-work-message-default": "Я понимаю, что загружаю этот файл в общий репозиторий. Я подтверждаю, что я делаю это в соответствии с пользовательским соглашением и лицензионной политикой.",
+       "foreign-structured-upload-form-label-not-own-work-message-default": "Если Вы не можете загрузить этот файл в соответствиями с правилами общего хранилища, пожалуйста, закройте это диалоговое окно и попробуйте другой метод.",
+       "foreign-structured-upload-form-label-not-own-work-local-default": "В том случае, если этот файл может быть загружен в соответствии с правилами сайта {{SITENAME}}, вы также можете попробовать использовать его [[Special:Upload|страницу загрузки]].",
        "foreign-structured-upload-form-label-not-own-work-message-shared": "Если вы не являетесь владельцем авторских прав на этот файл, или вы хотите выпустить его под другой лицензией, рассмотрите возможность использования [https://commons.wikimedia.org/wiki/Special:UploadWizard Мастера загрузки на Викисладе].",
+       "foreign-structured-upload-form-label-not-own-work-local-shared": "В том случае, если этот файл может быть загружен в соответствии с правилами сайта {{SITENAME}}, вы также можете попробовать использовать его [[Special:Upload|страницу загрузки]].",
        "backend-fail-stream": "Не удалось транслировать файл $1.",
        "backend-fail-backup": "Невозможно сделать резервную копию файла $1.",
        "backend-fail-notexists": "Файл $1 не существует.",
        "svg-long-error": "Неправильный SVG-файл: $1",
        "show-big-image": "Исходный файл",
        "show-big-image-preview": "Размер при предпросмотре: $1.",
+       "show-big-image-preview-differ": "Размер этого $3-превью для исходного $2-файла: $1.",
        "show-big-image-other": "{{PLURAL:$2|1=Другое разрешение|Другие разрешения}}: $1.",
        "show-big-image-size": "$1 × $2 пикселей",
        "file-info-gif-looped": "закольцованный",
        "mw-widgets-dateinput-placeholder-day": "ГГГГ-ММ-ДД",
        "mw-widgets-dateinput-placeholder-month": "ГГГГ-ММ",
        "mw-widgets-titleinput-description-new-page": "страница ещё не существует",
-       "mw-widgets-titleinput-description-redirect": "перенаправление на $1"
+       "mw-widgets-titleinput-description-redirect": "перенаправление на $1",
+       "api-error-blacklisted": "Пожалуйста, выберите другое, более понятное название."
 }
index 6c6f3d2..b9ecfc7 100644 (file)
        "special-characters-group-lao": "Лаоськы",
        "special-characters-group-khmer": "Кгмерськы",
        "mw-widgets-dateinput-placeholder-day": "РРРР-ММ-ДД",
-       "mw-widgets-dateinput-placeholder-month": "РРРР-ММ"
+       "mw-widgets-dateinput-placeholder-month": "РРРР-ММ",
+       "api-error-blacklisted": "Звольте іншу, пописну назву."
 }
index b3b6185..96b8e89 100644 (file)
        "nologin": "सदस्यता नास्ति किम् ? $1",
        "nologinlink": "सदस्यता प्राप्यताम्",
        "createaccount": "सदस्यता प्राप्यताम्",
-       "gotaccount": "पà¥\82रà¥\8dवमà¥\87व à¤¯à¥\8bà¤\9cà¤\95ः अस्ति किम् ? $1",
+       "gotaccount": "पà¥\82रà¥\8dवमà¥\87व à¤¸à¤¦à¤¸à¥\8dयः अस्ति किम् ? $1",
        "gotaccountlink": "प्रविश्यताम्",
        "userlogin-resetlink": "स्वस्य प्रवेशविवरणानि विस्मृतानि किम् ?",
        "userlogin-resetpassword-link": "स्वस्य कूटशब्दः विस्मृतः किम् ?",
        "loginsuccesstitle": "स्वागतं ! प्रवेशः सिद्धः ।",
        "loginsuccess": "भवता/भवत्या {{SITENAME}} इत्यत्र \"$1\"-योजकत्वेन प्रवेशः प्राप्तः ।",
        "nosuchuser": "'''$1''' नाम्नः न कोऽपि योजकः विद्यते ।\n\nप्रयोक्तृनामानि पक्षानुगुणं (case sensitive) भवन्ति ।\n\nयत् टङ्कितं, तत् पश्यतु अथवा [[Special:UserLogin/signup|नूतनसदस्यता प्राप्यताम्]] ।",
-       "nosuchusershort": "'''$1''' à¤¨à¤¾à¤®à¥\8dनà¤\83 à¤¨ à¤\95à¥\8bऽपि à¤¯à¥\8bà¤\9cà¤\95ः विद्यते ।\n\nयत् टङ्कितं, तत् पश्यतु ।",
+       "nosuchusershort": "'''$1''' à¤¨à¤¾à¤®à¥\8dनà¤\83 à¤¨ à¤\95à¥\8bऽपि à¤¸à¤¦à¤¸à¥\8dयः विद्यते ।\n\nयत् टङ्कितं, तत् पश्यतु ।",
        "nouserspecified": "भवता/भवत्या एकं योग्यं प्रयोक्तृनाम अवश्यमेव दातव्यम् ।",
-       "login-userblocked": "à¤\8fषà¤\83 à¤¯à¥\8bà¤\9cà¤\95ः प्रतिबन्धितः । प्रवेष्टुम् अनुमतिः नास्ति ।",
+       "login-userblocked": "à¤\8fषà¤\83 à¤¸à¤¦à¤¸à¥\8dयः प्रतिबन्धितः । प्रवेष्टुम् अनुमतिः नास्ति ।",
        "wrongpassword": "भवता/भवत्या लिखितः कूटशब्दः त्रुटियुक्तः । \nकृपया पुनः लिख्यताम् ।",
        "wrongpasswordempty": "कूटशब्दपेटिकायां कूटशब्दः न लिखितः ।\n\nकृपया पुनः प्रयासः क्रियताम् ।",
        "passwordtooshort": "न्यूनातिन्यूनं {{PLURAL:$1| 1 अक्षरात्मकः|$1 अक्षरात्मकः}} कूटशब्दः भवेदेव ।",
        "eauthentsent": "अधिकृतपुष्टै भवता/भवत्या पञ्जीकृताय वि-पत्रसङ्केताय वि-पत्रं प्रेषितमस्ति । तस्य वि-पत्रसङ्केतस्यैव इतः परम् उपयोगः भवतु इति इच्छति चेत् प्रेषिते वि-पत्रे यथा लिखितमस्ति, तथा करोतु । एवं तस्य वि-पत्रसङ्केतस्य अधिकृतपुष्टता भविष्यति ।",
        "throttled-mailpassword": "कूटशब्दं परिर्वतितुं भवतः/भवत्याः पञ्जीकृताय वि-पत्रसङ्केताय अन्तिम{{PLURAL:$1|होरायां|$1 होरासु}} नूतनकूटशब्दः प्रेषितः अस्ति ।\n\nदुरुपयोगं वारयितुम् प्रति {{PLURAL:$1|होरं|$1 होरं}} केवलम् एकम् वि-पत्रं प्रेष्यते ।",
        "mailerror": "वि-पत्रसम्प्रेषणे दोषः : $1",
-       "acct_creation_throttle_hit": "à¤\9aतà¥\81à¥\8dरà¥\8dविà¤\82शतिà¤\98णà¥\8dà¤\9fासà¥\81 à¤\85सà¥\8dय à¤¸à¤\99à¥\8dà¤\97णà¤\95सà¥\8dय à¤\86नà¥\8dतरà¥\8dà¤\9cालसà¤\82विदा (IP) {{PLURAL:$1|1 à¤¯à¥\8bà¤\9cà¤\95à¤\83|$1 à¤¯à¥\8bà¤\9cà¤\95ाà¤\83}} à¤¸à¤¦à¤¸à¥\8dयताà¤\82 à¤ªà¥\8dरापà¥\8dतवानà¥\8d/वनà¥\8dतà¤\83 à¥¤ à¤\85दà¥\8dय à¤\87तà¥\8bपि अधिकसदस्याः प्राप्तुं न शक्यन्ते ।",
+       "acct_creation_throttle_hit": "à¤\9aतà¥\81à¥\8dरà¥\8dविà¤\82शतिà¤\98णà¥\8dà¤\9fासà¥\81 à¤\85सà¥\8dय à¤¸à¤\99à¥\8dà¤\97णà¤\95सà¥\8dय à¤\86नà¥\8dतरà¥\8dà¤\9cालसà¤\82विदा (IP) {{PLURAL:$1|1 à¤¸à¤¦à¤¸à¥\8dयà¤\83|$1 à¤¸à¤¦à¤¸à¥\8dयाà¤\83}} à¤¸à¤¦à¤¸à¥\8dयताà¤\82 à¤ªà¥\8dरापà¥\8dतवानà¥\8d/वनà¥\8dतà¤\83 à¥¤ à¤\85दà¥\8dय à¤\87तà¥\8bऽपि अधिकसदस्याः प्राप्तुं न शक्यन्ते ।",
        "emailauthenticated": "$2 दिनाङ्के $3 वादने भवतः/भवत्याः वि-पत्रसङ्केतः पुष्टितः ।",
        "emailnotauthenticated": "एतावता भवतः/भवत्याः वि-पत्रसङ्केतः पुष्टः नाभवत् । \nनिम्नलिखिताय न किमपि वि-पत्रं प्रेषयितुं शक्यते ।",
        "noemailprefs": "एनं विकल्पं समर्थितुम् \"इष्टतमानि\" मध्ये भवतः/भवत्याः वि-पत्रसङ्केतस्य उल्लेखः आवश्यकः ।",
        "passwordreset-email": "वि-पत्रसङ्केतः",
        "passwordreset-emailtitle": "{{SITENAME}} इत्यत्र योजकविषये",
        "passwordreset-emailtext-ip": "कोऽपि (कदाचित् भवान्/भवती, $1 अन्तर्जालसंविदः (from IP)) {{SITENAME}}($4) जालस्थानस्य  कृते कूटशब्दपरिवर्तनस्य विनतिम् अकरोत् । निम्न{{PLURAL:$3|योजकः|योजकाः}} अनेन वि-पत्रेण सह सल्लग्नः अस्ति/सल्लग्नाः सन्ति ।\n\n$2\n\n{{PLURAL:$3|एषः अल्पकालीनकूटशब्दः|एते अल्पकालीनकूटशब्दाः}} {{PLURAL:$5|चतुर्विंशतिघण्टासु|$5 दिनेषु}} निरस्तः भविष्यति/निरस्ताः भविष्यन्ति ।\nअधुना प्रवेशं सम्प्राप्य कूटशब्दः परिवर्तनीयः एव । \n\nनिम्नकारणानि यदि सन्ति, तर्हि एनं सन्देशम् अवगण्यताम् ।\n\n१ कोऽपि अन्यः अत्र विनतिम् अकरोत् । \n२ पूरातनः कूटशब्दः भवतः/भवत्याः स्मरणे अस्ति ।\n३ भवान्/भवती कूटशब्दं परिवर्तयितुं नेच्छिति ।",
-       "passwordreset-emailtext-user": "$1 à¤¯à¥\8bà¤\9cà¤\95à¤\83 {{SITENAME}}($4) à¤\9cालसà¥\8dथानसà¥\8dय  à¤\95à¥\83तà¥\87 à¤\95à¥\82à¤\9fशबà¥\8dदपरिवरà¥\8dतनसà¥\8dय à¤µà¤¿à¤¨à¤¤à¤¿à¤®à¥\8d à¤\85à¤\95रà¥\8bतà¥\8d à¥¤ à¤¨à¤¿à¤®à¥\8dन{{PLURAL:$3|यà¥\8bà¤\9cà¤\95à¤\83|यà¥\8bà¤\9cà¤\95ाः}} अनेन वि-पत्रेण सह सल्लग्नः अस्ति/सल्लग्नाः सन्ति ।\n\n$2\n\n{{PLURAL:$3|एषः अल्पकालीनकूटशब्दः|एते अल्पकालीनकूटशब्दाः}} {{PLURAL:$5|चतुर्विंशतिघण्टासु|$5 दिनेषु}} निरस्तः भविष्यति/निरस्ताः भविष्यन्ति ।\nअधुना प्रवेशं सम्प्राप्य कूटशब्दः परिवर्तनीयः एव । \n\nनिम्नकारणानि यदि सन्ति, तर्हि एनं सन्देशम् अवगण्यताम् ।\n\n१ कोऽपि अन्यः अत्र विज्ञप्तिम् अकरोत् । \n२ पूरातनः कूटशब्दः भवतः/भवत्याः स्मरणे अस्ति ।\n३ भवान्/भवती कूटशब्दं परिवर्तयितुं नेच्छिति ।",
+       "passwordreset-emailtext-user": "$1 à¤¸à¤¦à¤¸à¥\8dयà¤\83 {{SITENAME}}($4) à¤\9cालसà¥\8dथानसà¥\8dय  à¤\95à¥\83तà¥\87 à¤\95à¥\82à¤\9fशबà¥\8dदपरिवरà¥\8dतनसà¥\8dय à¤µà¤¿à¤¨à¤¤à¤¿à¤®à¥\8d à¤\85à¤\95रà¥\8bतà¥\8d à¥¤ à¤¨à¤¿à¤®à¥\8dन{{PLURAL:$3|सदसà¥\8dयà¤\83|सदसà¥\8dयाः}} अनेन वि-पत्रेण सह सल्लग्नः अस्ति/सल्लग्नाः सन्ति ।\n\n$2\n\n{{PLURAL:$3|एषः अल्पकालीनकूटशब्दः|एते अल्पकालीनकूटशब्दाः}} {{PLURAL:$5|चतुर्विंशतिघण्टासु|$5 दिनेषु}} निरस्तः भविष्यति/निरस्ताः भविष्यन्ति ।\nअधुना प्रवेशं सम्प्राप्य कूटशब्दः परिवर्तनीयः एव । \n\nनिम्नकारणानि यदि सन्ति, तर्हि एनं सन्देशम् अवगण्यताम् ।\n\n१ कोऽपि अन्यः अत्र विज्ञप्तिम् अकरोत् । \n२ पूरातनः कूटशब्दः भवतः/भवत्याः स्मरणे अस्ति ।\n३ भवान्/भवती कूटशब्दं परिवर्तयितुं नेच्छिति ।",
        "passwordreset-emailelement": "प्रयोक्तृनाम : \n$1\n\nअल्पकालीनकूटशब्दः : \n$2",
        "passwordreset-emailsent": "परिवर्तितकूटशब्दस्य वि-पत्रं प्रेषितम् अस्ति ।",
        "passwordreset-emailsent-capture": "परिवर्तितकूटशब्दस्य वि-पत्रं प्रेषितम् अस्ति । तत् अधः द्रष्टुं शक्यते ।",
        "passwordreset-emailerror-capture": "परिवर्तितकूटशब्दस्य वि-पत्रं निर्मितम् अस्ति । तत् अधः द्रष्टुं शक्यते । परन्तु {{GENDER:$2|योजकाय}} प्रेषणकाले तत् निरस्तम् अभवत् : $1",
        "changeemail": "वि-पत्रसङ्केतः परिवर्त्यताम्",
-       "changeemail-text": "स्वस्य वि-पत्रसङ्केतं परिवर्तयितुम् अधः दत्तं प्रपत्रं पूरयतु । एतस्यै प्रक्रियायै कूटशब्दः आवश्यकः ।",
+       "changeemail-header": "प्रयोक्तृनाम्नः ई-पत्रसङ्केतः परिवर्त्यताम्",
        "changeemail-no-info": "एतत् पृष्ठं सम्पादयितुं प्रवेशः अनिवार्यः ।",
        "changeemail-oldemail": "वर्तमानः वि-पत्रसङ्केतः",
        "changeemail-newemail": "नूतनः वि-पत्रसङ्केतः :",
        "searchprofile-everything-tooltip": "सर्वत्र अन्विष्यताम् (चर्चापृष्ठानि अपि)",
        "searchprofile-advanced-tooltip": "नामाकाशेषु अन्विष्यताम्",
        "search-result-size": "$1 ({{PLURAL:$2|1 शब्दः|$2 शब्दाः}})",
-       "search-result-category-size": "{{PLURAL:$1|1 à¤¯à¥\8bà¤\9cà¤\95à¤\83|$1 à¤¯à¥\8bà¤\9cà¤\95ाः}} ({{PLURAL:$2|1 उपवर्गः|$2 उपवर्गाः}}, {{PLURAL:$3|1 सञ्चिका|$3 सञ्चिकाः}})",
+       "search-result-category-size": "{{PLURAL:$1|1 à¤¸à¤¦à¤¸à¥\8dयà¤\83|$1 à¤¸à¤¦à¤¸à¥\8dयाः}} ({{PLURAL:$2|1 उपवर्गः|$2 उपवर्गाः}}, {{PLURAL:$3|1 सञ्चिका|$3 सञ्चिकाः}})",
        "search-redirect": "($1 तः अनुप्रेषितम्)",
        "search-section": "(विभागः $1)",
        "search-category": "(वर्गः $1)",
        "prefs-emailconfirm-label": "वि-पत्रं दृढीक्रियताम् :",
        "youremail": "वि-पत्रसङ्केतः :",
        "username": "{{GENDER:$1|योजकनाम}} :",
-       "prefs-memberingroups": "{{PLURAL:$1|समà¥\82हसà¥\8dय|समà¥\82हानाà¤\82}} {{GENDER:$2|यà¥\8bà¤\9cà¤\95à¤\83/यà¥\8bà¤\9cà¤\95ाः}} :",
+       "prefs-memberingroups": "{{PLURAL:$1|समà¥\82हसà¥\8dय|समà¥\82हानाà¤\82}} {{GENDER:$2|सदसà¥\8dयà¤\83|सदसà¥\8dयाः}} :",
        "prefs-registration": "पञ्जीकरणकालः :",
        "yourrealname": "वास्तविकनाम :",
        "yourlanguage": "भाषा :",
        "prefs-dateformat": "दिनाङ्कस्य प्रारूपः",
        "prefs-timeoffset": "समयान्तरम्",
        "prefs-advancedediting": "सामान्यविकल्पाः",
-       "prefs-editor": "यà¥\8bà¤\9cà¤\95ः",
+       "prefs-editor": "सदसà¥\8dयः",
        "prefs-preview": "प्राग्दृश्यम्",
        "prefs-advancedrc": "विशेषविकल्पाः",
        "prefs-advancedrendering": "विशेषविकल्पाः",
        "saveusergroups": "योजकसमूहः रक्ष्यताम्",
        "userrights-groupsmember": "अस्य सदस्यः :",
        "userrights-groupsmember-auto": "निम्न{{PLURAL:$1|समूहस्य|समूहानाम्}} अन्तर्निहितः सदस्यः :",
-       "userrights-groups-help": "à¤\85सà¥\8dय à¤¸à¤¦à¤¸à¥\8dयसà¥\8dय à¤¸à¤®à¥\82हसदसà¥\8dयतà¥\8dवà¤\82 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतयितà¥\81à¤\82 à¤¶à¤\95à¥\8dयतà¥\87 à¥¤ \n* à¤\85à¤\99à¥\8dà¤\95नपà¥\87à¤\9fिà¤\95ा (check box) à¤\85à¤\99à¥\8dà¤\95िता à¤\9aà¥\87तà¥\8d, à¤¯à¥\8bà¤\9cà¤\95ः अस्य समूहस्य सदस्यः अस्ति ।\n* अङ्कनपेटिका अनङ्किता चेत्, योजकः अस्य समूहस्य सदस्यः नास्ति ।\n* एकवारं समूहः योजितः अपाकृतः वा चेत्, पुनः पूर्ववत् कर्तुं न शक्यते इति * चिह्नं सूचयति ।",
+       "userrights-groups-help": "à¤\85सà¥\8dय à¤¸à¤¦à¤¸à¥\8dयसà¥\8dय à¤¸à¤®à¥\82हसदसà¥\8dयतà¥\8dवà¤\82 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतयितà¥\81à¤\82 à¤¶à¤\95à¥\8dयतà¥\87 à¥¤ \n* à¤\85à¤\99à¥\8dà¤\95नपà¥\87à¤\9fिà¤\95ा (check box) à¤\85à¤\99à¥\8dà¤\95िता à¤\9aà¥\87तà¥\8d, à¤¸à¤¦à¤¸à¥\8dयः अस्य समूहस्य सदस्यः अस्ति ।\n* अङ्कनपेटिका अनङ्किता चेत्, योजकः अस्य समूहस्य सदस्यः नास्ति ।\n* एकवारं समूहः योजितः अपाकृतः वा चेत्, पुनः पूर्ववत् कर्तुं न शक्यते इति * चिह्नं सूचयति ।",
        "userrights-reason": "कारणम् :",
        "userrights-no-interwiki": "अन्यविकि-जालस्थानेषु योजकाधिकारं सम्पादयितुं ते अनुमतिः नास्ति ।",
        "userrights-nodatabase": "$1 दत्तांशनिधिः न विद्यते अथवा तु सः स्थानीयः नास्ति ।",
        "group-bureaucrat": "अधिकारिणः",
        "group-suppress": "अलक्ष्यम्",
        "group-all": "(सर्वम्)",
-       "group-user-member": "{{GENDER:$1|यà¥\8bà¤\9cà¤\95ः}}",
+       "group-user-member": "{{GENDER:$1|सदसà¥\8dयः}}",
        "group-autoconfirmed-member": "{{GENDER:$1|स्वदृढितयोजकः}}",
        "group-bot-member": "{{GENDER:$1|बॉट्}}",
        "group-sysop-member": "{{GENDER:$1|प्रबन्धकः}}",
        "right-viewsuppressed": "अन्ययोजकैः गूहितं संस्करणं दृश्यताम्",
        "right-suppressionlog": "वैयक्तिकसंस्करणानि दृश्यन्ताम्",
        "right-block": "अस्य योजकस्य सम्पादनानि अवरुध्यन्ताम्",
-       "right-blockemail": "वि-पतà¥\8dरपà¥\8dरà¥\87षयितà¥\81मà¥\8d à¤\8fषà¤\83 à¤¯à¥\8bà¤\9cà¤\95ः अवरुध्यताम्",
+       "right-blockemail": "वि-पतà¥\8dरपà¥\8dरà¥\87षयितà¥\81मà¥\8d à¤\8fषà¤\83 à¤¸à¤¦à¤¸à¥\8dयः अवरुध्यताम्",
        "right-hideuser": "प्रयोक्तृनाम अवरुध्यताम्, तत् अन्ययोजकेभ्यः गोप्यतां च",
        "right-ipblock-exempt": "स्वयम् अवरोधितं, समूहावरोधितम् अन्तर्जालसङ्केतम् (IP) अवगण्य अग्रे गच्छतु",
        "right-proxyunbannable": "प्रतिनिधीनां (of prxies) स्वयम्-अवरोधान् अवगण्य अग्रे गच्छतु",
        "minoreditletter": "(लघु)",
        "newpageletter": "(नवीनम्)",
        "boteditletter": "(बोट्)",
-       "number_of_watching_users_pageview": "[$1 à¤\85वलà¥\8bà¤\95यति {{PLURAL:$1|यà¥\8bà¤\9cà¤\95à¤\83|यà¥\8bà¤\9cà¤\95ाः}}]",
+       "number_of_watching_users_pageview": "[$1 à¤\85वलà¥\8bà¤\95यति {{PLURAL:$1|सदसà¥\8dयà¤\83|सदसà¥\8dयाः}}]",
        "rc_categories": "वर्गान् नियतीकरोतु ।",
        "rc_categories_any": "कश्चित्",
        "rc-change-size-new": "$1 {{PLURAL:$1|byte|bytes}} परिवर्तनपश्चात् ।",
        "filehist-thumb": "लघ्वाकृतिः",
        "filehist-thumbtext": "$1 इत्यस्य संस्करणस्य लघुस्वरूपम् ।",
        "filehist-nothumb": "अङ्गुष्टनखाकारकं नाश्ति ।",
-       "filehist-user": "यà¥\8bà¤\9cà¤\95ः",
+       "filehist-user": "सदसà¥\8dयः",
        "filehist-dimensions": "आयामाः",
        "filehist-filesize": "सञ्चिकाकारः ।",
        "filehist-comment": "टिप्पणी",
        "statistics-files": "उद्भारितसञ्चिकाः",
        "statistics-edits": "{{SITENAME}} व्यवस्थापनपर्यन्तं पुटसम्पादनानि ।",
        "statistics-edits-average": "प्रतिपुटं माध्यसम्पादनानि ।",
-       "statistics-users": "पà¤\9eà¥\8dà¤\9cà¥\80à¤\95à¥\83तà¤\83 [[Special:ListUsers|यà¥\8bà¤\9cà¤\95ः]]",
+       "statistics-users": "पà¤\9eà¥\8dà¤\9cà¥\80à¤\95à¥\83तà¤\83 [[Special:ListUsers|सदसà¥\8dयः]]",
        "statistics-users-active": "सक्रियाः सदस्याः",
        "statistics-users-active-desc": "गतेषु {{PLURAL:$1|day|$1 दिनेषु}} सक्रियाः योजकाः  ।",
        "pageswithprop": "प्रगुणविशेषयुतानि पृष्ठानि",
        "ncategories": "{{PLURAL:$1|वर्गः|वर्गाः }}",
        "ninterwikis": "$1 {{PLURAL:$1|अन्तार्विकी|अन्तार्विक्यः}}",
        "nlinks": "$1 {{PLURAL:$1|परिसन्धिः|परिसन्धयः}}",
-       "nmembers": "$1 {{PLURAL:$1|यà¥\8bà¤\9cà¤\95à¤\83|यà¥\8bà¤\9cà¤\95ाः}}",
+       "nmembers": "$1 {{PLURAL:$1|सदसà¥\8dयà¤\83|सदसà¥\8dयाः}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|सदस्यः|सदस्याः}}",
        "nrevisions": "$1 {{PLURAL:$1|पुनरावृत्तिः}}",
        "nimagelinks": "$1 {{PLURAL:$1|पुटम्|पुटानि}} प्रयुक्तानि ।",
        "linksearch-error": "वन्यपत्राणि आतिथेयस्य नाम्ना समं केवलं प्रभान्ति ।",
        "listusersfrom": "एतस्मात् आरभमाणान् योजकान् दर्शयतु ।",
        "listusers-submit": "दृश्यताम्",
-       "listusers-noresult": "यà¥\8bà¤\9cà¤\95ः न प्राप्तः ।",
+       "listusers-noresult": "सदसà¥\8dयः न प्राप्तः ।",
        "listusers-blocked": "अवरुद्धम् ।",
        "activeusers": "सक्रिययोजकानाम् आवली ।",
        "activeusers-intro": "एषा तु गतेषु $1 {{PLURAL:$1|दिनेषु}} कृतकार्याणां योजकाना आवली ।",
        "activeusers-from": "एतस्मात् आरभमाणान् योजकान् दर्शयतु ।",
        "activeusers-hidebots": "स्वयं चालकान् गोपयतु ।",
        "activeusers-hidesysops": "प्रशासकान् गोपयतु ।",
-       "activeusers-noresult": "यà¥\8bà¤\9cà¤\95ः न प्राप्तः ।",
+       "activeusers-noresult": "सदसà¥\8dयः न प्राप्तः ।",
        "listgrouprights": "योजकसमूहाधिकाराः ।",
        "listgrouprights-summary": "अधोदत्ता विकिपरिभाषितस्य सङ्गताभिगम्यताधिकारैः सहिता योजकसमूहस्य आवली । [[{{MediaWiki:Listgrouprights-helppage}}|additional information]]",
        "listgrouprights-key": "विवरणम् -\n* <span class=\"listgrouprights-granted\">दत्ताधिकाराः</span>\n* <span class=\"listgrouprights-revoked\">हृताधिकाराः</span>",
        "mailnologintext": "अस्य योजकेभ्यः विद्युन्मानपत्रप्रेषणार्थम् [[Special:UserLogin|नामाभिलेखनम्]] आवश्यकम् [[Special:Preferences|आद्यता]]यां प्रेषयितुं विद्युन्मानपत्रसङ्केतः आवश्यकः ।",
        "emailuser": "एतस्मै योजकाय वि-पत्रं प्रेष्यताम्",
        "emailuser-title-target": "{{GENDER:$1|एतस्मै सदस्याय}} वि-पत्रं प्रैष्यताम्",
-       "emailuser-title-notarget": "à¤\88पतà¥\8dर à¤¯à¥\8bà¤\9cà¤\95ः",
+       "emailuser-title-notarget": "वि-पतà¥\8dरयà¥\81à¤\95à¥\8dतà¤\83 à¤¸à¤¦à¤¸à¥\8dयः",
        "emailpagetext": "{{GENDER:$1|अस्मै}} योजकाय विद्युन्मानपत्रं प्रेषयितुम् अधो दत्तप्रपत्रम् उपयोक्तुं शक्नोति । \n[[Special:Preferences|your user preferences]] अत्र भवता विनिवेशितः वि-पत्रसङ्केतः सकाशात् इति स्थाने प्रतिभाति । अनेन स्वीकर्ता साक्षात् प्रत्युत्तरं दातुं प्रभविष्यति ।",
        "defemailsubject": "{{SITENAME}}\"$1\" इति योजकात् विद्युन्मानपत्रम् ।",
        "usermaildisabled": "योजकस्य विद्युन्मानपत्रं निष्क्रियम् ।",
        "usermaildisabledtext": "अस्यां विक्याम् अन्ययोजकेभ्यः विद्युन्मानपत्रं प्रेषयितुं नै शक्नोति ।",
        "noemailtitle": "विद्युन्मानपत्रसङ्केतः नास्ति ।",
        "noemailtext": "अस्य योजकस्य निरिदिष्टः विद्युन्मानपत्रसङ्केतः नास्ति ।",
-       "nowikiemailtext": "à¤\85यà¤\82 à¤¯à¥\8bà¤\9cà¤\95à¤\83 à¤\85नà¥\8dययà¥\8bà¤\9cà¤\95à¥\87भà¥\8dयà¤\83 à¤µà¤¿-पतà¥\8dराणि à¤¸à¥\8dवà¥\80à¤\95ार्तुं नेच्छति ।",
+       "nowikiemailtext": "à¤\85यà¤\82 à¤¸à¤¦à¤¸à¥\8dयà¤\83 à¤\85नà¥\8dयसदसà¥\8dयà¥\87भà¥\8dयà¤\83 à¤µà¤¿-पतà¥\8dराणि à¤¸à¥\8dवà¥\80à¤\95र्तुं नेच्छति ।",
        "emailnotarget": "स्वीकर्तुः अस्तित्वविहीनम् अथवा अमान्यं योजकनाम  ।",
        "emailtarget": "स्वीकर्तुः योजकनाम लिखतु ।",
        "emailusername": "योजकनामन्:",
        "enotif_body_intro_changed": "{{SITENAME}} पृष्ठं $1 इत्येतत् $PAGEEDITDATE इति दिनाङ्के {{gender:$2 इत्यनेन|$2 इत्यनया}} परिवर्तितमस्ति, वर्तमानसंस्करणार्थं $3 इत्येतत् दृश्यताम्।",
        "enotif_lastvisited": "भवतः पूवसन्दर्शनस्य पश्चात् सवृत्तपरिवर्तनार्थं $1 पश्यतु ।",
        "enotif_lastdiff": "परिवर्तनं दृष्टुम् एतत् $1 पश्यतु ।",
-       "enotif_anon_editor": "à¤\85नामà¤\95à¤\83 à¤¯à¥\8bà¤\9cà¤\95ः $1",
+       "enotif_anon_editor": "à¤\85नामà¤\95à¤\83 à¤¸à¤¦à¤¸à¥\8dयः $1",
        "enotif_body": "प्रिय $WATCHINGUSERNAME !,\n\n$PAGEINTRO $NEWPAGE\n\nसम्पादकस्य सारांशः : $PAGESUMMARY $PAGEMINOREDIT\n\nसम्पादकेन स्य सम्पर्कः :\nवि-पत्रम् : $PAGEEDITOR_EMAIL\nविकि    : $PAGEEDITOR_WIKI\n\nयावत् पुनःप्रवेशं प्राप्य भवान्/भवती एतत् पृष्ठं प्रति पुनः न गच्छति, तावत् अन्यपरिवर्तने सत्यपि भवते/भवत्यै सूचना प्रेषयितुं न शक्यते ।\nइच्छति चेत्, स्वनिरीक्षासूच्यां स्थितानां पृष्ठानां चिह्नं परिवर्तयितुं शक्नोति ।\n\n{{SITENAME}} सहायकानां सूचकप्रणाली\n\n--\nस्वस्य वि-पत्रस्य सूचनायाः व्यवस्थां परिवर्तयितुम् अत्र दृश्यताम् \n{{canonicalurl:{{#special:Preferences}}}}\n\nस्वस्य निरीक्षासूच्याः व्यवस्थां परिवर्तयितुम् अत्र दृश्यताम् \n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nएतत् पृष्ठं स्वनिरीक्षासूच्याः अपाकर्तुम् \n$UNWATCHURL\n\nपरामर्शं दातुम् उत साहाय्यं प्राप्तुम् :\n$HELPPAGE",
        "created": "सृष्टम् ।",
        "changed": "परिवर्तितम् ।",
        "autoblockid": "स्वयं पिहितम् । $1",
        "block": "योजकम् अवरुणद्धु ।",
        "unblock": "योजकम् अनवरुणद्धु ।",
-       "blockip": "{{GENDER:$1|यà¥\8bà¤\9cà¤\95ः}} अवरुद्ध्यताम्",
+       "blockip": "{{GENDER:$1|सदसà¥\8dयः}} अवरुद्ध्यताम्",
        "blockip-legend": "योजकम् अवरुणद्धु ।",
        "blockiptext": "विशिष्टं  IP सङ्केतम् अथवा योजकनाम लेखानाधिकारस्य प्राप्तये निम्नदत्तपत्रस्य उपयोगं करोतु ।\nकेवलं नाशकत्वम् अवरोद्धुं एतस्य उपयोगं करोतु । [[{{MediaWiki:Policy-url}}|नीतिः]] इत्यानुसारं करणीयम् ।\nअधः विशिष्टं कारणमपि लिखतु ।",
        "ipaddressorusername": "आइ.पी.सङ्केतः अथवा योजकनाम :",
        "autoblocker": "भवतः/भवत्याः अन्तर्जालसङ्केतः \"[[User:$1|$1]]\" इत्यनेन उपयुज्यमानः अस्ति, अतः स्वतः अवरुद्धः ।\n$1 इत्यस्य अवरोधनस्य \"$2\" इत्येतत् कारणं विद्यते ।",
        "blocklogpage": "अवरोधाऽऽवलिः",
        "blocklog-showlog": "अयम् एपि सङ्केतः पूर्वमेव अवरुद्धः । \nअवरोधसूची आधाराय अधः दत्तः अस्ति :",
-       "blocklog-showsuppresslog": "à¤\85यà¤\82 à¤¯à¥\8bà¤\9cà¤\95ः पूर्वमेव अवरुद्धः सङ्गुप्तः च  ।\nनिग्रहकरणं तु अधः उल्लिखितम् ।",
+       "blocklog-showsuppresslog": "à¤\85यà¤\82 à¤¸à¤¦à¤¸à¥\8dयः पूर्वमेव अवरुद्धः सङ्गुप्तः च  ।\nनिग्रहकरणं तु अधः उल्लिखितम् ।",
        "blocklogentry": "$2 $3 समयपर्यन्तं [[$1]] एतत् प्रतिबन्धितं वर्तते",
        "reblock-logentry": "[[$1]] इत्यस्य अवरोधस्य विन्यासः परिवर्तितः अयं $2 $3 समये विनश्येत् ।",
        "blocklogtext": "इयम् अवरुद्धानवरुद्धप्रक्रियायाः अवलोकनस्य सूचिका । \nस्वयम् अवरुद्धानाम् ऐपिसङ्केतानाम् आवली न कृता ।\nसद्यः उपयोगनिषेधस्य अवरोधानाम् आवलीप्राप्तये [[Special:BlockList|block list]] अवलोकयतु ।",
        "sorbsreason": "DNSBL उपयोगः {{SITENAME}} कृतस्य भवतः ऐपिसङ्केतः मुक्तप्रतिहस्तकः इति आवलीगतः",
        "sorbs_create_account_reason": "DNSBL उपयुक्तः {{SITENAME}} अतः भवतः ऐपिसङ्केतः अवरुद्धः यतः अयं मुक्तप्रतिहस्तकः इति आवलीगतः । अतः भवान् योजकस्थानं निर्मातुं न शक्नोति ।",
        "xffblockreason": "X-Forwarded-For इत्यस्मिन् स्थितः शिरोभागः भवाताम् उत यत् प्रतिनिधिवितरकं भवान्/भवती उपयुङ्क्ते, सः प्रतिबन्धितः अस्ति । अवरोधस्य मूलकारणम् $1 आसीत् ।",
-       "cant-see-hidden-user": "यà¤\82 à¤¯à¥\8bà¤\9cà¤\95à¤\83 à¤\85वरà¥\8bदà¥\8dधà¤\82 à¤­à¤µà¤¾à¤¨à¥\8d à¤ªà¥\8dरयतमानà¤\83 à¤¸à¤\83 à¤ªà¥\82रà¥\8dवमà¥\87व à¤\85वरà¥\81दà¥\8dधà¤\83 à¤¸à¤\99à¥\8dà¤\97à¥\81पà¥\8dतà¤\83 à¤\9a à¥¤\nभवानà¥\8d à¤¤à¥\81 à¤¯à¥\8bà¤\9cà¤\95सà¤\99à¥\8dà¤\97à¥\8bपनाधिà¤\95ारयà¥\81à¤\95à¥\8dतà¤\83 à¤¨ à¥¤ à¤\85तà¤\83 à¤­à¤µà¤¾à¤¨à¥\8d à¤¯à¥\8bà¤\9cà¤\95ावरोधं दृष्टुं सम्पादयितुं वा न शक्नोति ।",
+       "cant-see-hidden-user": "यà¤\82 à¤¸à¤¦à¤¸à¥\8dयमà¥\8d à¤\85वरà¥\8bदà¥\8dधà¤\82 à¤­à¤µà¤¾à¤¨à¥\8d à¤ªà¥\8dरयतमानà¤\83 à¤¸à¤\83 à¤ªà¥\82रà¥\8dवमà¥\87व à¤\85वरà¥\81दà¥\8dधà¤\83 à¤¸à¤\99à¥\8dà¤\97à¥\81पà¥\8dतà¤\83 à¤\9a à¥¤\nभवानà¥\8d à¤¤à¥\81 à¤¸à¤¦à¤¸à¥\8dयासà¤\99à¥\8dà¤\97à¥\8bपनाधिà¤\95ारयà¥\81à¤\95à¥\8dतà¤\83 à¤¨ à¥¤ à¤\85तà¤\83 à¤­à¤µà¤¾à¤¨à¥\8d à¤¸à¤¦à¤¸à¥\8dयावरोधं दृष्टुं सम्पादयितुं वा न शक्नोति ।",
        "ipbblocked": "भवान् अन्ययोजकान् अवरोद्धुम् विमोचयितुं वा न शक्नोति । यतः भवान् तु अवरुद्धः अस्ति ।",
        "ipbnounblockself": "भवान् भवन्तं मोचयितुं नैव शक्नोति ।",
        "lockdb": "दत्तपाठान् अवरुणद्धु ।",
        "scarytranscludefailed-httpstatus": "[$1 : इत्यस्य कृते फलकसङ्कर्षणम् असफलम् HTTP $2]",
        "scarytranscludetoolong": "[URLअतिदीर्घा अस्ति ]",
        "deletedwhileediting": "पूर्वसूचना : भवतः सम्पादनारम्भात् पश्चात् एतत् पुटम् अपमर्जितम् ।",
-       "confirmrecreate": "यà¥\8bà¤\9cà¤\95à¤\83 [[User:$1|$1]] ([[User talk:$1|समà¥\8dभाषणमà¥\8d]]) à¤¸à¤\95ारणà¤\82 à¤­à¤µà¤¤à¤\83 à¤¸à¤®à¥\8dपादनातà¥\8d à¤ªà¤°à¤\82 à¤ªà¥\81à¤\9fमà¥\87ततà¥\8d à¤\85पमरà¥\8dà¤\9cितमà¥\8d à¥¤ \n: ''$2''\nएतत्पुटं पुनर्निमातुम् इच्छति वेति दृढयतु ।",
-       "confirmrecreate-noreason": "यदा à¤­à¤¾à¤µà¤¾à¤¨à¥\8d à¤\85सà¥\8dय à¤ªà¥\81à¤\9fासà¥\8dय à¤¸à¤®à¥\8dपादनमà¥\8d à¤\86रबà¥\8dधवानà¥\8d à¤¤à¤¤à¥\8dपशà¥\8dà¤\9aातà¥\8d à¤\85नà¥\8dयà¤\83 à¤¯à¥\8bà¤\9cà¤\95ः [[User:$1|$1]] ([[User talk:$1|talk]]) एतत् अपनीतवान् । अतः एतत्पुटं पुनर्निमातुम् इच्छति वेति दृढयतु ।",
+       "confirmrecreate": "सदसà¥\8dयà¤\83 [[User:$1|$1]] ([[User talk:$1|समà¥\8dभाषणमà¥\8d]]) à¤¸à¤\95ारणà¤\82 à¤­à¤µà¤¤à¤\83 à¤¸à¤®à¥\8dपादनातà¥\8d à¤ªà¤°à¤\82 à¤ªà¥\81à¤\9fमà¥\87ततà¥\8d à¤\85पमरà¥\8dà¤\9cितमà¥\8d à¥¤ \n: <em>$2</em>\nएतत्पुटं पुनर्निमातुम् इच्छति वेति दृढयतु ।",
+       "confirmrecreate-noreason": "यदा à¤­à¤¾à¤µà¤¾à¤¨à¥\8d à¤\85सà¥\8dय à¤ªà¥\81à¤\9fासà¥\8dय à¤¸à¤®à¥\8dपादनमà¥\8d à¤\86रबà¥\8dधवानà¥\8d à¤¤à¤¤à¥\8dपशà¥\8dà¤\9aातà¥\8d à¤\85नà¥\8dयà¤\83 à¤¸à¤¦à¤¸à¥\8dयः [[User:$1|$1]] ([[User talk:$1|talk]]) एतत् अपनीतवान् । अतः एतत्पुटं पुनर्निमातुम् इच्छति वेति दृढयतु ।",
        "recreate": "पुनर्निर्मीयताम्",
        "confirm_purge_button": "अस्तु",
        "confirm-purge-top": "अस्य पुटस्य इतिहाससङ्ग्रहं निर्मलं करोति वा ?",
        "special-characters-title-endash": "en dash",
        "special-characters-title-emdash": "em dash",
        "special-characters-title-minus": "minus sign",
-       "mw-widgets-titleinput-description-new-page": "पृष्ठं न विद्यते"
+       "mw-widgets-titleinput-description-new-page": "पृष्ठं न विद्यते",
+       "api-error-blacklisted": "कृपया भिन्नं विवरणपूर्वकं शीर्षकं चीयताम् ।"
 }
index f81d91e..177b334 100644 (file)
@@ -4,32 +4,33 @@
                        "Aursani",
                        "아라",
                        "Fayazburiro",
-                       "Sindhu"
+                       "Sindhu",
+                       "Mehtab ahmed"
                ]
        },
-       "tog-underline": "هيٺان ڏنل لڪير واري لنڪ",
-       "tog-hideminor": "تازÙ\8aÙ\88Ù\86 Ù\86Ù\86Ú\8dÙ\8aÙ\88Ù\86 تبدليون لڪايو",
+       "tog-underline": "ڳنڍڻي هيٺان لڪير:",
+       "tog-hideminor": "تازÙ\8aÙ\88Ù\86 Ù\85عÙ\85Ù\88Ù\84Ù\8a تبدليون لڪايو",
        "tog-hidepatrolled": "تازيون گھميل تبديليون لڪايو",
-       "tog-newpageshidepatrolled": "نئين صفحن تان تازي گھميل صفحي جي لسٽ لڪايو",
-       "tog-numberheadings": "خودڪار نمبرن واري هيڊنگ",
-       "tog-showtoolbar": "اÙ\8aÚ\8aÙ½ Ø¨ار ڏيکاريو",
-       "tog-editondblclick": "ٻٽي ڪلڪ تي صفحا ايڊت ڪيو",
-       "tog-watchcreations": "Ù\85Ù\86Ù\87Ù\86جا Ø³Ø±Ø¬Ù\8aÙ\84 ØµÙ\81حا Ù\85Ù\86Ù\87Ù\86جÙ\8a Ù\86Ù\87ار فهرست ۾ رکو",
-       "tog-watchdefault": "Ù\85Ù\86Ù\87Ù\86جا ØªØ±Ù\85Ù\8aÙ\85Ù\8aÙ\84 ØµÙ\81حا Ù\85Ù\86Ù\87Ù\86جÙ\8a Ù\86Ù\87ار فهرست تي رکو",
+       "tog-newpageshidepatrolled": "نَوَن صفحن واري فهرست مان تازو گھميل صفحا لڪايو",
+       "tog-numberheadings": "خودڪار نمبرن واريون سُرخيون",
+       "tog-showtoolbar": "سÙ\86Ù\88ار Ø§Ù\88زار ڏيکاريو",
+       "tog-editondblclick": "ٻٽي ڪلڪ تي صفحا ايڊت ڪريو",
+       "tog-watchcreations": "Ù\85Ù\86Ù\87Ù\86جا Ø³Ø±Ø¬Ù\8aÙ\84 ØµÙ\81حا Ù\85Ù\86Ù\87Ù\86جÙ\8a Ù½Ù\8aÙ½ فهرست ۾ رکو",
+       "tog-watchdefault": "Ù\85Ù\86Ù\87Ù\86جا ØªØ±Ù\85Ù\8aÙ\85Ù\8aÙ\84 ØµÙ\81حا Ù\85Ù\86Ù\87Ù\86جÙ\8a Ù½Ù\8aÙ½ فهرست تي رکو",
        "tog-watchdeletion": "آئون جيڪي صفحا ڊاهيان، سي منهنجي ٽيٽ فهرست تي رکو",
        "tog-watchrollback": "انهن صفحن کي منهنجي ٽيٽ فهرست تي رکو، جن ۾ تبديلين کي مون واپس ورايو آهي.",
-       "tog-previewontop": "ترميمي باڪس مٿان پيش نگاهه ڏيکاريو",
-       "tog-previewonfirst": "پهرين ترميم تي پيش نگاهه ڏيکاريو",
+       "tog-previewontop": "ترميمي باڪس مٿان پيش نگاهہ ڏيکاريو",
+       "tog-previewonfirst": "پهرين ترميم تي پيش نگاهہ ڏيکاريو",
        "tog-enotifusertalkpages": "منهنجي مباحثي صفحي ۾ تبديليءَ جي صورت ۾ مون کي برق ٽپال اماڻيو",
        "tog-enotifminoredits": "صفحن ۾ معمولي ترميمن جي صورت ۾ بہ مون کي برق ٽپال ڪريو",
        "tog-shownumberswatching": "ٽيٽيندڙ يوزرس جو تعداد ڏيکاريو",
        "tog-oldsig": "موجوده دستخط",
        "tog-watchlisthideliu": "لاگ اِن ٿيل يوزرس جون ڪيل ترميمون ٽيٽ فهرست ۾ نہ ڏيکاريو",
        "tog-ccmeonemails": "ٻين يوزرس ڏانهن منهنجي موڪليل برق ٽپال جو پرت مون کي اماڻيو",
-       "tog-diffonly": "تفاوت هيٺان صفحي جو مواد نه ڏيکاريو",
+       "tog-diffonly": "تفاوت هيٺان صفحي جو مواد نہ ڏيکاريو",
        "tog-showhiddencats": "لڪل زمرا ڏيکاريو",
-       "underline-always": "هميشه",
-       "underline-never": "ڪڏهن به نه",
+       "underline-always": "هميشہ",
+       "underline-never": "ڪڏهن بہ نہ",
        "sunday": "آچر",
        "monday": "سومر",
        "tuesday": "اڱارو",
        "category_header": "\"$1\" زمري جا صفحا",
        "subcategories": "ذيلي زمرا",
        "category-media-header": " \"$1\" زمري اندر ذريعات",
-       "category-empty": "''في الوقت هن زمري ۾ ڪي به صفحا يا ذريعات شامل ناهن.''",
+       "category-empty": "''في‌الوقت هن زمري ۾ ڪي بہ صفحا يا ذريعات شامل ناهن.''",
        "hidden-categories": "{{PLURAL:$1|لڪيل زمرو|لڪيل زمرا}}",
        "hidden-category-category": "لڪل زمرا",
+       "category-subcat-count": "{{PLURAL:$2|هن ذمري ۾ رڳو هيٺيون ذيلي ذمرو آهي.|هن ذمري ۾ ڪل $2 مان هيٺيان {{PLURAL:$1|subcategory|$1 ذيلي ذمرا}} آهن.}}",
        "listingcontinuesabbrev": "جاري..",
        "about": "بابت",
-       "article": "مسوَدو",
-       "newwindow": "(نئين کڙڪيءَ ۾ کلندو)",
+       "article": "موادي صفحو",
+       "newwindow": "(نئين دريءَ ۾ کلندو)",
        "cancel": "رد",
        "moredotdotdot": "اڃا...",
        "mypage": "منهنجو صفحو",
-       "mytalk": "ڳاله ٻوله",
+       "mytalk": "ڳالهہ ٻولہ",
        "navigation": "رهنمائي",
-       "and": "&#32;۽",
+       "and": "&#32؛۽",
        "qbfind": "ڳوليو",
        "qbbrowse": "جھانگيو",
        "qbedit": "سنواريو",
        "faq": "ڪپوس",
        "faqpage": "Project:ڪپوس",
        "namespaces": "نانءُ پولار:",
-       "variants": "اÙ\82ساÙ\85",
+       "variants": "بÙ\8eدÙ\8eÙ\84Ù\8e",
        "navigation-heading": "رهنما مينيو",
        "errorpagetitle": "چُڪَ",
        "returnto": "$1 ڏانهن وَرو.",
        "permalink": "مسقتل ڳنڍڻو",
        "print": "ڇاپيو",
        "view": "نگاهہ",
+       "view-foreign": "$1 تي ڏسو",
        "edit": "سنواريو",
-       "edit-local": "مقامي وضاحت کي ترميميو",
+       "edit-local": "مقامي تشريح کي ترميميو",
        "create": "سرجيو",
+       "create-local": "مقامي تشريح ڏيو",
        "editthispage": "هيءُ صفحو سنواريو",
        "create-this-page": "اهو صفحو نئين سر جوڙيو",
        "delete": "ڊاھيو",
        "protect": "تحفظيو",
        "protect_change": "تبديل ڪريو",
        "protectthispage": "هيءُ صفحو تحفظيو",
-       "unprotect": "Ø­Ù\81اظت Ù\85Ù½يو",
-       "unprotectthispage": "Ù\87Ù\86 ØµÙ\81Ø­Ù\8a Ø¬Ù\8a Ø­Ù\81اظت Ù\85Ù½يو",
+       "unprotect": "تحÙ\81ظ Ø¨Ø¯Ù\84ايو",
+       "unprotectthispage": "Ù\87Ù\86 ØµÙ\81Ø­Ù\8a Ø¬Ù\88 ØªØ­Ù\81ظ Ø¨Ø¯Ù\84ايو",
        "newpage": "نئون صفحو",
        "talkpage": "هن صفحي تي بحث ڪريو",
        "talkpagelinktext": "بحث",
        "otherlanguages": "ٻين ٻولين ۾",
        "redirectedfrom": "($1 کان چوريل)",
        "redirectpagesub": "چوريل صفحو",
-       "redirectto": "منتقل ڪيو",
+       "redirectto": "ڏانهن چوريو",
        "lastmodifiedat": "هيءُ صفحو آخري ڀيرو $2، $1ع تي ترميميو ويو هو.",
        "viewcount": "هيءُ صفحو {{PLURAL:$1|دفعو|$1 دفعا}} ڏسجي چڪو آهي.",
        "protectedpage": "تحفظيل صفحو",
        "site-atom-feed": "$1 اڻو روان رسد",
        "page-rss-feed": "\"$1\" RSS برق مواد",
        "page-atom-feed": "\"$1\" اڻو روان رسد",
-       "red-link-title": "$1 (صفحو وجود نه ٿو رکي)",
+       "red-link-title": "$1 (صفحو وجود نہ ٿو رکي)",
        "nstab-main": "صفحو",
        "nstab-user": "تعارفي صفحو",
        "nstab-media": "ذريعاتي صفحو",
        "nstab-template": "سانچو",
        "nstab-help": "امدادي صفحو",
        "nstab-category": "زمرو",
-       "nosuchspecialpage": "اهڙو ڪو به خاص صفحو ناهي",
+       "nosuchspecialpage": "اهڙو ڪو بہ خاص صفحو ناهي",
        "error": "چُڪَ",
        "databaseerror": "اعدادخاني ۾ چڪ",
        "readonly": "اعدادخانو بنديل",
        "missingarticle-diff": "(تفاوت: $1، $2)",
        "internalerror": "اندروني خرابي",
        "internalerror_info": "داخلي چُڪَ: $1",
-       "filerenameerror": "\"$1\" نالي فائيل تي نئون نالو \"$2\" رکجي نه سگھجو.",
-       "filedeleteerror": "\"$1\" فائيل ڊهي نه سگھيو.",
-       "filenotfound": "\"$1\" نالي فائيل لڀجي نه سگھيو.",
+       "filerenameerror": "\"$1\" نالي فائيل تي نئون نالو \"$2\" رکجي نہ سگھجو.",
+       "filedeleteerror": "\"$1\" فائيل ڊهي نہ سگھيو.",
+       "filenotfound": "\"$1\" نالي فائيل لڀجي نہ سگھيو.",
        "unexpected": "غير متوقع قدر: \"$1\"=\"$2\".",
        "badtitle": "غيردرست عنوان",
+       "badtitletext": "صفحي جو گھربل عنوان ڪار ڪونهي، يا خالي آهي، يا وري غيردرست طريقي سان ڳنڍيل بين‌الزباني يا بين‌الوڪي عنوان آهي. \nان ۾ هڪ يا هڪ کان وڌيڪ اهڙا اکر موجود آهن، جيڪي عنوان ۾ استعمال ڪري نہ ٿا سگھجن.",
        "viewsource": "ڪوڊ ڏسو",
        "protectedpagetext": "هيءُ صفحو ترميمن کان تحفظيل آهي.",
        "viewsourcetext": "توهان هن صفحي جو ڪوڊ ڏسي ۽ نقل ڪري سگھو ٿا:",
        "namespaceprotected": "توهان کي نانءُ پولار '''$1''' جا صفحا سنوارڻ جا اختيار ناهن.",
        "ns-specialprotected": "خاص صفحا سنواري نٿا سگھجن.",
        "yourname": "يُوزرنانءُ:",
+       "userlogin-yourname": "يوزرنانءُ",
+       "userlogin-yourname-ph": "پنهنجو يوزرنانءُ ڄاڻايو",
        "yourpassword": "ڳجھو لفظ:",
+       "userlogin-yourpassword": "ڳجھو لفظ",
+       "userlogin-yourpassword-ph": "پنهنجو ڳجھو لفظ ڄاڻايو",
+       "createacct-yourpassword-ph": "ڳجھو لفظ داخل ڪريو",
+       "createacct-yourpasswordagain": "ڳجھي لفظ جي خاطري ڪريو",
+       "createacct-yourpasswordagain-ph": "ٻيهر ڳجھو لفظ داخل ڪريو",
        "remembermypassword": "هن ڳڻپيوڪر تي مون کي ياد رکو (for a maximum of $1 {{PLURAL:$1|day|days}})",
+       "userlogin-remembermypassword": "مون کي لاگ اِن رهڻ ڏيو",
        "login": "لاگ اِن",
        "nav-login-createaccount": "لاگ اِن ٿيو / کاتو کوليو",
        "userlogin": "لاگ اِن ٿيو / کاتو کوليو",
        "logout": "لاگ آئوٽ",
        "userlogout": "لاگ آئوٽ",
+       "userlogin-noaccount": "کاتو نہ ٿا رکو؟",
+       "userlogin-joinproject": "{{SITENAME}} ۾ شامل ٿيو",
        "nologin": "پنهنجو کاتو نه ٿا رکو؟ '''$1'''.",
        "nologinlink": "نئون کاتو کوليو",
        "createaccount": "کاتو کوليو",
        "gotaccount": "ڇا اڳي ئي کاتو رکو ٿا؟ '''$1'''.",
        "gotaccountlink": "لاگ اِن",
+       "userlogin-resetpassword-link": "ڳجھو لفظ وساري ويٺا آهيو؟",
+       "userlogin-helplink2": "لاگ اِن ٿيڻ لاءِ مدد",
+       "createacct-emailoptional": "برق ٽپال پتو (مرضيءَ موجب)",
+       "createacct-email-ph": "پنهنجو برق ٽپال پتو ڄاڻايو",
        "createaccountmail": "بذريعه برق ٽپال",
+       "createacct-captcha": "حفاظتي روڪ",
+       "createacct-imgcaptcha-ph": "مٿي ظاهر ٿيندڙ ٽيڪسٽ ٽائيپ ڪريو",
+       "createacct-submit": "پنهنجو کاتو کوليو",
+       "createacct-benefit-heading": "{{SITENAME}} توهان جهڙن سڄڻن ٺاهيو آهي.",
+       "createacct-benefit-body1": "{{PLURAL:$1|ترميم|ترميمون}}",
+       "createacct-benefit-body2": "{{PLURAL:$1|صفحو|صفحا}}",
+       "createacct-benefit-body3": "حاليہ $1 ڀاڱيدار",
        "loginsuccesstitle": "لاگ اِن ڪامياب",
        "loginsuccess": "'''هاڻي توهان {{SITENAME}} تي بطور \"$1\" لاگ اِن ٿيل آهيو.'''",
        "nosuchuser": "\"$1\" نالي سان ڪو به يوزر نه آهي. هِجي چڪاسيو، يا نئون کاتو کوليو.",
-       "nosuchusershort": "\"$1\" نالي ڪو به يُوزر ناهي.\nهِجي جي پڪ ڪندا.",
+       "nosuchusershort": "\"$1\" نالي ڪو بہ يُوزر ناهي.\nهِجي جي پڪ ڪندا.",
        "nouserspecified": "توهان کي ڪو يوزرنانءُ ڄاڻائڻو پوندو.",
        "wrongpassword": "ڏنل ڳجھو لفظ غير درست آهي. مهرباني ڪري ٻيهر ڪوشش ڪندا.",
        "wrongpasswordempty": "ڏنل ڳجھو لفظ خالي هو. مهرباني ڪري وري ڪوشش ڪندا.",
        "acct_creation_throttle_hit": "معاف ڪجَو، اوهان اڳي ئي $1 کاتا کولي چڪا آهيو. ان کان وڌيڪ نه ٿا کولي سگھجن.",
        "accountcreated": "کاتو کلي چڪو",
        "accountcreatedtext": "$1 نالي يوزر کاتو کلي چڪو آھي.",
+       "loginlanguagelabel": "ٻولي: $1",
        "pt-login": "لاگ ان ٿيو",
+       "pt-login-button": "لاگ اِن",
        "pt-createaccount": "کاتو کوليو",
+       "pt-userlogout": "لاگ آئوٽ",
        "changepassword": "ڳجھو لفظ تبديل ڪريو",
        "retypenew": "نئون ڳجھو لفظ ٻيهر ٽائيپ ڪندا:",
+       "passwordreset": "ڳجھو لفظ مَٽايو",
+       "changeemail-passwordrequired": "توهانکي هن تبديلي جي تصديق ڪرڻ جي لاءِ پنهنجو ڳجھو لفظ داخل ڪرڻ جي ضرورت پوندي.",
        "bold_sample": "گهري تحرير",
        "bold_tip": "گهري لکت",
        "italic_sample": "ترڇي لکت",
        "extlink_tip": "خارجي ڳنڍڻو (اڳياڙي http://  نه وساريندا)",
        "headline_sample": "سرخي",
        "headline_tip": "سطح 2 جي سرخي",
+       "nowiki_tip": "وڪي فارميٽڱ کي نظرانداز ڪريو",
        "image_tip": "جَڙيل فائيل",
        "media_tip": "فائيل جو ڳنڍڻو",
        "sig_tip": "توهان جي صحيح بمع اوقاتي مهر",
        "hr_tip": "افقي لڪير (غيرضروري استعمال کان پاسو ڪندا)",
        "summary": "تَتُ:",
-       "subject": "موضوع/سُرخي:",
+       "subject": "موضوع:",
        "minoredit": "هيءَ هڪ معمولي ترميم آهي",
        "watchthis": "هيءُ صفحو سانڍيو",
        "savearticle": "صفحو سانڍيو",
-       "preview": "پيش نگاهه",
-       "showpreview": "پيش نگاهه",
+       "preview": "پيش نگاهہ",
+       "showpreview": "پيش نگاهہ",
        "showdiff": "تبديليون ڏيکاريو",
-       "anoneditwarning": "'''خبردار:''' توهان لاگ اِن ٿيل ناهيو.\nهن صفحي جي سوانح ۾ توهان جو آءِ پي پتو درج ڪيو ويندو.",
+       "anoneditwarning": "<strong>خبردار:</strong> توهان لاگ اِن ٿيل نہ آهيو. جيڪڏهن توهان ڪي ترميمون ڪيون تہ هن صفحي جي سوانح ۾ توهان جو آءِ پي پتو درج ڪيو ويندو. جي توهان <strong>[$1 لاگ اِن]</strong> ٿيو ٿا <strong>[$2 کاتو کوليو] </strong> ٿا، تہ توهان جو ترميمون توهان جي يوزرنانءُ سن منسوب ڪيون وينديون، جنهن جا ٻيا بہ فائدا ٿي سگھن ٿا.",
        "missingcommenttext": "براءِ مهرباني هيٺ پنهنجا تاثرات درج ڪندا.",
        "summary-preview": "تت تي پيش نگاهه:",
+       "subject-preview": "موضوع جو مشاهدو:",
        "blockedtitle": "يُوزر بندشيل آهي.",
        "blockedtext": "'''توهان جي يوزرنانءُ يا آءِ پي کي بندشيو ويو آهي.'''\n\nبندش $1 هنئي. جڏهن ته ڄاڻايل سبب ''$2'' آهي.\n\n\n* بندش جو آغاز: $8\n* بندش جو انجام: $6\n* بندش جو هدف: $7\n\nاهڙي روڪ تي بحث ڪرڻ لاءِ توهان $1 يا ڪنهن ٻي [[{{MediaWiki:Grouppage-sysop}}|منتظم]] سان رابطو ڪري سگھو ٿا. جيڪڏهن توهان جو درست [[Special:ترجيحات|کاتو ترجيحات]] ۾ درست برق ٽپال پتو درج ٿيل نه آهي ته توهان 'هن يوزر کي برق ٽپال ڪريو' وارو فيچر نه ٿا \nYou cannot use the 'e-mail this user' feature unless a valid e-mail address is specified in your [[Special:Preferences|account preferences]] and you have not been blocked from using it.\nاستعمال ڪري سگھو. توهان جو هاڻوڪو آءِ پي پتو $3 آهي، ۽ بندش سڃاڻپ $5 آهي. مهرباني ڪري ڪنهن به پڇا ڳاڇا يا لهوچڙ  لاءِ انهن مان ڪنهن هڪ يا ٻنهي جو حوالو ڏيندا.",
        "blockednoreason": "سبب اڻڄاڻايل",
+       "loginreqlink": "لاگ اِن",
        "accmailtitle": "ڳجھو لفظ اماڻجي چڪو.",
        "newarticle": "(نئون)",
        "newarticletext": "توهان اهڙي صفحي جو ڳنڍڻو وٺي هتي پهتا آهيو، جيڪو اڃا وجود نه ٿو رکي. اهڙو صفحو جوڙڻ لاءِ هيٺين باڪس ۾ ٽائيپ ڪرڻ شروع ڪريو (وڌيڪ ڄاڻڻ لاءِ [$1 امدادي صفحو] ڏسندا). جي توهان هتي غلطيءَ ۾ اچي ويا آهيو ته رڳو پنهنجي جهانگُوءَ جو '''back''' بٽڻ ڪلڪ ڪندا.",
+       "noarticletext": "في‌الوقت هن صفحي اندر ڪو بہ ٽيڪسٽ نہ آهي. توهان ٻين صفحن ۾ [[Special:Search/{{PAGENAME}}|search ساڳي عنوان جي ڳولا]] ڪري سگھو ٿا.  \n\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} لاڳاپيل لاگس ۾ ڳوليو]،\nor [{{fullurl:{{FULLPAGENAME}}|action=edit}} هيءُ صفحو ترميميو]</span>.",
        "previewnote": "'''هيءَ محظ پيش نگاهه آهي، ترميمون اڃا سانڍجون ناهن!'''",
        "editing": "زير ترميم $1",
+       "creating": "$1 سرجيندي",
        "editingsection": "زير ترميم $1 (سيڪشن)",
        "copyrightwarning": "ياد رکندا ته {{SITENAME}} لاءِ سموريون ڀاڱيداريون $2 تحت پڌريون ڪجن ٿيون (تفصيلن لاءِ $1 ڏسندا). اوهان جي تحرير کي {{SITENAME}} جي قائدن تحت ترميمي سگهجي ٿو. جيڪڏهن اوهان نه ٿا چاهيو ته اوهان جي لکڻين کي بي رحميءَ سان ترميميو وڃي يا ورهائي عام ڪيو وڃي ته پوءِ پنهنجي لکڻي هتي جمع نه ڪرايو. پنهنجو مواد هتي جمع ڪرڻ جو مطلب هوندو ته توهان کي جمع ڪرايل مواد جي مفت فراهمي ۽ کُليل تبديليءَ تي ڪو به اعتراز ناهي.<br />\nتوهان اهڙي پڪ ڏيڻ جا پابند پڻ آهيو ته توهان جو جمع ڪرايل مواد توهان جو پنهنجو لکيل آهي يا وري توهان ڪنهن مفت وسيلي تان ڪاپي ڪيو آهي.\n'''تحفظيل حق ۽ واسطا رکندڙ مواد واسطيدار مالڪ کان اڳواٽ اجازت وٺڻ کان سواءِ هتي جمع نه ڪريو.'''",
-       "templatesused": "هن صفحي تي استعمال ٿيندڙ سانچا:",
+       "templatesused": "هن صفحي تي استعمال ٿيندڙ {{PLURAL:$1|سانچو|سانچا}}:",
        "templatesusedpreview": "هن پيش نگاهه ۾ استعمال ٿيل سانچا:",
        "template-protected": "(تحفظيل)",
        "template-semiprotected": "(نيم تحفظيل)",
+       "hiddencategories": "هيءُ صفحو  {{PLURAL:$1|1 لڪل زمري|$1 لڪل زمرن}}: جو رڪن آهي:",
        "nocreatetext": "{{SITENAME}} نوان صفحا سرجڻ جي روڪَ ڪئي آهي.\nتوهان اڳي ئي موجود صفحن کي سنواري سگھو ٿا، يا [[Special:UserLogin|لاگ اِن ٿي يا نئون کاتو کولي سگھو ٿا]].",
+       "permissionserrorstext-withaction": "هيٺين {{PLURAL:$1|سبب|سببن}} ڪري، توهان کي $2 جي اجازت ڪانهي.",
        "recreate-moveddeleted-warn": "'''خبردار: توهان اهڙو صفحو نئين سر سرجي رهيا آهيو جيڪو اڳي ڊاٺو ويو آهي.'''\n\nبهتر ٿيندو ته توهان سوچي وٺو ته ڇا ان صفحي کي سنوارڻ بهتر ٿيندو.\nتوهآن جي سهوليت خاطر هتي ان صفحي جو ڊاٺ لاگ ميسر ڪجي ٿو:",
+       "moveddeleted-notice": "هيءُ صفحو ڊهي چڪو آهي. \nحوالي طور ڊاٺ ۽ چور لاگ هيٺ ڏجي ٿو.",
        "duplicate-args-warning": "وارننگ: [[:$2]]کي [[:$1]] ڪال ڪري رهيو آهي، ساڻ هڪ کان وڌيڪ قدرن لاءِ ’$3‘ پيراميٽرس لاءِ. فقط آخري قدر مهيا ڪيل استعمال ڪيو ويندو.",
        "viewpagelogs": "هن صفحي جا لاگ ڏسو",
        "currentrev": "هاڻوڪو مسودو",
+       "currentrev-asof": "$1 جو تازو ترين مسودو",
        "revisionasof": "$1 وارو پرت",
-       "revision-info": "$1 تي $2 جي ترميم بعد مسودو",
+       "revision-info": "$1 تي {{GENDER:$6|$2}}$7 جي ترميم بعد مسودو",
        "previousrevision": "←اڃا پراڻو پرت",
        "nextrevision": "اڃا نئون پرت→",
        "currentrevisionlink": "هاڻوڪو پرت",
        "historyempty": "(خالي)",
        "history-feed-item-nocomment": "$2 تي $1",
        "pagehist": "صفحي جي سوانح",
-       "history-title": "\"$1\" جي سوانح",
+       "history-title": "\"$1\" جي ترميمي سوانح",
+       "difference-title": "\"$1\" جي مسودن ۾ تفاوت",
        "lineno": "سِٽَ $1:",
        "compareselectedversions": "چونڊيل پرت ڀيٽيو",
        "editundo": "اڻڪريو",
        "searchresults-title": "”$1“ لاءِ ڳولا نتيجا",
        "prevn": "پويان {{PLURAL:$1|$1}}",
        "nextn": "اڳيان {{PLURAL:$1|$1}}",
+       "nextn-title": "{{PLURAL:$1|ٻيو|ٻيا}} $1 {{PLURAL:$1|نتيجو|نتيجا}}",
+       "shown-title": "$1 {{PLURAL:$1|نتيجو|نتيجا}} في صفحو ڏيکاريو",
        "viewprevnext": "ڏسو ($1 {{int:pipe-separator}} $2) ($3)",
+       "searchprofile-articles": "موادي صفحا",
+       "searchprofile-images": "گھڻذريعات",
+       "searchprofile-everything": "هر شَي",
+       "searchprofile-advanced": "متقدم",
+       "searchprofile-articles-tooltip": "$1 ۾ ڳوليو",
+       "searchprofile-images-tooltip": "فائيلن جي ڳولا",
+       "searchprofile-everything-tooltip": "سموري مواد ۾ ڳوليو",
+       "searchprofile-advanced-tooltip": "مرضيءَ جي نانءُپولارن ۾ ڳوليو",
        "search-result-size": "$1 ({{PLURAL:$2|لفظُ|$2 لفظَ}})",
+       "search-redirect": "($1 کي چوريو)",
+       "search-section": "(سيڪشن $1)",
+       "search-suggest": "ڇا توهان جو مطلب $1 آهي؟",
+       "searchall": "سڀ",
+       "search-nonefound": "توهان جي ڳولا جي نتيجي ۾ ڪجھہ بہ ڪو نہ لڌو.",
        "preferences": "ترجيحات",
-       "mypreferences": "منهنجون ترجيحات",
-       "skin-preview": "پيش نگاهه",
+       "mypreferences": "ترجيحات",
+       "skin-preview": "پيش نگاهہ",
        "datedefault": "بلا ترجيحا",
        "allowemail": "ٻين يُوزرس کان ايندڙ برق ٽپال بحال ڪريو",
        "yourrealname": "اصل نالو:",
        "group-user": "يوزرس",
        "grouppage-sysop": "{{ns:project}}:منتظمين",
        "right-undelete": "ڪو صفحو اڻڊاهيو",
+       "newuserlogpage": "يوزر کاتن جو لاگ",
        "rightslog": "يُوزر حق لاگ",
        "nchanges": "$1 {{PLURAL:$1|تبديلي|تبديليون}}",
+       "enhancedrc-history": "سوانح",
        "recentchanges": "تازيون تبديليون",
+       "recentchanges-legend": "تازين تبديلين جو آپشن",
+       "recentchanges-summary": "هن صفحي تي وڪيءَ ۾ ڪيل تازيون ترين ترميمون ڏيکاريو.",
        "recentchanges-feed-description": "ۡهن روان رسد ۾ آيل تازيون تبديليون لهو",
+       "recentchanges-label-newpage": "هن ترميم سان نئون صفحو جڙيو.",
+       "recentchanges-label-minor": "هيءُ هڪ معمولي ترميم آهي.",
+       "recentchanges-label-bot": "هيءُ ترميم بوٽ عمل ۾ آندي.",
+       "recentchanges-label-plusminus": "هن صفحي جي ماپ ۾ هيترين ٻاٺڻين جو ڦير آيو آهي",
        "rcnotefrom": "هيٺ '''$2''' کان ٿيندڙ تبديليون پيش ڪجن ٿيون ('''$1''' تائين ڏيکارجن ٿيون).",
        "rclistfrom": "$3 $2 کان شروع ٿيندڙ نيون تبديليون",
        "rcshowhideminor": "$1 معمولي ترميمون",
+       "rcshowhideminor-show": "نمايو",
+       "rcshowhideminor-hide": "لڪايو",
        "rcshowhidebots": "$1 بوٽس",
-       "rcshowhideliu": "$1 لاگ اِن ٿيل يوزرس",
+       "rcshowhidebots-show": "نمايو",
+       "rcshowhidebots-hide": "لڪايو",
+       "rcshowhideliu": "$1 کاتيدار يوزرس",
+       "rcshowhideliu-hide": "لڪايو",
        "rcshowhideanons": "$1 نامعلوم يُوزرس",
+       "rcshowhideanons-show": "نمايو",
+       "rcshowhideanons-hide": "لڪايو",
        "rcshowhidepatr": "$1 تاڻيل ترميمون",
        "rcshowhidemine": "منهنجون ترميمون $1",
+       "rcshowhidemine-show": "نمايو",
+       "rcshowhidemine-hide": "لڪايو",
        "rclinks": "پوين $2 ڏينهن ۾ آيل پويون $1 تبديليون ڏيکاريو <br />$3",
        "diff": "تفاوت",
        "hist": "سوانح",
        "recentchangeslinked-feed": "لاڳاپيل تبديليون",
        "recentchangeslinked-toolbox": "لاڳاپيل تبديليون",
        "recentchangeslinked-title": "\"$1\" سان لاڳاپيل تبديليون",
+       "recentchangeslinked-page": "صفحي جو عنوان",
+       "recentchangeslinked-to": "رڳو ڄاڻايل صفحي سان ڳانڍيل صفحن ۾ ٿيل تبديليون نمايو",
        "upload": "فائيل چاڙهيو",
        "uploadbtn": "فائيل چاڙهيو",
-       "uploadlogpage": "چاڙهه لاگ",
+       "uploadlogpage": "چاڙهہ لاگ",
+       "filedesc": "خلاصو",
        "upload-scripted-pi-callback": "ان فائيل کي اپلوڊ نه ٿو ڪري سگهي جنهن ۾ ايڪس ايم ايل اسٽائيل شيٽ جون پراسيسنگ هدايتون شامل هجن.",
        "uploaded-script-svg": "اسڪرپٽ جوڳو ايليمينٽ ”$1” مليو آهي، اپلوڊ ٿيل ايس وي جي فائيل ۾.",
        "uploaded-hostile-svg": "اپلوڊ ٿيل ايس وي جي فائيل جو غير محفوظ سي ايس ايس ۾ اسٽائيل ايلمينٽ مليو",
        "uploaded-setting-handler-svg": "اهي ايس وي جي جيڪي ”هينڊل ڪندڙ“ وصفن کي رموٽ/ڊيٽا/اسڪرپٽ کي سيٽ ٿا ڪن، کي بلاڪ ڪيو ويو آهي.<code>$1=\"$2\"</code> مليو آهي اپلوڊ ٿيل ايس وي جي فائيل ۾.",
        "uploaded-remote-url-svg": "ايس وي جي جيڪا سيٽ ڪري ٿي ڪنهن اسٽائيل وصف  رموٽ يو آر ايل سان  بلاڪ ٿيل آهي.\n <code>$1=\"$2\"</code> اپلوڊ ٿيل ايس وي جي فائيل ۾ مليو",
        "uploaded-image-filter-svg": "هن يو آر ايل سان <code>&lt;$1 $2=\"$3\"&gt;</code> اميج فلٽر مليو آهي، اپلوڊ ٿيل ايس وي جي فائيل ۾،",
+       "license-header": "لائيسنسڪاري",
+       "imgfile": "فائيل",
        "listfiles": "فائيل فهرست",
        "file-anchor-link": "فائيل",
        "filehist": "فائيل جي سوانح",
        "filehist-help": "ڪنهن به تاريخ/وقت تي ڪلڪ ڪري ڏسندا ته تڏڻي اهو فائيل ڪيئن هو.",
        "filehist-current": "هاڻوڪو",
        "filehist-datetime": "تاريخ/وقت",
+       "filehist-thumb": "آڱوٺي ننهن",
        "filehist-user": "يُوزر",
        "filehist-dimensions": "ماپَ",
        "filehist-filesize": "فائيل سائيز",
        "nolinkstoimage": "هن فائيل سان ڪو به صفحو ڳنڍيل ناهي.",
        "sharedupload": "هيءَ هڪ شراڪتي چاڙهه آهي، تنهنڪري ان کي ٻيون رٿائون به استعمال ڪري سگھن ٿيون.",
        "uploadnewversion-linktext": "هن فائيل جو نئون پرت چاڙهيو",
+       "upload-disallowed-here": "توهان هن فائيل مٿان لکي نہ ٿا سگھو.",
        "mimesearch": "مائيم ڳولا",
        "listredirects": "چورڻن جي فهرست",
        "unusedtemplates": "اڻ استعماليل سانچا",
        "brokenredirects": "ٽٽل چورڻا",
        "brokenredirects-edit": "سنواريو",
        "brokenredirects-delete": "ڊاهيو",
-       "withoutinterwiki": "ڪنهن به ٻي ٻوليءَ سان نه ڳنڍيل صفحا",
+       "withoutinterwiki": "ڪنهن بہ ٻي ٻوليءَ سان نہ ڳنڍيل صفحا",
        "fewestrevisions": "گھٽانگھٽ ترميميل صفحا",
        "nbytes": "$1 {{PLURAL:$1|ٻاٽڻ|ٻاٽڻيون}}",
        "nlinks": "$1 {{PLURAL:$1|ڳنڍڻو|ڳنڍڻا}}",
        "ancientpages": "قديم ترين صفحا",
        "move": "چوريو",
        "movethispage": "هيءُ صفحو چوريو",
+       "pager-older-n": "{{PLURAL:$1|پراڻو 1|پراڻا $1}}",
        "booksources": "ڪتابي وسيلا",
+       "booksources-search-legend": "ڪتابي ذريعن جي ڳولا ڪريو",
+       "booksources-search": "ڳوليو",
        "specialloguserlabel": "يُوزر:",
        "speciallogtitlelabel": "عنوان:",
        "log": "لاگس",
        "categories": "زمرا",
        "emailuser": "هن يوزر کي برق ٽپال اماڻيو",
        "watchlist": "منهنجي ٽيٽ فهرست",
-       "mywatchlist": "Ù\85Ù\86Ù\87Ù\86جÙ\8a Ù½Ù\8aÙ½ Ù\81Ù\87رست",
+       "mywatchlist": "ٽيٽ فهرست",
        "addedwatchtext": "صفحو بعنوان \"[[:$1]]\" اوهان جي [[Special:Watchlist|ٽيٽ فهرست]] ۾ شامل ٿي ويو. استقبالي تبديليون هتي درج ٿينديون وينديون. اهو صفحو [[Special:RecentChanges|تازين تبديلين]] واري صفحي تي '''گهرن''' اکرن ۾ نمايان ڪري ڏيکاريو ويندو. جيڪڏهن اوهان اهو سڀ نه ٿا چاهيو ته '''اڻ ٽيٽيو''' تي ڪلڪ ڪريو.",
        "removedwatchtext": "صفحو بعنوان \"[[:$1]]\" توهان جي ٽيٽ فهرست مان هٽي چڪو آهي.",
        "watch": "ٽيٽيو",
        "deleteotherreason": "اڃا ڪو ٻيو سبب:",
        "deletereasonotherlist": "ٻيو سبب",
        "rollbacklink": "واپس ورايو",
+       "rollbacklinkcount": "اڻ ڪريو $1 {{PLURAL:$1|ترميم|ترميمون}}",
        "protectlogpage": "تحفظ لاگ",
        "prot_1movedto2": "[[$1]] کي چوري [[$2]] تي رکيو ويو",
        "protect-legend": "تحفظڻ جي پڪ ڪريو",
        "undelete-error-short": "هيءُ فائيل اڻڊاهيندي چُڪَ ٿي آهي: $1",
        "namespace": "نانءُ پولار:",
        "invert": "چونڊ ابتيو",
+       "namespace_association": "منسلڪ نانءُپولار",
        "blanknamespace": "(مُک)",
-       "contributions": "يوزر جون ڀاڱيداريون",
-       "mycontris": "منهنجون ڀاڱيداريون",
+       "contributions": "{{GENDER:$1|يوزر}} جون ڀاڱيداريون",
+       "mycontris": "ڀاڱيداريون",
        "contribsub2": "براءِ $1 ($2)",
        "uctop": "(سِرُ)",
        "month": "مهينو (۽ اڳوڻيون):",
        "sp-contributions-talk": "بحث",
        "whatlinkshere": "هتان ڇا ڳنڍيل آهي",
        "whatlinkshere-title": "$1 سان ڳنڍيل صفحا",
+       "whatlinkshere-page": "صفحو:",
        "linkshere": "هيٺيان صفحا '''[[:$1]]''' سان ڳنڍيل آهن:",
-       "nolinkshere": "'''[[:$1]]''' سان ڪو به صفحو ڳنڍيل ناهي.",
+       "nolinkshere": "'''[[:$1]]''' سان ڪو بہ صفحو ڳنڍيل ناهي.",
        "isredirect": "چورڻو صفحو",
        "istemplate": "شموليت",
+       "isimage": "فائيل جو ڳنڍڻو",
        "whatlinkshere-prev": "{{PLURAL:$1|پويون|پويون $1}}",
        "whatlinkshere-next": "{{PLURAL:$1|اڳيون|اڳيان $1}}",
        "whatlinkshere-links": "← ڳنڍڻا",
+       "whatlinkshere-hideredirs": "$1 چورجي ٿو",
+       "whatlinkshere-hidelinks": "$1 ڳنڍڻا",
+       "whatlinkshere-filters": "ڇاڻيون",
        "blockip": "يُوزر کي روڪيو",
        "ipboptions": "2 ڪلاڪ:2 hours،1 ڏينهن:1 day،3 ڏينهن:3 days،1 هفتو:1 week،2 هفتا:2 weeks،1 مهينو:1 month،3 مهينا:3 months،6 مهينا:6 months،1 سال:1 year،لامحدود:infinite",
        "badipaddress": "ناقابلڪار آءِ پي پتو",
        "block-log-flags-anononly": "فقط نامعلوم يوزرس",
        "movepagetext": "هيٺيون فارم استعمال ڪندي ڪنهن صفحي کي نئون عنوان ڏئي سگھجي ٿو، جنهن سان سمورو صفحو نئين عنوان ڏانهن هليو ويندو. اڳوڻو عنوان نئين عنوان ڏانهن چورڻو بنجي ويندو. ان ڳالهه جي پڪ ڪرڻ ذميواري توهان تي آهي ته ڳنڍڻا اتي ئي وٺي وڃن ٿا جتي انهن کي وٺي وڃڻ گھرجي.\n\nياد رکندا ته جيڪڏهن نئين عنوان سان اڳي ئي ڪو مضمون موجود آهي ته پوءِ صفحو '''نه''' چوريو ويندو، سوا ان جي ته موجوده صفحو محظ خالي آهي يا ڪا به سوانح نه رکندڙ ڪو چورڻو آهي.\n\n'''خبردار!'''\nاها هڪ مقبول صفحي لاءِ ڪا غير متوقه ۽ انتهائي اڻوڻندڙ تبديلي ثابت ٿي سگھي ٿي؛ براءِ مهرباني اڳتي وڌڻ کان اڳ پڪ ڪندا ته توهان اها تبديلي آڻڻ جي نتيجن کان چڱيءَ ريت واقف آهيو.",
        "movepagetalktext": "واسطيدار مباحثي صفحو پاڻهي ئي چوريو ويندو ماهسوا:\n\n*نئين عنوان سان هڪ اڻ پورو يعني غير خالي مباحثي صفحو اڳي ئي وجود رکندو هجي، يا\n*توهان هيٺين باڪس کي اڻ ٽِڪ ڪريو\n\nانهن صورتن ۾، جيڪڏهن توهان چاهيو ته صفحي کي پاڻ چوري يا ضمائي سگھو ٿا.",
-       "movearticle": "صفحو چوريو:",
        "newtitle": "نئين عنوان ڏانهن:",
        "move-watch": "هيءُ صفحو ٽيٽيو",
        "movepagebtn": "صفحو چوريو",
        "allmessagescurrent": "موجوده تحرير",
        "thumbnail-more": "وڏو ڪريو",
        "importlogpage": "درآمد لاگ",
-       "tooltip-pt-userpage": "منهنجو تعارفي صفحو",
-       "tooltip-pt-mytalk": "منهنجو مباحثي صفحو",
+       "tooltip-pt-userpage": "توهان جو تعارفي صفحو",
+       "tooltip-pt-mytalk": "توهان جو مباحثي صفحو",
        "tooltip-pt-preferences": "منهنجون ترجيحات",
        "tooltip-pt-watchlist": "توهان جي ٽيٽ فهرست ۾ شامل صفحا",
-       "tooltip-pt-mycontris": "منهنجون ڀاڱيداريون",
-       "tooltip-pt-login": "توهان کي همٿائجي ٿو ته توهان لاگ اِن ٿيو، بهرحال اهو لازمي ناهي.",
+       "tooltip-pt-mycontris": "توهان جون ڀاڱيداريون",
+       "tooltip-pt-login": "توهان کي همٿائجي ٿو تہ توهان لاگ اِن ٿيو، بهرحال اهو لازمي نہ آهي.",
        "tooltip-pt-logout": "لاگ آئوٽ",
        "tooltip-pt-createaccount": "توهان جي همٿ افزائي ڪئي وئي آهي ته هڪ کاتو کوليو ۽ لاگ ان ٿيو؛ جيتوڻيڪ، اهو ضروري نه آهي",
        "tooltip-ca-talk": "موادي صفحي تي بحث",
-       "tooltip-ca-edit": "توهان هيءُ صفحو سنواري سگھو ٿا. مهرباني ڪري سانڍڻ کان اڳ پيش نگاهه جو اختيار استعمال ڪندا.",
-       "tooltip-ca-addsection": "Ù\87Ù\86 Ø¨Ø­Ø« ØªÙ\8a ØªØ§Ø«Ø±Ø§Øª Ø¯Ø±Ø¬ ÚªØ±Ø§يو",
+       "tooltip-ca-edit": "هيءُ صفحو سنواريو",
+       "tooltip-ca-addsection": "Ù\86ئÙ\88Ù\86 Ø³Ù\8aڪشÙ\86 Ø´Ø±Ù\88ع ÚªØ±يو",
        "tooltip-ca-viewsource": "هيءُ صفحو تحفظيل آهي. توهان ان جو ڪوڊ ڏسي سگھو ٿا.",
        "tooltip-ca-history": "هن صفحي جون گذريل نظرثانيون",
        "tooltip-ca-protect": "هيءُ صفحو تحفظيو",
        "tooltip-ca-watch": "هيءُ صفحو پنهنجي ٽيٽ فهرست ۾ شامل ڪريو",
        "tooltip-ca-unwatch": "هيءُ صفحو پنهنجي ٽيٽ فهرست مان هٽايو",
        "tooltip-search": "جھڙتيو {{SITENAME}}",
-       "tooltip-search-go": "صفحي تي وڃو بلڪل هن ساڳئي نالي سان جيڪڏهن موجود آهي ته",
+       "tooltip-search-go": "صفحي تي وڃو بلڪل هن ساڳئي نالي سان جيڪڏهن موجود آهي تہ",
        "tooltip-search-fulltext": "هن متن لاءِ صفحا ڳوليو",
-       "tooltip-p-logo": "مکيه صفحو وزٽ ڪريو",
+       "tooltip-p-logo": "مک صفحو وزٽ ڪريو",
        "tooltip-n-mainpage": "مک صفحو گھمو",
        "tooltip-n-mainpage-description": "مکيه صفحو وزٽ ڪريو",
        "tooltip-n-portal": "هن رٿا بابت، توهان ڇا ٿا ڪري سگھو، ڪهڙي شَي ڪٿي ملندي",
        "tooltip-n-randompage": "بلاترتيب ڪو به صفحو اتاريو",
        "tooltip-n-help": "ڳولي لهڻ جي جاءِ.",
        "tooltip-t-whatlinkshere": "هتان ڳنڍيل سمورا وڪي صفحا",
-       "tooltip-t-recentchangeslinked": "Ù\88Ù\8aجھÚ\99ائÙ\8aØ¡Ù\8e Û¾ ØµÙ\81Ø­Ù\86 Û¾ Ù¿Ù\8aÙ\84 ØªØ¨Ø¯Ù\8aÙ\84Ù\8aÙ\88Ù\86 Ù\87Ù\86 ØµÙ\81Ø­Ù\8a ØªØ§Ù\86 Ú³Ù\86Ú\8dÙ\8aÙ\84 Ù\8aا Ù\84Ù\86Úª Ù¿يل آهن",
+       "tooltip-t-recentchangeslinked": "Ù\88Ù\8aجھÚ\99ائÙ\8aØ¡Ù\8e Û¾ ØµÙ\81Ø­Ù\86 Û¾ Ù¿Ù\8aÙ\84 ØªØ¨Ø¯Ù\8aÙ\84Ù\8aÙ\88Ù\86 Ù\87Ù\86 ØµÙ\81Ø­Ù\8a Ø³Ø§Ù\86 Ú³Ù\86Ú\8dيل آهن",
        "tooltip-t-contributions": "هن يُوزر جون ڀاڱيداريون ڏسو",
        "tooltip-t-emailuser": "هن يُوزر کي برق ٽپال اماڻيو",
        "tooltip-t-upload": "فائيل چاڙهيو",
        "tooltip-t-specialpages": "سڀني خاص صفحن جي فهرست",
        "tooltip-t-print": "هن صفحي جو ڇاپائتو پرت",
-       "tooltip-t-permalink": "صفحي جي هن نظرثاليءَ ڏانهن مستقل لنڪ",
+       "tooltip-t-permalink": "صفحي جي ان نظرثاليءَ ڏانهن مستقل ڳنڍڻو",
        "tooltip-ca-nstab-main": "مواد جي صفحي کي ڏسو",
        "tooltip-ca-nstab-user": "هن جو يُوزر صفحو ڏسو",
-       "tooltip-ca-nstab-special": "هي خاص صفحو آهي، توهان هن صفحي کي ترميم نه ٿا ڪري سگهو.",
+       "tooltip-ca-nstab-special": "هيءُ خاص صفحو آهي، ان ۾ ترميم ڪري نہ ٿي سگھجي.",
        "tooltip-ca-nstab-project": "رٿائي صفحو ڏسو",
        "tooltip-ca-nstab-image": "هن فائيل جو صفحو ڏسو",
        "tooltip-ca-nstab-template": "سانچو ڏسو",
        "tooltip-diff": "پنهنجون ڪيل تبديليون ڏسو.",
        "tooltip-compareselectedversions": "هن صفحي جن ٻن چونڊيل پرتن درميان تفاوت ڏسو.",
        "tooltip-watch": "هيءُ صفحو پنهنجي ٽيٽ فهرست ۾ شامل ڪريو",
+       "tooltip-rollback": "هن صفحي ۾ پوئين ڀاڱيدار جي ڪيل ترميم (ترميمن) کي هڪ ڪلڪ سان اڻ ڪريو.",
+       "tooltip-summary": "ننڍو خلاصو ڏيو",
        "anonymous": "{{SITENAME}} جا نامعلوم يوزرس",
        "pageinfo-toolboxlink": "صفحي جي معلومات",
-       "previousdiff": "â\86\90 Ø§Ú³Ù\88Ú»Ù\88 ØªÙ\81اÙ\88ت",
-       "nextdiff": "Ù\86ئÙ\88Ù\86 ØªÙ\81اÙ\88ت -->",
+       "previousdiff": "â\86\90 Ø§Ú³Ù\88Ú»Ù\8a ØªØ±Ù\85Ù\8aÙ\85",
+       "nextdiff": "Ù\86ئÙ\8aÙ\86 ØªØ±Ù\85Ù\8aÙ\85-->",
        "file-info-size": "$1 × $2 عڪسلون، فائيل سائيز: $3، MIME ٽائيپ: $4",
        "file-nohires": "اڃا سنهو تحلل ميسر ناهي.",
        "svg-long-desc": "ايس وي جي فائيل، اٽڪل $1 × $2 عڪسلون، فائيل سائيز: $3",
-       "show-big-image": "سنهو ترين تحلل",
+       "show-big-image": "اصلوڪو فائيل",
+       "show-big-image-preview": "هن پيش نگاهہ جي ماپ: $1",
+       "show-big-image-other": "ٻيا {{PLURAL:$2|تحلل}}:$1",
        "show-big-image-size": "$1*$2 پڪزلس",
        "newimages": "نون فائيلن جي گيلري",
-       "noimages": "ڏسڻ لاءِ ڪجھه ناهي.",
+       "noimages": "ڏسڻ لاءِ ڪجھہ ناهي.",
        "bydate": "تاريخوار",
        "metadata": "اعدادِ اعداد",
        "metadata-expand": "توسيعي تفصيل ڏيکاريو",
        "exif-xresolution": "افقي تحلل",
        "exif-yresolution": "عمودي تحلل",
        "exif-stripoffsets": "عڪسي اعداد جي مڪانيت",
+       "exif-datetime": "فائيل ۾ تبديليءَ جي تاريخ ۽ وقت",
        "exif-imagedescription": "عڪس عنوان",
+       "exif-model": "ڪيميرا ماڊل",
+       "exif-software": "مستعمل منتقگري",
+       "exif-colorspace": "رنگ پولار",
+       "exif-datetimeoriginal": "اعداد جي جڙڻ جي تاريخ ۽ وقت",
+       "exif-datetimedigitized": "عددڪاريءَ جي تاريخ ۽ وقت",
        "exif-saturation": "رچاءُ",
        "exif-gpslatitude": "ويڪرائي ڦاڪَ",
        "exif-gpslongituderef": "اڀرندي يا الهندي ڊگھائي ڦاڪَ",
        "exif-gpslongitude": "ڊگھائي ڦاڪَ",
        "exif-gpstrack": "چرپر جو طرف",
        "exif-unknowndate": "نامعلوم تاريخ",
+       "exif-orientation-1": "نارمل",
        "exif-orientation-3": "180° موڙيل",
        "exif-componentsconfiguration-0": "وجود نه ٿو رکي",
        "exif-lightsource-0": "نامعلوم",
        "exif-focalplaneresolutionunit-2": "انچ",
        "exif-scenecapturetype-0": "معياري",
        "exif-subjectdistancerange-0": "نامعلوم",
-       "exif-subjectdistancerange-3": "ڏورانهين نگاهه",
+       "exif-subjectdistancerange-3": "ڏورانهين نگاهہ",
        "exif-gpslatitude-s": "ڏاکڻي ويڪرائي ڦاڪَ",
-       "exif-gpslongitude-e": "اÚ\80رÙ\86دÙ\8a ڊگھائي ڦاڪَ",
+       "exif-gpslongitude-e": "اÚ\80رÙ\8aÙ\86 ڊگھائي ڦاڪَ",
        "exif-gpsmeasuremode-2": "2-رخي ماپ",
        "exif-gpsmeasuremode-3": "3-رخي ماپ",
        "exif-gpsspeed-k": "ڪلوميٽر في ڪلاڪ",
        "exif-gpsspeed-m": "ميل في ڪلاڪ",
-       "exif-gpsspeed-n": "ڳنڍيون",
+       "exif-gpsspeed-n": "ناٽس",
        "namespacesall": "سڀ",
        "monthsall": "سڀ",
        "confirmemail_success": "توھان جي برق ٽپال جي پڪ ڪئي وئي آھي. ھاڻِ توھان لاگ ان ٿي وڪيءَ جو مزو وٺي سگھو ٿا",
-       "recreate": "ورسجيو",
+       "recreate": "Ù\88رسرجÙ\8aÙ\88",
        "watchlisttools-view": "لاڳاپيل تبديليون ڏسو",
        "watchlisttools-edit": "ٽيٽ فهرست ڏسو ۽ سنواريو",
        "watchlisttools-raw": "ڪچي ٽيٽ فهرست سنواريو",
+       "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|ڳالهہ]])",
        "version": "ورزن",
        "specialpages": "خاص صفحا",
        "specialpages-group-users": "يوزرس ۽ حق",
+       "tag-filter": "[[Special:Tags|ٽيگ]] ڇاڻيون:",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|ٽيگ|ٽيگز}}]]: $2)",
-       "searchsuggest-search": "ڳوليو"
+       "logentry-delete-delete": "$1 {{GENDER:$2|ڊاٺو}} صفحو $3",
+       "logentry-newusers-create": "يوزر کاتو $1 {{GENDER:$2|جوڙيو ويو}}",
+       "logentry-upload-upload": "$1 {{GENDER:$2|چاڙهيو}} $3",
+       "searchsuggest-search": "ڳوليو",
+       "api-error-blacklisted": "براءِ مهرباني هڪ مختلف، وضاحتي عنوان چونڊيو."
 }
index 6d83b6a..3983006 100644 (file)
        "otherlanguages": "Drugi jezici / Други језици",
        "redirectedfrom": "(Preusmjereno sa $1)",
        "redirectpagesub": "Preusmjeri stranicu",
+       "redirectto": "Preusmjerenje na:",
        "lastmodifiedat": "Ova stranica je posljednji put izmijenjena $1, $2.",
        "viewcount": "Ovoj stranici je pristupljeno {{PLURAL:$1|$1 put|$1 puta}}.",
        "protectedpage": "Zaštićena stranica",
        "nstab-template": "Šablon / Шаблон",
        "nstab-help": "Pomoć / Помоћ",
        "nstab-category": "Kategorija / Категорија",
+       "mainpage-nstab": "Glavna stranica / Главна страница",
        "nosuchaction": "Nema takve akcije",
        "nosuchactiontext": "Akcija navedena u URL-u nije valjana.\nMožda ste pogriješili pri unosu URL-a ili ste slijedili pokvaren link.\nMoguće je i da je ovo greška u softveru koji koristi {{SITENAME}}.",
        "nosuchspecialpage": "Nema takve posebne stranice",
        "preview": "Pretpregled / Претпреглед",
        "showpreview": "Pretpregled - Претпреглед",
        "showdiff": "Prikaži izmjene - Прикажи измене",
-       "anoneditwarning": "'''Upozorenje:''' Niste prijavljeni.\nVaša IP adresa će biti zabilježena u historiji ove stranice.",
+       "anoneditwarning": "<strong>Upozorenje:</strong> Niste prijavljeni. \nVaša IP adresa će biti javno vidljiva ako napravite neku izmjenu. Ako se <strong>[$1 prijavite]</strong> ili <strong>[$2 napravite račun]</strong>, vaše izmjene će biti pripisane vašem korisničkom imenu, zajedno sa drugim pogodnostima.",
        "anonpreviewwarning": "''Niste prijavljeni. Vaša IP adresa će biti zabilježena u historiji ove stranice.''",
        "missingsummary": "'''Podsjećanje:''' Niste unijeli sažetak izmjene.\nAko kliknete na Sačuvaj/Snimi, Vaša izmjena će biti snimljena bez sažetka.",
        "missingcommenttext": "Molimo unesite komentar ispod.",
        "currentrev": "Trenutna revizija",
        "currentrev-asof": "Trenutna revizija na dan $1",
        "revisionasof": "Izmjena od $1",
-       "revision-info": "Trenutna revizija na dan $1",
+       "revision-info": "Izmjena od $1 od {{GENDER:$6|$2}}$7",
        "previousrevision": "← Starija revizija",
        "nextrevision": "Novija izmjena →",
        "currentrevisionlink": "Trenutna verzija",
        "searchall": "sve",
        "showingresults": "Dole {{PLURAL:$1|je prikazan '''1''' rezultat|su prikazana '''$1''' rezultata|je prikazano '''$1''' rezultata}} počev od '''$2'''.",
        "showingresultsinrange": "Ispod {{PLURAL:$1|je prikazan <strong>1</strong> rezultat|su prikazana <strong>$1</strong> rezultata|je prikazano <strong>$1</strong> rezultata}}, u rasponu od <strong>$2</strong> do <strong>$3</strong>.",
+       "search-showingresults": "{{PLURAL:$4|Rezultat <strong>$1</strong> od <strong>$3</strong>|Rezultati <strong>$1 - $2</strong> od <strong>$3</strong>}}",
        "search-nonefound": "Nisu pronađeni rezultati koji odgovaraju upitu.",
        "powersearch-legend": "Napredna pretraga",
        "powersearch-ns": "Pretraga u imenskim prostorima:",
        "querypage-disabled": "Ova posebna stranica je onemogućena jer smanjuje performanse.",
        "booksources": "Književni izvori",
        "booksources-search-legend": "Traži književne izvore",
+       "booksources-search": "Traži",
        "booksources-text": "Ispod se nalazi spisak vanjskih linkova na ostale stranice koje prodaju nove ili korištene knjige kao i stranice koje mogu da imaju važnije podatke o knjigama koje tražite:",
        "booksources-invalid-isbn": "Navedeni ISBN broj nije validan; molimo da provjerite da li je došlo do greške pri kopiranju iz prvobitnog izvora.",
        "specialloguserlabel": "Izvršilac:",
        "namespace_association": "Povezan imenski prostor",
        "tooltip-namespace_association": "Označite ovu kutiju da također uključite razgovor ili imenski prostor teme koja je povezana sa odabranim imenskim prostorom",
        "blanknamespace": "(Glavno)",
-       "contributions": "Doprinosi korisnika / Доприноси корисника",
+       "contributions": "Doprinosi {{GENDER:$1|korisnika|korisnice|korisnika}}",
        "contributions-title": "Korisnički doprinosi od $1",
        "mycontris": "Doprinosi / Доприноси",
        "contribsub2": "Za $1 ($2)",
        "tooltip-pt-mycontris": "Spisak vaših doprinosa",
        "tooltip-pt-login": "Predlažem da se prijavite; međutim, to nije obavezno",
        "tooltip-pt-logout": "Odjava sa projekta {{SITENAME}}",
+       "tooltip-pt-createaccount": "Ohrabrujemo vas da otvorite račun i prijavite se; to, međutim, nije obavezno",
        "tooltip-ca-talk": "Razgovor o sadržaju stranice",
-       "tooltip-ca-edit": "Možete da uređujete ovu stranicu.\nMolimo da prije snimanja koristite dugme za pretpregled",
+       "tooltip-ca-edit": "Uredi ovu stranicu",
        "tooltip-ca-addsection": "Započnite novu sekciju.",
        "tooltip-ca-viewsource": "Ova stranica je zaštićena.\nMožete vidjeti njen izvor",
        "tooltip-ca-history": "Prethodne verzije ove stranice",
        "tooltip-ca-nstab-main": "Pogledajte sadržaj stranice",
        "tooltip-ca-nstab-user": "Pogledajte korisničku stranicu",
        "tooltip-ca-nstab-media": "Pogledajte medijski fajl",
-       "tooltip-ca-nstab-special": "Ovo je posebna stranica, te je ne možete uređivati",
+       "tooltip-ca-nstab-special": "Ovo je posebna stranica, te se ne može zasebno uređivati",
        "tooltip-ca-nstab-project": "Pogledajte stranicu projekta",
        "tooltip-ca-nstab-image": "Vidi stranicu datoteke/fajla",
        "tooltip-ca-nstab-mediawiki": "Pogledajte sistemsku poruku",
        "spam_reverting": "Vraćanje na zadnju verziju koja ne sadrži linkove ka $1",
        "spam_blanking": "Sve revizije koje sadrže linkove ka $1, očisti",
        "spam_deleting": "Sve izmene sadrže veze do $1. Brišem",
+       "simpleantispam-label": "Provjera protiv spama.\n<strong>NE</strong> popunjavajte ovo!",
        "pageinfo-title": "Informacije za \"$1\"",
        "pageinfo-not-current": "Na žalost, nemoguće je pribaviti ove podatke za starije izmjene.",
        "pageinfo-header-basic": "Osnovne informacije",
        "svg-long-desc": "SVG fajl, nominalno $1 × $2 piksela, veličina fajla: $3",
        "svg-long-desc-animated": "Animirana SVG datoteka, nominalno: $1 × $2 piksela, veličina: $3",
        "svg-long-error": "Nevaljana SVG datoteka: $1",
-       "show-big-image": "Puna rezolucija",
+       "show-big-image": "Izvorna datoteka",
        "show-big-image-preview": "Veličina ovog prikaza: $1.",
        "show-big-image-other": "{{PLURAL:$2|Druga rezolucija|Druge rezolucije}}: $1.",
        "show-big-image-size": "$1 × $2 piksela",
        "logentry-rights-rights": "$1 je {{GENDER:$2|promijenio|promijenila|promijenio}} članstvo grupe za $3 iz $4 u $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|je promijenio|je promijenila|je promijenio}} članstvo grupe za $3",
        "logentry-rights-autopromote": "$1 {{GENDER:$2|je automatski unaprijeđen|je automatski unaprijeđena}} iz $4 u $5",
+       "logentry-upload-upload": "$1 {{GENDER:$2|postavio|postavila}} je $3",
        "rightsnone": "(nema)",
        "revdelete-summary": "sažetak izmjene",
        "feedback-adding": "Dodajem povratne informacije na stranicu...",
index 0b52557..591061c 100644 (file)
        "special-characters-group-khmer": "ඛෙමර්",
        "special-characters-title-endash": "en තේජස",
        "special-characters-title-emdash": "em තේජස",
-       "special-characters-title-minus": "ඍණ ලකුණ"
+       "special-characters-title-minus": "ඍණ ලකුණ",
+       "api-error-blacklisted": "කරුණාකර වෙනස්, විස්තරාත්මක මාතෘකාවක් තෝරන්න."
 }
index 758ad47..10e65c0 100644 (file)
        "special-characters-title-emdash": "dlhá pomlčka",
        "special-characters-title-minus": "mínus",
        "mw-widgets-dateinput-placeholder-day": "RRRR-MM-DD",
-       "mw-widgets-dateinput-placeholder-month": "RRRR-MM"
+       "mw-widgets-dateinput-placeholder-month": "RRRR-MM",
+       "api-error-blacklisted": "Prosím, zvoľte iný, opisný názov."
 }
index 74d1b88..86f0d2b 100644 (file)
        "prefs-help-recentchangescount": "Vključuje zadnje spremembe, zgodovine strani in dnevniške zapise.",
        "prefs-help-watchlist-token2": "To je skrivni ključ do spletnega vira vašega spiska nadzorov. Kdor ve zanj, lahko bere vaš spisek nadzorov, zato ključa ne delite. [[Special:ResetTokens|Kliknite tukaj, če ga želite ponastaviti]].",
        "savedprefs": "Spremembe smo uspešno shranili.",
+       "savedrights": "Uporabniške pravice {{GENDER:$1|$1}} smo shranili.",
        "timezonelegend": "Časovni pas",
        "localtime": "Krajevni čas:",
        "timezoneuseserverdefault": "Uporabi privzeti wiki čas ($1)",
        "upload-dialog-button-done": "Končano",
        "upload-dialog-button-save": "Shrani",
        "upload-dialog-button-upload": "Naloži",
-       "upload-process-error": "Prišlo je do napake",
-       "upload-process-warning": "Pojavilo se je opozorilo",
        "upload-form-label-select-file": "Izberi datoteko",
        "upload-form-label-infoform-title": "Podrobnosti",
        "upload-form-label-infoform-name": "Ime",
        "svg-long-error": "Neveljavna datoteka SVG: $1",
        "show-big-image": "Izvirna datoteka",
        "show-big-image-preview": "Velikost predogleda: $1.",
+       "show-big-image-preview-differ": "Velikost predogleda $3 datoteke $2: $1.",
        "show-big-image-other": "{{PLURAL:$2|Druga ločljivost|Drugi ločljivosti|Druge ločljivosti}}: $1.",
        "show-big-image-size": "$1 × $2 točk",
        "file-info-gif-looped": "ponavljajoče",
        "mw-widgets-dateinput-placeholder-day": "LLLL-MM-DD",
        "mw-widgets-dateinput-placeholder-month": "LLLL-MM",
        "mw-widgets-titleinput-description-new-page": "stran še ne obstaja",
-       "mw-widgets-titleinput-description-redirect": "preusmeritev na $1"
+       "mw-widgets-titleinput-description-redirect": "preusmeritev na $1",
+       "api-error-blacklisted": "Prosimo, izberite drugačen, opisen naslov."
 }
index e74eabd..4fda64f 100644 (file)
        "passwordreset-emailsent-capture": "Një email për rivendosjen e fjalëkalimit është dërguar, i cili tregohet më poshtë.",
        "passwordreset-emailerror-capture": "U dërgua një e-mail kujtesë, i cili tregohet më poshtë, por dërgesa për tek përdoruesi qe e pamundur: $1",
        "changeemail": "Ndrysho postën elektronike",
-       "changeemail-text": "Plotësoni këtë formular për të ndryshuar adresën tuaj të postës elektronike. Ju duhet të shkruani fjalëkalimin tuaj për të konfirmuar këtë ndryshim.",
+       "changeemail-header": "Ndrysho llogarinë e adresës së postës elektronike",
        "changeemail-no-info": "Ju duhet të identifikoheni në mënyrë që të keni të drejtë hyrjeje në këtë faqe.",
        "changeemail-oldemail": "Adresa aktuale e emailit:",
        "changeemail-newemail": "Adresa e re e emailit:",
        "clearyourcache": "''Shënim:''' Pas ruajtjes, juve mund t'iu duhet të anashkaloni \"cache-in\" e shfletuesit tuaj për të parë ndryshimet. \n* '''Firefox / Safari:''' Mbaj të shtypur ''Shift'' ndërkohë që klikon ''Reload'', ose shtyp ''Ctrl-F5'' ose ''Ctrl-R'' (''⌘-R'' në Mac)\n* '''Google Chrome:''' Shtyp ''Ctrl-Shift-R'' (''''⌘-R'''' në Mac)\n* '''Internet Explorer:''' Mbaj të shtypur ''Ctrl''  ndërkohë që klikon ''Refresh'', ose shtyp ''Ctrl-F5''\n* '''Konqueror:''' Kliko ''Reload'' ose shtyp ''F5''\n* '''Opera:''' Zbrazni \"cache-in\" tek ''Tools → Preferences''",
        "usercssyoucanpreview": "'''Këshillë:''' Përdorni butonin '{{int:showpreview}}' për të testuar CSS-në e re para se të ruani ndryshimet e kryera.",
        "userjsyoucanpreview": "'''Këshillë:''' Përdorni butonin '{{int:showpreview}}' për të testuar JavaScripting e ri para se të ruani ndryshimet e kryera.",
-       "usercsspreview": "'''Vini re! Ju jeni duke inspektuar CSS-në si përdorues!'''\n'''Nuk është ruajtur ende!'''",
+       "usercsspreview": "<strong>Vini re! Ju jeni duke inspektuar CSS-në si përdorues!\nNuk është ruajtur ende!</strong>",
        "userjspreview": "'''Vini re se kjo është vetëm një provë ose parapamje e faqes tuaj JavaScript, ajo nuk është ruajtur akoma!'''",
-       "sitecsspreview": "'''Vini re! Ju jeni duke inspektuar CSS-në !'''\n'''Nuk është ruajtur ende!'''",
-       "sitejspreview": "'''Vini re! Ju jeni duke inspektuar këtë kod JavaScript.''' \n'''Nuk është ruajtur ende!'''",
+       "sitecsspreview": "<strong>Vini re! Ju jeni duke inspektuar CSS-në!\nNuk është ruajtur ende!</strong>",
+       "sitejspreview": "<strong>Vini re! Ju jeni duke inspektuar këtë kod JavaScript. \nNuk është ruajtur ende!</strong>",
        "userinvalidcssjstitle": "'''Kujdes:''' Nuk ka pamje të quajtur \"$1\". Vini re se faqet .css dhe .js përdorin titull me gërma të vogla, p.sh. {{ns:user}}:Foo/vector.css, jo {{ns:user}}:Foo/Vector.css.",
        "updated": "(E ndryshuar)",
        "note": "'''Shënim:'''",
        "upload-dialog-button-done": "Mbyll",
        "upload-dialog-button-save": "Ruaj",
        "upload-dialog-button-upload": "Ngarko",
-       "upload-process-error": "Një gabim ka ndodhur",
        "backend-fail-stream": "Nuk mund të kalojë skedën $1.",
        "backend-fail-backup": "Nuk mund të rezervojë skedën $1.",
        "backend-fail-notexists": "Skeda $1 nuk ekziston.",
        "backend-fail-closetemp": "Nuk mund të mbyllë skedën e përkohshme.",
        "backend-fail-read": "Nuk mund të lexojë skedën $1.",
        "backend-fail-create": "Nuk mund të krijojë skedën $1.",
-       "backend-fail-maxsize": "Nuk mund të shkruante skedarin \"$1\" sepse ai është më i madh se {{SHUMËS:$2|një bajt|$2 bajtë}}",
+       "backend-fail-maxsize": "Nuk mund të shkruante skedarin \"$1\" sepse ai është më i madh se {{PLURAL:$2|një bajt|$2 bajtë}}",
        "backend-fail-readonly": "Shërbimi i depos \"$1\" është për momentin vetëm-për-lexim. Arsyeja e dhënë është: \"''$2''\"",
        "backend-fail-synced": "Skedari \"$1\" është në një gjendje të parregullt brenda proceseve të depos së brendshme",
        "backend-fail-connect": "Nuk u arrit lidhja me shërbimin e depos \"$1\".",
        "watchlist-details": "{{PLURAL:$1|$1 faqe|$1 faqe}} nën mbikqyrje duke mos numëruar faqet e diskutimit.",
        "wlheader-enotif": "Njoftimi me email është lejuar.",
        "wlheader-showupdated": "Faqet që kanë ndryshuar nga vizita juaj e fundit do të tregohen të '''trasha'''",
-       "wlnote": "Më poshtë {{PLURAL:$1|është ndryshimi i fundit|janë '''$1''' ndryshimet e fundit}} në {{PLUARAL:$2:orën e fundit|'''$2''' orët e fundit}}, që nga $3, $4.",
+       "wlnote": "Më poshtë {{PLURAL:$1|është ndryshimi i fundit|janë '''$1''' ndryshimet e fundit}} në {{PLURAL:$2|orën e fundit|'''$2''' orët e fundit}}, që nga $3, $4.",
        "wlshowlast": "Trego $1 orët $2 ditët",
        "watchlist-options": "Mundësitë e listës mbikqyrëse",
        "watching": "Duke mbikqyrur...",
        "blockipsuccesssub": "Bllokimi u bë me sukses",
        "blockipsuccesstext": "Përdoruesi/IP-Adresa [[Special:Contributions/$1|$1]] u bllokua.<br />\nShiko te [[Special:BlockList|Lista e përdoruesve dhe e IP adresave të bllokuara]] për të çbllokuar Përdorues/IP.",
        "ipb-blockingself": "Ju jeni duke bllokuar vetëveten ! Jeni te sigurte qe doni te bëni këtë?",
-       "ipb-confirmhideuser": "Ju jeni gati për të bllokuar një përdorues me \"përdorues të fshehur\" të aktivizuar. Kjo do të shtypur emrin e përdoruesit në të gjitha listat dhe aktivitetet hyrëse. Jeni te sigurte qe doni ta bëni këtë ?",
+       "ipb-confirmhideuser": "Ju jeni gati për të bllokuar një përdorues që ka aktivizuar statusin \"përdorues i fshehur\". Kjo do të shtyp emrin e përdoruesit në të gjitha listat regjistrimet. Jeni të sigurtë që doni ta bëni këtë?",
        "ipb-edit-dropdown": "Redakto arsyet e bllokimit",
        "ipb-unblock-addr": "Zhblloko $1",
        "ipb-unblock": "Çblloko përdorues dhe IP të bllokuara",
        "special-characters-group-lao": "Lao",
        "special-characters-group-khmer": "Khmer",
        "mw-widgets-dateinput-placeholder-day": "VVVV-MM-DD",
-       "mw-widgets-dateinput-placeholder-month": "VVVV-MM"
+       "mw-widgets-dateinput-placeholder-month": "VVVV-MM",
+       "api-error-blacklisted": "Ju lutemi zgjidhni një titull të ndryshëm, përshkrues."
 }
index 5d2a658..3dd5dec 100644 (file)
        "prefs-help-recentchangescount": "Подразумева скорашње измене, историје страница и дневнике.",
        "prefs-help-watchlist-token2": "Ово је тајни кључ за веб-довод Вашег списка надгледања. \nСвако ко зна овај кључ биће у могућности да види Ваша надгледања; стога, кључ немојте одавати никоме. \nАко је потребно, кључ можете [[Special:ResetTokens|ресетовати]].",
        "savedprefs": "Ваша подешавања су сачувана.",
+       "savedrights": "Корисничка права за {{GENDER:$1|$1}} су сачувана.",
        "timezonelegend": "Временска зона:",
        "localtime": "Локално време:",
        "timezoneuseserverdefault": "подразумеване вредности ($1)",
        "booksources-text": "Испод се налази списак веза ка сајтовима који се баве продајом нових и половних књига, а који би могли имати додатне податке о књигама које тражите:",
        "booksources-invalid-isbn": "Наведени ISBN број није исправан. Проверите да није дошло до грешке при умножавању из првобитног извора.",
        "specialloguserlabel": "Извршилац:",
-       "speciallogtitlelabel": "Циљ (наслов или корисник):",
+       "speciallogtitlelabel": "Циљ (наслов или {{ns:user}}:корисничко име):",
        "log": "Дневници",
        "all-logs-page": "Сви јавни дневници",
        "alllogstext": "Скупни приказ свих доступних историја овог викија.\nМожете сузити приказ одабирући врсту историје, корисничког имена или тражене странице.",
        "svg-long-error": "Неисправна SVG датотека: $1",
        "show-big-image": "Пуна величина",
        "show-big-image-preview": "Величина овог приказа: $1.",
+       "show-big-image-preview-differ": "Величина овог $3 прегледа за ову $2 датотеку је $1.",
        "show-big-image-other": "{{PLURAL:$2|Друга резолуција|Друге резолуције}}: $1.",
        "show-big-image-size": "$1 × $2 пиксела",
        "file-info-gif-looped": "петља",
        "mw-widgets-dateinput-placeholder-day": "ГГГГ-ММ-ДД",
        "mw-widgets-dateinput-placeholder-month": "ГГГГ-ММ",
        "mw-widgets-titleinput-description-new-page": "страница још увек не постоји",
-       "mw-widgets-titleinput-description-redirect": "преусмерава на $1"
+       "mw-widgets-titleinput-description-redirect": "преусмерава на $1",
+       "api-error-blacklisted": "Изаберите другачији, описан назив."
 }
index 5f80973..5d1dabc 100644 (file)
        "booksources-text": "Ispod se nalazi spisak veza ka sajtovima koji se bave prodajom novih i polovnih knjiga, a koji bi mogli imati dodatne podatke o knjigama koje tražite:",
        "booksources-invalid-isbn": "Navedeni ISBN broj nije ispravan. Proverite da nije došlo do greške pri umnožavanju iz prvobitnog izvora.",
        "specialloguserlabel": "Izvršilac:",
-       "speciallogtitlelabel": "Cilj (naslov ili korisnik):",
+       "speciallogtitlelabel": "Cilj (naslov ili {{ns:user}}:korisničko ime):",
        "log": "Dnevnici",
        "all-logs-page": "Svi javni dnevnici",
        "alllogstext": "Skupni prikaz svih dostupnih istorija ovog vikija.\nMožete suziti prikaz odabirući vrstu istorije, korisničkog imena ili tražene stranice.",
        "mw-widgets-dateinput-placeholder-day": "GGGG-MM-DD",
        "mw-widgets-dateinput-placeholder-month": "GGGG-MM",
        "mw-widgets-titleinput-description-new-page": "stranica još uvek ne postoji",
-       "mw-widgets-titleinput-description-redirect": "preusmerava na $1"
+       "mw-widgets-titleinput-description-redirect": "preusmerava na $1",
+       "api-error-blacklisted": "Izaberite drugačiji, opisan naziv."
 }
index feb1530..c820091 100644 (file)
        "sig_tip": "Din signatur med tidsstämpel",
        "hr_tip": "Horisontell linje (använd sparsamt)",
        "summary": "Sammanfattning:",
-       "subject": "Ämne/rubrik:",
+       "subject": "Ämne:",
        "minoredit": "Mindre ändring (m)",
        "watchthis": "Bevaka denna sida",
        "savearticle": "Spara sidan",
        "missingsummary": "<strong>Påminnelse:</strong> Du har inte skrivit någon redigeringskommentar.\nOm du klickar på \"{{int:savearticle}}\" igen kommer din redigering att sparas utan en sådan.",
        "selfredirect": "<strong>Varning:</strong> Du omdirigerar denna sida till sig själv.\nDu kanske angav fel mål för din omdirigering, eller redigerar fel sida.\nOm du klickar på \"{{int:savearticle}}\" igen kommer omdirigeringen att skapas trots detta.",
        "missingcommenttext": "Var god och skriv in en kommentar nedan.",
-       "missingcommentheader": "<strong>Påminnelse:</strong> Du har inte skrivit något ämne/rubrik för den här kommentaren.\nOm du trycker på \"{{int:savearticle}}\" igen kommer din redigering sparas utan rubrik.",
+       "missingcommentheader": "<strong>Påminnelse:</strong> Du har inte skrivit något ämne för den här kommentaren.\nOm du trycker på \"{{int:savearticle}}\" igen kommer din redigering sparas utan rubrik.",
        "summary-preview": "Förhandsgranskning av sammanfattning:",
        "subject-preview": "Rubrikförhandsgranskning:",
        "previewerrortext": "Ett fel uppstod när dina ändringar skulle förhandsgranskas.",
        "prefs-help-recentchangescount": "Detta inkluderar senaste ändringarna, sidhistorik och loggar.",
        "prefs-help-watchlist-token2": "Detta är den hemliga nyckeln till webbflödet i din bevakningslista.\nNågon som vet den kommer att kunna läsa din bevakningslista, så dela inte ut den.\n[[Special:ResetTokens|Klicka här om du behöver återställa den]].",
        "savedprefs": "Dina inställningar har sparats",
+       "savedrights": "Användarrättigheterna för {{GENDER:$1|$1}} har sparats.",
        "timezonelegend": "Tidszon:",
        "localtime": "Lokal tid:",
        "timezoneuseserverdefault": "Använd wikins standard ($1)",
        "upload-dialog-button-done": "Klar",
        "upload-dialog-button-save": "Spara",
        "upload-dialog-button-upload": "Ladda upp",
-       "upload-process-error": "Ett fel uppstod",
-       "upload-process-warning": "En varning uppstod",
        "upload-form-label-select-file": "Välj fil",
        "upload-form-label-infoform-title": "Detaljer",
        "upload-form-label-infoform-name": "Namn",
        "svg-long-error": "Felaktig SVG-fil: $1",
        "show-big-image": "Originalfil",
        "show-big-image-preview": "Storlek på förhandsvisningen: $1.",
+       "show-big-image-preview-differ": "Storleken för denna $3-förhandsvisning av denna $2-fil: $1.",
        "show-big-image-other": "{{PLURAL:$2|Annan upplösning|Andra upplösningar}}: $1.",
        "show-big-image-size": "$1 × $2 pixlar",
        "file-info-gif-looped": "upprepad",
        "mw-widgets-dateinput-placeholder-day": "ÅÅÅÅ-MM-DD",
        "mw-widgets-dateinput-placeholder-month": "ÅÅÅÅ-MM",
        "mw-widgets-titleinput-description-new-page": "sidan existerar inte ännu",
-       "mw-widgets-titleinput-description-redirect": "omdirigerar till $1"
+       "mw-widgets-titleinput-description-redirect": "omdirigerar till $1",
+       "api-error-blacklisted": "Välj en annan beskrivande titel."
 }
index 4ba7df7..8b8ab4e 100644 (file)
        "special-characters-group-thai": "தாய்",
        "special-characters-group-lao": "இலாவோ",
        "special-characters-group-khmer": "கெமெர்",
-       "special-characters-title-minus": "கழித்தல் குறி"
+       "special-characters-title-minus": "கழித்தல் குறி",
+       "api-error-blacklisted": "தயவுகூர்ந்து வேறு, விளக்கமான தலைப்பைத் தேர்ந்தெடுக்கவும்."
 }
index 1c4bae8..3ac1f1e 100644 (file)
        "upload-dialog-button-done": "เสร็จสิ้น",
        "upload-dialog-button-save": "บันทึก",
        "upload-dialog-button-upload": "อัปโหลด",
-       "upload-process-error": "เกิดข้อผิดพลาด",
-       "upload-process-warning": "เกิดคำเตือน",
        "upload-form-label-select-file": "เลือกไฟล์",
        "upload-form-label-infoform-title": "รายละเอียด",
        "upload-form-label-infoform-name": "ชื่อ",
        "special-characters-group-bangla": "บังคลา",
        "special-characters-group-telugu": "เตลูกู",
        "special-characters-group-sinhala": "สิงหล",
-       "special-characters-group-gujarati": "คุชราต"
+       "special-characters-group-gujarati": "คุชราต",
+       "api-error-blacklisted": "โปรดใช้ชื่ออื่นที่สื่อความหมาย"
 }
index 0adb7f2..f7069e7 100644 (file)
        "special-characters-group-lao": "Lao",
        "special-characters-group-khmer": "Khmer",
        "mw-widgets-dateinput-placeholder-day": "TTTT-BB-AA",
-       "mw-widgets-dateinput-placeholder-month": "TTTT-BB"
+       "mw-widgets-dateinput-placeholder-month": "TTTT-BB",
+       "api-error-blacklisted": "Paki pumili ng isang naiibang mapaglarawang pamagat."
 }
index 5c65c34..a623dcb 100644 (file)
        "upload-dialog-button-done": "Готово",
        "upload-dialog-button-save": "Зберегти",
        "upload-dialog-button-upload": "Завантажити",
-       "upload-process-error": "Сталася помилка",
-       "upload-process-warning": "З'явилось попередження",
        "upload-form-label-select-file": "Обрати файл",
        "upload-form-label-infoform-title": "Деталі",
        "upload-form-label-infoform-name": "Назва",
        "mw-widgets-dateinput-placeholder-day": "РРРР-ММ-ДД",
        "mw-widgets-dateinput-placeholder-month": "РРРР-ММ",
        "mw-widgets-titleinput-description-new-page": "сторінка ще не існує",
-       "mw-widgets-titleinput-description-redirect": "перенаправлення на $1"
+       "mw-widgets-titleinput-description-redirect": "перенаправлення на $1",
+       "api-error-blacklisted": "Будь ласка, виберіть іншу, більш зрозумілу назву."
 }
index 1444970..2c1d958 100644 (file)
        "special-characters-title-minus": "segno meno",
        "mw-widgets-dateinput-placeholder-day": "AAAA-MM-GG",
        "mw-widgets-dateinput-placeholder-month": "AAAA-MM",
-       "mw-widgets-titleinput-description-redirect": "rimando a $1"
+       "mw-widgets-titleinput-description-redirect": "rimando a $1",
+       "api-error-blacklisted": "Par piaser siełi un titoło difarente e descritivo."
 }
index b34b09d..8703ea8 100644 (file)
        "upload-dialog-button-done": "Xong",
        "upload-dialog-button-save": "Lưu",
        "upload-dialog-button-upload": "Tải lên",
-       "upload-process-error": "Đã xuất hiện lỗi",
-       "upload-process-warning": "Đã xuất hiện cảnh báo",
        "upload-form-label-select-file": "Chọn tập tin",
        "upload-form-label-infoform-title": "Chi tiết",
        "upload-form-label-infoform-name": "Tên",
        "mw-widgets-dateinput-placeholder-day": "YYYY-MM-DD (năm-tháng-ngày)",
        "mw-widgets-dateinput-placeholder-month": "YYYY-MM (năm-tháng)",
        "mw-widgets-titleinput-description-new-page": "Trang này chưa tồn tại",
-       "mw-widgets-titleinput-description-redirect": "Đổi hướng đến $1"
+       "mw-widgets-titleinput-description-redirect": "Đổi hướng đến $1",
+       "api-error-blacklisted": "Xin vui lòng chọn một tên khác miêu tả đầy đủ."
 }
index da6494d..de2dad0 100644 (file)
        "passwordreset-email": "Adresse emile:",
        "passwordreset-emailtitle": "Detays do contre so {{SITENAME}}",
        "changeemail": "Candjî l' emile",
-       "changeemail-text": "Rimplixhoz l' formulrece po candjî voste adresse emile. Vos dvroz dner vosse sicret po-z acertiner l' candjmint.",
+       "changeemail-header": "Candjî l' adresse emile do conte",
        "changeemail-no-info": "Vos dvoz esse elodjî po pleur aveur accès a cisse pådje ci.",
        "changeemail-oldemail": "Adresse emile pol moumint:",
        "changeemail-newemail": "Novele adresse emile:",
        "duration-years": "$1 anêye{{PLURAL:$1||s}}",
        "duration-decades": "$1 dijhinne{{PLURAL:$1||s}} d' anêyes",
        "duration-centuries": "$1 sieke{{PLURAL:$1||s}}",
-       "duration-millennia": "$1 meynaire{{PLURAL:$1||s}}"
+       "duration-millennia": "$1 meynaire{{PLURAL:$1||s}}",
+       "api-error-blacklisted": "S' i vs plait, tchoezixhoz èn ôte tite, pus esplicant."
 }
index e6c4e1b..80de25e 100644 (file)
        "spam_reverting": "Loppantib sumb mu mujj mu amul lëkkalekaay buy jëme $1",
        "spam_blanking": "Setal nañ wecc sumb yi amoon lëkkalekaay buy jëme $1",
        "simpleantispam-label": "Caytu lànk-spam.\n<strong>Bu</strong> fi yokk lenn!",
-       "pageinfo-toolboxlink": "Xibaar ci xëtu wi",
+       "pageinfo-toolboxlink": "Xibaar ci xët wi",
        "previousdiff": "← Coppite yi gën a yàgg",
        "nextdiff": "Coppite yi mujj →",
        "file-info": "Réyaayu file bi : $1, type MIME : $2",
index ec163d9..c2e8c96 100644 (file)
        "upload-dialog-button-done": "ערליידיקט",
        "upload-dialog-button-save": "אויפֿהיטן",
        "upload-dialog-button-upload": "אַרויפֿלאָדן",
-       "upload-process-error": "א גרײַז האט פאסירט",
-       "upload-process-warning": "א ווארענונג האט פאסירט",
        "upload-form-label-select-file": "קלויבן טעקע",
        "upload-form-label-infoform-title": "פרטים",
        "upload-form-label-infoform-name": "נאָמען",
index c3b5824..a5ecc20 100644 (file)
        "upload-dialog-button-done": "完成",
        "upload-dialog-button-save": "保存",
        "upload-dialog-button-upload": "上传",
-       "upload-process-error": "发生错误",
-       "upload-process-warning": "发生一条警告",
        "upload-form-label-select-file": "选择文件",
        "upload-form-label-infoform-title": "详细信息",
        "upload-form-label-infoform-name": "名称",
        "special-characters-title-minus": "减号",
        "mw-widgets-dateinput-no-date": "没有选定日期",
        "mw-widgets-titleinput-description-new-page": "页面不存在",
-       "mw-widgets-titleinput-description-redirect": "重定向至$1"
+       "mw-widgets-titleinput-description-redirect": "重定向至$1",
+       "api-error-blacklisted": "请选择其他描述性的标题。"
 }
index b244ea4..94b1513 100644 (file)
        "sig_tip": "您的簽名與日期時間",
        "hr_tip": "水平線 (少用)",
        "summary": "摘要:",
-       "subject": "主題/標題:",
+       "subject": "主:",
        "minoredit": "這是一個小修訂",
        "watchthis": "監視此頁面",
        "savearticle": "儲存頁面",
        "missingcommenttext": "請在下方輸入評論。",
        "missingcommentheader": "<strong>提醒:</strong>您未填寫此評論的主旨/標題。\n若您再點選 \"{{int:savearticle}}\" 一次,將略過主旨/標題直接儲存您的評論。",
        "summary-preview": "摘要預覽:",
-       "subject-preview": "主旨/標題預覽:",
+       "subject-preview": "主旨預覽:",
        "previewerrortext": "嘗試預覽您的變更時發生錯誤。",
        "blockedtitle": "使用者已被封鎖",
        "blockedtext": "<strong>您的使用者名稱或 IP 位址以被封鎖。</strong>\n\n您被 $1 封鎖,\n原因爲 <em>$2</em>。\n\n* 封鎖開始時間:$8\n* 封鎖結束時間:$6\n* 相關封鎖對象:$7\n\n您可以聯絡 $1 或其他的 [[{{MediaWiki:Grouppage-sysop}}|管理員]] 討論封鎖的相關問題。\n若您已在 [[Special:Preferences|偏好設定]] 中設定了一個有效的電子郵件地址,且尚未被封鎖郵件功能,則您可透過 \"Email 聯絡此使用者\" 的功能來聯絡相關管理員。\n您目前的 IP 位址是 $3,此次封鎖的 ID 為 #$5。\n請您在詢問時附註以上詳細訊息。",
        "upload-dialog-button-done": "完成",
        "upload-dialog-button-save": "儲存",
        "upload-dialog-button-upload": "上傳",
-       "upload-process-error": "發生錯誤",
-       "upload-process-warning": "發生警告",
        "upload-form-label-select-file": "選擇檔案",
        "upload-form-label-infoform-title": "詳細資訊",
        "upload-form-label-infoform-name": "名稱",
        "import-mapping-namespace": "匯入至命名空間:",
        "import-mapping-subpage": "匯入做為以下頁面的子頁面:",
        "import-upload-filename": "檔案名稱:",
-       "import-comment": "è©\95è«\96:",
+       "import-comment": "註解:",
        "importtext": "請使用 [[Special:Export|匯出工具]] 從來源 Wiki 匯出檔案,\n儲存至您的電腦後再上傳到這裡。",
        "importstart": "正在匯入頁面...",
        "import-revision-count": "$1 個修訂",
        "special-characters-title-minus": "減號",
        "mw-widgets-dateinput-no-date": "未選擇日期",
        "mw-widgets-titleinput-description-new-page": "頁面不存在",
-       "mw-widgets-titleinput-description-redirect": "重新導向至 $1"
+       "mw-widgets-titleinput-description-redirect": "重新導向至 $1",
+       "api-error-blacklisted": "請選擇另一個更具描述性的標題。"
 }
index bb5e9ab..3e25eec 100644 (file)
             "Urhixidur",
             "Wong128hk",
             "Zerng07",
-            "לערי ריינהארט"
+            "לערי ריינהארט",
+            "LNDDYL",
+            "Carrotkit"
         ]
     },
-    "tog-underline": "連結標注底線",
-    "tog-justify": "段落對齊",
-    "tog-hideminor": "近期變動中隱藏細微修改",
-    "tog-usenewrc": "使用強化的近期變動 (需要JavaScript)",
-    "tog-numberheadings": "自動編號標題",
-    "tog-showtoolbar": "顯示編輯工具欄 (需要JavaScript)",
-    "tog-watchcreations": "將我建立的頁面加進我的監視列表",
-    "tog-watchdefault": "將我更改的頁面添加到我的監視列表中",
-    "tog-minordefault": "預設將編輯設定為細微修改",
-    "tog-enotifwatchlistpages": "當我監視的頁面改變時發電子郵件給我",
-    "tog-enotifusertalkpages": "當我的對話頁有更動時發電子郵件通知我",
-    "tog-shownumberswatching": "顯示監視數目",
-    "tog-uselivepreview": "使用即時預覽 (JavaScript) (試驗中)",
-    "tog-watchlisthideminor": "監視列表中隱藏細微修改",
-    "tog-ccmeonemails": "當我寄電子郵件給其他使用者時,也寄一份複本到我的信箱。",
-    "saturday": "星期六",
-    "sun": "日",
-    "mon": "一",
-    "tue": "二",
-    "wed": "三",
-    "thu": "四",
-    "fri": "五",
-    "january": "一月",
-    "february": "二月",
-    "march": "三月",
-    "april": "四月",
-    "may_long": "五月",
-    "june": "六月",
-    "july": "七月",
-    "august": "八月",
-    "september": "九月",
-    "october": "十月",
-    "november": "十一月",
-    "december": "十二月",
-    "january-gen": "一月",
-    "february-gen": "二月",
-    "march-gen": "三月",
-    "april-gen": "四月",
-    "may-gen": "五月",
-    "june-gen": "六月",
-    "july-gen": "七月",
-    "august-gen": "八月",
-    "september-gen": "九月",
-    "october-gen": "十月",
-    "november-gen": "十一月",
-    "december-gen": "十二月",
-    "jan": "1月",
-    "feb": "2月",
-    "mar": "3月",
-    "apr": "4月",
-    "may": "5月",
-    "jun": "6月",
-    "jul": "7月",
-    "aug": "8月",
-    "sep": "9月",
-    "oct": "10月",
-    "nov": "11月",
-    "dec": "12月",
-    "subcategories": "子分類",
-    "qbfind": "尋找",
-    "vector-action-protect": "保護",
-    "vector-view-create": "建立",
-    "vector-view-view": "閱讀",
-    "help": "使用說明",
-    "search": "搜尋",
-    "searchbutton": "搜尋",
-    "history": "修訂記錄",
-    "history_short": "歷史",
-    "edit": "編輯",
-    "create": "建立",
-    "delete": "刪除",
-    "protect_change": "更改",
-    "postcomment": "新段落",
-    "toolbox": "工具箱",
-    "userpage": "檢視使用者頁面",
     "projectpage": "檢視計畫頁面",
-    "lastmodifiedat": "本頁最後更動時間在 $1 $2。",
-    "jumptosearch": "搜尋",
-    "aboutsite": "關於 {{SITENAME}}",
     "copyright": "本站的文字內容除另有聲明外,全部以 $1 條款授權使用。",
-    "disclaimers": "免責聲明",
-    "edithelp": "編輯說明",
-    "mainpage": "首頁",
-    "portal": "社群入口",
-    "portal-url": "Project:社群入口",
-    "badaccess-groups": "您剛才的請求只有{{PLURAL:$2|這個|這些}}使用者組的使用者才能使用: $1",
-    "editold": "編輯",
-    "editsectionhint": "编辑段落:$1",
-    "showtoc": "顯示",
-    "hidetoc": "隱藏",
-    "thisisdeleted": "檢視或復原$1?",
-    "site-rss-feed": "訂閱 $1 的 RSS 資料來源",
-    "site-atom-feed": "訂閱 $1 的 Atom 資料來源",
-    "page-rss-feed": "訂閱「$1」的 RSS 資料來源",
-    "page-atom-feed": "訂閱「$1」的 Atom 資料來源",
-    "red-link-title": "$1 (頁面不存在)",
-    "nstab-main": "頁面",
-    "nstab-user": "使用者頁面",
-    "nstab-special": "特殊頁面",
     "nstab-project": "計畫頁面",
     "nstab-mediawiki": "介面",
-    "nstab-help": "說明頁面",
-    "nosuchactiontext": "該URL所指定的動作無效。\n您可能打錯URL,或點了錯誤連結。\n這也可能是{{SITENAME}}所使用的軟件出現了錯誤。",
-    "readonlytext": "資料庫目前禁止輸入新內容及更改,\n這很可能是由於資料庫正在維修,之後即可復原。\n管理員有如下解釋:\n<p>$1</p>",
-    "cannotdelete": "無法刪除選定的頁面或圖片(它可能已經被其他人刪除了)。",
-    "actionthrottledtext": "系統因為反垃圾編輯的考量,禁止如此頻繁地修改資料,請數分鐘後再嘗試。",
-    "viewsourcetext": "你可以檢視並複製本頁面的原始碼。",
-    "editinginterface": "'''警告:''' 您正在編輯的頁面是正用在軟體上的介面文字。改變此頁將影響其他用戶的介面外觀。如要翻譯,請考慮使用 [//translatewiki.net/wiki/Main_Page?setlang=zh-hant translatewiki.net],一個用來為MediaWiki軟體本地化的計畫。",
-    "ns-specialprotected": "在{{ns:special}}名字空間中的頁面是不可以編輯的。",
-    "logouttext": "您現在已經登出。\n\n您可以以匿名方式繼續使用{{SITENAME}},或者以相同或不同用戶身份[[Special:UserLogin|登入]]。\n請注意,如果你再次登入,此頁或會繼續顯示,直到您清除瀏覽器快取。",
-    "welcomecreation": "== 歡迎,$1! ==\n您的帳號已經建立。\n請不要忘記設定[[Special:Preferences|{{SITENAME}}的個人參數]]。",
-    "yourname": "您的使用者名:",
-    "yourpassword": "密碼:",
-    "login": "登入",
-    "nav-login-createaccount": "登入/建立新帳號",
-    "userlogin": "登入/建立新帳號",
-    "logout": "登出",
-    "userlogout": "登出",
-    "nologin": "您還沒有帳號嗎?$1。",
-    "nologinlink": "建立新帳號",
-    "createaccount": "建立新帳號",
-    "gotaccount": "已經擁有帳號?$1。",
-    "badretype": "你所輸入的密碼並不相同。",
-    "userexists": "您所輸入的使用者名稱已經存在,請另選一個名稱。",
-    "nocookiesnew": "已成功建立新帳號!偵測到您已關閉 Cookies,請開啟它並登入。",
-    "nocookieslogin": "本站利用 Cookies 進行使用者登入,偵測到您已關閉 Cookies,請開啟它並重新登入。",
-    "noname": "你沒有輸入一個有效的使用者帳號。",
-    "loginsuccess": "你現在以 \"$1\"的身份登入{{SITENAME}}。",
-    "nosuchuser": "找不到使用者 \"$1\"。\n檢查您的拼寫,或者用下面的表格[[Special:UserLogin/signup|建立一個新帳號]]。",
-    "nosuchusershort": "沒有一個名為「$1」的使用者。請檢查您輸入的文字是否有錯誤。",
-    "nouserspecified": "你需要指定一個使用者帳號。",
-    "passwordtooshort": "您的密碼不正確或太短,不能少於$1個字元,而且必須跟使用者名不同。",
-    "passwordremindertitle": "{{SITENAME}}密碼提醒",
-    "passwordremindertext": "有人(來自IP位址$1,可能是您)已請求{{SITENAME}}的新密碼 ($4)。\n用戶\"$2\"現在已設定新臨時密碼\"$3\"。\n如果這個動作是您所指示的,您需要立即登入並選擇一個新的密碼。\n您的臨時密碼會在{{PLURAL:$5|一|$5}}天內過期。\n\n如果是其他人發出了該請求,或者您已經想起了您的密碼而且並不打算換掉,\n您可以忽略此消息並繼續使用您的舊密碼。",
-    "noemail": "使用者\"$1\"沒有登記電子郵件地址。",
-    "passwordsent": "使用者\"$1\"的新密碼已經寄往所登記的電子郵件地址。\n請在收到後再登入。",
-    "blocked-mailpassword": "由於這個使用者被封鎖,我們暫時禁止您請求申請新密碼。造成不便敬請見諒",
-    "eauthentsent": "一封確認信已經發送到所示的地址。在發送其它郵件到此帳號前,您必須首先依照這封信中的指導確認這個電子郵件信箱真實有效。",
-    "acct_creation_throttle_hit": "抱歉,使用您的IP位址拜訪此wiki網站的訪客已經在昨天創建了$1個帳號,達到了該時段的上限,所以目前使用這個IP位址的訪客不能再繼續創建帳號。",
-    "emailauthenticated": "您的電子郵件地址已經於$2 $3確認有效。",
-    "emailnotauthenticated": "您的電子郵件地址<strong>還沒被認證</strong>。以下功能將不會發送任何郵件。",
-    "noemailprefs": "指定一個電子郵件地址以使用此功能",
-    "emailconfirmlink": "確認您的電子郵件地址",
-    "invalidemailaddress": "電子郵件地址格式不正確,請輸入正確的電子郵件位址或清空該輸入框。",
-    "accountcreated": "已建立帳號",
-    "accountcreatedtext": "$1的帳號已經被建立。",
-    "createaccount-title": "在{{SITENAME}}中建立新帳號",
-    "createaccount-text": "有人在{{SITENAME}}中為 $2 建立了一個新帳號($4)。 \"$2\" 的密碼是 \"$3\" 。您應該立即登入並更改密碼。\n\n如果該帳號建立錯誤的話,您可以忽略此訊息。",
-    "resetpass": "更換密碼",
-    "resetpass_announce": "您是透過臨時發送到郵件中的代碼登入的。要完成登入,您必須在這裡設定一個新密碼:",
-    "resetpass_header": "更換帳號密碼",
-    "oldpassword": "舊密碼",
-    "newpassword": "新密碼",
-    "resetpass_success": "您的密碼已經被成功更改﹗現下正為您登入...",
-    "resetpass_forbidden": "無法更改密碼",
-    "image_tip": "嵌入圖片",
-    "media_tip": "媒體檔案連結",
-    "summary": "摘要",
-    "minoredit": "這是一個細微修改",
-    "savearticle": "儲存頁面",
-    "blockedtitle": "使用者被封鎖",
-    "confirmedittext": "在編輯此頁之前您必須確認您的電子郵件地址。請透過[[Special:Preferences|偏好設定]]設定並驗證您的電子郵件地址。",
-    "accmailtext": "'[[User talk:$1|$1]]'的隨機產生密碼已經寄到$2。\n\n這個新帳號的密碼可以在登入後的''[[Special:ChangePassword|更改密碼]]''頁面中更改。",
-    "newarticletext": "您進入了一個尚未建立的頁面。\n要建立該頁面,請在下面的編輯框中輸入內容(詳情參見[[{{MediaWiki:Helppage}}|說明]])。\n如果您是不小心來到此頁面,直接點擊您瀏覽器中的「返回」按鈕返回。",
-    "anontalkpagetext": "---- ''這是一個還未建立帳號的匿名使用者的對話頁。我們因此只能用IP地址來與他/她聯絡。該IP地址可能由幾名使用者共享。如果您是一名匿名使用者並認為本頁上的評語與您無關,請[[Special:UserLogin|建立新帳號或登入]]以避免在未來於其他匿名使用者混淆。''",
-    "noarticletext": "此頁目前沒有內容,您可以在其它頁[[Special:Search/{{PAGENAME}}|搜索此頁標題]],\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 搜索有關日誌],\n或[{{fullurl:{{FULLPAGENAME}}|action=edit}} 編輯此頁]</span>。",
-    "userpage-userdoesnotexist": "使用者帳號「<nowiki>$1</nowiki>」未曾建立。請在建立/編輯這個頁面前先檢查一下。",
-    "usercsspreview": "'''注意您只是在預覽您的個人 CSS, 還沒有儲存﹗'''",
-    "userjspreview": "'''注意您只是在測試/預覽您的個人 JavaScript,還沒有儲存﹗'''",
-    "previewnote": "'''請記住這只是預覽,內容尚未儲存!'''",
-    "session_fail_preview": "'''很抱歉!由於部份資料遺失,我們無法處理您的編輯。'''\n請再試一次。\n如果仍然失敗,請[[Special:UserLogout|登出]]後重新登入。",
-    "session_fail_preview_html": "'''很抱歉!部份資料已遺失,我們無法處理您的編輯。''''''如果這個編輯過程沒有問題,請再試一次。如果仍然有問題,請登出後再重新登入一次。'''",
-    "token_suffix_mismatch": "'''由於您使用者端中的編輯信符毀損了一些標點符號字元,為防止編輯的文字損壞,您的編輯已經被拒絕。\n這種情況通常出現於使用含有很多臭蟲、以網路為主的匿名代理服務的時候。'''",
-    "editingcomment": "正在編輯$1(新段落)",
-    "storedversion": "已保存版本",
-    "nonunicodebrowser": "'''警告: 您的瀏覽器不相容Unicode編碼。這裡有一個工作區將使您能安全地編輯頁面: 非ASCII字元將以十六進製編碼模式出現在編輯框中。'''",
-    "editingold": "'''警告:你正在編輯的是本頁的舊版本。\n如果你保存它的話,在本版本之後的任何修改都會遺失。'''",
-    "longpageerror": "'''錯誤: 您所提交的文字長度有$1KB,這大於$2KB的最大值。該文字不能被儲存。'''",
-    "protectedpagewarning": "'''警告: 本頁已經被保護,只有擁有管理員許可權的使用者才可修改。'''",
-    "semiprotectedpagewarning": "'''注意:''' 本頁面被鎖定,僅限註冊使用者編輯。",
-    "cascadeprotectedwarning": "警告: 本頁已經被保護,只有擁有管理員權限的使用者才可修改,因為本頁已被以下連鎖保護的{{PLURAL:$1|一個|多個}}頁面所包含:",
-    "nocreatetitle": "建立頁面受限",
-    "nocreatetext": "此網站限制了建立新頁面的功能。你可以返回並編輯已有的頁面,或者[[Special:UserLogin|登錄或建立新帳號]]。",
-    "nocreate-loggedin": "您在這個wiki中並無許可權去建立新頁面。",
-    "recreate-moveddeleted-warn": "'''警告: 你現在重新建立一個先前曾經刪除過的頁面。'''\n\n你應該要考慮一下繼續編輯這一個頁面是否合適。\n為方便起見,這一個頁面的刪除記錄已經在下面提供:",
-    "edit-hook-aborted": "編輯被鉤取消。\n它並無給出解釋。",
-    "post-expand-template-argument-category": "包含著略過模板參數的頁面",
-    "cantcreateaccounttitle": "無法建立帳號",
-    "cantcreateaccount-text": "從這個IP地址 (<b>$1</b>) 建立帳號已經被[[User:$3|$3]]禁止。\n\n當中被$3封鎖的原因是''$2''",
-    "histlegend": "差異選擇:標記要比較版本的單選按鈕並點擊底部的按鈕進行比較。<br />\n說明:(目前) 指與目前版本比較,(先前) 指與前一個修訂版本比較,小 = 細微修改。",
-    "history-feed-title": "修訂沿革",
-    "history-feed-description": "本站上此頁的修訂沿革",
-    "history-feed-empty": "所請求的頁面不存在。它可能已被刪除或重新命名。\n嘗試[[Special:Search|搜尋本站]]獲得相關的新建頁面。",
-    "rev-deleted-comment": "(註釋已除)",
-    "rev-deleted-user": "(使用者名已移除)",
-    "rev-deleted-event": "(日誌已除)",
-    "rev-deleted-text-permission": "該頁面修訂已經被從公共文件中移除。\n在[{{fullurl:{{#Special:Log}}/suppress|page={{PAGENAMEE}}}} 刪除日誌]中您可能會檢視到詳細的訊息。",
-    "rev-deleted-text-view": "該頁面修訂已經被從公共文件中移除。作為此網站的管理員,您可以檢視它;\n在[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 刪除日誌]中您可能會檢視到詳細的訊息。",
-    "revisiondelete": "刪除/復原刪除修訂",
-    "revdelete-nooldid-title": "沒有目標修訂",
-    "revdelete-nooldid-text": "您沒有指定此操作的目標修訂。",
-    "logdelete-selected": "'''選取的$1個日誌項目:'''",
-    "revdelete-text": "'''刪除的修訂仍將顯示在修訂記錄中, 但它們的文字內容已不能被公眾訪問。'''\n\n在此網站的其他管理員將仍能訪問隱藏的內容並透過與此相同的介面復原刪除,除非網站工作者進行了一些附加的限制。",
-    "revdelete-legend": "設定修訂限制:",
-    "revdelete-hide-user": "隱藏編輯者的使用者名/IP",
-    "revdelete-hide-restricted": "將此限制同樣應用於管理員",
-    "revdelete-suppress": "同時壓制由操作員以及其他使用者的資料",
-    "revdelete-unsuppress": "在已復原的修訂中移除限制",
-    "revdelete-success": "修訂的可見性已經成功設定。",
-    "logdelete-success": "事件的可見性已經成功設定。",
-    "mergehistory": "合併修訂記錄",
-    "mergehistory-header": "這一頁可以講您合併一個來源頁面的歷史到另一個新頁面中。\n請確認這次更改會繼續保留該頁面先前的歷史版本。\n\n'''最少該來源頁面的現時修訂必定會保持。'''",
-    "mergehistory-merge": "以下[[:$1]]的修訂可以合併到[[:$2]]。用該選項按鈕欄去合併只有在指定時間以前所建立的修訂。要留意的是使用導航連結便會重設這一欄。",
-    "mergelogpagetext": "以下是一個最近由一個頁面的修訂沿革合併到另一個頁面的列表。",
-    "history-title": "「$1」的修訂沿革",
-    "compareselectedversions": "比較選定的版本",
-    "searchresults": "搜尋結果",
-    "searchresulttext": "有關搜尋{{SITENAME}}的更多詳情,參見[[{{MediaWiki:Helppage}}|{{int:help}}]]。",
-    "searchsubtitle": "查詢'''[[:$1]]'''([[Special:Prefixindex/$1|所有以 \"$1\" 開頭的頁面]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|所有鏈接到 \"$1\" 的頁面]])",
-    "nonefound": "'''注意''': 只有一些名稱空間是會作為預設搜尋。嘗試''all:''去搜尋全部的頁面(包埋討論頁面、模板等),或可用需要的名稱空間作為前綴。",
-    "powersearch": "搜尋",
-    "searchdisabled": "{{SITENAME}}由於性能方面的原因,全文搜尋已被暫時停用。您可以暫時透過Google搜尋。請留意他們的索引可能會過時。",
-    "preferences": "偏好設定",
-    "mypreferences": "我的偏好設定",
-    "prefsnologintext": "您必須先[[Special:UserLogin|登入]]才能設定個人參數。",
-    "prefs-personal": "使用者資料",
-    "prefs-rc": "近期變動",
-    "prefs-watchlist-days": "監視列表中顯示記錄的最長天數:",
-    "resetprefs": "重設參數",
-    "searchresultshead": "搜尋結果設定",
-    "recentchangesdays": "近期變動中的顯示日數:",
-    "recentchangescount": "近期變動中的編輯數:",
-    "savedprefs": "您的個人偏好設定已經儲存。",
-    "timezonelegend": "時區",
-    "localtime": "當地時間",
-    "timezoneoffset": "時差¹",
-    "servertime": "伺服器時間",
-    "allowemail": "接受來自其他使用者的郵件",
-    "defaultns": "否則在這些名字空間搜尋:",
-    "username": "使用者名:",
-    "uid": "使用者ID:",
-    "yournick": "暱稱:",
-    "badsig": "錯誤的原始簽名;請檢查HTML標籤。",
-    "badsiglength": "你的簽名過長;簽名長度必須在$1個字元以下。",
-    "prefs-help-gender": "可選:用於軟體中的性別指定。此項資料將會被公開。",
-    "prefs-help-realname": "真實姓名是選填的,如果您選擇提供它,那它便用以對您的貢獻署名。",
-    "prefs-help-email": "電子郵件是選填的,但當啟用它後可以在您忘記您的個密碼時需要將新密碼重設寄回給您。而在您未公開自己的使用者身分時也能透過您的用戶頁或用戶討論頁與您聯繫。",
-    "userrights": "使用者權限管理",
-    "userrights-lookup-user": "管理使用者群組",
-    "userrights-user-editname": "輸入使用者帳號:",
-    "editusergroup": "編輯使用者群組",
-    "editinguser": "正在編輯使用者'''[[User:$1|$1]]''' ([[User talk:$1|{{int:talkpagelinktext}}]] | [[Special:Contributions/$1|{{int:contribslink}}]])",
-    "userrights-editusergroup": "編輯使用者群組",
-    "saveusergroups": "保存使用者群組",
-    "group-autoconfirmed": "自動確認使用者",
-    "group-autoconfirmed-member": "自動確認使用者",
-    "grouppage-autoconfirmed": "{{ns:project}}:自動確認使用者",
-    "rightslog": "使用者權限日誌",
-    "rightslogtext": "以下記錄了使用者權限的更改記錄。",
-    "recentchanges": "近期變動",
-    "recentchanges-feed-description": "追蹤此訂閱在 wiki 上的近期變動。",
-    "rcnotefrom": "下面是自<b>$2</b>(最多顯示<b>$1</b>):",
-    "rcshowhideminor": "$1細微修改",
-    "rcshowhidebots": "$1機器人的編輯",
-    "rcshowhideliu": "$1具名使用者的編輯",
-    "rcshowhideanons": "$1匿名使用者的編輯",
-    "rcshowhidepatr": " $1檢查過的編輯",
-    "number_of_watching_users_pageview": "[$1個關注使用者]",
-    "recentchangeslinked": "相關頁面修訂記錄",
-    "recentchangeslinked-feed": "相關頁面修訂記錄",
-    "recentchangeslinked-toolbox": "相關頁面修訂記錄",
-    "recentchangeslinked-title": "$1 內連結頁面的修訂記錄",
-    "recentchangeslinked-summary": "這一個特殊頁面列示這一頁連出頁面的近期變動。在您監視列表中的頁面會以'''粗體'''表示。",
-    "upload": "上傳檔案",
-    "reuploaddesc": "返回上載表單。",
-    "uploadtext": "使用下面的表單來上傳用在頁面內新的圖片檔案。\n要檢視或搜尋以前上傳的圖片\n可以進入[[Special:FileList|圖片清單]],\n上傳和刪除將在[[Special:Log/upload|上傳日誌]]中記錄。\n\n要在頁面中加入圖片,使用以下形式的連接:\n'''<nowiki>[[</nowiki>{{ns:file}}:file.jpg<nowiki>]]</nowiki>''',\n'''<nowiki>[[</nowiki>{{ns:file}}:file.png|替換文字<nowiki>]]</nowiki>''' 或\n'''<nowiki>[[</nowiki>{{ns:media}}:file.ogg<nowiki>]]</nowiki>'''。",
-    "uploadlogpagetext": "以下是最近上傳的檔案的一覽表。",
-    "ignorewarning": "忽略警告並儲存檔案。",
-    "illegalfilename": "檔案名\"$1\"包含有頁面標題所禁止的字符。請改名後重新上傳。",
-    "badfilename": "檔案名已被改為\"$1\"。",
-    "hookaborted": "您所嘗試的修改被擴展鉤捨棄。",
-    "fileexists-thumbnail-yes": "這個檔案好像是一幅圖片的縮圖版本''(縮圖)''。 [[$1|thumb]]\n請檢查清楚該檔案'''<tt>[[:$1]]</tt>'''。\n如果檢查後的檔案是同原本圖片的大小是一樣的話,就不用再上載多一幅縮圖。",
-    "file-thumbnail-no": "該檔名是以'''<tt>$1</tt>'''開始。它好像一幅圖片的縮圖版本''(縮圖)''。\n如果你有該圖片的完整大小,如不是請再修改檔名。",
-    "fileexists-forbidden": "已存在相同名稱的檔案;請返回並用一個新的名稱來上傳此檔案。[[File:$1|thumb|center|$1]]",
-    "fileexists-shared-forbidden": "在共享檔案庫中已存在此名稱的檔案;請返回並用一個新的名稱來上傳此檔案。[[File:$1|thumb|center|$1]]",
-    "uploaddisabledtext": "檔案上傳在此網站不可用。",
-    "watchthisupload": "監視此頁",
-    "upload-proto-error": "協訂錯誤",
-    "upload-file-error-text": "當試圖在伺服器上建立臨時檔案時發生內部錯誤。請與系統管理員聯繫。",
-    "upload-misc-error-text": "在上傳時發生未知的錯誤. 請驗証使用了正確並可訪問的 URL,然後進行重試。如果問題仍然存在,請與系統管理員聯繫。",
-    "listfiles_search_for": "按圖片名稱搜尋:",
-    "listfiles_user": "使用者",
-    "filehist": "檔案歷史",
-    "filehist-deleteone": "刪除這個",
-    "filehist-revert": "復原",
-    "filehist-datetime": "日期/時間",
-    "filehist-user": "使用者",
-    "imagelinks": "連結",
-    "filerevert": "復原$1",
-    "filerevert-legend": "復原檔案",
-    "filerevert-intro": "<span class=\"plainlinks\">您現正在復原'''[[Media:$1|$1]]'''到[$4 於$2 $3的版本]。</span>",
-    "filerevert-defaultcomment": "已經復原到於$1 $2的版本",
-    "filerevert-submit": "復原",
-    "filerevert-success": "<span class=\"plainlinks\">'''[[Media:$1|$1]]'''已經復原到[$4 於$2 $3的版本]。</span>",
-    "filedelete-intro": "您現正刪除'''[[Media:$1|$1]]'''。",
-    "filedelete-intro-old": "<span class=\"plainlinks\">你現正刪除'''[[Media:$1|$1]]'''於[$4 $2 $3]的版本。</span>",
-    "filedelete-comment": "註解:",
-    "filedelete-nofile": "'''$1'''在這個網站中不存在。",
-    "filedelete-nofile-old": "在已指定屬性的情況下,這裡沒有'''$1'''於 $2 $3 的版本。",
-    "mimesearch": "MIME 搜尋",
-    "unusedtemplatestext": "本頁面列出模板名字空間下所有未被其他頁面使用的頁面。請在刪除這些模板前檢查其他鏈入該模板的頁面。",
-    "randompage-nopages": "在這個名字空間中沒有頁面。",
-    "randomredirect-nopages": "在這個名字空間中沒有重定向頁面。",
-    "statistics-header-users": "使用者統計",
-    "disambiguations": "消歧義",
-    "disambiguations-text": "以下的頁面都有到<b>消歧義頁</b>的鏈接,\n但它們應該是連到適當的標題。<br />\n個頁面會被視為消含糊頁如果它是連自[[MediaWiki:Disambiguationspage]]。",
-    "withoutinterwiki-summary": "以下的頁面是未有語言鏈接到其它語言版本:",
-    "lonelypagestext": "以下頁面尚未被這個wiki中的其它頁面連結。",
-    "uncategorizedimages": "待分類圖片",
-    "unusedimages": "未使用圖片",
-    "mostimages": "最多連結圖片",
-    "prefixindex": "所有頁面之前綴",
-    "deadendpagestext": "以下頁面沒有連結到這個wiki中的其它頁面。",
-    "listusers": "使用者列表",
-    "newpages-username": "使用者帳號:",
-    "move": "移動",
-    "unusedimagestext": "請注意其它網站可能直接透過 URL 連結此圖片,所以這裡列出的圖片有可能依然被使用。",
-    "notargettext": "您還沒有指定一個目標頁面或使用者以進行此項操作。",
-    "specialloguserlabel": "使用者:",
-    "alllogstext": "綜合顯示 {{SITENAME}} 的上傳、刪除、保護、查封以及站務日誌。",
-    "listusersfrom": "給定顯示使用者條件:",
-    "listusers-noresult": "找不到使用者。",
-    "activeusers-hidebots": "隱藏機器人",
-    "mailnologin": "無E-mail地址",
-    "mailnologintext": "您必須先[[Special:UserLogin|登入]]\n並在[[Special:Preferences|偏好設定]]\n中有一個有效的e-mail地址才可以E-mail其他使用者。",
-    "emailuser": "E-mail該使用者",
-    "emailpage": "E-mail使用者",
-    "emailpagetext": "如果該使用者已經在他或她的偏好設定頁中輸入了有效的e-mail地址,以下的表格將寄一個訊息給該使用者。您在您偏好設定中所輸入的e-mail地址將出現在郵件「發件人」一欄中,這樣該使用者就可以回覆您。",
-    "noemailtext": "該使用者還沒有指定一個有效的e-mail地址,\n或者選擇不接受來自其他使用者的e-mail。",
-    "emailfrom": "發件人",
-    "emailto": "收件人",
-    "emailsubject": "主題",
-    "emailmessage": "訊息",
-    "emailccme": "將我的消息的副本發送一份到我的E-mail信箱。",
-    "addedwatchtext": "頁面「[[:$1]]」已經被加入到您的[[Special:Watchlist|監視清單]]中。將來有關此頁面及其討論頁的任何修改將會在那裡列出,而且還會在[[Special:RecentChanges|近期變動]]中以'''粗體'''形式列出以使起更容易識別。",
-    "removedwatchtext": "頁面「[[:$1]]」已經從您的監視頁面中移除。",
-    "watchlist-details": "不包含討論頁,您的監視列表共有 $1 頁。",
-    "enotif_impersonal_salutation": "{{SITENAME}}使用者",
-    "enotif_anon_editor": "匿名使用者$1",
-    "enotif_body": "親愛的 $WATCHINGUSERNAME,\n\n$PAGEEDITOR 已經在 $PAGEEDITDATE $CHANGEDORCREATED{{SITENAME}}的 $PAGETITLE 頁面,請到 $PAGETITLE_URL 檢視目前版本。\n\n$NEWPAGE\n\n編輯摘要: $PAGESUMMARY $PAGEMINOREDIT\n\n聯繫此編輯者:\n\n郵件: $PAGEEDITOR_EMAIL\n\n本站: $PAGEEDITOR_WIKI\n\n在您訪問此頁之前,將來的更改將不會向您發通知。您也可以重設您所有監視頁面的通知標記。\n\n                {{SITENAME}}通知系統\n\n--\n要改變您的監視列表設定,請參閱\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\n回饋和進一步的說明:\n{{canonicalurl:{{MediaWiki:Helppage}}}}",
-    "confirmdeletetext": "您即將從資料庫中永遠刪除一個頁面或圖片以及其歷史。\n請確定您要進行此項操作,並且了解其後果,同時您的行為符合[[{{MediaWiki:Policy-url}}]]。",
-    "deletedtext": "「$1」已經被刪除。\n最近刪除的紀錄請參見$2。",
-    "dellogpagetext": "以下是最近刪除的紀錄列表。\n所有的時間都是使用伺服器時間。",
-    "reverted": "復原到早期版本",
-    "deletecomment": "原因:",
-    "rollback": "復原",
-    "rollback_short": "復原",
-    "rollbacklink": "復原",
-    "rollbackfailed": "無法復原",
-    "cantrollback": "無法復原編輯;最後的貢獻者是本文的唯一作者。",
-    "alreadyrolled": "無法復原由[[User:$2|$2]] ([[User talk:$2|討論]])進行的[[$1]]的最後編輯;\n其他人已經編輯或是復原了該頁。\n\n最後編輯者: [[User:$3|$3]] ([[User talk:$3|討論]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]])。",
-    "editcomment": "編輯說明: \"''$1''\"。",
-    "revertpage": "復原由[[Special:Contributions/$2|$2]] ([[User talk:$2|對話]])的編輯;更改回[[User:$1|$1]]的最後一個版本",
-    "rollback-success": "復原由$1的編輯;更改回$2的最後一個版本。",
-    "protect-title": "更改「$1」的保護等級",
-    "protect-locked-blocked": "您不能在被封鎖時更改保護級別。\n以下是'''$1'''現時的保護級別:",
-    "protect-locked-access": "您的帳號權限不能修改保護級別。\n以下是'''$1'''現時的保護級別:",
-    "protect-cascadeon": "以下的{{PLURAL:$1|一個|多個}}頁面包含著本頁面的同時,啟動了連鎖保護,因此本頁面目前也被保護,未能編輯。您可以設定本頁面的保護級別,但這並不會對連鎖保護有所影響。",
-    "protect-default": "(預設)",
-    "protect-level-autoconfirmed": "禁止未註冊使用者",
-    "protect-expiry-options": "2小時:2 hours,1天:1 day,1周:1 week,2周:2 weeks,1個月:1 month,3個月:3 months,6個月:6 months,1年:1 year,永久:infinite",
-    "maximum-size": "最大大小",
-    "undelete": "復原被刪頁面",
-    "undeletepage": "瀏覽及復原被刪頁面",
-    "undeletepagetext": "以下頁面已經被刪除,但依然在檔案中並可以被復原。\n檔案庫可能被定時清理。",
-    "undeleteextrahelp": "復原整個頁面時,請清除所有複選框後按 '''''復原''''' 。 復原特定版本時,請選擇相應版本前的複選框後按'''''復原''''' 。按 '''''重設''''' 將清除評論內容及所有複選框。",
-    "undeletehistory": "如果您復原了該頁面,所有版本都會被復原到修訂沿革中。\n如果本頁刪除後有一個同名的新頁面建立,被復原的版本將會稱為較新的歷史。",
-    "undeleterevdel": "如果把最新修訂部份刪除,反刪除便無法進行。如果遇到這種情況,您必須反選或反隱藏最新已刪除的修訂。對於您沒有權限去檢視的修訂是無法復原的。",
-    "undeletehistorynoadmin": "這個頁面已經被刪除,刪除原因顯示在下方編輯摘要中。被刪除前的所有修訂版本,連同刪除前貢獻使用者等等細節只有管理員可以看見。",
-    "undelete-revision": "刪除$1時由$3(在$2)所編寫的修訂版本:",
-    "undeleterevision-missing": "此版本的內容不正確或已經遺失。可能連結錯誤、被移除或已經被復原。",
-    "undeletebtn": "復原",
-    "undeletedrevisions": "$1個修訂版本已經復原",
-    "undeletedrevisions-files": "$1 個版本和 $2 個檔案被復原",
-    "undeletedfiles": "$1 個檔案被復原",
-    "cannotundelete": "復原失敗;可能之前已經被其他人復原。",
-    "undeletedpage": "'''$1已經被復原''' 請參考[[Special:Log/delete|刪除日誌]]來查詢刪除及復原記錄。",
-    "undelete-missing-filearchive": "由於檔案存檔 ID $1 不在資料庫中,不能在檔案存檔中復原。它可能已經反刪除了。",
-    "contributions": "使用者編修記錄",
-    "mycontris": "我的編修記錄",
-    "contribsub2": "$1的編修記錄 ($2)",
-    "uctop": "(最新修改)",
-    "sp-contributions-newbies": "只顯示新建立之使用者的編修記錄",
-    "sp-contributions-blocklog": "封鎖記錄",
-    "sp-contributions-userrights": "使用者權限管理",
-    "sp-contributions-username": "IP位址或使用者名稱:",
-    "blockip": "封鎖使用者",
-    "ipadressorusername": "IP地址或使用者名:",
-    "ipbreason-dropdown": "*一般的封鎖理由\n** 屢次增加不實資料\n** 刪除頁面內容\n** 外部連結廣告\n** 在頁面中增加無意義文字\n** 無禮的行為、攻擊/騷擾別人\n** 濫用多個帳號\n** 不能接受的使用者名",
-    "ipbcreateaccount": "阻止建立新帳號",
-    "ipbemailban": "阻止使用者傳送E-mail",
-    "ipbenableautoblock": "自動封鎖此使用者最後所用的IP位址,以及後來試圖編輯所用的所有位址",
-    "ipbsubmit": "封鎖該地址",
-    "ipbhidename": "在封鎖日誌、活躍封鎖列表以及使用者列表中隱藏使用者名/IP",
-    "blockipsuccesssub": "封鎖成功",
-    "blockipsuccesstext": "[[Special:Contributions/$1|$1]]已經被封鎖。\n<br />參看[[Special:BlockList|被封IP地址列表]]以覆審封鎖。",
-    "ipb-edit-dropdown": "編輯封鎖原因",
-    "ipb-unblock-addr": "解除封鎖$1",
-    "ipb-unblock": "解除禁封使用者名或IP地址",
-    "ipb-blocklist": "檢視現有的封鎖",
-    "unblockip": "解除禁封IP地址",
-    "unblockiptext": "用下面的表單來復原先前被禁封的IP地址的書寫權。",
-    "ipusubmit": "解除禁封",
-    "unblocked": "[[User:$1|$1]] 的封鎖已經解除。",
-    "unblocked-id": "封鎖 $1 已經被移除",
-    "ipblocklist-legend": "搜尋一位已經被封鎖的使用者",
-    "anononlyblock": "僅限匿名使用者",
-    "noautoblockblock": "禁用自動封鎖",
-    "createaccountblock": "禁止建立帳號",
-    "ipblocklist-empty": "封鎖列表為空。",
-    "ipblocklist-no-results": "所要求的IP地址/使用者名沒有被封鎖。",
-    "blocklink": "禁封",
-    "blocklogentry": "[[$1]]已被封鎖 $3 ,終止時間為$2",
-    "blocklogtext": "這是關於使用者封鎖和解除封鎖操作的記錄。被自動封鎖的IP地址沒有被列出。請參閱[[Special:BlockList|被封鎖的IP地址和使用者列表]]。",
-    "block-log-flags-anononly": "僅限匿名使用者",
-    "block-log-flags-nocreate": "禁止此IP/使用者建立新帳號",
-    "block-log-flags-noautoblock": "停用自動封鎖",
-    "range_block_disabled": "只有管理員才能建立禁止封鎖的範圍。",
-    "ipb_cant_unblock": "錯誤: 找不到封鎖ID$1。可能已經解除封鎖。",
-    "ipb_blocked_as_range": "錯誤: 該IP $1 無直接封鎖,不可以解除封鎖。但是它是在 $2 的封鎖範圍之內,該段範圍是可以解除封鎖的。",
-    "blockme": "封鎖我",
-    "sorbsreason": "您的IP位址被 DNSBL列為屬於開放代理服務器.",
-    "sorbs_create_account_reason": "由於您的IP位址被 DNSBL列為屬於開放代理服務器,所以您無法建立帳號。",
-    "lockdbtext": "鎖住資料庫將禁止所有使用者進行編輯頁面、更改參數、編輯監視列表以及其他需要更改資料庫的操作。\n請確認您的決定,並且保證您在維護工作結束後會重新開放資料庫。",
-    "unlockdbtext": "開放資料庫將會復原所有使用者進行編輯頁面、修改參數、編輯監視列表以及其他需要更改資料庫的操作。\n請確認您的決定。",
-    "movepagetext": "用下面的表單來重新命名一個頁面,並將其修訂沿革同時移動到新頁面。\n老的頁面將成為新頁面的重定向頁。\n連結到老頁面的連結並不會自動更改;\n請檢查雙重或損壞重定向連結。\n您應當負責確定所有連結依然會連到指定的頁面。\n\n注意如果新頁面已經有內容的話,頁面將'''不會'''被移動,\n除非新頁面無內容或是重定向頁,而且沒有修訂沿革。\n這意味著您再必要時可以在移動到新頁面後再移回老的頁面,\n同時您也無法覆蓋現有頁面。\n\n<b>警告!</b>\n對一個經常被訪問的頁面而言這可能是一個重大與唐突的更改;\n請在行動前先了結其所可能帶來的後果。",
-    "movenologintext": "您必須是一名登記使用者並且[[Special:UserLogin|登入]]\n後才可移動一個頁面。",
-    "movenotallowed": "您在這個wiki中度並沒有許可權去移動頁面。",
-    "movetalk": "如果可能的話,請同時移動對話頁。",
-    "movelogpagetext": "以下是已經移動的頁面清單:",
-    "revertmove": "復原該移動",
-    "exporttext": "您可以將特定頁面或一組頁面的文字以及編輯歷史以 XML 格式匯出;這樣可以將有關頁面透過「[[Special:Import|匯入頁面]]」頁面匯入到另一個執行 MediaWiki 的網站。\n\n要匯出頁面,請在下面的文字框中輸入頁面標題,每行一個標題,\n並選擇你是否需要匯出帶有修訂紀錄的以前的版本,\n或是只選擇匯出帶有最後一次編輯訊息的目前版本。\n\n此外你還可以利用連結匯出檔案,例如你可以使用 [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] 匯出「[[{{MediaWiki:Mainpage}}]]」頁面。",
-    "export-download": "提供一個檔案以供另存",
-    "allmessages": "系統介面",
-    "allmessagestext": "這裡列出所有可定製的系統介面。",
-    "allmessagesnotsupportedDB": "系統介面功能處於關閉狀態 (wgUseDatabaseMessages)。",
-    "thumbnail_error": "建立縮圖錯誤: $1",
-    "import-interwiki-history": "複製此頁的所有歷史版本",
-    "import-interwiki-namespace": "將頁面轉移到名字空間:",
-    "importtext": "請使用 Special:Export 功能從源 wiki 匯出檔案,儲存到您的磁片並上傳到這裡。",
-    "importfailed": "匯入失敗: $1",
-    "importsuccess": "匯入成功﹗",
-    "importhistoryconflict": "存在衝突的修訂沿革(可能在之前已經匯入過此頁面)",
-    "tooltip-pt-userpage": "用戶頁",
-    "tooltip-pt-anonuserpage": "您編輯本站所用IP的對應使用者頁",
-    "tooltip-pt-mytalk": "討論頁",
-    "tooltip-pt-preferences": "我的偏好設定",
-    "tooltip-pt-watchlist": "我的監視列表",
-    "tooltip-pt-mycontris": "編修記錄",
-    "tooltip-ca-addsection": "於本討論頁增加新的討論主題",
-    "tooltip-ca-history": "本頁面的早前版本。",
-    "tooltip-ca-undelete": "將這個頁面復原到被刪除以前的狀態",
-    "tooltip-p-logo": "首頁",
-    "tooltip-n-help": "尋求說明",
-    "tooltip-feed-rss": "訂閱本修訂記錄的RSS資訊",
-    "tooltip-feed-atom": "訂閱本修訂記錄的Atom訊息",
-    "tooltip-t-contributions": "檢視該使用者的編修記錄",
-    "tooltip-t-emailuser": "向該使用者發送電子郵件",
-    "tooltip-t-upload": "上傳圖片或多媒體檔",
-    "tooltip-t-permalink": "這個頁面版本的永久連結",
-    "tooltip-ca-nstab-user": "檢視使用者頁",
-    "tooltip-ca-nstab-image": "查詢圖片頁面",
-    "tooltip-ca-nstab-template": "檢視模板",
-    "tooltip-ca-nstab-help": "檢視說明頁面",
-    "tooltip-ca-nstab-category": "檢視分類頁面",
-    "tooltip-minoredit": "標記為細微修改",
-    "tooltip-compareselectedversions": "檢視本頁被點選的兩個版本間的差異",
-    "tooltip-rollback": "『{{int:rollbacklink}}』可以一按恢復上一位貢獻者對這個頁面的編輯",
-    "tooltip-undo": "『{{int:editundo}}』可以在編輯模式上開啟編輯表格以便復原。它容許在摘要中加入原因。",
-    "anonymous": "{{SITENAME}}的匿名{{PLURAL:$1|使用者|使用者}}",
-    "siteuser": "{{SITENAME}}使用者$1",
-    "anonuser": "{{SITENAME}}匿名使用者$1",
-    "siteusers": "{{SITENAME}}{{PLURAL:$2|使用者|使用者}}$1",
-    "anonusers": "{{SITENAME}}匿名{{PLURAL:$2|使用者|使用者}}$1",
-    "spamprotectiontext": "垃圾過濾器禁止保存您剛才提交的頁面,這可能是由於您所加入的外部網站連結所產生的問題。",
-    "spam_reverting": "復原到不包含連結至$1的最近版本",
-    "markedaspatrolledtext": "選定的版本已被標記為已檢查.",
-    "patrol-log-page": "巡查記錄",
-    "previousdiff": "←上一個",
-    "nextdiff": "下一個→",
-    "imagemaxsize": "在圖片描述頁對圖片大小限制為:",
-    "file-nohires": "無更高解析度可提供。",
-    "show-big-image": "完整解析度",
-    "newimages": "新建圖片畫廊",
-    "imagelisttext": "以下是按$2排列的$1個檔案列表。",
-    "showhidebots": "(機器人$1)",
-    "noimages": "無可檢視圖片。",
-    "bad_image_list": "請根據以下的格式去編寫:\n\n只有列示項目(以 * 開頭的項目)會被考慮。第一個連結一定要連接去壞圖片中。\n然後在同一行的連結會考慮作例外,即是幅圖片可以在哪一個頁面中同時顯示。",
-    "variantname-zh-tw": "台灣繁體",
-    "metadata-help": "此檔案中包含有擴展的訊息。這些訊息可能是由數位相機或掃描器在建立或數位化過程中所增加的。\n\n如果此檔案的源檔案已經被修改,一些訊息在修改後的檔案中將不能完全反映出來。",
-    "exif-bitspersample": "每像素位元數",
-    "exif-photometricinterpretation": "像素合成",
-    "exif-samplesperpixel": "像素數",
-    "exif-xresolution": "水準解析度",
-    "exif-yresolution": "垂直解析度",
-    "exif-stripoffsets": "圖片數據區",
-    "exif-imagedescription": "圖片標題",
-    "exif-compressedbitsperpixel": "圖片壓縮模式",
-    "exif-pixelydimension": "有效圖片寬度",
-    "exif-pixelxdimension": "有效圖片高度",
-    "exif-usercomment": "使用者註釋",
-    "exif-focalplanexresolution": "X軸焦平面解析度",
-    "exif-focalplaneyresolution": "Y軸焦平面解析度",
-    "exif-focalplaneresolutionunit": "焦平面解析度單位",
-    "exif-customrendered": "自定義圖片處理",
-    "exif-imageuniqueid": "唯一圖片ID",
-    "exif-gpsimgdirectionref": "圖片方位參照",
-    "exif-gpsimgdirection": "圖片方位",
-    "exif-lightsource-2": "螢光燈",
-    "exif-lightsource-12": "日光螢光燈(色溫 D 5700    7100K)",
-    "exif-lightsource-13": "日溫白色螢光燈(N 4600    5400K)",
-    "exif-lightsource-14": "冷白色螢光燈(W 3900    4500K)",
-    "exif-lightsource-15": "白色螢光 (WW 3200    3700K)",
-    "edit-externally-help": "請參見[//www.mediawiki.org/wiki/Manual:External_editors 設定步驟]了解詳細資訊。",
-    "confirmemail": "確認電子郵件地址",
-    "confirmemail_noemail": "您沒有在您的[[Special:Preferences|使用者設定]]裡面輸入一個有效的 email 位址。",
-    "confirmemail_text": "此網站要求您在使用郵件功能之前驗證您的電子郵件地址。\n點擊以下按鈕可向您的郵箱發送一封確認郵件。該郵件包含有一行代碼連結;\n請在您的瀏覽器中加載此連結以確認您的電子郵件地址是有效的。",
-    "confirmemail_sendfailed": "不能發送確認郵件,請檢查電子郵件地址是否包含非法字元。\n\n郵件傳送員回應: $1",
-    "confirmemail_needlogin": "您需要$1以確認您的電子郵件地址。",
-    "confirmemail_success": "您的郵箱已經被確認。您現下可以登錄並使用此網站了。",
-    "confirmemail_loggedin": "您的電子郵件地址現下已被確認。",
-    "confirmemail_subject": "{{SITENAME}}電子郵件地址確認",
-    "scarytranscludefailed": "[抱歉,模板$1讀取失敗]",
-    "scarytranscludetoolong": "[抱歉,URL 地址太長]",
-    "confirmrecreate": "在您編輯這個頁面後,使用者[[User:$1|$1]]([[User talk:$1|對話]])以下列原因刪除了這個頁面: $2。請在重新建立頁面前三思。",
-    "autosumm-blank": "移除所有頁面內容",
-    "autosumm-replace": "正在將頁面替換為 '$1'",
-    "autoredircomment": "正在重定向到 [[$1]]",
-    "autosumm-new": "新頁面: $1",
-    "livepreview-failed": "即時預覽失敗! 嘗試標準預覽。",
-    "version-parserhooks": "語法鉤",
-    "version-hooks": "鉤",
-    "version-parser-function-hooks": "語法函數鉤",
-    "version-hook-name": "鉤名",
-    "specialpages": "特殊頁面"
+    "welcomecreation": "== 歡迎,$1! ==\n您的帳號已經建立。\n請勿忘記設定 [[Special:Preferences|{{SITENAME}} 的個人偏好]]。"
 }
index 11a0590..0ed584c 100644 (file)
@@ -699,7 +699,6 @@ class TextPassDumper extends BackupDumper {
                $this->progress( "Spawning database subprocess: $cmd" );
                $this->spawnProc = proc_open( $cmd, $spec, $pipes );
                if ( !$this->spawnProc ) {
-                       // shit
                        $this->progress( "Subprocess spawn failed." );
 
                        return false;
index 6234db4..e0a0f49 100644 (file)
@@ -53,7 +53,7 @@ class CapsCleanup extends TableCleanup {
                        $this->error( "\$wgCapitalLinks is on -- no need for caps links cleanup.", true );
                }
 
-               $this->user = User::newFromName( 'Conversion script' );
+               $this->user = User::newSystemUser( 'Conversion script', array( 'steal' => true ) );
 
                $this->namespace = intval( $this->getOption( 'namespace', 0 ) );
                $this->dryrun = $this->hasOption( 'dry-run' );
index f4a5147..44d5810 100644 (file)
@@ -45,7 +45,7 @@ class CleanupSpam extends Maintenance {
                global $IP, $wgLocalDatabases, $wgUser;
 
                $username = wfMessage( 'spambot_username' )->text();
-               $wgUser = User::newFromName( $username );
+               $wgUser = User::newSystemUser( $username );
                if ( !$wgUser ) {
                        $this->error( "Invalid username specified in 'spambot_username' message: $username", true );
                }
index f6259e9..84e3aee 100644 (file)
@@ -49,11 +49,12 @@ class TableCleanup extends Maintenance {
 
        public function execute() {
                global $wgUser;
-               $wgUser = User::newFromName( 'Conversion script' );
                $this->dryrun = $this->hasOption( 'dry-run' );
                if ( $this->dryrun ) {
+                       $wgUser = User::newFromName( 'Conversion script' );
                        $this->output( "Checking for bad titles...\n" );
                } else {
+                       $wgUser = User::newSystemUser( 'Conversion script', array( 'steal' => true ) );
                        $this->output( "Checking and fixing bad titles...\n" );
                }
                $this->runTable( $this->defaultParams );
index e6321e1..a3b1561 100644 (file)
@@ -55,11 +55,15 @@ class DeleteBatch extends Maintenance {
                chdir( $oldCwd );
 
                # Options processing
-               $username = $this->getOption( 'u', 'Delete page script' );
+               $username = $this->getOption( 'u', false );
                $reason = $this->getOption( 'r', '' );
                $interval = $this->getOption( 'i', 0 );
 
-               $user = User::newFromName( $username );
+               if ( $username === false ) {
+                       $user = User::newSystemUser( 'Delete page script', array( 'steal' => true ) );
+               } else {
+                       $user = User::newFromName( $username );
+               }
                if ( !$user ) {
                        $this->error( "Invalid username", true );
                }
index 478e0d7..de5c5e2 100644 (file)
@@ -162,7 +162,7 @@ class DeleteEqualMessages extends Maintenance {
                        return;
                }
 
-               $user = User::newFromName( 'MediaWiki default' );
+               $user = User::newSystemUser( 'MediaWiki default', array( 'steal' => true ) );
                if ( !$user ) {
                        $this->error( "Invalid username", true );
                }
index 75ec12b..b67a957 100644 (file)
@@ -46,14 +46,18 @@ class EditCLI extends Maintenance {
        public function execute() {
                global $wgUser;
 
-               $userName = $this->getOption( 'user', 'Maintenance script' );
+               $userName = $this->getOption( 'user', false );
                $summary = $this->getOption( 'summary', '' );
                $minor = $this->hasOption( 'minor' );
                $bot = $this->hasOption( 'bot' );
                $autoSummary = $this->hasOption( 'autosummary' );
                $noRC = $this->hasOption( 'no-rc' );
 
-               $wgUser = User::newFromName( $userName );
+               if ( $userName === false ) {
+                       $wgUser = User::newSystemUser( 'Maintenance script', array( 'steal' => true ) );
+               } else {
+                       $wgUser = User::newFromName( $userName );
+               }
                if ( !$wgUser ) {
                        $this->error( "Invalid username", true );
                }
index ad385e5..a040248 100644 (file)
@@ -70,9 +70,9 @@ $files = findFiles( $dir, $extensions, isset( $options['search-recursively'] ) )
 # Initialise the user for this operation
 $user = isset( $options['user'] )
        ? User::newFromName( $options['user'] )
-       : User::newFromName( 'Maintenance script' );
+       : User::newSystemUser( 'Maintenance script', array( 'steal' => true ) );
 if ( !$user instanceof User ) {
-       $user = User::newFromName( 'Maintenance script' );
+       $user = User::newSystemUser( 'Maintenance script', array( 'steal' => true ) );
 }
 $wgUser = $user;
 
index 6566a60..5dfd2a8 100644 (file)
@@ -41,7 +41,12 @@ class ImportSiteScripts extends Maintenance {
        public function execute() {
                global $wgUser;
 
-               $user = User::newFromName( $this->getOption( 'username', 'ScriptImporter' ) );
+               $username = $this->getOption( 'username', false );
+               if ( $username === false ) {
+                       $user = User::newSystemUser( 'ScriptImporter', array( 'steal' => true ) );
+               } else {
+                       $user = User::newFromName( $username );
+               }
                $wgUser = $user;
 
                $baseUrl = $this->getArg( 1 );
index a27a772..5849908 100644 (file)
@@ -61,7 +61,7 @@ class MoveBatch extends Maintenance {
                chdir( $oldCwd );
 
                # Options processing
-               $user = $this->getOption( 'u', 'Move page script' );
+               $user = $this->getOption( 'u', false );
                $reason = $this->getOption( 'r', '' );
                $interval = $this->getOption( 'i', 0 );
                $noredirects = $this->getOption( 'noredirects', false );
@@ -75,7 +75,11 @@ class MoveBatch extends Maintenance {
                if ( !$file ) {
                        $this->error( "Unable to read file, exiting", true );
                }
-               $wgUser = User::newFromName( $user );
+               if ( $user === false ) {
+                       $wgUser = User::newSystemUser( 'Move page script', array( 'steal' => true ) );
+               } else {
+                       $wgUser = User::newFromName( $user );
+               }
                if ( !$wgUser ) {
                        $this->error( "Invalid username", true );
                }
index 088f677..184cba8 100644 (file)
@@ -179,22 +179,22 @@ class NamespaceConflictChecker extends Maintenance {
 
                foreach ( $spaces as $name => $ns ) {
                        if ( $ns != 0 ) {
-                               // Fix up link destinations for non-interwiki links only.
-                               //
-                               // For example if a page has [[Foo:Bar]] and then a Foo namespace
-                               // is introduced, pagelinks needs to be updated to have
-                               // page_namespace = NS_FOO.
-                               //
-                               // If instead an interwiki prefix was introduced called "Foo",
-                               // the link should instead be moved to the iwlinks table. If a new
-                               // language is introduced called "Foo", or if there is a pagelink
-                               // [[fr:Bar]] when interlanguage magic links are turned on, the
-                               // link would have to be moved to the langlinks table. Let's put
-                               // those cases in the too-hard basket for now. The consequences are
-                               // not especially severe.
-                               //
-                               // @fixme Handle interwiki links, and pagelinks to Category:, File:
-                               // which probably need reparsing.
+                               /* Fix up link destinations for non-interwiki links only.
+                                *
+                                * For example if a page has [[Foo:Bar]] and then a Foo namespace
+                                * is introduced, pagelinks needs to be updated to have
+                                * page_namespace = NS_FOO.
+                                *
+                                * If instead an interwiki prefix was introduced called "Foo",
+                                * the link should instead be moved to the iwlinks table. If a new
+                                * language is introduced called "Foo", or if there is a pagelink
+                                * [[fr:Bar]] when interlanguage magic links are turned on, the
+                                * link would have to be moved to the langlinks table. Let's put
+                                * those cases in the too-hard basket for now. The consequences are
+                                * not especially severe.
+                                * @fixme Handle interwiki links, and pagelinks to Category:, File:
+                                * which probably need reparsing.
+                                */
 
                                $this->checkLinkTable( 'pagelinks', 'pl', $ns, $name, $options );
                                $this->checkLinkTable( 'templatelinks', 'tl', $ns, $name, $options );
@@ -592,14 +592,15 @@ class NamespaceConflictChecker extends Maintenance {
 
                $this->db->delete( 'page', array( 'page_id' => $id ), __METHOD__ );
 
-               // Call LinksDeletionUpdate to delete outgoing links from the old title,
-               // and update category counts.
-               //
-               // Calling external code with a fake broken Title is a fairly dubious
-               // idea. It's necessary because it's quite a lot of code to duplicate,
-               // but that also makes it fragile since it would be easy for someone to
-               // accidentally introduce an assumption of title validity to the code we
-               // are calling.
+               /* Call LinksDeletionUpdate to delete outgoing links from the old title,
+                * and update category counts.
+                *
+                * Calling external code with a fake broken Title is a fairly dubious
+                * idea. It's necessary because it's quite a lot of code to duplicate,
+                * but that also makes it fragile since it would be easy for someone to
+                * accidentally introduce an assumption of title validity to the code we
+                * are calling.
+                */
                $update = new LinksDeletionUpdate( $wikiPage );
                $update->doUpdate();
                $this->db->commit( __METHOD__ );
index ec03f93..449a7ad 100644 (file)
@@ -41,7 +41,7 @@ class Protect extends Maintenance {
        }
 
        public function execute() {
-               $userName = $this->getOption( 'u', 'Maintenance script' );
+               $userName = $this->getOption( 'u', false );
                $reason = $this->getOption( 'r', '' );
 
                $cascade = $this->hasOption( 'cascade' );
@@ -53,7 +53,11 @@ class Protect extends Maintenance {
                        $protection = "";
                }
 
-               $user = User::newFromName( $userName );
+               if ( $userName === false ) {
+                       $user = User::newSystemUser( 'Maintenance script', array( 'steal' => true ) );
+               } else {
+                       $user = User::newFromName( $userName );
+               }
                if ( !$user ) {
                        $this->error( "Invalid username", true );
                }
index 967dda8..7be5a1f 100644 (file)
@@ -76,7 +76,7 @@ class RollbackEdits extends Maintenance {
                        return;
                }
 
-               $doer = User::newFromName( 'Maintenance script' );
+               $doer = User::newSystemUser( 'Maintenance script', array( 'steal' => true ) );
 
                foreach ( $titles as $t ) {
                        $page = WikiPage::factory( $t );
index 120ccb6..f7907ad 100644 (file)
@@ -757,13 +757,14 @@ class CgzCopyTransaction {
                        return;
                }
 
-               // Check to see if the target text_ids have been moved already.
-               //
-               // We originally read from the slave, so this can happen when a single
-               // text_id is shared between multiple pages. It's rare, but possible
-               // if a delete/move/undelete cycle splits up a null edit.
-               //
-               // We do a locking read to prevent closer-run race conditions.
+               /* Check to see if the target text_ids have been moved already.
+                *
+                * We originally read from the slave, so this can happen when a single
+                * text_id is shared between multiple pages. It's rare, but possible
+                * if a delete/move/undelete cycle splits up a null edit.
+                *
+                * We do a locking read to prevent closer-run race conditions.
+                */
                $dbw = wfGetDB( DB_MASTER );
                $dbw->begin( __METHOD__ );
                $res = $dbw->select( 'blob_tracking',
index 4b58b60..638b99d 100644 (file)
@@ -130,8 +130,7 @@ CREATE TABLE /*_*/user (
   --
   user_editcount int,
 
-  -- Expiration date for user password. Use $user->expirePassword()
-  -- to force a password reset.
+  -- Expiration date for user password.
   user_password_expires varbinary(14) DEFAULT NULL
 
 ) /*$wgDBTableOptions*/;
index adebd27..71b4de1 100644 (file)
@@ -35,7 +35,7 @@ class Undelete extends Maintenance {
        public function execute() {
                global $wgUser;
 
-               $user = $this->getOption( 'user', 'Command line script' );
+               $user = $this->getOption( 'user', false );
                $reason = $this->getOption( 'reason', '' );
                $pageName = $this->getArg();
 
@@ -43,7 +43,11 @@ class Undelete extends Maintenance {
                if ( !$title ) {
                        $this->error( "Invalid title", true );
                }
-               $wgUser = User::newFromName( $user );
+               if ( $user === false ) {
+                       $wgUser = User::newSystemUser( 'Command line script', array( 'steal' => true ) );
+               } else {
+                       $wgUser = User::newFromName( $user );
+               }
                if ( !$wgUser ) {
                        $this->error( "Invalid username", true );
                }
index 99ba3b8..f4ffbd0 100644 (file)
@@ -105,7 +105,9 @@ class UserOptions {
                return true;
        }
 
-       // Dumb stuff to run a mode.
+       /**
+        * Dumb stuff to run a mode.
+        */
        public function run() {
                if ( !$this->mReady ) {
                        return false;
@@ -116,11 +118,9 @@ class UserOptions {
                return true;
        }
 
-       #
-       # Modes.
-       #
-
-       /** List default options and their value */
+       /**
+        * List default options and their value
+        */
        private function LISTER() {
                $def = User::getDefaultOptions();
                ksort( $def );
@@ -133,7 +133,9 @@ class UserOptions {
                }
        }
 
-       /** List options usage */
+       /**
+        * List options usage
+        */
        private function USAGER() {
                $ret = array();
                $defaultOptions = User::getDefaultOptions();
@@ -186,7 +188,9 @@ class UserOptions {
                }
        }
 
-       /** Change our users options */
+       /**
+        * Change our users options
+        */
        private function CHANGER() {
                $this->warn();
 
@@ -242,10 +246,6 @@ class UserOptions {
                return $ret;
        }
 
-       #
-       # Helper methods
-       #
-
        public static function showUsageAndExit() {
                print <<<USAGE
 
index 0b56972..0d6a76c 100644 (file)
@@ -44,16 +44,17 @@ print Xml::openElement( 'OpenSearchDescription',
                'xmlns' => 'http://a9.com/-/spec/opensearch/1.1/',
                'xmlns:moz' => 'http://www.mozilla.org/2006/browser/search/' ) );
 
-// The spec says the ShortName must be no longer than 16 characters,
-// but 16 is *realllly* short. In practice, browsers don't appear to care
-// when we give them a longer string, so we're no longer attempting to trim.
-//
-// Note: ShortName and the <link title=""> need to match; they are used as
-// a key for identifying if the search engine has been added already, *and*
-// as the display name presented to the end-user.
-//
-// Behavior seems about the same between Firefox and IE 7/8 here.
-// 'Description' doesn't appear to be used by either.
+/* The spec says the ShortName must be no longer than 16 characters,
+ * but 16 is *realllly* short. In practice, browsers don't appear to care
+ * when we give them a longer string, so we're no longer attempting to trim.
+ *
+ * Note: ShortName and the <link title=""> need to match; they are used as
+ * a key for identifying if the search engine has been added already, *and*
+ * as the display name presented to the end-user.
+ *
+ * Behavior seems about the same between Firefox and IE 7/8 here.
+ * 'Description' doesn't appear to be used by either.
+ */
 $fullName = wfMessage( 'opensearch-desc' )->inContentLanguage()->text();
 print Xml::element( 'ShortName', null, $fullName );
 print Xml::element( 'Description', null, $fullName );
index d48a5e0..3ae7b78 100644 (file)
@@ -8,7 +8,7 @@
   "devDependencies": {
     "grunt": "0.4.5",
     "grunt-cli": "0.1.13",
-    "grunt-banana-checker": "0.3.0",
+    "grunt-banana-checker": "0.4.0",
     "grunt-contrib-copy": "0.8.1",
     "grunt-contrib-jshint": "0.11.3",
     "grunt-contrib-watch": "0.6.1",
index ccc7b42..376e582 100644 (file)
--- a/phpcs.xml
+++ b/phpcs.xml
@@ -1,9 +1,6 @@
 <?xml version="1.0"?>
 <ruleset name="MediaWiki">
-       <rule ref="vendor/mediawiki/mediawiki-codesniffer/MediaWiki">
-               <!-- Disable failing rules -->
-               <exclude name="MediaWiki.WhiteSpace.SpaceBeforeSingleLineComment.EmptyComment"/>
-       </rule>
+       <rule ref="vendor/mediawiki/mediawiki-codesniffer/MediaWiki" />
        <rule ref="MediaWiki.NamingConventions.PrefixedGlobalFunctions">
                <properties>
                        <property name="ignoreList" type="array" value="bfNormalizeTitleStrReplace,bfNormalizeTitleStrTr,cdbShowHelp,codepointToUtf8,compare_point,cssfilter,escapeSingleString,findAuxFile,findFiles,getEscapedProfileUrl,getFileCommentFromSourceWiki,getFileUserFromSourceWiki,hexSequenceToUtf8,mccGetHelp,mccShowUsage,mimeTypeMatch,moveToExternal,NothingFunction,NothingFunctionData,resolveStub,resolveStubs,showUsage,splitFilename,utf8ToCodepoint,utf8ToHexSequence" />
index c635f0e..fee1e7c 100644 (file)
@@ -1135,54 +1135,6 @@ return array(
                        'dom-level2-shim',
                        'mediawiki.api.upload',
                ),
-               'messages' => array(
-                       'api-error-badaccess-groups',
-                       'api-error-badtoken',
-                       'api-error-copyuploaddisabled',
-                       'api-error-duplicate',
-                       'api-error-duplicate-archive',
-                       'api-error-empty-file',
-                       'api-error-emptypage',
-                       'api-error-fetchfileerror',
-                       'api-error-fileexists-forbidden',
-                       'api-error-fileexists-shared-forbidden',
-                       'api-error-file-too-large',
-                       'api-error-filename-tooshort',
-                       'api-error-filetype-banned',
-                       'api-error-filetype-banned-type',
-                       'api-error-filetype-missing',
-                       'api-error-hookaborted',
-                       'api-error-http',
-                       'api-error-illegal-filename',
-                       'api-error-internal-error',
-                       'api-error-invalid-file-key',
-                       'api-error-missingparam',
-                       'api-error-missingresult',
-                       'api-error-mustbeloggedin',
-                       'api-error-mustbeposted',
-                       'api-error-noimageinfo',
-                       'api-error-nomodule',
-                       'api-error-ok-but-empty',
-                       'api-error-overwrite',
-                       'api-error-stashfailed',
-                       'api-error-publishfailed',
-                       'api-error-stasherror',
-                       'api-error-stashedfilenotfound',
-                       'api-error-stashpathinvalid',
-                       'api-error-stashfilestorage',
-                       'api-error-stashzerolength',
-                       'api-error-stashnotloggedin',
-                       'api-error-stashwrongowner',
-                       'api-error-stashnosuchfilekey',
-                       'api-error-timeout',
-                       'api-error-unclassified',
-                       'api-error-unknown-code',
-                       'api-error-unknown-error',
-                       'api-error-unknown-warning',
-                       'api-error-unknownerror',
-                       'api-error-uploaddisabled',
-                       'api-error-verification-error',
-               ),
        ),
        'mediawiki.ForeignUpload' => array(
                'scripts' => 'resources/src/mediawiki/mediawiki.ForeignUpload.js',
@@ -1223,20 +1175,65 @@ return array(
                        'mediawiki.jqueryMsg',
                ),
                'messages' => array(
-                       'upload-process-error',
-                       'upload-process-warning',
                        'upload-form-label-select-file',
                        'upload-form-label-infoform-title',
                        'upload-form-label-infoform-name',
                        'upload-form-label-infoform-description',
                        'upload-form-label-usage-title',
                        'upload-form-label-usage-filename',
+                       'api-error-unknownerror',
+                       'api-error-unknown-warning',
+                       'api-error-badaccess-groups',
+                       'api-error-badtoken',
+                       'api-error-copyuploaddisabled',
+                       'api-error-duplicate',
+                       'api-error-duplicate-archive',
+                       'api-error-empty-file',
+                       'api-error-emptypage',
+                       'api-error-fetchfileerror',
+                       'api-error-fileexists-forbidden',
+                       'api-error-fileexists-shared-forbidden',
+                       'api-error-file-too-large',
+                       'api-error-filename-tooshort',
+                       'api-error-filetype-banned',
+                       'api-error-filetype-banned-type',
+                       'api-error-filetype-missing',
+                       'api-error-hookaborted',
+                       'api-error-http',
+                       'api-error-illegal-filename',
+                       'api-error-internal-error',
+                       'api-error-invalid-file-key',
+                       'api-error-missingparam',
+                       'api-error-missingresult',
+                       'api-error-mustbeloggedin',
+                       'api-error-mustbeposted',
+                       'api-error-noimageinfo',
+                       'api-error-nomodule',
+                       'api-error-ok-but-empty',
+                       'api-error-overwrite',
+                       'api-error-stashfailed',
+                       'api-error-publishfailed',
+                       'api-error-stasherror',
+                       'api-error-stashedfilenotfound',
+                       'api-error-stashpathinvalid',
+                       'api-error-stashfilestorage',
+                       'api-error-stashzerolength',
+                       'api-error-stashnotloggedin',
+                       'api-error-stashwrongowner',
+                       'api-error-stashnosuchfilekey',
+                       'api-error-timeout',
+                       'api-error-unclassified',
+                       'api-error-unknown-code',
+                       'api-error-unknown-error',
+                       'api-error-uploaddisabled',
+                       'api-error-verification-error',
                        'fileexists',
                        'filepageexists',
                        'filename-bad-prefix',
                        'filename-thumb-name',
                        'badfilename',
                        'api-error-duplicate-archive',
+                       'api-error-blacklisted', // HACK
                ),
        ),
        'mediawiki.ForeignStructuredUpload.BookletLayout' => array(
@@ -1851,8 +1848,6 @@ return array(
        'mediawiki.legacy.commonPrint' => array(
                'position' => 'top',
                'styles' => array(
-                       // @todo: Remove mediawiki.page.gallery when cache has cleared
-                       'resources/src/mediawiki/page/gallery-print.css' => array( 'media' => 'print' ),
                        'resources/src/mediawiki.legacy/commonPrint.css' => array( 'media' => 'print' )
                ),
        ),
@@ -1865,8 +1860,6 @@ return array(
        'mediawiki.legacy.shared' => array(
                'position' => 'top',
                'styles' => array(
-                       // @todo: Remove when mediawiki.page.gallery in cached html.
-                       'resources/src/mediawiki/page/gallery.css',
                        'resources/src/mediawiki.legacy/shared.css' => array( 'media' => 'screen' )
                ),
        ),
index 4efb02a..d3fad8d 100644 (file)
@@ -22,6 +22,8 @@
        "ooui-dialog-process-dismiss": "Lukk",
        "ooui-dialog-process-retry": "Prøv igjen",
        "ooui-dialog-process-continue": "Fortsett",
+       "ooui-selectfile-button-select": "Velg en fil",
        "ooui-selectfile-not-supported": "Filvalg er ikke støttet",
-       "ooui-selectfile-placeholder": "Ingen fil er valgt"
+       "ooui-selectfile-placeholder": "Ingen fil er valgt",
+       "ooui-selectfile-dragdrop-placeholder": "Slipp fil her"
 }
index 0661b3f..a69d76f 100644 (file)
@@ -10,6 +10,7 @@
        },
        "ooui-outline-control-move-down": "ਨੀਚੇ ਲੈਕੇ ਜਾਓ",
        "ooui-outline-control-move-up": "ਉੱਤੇ ਲੈਕੇ ਜਾਓ",
+       "ooui-outline-control-remove": "ਆਈਟਮ ਹਟਾਓ",
        "ooui-toolbar-more": "ਹੋਰ",
        "ooui-toolgroup-expand": "ਹੋਰ",
        "ooui-toolgroup-collapse": "ਥੋੜ੍ਹੇ",
@@ -18,5 +19,9 @@
        "ooui-dialog-process-error": "ਕੁਝ ਗਲਤ ਹੋ ਗਿਆ",
        "ooui-dialog-process-dismiss": "ਰੱਦ ਕਰੋ",
        "ooui-dialog-process-retry": "ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ",
-       "ooui-dialog-process-continue": "ਜਾਰੀ ਰੱਖੋ"
+       "ooui-dialog-process-continue": "ਜਾਰੀ ਰੱਖੋ",
+       "ooui-selectfile-button-select": "ਫ਼ਾਈਲ ਚੁਣੋ",
+       "ooui-selectfile-not-supported": "ਚੁਣੀ ਗਈ ਫ਼ਾਈਲ ਖੋਲੀ ਨਹੀਂ ਜਾ ਸਕਦੀ",
+       "ooui-selectfile-placeholder": "ਕੋਈ ਫ਼ਾਈਲ ਚੁਣੀ ਨਹੀਂ ਗਈ",
+       "ooui-selectfile-dragdrop-placeholder": "ਫ਼ਾਈਲ ਇੱਥੇ ਸਿੱਟੋ"
 }
index 6fb7be6..5012934 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.12.11
+ * OOjs UI v0.12.12
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2015 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2015-10-07T20:48:23Z
+ * Date: 2015-10-13T20:38:26Z
  */
 @-webkit-keyframes oo-ui-progressBarWidget-slide {
        from {
        width: 100%;
 }
 .oo-ui-capsuleMultiSelectWidget-handle {
-       background: #ffffff;
+       background-color: #ffffff;
        cursor: text;
        min-height: 2.4em;
        margin-right: 0.5em;
index d0c8e51..dab3c78 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.12.11
+ * OOjs UI v0.12.12
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2015 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2015-10-07T20:48:15Z
+ * Date: 2015-10-13T20:38:18Z
  */
 /**
  * @class
index 4b65ad4..a19ebea 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.12.11
+ * OOjs UI v0.12.12
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2015 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2015-10-07T20:48:23Z
+ * Date: 2015-10-13T20:38:26Z
  */
 @-webkit-keyframes oo-ui-progressBarWidget-slide {
        from {
        min-width: 1em;
        border-radius: 2px;
        position: relative;
-       -webkit-transition: background 100ms ease, color 100ms ease, box-shadow 100ms ease;
-          -moz-transition: background 100ms ease, color 100ms ease, box-shadow 100ms ease;
-           -ms-transition: background 100ms ease, color 100ms ease, box-shadow 100ms ease;
-            -o-transition: background 100ms ease, color 100ms ease, box-shadow 100ms ease;
-               transition: background 100ms ease, color 100ms ease, box-shadow 100ms ease;
+       -webkit-transition: background 100ms ease, color 100ms ease, border-color 100ms ease, box-shadow 100ms ease;
+          -moz-transition: background 100ms ease, color 100ms ease, border-color 100ms ease, box-shadow 100ms ease;
+           -ms-transition: background 100ms ease, color 100ms ease, border-color 100ms ease, box-shadow 100ms ease;
+            -o-transition: background 100ms ease, color 100ms ease, border-color 100ms ease, box-shadow 100ms ease;
+               transition: background 100ms ease, color 100ms ease, border-color 100ms ease, box-shadow 100ms ease;
 }
 .oo-ui-buttonElement-framed > .oo-ui-buttonElement-button:hover,
 .oo-ui-buttonElement-framed > .oo-ui-buttonElement-button:focus {
        opacity: 0;
        z-index: 1;
        position: relative;
+       cursor: pointer;
        margin: 0;
        width: 1.6em;
        height: 1.6em;
        max-width: none;
 }
 .oo-ui-checkboxInputWidget input[type="checkbox"] + span {
-       cursor: pointer;
        -webkit-transition: background-size 200ms cubic-bezier(0.175, 0.885, 0.32, 1.275);
           -moz-transition: background-size 200ms cubic-bezier(0.175, 0.885, 0.32, 1.275);
            -ms-transition: background-size 200ms cubic-bezier(0.175, 0.885, 0.32, 1.275);
        opacity: 0;
        z-index: 1;
        position: relative;
+       cursor: pointer;
        margin: 0;
        width: 1.6em;
        height: 1.6em;
        max-width: none;
 }
 .oo-ui-radioInputWidget input[type="radio"] + span {
-       cursor: pointer;
        -webkit-transition: background-size 200ms cubic-bezier(0.175, 0.885, 0.32, 1.275);
           -moz-transition: background-size 200ms cubic-bezier(0.175, 0.885, 0.32, 1.275);
            -ms-transition: background-size 200ms cubic-bezier(0.175, 0.885, 0.32, 1.275);
        margin-right: 0;
 }
 .oo-ui-dropdownWidget-handle {
-       padding: 0.3em 0;
+       padding: 0.5em 0;
        height: 2.275em;
        border: 1px solid #cccccc;
        border-radius: 0.1em;
        width: 100%;
 }
 .oo-ui-capsuleMultiSelectWidget-handle {
-       background: #ffffff;
+       background-color: #ffffff;
        cursor: text;
        min-height: 2.4em;
        margin-right: 0.5em;
index 60acdd2..e6344f2 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.12.11
+ * OOjs UI v0.12.12
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2015 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2015-10-07T20:48:15Z
+ * Date: 2015-10-13T20:38:18Z
  */
 /**
  * @class
@@ -30,7 +30,7 @@ OO.inheritClass( OO.ui.MediaWikiTheme, OO.ui.Theme );
  */
 OO.ui.MediaWikiTheme.prototype.getElementClasses = function ( element ) {
        // Parent method
-       var variant,
+       var variant, isFramed, isActive,
                variants = {
                        warning: false,
                        invert: false,
@@ -39,13 +39,13 @@ OO.ui.MediaWikiTheme.prototype.getElementClasses = function ( element ) {
                        destructive: false
                },
                // Parent method
-               classes = OO.ui.MediaWikiTheme.parent.prototype.getElementClasses.call( this, element ),
-               isFramed;
+               classes = OO.ui.MediaWikiTheme.parent.prototype.getElementClasses.call( this, element );
 
        if ( element.supports( [ 'hasFlag' ] ) ) {
                isFramed = element.supports( [ 'isFramed' ] ) && element.isFramed();
+               isActive = element.supports( [ 'isActive' ] ) && element.isActive();
                if (
-                       ( isFramed && ( element.isDisabled() || element.hasFlag( 'primary' ) ) ) ||
+                       ( isFramed && ( isActive || element.isDisabled() || element.hasFlag( 'primary' ) ) ) ||
                        ( !isFramed && element.hasFlag( 'primary' ) )
                ) {
                        variants.invert = true;
index e433e91..aeff69e 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.12.11
+ * OOjs UI v0.12.12
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2015 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2015-10-07T20:48:15Z
+ * Date: 2015-10-13T20:38:18Z
  */
 ( function ( OO ) {
 
@@ -1105,7 +1105,8 @@ OO.ui.ActionSet.prototype.organize = function () {
  * @cfg {Array} [content] An array of content elements to append (after #text).
  *  Strings will be html-escaped; use an OO.ui.HtmlSnippet to append raw HTML.
  *  Instances of OO.ui.Element will have their $element appended.
- * @cfg {jQuery} [$content] Content elements to append (after #text)
+ * @cfg {jQuery} [$content] Content elements to append (after #text).
+ * @cfg {jQuery} [$element] Wrapper element. Defaults to a new element with #getTagName.
  * @cfg {Mixed} [data] Custom data of any type or combination of types (e.g., string, number, array, object).
  *  Data can also be specified with the #setData method.
  */
@@ -4233,7 +4234,7 @@ OO.initClass( OO.ui.Theme );
  * @param {OO.ui.Element} element Element for which to get classes
  * @return {Object.<string,string[]>} Categorized class names with `on` and `off` lists
  */
-OO.ui.Theme.prototype.getElementClasses = function ( /* element */ ) {
+OO.ui.Theme.prototype.getElementClasses = function () {
        return { on: [], off: [] };
 };
 
@@ -4625,20 +4626,30 @@ OO.ui.mixin.ButtonElement.prototype.toggleFramed = function ( framed ) {
 };
 
 /**
- * Set the button to its 'active' state.
+ * Set the button's active state.
  *
  * The active state occurs when a {@link OO.ui.ButtonOptionWidget ButtonOptionWidget} or
  * a {@link OO.ui.ToggleButtonWidget ToggleButtonWidget} is pressed. This method does nothing
  * for other button types.
  *
- * @param {boolean} [value] Make button active
+ * @param {boolean} value Make button active
  * @chainable
  */
 OO.ui.mixin.ButtonElement.prototype.setActive = function ( value ) {
-       this.$element.toggleClass( 'oo-ui-buttonElement-active', !!value );
+       this.active = !!value;
+       this.$element.toggleClass( 'oo-ui-buttonElement-active', this.active );
        return this;
 };
 
+/**
+ * Check if the button is active
+ *
+ * @return {boolean} The button is active
+ */
+OO.ui.mixin.ButtonElement.prototype.isActive = function () {
+       return this.active;
+};
+
 /**
  * Any OOjs UI widget that contains other widgets (such as {@link OO.ui.ButtonWidget buttons} or
  * {@link OO.ui.OptionWidget options}) mixes in GroupElement. Adding, removing, and clearing
@@ -13455,6 +13466,9 @@ OO.ui.CapsuleMultiSelectWidget.prototype.onInputFocus = function () {
  * @param {jQuery.Event} event
  */
 OO.ui.CapsuleMultiSelectWidget.prototype.onInputBlur = function () {
+       if ( this.allowArbitrary && this.$input.val().trim() !== '' ) {
+               this.addItemsFromData( [ this.$input.val() ] );
+       }
        this.clearInput();
 };
 
@@ -14098,6 +14112,18 @@ OO.ui.SelectFileWidget.prototype.setValue = function ( file ) {
        }
 };
 
+/**
+ * Focus the widget.
+ *
+ * Focusses the select file button.
+ *
+ * @chainable
+ */
+OO.ui.SelectFileWidget.prototype.focus = function () {
+       this.selectButton.$button[ 0 ].focus();
+       return this;
+};
+
 /**
  * Update the user interface when a file is selected or unselected
  *
index 41c555b..af5a97d 100644 (file)
@@ -67,7 +67,7 @@
 
                        opts = $.extend( {}, defaults, opts );
 
-                       var $spinner = $( '<div>', { 'class': 'mw-spinner', title: '...' } );
+                       var $spinner = $( '<div>' ).addClass( 'mw-spinner' ).attr( 'title', '...' );
                        if ( opts.id !== undefined ) {
                                $spinner.attr( 'id', 'mw-spinner-' + opts.id );
                        }
index 0eefae6..f8216c9 100644 (file)
 
        function detectParserForColumn( table, rows, column ) {
                var l = parsers.length,
+                       config = $( table ).data( 'tablesorter' ).config,
                        cellIndex,
                        nodeValue,
                        // Start with 1 because 0 is the fallback parser
                        needed = ( rows.length > 4 ) ? 5 : rows.length;
 
                while ( i < l ) {
-                       if ( rows[ rowIndex ] ) {
+                       // if this is a child row, continue to the next row (as buildCache())
+                       if ( rows[ rowIndex ] && !$( rows[ rowIndex ] ).hasClass( config.cssChildRow ) ) {
                                if ( rowIndex !== lastRowIndex ) {
                                        lastRowIndex = rowIndex;
                                        cellIndex = $( rows[ rowIndex ] ).data( 'columnToCell' )[ column ];
                                new RegExp( /(https?|ftp|file):\/\// )
                        ],
                        isoDate: [
-                               new RegExp( /^([-+]?\d{1,4})-([01]\d)-([0-3]\d)([T\s]((([01]\d|2[0-3])(:?[0-5]\d)?|24:?00)?(:?([0-5]\d))?([.,]\d+)?)([zZ]|([\+-])([01]\d|2[0-3]):?([0-5]\d)?)?)?/ ),
+                               new RegExp( /^([-+]?\d{1,4})-([01]\d)-([0-3]\d)([T\s]((([01]\d|2[0-3])(:?[0-5]\d)?|24:?00)?(:?([0-5]\d|60))?([.,]\d+)?)([zZ]|([\+-])([01]\d|2[0-3]):?([0-5]\d)?)?)?/ ),
                                new RegExp( /^([-+]?\d{1,4})-([01]\d)-([0-3]\d)/ )
                        ],
                        usLongDate: [
                                        return $.tablesorter.formatFloat( 0 );
                                }
                        } else {
-                               isodate = new Date( $.trim( s ) );
+                               matches = s.match( ts.rgx.isoDate[ 0 ] );
+                               if ( matches ) {
+                                       isodate = new Date( $.trim( matches[ 0 ] ) );
+                               } else {
+                                       return $.tablesorter.formatFloat( 0 );
+                               }
                        }
                        return $.tablesorter.formatFloat( ( isodate !== undefined ) ? isodate.getTime() : 0 );
                },
index 25b5acc..b1a63b0 100644 (file)
                $row = $( '<tr class="mw-metadata-show-hide-extended"></tr>' );
                $col = $( '<td colspan="2"></td>' );
 
-               $link = $( '<a>', {
-                       text: showText,
-                       href: '#'
-               } ).click( function () {
+               $link = $( '<a>' )
+               .text( showText )
+               .attr( 'href', '#' )
+               .click( function () {
                        if ( $table.hasClass( 'collapsed' ) ) {
                                $( this ).text( hideText );
                        } else {
index f8143fa..59f5592 100644 (file)
@@ -284,15 +284,11 @@ input#wpSummary {
 }
 
 /**
- * Convenience links to edit block, delete and protect reasons
- * and upload licenses
+ * Convenience links to edit delete and protect reasons
  */
-p.mw-ipb-conveniencelinks,
 p.mw-protect-editreasons,
 p.mw-filedelete-editreasons,
-p.mw-delete-editreasons,
-p.mw-revdel-editreasons,
-p.mw-upload-editlicenses {
+p.mw-delete-editreasons {
        font-size: 90%;
        text-align: right;
 }
@@ -318,7 +314,7 @@ p.mw-upload-editlicenses {
        border: 1px dashed #aaa;
 }
 
-.mw-history-revisionactions, #mw-fileduplicatesearch-icon {
+.mw-history-revisionactions {
        float: right;
 }
 
index 60544d3..7a15a76 100644 (file)
@@ -43,6 +43,12 @@ ul.mw-allpages-chunk li {
        font-style: italic;
 }
 
+/* Special:Block */
+p.mw-ipb-conveniencelinks {
+       font-size: 90%;
+       text-align: right;
+}
+
 /* Special:BlockList */
 table.mw-blocklist span.mw-usertoollinks,
 span.mw-blocklist-actions {
@@ -66,6 +72,11 @@ td#mw-emailuser-recipient {
        font-weight: bold;
 }
 
+/* Special:FileDuplicateSearch */
+#mw-fileduplicatesearch-icon {
+       float: right;
+}
+
 /* Special:ListGroupRights */
 table.mw-listgrouprights-table tr {
        vertical-align: top;
@@ -87,6 +98,12 @@ td#mw-prefixindex-nav-form {
        text-align: right;
 }
 
+/* Special:RevisionDelete */
+p.mw-revdel-editreasons {
+       font-size: 90%;
+       text-align: right;
+}
+
 /* Special:Specialpages */
 .mw-specialpagerestricted {
        font-weight: bold;
@@ -124,6 +141,12 @@ table.mw-userrights-groups * th {
        padding-right: 1.5em;
 }
 
+/* Special:Upload */
+p.mw-upload-editlicenses {
+       font-size: 90%;
+       text-align: right;
+}
+
 /* Special:Contributions */
 .mw-contributions-form select {
        vertical-align: middle;
index e40caaa..89fcc0b 100644 (file)
         *
         *     selector.setSearchType( [ mw.widgets.CategorySelector.SearchType.SubCategories ] );
         *
-        *
         * @class mw.widgets.CategorySelector
         * @uses mw.Api
         * @extends OO.ui.CapsuleMultiSelectWidget
+        * @mixins OO.ui.mixin.PendingElement
         *
         * @constructor
         * @param {Object} [config] Configuration options
                        allowArbitrary: true
                } ) );
 
+               // Mixin constructors
+               OO.ui.mixin.PendingElement.call( this, $.extend( {}, config, { $pending: this.$handle } ) );
+
                // Event handler to call the autocomplete methods
                this.$input.on( 'change input cut paste', OO.ui.debounce( this.updateMenuItems.bind( this ), 100 ) );
 
                // Initialize
                this.api = new mw.Api();
-
        }
 
        /* Setup */
 
        OO.inheritClass( CategorySelector, OO.ui.CapsuleMultiSelectWidget );
+       OO.mixinClass( CategorySelector, OO.ui.mixin.PendingElement );
        CSP = CategorySelector.prototype;
 
        /* Methods */
                        var existingItems, filteredItems,
                                menu = this.getMenu();
 
+                       // Never show the menu if the input lost focus in the meantime
+                       if ( !this.$input.is( ':focus' ) ) {
+                               return;
+                       }
+
                        // Array of strings of the data of OO.ui.MenuOptionsWidgets
                        existingItems = menu.getItems().map( function ( item ) {
                                return item.data;
                }.bind( this ) );
        };
 
+       /**
+        * @inheritdoc
+        */
+       CSP.clearInput = function () {
+               CategorySelector.parent.prototype.clearInput.call( this );
+               // Abort all pending requests, we won't need their results
+               this.api.abort();
+       };
+
        /**
         * Searches for categories based on the input.
         *
                        promises = [],
                        deferred = new $.Deferred();
 
+               if ( $.trim( input ) === '' ) {
+                       deferred.resolve( [] );
+                       return deferred.promise();
+               }
+
+               // Abort all pending requests, we won't need their results
+               this.api.abort();
                for ( i = 0; i < this.searchTypes.length; i++ ) {
                        promises.push( this.searchCategories( input, this.searchTypes[ i ] ) );
                }
 
+               this.pushPending();
+
                $.when.apply( $, promises ).done( function () {
                        var categories, categoryNames,
                                allData = [],
 
                        deferred.resolve( categoryNames );
 
-               } );
+               } ).always( this.popPending.bind( this ) );
 
                return deferred.promise();
        };
                                } ).done( function ( res ) {
                                        var categories = res[ 1 ];
                                        deferred.resolve( categories );
-                               } );
+                               } ).fail( deferred.reject.bind( deferred ) );
                                break;
 
                        case CategorySelector.SearchType.InternalSearch:
                                                return page.title;
                                        } );
                                        deferred.resolve( categories );
-                               } );
+                               } ).fail( deferred.reject.bind( deferred ) );
                                break;
 
                        case CategorySelector.SearchType.Exists:
                                        }
 
                                        deferred.resolve( categories );
-                               } );
+                               } ).fail( deferred.reject.bind( deferred ) );
                                break;
 
                        case CategorySelector.SearchType.SubCategories:
                                                return category.title;
                                        } );
                                        deferred.resolve( categories );
-                               } );
+                               } ).fail( deferred.reject.bind( deferred ) );
                                break;
 
                        case CategorySelector.SearchType.ParentCategories:
                                        }
 
                                        deferred.resolve( categories );
-                               } );
+                               } ).fail( deferred.reject.bind( deferred ) );
                                break;
 
                        default:
index c37c723..0e2546f 100644 (file)
         * @param {OO.ui.OptionWidget} item Chosen item
         */
        mw.widgets.TitleSearchWidget.prototype.onTitleSearchResultsChoose = function ( item ) {
-               // TOOD: Pressing enter can incorrectly trigger 'choose' with null.
-               // Remove this check when oojs-ui 0.12.10 lands.
-               if ( item ) {
-                       this.getQuery().setValue( item.getData() );
-               }
+               this.getQuery().setValue( item.getData() );
        };
 
        /**
index 43b20b8..79aba77 100644 (file)
                options.ajax = $.extend( {}, defaultOptions.ajax, options.ajax );
 
                this.defaults = options;
+               this.requests = [];
        };
 
        mw.Api.prototype = {
+               /**
+                * Abort all unfinished requests issued by this Api object.
+                *
+                * @method
+                */
+               abort: function () {
+                       $.each( this.requests, function ( index, request ) {
+                               request.abort();
+                       } );
+               },
 
                /**
                 * Perform API get request
                                        }
                                } );
 
+                       this.requests.push( xhr );
                        // Return the Promise
                        return apiDeferred.promise( { abort: xhr.abort } ).fail( function ( code, details ) {
                                if ( !( code === 'http' && details && details.textStatus === 'abort' ) ) {
index 4d6b34c..614c001 100644 (file)
                return nonce++;
        }
 
+       /**
+        * @private
+        * Given a non-empty object, return one of its keys.
+        *
+        * @param {Object} obj
+        * @return {string}
+        */
+       function getFirstKey( obj ) {
+               for ( var key in obj ) {
+                       if ( obj.hasOwnProperty( key ) ) {
+                               return key;
+                       }
+               }
+       }
+
        /**
         * @private
         * Get new iframe object for an upload.
                        }
 
                        if ( !file ) {
-                               return $.Deferred().reject( 'No file' );
+                               throw new Error( 'No file' );
                        }
 
                        canUseFormData = formDataAvailable() && file instanceof window.File;
 
                        if ( !isFileInput && !canUseFormData ) {
-                               return $.Deferred().reject( 'Unsupported argument type passed to mw.Api.upload' );
+                               throw new Error( 'Unsupported argument type passed to mw.Api.upload' );
                        }
 
                        if ( canUseFormData ) {
                        $iframe.one( 'load', function () {
                                $iframe.one( 'load', function () {
                                        var result = processIframeResult( iframe );
+                                       deferred.notify( 1 );
 
                                        if ( !result ) {
-                                               deferred.reject( 'No response from API on upload attempt.' );
-                                       } else if ( result.error || result.warnings ) {
-                                               if ( result.error && result.error.code === 'badtoken' ) {
+                                               deferred.reject( 'ok-but-empty', 'No response from API on upload attempt.' );
+                                       } else if ( result.error ) {
+                                               if ( result.error.code === 'badtoken' ) {
                                                        api.badToken( 'edit' );
                                                }
 
-                                               deferred.reject( result.error || result.warnings );
+                                               deferred.reject( result.error.code, result );
+                                       } else if ( result.upload && result.upload.warnings ) {
+                                               deferred.reject( getFirstKey( result.upload.warnings ), result );
                                        } else {
-                                               deferred.notify( 1 );
                                                deferred.resolve( result );
                                        }
                                } );
                        } );
 
                        $iframe.error( function ( error ) {
-                               deferred.reject( 'iframe failed to load: ' + error );
+                               deferred.reject( 'http', error );
                        } );
 
                        $iframe.prop( 'src', 'about:blank' ).hide();
                        } );
 
                        if ( !data.filename && !data.stash ) {
-                               return $.Deferred().reject( 'Filename not included in file data.' );
+                               throw new Error( 'Filename not included in file data.' );
                        }
 
                        if ( this.needToken() ) {
                        data.file = file;
 
                        if ( !data.filename && !data.stash ) {
-                               return $.Deferred().reject( 'Filename not included in file data.' );
+                               throw new Error( 'Filename not included in file data.' );
                        }
 
                        // Use this.postWithEditToken() or this.post()
                                }
                        } )
                                .done( function ( result ) {
-                                       if ( result.error || result.warnings ) {
-                                               deferred.reject( result.error || result.warnings );
+                                       deferred.notify( 1 );
+                                       if ( result.upload && result.upload.warnings ) {
+                                               deferred.reject( getFirstKey( result.upload.warnings ), result );
                                        } else {
-                                               deferred.notify( 1 );
                                                deferred.resolve( result );
                                        }
                                } )
-                               .fail( function ( result ) {
-                                       deferred.reject( result );
+                               .fail( function ( errorCode, result ) {
+                                       deferred.notify( 1 );
+                                       deferred.reject( errorCode, result );
                                } );
 
                        return deferred.promise();
                                api = this;
 
                        if ( !data.filename ) {
-                               return $.Deferred().reject( 'Filename not included in file data.' );
+                               throw new Error( 'Filename not included in file data.' );
                        }
 
                        function finishUpload( moreData ) {
                                data.format = 'json';
 
                                if ( !data.filename ) {
-                                       return $.Deferred().reject( 'Filename not included in file data.' );
+                                       throw new Error( 'Filename not included in file data.' );
                                }
 
                                return api.postWithEditToken( data ).then( function ( result ) {
-                                       if ( result.upload && ( result.upload.error || result.upload.warnings ) ) {
-                                               return $.Deferred().reject( result.upload.error || result.upload.warnings ).promise();
+                                       if ( result.upload && result.upload.warnings ) {
+                                               return $.Deferred().reject( getFirstKey( result.upload.warnings ), result ).promise();
                                        }
                                        return result;
                                } );
                        }
 
-                       return this.upload( file, { stash: true, filename: data.filename } ).then( function ( result ) {
-                               if ( result && result.upload && result.upload.filekey ) {
+                       return this.upload( file, { stash: true, filename: data.filename } ).then(
+                               function ( result ) {
                                        filekey = result.upload.filekey;
-                               } else if ( result && ( result.error || result.warning ) ) {
-                                       return $.Deferred().reject( result );
+                                       return finishUpload;
+                               },
+                               function ( errorCode, result ) {
+                                       if ( result && result.upload && result.upload.filekey ) {
+                                               // Ignore any warnings if 'filekey' was returned, that's all we care about
+                                               filekey = result.upload.filekey;
+                                               return $.Deferred().resolve( finishUpload );
+                                       }
+                                       return $.Deferred().reject( errorCode, result );
                                }
-
-                               return finishUpload;
-                       } );
+                       );
                },
 
                needToken: function () {
index c8877fd..5a7e62e 100644 (file)
                                label: mw.msg( 'upload-form-label-infoform-name' ),
                                align: 'top'
                        } ),
-                       new OO.ui.FieldLayout( this.categoriesWidget, {
-                               label: mw.msg( 'foreign-structured-upload-form-label-infoform-categories' ),
-                               align: 'top'
-                       } ),
                        new OO.ui.FieldLayout( this.descriptionWidget, {
                                label: mw.msg( 'upload-form-label-infoform-description' ),
                                align: 'top'
                        } ),
+                       new OO.ui.FieldLayout( this.categoriesWidget, {
+                               label: mw.msg( 'foreign-structured-upload-form-label-infoform-categories' ),
+                               align: 'top'
+                       } ),
                        new OO.ui.FieldLayout( this.dateWidget, {
                                label: mw.msg( 'foreign-structured-upload-form-label-infoform-date' ),
                                align: 'top'
index d270916..dd28ddd 100644 (file)
@@ -77,7 +77,7 @@
                        '\n|date=' +
                        this.getDate() +
                        '\n|source=' +
-                       this.getUser() +
+                       this.getSource() +
                        '\n|author=' +
                        this.getUser() +
                        '\n}}\n\n' +
        };
 
        /**
-        * Gets the wikitext for the license of the upload. Abstract for now.
+        * Gets the wikitext for the license of the upload.
         *
         * @private
         * @return {string}
         */
        ForeignStructuredUpload.prototype.getLicense = function () {
-               return '';
+               // Make sure this matches the messages for different targets in
+               // mw.ForeignStructuredUpload.BookletLayout.prototype.renderUploadForm
+               return this.target === 'shared' ? '{{self|cc-by-sa-4.0}}' : '';
+       };
+
+       /**
+        * Get the source. This should be some sort of localised text for "Own work".
+        *
+        * @private
+        * @return {string}
+        */
+       ForeignStructuredUpload.prototype.getSource = function () {
+               return '{{own}}';
        };
 
        /**
index 7b3a751..61fb59f 100644 (file)
                // actual API call methods to wait for the apiPromise to resolve
                // before continuing.
                mw.Upload.call( this, null );
+
+               if ( this.target !== 'local' ) {
+                       // Keep these untranslated. We don't know the content language of the foreign wiki, best to
+                       // stick to English in the text.
+                       this.setComment( 'Cross-wiki upload from ' + location.host );
+               }
        }
 
        OO.inheritClass( ForeignUpload, mw.Upload );
index c4b8c09..7b307ee 100644 (file)
                        deferred.resolve();
                        layout.emit( 'fileUploaded' );
                }, function () {
-                       // These errors will be thrown while the user is on the info page
-                       if ( layout.upload.getState() === mw.Upload.State.ERROR ) {
-                               deferred.reject( new OO.ui.Error( layout.upload.getStateDetails(), {
-                                       recoverable: false
-                               } ) );
-                               return false;
-                       }
-                       if ( layout.upload.getState() === mw.Upload.State.WARNING ) {
-                               deferred.reject( new OO.ui.Error( layout.upload.getStateDetails(), {
-                                       recoverable: false
-                               } ) );
-                               return false;
-                       }
+                       // These errors will be thrown while the user is on the info page.
+                       // Pretty sure it's impossible to get a warning other than 'stashfailed' here, which should
+                       // really be an error...
+                       var errorMessage = layout.getErrorMessageForStateDetails();
+                       deferred.reject( errorMessage );
                } );
 
                // If there is an error in uploading, come back to the upload page
                                deferred.resolve();
                                layout.emit( 'fileSaved' );
                        }, function () {
-                               var stateDetails = layout.upload.getStateDetails();
-
-                               if ( layout.upload.getState() === mw.Upload.State.ERROR ) {
-                                       deferred.reject( new OO.ui.Error( stateDetails, {
-                                               recoverable: false
-                                       } ) );
-                                       return false;
-                               }
-
-                               if ( layout.upload.getState() === mw.Upload.State.WARNING ) {
-                                       // We could get more than one of these errors, these are in order
-                                       // of importance. For example fixing the thumbnail like file name
-                                       // won't help the fact that the file already exists.
-                                       if ( stateDetails.exists !== undefined ) {
-                                               deferred.reject( new OO.ui.Error(
-                                                       $( '<p>' ).html(
-                                                               mw.message( 'filepageexists', stateDetails.exists ).parse()
-                                                       ),
-                                                       { recoverable: false }
-                                               ) );
-                                       } else if ( stateDetails.duplicate !== undefined ) {
-                                               deferred.reject( new OO.ui.Error(
-                                                       $( '<p>' ).html(
-                                                               mw.message( 'fileexists', stateDetails.duplicate[ 0 ] ).parse()
-                                                       ),
-                                                       { recoverable: false }
-                                               ) );
-                                       } else if ( stateDetails[ 'thumb-name' ] !== undefined ) {
-                                               deferred.reject( new OO.ui.Error(
-                                                       $( '<p>' ).html(
-                                                               mw.message( 'filename-thumb-name' ).parse()
-                                                       ),
-                                                       { recoverable: false }
-                                               ) );
-                                       } else if ( stateDetails[ 'bad-prefix' ] !== undefined ) {
-                                               deferred.reject( new OO.ui.Error(
-                                                       $( '<p>' ).html(
-                                                               mw.message( 'filename-bad-prefix', stateDetails[ 'bad-prefix' ] ).parse()
-                                                       ),
-                                                       { recoverable: false }
-                                               ) );
-                                       } else if ( stateDetails[ 'duplicate-archive' ] !== undefined ) {
-                                               deferred.reject( new OO.ui.Error(
-                                                       $( '<p>' ).html(
-                                                               mw.message( 'api-error-duplicate-archive', stateDetails[ 'duplicate-archive' ] ).parse()
-                                                       ),
-                                                       { recoverable: false }
-                                               ) );
-                                       } else if ( stateDetails.badfilename !== undefined ) {
-                                               // Change the name if the current name isn't acceptable
-                                               layout.filenameWidget.setValue( stateDetails.badfilename );
-                                               deferred.reject( new OO.ui.Error(
-                                                       $( '<p>' ).html(
-                                                               mw.message( 'badfilename', stateDetails.badfilename ).parse()
-                                                       )
-                                               ) );
-                                       } else {
-                                               deferred.reject( new OO.ui.Error(
-                                                       $( '<p>' ).html(
-                                                               // Let's get all the help we can if we can't pin point the error
-                                                               mw.message( 'api-error-unknown-warning', JSON.stringify( stateDetails ) ).parse()
-                                                       ),
-                                                       { recoverable: false }
-                                               ) );
-                                       }
-
-                                       return false;
-                               }
+                               var errorMessage = layout.getErrorMessageForStateDetails();
+                               deferred.reject( errorMessage );
                        } );
                } );
 
                return deferred.promise();
        };
 
+       /**
+        * Get an error message (as OO.ui.Error object) that should be displayed to the user for current
+        * state and state details.
+        *
+        * @protected
+        * @returns {OO.ui.Error} Error to display for given state and details.
+        */
+       mw.Upload.BookletLayout.prototype.getErrorMessageForStateDetails = function () {
+               var message,
+                       state = this.upload.getState(),
+                       stateDetails = this.upload.getStateDetails(),
+                       error = stateDetails.error,
+                       warnings = stateDetails.upload && stateDetails.upload.warnings;
+
+               if ( state === mw.Upload.State.ERROR ) {
+                       // HACK We should either have a hook here to allow TitleBlacklist to handle this, or just have
+                       // TitleBlacklist produce sane error messages that can be displayed without arcane knowledge
+                       if ( error.info === 'TitleBlacklist prevents this title from being created' ) {
+                               // HACK Apparently the only reliable way to determine whether TitleBlacklist was involved
+                               return new OO.ui.Error(
+                                       $( '<p>' ).html(
+                                               // HACK TitleBlacklist doesn't have a sensible message, this one is from UploadWizard
+                                               mw.message( 'api-error-blacklisted' ).parse()
+                                       ),
+                                       { recoverable: false }
+                               );
+                       }
+
+                       message = mw.message( 'api-error-' + error.code );
+                       if ( !message.exists() ) {
+                               message = mw.message( 'api-error-unknownerror', JSON.stringify( stateDetails ) );
+                       }
+                       return new OO.ui.Error(
+                               $( '<p>' ).html(
+                                       message.parse()
+                               ),
+                               { recoverable: false }
+                       );
+               }
+
+               if ( state === mw.Upload.State.WARNING ) {
+                       // We could get more than one of these errors, these are in order
+                       // of importance. For example fixing the thumbnail like file name
+                       // won't help the fact that the file already exists.
+                       if ( warnings.stashfailed !== undefined ) {
+                               return new OO.ui.Error(
+                                       $( '<p>' ).html(
+                                               mw.message( 'api-error-stashfailed' ).parse()
+                                       ),
+                                       { recoverable: false }
+                               );
+                       } else if ( warnings.exists !== undefined ) {
+                               return new OO.ui.Error(
+                                       $( '<p>' ).html(
+                                               mw.message( 'fileexists', 'File:' + warnings.exists ).parse()
+                                       ),
+                                       { recoverable: false }
+                               );
+                       } else if ( warnings[ 'page-exists' ] !== undefined ) {
+                               return new OO.ui.Error(
+                                       $( '<p>' ).html(
+                                               mw.message( 'filepageexists', 'File:' + warnings[ 'page-exists' ] ).parse()
+                                       ),
+                                       { recoverable: false }
+                               );
+                       } else if ( warnings.duplicate !== undefined ) {
+                               return new OO.ui.Error(
+                                       $( '<p>' ).html(
+                                               mw.message( 'api-error-duplicate', warnings.duplicate.length ).parse()
+                                       ),
+                                       { recoverable: false }
+                               );
+                       } else if ( warnings[ 'thumb-name' ] !== undefined ) {
+                               return new OO.ui.Error(
+                                       $( '<p>' ).html(
+                                               mw.message( 'filename-thumb-name' ).parse()
+                                       ),
+                                       { recoverable: false }
+                               );
+                       } else if ( warnings[ 'bad-prefix' ] !== undefined ) {
+                               return new OO.ui.Error(
+                                       $( '<p>' ).html(
+                                               mw.message( 'filename-bad-prefix', warnings[ 'bad-prefix' ] ).parse()
+                                       ),
+                                       { recoverable: false }
+                               );
+                       } else if ( warnings[ 'duplicate-archive' ] !== undefined ) {
+                               return new OO.ui.Error(
+                                       $( '<p>' ).html(
+                                               mw.message( 'api-error-duplicate-archive', 1 ).parse()
+                                       ),
+                                       { recoverable: false }
+                               );
+                       } else if ( warnings.badfilename !== undefined ) {
+                               // Change the name if the current name isn't acceptable
+                               // TODO This might not really be the best place to do this
+                               this.filenameWidget.setValue( warnings.badfilename );
+                               return new OO.ui.Error(
+                                       $( '<p>' ).html(
+                                               mw.message( 'badfilename', warnings.badfilename ).parse()
+                                       )
+                               );
+                       } else {
+                               return new OO.ui.Error(
+                                       $( '<p>' ).html(
+                                               // Let's get all the help we can if we can't pin point the error
+                                               mw.message( 'api-error-unknown-warning', JSON.stringify( stateDetails ) ).parse()
+                                       ),
+                                       { recoverable: false }
+                               );
+                       }
+               }
+       };
+
        /* Form renderers */
 
        /**
index 007c855..1432912 100644 (file)
         * Sets the state and state details (if any) of the upload.
         *
         * @param {mw.Upload.State} state
-        * @param {string|Object} stateDetails
+        * @param {Object} stateDetails
         */
        UP.setState = function ( state, stateDetails ) {
                this.state = state;
                        upload.setState( Upload.State.UPLOADED );
                        upload.imageinfo = result.upload.imageinfo;
                        return result;
-               }, function () {
-                       upload.setState( Upload.State.ERROR );
+               }, function ( errorCode, result ) {
+                       if ( result && result.upload && result.upload.warnings ) {
+                               upload.setState( Upload.State.WARNING, result );
+                       } else {
+                               upload.setState( Upload.State.ERROR, result );
+                       }
+                       return $.Deferred().reject( errorCode, result );
                } );
        };
 
                } ).then( function ( finishStash ) {
                        upload.setState( Upload.State.STASHED );
                        return finishStash;
-               }, function ( result ) {
-                       upload.setState( Upload.State.ERROR, mw.message( 'api-error-' + result ) );
+               }, function ( errorCode, result ) {
+                       if ( result && result.upload && result.upload.warnings ) {
+                               upload.setState( Upload.State.WARNING, result );
+                       } else {
+                               upload.setState( Upload.State.ERROR, result );
+                       }
+                       return $.Deferred().reject( errorCode, result );
                } );
 
                return this.stashPromise;
                                upload.setState( Upload.State.UPLOADED );
                                upload.imageinfo = result.upload.imageinfo;
                                return result;
-                       }, function ( result ) {
-                               // Errors are strings that can be used to get error message
-                               if ( typeof result === 'string' ) {
-                                       upload.setState( Upload.State.ERROR, mw.message( 'api-error-' + result ) );
-                                       return;
-                               }
-
-                               // Warnings come in the form of objects
-                               if ( $.isPlainObject( result ) ) {
+                       }, function ( errorCode, result ) {
+                               if ( result && result.upload && result.upload.warnings ) {
                                        upload.setState( Upload.State.WARNING, result );
-                                       return;
+                               } else {
+                                       upload.setState( Upload.State.ERROR, result );
                                }
-
-                               // Throw an empty error if we can't figure it out
-                               upload.setState( Upload.State.ERROR );
+                               return $.Deferred().reject( errorCode, result );
                        } );
                } );
        };
index 8957430..de63a18 100644 (file)
                        return mw.jqueryMsg.getMessageFunction()( msg.charAt( 0 ).toLowerCase() + msg.slice( 1 ) );
                },
 
+               /**
+                * Get localized namespace name from canonical name or namespace number.
+                * Invoked by putting `{{ns:foo}}` into a message
+                *
+                * @param {Array} nodes List of nodes
+                * @return {string} Localized namespace name
+                */
+               ns: function ( nodes ) {
+                       var ns = $.trim( textify( nodes[ 0 ] ) );
+                       if ( !/^\d+$/.test( ns ) ) {
+                               ns = mw.config.get( 'wgNamespaceIds' )[ ns.replace( / /g, '_' ).toLowerCase() ];
+                       }
+                       ns = mw.config.get( 'wgFormattedNamespaces' )[ ns ];
+                       return ns || '';
+               },
+
                /**
                 * Takes an unformatted number (arab, no group separators and . as decimal separator)
                 * and outputs it in the localized digit script and formatted with decimal
index f361ec8..eeb7bb3 100644 (file)
                        // on links from hiding a notification.
                        .on( 'click', 'a', function ( e ) {
                                e.stopPropagation();
-                       } )
-                       .hide();
+                       } );
 
                // Prepend the notification area to the content area and save it's object.
                mw.util.$content.prepend( $area );
                offset = $area.offset();
+               $area.hide();
 
                function updateAreaMode() {
                        var isFloating = $window.scrollTop() > offset.top;
index 9bbbf9f..8af1428 100644 (file)
@@ -181,7 +181,6 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                $fileName = $this->getNewTempFile();
 
                // Converting the temporary /file/ to a /directory/
-               //
                // The following is not atomic, but at least we now have a single place,
                // where temporary directory creation is bundled and can be improved
                unlink( $fileName );
@@ -493,13 +492,13 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
 
                if ( $user->idForName() == 0 ) {
                        $user->addToDatabase();
-                       $user->setPassword( 'UTSysopPassword' );
-
-                       $user->addGroup( 'sysop' );
-                       $user->addGroup( 'bureaucrat' );
-                       $user->saveSettings();
+                       TestUser::setPasswordForUser( $user, 'UTSysopPassword' );
                }
 
+               // Always set groups, because $this->resetDB() wipes them out
+               $user->addGroup( 'sysop' );
+               $user->addGroup( 'bureaucrat' );
+
                // Make 1 page with 1 revision
                $page = WikiPage::factory( Title::newFromText( 'UTPage' ) );
                if ( $page->getId() == 0 ) {
index 7b0de86..e69fa20 100644 (file)
@@ -26,7 +26,7 @@ class BlockTest extends MediaWikiLangTestCase {
                $user = User::newFromName( 'UTBlockee' );
                if ( $user->getID() == 0 ) {
                        $user->addToDatabase();
-                       $user->setPassword( 'UTBlockeePassword' );
+                       TestUser::setPasswordForUser( $user, 'UTBlockeePassword' );
 
                        $user->saveSettings();
                }
@@ -136,9 +136,9 @@ class BlockTest extends MediaWikiLangTestCase {
        public function testBlockedUserCanNotCreateAccount() {
                $username = 'BlockedUserToCreateAccountWith';
                $u = User::newFromName( $username );
-               $u->setPassword( 'NotRandomPass' );
                $u->setId( 14146 );
                $u->addToDatabase();
+               TestUser::setPasswordForUser( $u, 'NotRandomPass' );
                unset( $u );
 
                // Sanity check
@@ -374,8 +374,8 @@ class BlockTest extends MediaWikiLangTestCase {
                # Set up the target
                $u = User::newFromName( $username );
                if ( $u->getID() == 0 ) {
-                       $u->setPassword( 'TotallyObvious' );
                        $u->addToDatabase();
+                       TestUser::setPasswordForUser( $u, 'TotallyObvious' );
                }
                unset( $u );
 
index 4847b82..913c82f 100644 (file)
@@ -583,7 +583,6 @@ class GlobalTest extends MediaWikiTestCase {
                        // if you hack it just right are kinda pathological,
                        // and unreliable cross-platform or on IE which means they're
                        // unlikely to appear on intranets.
-                       //
                        // Those will survive the algorithm but with results that
                        // are less consistent.
 
index bb2b33f..8a7bfa5 100644 (file)
@@ -6,7 +6,7 @@
  */
 class WfGetCallerTest extends MediaWikiTestCase {
        public function testZero() {
-               $this->assertEquals( __METHOD__, wfGetCaller( 1 ) );
+               $this->assertEquals( 'WfGetCallerTest->testZero', wfGetCaller( 1 ) );
        }
 
        function callerOne() {
@@ -14,10 +14,10 @@ class WfGetCallerTest extends MediaWikiTestCase {
        }
 
        public function testOne() {
-               $this->assertEquals( 'WfGetCallerTest::testOne', self::callerOne() );
+               $this->assertEquals( 'WfGetCallerTest->testOne', self::callerOne() );
        }
 
-       function intermediateFunction( $level = 2, $n = 0 ) {
+       static function intermediateFunction( $level = 2, $n = 0 ) {
                if ( $n > 0 ) {
                        return self::intermediateFunction( $level, $n - 1 );
                }
@@ -26,11 +26,11 @@ class WfGetCallerTest extends MediaWikiTestCase {
        }
 
        public function testTwo() {
-               $this->assertEquals( 'WfGetCallerTest::testTwo', self::intermediateFunction() );
+               $this->assertEquals( 'WfGetCallerTest->testTwo', self::intermediateFunction() );
        }
 
        public function testN() {
-               $this->assertEquals( 'WfGetCallerTest::testN', self::intermediateFunction( 2, 0 ) );
+               $this->assertEquals( 'WfGetCallerTest->testN', self::intermediateFunction( 2, 0 ) );
                $this->assertEquals(
                        'WfGetCallerTest::intermediateFunction',
                        self::intermediateFunction( 1, 0 )
index f011f47..9093564 100644 (file)
@@ -125,21 +125,16 @@ class LinkFilterTest extends MediaWikiLangTestCase {
                        array( '', 'gopher://*.test.com/', 'gopher://gopher.test.com/0/v2/vstat' ),
                        array( 'telnet://', '*.test.com', 'telnet://shell.test.com/~home/' ),
 
-                       //
                        // The following only work in PHP >= 5.3.7, due to a bug in parse_url which eats
                        // the path from the url (https://bugs.php.net/bug.php?id=54180)
-                       //
                        // array( '', 'http://test.com', 'http://test.com/index?arg=1' ),
                        // array( 'http://', '*.test.com', 'http://www.test.com/index?arg=1' ),
                        // array( '' ,
                        //    'http://xx23124:__ffdfdef__@www.test.com:12345/dir' ,
                        //    'http://name:pass@www.test.com:12345/dir/dir/file.xyz.php#__se__?arg1=_&arg2[]=4rtg'
                        // ),
-                       //
 
-                       //
                        // Tests for false positives
-                       //
                        array( 'http://', 'test.com', 'http://www.test.com', false ),
                        array( 'http://', 'www1.test.com', 'http://www.test.com', false ),
                        array( 'http://', '*.test.com', 'http://www.test.t.com', false ),
@@ -166,10 +161,8 @@ class LinkFilterTest extends MediaWikiLangTestCase {
                        array( '', 'http://test.com:8080/dir/', 'http://test.com:808/dir/', false ),
                        array( '', 'http://test.com/dir/index.html', 'http://test.com/dir/index.php', false ),
 
-                       //
                        // These are false positives too and ideally shouldn't match, but that
                        // would require using regexes and RLIKE instead of LIKE
-                       //
                        // array( null, 'http://*.test.com', 'http://www.test.com:80', false ),
                        // array( '', 'https://*.wikimedia.org/r/#/q/status:open,n,z',
                        //      'https://gerrit.wikimedia.org/XXX/r/#/q/status:open,n,z', false ),
index 96b2251..6887ed1 100644 (file)
@@ -65,8 +65,8 @@ class TestUser {
                }
 
                // Update the user to use the password and other details
-               $change = $this->setPassword( $this->password ) ||
-                       $this->setEmail( $email ) ||
+               $this->setPassword( $this->password );
+               $change = $this->setEmail( $email ) ||
                        $this->setRealName( $realname );
 
                // Adjust groups by adding any missing ones and removing any extras
@@ -110,26 +110,36 @@ class TestUser {
 
        /**
         * @param string $password
-        * @return bool
         */
        private function setPassword( $password ) {
-               $passwordFactory = $this->user->getPasswordFactory();
-               $oldDefaultType = $passwordFactory->getDefaultType();
-
-               // A is unsalted MD5 (thus fast) ... we don't care about security here, this is test only
-               $passwordFactory->setDefaultType( 'A' );
-               $newPassword = $passwordFactory->newFromPlaintext( $password, $this->user->getPassword() );
+               self::setPasswordForUser( $this->user, $password );
+       }
 
-               $change = false;
-               if ( !$this->user->getPassword()->equals( $newPassword ) ) {
-                       // Password changed
-                       $this->user->setPassword( $password );
-                       $change = true;
+       /**
+        * Set the password on a testing user
+        *
+        * This assumes we're still using the generic AuthManager config from
+        * PHPUnitMaintClass::finalSetup(), and just sets the password in the
+        * database directly.
+        * @param User $user
+        * @param string $password
+        */
+       public static function setPasswordForUser( User $user, $password ) {
+               if ( !$user->getId() ) {
+                       throw new MWException( "Passed User has not been added to the database yet!" );
                }
 
-               $passwordFactory->setDefaultType( $oldDefaultType );
-
-               return $change;
+               $passwordFactory = new PasswordFactory();
+               $passwordFactory->init( RequestContext::getMain()->getConfig() );
+               // A is unsalted MD5 (thus fast) ... we don't care about security here, this is test only
+               $passwordFactory->setDefaultType( 'A' );
+               $pwhash = $passwordFactory->newFromPlaintext( $password );
+               wfGetDB( DB_MASTER )->update(
+                       'user',
+                       array( 'user_password' => $pwhash->toString() ),
+                       array( 'user_id' => $user->getId() ),
+                       __METHOD__
+               );
        }
 
        /**
index 17c1b8e..4c6f083 100644 (file)
@@ -276,26 +276,6 @@ class UserTest extends MediaWikiTestCase {
                $this->assertEquals( 'test', $this->user->getOption( 'userjs-someoption' ) );
        }
 
-       /**
-        * Test password expiration.
-        * @covers User::getPasswordExpired()
-        */
-       public function testPasswordExpire() {
-               $this->setMwGlobals( 'wgPasswordExpireGrace', 3600 * 24 * 7 ); // 7 days
-
-               $user = User::newFromName( 'UnitTestUser' );
-               $user->loadDefaults( 'UnitTestUser' );
-               $this->assertEquals( false, $user->getPasswordExpired() );
-
-               $ts = time() - ( 3600 * 24 * 1 ); // 1 day ago
-               $user->expirePassword( $ts );
-               $this->assertEquals( 'soft', $user->getPasswordExpired() );
-
-               $ts = time() - ( 3600 * 24 * 10 ); // 10 days ago
-               $user->expirePassword( $ts );
-               $this->assertEquals( 'hard', $user->getPasswordExpired() );
-       }
-
        /**
         * Test password validity checks. There are 3 checks in core,
         *      - ensure the password meets the minimal length
index e0488b7..ffd2f5e 100644 (file)
@@ -22,7 +22,7 @@ class ApiBlockTest extends ApiTestCase {
 
                if ( $user->getId() == 0 ) {
                        $user->addToDatabase();
-                       $user->setPassword( 'UTApiBlockeePassword' );
+                       TestUser::setPasswordForUser( $user, 'UTApiBlockeePassword' );
 
                        $user->saveSettings();
                }
index 8d134f7..3945102 100644 (file)
@@ -29,7 +29,7 @@ class ApiCreateAccountTest extends ApiTestCase {
                        $this->markTestIncomplete( 'This test needs $wgServer to be set in LocalSettings.php' );
                }
 
-               $password = User::randomPassword();
+               $password = PasswordFactory::generateRandomPasswordString();
 
                $ret = $this->doApiRequest( array(
                        'action' => 'createaccount',
index f8da0ff..d187fed 100644 (file)
@@ -15,7 +15,7 @@ class UserWrapper {
                                "email" => "test@example.com",
                                "real_name" => "Test User" ) );
                }
-               $this->user->setPassword( $this->password );
+               TestUser::setPasswordForUser( $this->user, $this->password );
 
                if ( $group !== '' ) {
                        $this->user->addGroup( $group );
index 6b22000..d931b39 100644 (file)
@@ -13,7 +13,7 @@ class GenderCacheTest extends MediaWikiLangTestCase {
                $user = User::newFromName( 'UTMale' );
                if ( $user->getID() == 0 ) {
                        $user->addToDatabase();
-                       $user->setPassword( 'UTMalePassword' );
+                       TestUser::setPasswordForUser( $user, 'UTMalePassword' );
                }
                // ensure the right gender
                $user->setOption( 'gender', 'male' );
@@ -22,7 +22,7 @@ class GenderCacheTest extends MediaWikiLangTestCase {
                $user = User::newFromName( 'UTFemale' );
                if ( $user->getID() == 0 ) {
                        $user->addToDatabase();
-                       $user->setPassword( 'UTFemalePassword' );
+                       TestUser::setPasswordForUser( $user, 'UTFemalePassword' );
                }
                // ensure the right gender
                $user->setOption( 'gender', 'female' );
@@ -31,7 +31,7 @@ class GenderCacheTest extends MediaWikiLangTestCase {
                $user = User::newFromName( 'UTDefaultGender' );
                if ( $user->getID() == 0 ) {
                        $user->addToDatabase();
-                       $user->setPassword( 'UTDefaultGenderPassword' );
+                       TestUser::setPasswordForUser( $user, 'UTDefaultGenderPassword' );
                }
                // ensure the default gender
                $user->setOption( 'gender', null );
index 7280a97..3497c88 100644 (file)
@@ -29,7 +29,7 @@ class MWDebugTest extends MediaWikiTestCase {
                        array( array(
                                'msg' => 'logging a string',
                                'type' => 'log',
-                               'caller' => __METHOD__,
+                               'caller' => 'MWDebugTest->testAddLog',
                        ) ),
                        MWDebug::getLog()
                );
index 5ad8aca..e8a4d5c 100644 (file)
@@ -25,14 +25,16 @@ class PasswordTest extends MediaWikiTestCase {
         * @covers InvalidPassword::equals
         */
        public function testInvalidUnequalInvalid() {
-               $invalid1 = User::getPasswordFactory()->newFromCiphertext( null );
-               $invalid2 = User::getPasswordFactory()->newFromCiphertext( null );
+               $passwordFactory = new PasswordFactory();
+               $invalid1 = $passwordFactory->newFromCiphertext( null );
+               $invalid2 = $passwordFactory->newFromCiphertext( null );
 
                $this->assertFalse( $invalid1->equals( $invalid2 ) );
        }
 
        public function testInvalidPlaintext() {
-               $invalid = User::getPasswordFactory()->newFromPlaintext( null );
+               $passwordFactory = new PasswordFactory();
+               $invalid = $passwordFactory->newFromPlaintext( null );
 
                $this->assertInstanceOf( 'InvalidPassword', $invalid );
        }
index 8c76397..c846c06 100644 (file)
@@ -102,7 +102,7 @@ abstract class DumpTestCase extends MediaWikiLangTestCase {
                // expectOutput[...] functions. However, the PHPUnit shipped prediactes
                // do not allow to check /each/ line of the output using /readable/ REs.
                // So we ...
-               //
+
                // 1. ... add a dummy output checking to make PHPUnit not complain
                //    about unchecked test output
                $this->expectOutputRegex( '//' );
index 454e9c1..5c6a6cd 100644 (file)
@@ -4,7 +4,6 @@
 // instead of the MaintenanceFixup hack below. However, we cannot do
 // without changing the visibility and without working around hacks in
 // Maintenance.php
-//
 // For the same reason, we cannot just use FakeMaintenance.
 
 /**
index c216864..f5dd98b 100644 (file)
@@ -301,7 +301,6 @@ class TextPassDumperDatabaseTest extends DumpTestCase {
 
                // The dump (hopefully) did take long enough to produce more than one
                // checkpoint file.
-               //
                // We now check all the checkpoint files for validity.
 
                $files = scandir( $nameOutputDir );
index 0cb0cdb..8b6221b 100644 (file)
@@ -288,17 +288,18 @@ class BackupDumperPageTest extends DumpTestCase {
                $this->assertDumpEnd();
        }
 
+       /**
+        * xmldumps-backup typically performs a single dump that that writes
+        * out three files
+        * - gzipped stubs of everything (meta-history)
+        * - gzipped stubs of latest revisions of all pages (meta-current)
+        * - gzipped stubs of latest revisions of all pages of namespage 0
+        *   (articles)
+        *
+        * We reproduce such a setup with our mini fixture, although we omit
+        * chunks, and all the other gimmicks of xmldumps-backup.
+        */
        function testXmlDumpsBackupUseCase() {
-               // xmldumps-backup typically performs a single dump that that writes
-               // out three files
-               // * gzipped stubs of everything (meta-history)
-               // * gzipped stubs of latest revisions of all pages (meta-current)
-               // * gzipped stubs of latest revisions of all pages of namespage 0
-               //   (articles)
-               //
-               // We reproduce such a setup with our mini fixture, although we omit
-               // chunks, and all the other gimmicks of xmldumps-backup.
-               //
                $this->checkHasGzip();
 
                $fnameMetaHistory = $this->getNewTempFile();
index cab4080..11ceeea 100644 (file)
        parserTest( 'Y Dates', 'date', YDates );
 
        ISODates = [
-               [ '2000',               false, 946684800000, 'Plain 4-digit year' ],
-               [ '2000-01',            false, 946684800000, 'Year with month' ],
+               [ '2000',               false, 0, 'Plain 4-digit year' ],
+               [ '2000-01',            false, 0, 'Year with month' ],
                [ '2000-01-01', true, 946684800000, 'Year with month and day' ],
                [ '2000-13-01', true, 0, 'Non existant month' ],
                [ '2000-01-32', true, 0, 'Non existant day' ],
                [ '2000-01-01T12:30:30Z',       true, 946729830000, 'Date with a UTC+0 time' ],
                [ '2000-01-01T24:30:30Z',       true, 0, 'Date with invalid hours' ],
                [ '2000-01-01T12:60:30Z',       true, 0, 'Date with invalid minutes' ],
-               [ '2000-01-01T12:30:61Z',       true, 0, 'Date with invalid amount of seconds' ],
+               [ '2000-01-01T12:30:61Z',       true, 946729800000, 'Date with invalid amount of seconds, drops seconds' ],
                [ '2000-01-01T23:59:59Z',       true, 946771199000, 'Edges of time' ],
                [ '2000-01-01T12:30:30.111Z',   true, 946729830111, 'Date with milliseconds' ],
                [ '2000-01-01T12:30:30.11111Z', true, 946729830111, 'Date with too high precision' ],
                [ '2000-01-01T12:30:30+01:30',  true, 946724430000, 'Date time in UTC+1:30' ],
                [ '2000-01-01T12:30:30-01:00',  true, 946733430000, 'Date time in UTC-1' ],
                [ '2000-01-01T12:30:30-01:30',  true, 946735230000, 'Date time in UTC-1:30' ],
-               [ '2000-01-01T12:30:30.111+01:00', true, 946726230111, 'Date time and milliseconds in UTC+1 ' ]
+               [ '2000-01-01T12:30:30.111+01:00', true, 946726230111, 'Date time and milliseconds in UTC+1 ' ],
+               [ '2000-01-01Postfix', true, 946684800000, 'Date with appended postfix' ],
+               [ '2000-01-01 Postfix', true, 946684800000, 'Date with separate postfix' ]
                /* Disable testcases, because behavior is browser dependant */
                /*
                [ '2000-11-31', true, 0, '31 days in 30 day month' ],
index 6805eab..b09bb28 100644 (file)
                        0,
                        'empty cell is sorted as number 0'
                );
+       } );
 
+       QUnit.test( 'bug T114721 - use of expand-child class', 2, function ( assert ) {
+               var $table, parsers;
+               $table = $(
+                       '<table class="sortable">' +
+                               '<tr><th>A</th><th>B</th></tr>' +
+                               '<tr><td>b</td><td>4</td></tr>' +
+                               '<tr class="expand-child"><td colspan="2">some text follow b</td></tr>' +
+                               '<tr><td>a</td><td>2</td></tr>' +
+                               '<tr class="expand-child"><td colspan="2">some text follow a</td></tr>' +
+                               '<tr class="expand-child"><td colspan="2">more text</td></tr>' +
+                               '</table>'
+               );
+               $table.tablesorter();
+               $table.find( '.headerSort:eq(0)' ).click();
+
+               assert.deepEqual(
+                       tableExtract( $table ),
+                       [
+                               [ 'a', '2' ],
+                               [ 'some text follow a' ],
+                               [ 'more text' ],
+                               [ 'b', '4' ],
+                               [ 'some text follow b' ]
+                       ],
+                       'row with expand-child class follow above row'
+               );
+
+               parsers = $table.data( 'tablesorter' ).config.parsers;
+               assert.equal(
+                       parsers[ 1 ].id,
+                       'number',
+                       'detectParserForColumn() detect parser.id "number" for second column'
+               );
        } );
+
 }( jQuery, mediaWiki ) );
index 8033458..56a346f 100644 (file)
@@ -1,4 +1,4 @@
-( function ( mw ) {
+( function ( mw, $ ) {
        QUnit.module( 'mediawiki.api', QUnit.newMwEnvironment( {
                setup: function () {
                        this.server = this.sandbox.useFakeServer();
                                assert.deepEqual( data, { example: { value: 'B' } } );
                        } );
        } );
-}( mediaWiki ) );
+
+       QUnit.module( 'mediawiki.api (2)', {
+               setup: function () {
+                       var self = this,
+                               requests = this.requests = [];
+                       this.api = new mw.Api();
+                       this.sandbox.stub( jQuery, 'ajax', function () {
+                               var request = $.extend( {
+                                       abort: self.sandbox.spy()
+                               }, $.Deferred() );
+                               requests.push( request );
+                               return request;
+                       } );
+               }
+       } );
+
+       QUnit.test( '#abort', 3, function ( assert ) {
+               this.api.get( {
+                       a: 1
+               } );
+               this.api.post( {
+                       b: 2
+               } );
+               this.api.abort();
+               assert.ok( this.requests.length === 2, 'Check both requests triggered' );
+               $.each( this.requests, function ( i, request ) {
+                       assert.ok( request.abort.calledOnce, 'abort request number ' + i );
+               } );
+       } );
+}( mediaWiki, jQuery ) );
index 030e703..10fcd5d 100644 (file)
@@ -5,8 +5,9 @@
                QUnit.expect( 2 );
                var api = new mw.Api();
                assert.ok( api.upload );
-               // The below will return a rejected deferred, but that's OK.
-               assert.ok( api.upload() );
+               assert.throws( function () {
+                       api.upload();
+               } );
        } );
 
        QUnit.test( 'Set up iframe upload', function ( assert ) {
index 1d44cc1..4f273bc 100644 (file)
                        mw.language = this.originalMwLanguage;
                },
                config: {
-                       wgArticlePath: '/wiki/$1'
+                       wgArticlePath: '/wiki/$1',
+                       // jscs:disable requireCamelCaseOrUpperCaseIdentifiers
+                       wgNamespaceIds: {
+                               template: 10,
+                               template_talk: 11,
+                               // Localised
+                               szablon: 10,
+                               dyskusja_szablonu: 11
+                       },
+                       // jscs:enable requireCamelCaseOrUpperCaseIdentifiers
+                       wgFormattedNamespaces: {
+                               // Localised
+                               10: 'Szablon',
+                               11: 'Dyskusja szablonu'
+                       }
                },
                // Messages that are reused in multiple tests
                messages: {
                );
        } );
 
+       QUnit.test( 'Ns', 4, function ( assert ) {
+               mw.messages.set( 'ns-template-talk', '{{ns:Template talk}}' );
+               assert.equal(
+                       formatParse( 'ns-template-talk' ),
+                       'Dyskusja szablonu',
+                       'ns: returns localised namespace when used with a canonical namespace name'
+               );
+
+               mw.messages.set( 'ns-10', '{{ns:10}}' );
+               assert.equal(
+                       formatParse( 'ns-10' ),
+                       'Szablon',
+                       'ns: returns localised namespace when used with a namespace number'
+               );
+
+               mw.messages.set( 'ns-unknown', '{{ns:doesnt-exist}}' );
+               assert.equal(
+                       formatParse( 'ns-unknown' ),
+                       '',
+                       'ns: returns empty string for unknown namespace name'
+               );
+
+               mw.messages.set( 'ns-in-a-link', '[[{{ns:template}}:Foo]]' );
+               assert.equal(
+                       formatParse( 'ns-in-a-link' ),
+                       '<a title="Szablon:Foo" href="/wiki/Szablon:Foo">Szablon:Foo</a>',
+                       'ns: works when used inside a wikilink'
+               );
+       } );
+
        // Tests that getMessageFunction is used for non-plain messages with curly braces or
        // square brackets, but not otherwise.
        QUnit.test( 'mw.Message.prototype.parser monkey-patch', 22, function ( assert ) {