Merge "Try to make a dent in CodeSniffer reports on includes/ (1)"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Wed, 26 Mar 2014 16:14:11 +0000 (16:14 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Wed, 26 Mar 2014 16:14:11 +0000 (16:14 +0000)
197 files changed:
.jscsrc [new file with mode: 0644]
.jshintignore
.jshintrc
.travis.yml
README
RELEASE-NOTES-1.23
includes/AutoLoader.php
includes/Block.php
includes/DefaultSettings.php
includes/EditPage.php
includes/GlobalFunctions.php
includes/QueryPage.php
includes/Skin.php
includes/WebResponse.php
includes/Wiki.php
includes/WikiPage.php
includes/db/Database.php
includes/db/DatabaseMysqlBase.php
includes/db/LoadBalancer.php
includes/filebackend/FileBackendStore.php
includes/filerepo/FileRepo.php
includes/installer/i18n/he.json
includes/media/MediaHandler.php
includes/objectcache/BagOStuff.php
includes/specialpage/SpecialPage.php
includes/specialpage/SpecialPageFactory.php
includes/specials/SpecialActiveusers.php
includes/specials/SpecialAllmessages.php
includes/specials/SpecialAllpages.php
includes/specials/SpecialBooksources.php
includes/specials/SpecialChangePassword.php
includes/specials/SpecialContributions.php
includes/specials/SpecialCreateAccount.php
includes/specials/SpecialDeletedContributions.php
includes/specials/SpecialEditWatchlist.php
includes/specials/SpecialExpandTemplates.php
includes/specials/SpecialFilepath.php
includes/specials/SpecialListDuplicatedFiles.php [new file with mode: 0644]
includes/specials/SpecialListfiles.php
includes/specials/SpecialMIMEsearch.php
includes/specials/SpecialMostrevisions.php
includes/specials/SpecialMovepage.php
includes/specials/SpecialMyRedirectPages.php
includes/specials/SpecialNewimages.php
includes/specials/SpecialPermanentLink.php
includes/specials/SpecialRandomInCategory.php
includes/specials/SpecialRecentchanges.php
includes/specials/SpecialRecentchangeslinked.php
includes/specials/SpecialRedirect.php
includes/specials/SpecialResetTokens.php
includes/specials/SpecialRevisiondelete.php
includes/specials/SpecialRunJobs.php
includes/specials/SpecialSearch.php
includes/specials/SpecialShortpages.php
includes/specials/SpecialStatistics.php
includes/specials/SpecialTags.php
includes/specials/SpecialUnblock.php
includes/specials/SpecialUncategorizedimages.php
includes/specials/SpecialUncategorizedpages.php
includes/specials/SpecialUndelete.php
includes/specials/SpecialUnusedcategories.php
includes/specials/SpecialUnusedimages.php
includes/specials/SpecialUnusedtemplates.php
includes/specials/SpecialUnwatchedpages.php
includes/specials/SpecialUpload.php
includes/specials/SpecialUploadStash.php
includes/specials/SpecialUserlogin.php
includes/specials/SpecialUserlogout.php
includes/specials/SpecialUserrights.php
includes/specials/SpecialVersion.php
includes/specials/SpecialWantedcategories.php
includes/specials/SpecialWantedfiles.php
includes/specials/SpecialWantedpages.php
includes/specials/SpecialWantedtemplates.php
includes/specials/SpecialWatchlist.php
includes/specials/SpecialWhatlinkshere.php
includes/specials/SpecialWithoutinterwiki.php
languages/messages/MessagesAf.php
languages/messages/MessagesBe.php
languages/messages/MessagesBe_tarask.php
languages/messages/MessagesBr.php
languages/messages/MessagesCa.php
languages/messages/MessagesCe.php
languages/messages/MessagesCkb.php
languages/messages/MessagesCs.php
languages/messages/MessagesDa.php
languages/messages/MessagesDe.php
languages/messages/MessagesDiq.php
languages/messages/MessagesEn.php
languages/messages/MessagesEt.php
languages/messages/MessagesEu.php
languages/messages/MessagesFa.php
languages/messages/MessagesFi.php
languages/messages/MessagesFr.php
languages/messages/MessagesFrr.php
languages/messages/MessagesHak.php
languages/messages/MessagesHaw.php
languages/messages/MessagesHe.php
languages/messages/MessagesHi.php
languages/messages/MessagesIt.php
languages/messages/MessagesJa.php
languages/messages/MessagesKk_cyrl.php
languages/messages/MessagesKo.php
languages/messages/MessagesLb.php
languages/messages/MessagesMk.php
languages/messages/MessagesNl.php
languages/messages/MessagesOc.php
languages/messages/MessagesOs.php
languages/messages/MessagesPl.php
languages/messages/MessagesPs.php
languages/messages/MessagesPt.php
languages/messages/MessagesPt_br.php
languages/messages/MessagesQqq.php
languages/messages/MessagesRu.php
languages/messages/MessagesSa.php
languages/messages/MessagesSco.php
languages/messages/MessagesSl.php
languages/messages/MessagesSr_ec.php
languages/messages/MessagesSr_el.php
languages/messages/MessagesSv.php
languages/messages/MessagesTh.php
languages/messages/MessagesTl.php
languages/messages/MessagesTr.php
languages/messages/MessagesTt_cyrl.php
languages/messages/MessagesUk.php
languages/messages/MessagesUz.php
languages/messages/MessagesVi.php
languages/messages/MessagesYi.php
languages/messages/MessagesZh_hans.php
languages/messages/MessagesZh_hant.php
maintenance/interwiki.list
maintenance/interwiki.sql
maintenance/language/messages.inc
resources/jquery/jquery.autoEllipsis.js
resources/jquery/jquery.byteLimit.js
resources/jquery/jquery.colorUtil.js
resources/jquery/jquery.highlightText.js
resources/jquery/jquery.localize.js
resources/jquery/jquery.makeCollapsible.js
resources/jquery/jquery.placeholder.js
resources/jquery/jquery.qunit.completenessTest.js
resources/jquery/jquery.suggestions.js
resources/jquery/jquery.tablesorter.js
resources/jquery/jquery.textSelection.js
resources/mediawiki.action/mediawiki.action.edit.editWarning.js
resources/mediawiki.action/mediawiki.action.edit.js
resources/mediawiki.action/mediawiki.action.history.js
resources/mediawiki.action/mediawiki.action.view.metadata.js
resources/mediawiki.api/mediawiki.api.category.js
resources/mediawiki.language/languages/fi.js
resources/mediawiki.language/languages/hy.js
resources/mediawiki.language/languages/la.js
resources/mediawiki.language/languages/os.js
resources/mediawiki.language/languages/uk.js
resources/mediawiki.language/mediawiki.language.js
resources/mediawiki.page/mediawiki.page.gallery.js
resources/mediawiki.page/mediawiki.page.image.pagination.js
resources/mediawiki.special/mediawiki.special.block.js
resources/mediawiki.special/mediawiki.special.javaScriptTest.js
resources/mediawiki.special/mediawiki.special.preferences.js
resources/mediawiki.special/mediawiki.special.upload.js
resources/mediawiki.ui/components/default/buttons.less
resources/mediawiki.ui/mixins/effects.less
resources/mediawiki/mediawiki.Title.js
resources/mediawiki/mediawiki.debug.js
resources/mediawiki/mediawiki.feedback.js
resources/mediawiki/mediawiki.jqueryMsg.js
resources/oojs-ui/i18n/frr.json
resources/oojs-ui/i18n/gu.json
resources/oojs-ui/i18n/pl.json
resources/oojs-ui/i18n/sco.json
resources/oojs-ui/oojs-ui.js
resources/oojs-ui/oojs-ui.svg.css
skins/common/IEFixes.js
skins/common/ajax.js
skins/common/commonContent.css
skins/common/config.js
skins/common/upload.js
skins/common/wikibits.js
skins/monobook/main.css
skins/vector/vector.js
tests/frontend/Gruntfile.js [new file with mode: 0644]
tests/frontend/package.json [new file with mode: 0644]
tests/parser/parserTests.txt
tests/phpunit/data/media/README
tests/phpunit/includes/media/DjVuTest.php
tests/phpunit/includes/parser/PreprocessorTest.php
tests/qunit/data/generateJqueryMsgData.php
tests/qunit/data/mediawiki.jqueryMsg.data.js
tests/qunit/suites/resources/jquery/jquery.color.test.js
tests/qunit/suites/resources/jquery/jquery.makeCollapsible.test.js
tests/qunit/suites/resources/jquery/jquery.placeholder.test.js
tests/qunit/suites/resources/jquery/jquery.textSelection.test.js
tests/qunit/suites/resources/mediawiki.api/mediawiki.api.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.Title.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.test.js

diff --git a/.jscsrc b/.jscsrc
new file mode 100644 (file)
index 0000000..b5481ea
--- /dev/null
+++ b/.jscsrc
@@ -0,0 +1,30 @@
+{
+       "requireCurlyBraces": ["if", "else", "for", "while", "do"],
+       "requireSpaceAfterKeywords": ["if", "else", "for", "while", "do", "switch", "return", "function"],
+       "requireParenthesesAroundIIFE": true,
+       "requireSpacesInFunctionExpression": {
+               "beforeOpeningCurlyBrace": true
+       },
+       "requireMultipleVarDecl": true,
+       "disallowEmptyBlocks": true,
+       "requireSpacesInsideObjectBrackets": "all",
+       "disallowSpaceAfterObjectKeys": true,
+       "requireCommaBeforeLineBreak": true,
+       "disallowLeftStickedOperators": ["?", ">", ">=", "<", "<="],
+       "disallowRightStickedOperators": ["?", "/", "*", ":", "=", "==", "===", "!=", "!==", ">", ">=", "<", "<="],
+       "requireRightStickedOperators": ["!"],
+       "requireLeftStickedOperators": [","],
+       "disallowSpaceAfterPrefixUnaryOperators": ["++", "--", "+", "-", "~"],
+       "disallowSpaceBeforePostfixUnaryOperators": ["++", "--"],
+       "requireSpaceBeforeBinaryOperators": ["+", "-", "/", "*", "=", "==", "===", "!=", "!=="],
+       "requireSpaceAfterBinaryOperators": ["+", "-", "/", "*", "=", "==", "===", "!=", "!=="],
+       "disallowKeywords": [ "with" ],
+       "disallowMultipleLineBreaks": true,
+       "validateLineBreaks": "LF",
+       "validateQuoteMarks": "'",
+       "disallowMixedSpacesAndTabs": "smart",
+       "disallowTrailingWhitespace": true,
+       "requireLineFeedAtFileEnd": true,
+       "requireCapitalizedConstructors": true,
+       "requireDotNotation": true
+}
index a44a4d4..627f7ab 100644 (file)
@@ -1,14 +1,14 @@
 # Generated documentation
-docs/html/
-docs/js/
-resources/mediawiki.ui/docs
+docs/html/**
+docs/js/**
+resources/mediawiki.ui/docs/**
 
 # kss template for mediawiki ui documentation
-resources/styleguide-template
+resources/styleguide-template/**
 
 # third-party libs
-extensions/
-node_modules/
+extensions/**
+node_modules/**
 resources/jquery/jquery.appear.js
 resources/jquery/jquery.async.js
 resources/jquery/jquery.ba-throttle-debounce.js
@@ -26,14 +26,15 @@ resources/jquery/jquery.qunit.js
 resources/jquery/jquery.validate.js
 resources/jquery/jquery.xmldom.js
 resources/jquery.chosen/chosen.jquery.js
-resources/jquery.effects/
-resources/jquery.tipsy/
-resources/jquery.ui/
-resources/mediawiki.libs/
-resources/oojs/
-resources/oojs-ui/
-resources/sinonjs/
-resources/moment/
+resources/jquery.effects/**
+resources/jquery.tipsy/**
+resources/jquery.ui/**
+resources/mediawiki.libs/**
+resources/moment/**
+resources/oojs-ui/**
+resources/oojs/**
+resources/sinonjs/**
+tests/frontend/node_modules/**
 
 # github.com/jshint/jshint/issues/729
 tests/qunit/suites/resources/mediawiki/mediawiki.jscompat.test.js
index c4e265a..9d6c4d2 100644 (file)
--- a/.jshintrc
+++ b/.jshintrc
@@ -2,24 +2,20 @@
        /* Common */
 
        // Enforcing
-       "camelcase": true,
-       "curly": true,
        "eqeqeq": true,
-       "immed": true,
        "latedef": true,
-       "newcap": true,
        "noarg": true,
-       "noempty": true,
        "nonew": true,
-       "quotmark": "single",
-       "trailing": true,
        "undef": true,
        "unused": true,
-       // Legacy
-       "onevar": true,
 
        /* Local */
 
+       // FIXME: Deprecated, handle these with node-jscs instead.
+       // Handled here because we still have inline overrides in some places.
+       "camelcase": true,
+       "nomen": true,
+
        // Enforcing
        "bitwise": true,
        "forin": false,
@@ -31,8 +27,6 @@
        "multistr": true,
        // Environment
        "browser": true,
-       // Legacy
-       "nomen": true,
 
        "predef": [
                "mediaWiki",
index eb05fe2..e0a45a1 100644 (file)
@@ -13,12 +13,14 @@ php:
   - 5.3
   - 5.4
   - 5.5
+  - 5.6
 
 matrix:
   allow_failures:
     - php: 5.3
     - php: 5.4
     - php: 5.5
+    - php: 5.6
 
 services:
   - mysql
diff --git a/README b/README
index a4185ba..282ee6c 100644 (file)
--- a/README
+++ b/README
@@ -23,7 +23,7 @@ RELEASE-NOTES, INSTALL, and UPGRADE.
 * Seeking help from a person?
 ** https://www.mediawiki.org/wiki/Communication
 * Looking to file a bug report or a feature request?
-** https://bugs.mediawiki.org/
+** https://bugzilla.wikimedia.org/
 * Interested in helping out?
 ** https://www.mediawiki.org/wiki/How_to_contribute
 
index 340aa50..9633edd 100644 (file)
@@ -50,6 +50,7 @@ production.
   prepended to the start of this array.
 * $wgQueryPages has been removed. Query Pages should be added to by using the
   wgQueryPages hook.
+* $wgHttpOnlyBlacklist has been removed.
 
 === New features in 1.23 ===
 * ResourceLoader can utilize the Web Storage API to cache modules client-side.
index 4fbf408..0873d87 100644 (file)
@@ -953,6 +953,7 @@ $wgAutoloadLocalClasses = array(
        'IPBlockForm' => 'includes/specials/SpecialBlock.php',
        'LinkSearchPage' => 'includes/specials/SpecialLinkSearch.php',
        'ListredirectsPage' => 'includes/specials/SpecialListredirects.php',
+       'ListDuplicatedFilesPage' => 'includes/specials/SpecialListDuplicatedFiles.php',
        'LoginForm' => 'includes/specials/SpecialUserlogin.php',
        'LonelyPagesPage' => 'includes/specials/SpecialLonelypages.php',
        'LongPagesPage' => 'includes/specials/SpecialLongpages.php',
index c366052..95a8386 100644 (file)
@@ -453,12 +453,22 @@ class Block {
 
                $affected = $dbw->affectedRows();
 
-               $dbw->update(
-                       'ipblocks',
-                       $this->getAutoblockUpdateArray(),
-                       array( 'ipb_parent_block_id' => $this->getId() ),
-                       __METHOD__
-               );
+               if ( $this->isAutoblocking() ) {
+                       // update corresponding autoblock(s) (bug 48813)
+                       $dbw->update(
+                               'ipblocks',
+                               $this->getAutoblockUpdateArray(),
+                               array( 'ipb_parent_block_id' => $this->getId() ),
+                               __METHOD__
+                       );
+               } else {
+                       // autoblock no longer required, delete corresponding autoblock(s)
+                       $dbw->delete(
+                               'ipblocks',
+                               array( 'ipb_parent_block_id' => $this->getId() ),
+                               __METHOD__
+                       );
+               }
 
                $dbw->endAtomic( __METHOD__ );
 
index efef9e0..9a85dd4 100644 (file)
@@ -4870,17 +4870,6 @@ $wgCookiePrefix = false;
  */
 $wgCookieHttpOnly = true;
 
-/**
- * If the requesting browser matches a regex in this blacklist, we won't
- * send it cookies with HttpOnly mode, even if $wgCookieHttpOnly is on.
- */
-$wgHttpOnlyBlacklist = array(
-       // Internet Explorer for Mac; sometimes the cookies work, sometimes
-       // they don't. It's difficult to predict, as combinations of path
-       // and expiration options affect its parsing.
-       '/^Mozilla\/4\.0 \(compatible; MSIE \d+\.\d+; Mac_PowerPC\)/',
-);
-
 /**
  * A list of cookies that vary the cache (for use by extensions)
  */
@@ -6082,30 +6071,44 @@ $wgAutoloadClasses = array();
 $wgAutoloadAttemptLowercase = true;
 
 /**
- * An array of extension types and inside that their names, versions, authors,
- * urls, descriptions and pointers to localized description msgs. Note that
- * the version, url, description and descriptionmsg key can be omitted.
+ * An array of information about installed extensions keyed by their type.
+ *
+ * All but 'name', 'path' and 'author' can be omitted.
  *
  * @code
  * $wgExtensionCredits[$type][] = array(
- *     'name' => 'Example extension',
- *     'version' => 1.9,
  *     'path' => __FILE__,
- *     'author' => 'Foo Barstein',
- *     'url' => 'http://www.example.com/Example%20Extension/',
- *     'description' => 'An example extension',
+ *     'name' => 'Example extension',
+ *     'author' => array(
+ *         'Foo Barstein',
+ *     ),
+ *     'version' => '1.9.0',
+ *     'url' => 'http://example.org/example-extension/',
  *     'descriptionmsg' => 'exampleextension-desc',
+ *     'license-name' => 'GPL-2.0',
  * );
  * @endcode
  *
- * Where $type is 'specialpage', 'parserhook', 'variable', 'media' or 'other'.
- * Where 'descriptionmsg' can be an array with message key and parameters:
- * 'descriptionmsg' => array( 'exampleextension-desc', param1, param2, ... ),
+ * The extensions are listed on Special:Version. This page also looks for a file
+ * named COPYING or LICENSE (optional .txt extension) and provides a link to
+ * view said file. When the 'license-name' key is specified, this file is
+ * interpreted as wikitext.
+ *
+ * - $type: One of 'specialpage', 'parserhook', 'variable', 'media' or 'other'.
+ *
+ * - author: A string or an array of strings. Authors can be linked using
+ *    the regular wikitext link syntax. To have an internationalized version of
+ *    "and others" show, add an element "...". This element can also be linked,
+ *    for instance "[http://example ...]".
+ *
+ * - descriptionmsg: A message key or an an array with message key and parameters:
+ *    `'descriptionmsg' => array( 'exampleextension-desc', param1, param2, ... ),`
+ *
+ * - description: Description of extension as inline string instead of
+ *    localizable message (omit in favour of 'descriptionmsg').
  *
- * author can be a string or an array of strings. Authors can be linked using
- * the regular wikitext link syntax. To have an internationalized version of
- * "and others" show, add an element "...". This element can also be linked,
- * for instance "[http://example ...]".
+ * - license-name: Short name of the license (used as label for the link), such
+ *   as "GPL-2.0" or "MIT" (https://spdx.org/licenses/ for a list of identifiers).
  */
 $wgExtensionCredits = array();
 
index d4b06fe..f57fc60 100644 (file)
@@ -36,7 +36,6 @@
  * headaches, which may be fatal.
  */
 class EditPage {
-
        /**
         * Status: Article successfully updated
         */
@@ -2082,9 +2081,9 @@ class EditPage {
                }
                # Try to add a custom edit intro, or use the standard one if this is not possible.
                if ( !$this->showCustomIntro() && !$this->mTitle->exists() ) {
-                       $helpLink = Skin::makeInternalOrExternalUrl(
+                       $helpLink = wfExpandUrl( Skin::makeInternalOrExternalUrl(
                                wfMessage( 'helppage' )->inContentLanguage()->text()
-                       );
+                       ) );
                        if ( $wgUser->isLoggedIn() ) {
                                $wgOut->wrapWikiMsg(
                                        // Suppress the external link icon, consider the help url an internal one
@@ -3705,25 +3704,13 @@ HTML
                $wgOut->addReturnTo( $this->getContextTitle(), array( 'action' => 'edit' ) );
        }
 
-       /**
-        * Format an anchor fragment as it would appear for a given section name
-        * @param $text String
-        * @return String
-        * @private
-        */
-       function sectionAnchor( $text ) {
-               global $wgParser;
-               return $wgParser->guessSectionNameFromWikiText( $text );
-       }
-
        /**
         * Check if the browser is on a blacklist of user-agents known to
         * mangle UTF-8 data on form submission. Returns true if Unicode
         * should make it through, false if it's known to be a problem.
         * @return bool
-        * @private
         */
-       function checkUnicodeCompliantBrowser() {
+       private function checkUnicodeCompliantBrowser() {
                global $wgBrowserBlackList, $wgRequest;
 
                $currentbrowser = $wgRequest->getHeader( 'User-Agent' );
@@ -3744,27 +3731,14 @@ HTML
         * Filter an input field through a Unicode de-armoring process if it
         * came from an old browser with known broken Unicode editing issues.
         *
-        * @param $request WebRequest
-        * @param $field String
-        * @return String
-        * @private
-        */
-       function safeUnicodeInput( $request, $field ) {
-               $text = rtrim( $request->getText( $field ) );
-               return $request->getBool( 'safemode' )
-                       ? $this->unmakesafe( $text )
-                       : $text;
-       }
-
-       /**
-        * @param $request WebRequest
-        * @param $text string
+        * @param WebRequest $request
+        * @param string $field
         * @return string
         */
-       function safeUnicodeText( $request, $text ) {
-               $text = rtrim( $text );
+       protected function safeUnicodeInput( $request, $field ) {
+               $text = rtrim( $request->getText( $field ) );
                return $request->getBool( 'safemode' )
-                       ? $this->unmakesafe( $text )
+                       ? $this->unmakeSafe( $text )
                        : $text;
        }
 
@@ -3772,16 +3746,15 @@ HTML
         * Filter an output field through a Unicode armoring process if it is
         * going to an old browser with known broken Unicode editing issues.
         *
-        * @param $text String
-        * @return String
-        * @private
+        * @param string $text
+        * @return string
         */
-       function safeUnicodeOutput( $text ) {
+       protected function safeUnicodeOutput( $text ) {
                global $wgContLang;
                $codedText = $wgContLang->recodeForEdit( $text );
                return $this->checkUnicodeCompliantBrowser()
                        ? $codedText
-                       : $this->makesafe( $codedText );
+                       : $this->makeSafe( $codedText );
        }
 
        /**
@@ -3793,11 +3766,10 @@ HTML
         * Preexisting such character references will have a 0 added to them
         * to ensure that round-trips do not alter the original data.
         *
-        * @param $invalue String
-        * @return String
-        * @private
+        * @param string $invalue
+        * @return string
         */
-       function makesafe( $invalue ) {
+       private function makeSafe( $invalue ) {
                // Armor existing references for reversibility.
                $invalue = strtr( $invalue, array( "&#x" => "&#x0" ) );
 
@@ -3835,13 +3807,13 @@ HTML
         * back to UTF-8. Used to protect data from corruption by broken web browsers
         * as listed in $wgBrowserBlackList.
         *
-        * @param $invalue String
-        * @return String
-        * @private
+        * @param string $invalue
+        * @return string
         */
-       function unmakesafe( $invalue ) {
+       private function unmakeSafe( $invalue ) {
                $result = "";
-               for ( $i = 0; $i < strlen( $invalue ); $i++ ) {
+               $valueLength = strlen( $invalue );
+               for ( $i = 0; $i < $valueLength; $i++ ) {
                        if ( ( substr( $invalue, $i, 3 ) == "&#x" ) && ( $invalue[$i + 3] != '0' ) ) {
                                $i += 3;
                                $hexstring = "";
index a6f936f..3727f16 100644 (file)
@@ -177,11 +177,12 @@ function wfAppendToArrayIfNotDefault( $key, $value, $default, &$changed ) {
  * XXX: will not darn your socks for you.
  *
  * @deprecated since 1.22; use array_replace()
- * @param $array1 Array
- * @param [$array2, [...]] Arrays
- * @return Array
+ *
+ * @param array $array1 Initial array to merge.
+ * @param array [$array2,...] Variable list of arrays to merge.
+ * @return array
  */
-function wfArrayMerge( $array1/* ... */ ) {
+function wfArrayMerge( $array1 /*...*/ ) {
        wfDeprecated( __FUNCTION__, '1.22' );
        $args = func_get_args();
        $args = array_reverse( $args, true );
@@ -207,8 +208,9 @@ function wfArrayMerge( $array1/* ... */ ) {
  *             array( 'x' ),
  *             array( 'y' )
  *     )
- * @param varargs
- * @return Array
+ *
+ * @param array [$array1,...]
+ * @return array
  */
 function wfMergeErrorArrays( /*...*/ ) {
        $args = func_get_args();
@@ -407,7 +409,7 @@ function wfArrayToCgi( $array1, $array2 = null, $prefix = '' ) {
  * arrays.  Of course, keys and values are urldecode()d.
  *
  * @param string $query query string
- * @return array Array version of input
+ * @return string[] Array version of input
  */
 function wfCgiToArray( $query ) {
        if ( isset( $query[0] ) && $query[0] == '?' ) {
@@ -452,8 +454,8 @@ function wfCgiToArray( $query ) {
  * Append a query string to an existing URL, which may or may not already
  * have query string parameters already. If so, they will be combined.
  *
- * @param $url String
- * @param $query Mixed: string or associative array
+ * @param string $url
+ * @param string|string[] $query String or associative array
  * @return string
  */
 function wfAppendQuery( $url, $query ) {
@@ -750,7 +752,7 @@ function wfUrlProtocolsWithoutProtRel() {
  * 3) Adds a "delimiter" element to the array, either '://', ':' or '//' (see (2)).
  *
  * @param string $url a URL to parse
- * @return Array: bits of the URL in an associative array, per PHP docs
+ * @return string[] Bits of the URL in an associative array, per PHP docs
  */
 function wfParseUrl( $url ) {
        global $wgUrlProtocols; // Allow all protocols defined in DefaultSettings/LocalSettings.php
@@ -1027,10 +1029,8 @@ function wfDebugMem( $exact = false ) {
  *
  * @since 1.23 support for sampling log messages via $wgDebugLogGroups.
  *
- * @param $logGroup String
- * @param $text String
- * @param bool $public whether to log the event in the public log if no private
- *                     log file is specified, (default true)
+ * @param string $logGroup
+ * @param string $text
  * @param string|bool $dest Destination of the message:
  *     - 'all': both to the log and HTML (debug toolbar or HTML comments)
  *     - 'log': only to the log and not in HTML
@@ -1109,7 +1109,7 @@ function wfLogDBError( $text ) {
 
                $date = $d->format( 'D M j G:i:s T Y' );
 
-               $text = "$date\t$host\t$wiki\t$text";
+               $text = "$date\t$host\t$wiki\t" . trim( $text ) . "\n";
                wfErrorLog( $text, $wgDBerrorLog );
        }
 }
@@ -1383,12 +1383,15 @@ function wfGetLangObj( $langcode = false ) {
  *
  * This function replaces all old wfMsg* functions.
  *
- * @param $key \string Message key.
- * Varargs: normal message parameters.
+ * @param string $key Message key
+ * @param mixed [$params,...] Normal message parameters
  * @return Message
+ *
  * @since 1.17
+ *
+ * @see Message::__construct
  */
-function wfMessage( $key /*...*/) {
+function wfMessage( $key /*...*/ ) {
        $params = func_get_args();
        array_shift( $params );
        if ( isset( $params[0] ) && is_array( $params[0] ) ) {
@@ -1401,9 +1404,13 @@ function wfMessage( $key /*...*/) {
  * This function accepts multiple message keys and returns a message instance
  * for the first message which is non-empty. If all messages are empty then an
  * instance of the first message key is returned.
- * @param varargs: message keys
+ *
+ * @param string|string[] [$keys,...] Message keys
  * @return Message
+ *
  * @since 1.18
+ *
+ * @see Message::newFallbackSequence
  */
 function wfMessageFallback( /*...*/ ) {
        $args = func_get_args();
@@ -1522,11 +1529,11 @@ function wfMsgForContentNoTrans( $key ) {
  * @deprecated since 1.18
  *
  * @param string $key key to get.
- * @param $args
- * @param $useDB Boolean
- * @param $forContent Mixed: Language code, or false for user lang, true for content lang.
- * @param $transform Boolean: Whether or not to transform the message.
- * @return String: the requested message.
+ * @param array $args
+ * @param bool $useDB
+ * @param string|bool $forContent Language code, or false for user lang, true for content lang.
+ * @param bool $transform Whether or not to transform the message.
+ * @return string The requested message.
  */
 function wfMsgReal( $key, $args, $useDB = true, $forContent = false, $transform = true ) {
        wfDeprecated( __METHOD__, '1.21' );
@@ -1543,11 +1550,11 @@ function wfMsgReal( $key, $args, $useDB = true, $forContent = false, $transform
  *
  * @deprecated since 1.18
  *
- * @param $key String
- * @param $useDB Bool
- * @param string $langCode Code of the language to get the message for, or
+ * @param string $key
+ * @param bool $useDB
+ * @param string|bool $langCode Code of the language to get the message for, or
  *                  behaves as a content language switch if it is a boolean.
- * @param $transform Boolean: whether to parse magic words, etc.
+ * @param bool $transform Whether to parse magic words, etc.
  * @return string
  */
 function wfMsgGetKey( $key, $useDB = true, $langCode = false, $transform = true ) {
@@ -1568,8 +1575,8 @@ function wfMsgGetKey( $key, $useDB = true, $langCode = false, $transform = true
 /**
  * Replace message parameter keys on the given formatted output.
  *
- * @param $message String
- * @param $args Array
+ * @param string $message
+ * @param array $args
  * @return string
  * @private
  */
@@ -1602,8 +1609,8 @@ function wfMsgReplaceArgs( $message, $args ) {
  *
  * @deprecated since 1.18
  *
- * @param $key String
- * @param string ... parameters
+ * @param string $key
+ * @param string [$args,...] Parameters
  * @return string
  */
 function wfMsgHtml( $key ) {
@@ -1623,8 +1630,8 @@ function wfMsgHtml( $key ) {
  *
  * @deprecated since 1.18
  *
- * @param $key String
- * @param string ... parameters
+ * @param string $key
+ * @param string [$args,...] Parameters
  * @return string
  */
 function wfMsgWikiHtml( $key ) {
@@ -1740,8 +1747,8 @@ function wfMsgExt( $key, $options ) {
  *
  * @deprecated since 1.18. Use Message::isDisabled().
  *
- * @param $key      String: the message key looked up
- * @return Boolean True if the message *doesn't* exist.
+ * @param string $key The message key looked up
+ * @return bool True if the message *doesn't* exist.
  */
 function wfEmptyMsg( $key ) {
        wfDeprecated( __METHOD__, '1.21' );
@@ -1963,9 +1970,9 @@ function wfFormatStackFrame( $frame ) {
 /**
  * @todo document
  *
- * @param $offset Int
- * @param $limit Int
- * @return String
+ * @param int $offset
+ * @param int $limit
+ * @return string
  */
 function wfShowingResults( $offset, $limit ) {
        return wfMessage( 'showingresults' )->numParams( $limit, $offset + 1 )->parse();
@@ -1974,12 +1981,12 @@ function wfShowingResults( $offset, $limit ) {
 /**
  * Generate (prev x| next x) (20|50|100...) type links for paging
  *
- * @param $offset String
- * @param $limit Integer
- * @param $link String
+ * @param string $offset
+ * @param int $limit
+ * @param string $link
  * @param string $query optional URL query parameter string
  * @param bool $atend optional param for specified if this is the last page
- * @return String
+ * @return string
  * @deprecated in 1.19; use Language::viewPrevNext() instead
  */
 function wfViewPrevNext( $offset, $limit, $link, $query = '', $atend = false ) {
@@ -2005,7 +2012,7 @@ function wfViewPrevNext( $offset, $limit, $link, $query = '', $atend = false ) {
  * @todo document
  * @todo FIXME: We may want to blacklist some broken browsers
  *
- * @param $force Bool
+ * @param bool $force
  * @return bool Whereas client accept gzip compression
  */
 function wfClientAcceptsGzip( $force = false ) {
@@ -2257,9 +2264,9 @@ function wfClearOutputBuffers() {
  * Converts an Accept-* header into an array mapping string values to quality
  * factors
  *
- * @param $accept String
+ * @param string $accept
  * @param string $def default
- * @return Array
+ * @return float[] Associative array of string => float pairs
  */
 function wfAcceptToPrefs( $accept, $def = '*/*' ) {
        # No arg means accept anything (per HTTP spec)
@@ -2292,8 +2299,8 @@ function wfAcceptToPrefs( $accept, $def = '*/*' ) {
  * Returns the matching MIME type (or wildcard) if a match, otherwise
  * NULL if no match.
  *
- * @param $type String
- * @param $avail Array
+ * @param string $type
+ * @param array $avail
  * @return string
  * @private
  */
@@ -2476,9 +2483,9 @@ function wfTimestamp( $outputtype = TS_UNIX, $ts = 0 ) {
  * Return a formatted timestamp, or null if input is null.
  * For dealing with nullable timestamp columns in the database.
  *
- * @param $outputtype Integer
- * @param $ts String
- * @return String
+ * @param int $outputtype
+ * @param string $ts
+ * @return string
  */
 function wfTimestampOrNull( $outputtype = TS_UNIX, $ts = null ) {
        if ( is_null( $ts ) ) {
@@ -2501,7 +2508,7 @@ function wfTimestampNow() {
 /**
  * Check if the operating system is Windows
  *
- * @return Bool: true if it's Windows, False otherwise.
+ * @return bool True if it's Windows, false otherwise.
  */
 function wfIsWindows() {
        static $isWindows = null;
@@ -2514,7 +2521,7 @@ function wfIsWindows() {
 /**
  * Check if we are running under HHVM
  *
- * @return Bool
+ * @return bool
  */
 function wfIsHHVM() {
        return defined( 'HHVM_VERSION' );
@@ -2523,8 +2530,8 @@ function wfIsHHVM() {
 /**
  * Swap two variables
  *
- * @param $x Mixed
- * @param $y Mixed
+ * @param mixed $x
+ * @param mixed $y
  */
 function swap( &$x, &$y ) {
        $z = $x;
@@ -2541,7 +2548,7 @@ function swap( &$x, &$y ) {
  * NOTE: When possible, use instead the tmpfile() function to create
  * temporary files to avoid race conditions on file creation, etc.
  *
- * @return String
+ * @return string
  */
 function wfTempDir() {
        global $wgTmpDirectory;
@@ -2564,7 +2571,7 @@ function wfTempDir() {
  * Make directory, and make all parent directories if they don't exist
  *
  * @param string $dir full path to directory to create
- * @param $mode Integer: chmod value to use, default is $wgDirectoryMode
+ * @param int $mode Chmod value to use, default is $wgDirectoryMode
  * @param string $caller optional caller param for debugging.
  * @throws MWException
  * @return bool
@@ -2631,10 +2638,10 @@ function wfRecursiveRemoveDir( $dir ) {
 }
 
 /**
- * @param $nr Mixed: the number to format
- * @param $acc Integer: the number of digits after the decimal point, default 2
- * @param $round Boolean: whether or not to round the value, default true
- * @return float
+ * @param number $nr The number to format
+ * @param int $acc The number of digits after the decimal point, default 2
+ * @param bool $round Whether or not to round the value, default true
+ * @return string
  */
 function wfPercent( $nr, $acc = 2, $round = true ) {
        $ret = sprintf( "%.${acc}f", $nr );
@@ -2661,8 +2668,8 @@ function wfPercent( $nr, $acc = 2, $round = true ) {
  *
  * I frickin' hate PHP... :P
  *
- * @param $setting String
- * @return Bool
+ * @param string $setting
+ * @return bool
  */
 function wfIniGetBool( $setting ) {
        $val = strtolower( ini_get( $setting ) );
@@ -2681,10 +2688,10 @@ function wfIniGetBool( $setting ) {
  * Also fixes the locale problems on Linux in PHP 5.2.6+ (bug backported to
  * earlier distro releases of PHP)
  *
- * @param varargs
- * @return String
+ * @param string [$args,...]
+ * @return string
  */
-function wfEscapeShellArg() {
+function wfEscapeShellArg( /*...*/ ) {
        wfInitShellLocale();
 
        $args = func_get_args();
@@ -2741,6 +2748,7 @@ function wfEscapeShellArg() {
 
 /**
  * Check if wfShellExec() is effectively disabled via php.ini config
+ *
  * @return bool|string False or one of (safemode,disabled)
  * @since 1.22
  */
@@ -2767,6 +2775,7 @@ function wfShellExecDisabled() {
 /**
  * Execute a shell command, with time and memory limits mirrored from the PHP
  * configuration if supported.
+ *
  * @param string $cmd Command line, properly escaped for shell.
  * @param &$retval null|Mixed optional, will receive the program's exit code.
  *                 (non-zero is usually failure). If there is an error from
@@ -3029,6 +3038,7 @@ function wfInitShellLocale() {
 
 /**
  * Alias to wfShellWikiCmd()
+ *
  * @see wfShellWikiCmd()
  */
 function wfShellMaintenanceCmd( $script, array $parameters = array(), array $options = array() ) {
@@ -3039,12 +3049,13 @@ function wfShellMaintenanceCmd( $script, array $parameters = array(), array $opt
  * Generate a shell-escaped command line string to run a MediaWiki cli script.
  * Note that $parameters should be a flat array and an option with an argument
  * should consist of two consecutive items in the array (do not use "--option value").
+ *
  * @param string $script MediaWiki cli script path
  * @param array $parameters Arguments and options to the script
  * @param array $options Associative array of options:
  *             'php': The path to the php executable
  *             'wrapper': Path to a PHP wrapper to handle the maintenance script
- * @return Array
+ * @return string
  */
 function wfShellWikiCmd( $script, array $parameters = array(), array $options = array() ) {
        global $wgPhpCli;
@@ -3064,11 +3075,11 @@ function wfShellWikiCmd( $script, array $parameters = array(), array $options =
  * wfMerge attempts to merge differences between three texts.
  * Returns true for a clean merge and false for failure or a conflict.
  *
- * @param $old String
- * @param $mine String
- * @param $yours String
- * @param $result String
- * @return Bool
+ * @param string $old
+ * @param string $mine
+ * @param string $yours
+ * @param string $result
+ * @return bool
  */
 function wfMerge( $old, $mine, $yours, &$result ) {
        global $wgDiff3;
@@ -3146,7 +3157,7 @@ function wfMerge( $old, $mine, $yours, &$result ) {
  * @param string $before the text before the changes.
  * @param string $after the text after the changes.
  * @param string $params command-line options for the diff command.
- * @return String: unified diff of $before and $after
+ * @return string Unified diff of $before and $after
  */
 function wfDiff( $before, $after, $params = '-u' ) {
        if ( $before == $after ) {
@@ -3223,7 +3234,7 @@ function wfDiff( $before, $after, $params = '-u' ) {
  *
  * @see perldoc -f use
  *
- * @param $req_ver Mixed: the version to check, can be a string, an integer, or
+ * @param string|number $req_ver The version to check, can be a string, an integer, or
  *                 a float
  * @throws MWException
  */
@@ -3253,7 +3264,7 @@ function wfUsePHP( $req_ver ) {
  *
  * @see perldoc -f use
  *
- * @param $req_ver Mixed: the version to check, can be a string, an integer, or
+ * @param string|number $req_ver The version to check, can be a string, an integer, or
  *                 a float
  * @throws MWException
  */
@@ -3273,9 +3284,9 @@ function wfUseMW( $req_ver ) {
  * PHP's basename() only considers '\' a pathchar on Windows and Netware.
  * We'll consider it so always, as we don't want '\s' in our Unix paths either.
  *
- * @param $path String
+ * @param string $path
  * @param string $suffix to remove if present
- * @return String
+ * @return string
  */
 function wfBaseName( $path, $suffix = '' ) {
        if ( $suffix == '' ) {
@@ -3299,7 +3310,7 @@ function wfBaseName( $path, $suffix = '' ) {
  *
  * @param string $path absolute destination path including target filename
  * @param string $from Absolute source path, directory only
- * @return String
+ * @return string
  */
 function wfRelativePath( $path, $from ) {
        // Normalize mixed input on Windows...
@@ -3443,25 +3454,9 @@ function wfBaseConvert( $input, $sourceBase, $destBase, $pad = 1,
        return str_pad( $result, $pad, '0', STR_PAD_LEFT );
 }
 
-/**
- * @return bool
- */
-function wfHttpOnlySafe() {
-       global $wgHttpOnlyBlacklist;
-
-       if ( isset( $_SERVER['HTTP_USER_AGENT'] ) ) {
-               foreach ( $wgHttpOnlyBlacklist as $regex ) {
-                       if ( preg_match( $regex, $_SERVER['HTTP_USER_AGENT'] ) ) {
-                               return false;
-                       }
-               }
-       }
-
-       return true;
-}
-
 /**
  * Check if there is sufficient entropy in php's built-in session generation
+ *
  * @return bool true = there is sufficient entropy
  */
 function wfCheckEntropy() {
@@ -3499,6 +3494,7 @@ function wfFixSessionID() {
 
 /**
  * Reset the session_id
+ *
  * @since 1.22
  */
 function wfResetSessionID() {
@@ -3520,7 +3516,7 @@ function wfResetSessionID() {
 /**
  * Initialise php session
  *
- * @param $sessionId Bool
+ * @param bool $sessionId
  */
 function wfSetupSession( $sessionId = false ) {
        global $wgSessionsInMemcached, $wgSessionsInObjectCache, $wgCookiePath, $wgCookieDomain,
@@ -3532,16 +3528,8 @@ function wfSetupSession( $sessionId = false ) {
                # hasn't already been set to the desired value (that causes errors)
                ini_set( 'session.save_handler', $wgSessionHandler );
        }
-       $httpOnlySafe = wfHttpOnlySafe() && $wgCookieHttpOnly;
-       wfDebugLog( 'cookie',
-               'session_set_cookie_params: "' . implode( '", "',
-                       array(
-                               0,
-                               $wgCookiePath,
-                               $wgCookieDomain,
-                               $wgCookieSecure,
-                               $httpOnlySafe ) ) . '"' );
-       session_set_cookie_params( 0, $wgCookiePath, $wgCookieDomain, $wgCookieSecure, $httpOnlySafe );
+       session_set_cookie_params(
+               0, $wgCookiePath, $wgCookieDomain, $wgCookieSecure, $wgCookieHttpOnly );
        session_cache_limiter( 'private, must-revalidate' );
        if ( $sessionId ) {
                session_id( $sessionId );
@@ -3556,8 +3544,8 @@ function wfSetupSession( $sessionId = false ) {
 /**
  * Get an object from the precompiled serialized directory
  *
- * @param $name String
- * @return Mixed: the variable on success, false on failure
+ * @param string $name
+ * @return mixed The variable on success, false on failure
  */
 function wfGetPrecompiledData( $name ) {
        global $IP;
@@ -3575,10 +3563,10 @@ function wfGetPrecompiledData( $name ) {
 /**
  * Get a cache key
  *
- * @param varargs
- * @return String
+ * @param string [$args,...]
+ * @return string
  */
-function wfMemcKey( /*... */ ) {
+function wfMemcKey( /*...*/ ) {
        global $wgCachePrefix;
        $prefix = $wgCachePrefix === false ? wfWikiID() : $wgCachePrefix;
        $args = func_get_args();
@@ -3590,12 +3578,12 @@ function wfMemcKey( /*... */ ) {
 /**
  * Get a cache key for a foreign DB
  *
- * @param $db String
- * @param $prefix String
- * @param varargs String
- * @return String
+ * @param string $db
+ * @param string $prefix
+ * @param string [$args,...]
+ * @return string
  */
-function wfForeignMemcKey( $db, $prefix /*, ... */ ) {
+function wfForeignMemcKey( $db, $prefix /*...*/ ) {
        $args = array_slice( func_get_args(), 2 );
        if ( $prefix ) {
                $key = "$db-$prefix:" . implode( ':', $args );
@@ -3609,7 +3597,7 @@ function wfForeignMemcKey( $db, $prefix /*, ... */ ) {
  * Get an ASCII string identifying this wiki
  * This is used as a prefix in memcached keys
  *
- * @return String
+ * @return string
  */
 function wfWikiID() {
        global $wgDBprefix, $wgDBname;
@@ -3623,7 +3611,7 @@ function wfWikiID() {
 /**
  * Split a wiki ID into DB name and table prefix
  *
- * @param $wiki String
+ * @param string $wiki
  *
  * @return array
  */
@@ -3638,15 +3626,15 @@ function wfSplitWikiID( $wiki ) {
 /**
  * Get a Database object.
  *
- * @param $db Integer: index of the connection to get. May be DB_MASTER for the
+ * @param int $db Index of the connection to get. May be DB_MASTER for the
  *            master (for write queries), DB_SLAVE for potentially lagged read
  *            queries, or an integer >= 0 for a particular server.
  *
- * @param $groups Mixed: query groups. An array of group names that this query
+ * @param string|string[] $groups Query groups. An array of group names that this query
  *                belongs to. May contain a single string if the query is only
  *                in one group.
  *
- * @param string $wiki the wiki ID, or false for the current wiki
+ * @param string|bool $wiki The wiki ID, or false for the current wiki
  *
  * Note: multiple calls to wfGetDB(DB_SLAVE) during the course of one request
  * will always return the same object, unless the underlying connection or load
@@ -3664,7 +3652,7 @@ function &wfGetDB( $db, $groups = array(), $wiki = false ) {
 /**
  * Get a load balancer object.
  *
- * @param string $wiki wiki ID, or false for the current wiki
+ * @param string|bool $wiki wiki ID, or false for the current wiki
  * @return LoadBalancer
  */
 function wfGetLB( $wiki = false ) {
@@ -3708,7 +3696,7 @@ function wfFindFile( $title, $options = array() ) {
  * Get an object referring to a locally registered file.
  * Returns a valid placeholder object if the file does not exist.
  *
- * @param $title Title|String
+ * @param Title|string $title
  * @return LocalFile|null A File, or null if passed an invalid Title
  */
 function wfLocalFile( $title ) {
@@ -3718,7 +3706,7 @@ function wfLocalFile( $title ) {
 /**
  * Should low-performance queries be disabled?
  *
- * @return Boolean
+ * @return bool
  * @codeCoverageIgnore
  */
 function wfQueriesMustScale() {
@@ -3735,7 +3723,7 @@ function wfQueriesMustScale() {
  * except for 'index' and 'load' which use $wgScript/$wgLoadScript
  *
  * @param string $script script filename, sans extension
- * @return String
+ * @return string
  */
 function wfScript( $script = 'index' ) {
        global $wgScriptPath, $wgScriptExtension, $wgScript, $wgLoadScript;
@@ -3775,8 +3763,8 @@ function wfGetScriptUrl() {
  * Convenience function converts boolean values into "true"
  * or "false" (string) values
  *
- * @param $value Boolean
- * @return String
+ * @param bool $value
+ * @return string
  */
 function wfBoolToStr( $value ) {
        return $value ? 'true' : 'false';
@@ -3799,7 +3787,7 @@ function wfGetNull() {
  * a no-op if there are no slaves.
  *
  * @param int|bool $maxLag (deprecated)
- * @param mixed $wiki Wiki identifier accepted by wfGetLB
+ * @param string|bool $wiki Wiki identifier accepted by wfGetLB
  * @param string|bool $cluster Cluster name accepted by LBFactory. Default: false.
  */
 function wfWaitForSlaves( $maxLag = false, $wiki = false, $cluster = false ) {
@@ -3823,14 +3811,15 @@ function wfWaitForSlaves( $maxLag = false, $wiki = false, $cluster = false ) {
 }
 
 /**
- * Count down from $n to zero on the terminal, with a one-second pause
+ * Count down from $seconds to zero on the terminal, with a one-second pause
  * between showing each number. For use in command-line scripts.
+ *
  * @codeCoverageIgnore
- * @param $n int
+ * @param int $seconds
  */
-function wfCountDown( $n ) {
-       for ( $i = $n; $i >= 0; $i-- ) {
-               if ( $i != $n ) {
+function wfCountDown( $seconds ) {
+       for ( $i = $seconds; $i >= 0; $i-- ) {
+               if ( $i != $seconds ) {
                        echo str_repeat( "\x08", strlen( $i + 1 ) );
                }
                echo $i;
@@ -3847,8 +3836,8 @@ function wfCountDown( $n ) {
  * Additional characters can be defined in $wgIllegalFileChars (see bug 20489)
  * By default, $wgIllegalFileChars = ':'
  *
- * @param $name Mixed: filename to process
- * @return String
+ * @param string $name Filename to process
+ * @return string
  */
 function wfStripIllegalFilenameChars( $name ) {
        global $wgIllegalFileChars;
@@ -3865,7 +3854,7 @@ function wfStripIllegalFilenameChars( $name ) {
 /**
  * Set PHP's memory limit to the larger of php.ini or $wgMemoryLimit;
  *
- * @return Integer value memory was set to.
+ * @return int Value the memory limit was set to.
  */
 function wfMemoryLimit() {
        global $wgMemoryLimit;
@@ -3892,8 +3881,8 @@ function wfMemoryLimit() {
 /**
  * Converts shorthand byte notation to integer form
  *
- * @param $string String
- * @return Integer
+ * @param string $string
+ * @return int
  */
 function wfShorthandToInteger( $string = '' ) {
        $string = trim( $string );
@@ -3924,7 +3913,7 @@ function wfShorthandToInteger( $string = '' ) {
  * See unit test for examples.
  *
  * @param string $code The language code.
- * @return String: The language code which complying with BCP 47 standards.
+ * @return string The language code which complying with BCP 47 standards.
  */
 function wfBCP47( $code ) {
        $codeSegment = explode( '-', $code );
@@ -4005,7 +3994,7 @@ function wfGetLangConverterCacheStorage() {
  * @param array $args parameters passed to hook functions
  * @param string|null $deprecatedVersion optionally mark hook as deprecated with version number
  *
- * @return Boolean True if no handler aborted the hook
+ * @return bool True if no handler aborted the hook
  */
 function wfRunHooks( $event, array $args = array(), $deprecatedVersion = null ) {
        return Hooks::run( $event, $args, $deprecatedVersion );
@@ -4015,8 +4004,8 @@ function wfRunHooks( $event, array $args = array(), $deprecatedVersion = null )
  * Wrapper around php's unpack.
  *
  * @param string $format The format string (See php's docs)
- * @param $data: A binary string of binary data
- * @param $length integer or false: The minimum length of $data. This is to
+ * @param string $data A binary string of binary data
+ * @param int|bool $length The minimum length of $data or false. This is to
  *     prevent reading beyond the end of $data. false to disable the check.
  *
  * Also be careful when using this function to read unsigned 32 bit integer
@@ -4057,7 +4046,7 @@ function wfUnpack( $format, $data, $length = false ) {
  *      i.e. articles where the image may occur inline.
  *
  * @param string $name the image name to check
- * @param $contextTitle Title|bool the page on which the image occurs, if known
+ * @param Title|bool $contextTitle The page on which the image occurs, if known
  * @param string $blacklist wikitext of a file blacklist
  * @return bool
  */
@@ -4159,7 +4148,7 @@ function wfGetIP() {
  * Useful to tell if X-Forwarded-For data is possibly bogus.
  * Squid cache servers for the site are whitelisted.
  *
- * @param $ip String
+ * @param string $ip
  * @return bool
  */
 function wfIsTrustedProxy( $ip ) {
@@ -4170,7 +4159,8 @@ function wfIsTrustedProxy( $ip ) {
 
 /**
  * Checks if an IP matches a proxy we've configured.
- * @param $ip String
+ *
+ * @param string $ip
  * @return bool
  * @since 1.23 Supports CIDR ranges in $wgSquidServersNoPurge
  */
index 69629e0..29bbd52 100644 (file)
@@ -77,6 +77,7 @@ abstract class QueryPage extends SpecialPage {
                                array( 'DeadendPagesPage', 'Deadendpages' ),
                                array( 'DoubleRedirectsPage', 'DoubleRedirects' ),
                                array( 'FileDuplicateSearchPage', 'FileDuplicateSearch' ),
+                               array( 'ListDuplicatedFilesPage', 'ListDuplicatedFiles'),
                                array( 'LinkSearchPage', 'LinkSearch' ),
                                array( 'ListredirectsPage', 'Listredirects' ),
                                array( 'LonelyPagesPage', 'Lonelypages' ),
index 9312a0d..38c3623 100644 (file)
@@ -960,9 +960,10 @@ abstract class Skin extends ContextSource {
        }
 
        /**
-        * @param $desc
-        * @param $page
-        * @return string
+        * Returns an HTML link for use in the footer
+        * @param string $desc i18n message key for the link text
+        * @param string $page i18n message key for the page to link to
+        * @return string HTML anchor
         */
        public function footerLink( $desc, $page ) {
                // if the link description has been set to "-" in the default language,
index ab7524c..a3dadd0 100644 (file)
@@ -88,12 +88,6 @@ class WebResponse {
                        $expire = time() + $wgCookieExpiration;
                }
 
-               // Don't mark the cookie as httpOnly if the requesting user-agent is
-               // known to have trouble with httpOnly cookies.
-               if ( !wfHttpOnlySafe() ) {
-                       $options['httpOnly'] = false;
-               }
-
                $func = $options['raw'] ? 'setrawcookie' : 'setcookie';
 
                if ( wfRunHooks( 'WebResponseSetCookie', array( &$name, &$value, &$expire, $options ) ) ) {
index 4bf8fd3..6cf718c 100644 (file)
@@ -655,7 +655,10 @@ class MediaWiki {
                        $info['host'],
                        isset( $info['port'] ) ? $info['port'] : 80,
                        $errno,
-                       $errstr
+                       $errstr,
+                       // If it takes more than 100ms to connect to ourselves there
+                       // is a problem elsewhere.
+                       0.1
                );
                wfRestoreWarnings();
                if ( !$sock ) {
index b4aa303..af74f47 100644 (file)
@@ -104,9 +104,10 @@ class WikiPage implements Page, IDBAccessObject {
        /**
         * Create a WikiPage object of the appropriate class for the given title.
         *
-        * @param $title Title
+        * @param Title $title
+        *
         * @throws MWException
-        * @return WikiPage object of the appropriate type
+        * @return WikiPage Object of the appropriate type
         */
        public static function factory( Title $title ) {
                $ns = $title->getNamespace();
@@ -1468,12 +1469,13 @@ class WikiPage implements Page, IDBAccessObject {
        }
 
        /**
-        * @param $section null|bool|int or a section number (0, 1, 2, T1, T2...)
-        * @param string $text new text of the section
-        * @param string $sectionTitle new section's subject, only if $section is 'new'
-        * @param string $edittime revision timestamp or null to use the current revision
+        * @param mixed $section Null/false, a section number (0, 1, 2, T1, T2, ...) or "new".
+        * @param string $text New text of the section.
+        * @param string $sectionTitle New section's subject, only if $section is "new".
+        * @param string $edittime Revision timestamp or null to use the current revision.
+        *
         * @throws MWException
-        * @return String new complete article text, or null if error
+        * @return string New complete article text, or null if error.
         *
         * @deprecated since 1.21, use replaceSectionContent() instead
         */
@@ -1486,13 +1488,15 @@ class WikiPage implements Page, IDBAccessObject {
                }
 
                if ( !$this->supportsSections() ) {
-                       throw new MWException( "sections not supported for content model " . $this->getContentHandler()->getModelID() );
+                       throw new MWException( "sections not supported for content model " .
+                               $this->getContentHandler()->getModelID() );
                }
 
                // could even make section title, but that's not required.
                $sectionContent = ContentHandler::makeContent( $text, $this->getTitle() );
 
-               $newContent = $this->replaceSectionContent( $section, $sectionContent, $sectionTitle, $edittime );
+               $newContent = $this->replaceSectionContent( $section, $sectionContent, $sectionTitle,
+                       $edittime );
 
                return ContentHandler::getContentText( $newContent );
        }
@@ -1500,7 +1504,7 @@ class WikiPage implements Page, IDBAccessObject {
        /**
         * Returns true if this page's content model supports sections.
         *
-        * @return boolean whether sections are supported.
+        * @return bool
         *
         * @todo The skin should check this and not offer section functionality if sections are not supported.
         * @todo The EditPage should check this and not offer section functionality if sections are not supported.
@@ -1510,17 +1514,18 @@ class WikiPage implements Page, IDBAccessObject {
        }
 
        /**
-        * @param $section null|bool|int or a section number (0, 1, 2, T1, T2...)
-        * @param $sectionContent Content: new content of the section
-        * @param string $sectionTitle new section's subject, only if $section is 'new'
-        * @param string $edittime revision timestamp or null to use the current revision
+        * @param mixed $section Null/false, a section number (0, 1, 2, T1, T2, ...) or "new".
+        * @param Content $sectionContent New content of the section.
+        * @param string $sectionTitle New section's subject, only if $section is "new".
+        * @param string $edittime Revision timestamp or null to use the current revision.
         *
         * @throws MWException
-        * @return Content new complete article content, or null if error
+        * @return Content New complete article content, or null if error.
         *
         * @since 1.21
         */
-       public function replaceSectionContent( $section, Content $sectionContent, $sectionTitle = '', $edittime = null ) {
+       public function replaceSectionContent( $section, Content $sectionContent, $sectionTitle = '',
+               $edittime = null ) {
                wfProfileIn( __METHOD__ );
 
                if ( strval( $section ) == '' ) {
@@ -1529,7 +1534,8 @@ class WikiPage implements Page, IDBAccessObject {
                } else {
                        if ( !$this->supportsSections() ) {
                                wfProfileOut( __METHOD__ );
-                               throw new MWException( "sections not supported for content model " . $this->getContentHandler()->getModelID() );
+                               throw new MWException( "sections not supported for content model " .
+                                       $this->getContentHandler()->getModelID() );
                        }
 
                        // Bug 30711: always use current version when adding a new section
@@ -2612,9 +2618,11 @@ class WikiPage implements Page, IDBAccessObject {
        /**
         * Take an array of page restrictions and flatten it to a string
         * suitable for insertion into the page_restrictions field.
-        * @param $limit Array
+        *
+        * @param string[] $limit
+        *
         * @throws MWException
-        * @return String
+        * @return string
         */
        protected static function flattenRestrictions( $limit ) {
                if ( !is_array( $limit ) ) {
index 91ab0ca..b0794fb 100644 (file)
@@ -1097,7 +1097,6 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
                if ( false === $ret && $this->wasErrorReissuable() ) {
                        # Transaction is gone, like it or not
                        $hadTrx = $this->mTrxLevel; // possible lost transaction
-                       wfDebug( "Connection lost, reconnecting...\n" );
                        $this->mTrxLevel = 0;
                        wfDebug( "Connection lost, reconnecting...\n" );
 
@@ -1109,7 +1108,7 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
                                $elapsed = round( microtime( true ) - $wgRequestTime, 3 );
                                if ( $elapsed < 300 ) {
                                        # Not a database error to lose a transaction after a minute or two
-                                       wfLogDBError( "Connection lost and reconnected after {$elapsed}s, query: $sqlx\n" );
+                                       wfLogDBError( "Connection lost and reconnected after {$elapsed}s, query: $sqlx" );
                                }
                                if ( !$hadTrx ) {
                                        # Should be safe to silently retry
@@ -1153,7 +1152,7 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
                        $this->ignoreErrors( $ignore );
                } else {
                        $sql1line = mb_substr( str_replace( "\n", "\\n", $sql ), 0, 5 * 1024 );
-                       wfLogDBError( "$fname\t{$this->mServer}\t$errno\t$error\t$sql1line\n" );
+                       wfLogDBError( "$fname\t{$this->mServer}\t$errno\t$error\t$sql1line" );
                        wfDebug( "SQL ERROR: " . $error . "\n" );
                        throw new DBQueryError( $this, $error, $errno, $sql, $fname );
                }
index 85be31c..3b70ae1 100644 (file)
@@ -93,7 +93,7 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
                        if ( !$error ) {
                                $error = $this->lastError();
                        }
-                       wfLogDBError( "Error connecting to {$this->mServer}: $error\n" );
+                       wfLogDBError( "Error connecting to {$this->mServer}: $error" );
                        wfDebug( "DB connection error\n" .
                                "Server: $server, User: $user, Password: " .
                                substr( $password, 0, 3 ) . "..., error: " . $error . "\n" );
@@ -108,7 +108,7 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
                        $success = $this->selectDB( $dbName );
                        wfRestoreWarnings();
                        if ( !$success ) {
-                               wfLogDBError( "Error selecting database $dbName on server {$this->mServer}\n" );
+                               wfLogDBError( "Error selecting database $dbName on server {$this->mServer}" );
                                wfDebug( "Error selecting database $dbName on server {$this->mServer} " .
                                        "from client host " . wfHostname() . "\n" );
 
@@ -804,14 +804,18 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
         * @return string
         */
        public function getSoftwareLink() {
+               // MariaDB includes its name in its version string (sent when the connection is opened),
+               // and this is how MariaDB's version of the mysql command-line client identifies MariaDB
+               // servers (see the mariadb_connection() function in libmysql/libmysql.c).
                $version = $this->getServerVersion();
-               if ( strpos( $version, 'MariaDB' ) !== false ) {
+               if ( strpos( $version, 'MariaDB' ) !== false || strpos( $version, '-maria-' ) !== false ) {
                        return '[{{int:version-db-mariadb-url}} MariaDB]';
-               } elseif ( strpos( $version, 'percona' ) !== false ) {
-                       return '[{{int:version-db-percona-url}} Percona Server]';
-               } else {
-                       return '[{{int:version-db-mysql-url}} MySQL]';
                }
+
+               // Percona Server's version suffix is not very distinctive, and @@version_comment
+               // doesn't give the necessary info for source builds, so assume the server is MySQL.
+               // (Even Percona's version of mysql doesn't try to make the distinction.)
+               return '[{{int:version-db-mysql-url}} MySQL]';
        }
 
        /**
index de4c2f5..a1703f0 100644 (file)
@@ -744,13 +744,13 @@ class LoadBalancer {
 
                if ( !is_object( $conn ) ) {
                        // No last connection, probably due to all servers being too busy
-                       wfLogDBError( "LB failure with no last connection. Connection error: {$this->mLastError}\n" );
+                       wfLogDBError( "LB failure with no last connection. Connection error: {$this->mLastError}" );
 
                        // If all servers were busy, mLastError will contain something sensible
                        throw new DBConnectionError( null, $this->mLastError );
                } else {
                        $server = $conn->getProperty( 'mServer' );
-                       wfLogDBError( "Connection error: {$this->mLastError} ({$server})\n" );
+                       wfLogDBError( "Connection error: {$this->mLastError} ({$server})" );
                        $conn->reportConnectionError( "{$this->mLastError} ({$server})" ); // throws DBConnectionError
                }
 
index 2d8214e..2fd1bf6 100644 (file)
@@ -1666,7 +1666,22 @@ abstract class FileBackendStore extends FileBackend {
                }
                $age = time() - wfTimestamp( TS_UNIX, $val['mtime'] );
                $ttl = min( 7 * 86400, max( 300, floor( .1 * $age ) ) );
-               $this->memCache->add( $this->fileCacheKey( $path ), $val, $ttl );
+               $key = $this->fileCacheKey( $path );
+               // Set the cache unless it is currently salted with the value "PURGED".
+               // Using add() handles this except it also is a no-op in that case where
+               // the current value is not "latest" but $val is, so use CAS in that case.
+               if ( !$this->memCache->add( $key, $val, $ttl ) && !empty( $val['latest'] ) ) {
+                       $this->memCache->merge(
+                               $key,
+                               function( BagOStuff $cache, $key, $cValue ) use ( $val ) {
+                                       return ( is_array( $cValue ) && empty( $cValue['latest'] ) )
+                                               ? $val // update the stat cache with the lastest info
+                                               : false; // do nothing (cache is salted or some error happened)
+                               },
+                               $ttl,
+                               1
+                       );
+               }
        }
 
        /**
index 534d7f2..888af37 100644 (file)
@@ -966,11 +966,13 @@ class FileRepo {
         *
         * @param string $src Source file system path, storage path, or virtual URL
         * @param string $dst Virtual URL or storage path
-        * @param string|null $disposition Content-Disposition if given and supported
+        * @param Array|string|null $options An array consisting of a key named headers
+        *   listing extra headers. If a string, taken as content-disposition header.
+        *   (Support for array of options new in 1.23)
         * @return FileRepoStatus
         */
-       final public function quickImport( $src, $dst, $disposition = null ) {
-               return $this->quickImportBatch( array( array( $src, $dst, $disposition ) ) );
+       final public function quickImport( $src, $dst, $options = null ) {
+               return $this->quickImportBatch( array( array( $src, $dst, $options ) ) );
        }
 
        /**
@@ -1007,7 +1009,7 @@ class FileRepo {
         * This is intended for copying generated thumbnails into the repo.
         *
         * All path parameters may be a file system path, storage path, or virtual URL.
-        * When "dispositions" are given they are used as Content-Disposition if supported.
+        * When "headers" are given they are used as HTTP headers if supported.
         *
         * @param array $triples List of (source path, destination path, disposition)
         * @return FileRepoStatus
@@ -1019,11 +1021,20 @@ class FileRepo {
                        list( $src, $dst ) = $triple;
                        $src = $this->resolveToStoragePath( $src );
                        $dst = $this->resolveToStoragePath( $dst );
+
+                       if ( !isset( $triple[2] ) ) {
+                               $headers = array();
+                       } elseif ( is_string( $triple[2] ) ) {
+                               // back-compat
+                               $headers = array( 'Content-Disposition' => $triple[2] );
+                       } elseif ( is_array( $triple[2] ) && isset( $triple[2]['headers'] ) ) {
+                               $headers = $triple[2]['headers'];
+                       }
                        $operations[] = array(
                                'op' => FileBackend::isStoragePath( $src ) ? 'copy' : 'store',
                                'src' => $src,
                                'dst' => $dst,
-                               'disposition' => isset( $triple[2] ) ? $triple[2] : null
+                               'headers' => $headers
                        );
                        $status->merge( $this->initDirectory( dirname( $dst ) ) );
                }
index b1dc5a7..6350052 100644 (file)
     "config-license-gfdl": "רישיון חופשי למסמכים של גנו גרסה 1.3 או חדשה יותר",
     "config-license-pd": "נחלת הכלל",
     "config-license-cc-choose": "בחרו רישיון קריאייטיב קומונז מותאם אישית",
-    "config-license-help": "אתרי ויקי ציבוריים רבים מפרסמים את כל התרומות תחת [http://freedomdefined.org/Definition רישיון חופשי].\nזה עוזר ליצור תחושה של בעלות קהילתית ומעודד תרומה לאורך זמן.\nזה בדרך כלל לא נחוץ לאתר ויקי פרטי או בחברה מסחרית.\n\nאם אתם רוצים אפשרות להשתמש בטקסט מוויקיפדיה ואתם רוצים שוויקיפדיה תוכל לקבל עותקים של טקסטים מהוויקי שלכם, כדאי לכם לבחור ב'''רישיון קריאייטיב קומונז ייחוס–שיתוף זהה''' (CC-BY-SA).\n\nויקיפדיה השתמשה בעבר ברישיון החופשי למסמכים של גנו (GNU FDL או GFDL).\nהוא עדיין רישיון תקין, אבל קשה להבנה.\nכמו־כן, קשה לעשות שימוש חוזר ביצירות שפורסמו לפי GFDL.",
+    "config-license-help": "אתרי ויקי ציבוריים רבים מפרסמים את כל התרומות תחת [http://freedomdefined.org/Definition רישיון חופשי].\nזה עוזר ליצור תחושה של בעלות קהילתית ומעודד תרומה לאורך זמן.\nזה בדרך כלל לא נחוץ לאתר ויקי פרטי או בחברה מסחרית.\n\nאם אתם רוצים אפשרות להשתמש בטקסט מוויקיפדיה ואתם רוצים שוויקיפדיה תוכל לקבל עותקים של טקסטים מהוויקי שלכם, כדאי לכם לבחור ב'''רישיון קריאייטיב קומונז ייחוס–שיתוף זהה''' (CC BY-SA).\n\nויקיפדיה השתמשה בעבר ברישיון החופשי למסמכים של גנו (GNU FDL או GFDL).\nהוא עדיין רישיון תקין, אבל קשה להבנה.\nכמו־כן, קשה לעשות שימוש חוזר ביצירות שפורסמו לפי GFDL.",
     "config-email-settings": "הגדרות דוא״ל",
     "config-enable-email": "להפעיל דוא״ל יוצא",
     "config-enable-email-help": "אם אתם רוצים שדוא״ל יעבוד, [http://www.php.net/manual/en/mail.configuration.php אפשרויות הדוא״ל של PHP] צריכות להיות מוגדרות נכון.\nאם אינכם רוצים להפעיל שום אפשרויות דוא״ל, כבו אותן כאן ועכשיו.",
     "config-nofile": "הקובץ \"$1\" לא נמצא. האם הוא נמחק?",
     "mainpagetext": "'''תוכנת מדיה־ויקי הותקנה בהצלחה.'''",
     "mainpagedocfooter": "היעזרו ב[//meta.wikimedia.org/wiki/Help:Contents מדריך למשתמש] למידע על שימוש בתוכנת הוויקי.\n\n== קישורים שימושיים ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings רשימת ההגדרות]\n* [//www.mediawiki.org/wiki/Manual:FAQ שאלות ותשובות על מדיה־ויקי]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce רשימת התפוצה על השקת גרסאות]\n* [//www.mediawiki.org/wiki/Localisation#Translation_resources תרגום מדיה־ויקי לשפה שלך]"
-}
\ No newline at end of file
+}
index ee11599..e4caf35 100644 (file)
@@ -798,4 +798,18 @@ abstract class MediaHandler {
        public function getDefaultRenderLanguage( File $file ) {
                return null;
        }
+
+       /**
+        * If its an audio file, return the length of the file. Otherwise 0.
+        *
+        * File::getLength() existed for a long time, but was calling a method
+        * that only existed in some subclasses of this class (The TMH ones).
+        *
+        * @param File $file
+        * @return float Length in seconds
+        * @since 1.23
+        */
+       public function getLength( $file ) {
+               return 0.0;
+       }
 }
index 4a27692..217142c 100644 (file)
@@ -142,7 +142,7 @@ abstract class BagOStuff {
         * @return bool success
         */
        protected function mergeViaLock( $key, closure $callback, $exptime = 0, $attempts = 10 ) {
-               if ( !$this->lock( $key, 60 ) ) {
+               if ( !$this->lock( $key, 6 ) ) {
                        return false;
                }
 
@@ -168,7 +168,7 @@ abstract class BagOStuff {
         * @param $timeout integer [optional]
         * @return bool success
         */
-       public function lock( $key, $timeout = 60 ) {
+       public function lock( $key, $timeout = 6 ) {
                $timestamp = microtime( true ); // starting UNIX timestamp
                if ( $this->add( "{$key}:lock", 1, $timeout ) ) {
                        return true;
index 91a2de2..e824a61 100644 (file)
@@ -350,7 +350,7 @@ class SpecialPage {
        function setHeaders() {
                $out = $this->getOutput();
                $out->setArticleRelated( false );
-               $out->setRobotPolicy( "noindex,nofollow" );
+               $out->setRobotPolicy( $this->getRobotPolicy() );
                $out->setPageTitle( $this->getDescription() );
        }
 
@@ -587,6 +587,17 @@ class SpecialPage {
                return $this->getContext()->getTitle();
        }
 
+       /**
+        * Return the robot policy. Derived classes that override this can change
+        * the robot policy set by setHeaders() from the default 'noindex,nofollow'.
+        *
+        * @return string
+        * @since 1.23
+        */
+       protected function getRobotPolicy() {
+               return 'noindex,nofollow';
+       }
+
        /**
         * Wrapper around wfMessage that sets the current context.
         *
index c6735e6..c4b840a 100644 (file)
@@ -50,28 +50,28 @@ class SpecialPageFactory {
        private static $list = array(
                // Maintenance Reports
                'BrokenRedirects'           => 'BrokenRedirectsPage',
-               'Deadendpages'              => 'DeadendpagesPage',
+               'Deadendpages'              => 'DeadendPagesPage',
                'DoubleRedirects'           => 'DoubleRedirectsPage',
-               'Longpages'                 => 'LongpagesPage',
-               'Ancientpages'              => 'AncientpagesPage',
-               'Lonelypages'               => 'LonelypagesPage',
+               'Longpages'                 => 'LongPagesPage',
+               'Ancientpages'              => 'AncientPagesPage',
+               'Lonelypages'               => 'LonelyPagesPage',
                'Fewestrevisions'           => 'FewestrevisionsPage',
-               'Withoutinterwiki'          => 'WithoutinterwikiPage',
+               'Withoutinterwiki'          => 'WithoutInterwikiPage',
                'Protectedpages'            => 'SpecialProtectedpages',
                'Protectedtitles'           => 'SpecialProtectedtitles',
                'Shortpages'                => 'ShortpagesPage',
-               'Uncategorizedcategories'   => 'UncategorizedcategoriesPage',
-               'Uncategorizedimages'       => 'UncategorizedimagesPage',
-               'Uncategorizedpages'        => 'UncategorizedpagesPage',
-               'Uncategorizedtemplates'    => 'UncategorizedtemplatesPage',
-               'Unusedcategories'          => 'UnusedcategoriesPage',
+               'Uncategorizedcategories'   => 'UncategorizedCategoriesPage',
+               'Uncategorizedimages'       => 'UncategorizedImagesPage',
+               'Uncategorizedpages'        => 'UncategorizedPagesPage',
+               'Uncategorizedtemplates'    => 'UncategorizedTemplatesPage',
+               'Unusedcategories'          => 'UnusedCategoriesPage',
                'Unusedimages'              => 'UnusedimagesPage',
                'Unusedtemplates'           => 'UnusedtemplatesPage',
                'Unwatchedpages'            => 'UnwatchedpagesPage',
-               'Wantedcategories'          => 'WantedcategoriesPage',
-               'Wantedfiles'               => 'WantedfilesPage',
-               'Wantedpages'               => 'WantedpagesPage',
-               'Wantedtemplates'           => 'WantedtemplatesPage',
+               'Wantedcategories'          => 'WantedCategoriesPage',
+               'Wantedfiles'               => 'WantedFilesPage',
+               'Wantedpages'               => 'WantedPagesPage',
+               'Wantedtemplates'           => 'WantedTemplatesPage',
 
                // List of pages
                'Allpages'                  => 'SpecialAllpages',
@@ -117,6 +117,7 @@ class SpecialPageFactory {
                'FileDuplicateSearch'       => 'FileDuplicateSearchPage',
                'Upload'                    => 'SpecialUpload',
                'UploadStash'               => 'SpecialUploadStash',
+               'ListDuplicatedFiles'       => 'ListDuplicatedFilesPage',
 
                // Data and tools
                'Statistics'                => 'SpecialStatistics',
@@ -127,7 +128,7 @@ class SpecialPageFactory {
 
                // Redirecting special pages
                'LinkSearch'                => 'LinkSearchPage',
-               'Randompage'                => 'Randompage',
+               'Randompage'                => 'RandomPage',
                'RandomInCategory'          => 'SpecialRandomInCategory',
                'Randomredirect'            => 'SpecialRandomredirect',
 
@@ -145,7 +146,7 @@ class SpecialPageFactory {
                'Export'                    => 'SpecialExport',
                'Import'                    => 'SpecialImport',
                'Undelete'                  => 'SpecialUndelete',
-               'Whatlinkshere'             => 'SpecialWhatlinkshere',
+               'Whatlinkshere'             => 'SpecialWhatLinksHere',
                'MergeHistory'              => 'SpecialMergeHistory',
                'ExpandTemplates'           => 'SpecialExpandTemplates',
 
@@ -186,7 +187,7 @@ class SpecialPageFactory {
                        wfProfileIn( __METHOD__ );
 
                        if ( !$wgDisableCounters ) {
-                               self::$list['Popularpages'] = 'PopularpagesPage';
+                               self::$list['Popularpages'] = 'PopularPagesPage';
                        }
 
                        if ( !$wgDisableInternalSearch ) {
index 1fed516..dd6bec2 100644 (file)
@@ -291,6 +291,7 @@ class SpecialActiveUsers extends SpecialPage {
                                self::doQueryCacheUpdate( $dbw, $window );
                        }
                }
+
                return ( time() -
                        ( $cTime ? wfTimestamp( TS_UNIX, $cTime ) : $wgActiveUserDays * 86400 ) );
        }
@@ -383,7 +384,7 @@ class SpecialActiveUsers extends SpecialPage {
                        $newRows = array();
                        foreach ( $names as $name => $lastEditTime ) {
                                $newRows[] = array(
-                                       'qcc_type'  => 'activeusers',
+                                       'qcc_type' => 'activeusers',
                                        'qcc_namespace' => NS_USER,
                                        'qcc_title' => $name,
                                        'qcc_value' => wfTimestamp( TS_UNIX, $lastEditTime ),
index 71bb27a..6cef130 100644 (file)
@@ -352,7 +352,7 @@ class AllmessagesTablePager extends TablePager {
                                                'grouppath' => 'mediawiki',
                                                'query' => 'language:' . $this->getLanguage()->getCode() . '^25 ' .
                                                        'messageid:"MediaWiki:' . $value . '"^10 "' .
-                                                       $this->msg ( $value )->inLanguage ( 'en' )->plain() . '"'
+                                                       $this->msg( $value )->inLanguage( 'en' )->plain() . '"'
                                        ) ),
                                        $this->msg( 'allmessages-filter-translate' )->text()
                                );
index 1e2d557..97e7238 100644 (file)
@@ -216,6 +216,7 @@ class SpecialAllpages extends IncludableSpecialPage {
                // since generating it will cause a lot of scanning
                if ( $count > $this->maxTopLevelPages ) {
                        $this->showChunk( $namespace, $from, $to, $hideredirects );
+
                        return;
                }
 
index d19968f..79636b1 100644 (file)
@@ -125,6 +125,7 @@ class SpecialBookSources extends SpecialPage {
                $form .= '&#160;' . Xml::submitButton( $this->msg( 'booksources-go' )->text() ) . "</p>\n";
                $form .= Html::closeElement( 'form' ) . "\n";
                $form .= Html::closeElement( 'fieldset' ) . "\n";
+
                return $form;
        }
 
index 2bd14c7..0356d45 100644 (file)
@@ -167,6 +167,7 @@ class SpecialChangePassword extends FormSpecialPage {
                        }
                        $query = $request->getVal( 'returntoquery' );
                        $this->getOutput()->redirect( $titleObj->getFullURL( $query ) );
+
                        return true;
                }
 
index 3642750..af4f852 100644 (file)
@@ -26,7 +26,6 @@
  *
  * @ingroup SpecialPage
  */
-
 class SpecialContributions extends IncludableSpecialPage {
        protected $opts;
 
@@ -66,6 +65,7 @@ class SpecialContributions extends IncludableSpecialPage {
                        if ( !$this->including() ) {
                                $out->addHTML( $this->getForm() );
                        }
+
                        return;
                }
 
@@ -951,8 +951,12 @@ class ContribsPager extends ReverseChronologicalPager {
                 * to extensions to subscribe to the hook to parse the row.
                 */
                wfSuppressWarnings();
-               $rev = new Revision( $row );
-               $validRevision = (bool)$rev->getId();
+               try {
+                       $rev = new Revision( $row );
+                       $validRevision = (bool)$rev->getId();
+               } catch ( MWException $e ) {
+                       $validRevision = false;
+               }
                wfRestoreWarnings();
 
                if ( $validRevision ) {
index 63d4ec9..d781e6d 100644 (file)
@@ -27,7 +27,6 @@
  *
  * @ingroup SpecialPage
  */
-
 class SpecialCreateAccount extends SpecialRedirectToSpecial {
        function __construct() {
                parent::__construct( 'CreateAccount', 'Userlogin', 'signup', array( 'returnto', 'returntoquery', 'uselang' ) );
index 6c3cb95..3115215 100644 (file)
@@ -276,7 +276,7 @@ class DeletedContribsPager extends IndexPager {
 class DeletedContributionsPage extends SpecialPage {
        function __construct() {
                parent::__construct( 'DeletedContributions', 'deletedhistory',
-               /*listed*/true, /*function*/false, /*file*/false );
+                       /*listed*/true, /*function*/false, /*file*/false );
        }
 
        /**
index 98d5fea..68e8703 100644 (file)
@@ -162,14 +162,14 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
                        }
 
                        if ( count( $toWatch ) > 0 ) {
-                               $this->successMessage .= ' ' . $this->msg( 'watchlistedit-raw-added'
-                               )->numParams( count( $toWatch ) )->parse();
+                               $this->successMessage .= ' ' . $this->msg( 'watchlistedit-raw-added' )
+                                       ->numParams( count( $toWatch ) )->parse();
                                $this->showTitles( $toWatch, $this->successMessage );
                        }
 
                        if ( count( $toUnwatch ) > 0 ) {
-                               $this->successMessage .= ' ' . $this->msg( 'watchlistedit-raw-removed'
-                               )->numParams( count( $toUnwatch ) )->parse();
+                               $this->successMessage .= ' ' . $this->msg( 'watchlistedit-raw-removed' )
+                                       ->numParams( count( $toUnwatch ) )->parse();
                                $this->showTitles( $toUnwatch, $this->successMessage );
                        }
                } else {
index 7241105..61925cf 100644 (file)
@@ -125,9 +125,7 @@ class SpecialExpandTemplates extends SpecialPage {
                        }
 
                        $this->showHtmlPreview( $title, $rawhtml, $out );
-
                }
-
        }
 
        /**
index e7ced52..eb1c139 100644 (file)
@@ -36,6 +36,7 @@ class SpecialFilepath extends RedirectSpecialPage {
        // implement by redirecting through Special:Redirect/file
        function getRedirect( $par ) {
                $file = $par ?: $this->getRequest()->getText( 'file' );
+
                return SpecialPage::getSafeTitleFor( 'Redirect', 'file/' . $file );
        }
 
diff --git a/includes/specials/SpecialListDuplicatedFiles.php b/includes/specials/SpecialListDuplicatedFiles.php
new file mode 100644 (file)
index 0000000..9401fca
--- /dev/null
@@ -0,0 +1,112 @@
+<?php
+/**
+ * Implements Special:ListDuplicatedFiles
+ *
+ * Copyright © 2013 Brian Wolff
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup SpecialPage
+ * @author Brian Wolff
+ */
+
+/**
+ * Special:ListDuplicatedFiles Lists all files where the current version is
+ *   a duplicate of the current version of some other file.
+ * @ingroup SpecialPage
+ */
+class ListDuplicatedFilesPage extends QueryPage {
+       function __construct( $name = 'ListDuplicatedFiles' ) {
+               parent::__construct( $name );
+       }
+
+       function isExpensive() {
+               return true;
+       }
+
+       function isSyndicated() {
+               return false;
+       }
+
+       /**
+        * Get all the duplicates by grouping on sha1s.
+        *
+        * A cheaper (but less useful) version of this
+        * query would be to not care how many duplicates a
+        * particular file has, and do a self-join on image table.
+        * However this version should be no more expensive then
+        * Special:MostLinked, which seems to get handled fine
+        * with however we are doing cached special pages.
+        */
+       function getQueryInfo() {
+               return array(
+                       'tables' => array( 'image' ),
+                       'fields' => array(
+                               'namespace' => NS_FILE,
+                               'title' => 'MIN(img_name)',
+                               'value' => 'count(*)'
+                       ),
+                       'options' => array(
+                               'GROUP BY' => 'img_sha1',
+                               'HAVING' => 'count(*) > 1',
+                       ),
+               );
+       }
+
+       /**
+        * Pre-fill the link cache
+        *
+        * @param DatabaseBase $db
+        * @param ResultWrapper $res
+        */
+       function preprocessResults( $db, $res ) {
+               if ( $res->numRows() > 0 ) {
+                       $linkBatch = new LinkBatch();
+
+                       foreach ( $res as $row ) {
+                               $linkBatch->add( $row->namespace, $row->title );
+                       }
+
+                       $res->seek( 0 );
+                       $linkBatch->execute();
+               }
+       }
+
+
+       /**
+        * @param Skin $skin
+        * @param object $result Result row
+        * @return string
+        */
+       function formatResult( $skin, $result ) {
+               // Future version might include a list of the first 5 duplicates
+               // perhaps separated by an "↔".
+               $image1 = Title::makeTitle( $result->namespace, $result->title );
+               $dupeSearch = SpecialPage::getTitleFor( 'FileDuplicateSearch', $image1->getDBKey() );
+
+               $msg = wfMessage( 'listduplicatedfiles-entry' )
+                       ->params( $image1->getText() )
+                       ->numParams( $result->value - 1 )
+                       ->params( $dupeSearch->getPrefixedDBKey() );
+
+               return $msg->parse();
+       }
+
+       protected function getGroupName() {
+               return 'media';
+       }
+}
index ba3e73f..9f0d127 100644 (file)
@@ -129,7 +129,7 @@ class ImageListPager extends TablePager {
                $conds = array();
 
                if ( !is_null( $this->mUserName ) ) {
-                       $conds[ $prefix . '_user_text' ] = $this->mUserName;
+                       $conds[$prefix . '_user_text'] = $this->mUserName;
                }
 
                if ( $this->mSearch !== '' ) {
@@ -215,6 +215,7 @@ class ImageListPager extends TablePager {
                // for two different tables, without reimplementing
                // the pager class.
                $qi = $this->getQueryInfoReal( $this->mTableName );
+
                return $qi;
        }
 
@@ -338,7 +339,7 @@ class ImageListPager extends TablePager {
                $topRes2 = $res2->next();
                $resultArray = array();
                for ( $i = 0; $i < $limit && $topRes1 && $topRes2; $i++ ) {
-                       if ( strcmp( $topRes1->{ $this->mIndexField }, $topRes2->{ $this->mIndexField } ) > 0 ) {
+                       if ( strcmp( $topRes1->{$this->mIndexField}, $topRes2->{$this->mIndexField} ) > 0 ) {
                                if ( !$ascending ) {
                                        $resultArray[] = $topRes1;
                                        $topRes1 = $res1->next();
@@ -364,6 +365,7 @@ class ImageListPager extends TablePager {
                        $resultArray[] = $topRes2;
                        $topRes2 = $res2->next();
                }
+
                return new FakeResultWrapper( $resultArray );
        }
 
@@ -409,6 +411,7 @@ class ImageListPager extends TablePager {
                                // If statement for paranoia
                                if ( $file ) {
                                        $thumb = $file->transform( array( 'width' => 180, 'height' => 360 ) );
+
                                        return $thumb->toHtml( array( 'desc-link' => true ) );
                                } else {
                                        return htmlspecialchars( $value );
@@ -493,6 +496,7 @@ class ImageListPager extends TablePager {
                        'checked' => $this->mShowAll,
                        'tabindex' => 4,
                ) );
+
                return Html::openElement( 'form',
                        array( 'method' => 'get', 'action' => $wgScript, 'id' => 'mw-listfiles-form' )
                ) .
index dd78c4c..50af915 100644 (file)
@@ -84,6 +84,7 @@ class MIMEsearchPage extends QueryPage {
                                ),
                        ),
                );
+
                return $qi;
        }
 
index ad6b788..0471caf 100644 (file)
@@ -23,6 +23,7 @@
  * @ingroup SpecialPage
  * @author Ævar Arnfjörð Bjarmason <avarab@gmail.com>
  */
+
 class MostrevisionsPage extends FewestrevisionsPage {
        function __construct( $name = 'Mostrevisions' ) {
                parent::__construct( $name );
index c054ef7..91ef797 100644 (file)
@@ -593,8 +593,8 @@ class MovePageForm extends UnlistedSpecialPage {
                $dbr = wfGetDB( DB_MASTER );
                if ( $this->moveSubpages && (
                        MWNamespace::hasSubpages( $nt->getNamespace() ) || (
-                               $this->moveTalk &&
-                                       MWNamespace::hasSubpages( $nt->getTalkPage()->getNamespace() )
+                               $this->moveTalk
+                                       && MWNamespace::hasSubpages( $nt->getTalkPage()->getNamespace() )
                        )
                ) ) {
                        $conds = array(
index 41119f9..9b8d52b 100644 (file)
@@ -108,6 +108,7 @@ class SpecialAllMyUploads extends RedirectSpecialPage {
 
        function getRedirect( $subpage ) {
                $this->mAddedRedirectParams['ilshowall'] = 1;
+
                return SpecialPage::getTitleFor( 'Listfiles', $this->getUser()->getName() );
        }
 }
index 37d2973..c10a618 100644 (file)
@@ -20,6 +20,7 @@
  * @file
  * @ingroup SpecialPage
  */
+
 class SpecialNewFiles extends IncludableSpecialPage {
        public function __construct() {
                parent::__construct( 'Newimages' );
index 6c2ffe9..17115e8 100644 (file)
@@ -39,6 +39,7 @@ class SpecialPermanentLink extends RedirectSpecialPage {
                        throw new ErrorPageError( 'nopagetitle', 'nopagetext' );
                }
                $this->mAddedRedirectParams['oldid'] = $subpage;
+
                return true;
        }
 }
index 4e2f0e7..e877b4e 100644 (file)
@@ -207,6 +207,7 @@ class SpecialRandomInCategory extends SpecialPage {
                        $qi['conds'][] = 'cl_timestamp ' . $op . ' ' .
                                $dbr->addQuotes( $dbr->timestamp( $minClTime ) );
                }
+
                return $qi;
        }
 
@@ -229,6 +230,7 @@ class SpecialRandomInCategory extends SpecialPage {
                }
 
                $ts = ( $this->maxTimestamp - $this->minTimestamp ) * $rand + $this->minTimestamp;
+
                return intval( $ts );
        }
 
@@ -258,6 +260,7 @@ class SpecialRandomInCategory extends SpecialPage {
                if ( !$res ) {
                        throw new MWException( 'No entries in category' );
                }
+
                return array( wfTimestamp( TS_UNIX, $res->low ), wfTimestamp( TS_UNIX, $res->high ) );
        }
 
index 720d0a8..2c563c6 100644 (file)
@@ -45,6 +45,7 @@ class SpecialRecentChanges extends ChangesListSpecialPage {
                        $query = $this->getFeedQuery();
                        $query['feedformat'] = $feedFormat === 'atom' ? 'atom' : 'rss';
                        $this->getOutput()->redirect( wfAppendQuery( wfScript( 'api' ), $query ) );
+
                        return;
                }
 
@@ -272,6 +273,7 @@ class SpecialRecentChanges extends ChangesListSpecialPage {
                if ( $query['limit'] > $wgFeedLimit ) {
                        $query['limit'] = $wgFeedLimit;
                }
+
                return $query;
        }
 
@@ -492,6 +494,7 @@ class SpecialRecentChanges extends ChangesListSpecialPage {
        public function checkLastModified() {
                $dbr = $this->getDB();
                $lastmod = $dbr->selectField( 'recentchanges', 'MAX(rc_timestamp)', false, __METHOD__ );
+
                return $lastmod;
        }
 
index c4f40be..526e949 100644 (file)
@@ -38,6 +38,7 @@ class SpecialRecentChangesLinked extends SpecialRecentChanges {
                $opts = parent::getDefaultOptions();
                $opts->add( 'target', '' );
                $opts->add( 'showlinkedto', false );
+
                return $opts;
        }
 
@@ -58,6 +59,7 @@ class SpecialRecentChangesLinked extends SpecialRecentChanges {
                if ( !$title || $title->isExternal() ) {
                        $outputPage->addHtml( '<div class="errorbox">' . $this->msg( 'allpagesbadtitle' )
                                        ->parse() . '</div>' );
+
                        return false;
                }
 
@@ -91,7 +93,7 @@ class SpecialRecentChangesLinked extends SpecialRecentChanges {
                                'wl_user' => $uid,
                                'wl_title=rc_title',
                                'wl_namespace=rc_namespace'
-                       ));
+                       ) );
                }
                if ( $this->getUser()->isAllowed( 'rollback' ) ) {
                        $tables[] = 'page';
@@ -256,6 +258,7 @@ class SpecialRecentChangesLinked extends SpecialRecentChanges {
                                $this->rclTargetTitle = false;
                        }
                }
+
                return $this->rclTargetTitle;
        }
 }
index 8ec6f85..4926d6d 100644 (file)
@@ -78,6 +78,7 @@ class SpecialRedirect extends FormSpecialPage {
                        return null;
                }
                $userpage = Title::makeTitle( NS_USER, $username );
+
                return $userpage->getFullURL( '', false, PROTO_CURRENT );
        }
 
@@ -89,7 +90,7 @@ class SpecialRedirect extends FormSpecialPage {
        function dispatchFile() {
                $title = Title::makeTitleSafe( NS_FILE, $this->mValue );
 
-               if ( ! $title instanceof Title ) {
+               if ( !$title instanceof Title ) {
                        return null;
                }
                $file = wfFindFile( $title );
@@ -112,6 +113,7 @@ class SpecialRedirect extends FormSpecialPage {
                                $url = $mto->getURL();
                        }
                }
+
                return $url;
        }
 
@@ -130,6 +132,7 @@ class SpecialRedirect extends FormSpecialPage {
                if ( $oldid === 0 ) {
                        return null;
                }
+
                return wfAppendQuery( wfScript( 'index' ), array(
                        'oldid' => $oldid
                ) );
@@ -149,6 +152,7 @@ class SpecialRedirect extends FormSpecialPage {
                if ( $curid === 0 ) {
                        return null;
                }
+
                return wfAppendQuery( wfScript( 'index' ), array(
                        'curid' => $curid
                ) );
@@ -165,33 +169,36 @@ class SpecialRedirect extends FormSpecialPage {
        function dispatch() {
                // the various namespaces supported by Special:Redirect
                switch ( $this->mType ) {
-               case 'user':
-                       $url = $this->dispatchUser();
-                       break;
-               case 'file':
-                       $url = $this->dispatchFile();
-                       break;
-               case 'revision':
-                       $url = $this->dispatchRevision();
-                       break;
-               case 'page':
-                       $url = $this->dispatchPage();
-                       break;
-               default:
-                       $this->getOutput()->setStatusCode( 404 );
-                       $url = null;
-                       break;
+                       case 'user':
+                               $url = $this->dispatchUser();
+                               break;
+                       case 'file':
+                               $url = $this->dispatchFile();
+                               break;
+                       case 'revision':
+                               $url = $this->dispatchRevision();
+                               break;
+                       case 'page':
+                               $url = $this->dispatchPage();
+                               break;
+                       default:
+                               $this->getOutput()->setStatusCode( 404 );
+                               $url = null;
+                               break;
                }
                if ( $url ) {
                        $this->getOutput()->redirect( $url );
+
                        return true;
                }
                if ( !is_null( $this->mValue ) ) {
                        $this->getOutput()->setStatusCode( 404 );
                        // Message: redirect-not-exists
                        $msg = $this->getMessagePrefix() . '-not-exists';
+
                        return Status::newFatal( $msg );
                }
+
                return false;
        }
 
@@ -228,6 +235,7 @@ class SpecialRedirect extends FormSpecialPage {
                if ( !empty( $this->mValue ) ) {
                        $a['value']['default'] = $this->mValue;
                }
+
                return $a;
        }
 
@@ -235,6 +243,7 @@ class SpecialRedirect extends FormSpecialPage {
                if ( !empty( $data['type'] ) && !empty( $data['value'] ) ) {
                        $this->setParameter( $data['type'] . '/' . $data['value'] );
                }
+
                /* if this returns false, will show the form */
                return $this->dispatch();
        }
index db98bea..864485c 100644 (file)
@@ -90,7 +90,7 @@ class SpecialResetTokens extends FormSpecialPage {
                                        ->rawParams( $this->msg( $tok['label-message'] )->parse() )
                                        ->params( $user->getTokenFromOption( $tok['preference'] ) )
                                        ->escaped();
-                               $tokensForForm[ $label ] = $tok['preference'];
+                               $tokensForForm[$label] = $tok['preference'];
                        }
 
                        $desc = array(
index 05c8872..780da7c 100644 (file)
@@ -137,6 +137,7 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
                $this->token = $request->getVal( 'token' );
                if ( $this->archiveName && $this->targetObj ) {
                        $this->tryShowFile( $this->archiveName );
+
                        return;
                }
 
@@ -156,6 +157,7 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
                # We need a target page!
                if ( is_null( $this->targetObj ) ) {
                        $output->addWikiMsg( 'undelete-header' );
+
                        return;
                }
                # Give a link to the logs/hist for this page
@@ -257,6 +259,7 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
                $conds['log_action'] = $this->getList()->getLogAction();
                $conds['ls_field'] = RevisionDeleter::getRelationType( $this->typeName );
                $conds['ls_value'] = $this->ids;
+
                return $conds;
        }
 
@@ -271,6 +274,7 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
                // Check if user is allowed to see this file
                if ( !$oimage->exists() ) {
                        $this->getOutput()->addWikiMsg( 'revdelete-no-file' );
+
                        return;
                }
                $user = $this->getUser();
@@ -300,6 +304,7 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
                                Xml::submitButton( $this->msg( 'revdelete-show-file-submit' )->text() ) .
                                '</form>'
                        );
+
                        return;
                }
                $this->getOutput()->disable();
@@ -325,6 +330,7 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
                                $this->typeName, $this->getContext(), $this->targetObj, $this->ids
                        );
                }
+
                return $this->list;
        }
 
@@ -467,8 +473,8 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
                                $line = Xml::tags( 'td', array( 'class' => 'mw-input' ), $innerHTML );
                                $html .= "<tr>$line</tr>\n";
                        }
-               // Otherwise, use tri-state radios
                } else {
+                       // Otherwise, use tri-state radios
                        $html .= '<tr>';
                        $html .= '<th class="mw-revdel-checkbox">' . $this->msg( 'revdelete-radio-same' )->escaped() . '</th>';
                        $html .= '<th class="mw-revdel-checkbox">' . $this->msg( 'revdelete-radio-unset' )->escaped() . '</th>';
@@ -495,6 +501,7 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
                }
 
                $html .= '</table>';
+
                return $html;
        }
 
@@ -508,6 +515,7 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
                $token = $this->getRequest()->getVal( 'wpEditToken' );
                if ( $this->submitClicked && !$this->getUser()->matchEditToken( $token ) ) {
                        $this->getOutput()->addWikiMsg( 'sessionfailure' );
+
                        return false;
                }
                $bitParams = $this->extractBitParams();
@@ -527,11 +535,13 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
                $status = $this->save( $bitParams, $comment, $this->targetObj );
                if ( $status->isGood() ) {
                        $this->success();
+
                        return true;
-               # ...otherwise, bounce back to form...
                } else {
+                       # ...otherwise, bounce back to form...
                        $this->failure( $status );
                }
+
                return false;
        }
 
@@ -573,6 +583,7 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
                if ( !isset( $bitfield[Revision::DELETED_RESTRICTED] ) ) {
                        $bitfield[Revision::DELETED_RESTRICTED] = 0;
                }
+
                return $bitfield;
        }
 
index ab2b16e..0c45281 100644 (file)
@@ -38,10 +38,12 @@ class SpecialRunJobs extends UnlistedSpecialPage {
                if ( wfReadOnly() ) {
                        header( "HTTP/1.0 423 Locked" );
                        print 'Wiki is in read-only mode';
+
                        return;
                } elseif ( !$this->getRequest()->wasPosted() ) {
                        header( "HTTP/1.0 400 Bad Request" );
                        print 'Request must be POSTed';
+
                        return;
                }
 
@@ -53,6 +55,7 @@ class SpecialRunJobs extends UnlistedSpecialPage {
                if ( count( $missing ) ) {
                        header( "HTTP/1.0 400 Bad Request" );
                        print 'Missing parameters: ' . implode( ', ', array_keys( $missing ) );
+
                        return;
                }
 
@@ -76,6 +79,7 @@ class SpecialRunJobs extends UnlistedSpecialPage {
                if ( !$verified || $params['sigexpiry'] < time() ) {
                        header( "HTTP/1.0 400 Bad Request" );
                        print 'Invalid or stale signature provided';
+
                        return;
                }
 
@@ -132,7 +136,7 @@ class SpecialRunJobs extends UnlistedSpecialPage {
                                $job = $group->pop( JobQueueGroup::TYPE_DEFAULT, JobQueueGroup::USE_CACHE );
                                if ( $job ) {
                                        $output = $job->toString() . "\n";
-                                       $t = - microtime( true );
+                                       $t = -microtime( true );
                                        wfProfileIn( __METHOD__ . '-' . get_class( $job ) );
                                        $success = $job->run();
                                        wfProfileOut( __METHOD__ . '-' . get_class( $job ) );
index aa38e6c..129f8b7 100644 (file)
@@ -179,6 +179,7 @@ class SpecialSearch extends SpecialPage {
                # If the string cannot be used to create a title
                if ( is_null( $t ) ) {
                        $this->showResults( $term );
+
                        return;
                }
                # If there's an exact or very near match, jump right there.
@@ -191,6 +192,7 @@ class SpecialSearch extends SpecialPage {
 
                if ( !is_null( $t ) ) {
                        $this->getOutput()->redirect( $t->getFullURL() );
+
                        return;
                }
                # No match, generate an edit URL
@@ -203,6 +205,7 @@ class SpecialSearch extends SpecialPage {
                        # If the feature is enabled, go straight to the edit page
                        if ( $wgGoToEdit ) {
                                $this->getOutput()->redirect( $t->getFullURL( array( 'action' => 'edit' ) ) );
+
                                return;
                        }
                }
@@ -247,6 +250,7 @@ class SpecialSearch extends SpecialPage {
                                        Xml::closeElement( 'fieldset' )
                                );
                        }
+
                        return;
                }
 
@@ -328,6 +332,7 @@ class SpecialSearch extends SpecialPage {
                // Sometimes the search engine knows there are too many hits
                if ( $titleMatches instanceof SearchResultTooMany ) {
                        $out->wrapWikiMsg( "==$1==\n", 'toomanymatches' );
+
                        return;
                }
 
@@ -336,6 +341,7 @@ class SpecialSearch extends SpecialPage {
                        $out->addHTML( $this->formHeader( $term, 0, 0 ) );
                        $out->addHtml( $this->getProfileForm( $this->profile, $term ) );
                        $out->addHTML( '</form>' );
+
                        // Empty query -- straight view of search form
                        return;
                }
@@ -438,12 +444,14 @@ class SpecialSearch extends SpecialPage {
                // show direct page/create link if applicable
 
                // Check DBkey !== '' in case of fragment link only.
-               if ( is_null( $t ) || $t->getDBkey() === '' ||
-                               ( $titleMatches !== null && $titleMatches->searchContainedSyntax() ) ||
-                               ( $textMatches !== null && $textMatches->searchContainedSyntax() ) ) {
+               if ( is_null( $t ) || $t->getDBkey() === ''
+                       || ( $titleMatches !== null && $titleMatches->searchContainedSyntax() )
+                       || ( $textMatches !== null && $textMatches->searchContainedSyntax() )
+               ) {
                        // invalid title
                        // preserve the paragraph for margins etc...
                        $this->getOutput()->addHtml( '<p></p>' );
+
                        return;
                }
 
@@ -517,6 +525,7 @@ class SpecialSearch extends SpecialPage {
                                $opt['ns' . $n] = 1;
                        }
                }
+
                return $opt + $this->extraParams;
        }
 
@@ -573,7 +582,7 @@ class SpecialSearch extends SpecialPage {
                $link_t = clone $t;
 
                wfRunHooks( 'ShowSearchHitTitle',
-                                       array( &$link_t, &$titleSnippet, $result, $terms, $this ) );
+                       array( &$link_t, &$titleSnippet, $result, $terms, $this ) );
 
                $link = Linker::linkKnown(
                        $link_t,
@@ -730,16 +739,14 @@ class SpecialSearch extends SpecialPage {
        /**
         * Show results from other wikis
         *
-        * @param $matches SearchResultSet
+        * @param $matches SearchResultSet|array
         * @param $query String
         *
         * @return string
         */
        protected function showInterwiki( $matches, $query ) {
                global $wgContLang;
-
                $profile = new ProfileSection( __METHOD__ );
-               $terms = $wgContLang->convertForSearchResult( $matches->termMatches() );
 
                $out = "<div id='mw-search-interwiki'><div id='mw-search-interwiki-caption'>" .
                        $this->msg( 'search-interwiki-caption' )->text() . "</div>\n";
@@ -755,13 +762,21 @@ class SpecialSearch extends SpecialPage {
                        }
                }
 
-               $prev = null;
-               $result = $matches->next();
-               while ( $result ) {
-                       $out .= $this->showInterwikiHit( $result, $prev, $terms, $query, $customCaptions );
-                       $prev = $result->getInterwikiPrefix();
-                       $result = $matches->next();
+               if ( !is_array( $matches ) ) {
+                       $matches = array( $matches );
+               }
+
+               foreach ( $matches as $set ) {
+                       $prev = null;
+                       $result = $set->next();
+                       while ( $result ) {
+                               $out .= $this->showInterwikiHit( $result, $prev, $query, $customCaptions );
+                               $prev = $result->getInterwikiPrefix();
+                               $result = $set->next();
+                       }
                }
+
+
                // TODO: should support paging in a non-confusing way (not sure how though, maybe via ajax)..
                $out .= "</ul></div>\n";
 
@@ -776,13 +791,12 @@ class SpecialSearch extends SpecialPage {
         *
         * @param $result SearchResult
         * @param $lastInterwiki String
-        * @param $terms Array
         * @param $query String
         * @param array $customCaptions iw prefix -> caption
         *
         * @return string
         */
-       protected function showInterwikiHit( $result, $lastInterwiki, $terms, $query, $customCaptions ) {
+       protected function showInterwikiHit( $result, $lastInterwiki, $query, $customCaptions ) {
                $profile = new ProfileSection( __METHOD__ );
 
                if ( $result->isBrokenTitle() ) {
@@ -845,6 +859,7 @@ class SpecialSearch extends SpecialPage {
                }
 
                $out .= "<li>{$link} {$redirect}</li>\n";
+
                return $out;
        }
 
@@ -864,6 +879,7 @@ class SpecialSearch extends SpecialPage {
                } else {
                        $form = '';
                        wfRunHooks( 'SpecialSearchProfileForm', array( $this, &$form, $profile, $term, $opts ) );
+
                        return $form;
                }
        }
@@ -938,11 +954,12 @@ class SpecialSearch extends SpecialPage {
                foreach ( $opts as $key => $value ) {
                        $hidden .= Html::hidden( $key, $value );
                }
+
                // Return final output
                return Xml::openElement(
-                               'fieldset',
-                               array( 'id' => 'mw-searchoptions', 'style' => 'margin:0em;' )
-                       ) .
+                       'fieldset',
+                       array( 'id' => 'mw-searchoptions', 'style' => 'margin:0em;' )
+               ) .
                        Xml::element( 'legend', null, $this->msg( 'powersearch-legend' )->text() ) .
                        Xml::tags( 'h4', null, $this->msg( 'powersearch-ns' )->parse() ) .
                        Html::element( 'div', array( 'id' => 'mw-search-togglebox' ) ) .
@@ -1098,6 +1115,7 @@ class SpecialSearch extends SpecialPage {
                        $this->msg( 'searchbutton' )->text(),
                        array( 'class' => array( 'mw-ui-button', 'mw-ui-progressive' ) )
                ) . "\n";
+
                return $out . $this->didYouMeanHtml;
        }
 
@@ -1149,6 +1167,7 @@ class SpecialSearch extends SpecialPage {
                if ( count( $p ) > 1 ) {
                        return $wgContLang->getNsIndex( $p[0] ) == NS_FILE;
                }
+
                return false;
        }
 
@@ -1166,6 +1185,7 @@ class SpecialSearch extends SpecialPage {
                if ( count( $p ) > 1 ) {
                        return $p[0] == $allkeyword;
                }
+
                return false;
        }
 
@@ -1179,6 +1199,7 @@ class SpecialSearch extends SpecialPage {
                        $this->searchEngine = $this->searchEngineType ?
                                SearchEngine::create( $this->searchEngineType ) : SearchEngine::create();
                }
+
                return $this->searchEngine;
        }
 
index 9b50875..dffa7de 100644 (file)
@@ -40,12 +40,15 @@ class ShortPagesPage extends QueryPage {
        function getQueryInfo() {
                return array(
                        'tables' => array( 'page' ),
-                       'fields' => array( 'namespace' => 'page_namespace',
-                                       'title' => 'page_title',
-                                       'value' => 'page_len' ),
-                       'conds' => array( 'page_namespace' =>
-                                       MWNamespace::getContentNamespaces(),
-                                       'page_is_redirect' => 0 ),
+                       'fields' => array(
+                               'namespace' => 'page_namespace',
+                               'title' => 'page_title',
+                               'value' => 'page_len'
+                       ),
+                       'conds' => array(
+                               'page_namespace' => MWNamespace::getContentNamespaces(),
+                               'page_is_redirect' => 0
+                       ),
                        'options' => array( 'USE INDEX' => 'page_redirect_namespace_len' )
                );
        }
@@ -111,8 +114,8 @@ class ShortPagesPage extends QueryPage {
                $size = $this->msg( 'nbytes' )->numParams( $result->value )->escaped();
 
                return $exists
-                               ? "${hlinkInParentheses} {$dm}{$plink} {$dm}[{$size}]"
-                               : "<del>${hlinkInParentheses} {$dm}{$plink} {$dm}[{$size}]</del>";
+                       ? "${hlinkInParentheses} {$dm}{$plink} {$dm}[{$size}]"
+                       : "<del>${hlinkInParentheses} {$dm}{$plink} {$dm}[{$size}]</del>";
        }
 
        protected function getGroupName() {
index 56f3f41..c3a11f3 100644 (file)
@@ -30,7 +30,7 @@
 class SpecialStatistics extends SpecialPage {
 
        private $views, $edits, $good, $images, $total, $users,
-                       $activeUsers = 0;
+               $activeUsers = 0;
 
        public function __construct() {
                parent::__construct( 'Statistics' );
@@ -123,6 +123,7 @@ class SpecialStatistics extends SpecialPage {
                                        " $descriptionText" );
                        }
                }
+
                return Html::rawElement( 'tr', $trExtraParams,
                        Html::rawElement( 'td', array(), $text ) .
                        Html::rawElement( 'td', array( 'class' => 'mw-statistics-numbers' ), $number )
@@ -166,6 +167,7 @@ class SpecialStatistics extends SpecialPage {
 
        private function getUserStats() {
                global $wgActiveUserDays;
+
                return Xml::openElement( 'tr' ) .
                        Xml::tags( 'th', array( 'colspan' => '2' ), $this->msg( 'statistics-header-users' )->parse() ) .
                        Xml::closeElement( 'tr' ) .
@@ -225,6 +227,7 @@ class SpecialStatistics extends SpecialPage {
                                $this->getLanguage()->formatNum( $countUsers ),
                                array( 'class' => 'statistics-group-' . Sanitizer::escapeClass( $group ) . $classZero ) );
                }
+
                return $text;
        }
 
@@ -245,36 +248,39 @@ class SpecialStatistics extends SpecialPage {
                $text = '';
                $dbr = wfGetDB( DB_SLAVE );
                $res = $dbr->select(
-                               'page',
-                               array(
-                                       'page_namespace',
-                                       'page_title',
-                                       'page_counter',
-                               ),
-                               array(
-                                       'page_is_redirect' => 0,
-                                       'page_counter > 0',
-                               ),
-                               __METHOD__,
-                               array(
-                                       'ORDER BY' => 'page_counter DESC',
-                                       'LIMIT' => 10,
-                               )
-                       );
-                       if ( $res->numRows() > 0 ) {
-                               $text .= Xml::openElement( 'tr' );
-                               $text .= Xml::tags( 'th', array( 'colspan' => '2' ), $this->msg( 'statistics-mostpopular' )->parse() );
-                               $text .= Xml::closeElement( 'tr' );
-                               foreach ( $res as $row ) {
-                                       $title = Title::makeTitleSafe( $row->page_namespace, $row->page_title );
-                                       if ( $title instanceof Title ) {
-                                               $text .= $this->formatRow( Linker::link( $title ),
-                                                               $this->getLanguage()->formatNum( $row->page_counter ) );
-
-                                       }
+                       'page',
+                       array(
+                               'page_namespace',
+                               'page_title',
+                               'page_counter',
+                       ),
+                       array(
+                               'page_is_redirect' => 0,
+                               'page_counter > 0',
+                       ),
+                       __METHOD__,
+                       array(
+                               'ORDER BY' => 'page_counter DESC',
+                               'LIMIT' => 10,
+                       )
+               );
+
+               if ( $res->numRows() > 0 ) {
+                       $text .= Xml::openElement( 'tr' );
+                       $text .= Xml::tags( 'th', array( 'colspan' => '2' ), $this->msg( 'statistics-mostpopular' )->parse() );
+                       $text .= Xml::closeElement( 'tr' );
+
+                       foreach ( $res as $row ) {
+                               $title = Title::makeTitleSafe( $row->page_namespace, $row->page_title );
+
+                               if ( $title instanceof Title ) {
+                                       $text .= $this->formatRow( Linker::link( $title ),
+                                               $this->getLanguage()->formatNum( $row->page_counter ) );
                                }
-                               $res->free();
                        }
+                       $res->free();
+               }
+
                return $text;
        }
 
index 077e7cb..b762728 100644 (file)
@@ -46,11 +46,11 @@ class SpecialTags extends SpecialPage {
 
                // Write the headers
                $html = Xml::tags( 'tr', null, Xml::tags( 'th', null, $this->msg( 'tags-tag' )->parse() ) .
-                               Xml::tags( 'th', null, $this->msg( 'tags-display-header' )->parse() ) .
-                               Xml::tags( 'th', null, $this->msg( 'tags-description-header' )->parse() ) .
-                               Xml::tags( 'th', null, $this->msg( 'tags-active-header' )->parse() ) .
-                               Xml::tags( 'th', null, $this->msg( 'tags-hitcount-header' )->parse() )
-                       );
+                       Xml::tags( 'th', null, $this->msg( 'tags-display-header' )->parse() ) .
+                       Xml::tags( 'th', null, $this->msg( 'tags-description-header' )->parse() ) .
+                       Xml::tags( 'th', null, $this->msg( 'tags-active-header' )->parse() ) .
+                       Xml::tags( 'th', null, $this->msg( 'tags-hitcount-header' )->parse() )
+               );
 
                // Used in #doTagRow()
                $this->definedTags = array_fill_keys( ChangeTags::listDefinedTags(), true );
index fbc8e91..3a2b0c6 100644 (file)
@@ -107,7 +107,6 @@ class SpecialUnblock extends SpecialPage {
                        if ( $type == Block::TYPE_AUTO && $this->type == Block::TYPE_IP ) {
                                $fields['Target']['default'] = $this->target;
                                unset( $fields['Name'] );
-
                        } else {
                                $fields['Target']['default'] = $target;
                                $fields['Target']['type'] = 'hidden';
@@ -133,11 +132,11 @@ class SpecialUnblock extends SpecialPage {
                                                break;
                                }
                        }
-
                } else {
                        $fields['Target']['default'] = $this->target;
                        unset( $fields['Name'] );
                }
+
                return $fields;
        }
 
@@ -181,6 +180,7 @@ class SpecialUnblock extends SpecialPage {
                list( $target, $type ) = SpecialBlock::getTargetAndType( $target );
                if ( $block->getType() == Block::TYPE_RANGE && $type == Block::TYPE_IP ) {
                        $range = $block->getTarget();
+
                        return array( array( 'ipb_blocked_as_range', $target, $range ) );
                }
 
index 3bfcede..17de679 100644 (file)
@@ -50,13 +50,13 @@ class UncategorizedImagesPage extends ImageQueryPage {
                return array(
                        'tables' => array( 'page', 'categorylinks' ),
                        'fields' => array( 'namespace' => 'page_namespace',
-                                       'title' => 'page_title',
-                                       'value' => 'page_title' ),
+                               'title' => 'page_title',
+                               'value' => 'page_title' ),
                        'conds' => array( 'cl_from IS NULL',
-                                       'page_namespace' => NS_FILE,
-                                       'page_is_redirect' => 0 ),
+                               'page_namespace' => NS_FILE,
+                               'page_is_redirect' => 0 ),
                        'join_conds' => array( 'categorylinks' => array(
-                                       'LEFT JOIN', 'cl_from=page_id' ) )
+                               'LEFT JOIN', 'cl_from=page_id' ) )
                );
        }
 
index 8bc9e48..c6a4215 100644 (file)
@@ -49,16 +49,21 @@ class UncategorizedPagesPage extends PageQueryPage {
        function getQueryInfo() {
                return array(
                        'tables' => array( 'page', 'categorylinks' ),
-                       'fields' => array( 'namespace' => 'page_namespace',
-                                       'title' => 'page_title',
-                                       'value' => 'page_title' ),
+                       'fields' => array(
+                               'namespace' => 'page_namespace',
+                               'title' => 'page_title',
+                               'value' => 'page_title'
+                       ),
                        // default for page_namespace is all content namespaces (if requestedNamespace is false)
                        // otherwise, page_namespace is requestedNamespace
-                       'conds' => array( 'cl_from IS NULL',
-                                       'page_namespace' => ( $this->requestedNamespace !== false ? $this->requestedNamespace : MWNamespace::getContentNamespaces() ),
-                                       'page_is_redirect' => 0 ),
-                       'join_conds' => array( 'categorylinks' => array(
-                                       'LEFT JOIN', 'cl_from = page_id' ) )
+                       'conds' => array(
+                               'cl_from IS NULL',
+                               'page_namespace' => ( $this->requestedNamespace !== false ? $this->requestedNamespace : MWNamespace::getContentNamespaces() ),
+                               'page_is_redirect' => 0
+                       ),
+                       'join_conds' => array(
+                               'categorylinks' => array( 'LEFT JOIN', 'cl_from = page_id' )
+                       )
                );
        }
 
@@ -68,6 +73,7 @@ class UncategorizedPagesPage extends PageQueryPage {
                if ( $this->requestedNamespace === false && count( MWNamespace::getContentNamespaces() ) > 1 ) {
                        return array( 'page_namespace', 'page_title' );
                }
+
                return array( 'page_title' );
        }
 
index 0dd5a0c..acfeb37 100644 (file)
@@ -58,6 +58,7 @@ class PageArchive {
         */
        public static function listAllPages() {
                $dbr = wfGetDB( DB_SLAVE );
+
                return self::listPages( $dbr, '' );
        }
 
@@ -137,7 +138,7 @@ class PageArchive {
                }
 
                $conds = array( 'ar_namespace' => $this->title->getNamespace(),
-                               'ar_title' => $this->title->getDBkey() );
+                       'ar_title' => $this->title->getDBkey() );
 
                $options = array( 'ORDER BY' => 'ar_timestamp DESC' );
 
@@ -406,6 +407,7 @@ class PageArchive {
                                ->inContentLanguage()->text();
                } else {
                        wfDebug( "Undelete: nothing undeleted...\n" );
+
                        return false;
                }
 
@@ -545,6 +547,7 @@ class PageArchive {
 
                        $status = Status::newGood( 0 );
                        $status->warning( "undelete-no-results" );
+
                        return $status;
                }
 
@@ -765,6 +768,7 @@ class SpecialUndelete extends SpecialPage {
                        if ( $user->isAllowed( 'browsearchive' ) ) {
                                $this->showSearchForm();
                        }
+
                        return;
                }
 
@@ -844,6 +848,7 @@ class SpecialUndelete extends SpecialPage {
 
                if ( $result->numRows() == 0 ) {
                        $out->addWikiMsg( 'undelete-no-results' );
+
                        return false;
                }
 
@@ -897,6 +902,7 @@ class SpecialUndelete extends SpecialPage {
 
                if ( !$rev ) {
                        $out->addWikiMsg( 'undeleterevision-missing' );
+
                        return;
                }
 
@@ -906,6 +912,7 @@ class SpecialUndelete extends SpecialPage {
                                        "<div class='mw-warning plainlinks'>\n$1\n</div>\n",
                                        'rev-deleted-text-permission'
                                );
+
                                return;
                        }
 
@@ -1269,32 +1276,31 @@ class SpecialUndelete extends SpecialPage {
                                $unsuppressBox = '';
                        }
 
-                       $table =
-                               Xml::fieldset( $this->msg( 'undelete-fieldset-title' )->text() ) .
-                                       Xml::openElement( 'table', array( 'id' => 'mw-undelete-table' ) ) .
-                                       "<tr>
-                                               <td colspan='2' class='mw-undelete-extrahelp'>" .
-                                       $this->msg( 'undeleteextrahelp' )->parseAsBlock() .
-                                       "</td>
-                               </tr>
-                               <tr>
-                                       <td class='mw-label'>" .
-                                       Xml::label( $this->msg( 'undeletecomment' )->text(), 'wpComment' ) .
-                                       "</td>
-                                       <td class='mw-input'>" .
-                                       Xml::input( 'wpComment', 50, $this->mComment, array( 'id' => 'wpComment', 'autofocus' => true ) ) .
-                                       "</td>
-                               </tr>
-                               <tr>
-                                       <td>&#160;</td>
-                                       <td class='mw-submit'>" .
-                                       Xml::submitButton( $this->msg( 'undeletebtn' )->text(), array( 'name' => 'restore', 'id' => 'mw-undelete-submit' ) ) . ' ' .
-                                       Xml::submitButton( $this->msg( 'undeleteinvert' )->text(), array( 'name' => 'invert', 'id' => 'mw-undelete-invert' ) ) .
-                                       "</td>
-                               </tr>" .
-                                       $unsuppressBox .
-                                       Xml::closeElement( 'table' ) .
-                                       Xml::closeElement( 'fieldset' );
+                       $table = Xml::fieldset( $this->msg( 'undelete-fieldset-title' )->text() ) .
+                               Xml::openElement( 'table', array( 'id' => 'mw-undelete-table' ) ) .
+                               "<tr>
+                                       <td colspan='2' class='mw-undelete-extrahelp'>" .
+                               $this->msg( 'undeleteextrahelp' )->parseAsBlock() .
+                               "</td>
+                       </tr>
+                       <tr>
+                               <td class='mw-label'>" .
+                               Xml::label( $this->msg( 'undeletecomment' )->text(), 'wpComment' ) .
+                               "</td>
+                               <td class='mw-input'>" .
+                               Xml::input( 'wpComment', 50, $this->mComment, array( 'id' => 'wpComment', 'autofocus' => true ) ) .
+                               "</td>
+                       </tr>
+                       <tr>
+                               <td>&#160;</td>
+                               <td class='mw-submit'>" .
+                               Xml::submitButton( $this->msg( 'undeletebtn' )->text(), array( 'name' => 'restore', 'id' => 'mw-undelete-submit' ) ) . ' ' .
+                               Xml::submitButton( $this->msg( 'undeleteinvert' )->text(), array( 'name' => 'invert', 'id' => 'mw-undelete-invert' ) ) .
+                               "</td>
+                       </tr>" .
+                               $unsuppressBox .
+                               Xml::closeElement( 'table' ) .
+                               Xml::closeElement( 'fieldset' );
 
                        $out->addHTML( $table );
                }
index b686a5b..c897332 100644 (file)
@@ -41,14 +41,17 @@ class UnusedCategoriesPage extends QueryPage {
        function getQueryInfo() {
                return array(
                        'tables' => array( 'page', 'categorylinks' ),
-                       'fields' => array( 'namespace' => 'page_namespace',
-                                       'title' => 'page_title',
-                                       'value' => 'page_title' ),
-                       'conds' => array( 'cl_from IS NULL',
-                                       'page_namespace' => NS_CATEGORY,
-                                       'page_is_redirect' => 0 ),
-                       'join_conds' => array( 'categorylinks' => array(
-                                       'LEFT JOIN', 'cl_to = page_title' ) )
+                       'fields' => array(
+                               'namespace' => 'page_namespace',
+                               'title' => 'page_title',
+                               'value' => 'page_title'
+                       ),
+                       'conds' => array(
+                               'cl_from IS NULL',
+                               'page_namespace' => NS_CATEGORY,
+                               'page_is_redirect' => 0
+                       ),
+                       'join_conds' => array( 'categorylinks' => array( 'LEFT JOIN', 'cl_to = page_title' ) )
                );
        }
 
@@ -67,6 +70,7 @@ class UnusedCategoriesPage extends QueryPage {
         */
        function formatResult( $skin, $result ) {
                $title = Title::makeTitle( NS_CATEGORY, $result->title );
+
                return Linker::link( $title, htmlspecialchars( $title->getText() ) );
        }
 
index d332db7..743c587 100644 (file)
@@ -47,28 +47,30 @@ class UnusedimagesPage extends ImageQueryPage {
                global $wgCountCategorizedImagesAsUsed;
                $retval = array(
                        'tables' => array( 'image', 'imagelinks' ),
-                       'fields' => array( 'namespace' => NS_FILE,
-                                       'title' => 'img_name',
-                                       'value' => 'img_timestamp',
-                                       'img_user', 'img_user_text',
-                                       'img_description' ),
+                       'fields' => array(
+                               'namespace' => NS_FILE,
+                               'title' => 'img_name',
+                               'value' => 'img_timestamp',
+                               'img_user', 'img_user_text',
+                               'img_description'
+                       ),
                        'conds' => array( 'il_to IS NULL' ),
-                       'join_conds' => array( 'imagelinks' => array(
-                                       'LEFT JOIN', 'il_to = img_name' ) )
+                       'join_conds' => array( 'imagelinks' => array( 'LEFT JOIN', 'il_to = img_name' ) )
                );
 
                if ( $wgCountCategorizedImagesAsUsed ) {
                        // Order is significant
                        $retval['tables'] = array( 'image', 'page', 'categorylinks',
-                                       'imagelinks' );
+                               'imagelinks' );
                        $retval['conds']['page_namespace'] = NS_FILE;
                        $retval['conds'][] = 'cl_from IS NULL';
                        $retval['conds'][] = 'img_name = page_title';
                        $retval['join_conds']['categorylinks'] = array(
-                                       'LEFT JOIN', 'cl_from = page_id' );
+                               'LEFT JOIN', 'cl_from = page_id' );
                        $retval['join_conds']['imagelinks'] = array(
-                                       'LEFT JOIN', 'il_to = page_title' );
+                               'LEFT JOIN', 'il_to = page_title' );
                }
+
                return $retval;
        }
 
index 1dc9f42..f7e7a31 100644 (file)
@@ -50,12 +50,16 @@ class UnusedtemplatesPage extends QueryPage {
        function getQueryInfo() {
                return array(
                        'tables' => array( 'page', 'templatelinks' ),
-                       'fields' => array( 'namespace' => 'page_namespace',
-                                       'title' => 'page_title',
-                                       'value' => 'page_title' ),
-                       'conds' => array( 'page_namespace' => NS_TEMPLATE,
-                                       'tl_from IS NULL',
-                                       'page_is_redirect' => 0 ),
+                       'fields' => array(
+                               'namespace' => 'page_namespace',
+                               'title' => 'page_title',
+                               'value' => 'page_title'
+                       ),
+                       'conds' => array(
+                               'page_namespace' => NS_TEMPLATE,
+                               'tl_from IS NULL',
+                               'page_is_redirect' => 0
+                       ),
                        'join_conds' => array( 'templatelinks' => array(
                                'LEFT JOIN', array( 'tl_title = page_title',
                                        'tl_namespace = page_namespace' ) ) )
@@ -79,6 +83,7 @@ class UnusedtemplatesPage extends QueryPage {
                        SpecialPage::getTitleFor( 'Whatlinkshere', $title->getPrefixedText() ),
                        $this->msg( 'unusedtemplateswlh' )->escaped()
                );
+
                return $this->getLanguage()->specialList( $pageLink, $wlhLink );
        }
 
index 954e3ff..ec2e7f5 100644 (file)
@@ -46,13 +46,16 @@ class UnwatchedpagesPage extends QueryPage {
        function getQueryInfo() {
                return array(
                        'tables' => array( 'page', 'watchlist' ),
-                       'fields' => array( 'namespace' => 'page_namespace',
-                                       'title' => 'page_title',
-                                       'value' => 'page_namespace' ),
-                       'conds' => array( 'wl_title IS NULL',
-                                       'page_is_redirect' => 0,
-                                       "page_namespace != '" . NS_MEDIAWIKI .
-                                       "'" ),
+                       'fields' => array(
+                               'namespace' => 'page_namespace',
+                               'title' => 'page_title',
+                               'value' => 'page_namespace'
+                       ),
+                       'conds' => array(
+                               'wl_title IS NULL',
+                               'page_is_redirect' => 0,
+                               "page_namespace != '" . NS_MEDIAWIKI . "'"
+                       ),
                        'join_conds' => array( 'watchlist' => array(
                                'LEFT JOIN', array( 'wl_title = page_title',
                                        'wl_namespace = page_namespace' ) ) )
index 35bbf0b..521b361 100644 (file)
@@ -179,6 +179,7 @@ class SpecialUpload extends SpecialPage {
                        # Backwards compatibility hook
                        if ( !wfRunHooks( 'UploadForm:initial', array( &$this ) ) ) {
                                wfDebug( "Hook 'UploadForm:initial' broke output of the upload form" );
+
                                return;
                        }
                        $this->showUploadForm( $this->getUploadForm() );
@@ -206,7 +207,6 @@ class SpecialUpload extends SpecialPage {
                } else {
                        $this->getOutput()->addHTML( $form );
                }
-
        }
 
        /**
@@ -401,6 +401,7 @@ class SpecialUpload extends SpecialPage {
                $status = $this->mUpload->fetchFile();
                if ( !$status->isOK() ) {
                        $this->showUploadError( $this->getOutput()->parse( $status->getWikiText() ) );
+
                        return;
                }
 
@@ -418,6 +419,7 @@ class SpecialUpload extends SpecialPage {
                $details = $this->mUpload->verifyUpload();
                if ( $details['status'] != UploadBase::OK ) {
                        $this->processVerificationError( $details );
+
                        return;
                }
 
@@ -426,6 +428,7 @@ class SpecialUpload extends SpecialPage {
                if ( $permErrors !== true ) {
                        $code = array_shift( $permErrors[0] );
                        $this->showRecoverableUploadError( $this->msg( $code, $permErrors[0] )->parse() );
+
                        return;
                }
 
@@ -449,6 +452,7 @@ class SpecialUpload extends SpecialPage {
                $status = $this->mUpload->performUpload( $this->mComment, $pageText, $this->mWatchthis, $this->getUser() );
                if ( !$status->isGood() ) {
                        $this->showUploadError( $this->getOutput()->parse( $status->getWikiText() ) );
+
                        return;
                }
 
@@ -500,6 +504,7 @@ class SpecialUpload extends SpecialPage {
                                $pageText = $comment;
                        }
                }
+
                return $pageText;
        }
 
@@ -629,6 +634,7 @@ class SpecialUpload extends SpecialPage {
                $success = $this->mUpload->unsaveUploadedFile();
                if ( !$success ) {
                        $this->getOutput()->showFileDeleteError( $this->mUpload->getTempPath() );
+
                        return false;
                } else {
                        return true;
@@ -707,6 +713,7 @@ class SpecialUpload extends SpecialPage {
                foreach ( $dupes as $file ) {
                        $gallery->add( $file->getTitle() );
                }
+
                return '<li>' .
                        wfMessage( 'file-exists-duplicate' )->numParams( count( $dupes ) )->parse() .
                        $gallery->toHtml() . "</li>\n";
@@ -741,8 +748,7 @@ class UploadForm extends HTMLForm {
        public function __construct( array $options = array(), IContextSource $context = null ) {
                $this->mWatch = !empty( $options['watch'] );
                $this->mForReUpload = !empty( $options['forreupload'] );
-               $this->mSessionKey = isset( $options['sessionkey'] )
-                               ? $options['sessionkey'] : '';
+               $this->mSessionKey = isset( $options['sessionkey'] ) ? $options['sessionkey'] : '';
                $this->mHideIgnoreWarning = !empty( $options['hideignorewarning'] );
                $this->mDestWarningAck = !empty( $options['destwarningack'] );
                $this->mDestFile = isset( $options['destfile'] ) ? $options['destfile'] : '';
@@ -778,7 +784,6 @@ class UploadForm extends HTMLForm {
                                $this->mSourceIds[] = $field['id'];
                        }
                }
-
        }
 
        /**
@@ -834,12 +839,13 @@ class UploadForm extends HTMLForm {
                        'section' => 'source',
                        'type' => 'file',
                        'id' => 'wpUploadFile',
+                       'radio-id' => 'wpSourceTypeFile',
                        'label-message' => 'sourcefilename',
                        'upload-type' => 'File',
                        'radio' => &$radio,
                        'help' => $this->msg( 'upload-maxfilesize',
-                               $this->getContext()->getLanguage()->formatSize( $this->mMaxUploadSize['file'] ) )
-                               ->parse() .
+                               $this->getContext()->getLanguage()->formatSize( $this->mMaxUploadSize['file'] )
+                       )->parse() .
                                $this->msg( 'word-separator' )->escaped() .
                                $this->msg( 'upload_source_file' )->escaped(),
                        'checked' => $selectedSourceType == 'file',
@@ -851,12 +857,13 @@ class UploadForm extends HTMLForm {
                                'class' => 'UploadSourceField',
                                'section' => 'source',
                                'id' => 'wpUploadFileURL',
+                               'radio-id' => 'wpSourceTypeurl',
                                'label-message' => 'sourceurl',
                                'upload-type' => 'url',
                                'radio' => &$radio,
                                'help' => $this->msg( 'upload-maxfilesize',
-                                       $this->getContext()->getLanguage()->formatSize( $this->mMaxUploadSize['url'] ) )
-                                       ->parse() .
+                                       $this->getContext()->getLanguage()->formatSize( $this->mMaxUploadSize['url'] )
+                               )->parse() .
                                        $this->msg( 'word-separator' )->escaped() .
                                        $this->msg( 'upload_source_url' )->escaped(),
                                'checked' => $selectedSourceType == 'url',
@@ -870,6 +877,7 @@ class UploadForm extends HTMLForm {
                        'default' => $this->getExtensionsMessage(),
                        'raw' => true,
                );
+
                return $descriptor;
        }
 
@@ -882,7 +890,7 @@ class UploadForm extends HTMLForm {
                # Print a list of allowed file extensions, if so configured.  We ignore
                # MIME type here, it's incomprehensible to most people and too long.
                global $wgCheckFileExtensions, $wgStrictFileExtensions,
-               $wgFileExtensions, $wgFileBlacklist;
+                  $wgFileExtensions, $wgFileBlacklist;
 
                if ( $wgCheckFileExtensions ) {
                        if ( $wgStrictFileExtensions ) {
@@ -905,6 +913,7 @@ class UploadForm extends HTMLForm {
                        # Everything is permitted.
                        $extensionsList = '';
                }
+
                return $extensionsList;
        }
 
@@ -1100,7 +1109,6 @@ class UploadForm extends HTMLForm {
        function trySubmit() {
                return false;
        }
-
 }
 
 /**
@@ -1113,23 +1121,32 @@ class UploadSourceField extends HTMLTextField {
         * @return string
         */
        function getLabelHtml( $cellAttributes = array() ) {
+               $id = $this->mParams['id'];
+               $label = Html::rawElement( 'label', array( 'for' => $id ), $this->mLabel );
+
                if ( !empty( $this->mParams['radio'] ) ) {
-                       $id = "wpSourceType{$this->mParams['upload-type']}";
+                       if ( isset( $this->mParams['radio-id'] ) ) {
+                               $radioId = $this->mParams['radio-id'];
+                       } else {
+                               // Old way. For the benefit of extensions that do not define
+                               // the 'radio-id' key.
+                               $radioId = 'wpSourceType' . $this->mParams['upload-type'];
+                       }
+
                        $attribs = array(
                                'name' => 'wpSourceType',
                                'type' => 'radio',
-                               'id' => $id,
+                               'id' => $radioId,
                                'value' => $this->mParams['upload-type'],
                        );
+
                        if ( !empty( $this->mParams['checked'] ) ) {
                                $attribs['checked'] = 'checked';
                        }
-                       $label = Html::rawElement( 'label', array( 'for' => $id ), $this->mLabel );
+
                        $label .= Html::element( 'input', $attribs );
-               } else {
-                       $id = $this->mParams['id'];
-                       $label = Html::rawElement( 'label', array( 'for' => $id ), $this->mLabel );
                }
+
                return Html::rawElement( 'td', array( 'class' => 'mw-label' ) + $cellAttributes, $label );
        }
 
index 37bfa39..16c348f 100644 (file)
@@ -66,6 +66,7 @@ class SpecialUploadStash extends UnlistedSpecialPage {
                if ( $subPage === null || $subPage === '' ) {
                        return $this->showUploads();
                }
+
                return $this->showUpload( $subPage );
        }
 
@@ -136,10 +137,11 @@ class SpecialUploadStash extends UnlistedSpecialPage {
                        $handler = $file->getHandler();
                        if ( $handler ) {
                                $params = $handler->parseParamString( $paramString );
+
                                return array( 'file' => $file, 'type' => $type, 'params' => $params );
                        } else {
                                throw new UploadStashBadPathException( 'No handler found for ' .
-                                               "mime {$file->getMimeType()} of file {$file->getPath()}" );
+                                       "mime {$file->getMimeType()} of file {$file->getPath()}" );
                        }
                }
 
@@ -204,7 +206,6 @@ class SpecialUploadStash extends UnlistedSpecialPage {
                }
 
                return $this->outputLocalFile( $thumbFile );
-
        }
 
        /**
@@ -214,9 +215,9 @@ class SpecialUploadStash extends UnlistedSpecialPage {
         * Note: We rely on NFS to have propagated the file contents to the scaler. However, we do not rely on the thumbnail being created in NFS and then
         *   propagated back to our filesystem. Instead we take the results of the HTTP request instead.
         * Note: no caching is being done here, although we are instructing the client to cache it forever.
-        * @param $file: File object
-        * @param $params: scaling parameters ( e.g. array( width => '50' ) );
-        * @param $flags: scaling flags ( see File:: constants )
+        * @param File $file
+        * @param array $params Scaling parameters ( e.g. array( width => '50' ) );
+        * @param $flags Scaling flags ( see File:: constants )
         * @throws MWException
         * @return boolean success
         */
@@ -248,16 +249,17 @@ class SpecialUploadStash extends UnlistedSpecialPage {
                );
                $req = MWHttpRequest::factory( $scalerThumbUrl, $httpOptions );
                $status = $req->execute();
-               if ( ! $status->isOK() ) {
+               if ( !$status->isOK() ) {
                        $errors = $status->getErrorsArray();
                        $errorStr = "Fetching thumbnail failed: " . print_r( $errors, 1 );
                        $errorStr .= "\nurl = $scalerThumbUrl\n";
                        throw new MWException( $errorStr );
                }
                $contentType = $req->getResponseHeader( "content-type" );
-               if ( ! $contentType ) {
+               if ( !$contentType ) {
                        throw new MWException( "Missing content-type header" );
                }
+
                return $this->outputContents( $req->getContent(), $contentType );
        }
 
@@ -273,6 +275,7 @@ class SpecialUploadStash extends UnlistedSpecialPage {
                if ( $file->getSize() > self::MAX_SERVE_BYTES ) {
                        throw new SpecialUploadStashTooLargeException();
                }
+
                return $file->getRepo()->streamFile( $file->getPath(),
                        array( 'Content-Transfer-Encoding: binary',
                                'Expires: Sun, 17-Jan-2038 19:14:07 GMT' )
@@ -294,6 +297,7 @@ class SpecialUploadStash extends UnlistedSpecialPage {
                }
                self::outputFileHeaders( $contentType, $size );
                print $content;
+
                return true;
        }
 
@@ -301,8 +305,8 @@ class SpecialUploadStash extends UnlistedSpecialPage {
         * Output headers for streaming
         * XXX unsure about encoding as binary; if we received from HTTP perhaps we should use that encoding, concatted with semicolon to mimeType as it usually is.
         * Side effect: preps PHP to write headers to STDOUT.
-        * @param string $contentType : string suitable for content-type header
-        * @param string $size: length in bytes
+        * @param string $contentType String suitable for content-type header
+        * @param string $size Length in bytes
         */
        private static function outputFileHeaders( $contentType, $size ) {
                header( "Content-Type: $contentType", true );
@@ -325,10 +329,12 @@ class SpecialUploadStash extends UnlistedSpecialPage {
                if ( isset( $formData['Clear'] ) ) {
                        $stash = RepoGroup::singleton()->getLocalRepo()->getUploadStash();
                        wfDebug( "stash has: " . print_r( $stash->listFiles(), true ) );
-                       if ( ! $stash->clear() ) {
+
+                       if ( !$stash->clear() ) {
                                return Status::newFatal( 'uploadstash-errclear' );
                        }
                }
+
                return Status::newGood();
        }
 
@@ -390,4 +396,6 @@ class SpecialUploadStash extends UnlistedSpecialPage {
        }
 }
 
-class SpecialUploadStashTooLargeException extends MWException {};
+class SpecialUploadStashTooLargeException extends MWException {
+}
+
index 1c9fed7..b049975 100644 (file)
@@ -27,7 +27,6 @@
  * @ingroup SpecialPage
  */
 class LoginForm extends SpecialPage {
-
        const SUCCESS = 0;
        const NO_NAME = 1;
        const ILLEGAL = 2;
@@ -43,26 +42,38 @@ class LoginForm extends SpecialPage {
        const NEED_TOKEN = 12;
        const WRONG_TOKEN = 13;
 
-       var $mUsername, $mPassword, $mRetype, $mReturnTo, $mCookieCheck, $mPosted;
-       var $mAction, $mCreateaccount, $mCreateaccountMail;
-       var $mLoginattempt, $mRemember, $mEmail, $mDomain, $mLanguage;
-       var $mSkipCookieCheck, $mReturnToQuery, $mToken, $mStickHTTPS;
-       var $mType, $mReason, $mRealName;
-       var $mAbortLoginErrorMsg = null;
+       public $mAbortLoginErrorMsg = null;
+
+       protected $mUsername;
+       protected $mPassword;
+       protected $mRetype;
+       protected $mReturnTo;
+       protected $mCookieCheck;
+       protected $mPosted;
+       protected $mAction;
+       protected $mCreateaccount;
+       protected $mCreateaccountMail;
+       protected $mLoginattempt;
+       protected $mRemember;
+       protected $mEmail;
+       protected $mDomain;
+       protected $mLanguage;
+       protected $mSkipCookieCheck;
+       protected $mReturnToQuery;
+       protected $mToken;
+       protected $mStickHTTPS;
+       protected $mType;
+       protected $mReason;
+       protected $mRealName;
+
        private $mTempPasswordUsed;
        private $mLoaded = false;
        private $mSecureLoginUrl;
 
-       /**
-        * @ var WebRequest
-        */
+       /** @var WebRequest */
        private $mOverrideRequest = null;
 
-       /**
-        * Effective request; set at the beginning of load
-        *
-        * @var WebRequest $mRequest
-        */
+       /** @var WebRequest Effective request; set at the beginning of load */
        private $mRequest = null;
 
        /**
@@ -101,16 +112,19 @@ class LoginForm extends SpecialPage {
                $this->mCookieCheck = $request->getVal( 'wpCookieCheck' );
                $this->mPosted = $request->wasPosted();
                $this->mCreateaccountMail = $request->getCheck( 'wpCreateaccountMail' )
-                                                                       && $wgEnableEmail;
+                       && $wgEnableEmail;
                $this->mCreateaccount = $request->getCheck( 'wpCreateaccount' ) && !$this->mCreateaccountMail;
                $this->mLoginattempt = $request->getCheck( 'wpLoginattempt' );
                $this->mAction = $request->getVal( 'action' );
                $this->mRemember = $request->getCheck( 'wpRemember' );
                $this->mFromHTTP = $request->getBool( 'fromhttp', false );
-               $this->mStickHTTPS = ( !$this->mFromHTTP && $request->getProtocol() === 'https' ) || $request->getBool( 'wpForceHttps', false );
+               $this->mStickHTTPS = ( !$this->mFromHTTP && $request->getProtocol() === 'https' )
+                       || $request->getBool( 'wpForceHttps', false );
                $this->mLanguage = $request->getText( 'uselang' );
                $this->mSkipCookieCheck = $request->getCheck( 'wpSkipCookieCheck' );
-               $this->mToken = ( $this->mType == 'signup' ) ? $request->getVal( 'wpCreateaccountToken' ) : $request->getVal( 'wpLoginToken' );
+               $this->mToken = $this->mType == 'signup'
+                       ? $request->getVal( 'wpCreateaccountToken' )
+                       : $request->getVal( 'wpLoginToken' );
                $this->mReturnTo = $request->getVal( 'returnto', '' );
                $this->mReturnToQuery = $request->getVal( 'returntoquery', '' );
 
@@ -134,9 +148,10 @@ class LoginForm extends SpecialPage {
                # 2. Do not return to PasswordReset after a successful password change
                #    but goto Wiki start page (Main_Page) instead ( bug 33997 )
                $returnToTitle = Title::newFromText( $this->mReturnTo );
-               if ( is_object( $returnToTitle ) && (
-                       $returnToTitle->isSpecial( 'Userlogout' )
-                       || $returnToTitle->isSpecial( 'PasswordReset' ) ) ) {
+               if ( is_object( $returnToTitle )
+                       && ( $returnToTitle->isSpecial( 'Userlogout' )
+                               || $returnToTitle->isSpecial( 'PasswordReset' ) )
+               ) {
                        $this->mReturnTo = '';
                        $this->mReturnToQuery = '';
                }
@@ -183,6 +198,7 @@ class LoginForm extends SpecialPage {
                                $this->getOutput()->redirect( $url );
                                // Since we only do this redir to change proto, always vary
                                $this->getOutput()->addVaryHeader( 'X-Forwarded-Proto' );
+
                                return;
                        } else {
                                // A wiki without HTTPS login support should set $wgServer to
@@ -196,16 +212,20 @@ class LoginForm extends SpecialPage {
 
                if ( !is_null( $this->mCookieCheck ) ) {
                        $this->onCookieRedirectCheck( $this->mCookieCheck );
+
                        return;
                } elseif ( $this->mPosted ) {
                        if ( $this->mCreateaccount ) {
                                $this->addNewAccount();
+
                                return;
                        } elseif ( $this->mCreateaccountMail ) {
                                $this->addNewAccountMailPassword();
+
                                return;
                        } elseif ( ( 'submitlogin' == $this->mAction ) || $this->mLoginattempt ) {
                                $this->processLogin();
+
                                return;
                        }
                }
@@ -218,6 +238,7 @@ class LoginForm extends SpecialPage {
        function addNewAccountMailPassword() {
                if ( $this->mEmail == '' ) {
                        $this->mainLoginForm( $this->msg( 'noemailcreate' )->escaped() );
+
                        return;
                }
 
@@ -225,6 +246,7 @@ class LoginForm extends SpecialPage {
                if ( !$status->isGood() ) {
                        $error = $status->getMessage();
                        $this->mainLoginForm( $error->toString() );
+
                        return;
                }
 
@@ -261,6 +283,7 @@ class LoginForm extends SpecialPage {
                if ( !$status->isGood() ) {
                        $error = $status->getMessage();
                        $this->mainLoginForm( $error->toString() );
+
                        return false;
                }
 
@@ -324,6 +347,7 @@ class LoginForm extends SpecialPage {
                        wfRunHooks( 'AddNewAccount', array( $u, false ) );
                        $u->addNewUserLogEntry( 'create2', $this->mReason );
                }
+
                return true;
        }
 
@@ -366,6 +390,7 @@ class LoginForm extends SpecialPage {
                # Request forgery checks.
                if ( !self::getCreateaccountToken() ) {
                        self::setCreateaccountToken();
+
                        return Status::newFatal( 'nocookiesfornew' );
                }
 
@@ -387,14 +412,20 @@ class LoginForm extends SpecialPage {
                } elseif ( $creationBlock instanceof Block ) {
                        // Throws an ErrorPageError.
                        $this->userBlockedMessage( $creationBlock );
+
                        // This should never be reached.
                        return false;
                }
 
                # Include checks that will include GlobalBlocking (Bug 38333)
-               $permErrors = $this->getPageTitle()->getUserPermissionsErrors( 'createaccount', $currentUser, true );
+               $permErrors = $this->getPageTitle()->getUserPermissionsErrors(
+                       'createaccount',
+                       $currentUser,
+                       true
+               );
+
                if ( count( $permErrors ) ) {
-                               throw new PermissionsError( 'createaccount', $permErrors );
+                       throw new PermissionsError( 'createaccount', $permErrors );
                }
 
                $ip = $this->getRequest()->getIP();
@@ -402,8 +433,9 @@ class LoginForm extends SpecialPage {
                        return Status::newFatal( 'sorbs_create_account_reason' );
                }
 
-               // Normalize the name so that silly things don't cause "invalid username" errors.
-               // User::newFromName does some rather strict checking, rejecting e.g. leading/trailing/multiple spaces.
+               // Normalize the name so that silly things don't cause "invalid username"
+               // errors. User::newFromName does some rather strict checking, rejecting
+               // e.g. leading/trailing/multiple spaces.
                $title = Title::makeTitleSafe( NS_USER, $this->mUsername );
                if ( !is_object( $title ) ) {
                        return Status::newFatal( 'noname' );
@@ -432,6 +464,7 @@ class LoginForm extends SpecialPage {
                                if ( !is_array( $valid ) ) {
                                        $valid = array( $valid, $wgMinimalPasswordLength );
                                }
+
                                return call_user_func_array( 'Status::newFatal', $valid );
                        }
                }
@@ -463,6 +496,7 @@ class LoginForm extends SpecialPage {
                                // To return a different error code, return a Status object.
                                $abortError = new Message( 'createaccount-hook-aborted', array( $abortError ) );
                                $abortError->text();
+
                                return Status::newFatal( $abortError );
                        } else {
                                // For MediaWiki 1.23+ and updated hooks, return the Status object
@@ -473,7 +507,8 @@ class LoginForm extends SpecialPage {
 
                // Hook point to check for exempt from account creation throttle
                if ( !wfRunHooks( 'ExemptFromAccountCreationThrottle', array( $ip ) ) ) {
-                       wfDebug( "LoginForm::exemptFromAccountCreationThrottle: a hook allowed account creation w/o throttle\n" );
+                       wfDebug( "LoginForm::exemptFromAccountCreationThrottle: a hook " .
+                               "allowed account creation w/o throttle\n" );
                } else {
                        if ( ( $wgAccountCreationThrottle && $currentUser->isPingLimitable() ) ) {
                                $key = wfMemcKey( 'acctcreate', 'ip', $ip );
@@ -493,6 +528,7 @@ class LoginForm extends SpecialPage {
                }
 
                self::clearCreateaccountToken();
+
                return $this->initUser( $u, false );
        }
 
@@ -560,6 +596,7 @@ class LoginForm extends SpecialPage {
                // If the user doesn't have a login token yet, set one.
                if ( !self::getLoginToken() ) {
                        self::setLoginToken();
+
                        return self::NEED_TOKEN;
                }
                // If the user didn't pass a login token, tell them we need one
@@ -585,6 +622,7 @@ class LoginForm extends SpecialPage {
                // will effectively be using stale data.
                if ( $this->getUser()->getName() === $this->mUsername ) {
                        wfDebug( __METHOD__ . ": already logged in as {$this->mUsername}\n" );
+
                        return self::SUCCESS;
                }
 
@@ -610,6 +648,7 @@ class LoginForm extends SpecialPage {
                $msg = null;
                if ( !wfRunHooks( 'AbortLogin', array( $u, $this->mPassword, &$abort, &$msg ) ) ) {
                        $this->mAbortLoginErrorMsg = $msg;
+
                        return $abort;
                }
 
@@ -674,6 +713,7 @@ class LoginForm extends SpecialPage {
                        $retval = self::SUCCESS;
                }
                wfRunHooks( 'LoginAuthenticateAudit', array( $u, $this->mPassword, $retval ) );
+
                return $retval;
        }
 
@@ -732,17 +772,23 @@ class LoginForm extends SpecialPage {
 
                if ( $this->getUser()->isBlockedFromCreateAccount() ) {
                        wfDebug( __METHOD__ . ": user is blocked from account creation\n" );
+
                        return self::CREATE_BLOCKED;
                }
+
                if ( !$wgAuth->autoCreate() ) {
                        return self::NOT_EXISTS;
                }
+
                if ( !$wgAuth->userExists( $user->getName() ) ) {
                        wfDebug( __METHOD__ . ": user does not exist\n" );
+
                        return self::NOT_EXISTS;
                }
+
                if ( !$wgAuth->authenticate( $user->getName(), $this->mPassword ) ) {
                        wfDebug( __METHOD__ . ": \$wgAuth->authenticate() returned false, aborting\n" );
+
                        return self::WRONG_PLUGIN_PASS;
                }
 
@@ -751,6 +797,7 @@ class LoginForm extends SpecialPage {
                        // Hook point to add extra creation throttles and blocks
                        wfDebug( "LoginForm::attemptAutoCreate: a hook blocked creation: $abortError\n" );
                        $this->mAbortLoginErrorMsg = $abortError;
+
                        return self::ABORTED;
                }
 
@@ -760,6 +807,7 @@ class LoginForm extends SpecialPage {
                if ( !$status->isOK() ) {
                        $errors = $status->getErrorsByType( 'error' );
                        $this->mAbortLoginErrorMsg = $errors[0]['message'];
+
                        return self::ABORTED;
                }
 
@@ -870,8 +918,8 @@ class LoginForm extends SpecialPage {
                        case self::THROTTLED:
                                $error = $this->mAbortLoginErrorMsg ?: 'login-throttled';
                                $this->mainLoginForm( $this->msg( $error )
-                               ->params ( $this->getLanguage()->formatDuration( $wgPasswordAttemptThrottle['seconds'] ) )
-                               ->text()
+                                       ->params( $this->getLanguage()->formatDuration( $wgPasswordAttemptThrottle['seconds'] ) )
+                                       ->text()
                                );
                                break;
                        case self::USER_BLOCKED:
@@ -912,7 +960,9 @@ class LoginForm extends SpecialPage {
         * @param string $emailText message name of email text
         * @return Status object
         */
-       function mailPasswordInternal( $u, $throttle = true, $emailTitle = 'passwordremindertitle', $emailText = 'passwordremindertext' ) {
+       function mailPasswordInternal( $u, $throttle = true, $emailTitle = 'passwordremindertitle',
+               $emailText = 'passwordremindertext'
+       ) {
                global $wgNewPasswordExpiry;
 
                if ( $u->getEmail() == '' ) {
@@ -1133,6 +1183,7 @@ class LoginForm extends SpecialPage {
                                throw new PermissionsError( 'createaccount', $permErrors );
                        } elseif ( $user->isBlockedFromCreateAccount() ) {
                                $this->userBlockedMessage( $user->isBlockedFromCreateAccount() );
+
                                return;
                        } elseif ( wfReadOnly() ) {
                                throw new ReadOnlyError;
@@ -1324,6 +1375,7 @@ class LoginForm extends SpecialPage {
         */
        function hasSessionCookie() {
                global $wgDisableCookieCheck;
+
                return $wgDisableCookieCheck ? true : $this->getRequest()->checkSessionCookie();
        }
 
@@ -1333,6 +1385,7 @@ class LoginForm extends SpecialPage {
         */
        public static function getLoginToken() {
                global $wgRequest;
+
                return $wgRequest->getSessionData( 'wsLoginToken' );
        }
 
@@ -1360,6 +1413,7 @@ class LoginForm extends SpecialPage {
         */
        public static function getCreateaccountToken() {
                global $wgRequest;
+
                return $wgRequest->getSessionData( 'wsCreateaccountToken' );
        }
 
@@ -1442,6 +1496,7 @@ class LoginForm extends SpecialPage {
                                        $links[] = $this->makeLanguageSelectorLink( $parts[0], trim( $parts[1] ) );
                                }
                        }
+
                        return count( $links ) > 0 ? $this->msg( 'loginlanguagelabel' )->rawParams(
                                $this->getLanguage()->pipeList( $links ) )->escaped() : '';
                } else {
index d957e87..d65ac85 100644 (file)
@@ -27,7 +27,6 @@
  * @ingroup SpecialPage
  */
 class SpecialUserlogout extends UnlistedSpecialPage {
-
        function __construct() {
                parent::__construct( 'Userlogout' );
        }
index 3ef8f8b..2a54ad7 100644 (file)
@@ -55,6 +55,7 @@ class UserrightsPage extends SpecialPage {
                if ( $user->getId() == 0 ) {
                        return false;
                }
+
                return !empty( $available['add'] )
                        || !empty( $available['remove'] )
                        || ( ( $this->isself || !$checkIfSelf ) &&
@@ -118,6 +119,7 @@ class UserrightsPage extends SpecialPage {
                                $out = $this->getOutput();
                                $out->wrapWikiMsg( "<div class=\"successbox\">\n$1\n</div>", 'userrights-removed-self' );
                                $out->returnToMain();
+
                                return;
                        }
 
@@ -148,6 +150,7 @@ class UserrightsPage extends SpecialPage {
                        $status = $this->fetchUser( $this->mTarget );
                        if ( !$status->isOK() ) {
                                $this->getOutput()->addWikiText( $status->getWikiText() );
+
                                return;
                        }
 
@@ -156,7 +159,9 @@ class UserrightsPage extends SpecialPage {
                                $targetUser->clearInstanceCache(); // bug 38989
                        }
 
-                       if ( $request->getVal( 'conflictcheck-originalgroups' ) !== implode( ',', $targetUser->getGroups() ) ) {
+                       if ( $request->getVal( 'conflictcheck-originalgroups' )
+                               !== implode( ',', $targetUser->getGroups() )
+                       ) {
                                $out->addWikiMsg( 'userrights-conflict' );
                        } else {
                                $this->saveUserGroups(
@@ -166,6 +171,7 @@ class UserrightsPage extends SpecialPage {
                                );
 
                                $out->redirect( $this->getSuccessURL() );
+
                                return;
                        }
                }
@@ -266,6 +272,7 @@ class UserrightsPage extends SpecialPage {
                if ( $newGroups != $oldGroups ) {
                        $this->addLogEntry( $user, $oldGroups, $newGroups, $reason );
                }
+
                return array( $add, $remove );
        }
 
@@ -293,6 +300,7 @@ class UserrightsPage extends SpecialPage {
                $status = $this->fetchUser( $username );
                if ( !$status->isOK() ) {
                        $this->getOutput()->addWikiText( $status->getWikiText() );
+
                        return;
                } else {
                        $user = $status->value;
@@ -407,10 +415,25 @@ class UserrightsPage extends SpecialPage {
        function switchForm() {
                global $wgScript;
                $this->getOutput()->addHTML(
-                       Html::openElement( 'form', array( 'method' => 'get', 'action' => $wgScript, 'name' => 'uluser', 'id' => 'mw-userrights-form1' ) ) .
+                       Html::openElement(
+                               'form',
+                               array(
+                                       'method' => 'get',
+                                       'action' => $wgScript,
+                                       'name' => 'uluser',
+                                       'id' => 'mw-userrights-form1'
+                               )
+                       ) .
                        Html::hidden( 'title', $this->getPageTitle()->getPrefixedText() ) .
                        Xml::fieldset( $this->msg( 'userrights-lookup-user' )->text() ) .
-                       Xml::inputLabel( $this->msg( 'userrights-user-editname' )->text(), 'user', 'username', 30, str_replace( '_', ' ', $this->mTarget ), array( 'autofocus' => true ) ) . ' ' .
+                       Xml::inputLabel(
+                               $this->msg( 'userrights-user-editname' )->text(),
+                               'user',
+                               'username',
+                               30,
+                               str_replace( '_', ' ', $this->mTarget ),
+                               array( 'autofocus' => true )
+                       ) . ' ' .
                        Xml::submitButton( $this->msg( 'editusergroup' )->text() ) .
                        Html::closeElement( 'fieldset' ) .
                        Html::closeElement( 'form' ) . "\n"
@@ -479,27 +502,45 @@ class UserrightsPage extends SpecialPage {
                        $grouplist = $this->msg( 'userrights-groupsmember', $count, $user->getName() )->parse();
                        $grouplist = '<p>' . $grouplist . ' ' . $displayedList . "</p>\n";
                }
+
                $count = count( $autoList );
                if ( $count > 0 ) {
-                       $autogrouplistintro = $this->msg( 'userrights-groupsmember-auto', $count, $user->getName() )->parse();
+                       $autogrouplistintro = $this->msg( 'userrights-groupsmember-auto', $count, $user->getName() )
+                               ->parse();
                        $grouplist .= '<p>' . $autogrouplistintro . ' ' . $displayedAutolist . "</p>\n";
                }
 
                $userToolLinks = Linker::userToolLinks(
-                               $user->getId(),
-                               $user->getName(),
-                               false, /* default for redContribsWhenNoEdits */
-                               Linker::TOOL_LINKS_EMAIL /* Add "send e-mail" link */
+                       $user->getId(),
+                       $user->getName(),
+                       false, /* default for redContribsWhenNoEdits */
+                       Linker::TOOL_LINKS_EMAIL /* Add "send e-mail" link */
                );
 
                $this->getOutput()->addHTML(
-                       Xml::openElement( 'form', array( 'method' => 'post', 'action' => $this->getPageTitle()->getLocalURL(), 'name' => 'editGroup', 'id' => 'mw-userrights-form2' ) ) .
+                       Xml::openElement(
+                               'form',
+                               array(
+                                       'method' => 'post',
+                                       'action' => $this->getPageTitle()->getLocalURL(),
+                                       'name' => 'editGroup',
+                                       'id' => 'mw-userrights-form2'
+                               )
+                       ) .
                        Html::hidden( 'user', $this->mTarget ) .
                        Html::hidden( 'wpEditToken', $this->getUser()->getEditToken( $this->mTarget ) ) .
-                       Html::hidden( 'conflictcheck-originalgroups', implode( ',', $user->getGroups() ) ) . // Conflict detection
+                       Html::hidden(
+                               'conflictcheck-originalgroups',
+                               implode( ',', $user->getGroups() )
+                       ) . // Conflict detection
                        Xml::openElement( 'fieldset' ) .
-                       Xml::element( 'legend', array(), $this->msg( 'userrights-editusergroup', $user->getName() )->text() ) .
-                       $this->msg( 'editinguser' )->params( wfEscapeWikiText( $user->getName() ) )->rawParams( $userToolLinks )->parse() .
+                       Xml::element(
+                               'legend',
+                               array(),
+                               $this->msg( 'userrights-editusergroup', $user->getName() )->text()
+                       ) .
+                       $this->msg( 'editinguser' )->params( wfEscapeWikiText( $user->getName() ) )
+                               ->rawParams( $userToolLinks )->parse() .
                        $this->msg( 'userrights-groups-help', $user->getName() )->parse() .
                        $grouplist .
                        Xml::tags( 'p', null, $this->groupCheckboxes( $groups, $user ) ) .
@@ -517,7 +558,9 @@ class UserrightsPage extends SpecialPage {
                                        <td></td>
                                        <td class='mw-submit'>" .
                                                Xml::submitButton( $this->msg( 'saveusergroups' )->text(),
-                                                       array( 'name' => 'saveusergroups' ) + Linker::tooltipAndAccesskeyAttribs( 'userrights-set' ) ) .
+                                                       array( 'name' => 'saveusergroups' ) +
+                                                               Linker::tooltipAndAccesskeyAttribs( 'userrights-set' )
+                                               ) .
                                        "</td>
                                </tr>" .
                        Xml::closeElement( 'table' ) . "\n" .
@@ -602,8 +645,13 @@ class UserrightsPage extends SpecialPage {
                                continue;
                        }
                        // Messages: userrights-changeable-col, userrights-unchangeable-col
-                       $ret .= Xml::element( 'th', null, $this->msg( 'userrights-' . $name . '-col', count( $column ) )->text() );
+                       $ret .= Xml::element(
+                               'th',
+                               null,
+                               $this->msg( 'userrights-' . $name . '-col', count( $column ) )->text()
+                       );
                }
+
                $ret .= "</tr>\n<tr>\n";
                foreach ( $columns as $column ) {
                        if ( $column === array() ) {
@@ -640,7 +688,11 @@ class UserrightsPage extends SpecialPage {
        private function canRemove( $group ) {
                // $this->changeableGroups()['remove'] doesn't work, of course. Thanks, PHP.
                $groups = $this->changeableGroups();
-               return in_array( $group, $groups['remove'] ) || ( $this->isself && in_array( $group, $groups['remove-self'] ) );
+
+               return in_array(
+                       $group,
+                       $groups['remove'] ) || ( $this->isself && in_array( $group, $groups['remove-self'] )
+               );
        }
 
        /**
@@ -649,13 +701,22 @@ class UserrightsPage extends SpecialPage {
         */
        private function canAdd( $group ) {
                $groups = $this->changeableGroups();
-               return in_array( $group, $groups['add'] ) || ( $this->isself && in_array( $group, $groups['add-self'] ) );
+
+               return in_array(
+                       $group,
+                       $groups['add'] ) || ( $this->isself && in_array( $group, $groups['add-self'] )
+               );
        }
 
        /**
         * Returns $this->getUser()->changeableGroups()
         *
-        * @return Array array( 'add' => array( addablegroups ), 'remove' => array( removablegroups ), 'add-self' => array( addablegroups to self ), 'remove-self' => array( removable groups from self ) )
+        * @return array array(
+        *   'add' => array( addablegroups ),
+        *   'remove' => array( removablegroups ),
+        *   'add-self' => array( addablegroups to self ),
+        *   'remove-self' => array( removable groups from self )
+        *  )
         */
        function changeableGroups() {
                return $this->getUser()->changeableGroups();
index d509f21..c8add01 100644 (file)
@@ -29,7 +29,6 @@
  * @ingroup SpecialPage
  */
 class SpecialVersion extends SpecialPage {
-
        protected $firstExtOpened = false;
 
        protected static $extensionTypes = false;
@@ -142,7 +141,11 @@ class SpecialVersion extends SpecialPage {
         * @return string
         */
        private static function getMediaWikiCredits() {
-               $ret = Xml::element( 'h2', array( 'id' => 'mw-version-license' ), wfMessage( 'version-license' )->text() );
+               $ret = Xml::element(
+                       'h2',
+                       array( 'id' => 'mw-version-license' ),
+                       wfMessage( 'version-license' )->text()
+               );
 
                // This text is always left-to-right.
                $ret .= '<div class="plainlinks">';
@@ -163,12 +166,15 @@ class SpecialVersion extends SpecialPage {
                global $wgLang;
 
                if ( defined( 'MEDIAWIKI_INSTALL' ) ) {
-                       $othersLink = '[//www.mediawiki.org/wiki/Special:Version/Credits ' . wfMessage( 'version-poweredby-others' )->text() . ']';
+                       $othersLink = '[//www.mediawiki.org/wiki/Special:Version/Credits ' .
+                               wfMessage( 'version-poweredby-others' )->text() . ']';
                } else {
-                       $othersLink = '[[Special:Version/Credits|' . wfMessage( 'version-poweredby-others' )->text() . ']]';
+                       $othersLink = '[[Special:Version/Credits|' .
+                               wfMessage( 'version-poweredby-others' )->text() . ']]';
                }
 
-               $translatorsLink = '[//translatewiki.net/wiki/Translating:MediaWiki/Credits ' . wfMessage( 'version-poweredby-translators' )->text() . ']';
+               $translatorsLink = '[//translatewiki.net/wiki/Translating:MediaWiki/Credits ' .
+                       wfMessage( 'version-poweredby-translators' )->text() . ']';
 
                $authorList = array(
                        'Magnus Manske', 'Brion Vibber', 'Lee Daniel Crocker',
@@ -205,7 +211,11 @@ class SpecialVersion extends SpecialPage {
                // Allow a hook to add/remove items.
                wfRunHooks( 'SoftwareInfo', array( &$software ) );
 
-               $out = Xml::element( 'h2', array( 'id' => 'mw-version-software' ), wfMessage( 'version-software' )->text() ) .
+               $out = Xml::element(
+                               'h2',
+                               array( 'id' => 'mw-version-software' ),
+                               wfMessage( 'version-software' )->text()
+                       ) .
                                Xml::openElement( 'table', array( 'class' => 'wikitable plainlinks', 'id' => 'sv-software' ) ) .
                                "<tr>
                                        <th>" . wfMessage( 'version-software-product' )->text() . "</th>
@@ -255,6 +265,7 @@ class SpecialVersion extends SpecialPage {
                }
 
                wfProfileOut( __METHOD__ );
+
                return $version;
        }
 
@@ -283,6 +294,7 @@ class SpecialVersion extends SpecialPage {
                }
 
                wfProfileOut( __METHOD__ );
+
                return $v;
        }
 
@@ -323,12 +335,14 @@ class SpecialVersion extends SpecialPage {
                        preg_match( "/^(\d+\.\d+)/", $wgVersion, $versionParts );
                        $versionUrl = "https://www.mediawiki.org/wiki/MediaWiki_{$versionParts[1]}";
                }
+
                return "[$versionUrl $wgVersion]";
        }
 
        /**
         * @since 1.22 Returns the HEAD date in addition to the sha1 and link
-        * @return bool|string wgVersion + HEAD sha1 stripped to the first 7 chars with link and date, or false on failure
+        * @return bool|string wgVersion + HEAD sha1 stripped to the first 7 chars
+        *   with link and date, or false on failure
         */
        private static function getVersionLinkedGit() {
                global $IP, $wgLang;
@@ -396,6 +410,7 @@ class SpecialVersion extends SpecialPage {
         */
        public static function getExtensionTypeName( $type ) {
                $types = self::getExtensionTypes();
+
                return isset( $types[$type] ) ? $types[$type] : $types['other'];
        }
 
@@ -418,7 +433,11 @@ class SpecialVersion extends SpecialPage {
                 */
                wfRunHooks( 'SpecialVersionExtensionTypes', array( &$this, &$extensionTypes ) );
 
-               $out = Xml::element( 'h2', array( 'id' => 'mw-version-ext' ), $this->msg( 'version-extensions' )->text() ) .
+               $out = Xml::element(
+                               'h2',
+                               array( 'id' => 'mw-version-ext' ),
+                               $this->msg( 'version-extensions' )->text()
+                       ) .
                        Xml::openElement( 'table', array( 'class' => 'wikitable plainlinks', 'id' => 'sv-ext' ) );
 
                // Make sure the 'other' type is set to an array.
@@ -469,7 +488,7 @@ class SpecialVersion extends SpecialPage {
                                )
                        );
 
-                       array_walk( $tags, function( &$value ) {
+                       array_walk( $tags, function ( &$value ) {
                                $value = '&lt;' . htmlentities( $value ) . '&gt;';
                        } );
                        $out .= $this->listToText( $tags );
@@ -613,7 +632,12 @@ class SpecialVersion extends SpecialPage {
                        }
                }
 
-               $versionString = Html::rawElement( 'span', array( 'class' => 'mw-version-ext-version' ), $canonicalVersion );
+               $versionString = Html::rawElement(
+                       'span',
+                       array( 'class' => 'mw-version-ext-version' ),
+                       $canonicalVersion
+               );
+
                if ( $vcsVersion ) {
                        if ( $vcsLink ) {
                                $vcsVerString = Linker::makeExternalLink(
@@ -633,9 +657,9 @@ class SpecialVersion extends SpecialPage {
 
                        if ( $vcsDate ) {
                                $vcsTimeString = Html::element( 'span',
-                                               array( 'class' => 'mw-version-ext-vcs-timestamp' ),
-                                               $this->getLanguage()->timeanddate( $vcsDate )
-                                       );
+                                       array( 'class' => 'mw-version-ext-vcs-timestamp' ),
+                                       $this->getLanguage()->timeanddate( $vcsDate )
+                               );
                                $versionString .= " {$vcsTimeString}";
                        }
                        $versionString = Html::rawElement( 'span',
@@ -784,6 +808,7 @@ class SpecialVersion extends SpecialPage {
         */
        private function IPInfo() {
                $ip = str_replace( '--', ' - ', htmlspecialchars( $this->getRequest()->getIP() ) );
+
                return "<!-- visited from $ip -->\n<span style='display:none'>visited from $ip</span>";
        }
 
@@ -824,13 +849,11 @@ class SpecialVersion extends SpecialPage {
                                        $text = $this->msg( 'version-poweredby-others' )->text();
                                }
                                $list[] = $text;
-
                        } elseif ( substr( $item, -5 ) == ' ...]' ) {
                                $hasOthers = true;
                                $list[] = $this->getOutput()->parseInline(
                                        substr( $item, 0, -4 ) . $this->msg( 'version-poweredby-others' )->text() . "]"
                                );
-
                        } else {
                                $list[] = $this->getOutput()->parseInline( $item );
                        }
@@ -850,7 +873,7 @@ class SpecialVersion extends SpecialPage {
         * Obtains the full path of an extensions authors or credits file if
         * one exists.
         *
-        * @param string $extDir: Path to the extensions root directory
+        * @param string $extDir Path to the extensions root directory
         *
         * @since 1.23
         *
@@ -879,7 +902,7 @@ class SpecialVersion extends SpecialPage {
         * Obtains the full path of an extensions copying or license file if
         * one exists.
         *
-        * @param string $extDir: Path to the extensions root directory
+        * @param string $extDir Path to the extensions root directory
         *
         * @since 1.23
         *
@@ -924,7 +947,9 @@ class SpecialVersion extends SpecialPage {
                        if ( $sort ) {
                                sort( $list );
                        }
-                       return $this->getLanguage()->listToText( array_map( array( __CLASS__, 'arrayToString' ), $list ) );
+
+                       return $this->getLanguage()
+                               ->listToText( array_map( array( __CLASS__, 'arrayToString' ), $list ) );
                }
        }
 
@@ -942,6 +967,7 @@ class SpecialVersion extends SpecialPage {
                }
                if ( is_object( $list ) ) {
                        $class = wfMessage( 'parentheses' )->params( get_class( $list ) )->escaped();
+
                        return $class;
                } elseif ( !is_array( $list ) ) {
                        return $list;
@@ -951,6 +977,7 @@ class SpecialVersion extends SpecialPage {
                        } else {
                                $class = $list[0];
                        }
+
                        return wfMessage( 'parentheses' )->params( "$class, {$list[1]}" )->escaped();
                }
        }
@@ -1063,6 +1090,7 @@ class SpecialVersion extends SpecialPage {
         */
        public static function getGitHeadSha1( $dir ) {
                $repo = new GitInfo( $dir );
+
                return $repo->getHeadSHA1();
        }
 
@@ -1086,7 +1114,11 @@ class SpecialVersion extends SpecialPage {
                        'dir' => $language->getDir(),
                        'lang' => $language->getCode()
                );
-               $out = Html::element( 'h2', array( 'id' => 'mw-version-entrypoints' ), $this->msg( 'version-entrypoints' )->text() ) .
+               $out = Html::element(
+                               'h2',
+                               array( 'id' => 'mw-version-entrypoints' ),
+                               $this->msg( 'version-entrypoints' )->text()
+                       ) .
                        Html::openElement( 'table',
                                array(
                                        'class' => 'wikitable plainlinks',
@@ -1096,8 +1128,16 @@ class SpecialVersion extends SpecialPage {
                                )
                        ) .
                        Html::openElement( 'tr' ) .
-                       Html::element( 'th', $thAttribures, $this->msg( 'version-entrypoints-header-entrypoint' )->text() ) .
-                       Html::element( 'th', $thAttribures, $this->msg( 'version-entrypoints-header-url' )->text() ) .
+                       Html::element(
+                               'th',
+                               $thAttribures,
+                               $this->msg( 'version-entrypoints-header-entrypoint' )->text()
+                       ) .
+                       Html::element(
+                               'th',
+                               $thAttribures,
+                               $this->msg( 'version-entrypoints-header-url' )->text()
+                       ) .
                        Html::closeElement( 'tr' );
 
                foreach ( $entryPoints as $message => $value ) {
@@ -1111,11 +1151,11 @@ class SpecialVersion extends SpecialPage {
                }
 
                $out .= Html::closeElement( 'table' );
+
                return $out;
        }
 
        protected function getGroupName() {
                return 'wiki';
        }
-
 }
index 51d9af3..b8c0bb2 100644 (file)
@@ -38,9 +38,11 @@ class WantedCategoriesPage extends WantedQueryPage {
        function getQueryInfo() {
                return array(
                        'tables' => array( 'categorylinks', 'page' ),
-                       'fields' => array( 'namespace' => NS_CATEGORY,
-                                       'title' => 'cl_to',
-                                       'value' => 'COUNT(*)' ),
+                       'fields' => array(
+                               'namespace' => NS_CATEGORY,
+                               'title' => 'cl_to',
+                               'value' => 'COUNT(*)'
+                       ),
                        'conds' => array( 'page_title IS NULL' ),
                        'options' => array( 'GROUP BY' => 'cl_to' ),
                        'join_conds' => array( 'page' => array( 'LEFT JOIN',
@@ -73,7 +75,7 @@ class WantedCategoriesPage extends WantedQueryPage {
                        __METHOD__
                );
                foreach ( $categoryRes as $row ) {
-                       $this->currentCategoryCounts[ $row->cat_title ] = intval( $row->cat_pages );
+                       $this->currentCategoryCounts[$row->cat_title] = intval( $row->cat_pages );
                }
 
                // Back to start for display
@@ -104,8 +106,8 @@ class WantedCategoriesPage extends WantedQueryPage {
                } else {
                        $plink = Linker::link( $nt, $text );
 
-                       $currentValue = isset( $this->currentCategoryCounts[ $result->title ] )
-                               ? $this->currentCategoryCounts[ $result->title ]
+                       $currentValue = isset( $this->currentCategoryCounts[$result->title] )
+                               ? $this->currentCategoryCounts[$result->title]
                                : 0;
 
                        // If the category has been created or emptied since the list was refreshed, strike it
index b5c1fdb..fa68504 100644 (file)
@@ -75,9 +75,11 @@ class WantedFilesPage extends WantedQueryPage {
        function getQueryInfo() {
                return array(
                        'tables' => array( 'imagelinks', 'image' ),
-                       'fields' => array( 'namespace' => NS_FILE,
-                                       'title' => 'il_to',
-                                       'value' => 'COUNT(*)' ),
+                       'fields' => array(
+                               'namespace' => NS_FILE,
+                               'title' => 'il_to',
+                               'value' => 'COUNT(*)'
+                       ),
                        'conds' => array( 'img_name IS NULL' ),
                        'options' => array( 'GROUP BY' => 'il_to' ),
                        'join_conds' => array( 'image' =>
index acec4ea..c54d9f4 100644 (file)
@@ -69,8 +69,7 @@ class WantedPagesPage extends WantedQueryPage {
                        ),
                        'conds' => array(
                                'pg1.page_namespace IS NULL',
-                               "pl_namespace NOT IN ( '" . NS_USER .
-                                       "', '" . NS_USER_TALK . "' )",
+                               "pl_namespace NOT IN ( '" . NS_USER . "', '" . NS_USER_TALK . "' )",
                                "pg2.page_namespace != '" . NS_MEDIAWIKI . "'"
                        ),
                        'options' => array(
@@ -89,6 +88,7 @@ class WantedPagesPage extends WantedQueryPage {
                );
                // Replacement for the WantedPages::getSQL hook
                wfRunHooks( 'WantedPages::getQueryInfo', array( &$this, &$query ) );
+
                return $query;
        }
 
index d13fa03..a4b9dd8 100644 (file)
@@ -32,7 +32,6 @@
  * @ingroup SpecialPage
  */
 class WantedTemplatesPage extends WantedQueryPage {
-
        function __construct( $name = 'Wantedtemplates' ) {
                parent::__construct( $name );
        }
@@ -40,16 +39,19 @@ class WantedTemplatesPage extends WantedQueryPage {
        function getQueryInfo() {
                return array(
                        'tables' => array( 'templatelinks', 'page' ),
-                       'fields' => array( 'namespace' => 'tl_namespace',
-                                       'title' => 'tl_title',
-                                       'value' => 'COUNT(*)' ),
-                       'conds' => array( 'page_title IS NULL',
-                                       'tl_namespace' => NS_TEMPLATE ),
-                       'options' => array(
-                               'GROUP BY' => array( 'tl_namespace', 'tl_title' ) ),
+                       'fields' => array(
+                               'namespace' => 'tl_namespace',
+                               'title' => 'tl_title',
+                               'value' => 'COUNT(*)'
+                       ),
+                       'conds' => array(
+                               'page_title IS NULL',
+                               'tl_namespace' => NS_TEMPLATE
+                       ),
+                       'options' => array( 'GROUP BY' => array( 'tl_namespace', 'tl_title' ) ),
                        'join_conds' => array( 'page' => array( 'LEFT JOIN',
-                                       array( 'page_namespace = tl_namespace',
-                                               'page_title = tl_title' ) ) )
+                               array( 'page_namespace = tl_namespace',
+                                       'page_title = tl_title' ) ) )
                );
        }
 
index 4c3f17b..dd9f262 100644 (file)
@@ -28,9 +28,6 @@
  * @ingroup SpecialPage
  */
 class SpecialWatchlist extends ChangesListSpecialPage {
-       /**
-        * Constructor
-        */
        public function __construct( $page = 'Watchlist', $restriction = 'viewmywatchlist' ) {
                parent::__construct( $page, $restriction );
        }
@@ -58,6 +55,7 @@ class SpecialWatchlist extends ChangesListSpecialPage {
                        }
 
                        $output->redirect( $title->getLocalURL() );
+
                        return;
                }
 
@@ -66,11 +64,13 @@ class SpecialWatchlist extends ChangesListSpecialPage {
                $user = $this->getUser();
                $opts = $this->getOptions();
 
-               if ( ( $wgEnotifWatchlist || $wgShowUpdatedMarker ) && $request->getVal( 'reset' ) &&
-                       $request->wasPosted() )
-               {
+               if ( ( $wgEnotifWatchlist || $wgShowUpdatedMarker )
+                       && $request->getVal( 'reset' )
+                       && $request->wasPosted()
+               ) {
                        $user->clearAllNotifications();
                        $output->redirect( $this->getPageTitle()->getFullURL( $opts->getChangedValues() ) );
+
                        return;
                }
 
@@ -145,6 +145,7 @@ class SpecialWatchlist extends ChangesListSpecialPage {
                // methods defined on WebRequest and removing this dependency would cause some code duplication.
                $request = new DerivativeRequest( $this->getRequest(), $params );
                $opts->fetchValuesFromRequest( $request );
+
                return $opts;
        }
 
@@ -160,7 +161,8 @@ class SpecialWatchlist extends ChangesListSpecialPage {
 
                // Calculate cutoff
                if ( $opts['days'] > 0 ) {
-                       $conds[] = 'rc_timestamp > ' . $dbr->addQuotes( $dbr->timestamp( time() - intval( $opts['days'] * 86400 ) ) );
+                       $conds[] = 'rc_timestamp > ' .
+                               $dbr->addQuotes( $dbr->timestamp( time() - intval( $opts['days'] * 86400 ) ) );
                }
 
                return $conds;
@@ -379,7 +381,8 @@ class SpecialWatchlist extends ChangesListSpecialPage {
                if ( $opts['days'] > 0 ) {
                        $timestamp = wfTimestampNow();
                        $wlInfo = $this->msg( 'wlnote2' )->numParams( round( $opts['days'] * 24 ) )->params(
-                               $lang->userDate( $timestamp, $user ), $lang->userTime( $timestamp, $user ) )->parse() . "<br />\n";
+                               $lang->userDate( $timestamp, $user ), $lang->userTime( $timestamp, $user )
+                       )->parse() . "<br />\n";
                }
 
                $nondefaults = $opts->getChangedValues();
@@ -513,7 +516,9 @@ class SpecialWatchlist extends ChangesListSpecialPage {
                $label = $this->msg( $value ? 'show' : 'hide' )->escaped();
                $options[$name] = 1 - (int)$value;
 
-               return $this->msg( $message )->rawParams( Linker::linkKnown( $this->getPageTitle(), $label, array(), $options ) )->escaped();
+               return $this->msg( $message )
+                       ->rawParams( Linker::linkKnown( $this->getPageTitle(), $label, array(), $options ) )
+                       ->escaped();
        }
 
        protected function hoursLink( $h, $options = array() ) {
@@ -529,7 +534,8 @@ class SpecialWatchlist extends ChangesListSpecialPage {
 
        protected function daysLink( $d, $options = array() ) {
                $options['days'] = $d;
-               $message = ( $d ? $this->getLanguage()->formatNum( $d ) : $this->msg( 'watchlistall2' )->escaped() );
+               $message = $d ? $this->getLanguage()->formatNum( $d )
+                       : $this->msg( 'watchlistall2' )->escaped();
 
                return Linker::linkKnown(
                        $this->getPageTitle(),
@@ -557,6 +563,7 @@ class SpecialWatchlist extends ChangesListSpecialPage {
                foreach ( $days as $d ) {
                        $days[$i++] = $this->daysLink( $d, $options );
                }
+
                return $this->msg( 'wlshowlast' )->rawParams(
                        $this->getLanguage()->pipeList( $hours ),
                        $this->getLanguage()->pipeList( $days ),
index 176fbd4..0587649 100644 (file)
  * @ingroup SpecialPage
  */
 class SpecialWhatLinksHere extends IncludableSpecialPage {
-
-       /**
-        * @var FormOptions
-        */
+       /** @var FormOptions */
        protected $opts;
 
        protected $selfTitle;
 
-       /**
-        * @var Title
-        */
+       /** @var Title */
        protected $target;
 
        protected $limits = array( 20, 50, 100, 250, 500 );
@@ -79,6 +74,7 @@ class SpecialWhatLinksHere extends IncludableSpecialPage {
                $this->target = Title::newFromURL( $opts->getValue( 'target' ) );
                if ( !$this->target ) {
                        $out->addHTML( $this->whatlinkshereForm() );
+
                        return;
                }
 
@@ -88,7 +84,13 @@ class SpecialWhatLinksHere extends IncludableSpecialPage {
 
                $out->setPageTitle( $this->msg( 'whatlinkshere-title', $this->target->getPrefixedText() ) );
                $out->addBacklinkSubtitle( $this->target );
-               $this->showIndirectLinks( 0, $this->target, $opts->getValue( 'limit' ), $opts->getValue( 'from' ), $opts->getValue( 'back' ) );
+               $this->showIndirectLinks(
+                       0,
+                       $this->target,
+                       $opts->getValue( 'limit' ),
+                       $opts->getValue( 'from' ),
+                       $opts->getValue( 'back' )
+               );
        }
 
        /**
@@ -158,7 +160,7 @@ class SpecialWhatLinksHere extends IncludableSpecialPage {
                        'rd_namespace' => $target->getNamespace(),
                        'rd_title' => $target->getDBkey(),
                        'rd_interwiki = ' . $dbr->addQuotes( '' ) . ' OR rd_interwiki IS NULL'
-               )));
+               ) ) );
 
                if ( $fetchlinks ) {
                        $options['ORDER BY'] = 'pl_from';
@@ -184,7 +186,10 @@ class SpecialWhatLinksHere extends IncludableSpecialPage {
                        );
                }
 
-               if ( ( !$fetchlinks || !$plRes->numRows() ) && ( $hidetrans || !$tlRes->numRows() ) && ( $hideimages || !$ilRes->numRows() ) ) {
+               if ( ( !$fetchlinks || !$plRes->numRows() )
+                       && ( $hidetrans || !$tlRes->numRows() )
+                       && ( $hideimages || !$ilRes->numRows() )
+               ) {
                        if ( 0 == $level ) {
                                if ( !$this->including() ) {
                                        $out->addHTML( $this->whatlinkshereForm() );
@@ -197,6 +202,7 @@ class SpecialWhatLinksHere extends IncludableSpecialPage {
                                        $out->addWikiMsg( $errMsg, $this->target->getPrefixedText() );
                                }
                        }
+
                        return;
                }
 
@@ -270,7 +276,7 @@ class SpecialWhatLinksHere extends IncludableSpecialPage {
                $out->addHTML( $this->listEnd() );
 
                if ( $level == 0 ) {
-                       if( !$this->including() ){
+                       if ( !$this->including() ) {
                                $out->addHTML( $prevnext );
                        }
                }
@@ -321,12 +327,16 @@ class SpecialWhatLinksHere extends IncludableSpecialPage {
                }
 
                if ( count( $props ) ) {
-                       $propsText = $this->msg( 'parentheses' )->rawParams( implode( $msgcache['semicolon-separator'], $props ) )->escaped();
+                       $propsText = $this->msg( 'parentheses' )
+                               ->rawParams( implode( $msgcache['semicolon-separator'], $props ) )->escaped();
                }
 
                # Space for utilities links, with a what-links-here link provided
                $wlhLink = $this->wlhLink( $nt, $msgcache['whatlinkshere-links'] );
-               $wlh = Xml::wrapClass( $this->msg( 'parentheses' )->rawParams( $wlhLink )->escaped(), 'mw-whatlinkshere-tools' );
+               $wlh = Xml::wrapClass(
+                       $this->msg( 'parentheses' )->rawParams( $wlhLink )->escaped(),
+                       'mw-whatlinkshere-tools'
+               );
 
                return $notClose ?
                        Xml::openElement( 'li' ) . "$link $propsText $dirmark $wlh\n" :
@@ -414,7 +424,7 @@ class SpecialWhatLinksHere extends IncludableSpecialPage {
 
                # Target input
                $f .= Xml::inputLabel( $this->msg( 'whatlinkshere-page' )->text(), 'target',
-                               'mw-whatlinkshere-target', 40, $target );
+                       'mw-whatlinkshere-target', 40, $target );
 
                $f .= ' ';
 
@@ -460,7 +470,8 @@ class SpecialWhatLinksHere extends IncludableSpecialPage {
                        $types[] = 'hideimages';
                }
 
-               // Combined message keys: 'whatlinkshere-hideredirs', 'whatlinkshere-hidetrans', 'whatlinkshere-hidelinks', 'whatlinkshere-hideimages'
+               // Combined message keys: 'whatlinkshere-hideredirs', 'whatlinkshere-hidetrans',
+               // 'whatlinkshere-hidelinks', 'whatlinkshere-hideimages'
                // To be sure they will be found by grep
                foreach ( $types as $type ) {
                        $chosen = $this->opts->getValue( $type );
@@ -469,7 +480,11 @@ class SpecialWhatLinksHere extends IncludableSpecialPage {
                        $links[] = $this->msg( "whatlinkshere-{$type}" )->rawParams(
                                $this->makeSelfLink( $msg, array_merge( $changed, $overrides ) ) )->escaped();
                }
-               return Xml::fieldset( $this->msg( 'whatlinkshere-filters' )->text(), $this->getLanguage()->pipeList( $links ) );
+
+               return Xml::fieldset(
+                       $this->msg( 'whatlinkshere-filters' )->text(),
+                       $this->getLanguage()->pipeList( $links )
+               );
        }
 
        protected function getGroupName() {
index 2ddde43..e05faef 100644 (file)
@@ -55,7 +55,13 @@ class WithoutInterwikiPage extends PageQueryPage {
                        Html::openElement( 'fieldset' ) . "\n" .
                        Html::element( 'legend', null, $this->msg( 'withoutinterwiki-legend' )->text() ) . "\n" .
                        Html::hidden( 'title', $t->getPrefixedText() ) . "\n" .
-                       Xml::inputLabel( $this->msg( 'allpagesprefix' )->text(), 'prefix', 'wiprefix', 20, $prefix ) . "\n" .
+                       Xml::inputLabel(
+                               $this->msg( 'allpagesprefix' )->text(),
+                               'prefix',
+                               'wiprefix',
+                               20,
+                               $prefix
+                       ) . "\n" .
                        Xml::submitButton( $this->msg( 'withoutinterwiki-submit' )->text() ) . "\n" .
                        Html::closeElement( 'fieldset' ) . "\n" .
                        Html::closeElement( 'form' );
@@ -80,19 +86,23 @@ class WithoutInterwikiPage extends PageQueryPage {
        function getQueryInfo() {
                $query = array(
                        'tables' => array( 'page', 'langlinks' ),
-                       'fields' => array( 'namespace' => 'page_namespace',
-                                       'title' => 'page_title',
-                                       'value' => 'page_title' ),
-                       'conds' => array( 'll_title IS NULL',
-                                       'page_namespace' => MWNamespace::getContentNamespaces(),
-                                       'page_is_redirect' => 0 ),
-                       'join_conds' => array( 'langlinks' => array(
-                                       'LEFT JOIN', 'll_from = page_id' ) )
+                       'fields' => array(
+                               'namespace' => 'page_namespace',
+                               'title' => 'page_title',
+                               'value' => 'page_title'
+                       ),
+                       'conds' => array(
+                               'll_title IS NULL',
+                               'page_namespace' => MWNamespace::getContentNamespaces(),
+                               'page_is_redirect' => 0
+                       ),
+                       'join_conds' => array( 'langlinks' => array( 'LEFT JOIN', 'll_from = page_id' ) )
                );
                if ( $this->prefix ) {
                        $dbr = wfGetDB( DB_SLAVE );
                        $query['conds'][] = 'page_title ' . $dbr->buildLike( $this->prefix, $dbr->anyString() );
                }
+
                return $query;
        }
 
index b470822..741ceba 100644 (file)
@@ -1590,7 +1590,7 @@ As u dit verskaf, sal dit gebruik word om erkenning vir u werk te gee.',
 'recentchanges-label-plusminus' => 'Bladsy is met die aantal grepe gewysig',
 'recentchanges-legend-heading' => "'''Sleutel:'''",
 'recentchanges-legend-newpage' => '$1 - nuwe bladsy',
-'rcnotefrom' => "Hier volg wysigings sedert '''$2''' (maksimum van '''$1''' word gewys).",
+'rcnotefrom' => 'Wysigings sedert <strong>$2</strong> (maksimum van <strong>$1</strong> word gewys).',
 'rclistfrom' => 'Vertoon wysigings vanaf $1',
 'rcshowhideminor' => '$1 klein wysigings',
 'rcshowhidebots' => '$1 robotte',
index 687cc3e..7aee48e 100644 (file)
@@ -111,7 +111,7 @@ $messages = array(
 'tog-previewontop' => 'Папярэдні паказ — над рэдактарскім полем',
 'tog-previewonfirst' => 'Папярэдні паказ пры першай праўцы',
 'tog-enotifwatchlistpages' => 'Слаць мне эл.пошту, калі мяняецца старонка ў маім спісе назірання',
-'tog-enotifusertalkpages' => 'СлаÑ\86Ñ\8c Ñ\8dл.поÑ\88Ñ\82Ñ\83 Ð¿Ñ\80а Ð¼ÐµÐ½Ñ\8b Ñ\9e Ð¼Ð°Ñ\91й Ñ\80азмоÑ\9eнай Ñ\81Ñ\82аÑ\80онÑ\86Ñ\8b',
+'tog-enotifusertalkpages' => 'Ð\9fаведамлÑ\8fÑ\86Ñ\8c Ð¼Ð½Ðµ Ð½Ð° Ñ\8dл.поÑ\88Ñ\82Ñ\83 Ð°Ð± Ð·Ð¼ÐµÐ½Ð°Ñ\85 Ð½Ð° Ð¼Ð°Ñ\91й Ñ\81Ñ\82аÑ\80онÑ\86Ñ\8b Ñ\80азмоÑ\9e',
 'tog-enotifminoredits' => 'Паведамяць мне на эл.пошту пра дробныя праўкі старонак і файлаў',
 'tog-enotifrevealaddr' => 'Не скрываць майго адрасу эл.пошты ў паведамленнях',
 'tog-shownumberswatching' => 'Паказваць колькасць назіральнікаў',
@@ -769,6 +769,7 @@ $2
 Магчыма, прычына ў выкарыстанні вамі ананімнага проксі-сервера, праграмы якога працуюць некарэктна.'''",
 'edit_form_incomplete' => "'''Некаторыя часткі формы рэдагавання не дасягнулі сервера. Упэўніцеся, што Вашыя рэдагаванні не пашкоджаныя і паспрабуйце зноў.'''",
 'editing' => 'Правім: $1',
+'creating' => 'Стварэнне старонкі «$1»',
 'editingsection' => 'Правім $1 (раздзел)',
 'editingcomment' => 'Правім $1 (новы раздзел)',
 'editconflict' => 'Канфлікт правак: $1',
@@ -1341,7 +1342,7 @@ $1",
 'nchanges' => '$1 {{PLURAL:$1|змена|змены|змен}}',
 'recentchanges' => 'Апошнія змены',
 'recentchanges-legend' => 'Магчымасці паказу',
-'recentchanges-summary' => 'Гэта апошнія мены на пляцоўцы {{SITENAME}}.',
+'recentchanges-summary' => 'Ð\93Ñ\8dÑ\82а Ð°Ð¿Ð¾Ñ\88нÑ\96Ñ\8f Ð·Ð¼ÐµÐ½Ñ\8b Ð½Ð° Ð¿Ð»Ñ\8fÑ\86оÑ\9eÑ\86Ñ\8b {{SITENAME}}.',
 'recentchanges-feed-description' => 'Сачыць за найбольш актуальнымі змяненнямі ў віксе праз гэты струмень навін.',
 'recentchanges-label-newpage' => 'Гэтай праўкай была створана новая старонка',
 'recentchanges-label-minor' => 'Гэта дробная па значэнні праўка',
@@ -1986,7 +1987,7 @@ $1',
 'enotif_mailer' => 'Апавяшчальнік {{SITENAME}}',
 'enotif_reset' => 'Пазначыць усе старонкі як наведаныя',
 'enotif_impersonal_salutation' => 'Шаноўны ўдзельнік {{SITENAME}}',
-'enotif_lastvisited' => 'Гл. $1 каб бачыць усе мены пасля вашага апошняга наведвання.',
+'enotif_lastvisited' => 'Ð\93л. $1 ÐºÐ°Ð± Ð±Ð°Ñ\87Ñ\8bÑ\86Ñ\8c Ñ\83Ñ\81е Ð·Ð¼ÐµÐ½Ñ\8b Ð¿Ð°Ñ\81лÑ\8f Ð²Ð°Ñ\88ага Ð°Ð¿Ð¾Ñ\88нÑ\8fга Ð½Ð°Ð²ÐµÐ´Ð²Ð°Ð½Ð½Ñ\8f.',
 'enotif_lastdiff' => 'Гл. $1 каб бачыць гэтую мену.',
 'enotif_anon_editor' => 'ананімны ўдзельнік $1',
 'enotif_body' => 'Паважаны(ая) $WATCHINGUSERNAME,
@@ -2588,7 +2589,7 @@ $1',
 'tooltip-pt-login' => 'Уваходзіць у сістэму неабавязкова, але вас вельмі запрашаюць гэтак зрабіць.',
 'tooltip-pt-logout' => 'Выйсці з сістэмы',
 'tooltip-ca-talk' => 'Размовы пра змест гэтай старонкі',
-'tooltip-ca-edit' => 'Старонку можна правіць; ужывайце папярэдні паказ перад замацоўваннем.',
+'tooltip-ca-edit' => 'Старонку можна правіць. Перш чым запісаць свае змены, паглядзіце на вынік, націснуўшы кнопку папярэдняга прагляду.',
 'tooltip-ca-addsection' => 'Дадаць новы раздзел',
 'tooltip-ca-viewsource' => 'Гэтая старонка ахоўваецца, але можна паглядзець яе зыходны тэкст.',
 'tooltip-ca-history' => 'Ранейшыя версіі гэтай старонкі.',
@@ -2611,7 +2612,7 @@ $1',
 'tooltip-n-randompage' => 'Паказаць выпадковую старонку',
 'tooltip-n-help' => 'Дзе можна атрымаць тлумачэнні.',
 'tooltip-t-whatlinkshere' => 'Спіс вікі-старонак, што спасылаюцца сюды',
-'tooltip-t-recentchangeslinked' => 'Нядаўнія мены ў старонках, на якія спасылаецца гэтая старонка',
+'tooltip-t-recentchangeslinked' => 'Ð\9dÑ\8fдаÑ\9eнÑ\96Ñ\8f Ð·Ð¼ÐµÐ½Ñ\8b Ñ\9e Ñ\81Ñ\82аÑ\80онкаÑ\85, Ð½Ð° Ñ\8fкÑ\96Ñ\8f Ñ\81паÑ\81Ñ\8bлаеÑ\86Ñ\86а Ð³Ñ\8dÑ\82аÑ\8f Ñ\81Ñ\82аÑ\80онка',
 'tooltip-feed-rss' => 'RSS-струмень гэтай старонкі',
 'tooltip-feed-atom' => 'Струмень навін Atom для гэтай старонкі',
 'tooltip-t-contributions' => 'Паказаць пералік укладаў гэтага ўдзельніка',
@@ -3297,8 +3298,8 @@ $5
 'livepreview-error' => 'Не ўдалося далучыцца: $1 "$2". Паспрабуйце звычайны перадпаказ.',
 
 # Friendlier slave lag warnings
-'lag-warn-normal' => 'Ð\9cенÑ\8b, Ð½Ð°Ð²ÐµÐ¹Ñ\88Ñ\8bÑ\8f Ð·Ð° $1 {{PLURAL:$1|Ñ\81ек.|Ñ\81ек.}}, Ð¼Ð¾Ð³Ñ\83Ñ\86Ñ\8c Ð½Ðµ Ñ\82Ñ\80апÑ\96Ñ\86Ñ\8c Ñ\83 Ð³Ñ\8dÑ\82Ñ\8b Ð¿Ð°ÐºÐ°Ð·.',
-'lag-warn-high' => 'Ð\97 Ð¿Ñ\80Ñ\8bÑ\87Ñ\8bнÑ\8b Ð¼Ð¾Ñ\86нÑ\8bÑ\85 Ð·Ð°Ñ\82Ñ\80Ñ\8bмак Ð½Ð° Ñ\81еÑ\80веÑ\80Ñ\8b Ð±Ð°Ð· Ð´Ð°Ð½Ñ\8bÑ\85, Ð¼ÐµÐ½Ñ\8b, Ð½Ð°Ð²ÐµÐ¹Ñ\88Ñ\8bÑ\8f Ð·Ð° $1 {{PLURAL:$1|Ñ\81ек.|Ñ\81ек.}}, Ð¼Ð¾Ð³Ñ\83Ñ\86Ñ\8c Ð½Ðµ Ñ\82Ñ\80апÑ\96Ñ\86Ñ\8c Ñ\83 Ð³Ñ\8dÑ\82Ñ\8b Ð¿Ð°ÐºÐ°Ð·.',
+'lag-warn-normal' => 'Ð\97менÑ\8b, Ð·Ñ\80обленÑ\8bÑ\8f Ð¼ÐµÐ½Ñ\88 Ð·Ð° $1 {{PLURAL:$1|Ñ\81ек.|Ñ\81ек.}} Ð½Ð°Ð·Ð°Ð´, Ð¼Ð¾Ð³Ñ\83Ñ\86Ñ\8c Ð½Ðµ Ñ\82Ñ\80апÑ\96Ñ\86Ñ\8c Ñ\83 Ð³Ñ\8dÑ\82Ñ\8b Ñ\81пÑ\96Ñ\81.',
+'lag-warn-high' => 'Ð\97 Ð¿Ñ\80Ñ\8bÑ\87Ñ\8bнÑ\8b Ð¼Ð¾Ñ\86нÑ\8bÑ\85 Ð·Ð°Ñ\82Ñ\80Ñ\8bмак Ð½Ð° Ñ\81еÑ\80веÑ\80Ñ\8b Ð±Ð°Ð· Ð´Ð°Ð½Ñ\8bÑ\85, Ð·Ð¼ÐµÐ½Ñ\8b, Ð·Ñ\80обленÑ\8bÑ\8f Ð¿Ð°Ð·Ð½ÐµÐ¹ Ñ\87Ñ\8bм $1 {{PLURAL:$1|Ñ\81ек.|Ñ\81ек.}} Ð½Ð°Ð·Ð°Ð´, Ð¼Ð¾Ð³Ñ\83Ñ\86Ñ\8c Ð½Ðµ Ñ\82Ñ\80апÑ\96Ñ\86Ñ\8c Ñ\83 Ð³Ñ\8dÑ\82Ñ\8b Ñ\81пÑ\96Ñ\81.',
 
 # Watchlist editor
 'watchlistedit-numitems' => 'У назіраным {{PLURAL:$1|1 складнік|$1 складнікаў}}, без уліку размоўных старонак.',
index 4304c1e..3761af8 100644 (file)
@@ -2073,6 +2073,10 @@ $1',
 # List redirects
 'listredirects' => 'Сьпіс перанакіраваньняў',
 
+# List duplicated files special page
+'listduplicatedfiles' => 'Сьпіс файлаў з дублікатамі',
+'listduplicatedfiles-summary' => 'Гэта сьпіс файлаў, дзе самая апошняя вэрсія файла зьяўляецца дублікатам самай апошняй вэрсіі нейкага іншага файла. Улічваюцца толькі лякальныя файлы.',
+
 # Unused templates
 'unusedtemplates' => 'Шаблёны, якія не выкарыстоўваюцца',
 'unusedtemplatestext' => 'На гэтай старонцы зьмешчаны сьпіс усіх старонак прасторы назваў «{{ns:template}}», якія ня ўключаныя ў іншыя старонкі.
@@ -3802,6 +3806,7 @@ $5
 
 # Language selector for translatable SVGs
 'img-lang-default' => '(мова па змоўчаньні)',
+'img-lang-info' => 'Паказаць гэтую выяву наступнай мовай: $1. $2',
 
 # Table pager
 'ascending_abbrev' => 'узраст.',
index a7c27db..c19026a 100644 (file)
@@ -621,6 +621,7 @@ Na zisoñjit ket resisaat ho [[Special:Preferences|penndibaboù evit {{SITENAME}
 'gotaccountlink' => 'Kevreañ',
 'userlogin-resetlink' => "Ha disoñjet eo bet ho titouroù kevreañ ganeoc'h ?",
 'userlogin-resetpassword-link' => 'Ankouaet ho peus ho ker-tremen ?',
+'userlogin-helplink2' => 'Skoazell evit kevreañ',
 'userlogin-loggedin' => "Kevreet oc'h dija evel {{GENDER:$1|$1}}.
 Implijit ar furmskrid amañ dindan evit kevreañ evel un implijer all.",
 'userlogin-createanother' => 'Krouiñ ur gont all',
@@ -710,6 +711,10 @@ Gortozit $1, mar plij, a-raok esaeañ en-dro.",
 'loginlanguagelabel' => 'Yezh : $1',
 'suspicious-userlogout' => 'Distaolet eo bet ho koulenn digevreañ rak kaset e oa bet gant ur merdeer direizhet pe krubuilhadenn ur proksi, evit doare.',
 'createacct-another-realname-tip' => "Diret eo skrivañ hoc'h anv gwir. Ma skrivit anezhañ e vo implijet evit lakaat war wel ar pezh a vo bet degaset ganeoc'h.",
+'pt-login' => 'Kevreañ',
+'pt-login-button' => 'Kevreañ',
+'pt-createaccount' => 'Krouiñ ur gont',
+'pt-userlogout' => 'Digevreañ',
 
 # Email sending
 'php-mail-error-unknown' => "Fazi dianav en arc'hwel postel () PHP",
@@ -718,7 +723,7 @@ Gortozit $1, mar plij, a-raok esaeañ en-dro.",
 
 # Change password dialog
 'changepassword' => 'Kemmañ ar ger-tremen',
-'resetpass_announce' => "Enskrivet oc’h bet dre ur ger-tremen da c'hortoz kaset deoc'h dre bostel. A-benn bezañ enrollet da vat e rankit spisaat ur ger-tremen nevez amañ :",
+'resetpass_announce' => 'Evit echuiñ da gevreañ e rankit lakaat ur ger-tremen nevez.',
 'resetpass_text' => '<!-- Ouzhpennañ testenn amañ -->',
 'resetpass_header' => 'Cheñch ger-tremen ar gont',
 'oldpassword' => 'Ger-tremen kozh :',
@@ -735,6 +740,7 @@ Gortozit $1, mar plij, a-raok esaeañ en-dro.",
 'resetpass-wrong-oldpass' => "Direizh eo ar ger-tremen a-vremañ pe da c'hortoz.",
 'resetpass-temp-password' => "Ger-tremen da c'hortoz :",
 'resetpass-abort-generic' => 'Nullet eo bet kemm ar ger-tremen gant un astenn.',
+'resetpass-expired' => "Deuet eo ho ker-tremen d'e dermen. Lakait ur ger-tremen nevez, mar plij, evit kevreañ.",
 
 # Special:PasswordReset
 'passwordreset' => 'Adderaouekaat ar ger-tremen',
@@ -765,7 +771,7 @@ Mat e vefe deoc'h kevreañ ha dibab ur ger-tremen nevez bremañ. Mard eo bet gou
 Ger-tremen da c'hortoz : $2",
 'passwordreset-emailsent' => "Kaset ez eus bet ur postel deoc'h da adderaouekaat ho ker-tremen.",
 'passwordreset-emailsent-capture' => 'Ur postel evit aderaouekaat ho ker-tremen, evel diskouezet amañ dindan, zo bet kaset.',
-'passwordreset-emailerror-capture' => "Kaset ez eus bet ur postel degas da soñj evel m'emañ diskouezet amañ dindan met c'hwitet eo bet ar c'has : $1",
+'passwordreset-emailerror-capture' => "Kaset ez eus bet ur postel degas da soñj evel m'emañ diskouezet amañ dindan met c'hwitet eo bet ar gasadenn d'an {{GENDER:$2|implijer|implijerez}} : $1",
 
 # Special:ChangeEmail
 'changeemail' => "Kemmañ ar chomlec'h postel",
@@ -993,7 +999,8 @@ Krouet e oa bet c'hoazh.",
 'invalid-content-data' => "n'eo ket mat roadennoù an endalc'had",
 'content-not-allowed-here' => 'N\'eo ket aotreet an endalc\'had "$1" er bajenn [[$2]]',
 'editwarning-warning' => "Mar kuitait ar bajenn-mañ e c'hallit koll ar c'hemmoù degaset ganeoc'h.
-Ma'z oc'h kevreet e c'hallit diweredekaat ar c'hemenn-diwall-mañ e rann \"Aozañ\" en ho penndibaboù.",
+Ma'z oc'h kevreet e c'hallit diweredekaat ar c'hemenn-diwall-mañ e rann \"{{int:prefs-editing}}\" en ho penndibaboù.",
+'editpage-notsupportedcontentformat-title' => "Furmad endalc'had ha n'eo ket kemeret e karg",
 
 # Content models
 'content-model-wikitext' => 'wikitestenn',
@@ -1111,9 +1118,9 @@ Gallout a ri gwelet an diforc'h-mañ ; titouroù zo war [{{fullurl:{{#Special:Lo
 'revdelete-selected' => "'''{{PLURAL:$2|Stumm dibabet|Stummoù dibabet}} eus [[:$1]] :'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Darvoud eus ar marilh diuzet|Darvoud eus ar marilh diuzet}} :'''",
 'revdelete-confirm' => "Kadarnait eo mat an dra-se a fell deoc'h ober, e komprenit mat ar pezh a empleg, hag en grit en ur zoujañ d'ar [[{{MediaWiki:Policy-url}}|reolennoù]].",
-'revdelete-suppress-text' => "Ne zlefe an dilemel bezañ implijet '''nemet''' abalamour d'an abegoù da-heul :
+'revdelete-suppress-text' => "Ne zlefe an dilemel bezañ implijet <strong>nemet</strong> abalamour d'an abegoù da-heul :
 * Titouroù personel dizere
-*: ''chomlec'hioù, niverennoù pellgomz pe surentez sokial personel, hag all''",
+*: <em>chomlec'hioù, niverennoù pellgomz pe surentez sokial personel, hag all.</em>",
 'revdelete-legend' => 'Lakaat strishadurioù gwelet',
 'revdelete-hide-text' => 'Testenn ar stumm',
 'revdelete-hide-image' => 'Kuzhat danvez ar restr',
@@ -1200,6 +1207,8 @@ Gwiriit ne vo ket torret red istor ar bajenn gant ar c'hemm-mañ.",
 'showhideselectedversions' => 'Diskouez/Kuzhat ar stummoù diuzet',
 'editundo' => 'dizober',
 'diff-empty' => '(Disheñvelder ebet)',
+'diff-multi-sameuser' => "({{PLURAL:$1|Ur reizhadenn da c'hortoz|$1 reizhadenn da c'hortoz}} gant ar memes implijer kuzhet)",
+'diff-multi-otherusers' => "({{PLURAL:$1|Ur reizhadenn da c'hortoz|$1 reizhadenn da c'hortoz}} gant {{PLURAL:$2|un implijer all|$2 implijer}} kuzhet.)",
 'diff-multi-manyusers' => "({{PLURAL:$1|Ur reizhadenn da c'hortoz|$1 reizhadenn da c'hortoz}} gant muioc'h eget $2 {{PLURAL:$2|implijer|implijer}} kuzhet.)",
 'difference-missing-revision' => "!!{{PLURAL:$2|Un adweladur|$2 adweladurioù}} eus an disheñvelder ($1) {{PLURAL:$2|n'eo ket bet kavet|n'int ket bet adkavet}}.
 
@@ -1239,7 +1248,7 @@ Gallout a reot kavout munudoù e [{{fullurl:{{#Special:Log}}/delete|page={{FULLP
 'search-file-match' => "(klotañ a ra gant endalc'had ar restr)",
 'search-suggest' => "N'hoc'h eus ket soñjet kentoc'h e : $1",
 'search-interwiki-caption' => 'Raktresoù kar',
-'search-interwiki-default' => "$1 disoc'h :",
+'search-interwiki-default' => "Disoc'hoù eus $1 :",
 'search-interwiki-more' => "(muioc'h)",
 'search-relatedarticle' => "Disoc'hoù kar",
 'searcheverything-enable' => 'Klask en holl esaouennoù anv',
@@ -1263,6 +1272,7 @@ Gallout a reot kavout munudoù e [{{fullurl:{{#Special:Log}}/delete|page={{FULLP
 'preferences' => 'Penndibaboù',
 'mypreferences' => 'Penndibaboù',
 'prefs-edits' => 'Niver a zegasadennoù :',
+'prefsnologintext2' => '$1, mar plij, evit cheñch ho penndibaboù.',
 'prefs-skin' => 'Gwiskadur',
 'skin-preview' => 'Rakwelet',
 'datedefault' => 'Dre ziouer',
@@ -1368,6 +1378,7 @@ Ma skrivit anezhañ e vo implijet evit lakaat war wel ar pezh a vo bet degaset g
 'prefs-tokenwatchlist' => 'Jedouer',
 'prefs-diffs' => "Diforc'hioù",
 'prefs-help-prefershttps' => "Efediñ a ray an dibarzh-mañ kentañ gwech ma kevreoc'h.",
+'prefs-tabs-navigation-hint' => 'Titourig : Gallout a rit implijout an touchennoù bir kleiz ha bir dehoù evit merdeiñ etre an ivinelloù e roll an ivinelloù.',
 
 # User preference: email validation using jQuery
 'email-address-validity-valid' => "Reizh eo ar chomlec'h postel war a seblant",
@@ -1554,14 +1565,26 @@ Ma skrivit anezhañ e vo implijet evit lakaat war wel ar pezh a vo bet degaset g
 'recentchanges-label-plusminus' => 'Kemmet eo ment ar bajenn eus an niver-mañ a oktedoù',
 'recentchanges-legend-heading' => "'''Alc'hwez :'''",
 'recentchanges-legend-newpage' => '(gwelet ivez [[Special:NewPages|roll ar pajennoù nevez]])',
-'rcnotefrom' => "Setu aze roll ar c'hemmoù c'hoarvezet abaoe an '''$2''' ('''$1''' d'ar muiañ).",
+'rcnotefrom' => "Setu aze roll ar c'hemmoù c'hoarvezet abaoe an <strong>$2</strong> (<strong>$1</strong> d'ar muiañ).",
 'rclistfrom' => "Diskouez ar c'hemmoù diwezhañ abaoe an $1.",
 'rcshowhideminor' => "$1 ar c'hemmoù dister",
+'rcshowhideminor-show' => 'Diskouez',
+'rcshowhideminor-hide' => 'Kuzhat',
 'rcshowhidebots' => '$1 ar robotoù',
+'rcshowhidebots-show' => 'Diskouez',
+'rcshowhidebots-hide' => 'Kuzhat',
 'rcshowhideliu' => '$1 an implijerien enrollet',
+'rcshowhideliu-show' => 'Diskouez',
+'rcshowhideliu-hide' => 'Kuzhat',
 'rcshowhideanons' => '$1 an implijerien dizanv',
+'rcshowhideanons-show' => 'Diskouez',
+'rcshowhideanons-hide' => 'Kuzhat',
 'rcshowhidepatr' => "$1 ar c'hemmoù gwiriet",
+'rcshowhidepatr-show' => 'Diskouez',
+'rcshowhidepatr-hide' => 'Kuzhat',
 'rcshowhidemine' => "$1 ma c'hemmoù",
+'rcshowhidemine-show' => 'Diskouez',
+'rcshowhidemine-hide' => 'Kuzhat',
 'rclinks' => "Diskouez an $1 kemm diwezhañ c'hoarvezet e-pad an $2 devezh diwezhañ<br />$3",
 'diff' => "diforc'h",
 'hist' => 'ist',
@@ -1685,6 +1708,7 @@ Mar fell deoc'h enporzhiañ ar restr-mañ da vat, kit war ho kiz hag enporzhiit
 'uploaddisabledtext' => 'Diweredekaet eo an enporzhiañ restroù.',
 'php-uploaddisabledtext' => 'Diweredekaet eo bet ar pellgargañ e PHP. Gwiriit an dibarzh arventennoù file_uploads.',
 'uploadscripted' => "Er restr-mañ ez eus kodoù HTML pe skriptoù a c'hallfe bezañ kammgomprenet gant ur merdeer Kenrouedad.",
+'uploadinvalidxml' => "N'eus ket bet gallet dielfennañ an XML er restr ezporzhiet.",
 'uploadvirus' => 'Viruzet eo ar restr! Titouroù : $1',
 'uploadjava' => "Ur restr ZIP a ra gant Java .class eo homañ.
 N'haller ket enporzhiañ restroù Java peogwir e c'haller mont dreist da vevennoù surentez ganto.",
@@ -1938,6 +1962,9 @@ Marteze a-walc'h e fell deoc'h kemmañ an deskrivadur anezhi war ar [$2 bajenn d
 # List redirects
 'listredirects' => 'Roll an adkasoù',
 
+# List duplicated files special page
+'listduplicatedfiles' => 'Roll restroù gant doublennoù',
+
 # Unused templates
 'unusedtemplates' => 'Patromoù dizimplij',
 'unusedtemplatestext' => 'Rollet eo amañ an holl bajennoù zo en esaouenn anv "{{ns:template}}" ha n\'int ket implijet war pajenn ebet. Ho pet soñj da wiriañ mat hag-eñ n\'eus ket liammoù all war-du ar patromoù-se a-raok diverkañ anezho.',
@@ -2065,6 +2092,7 @@ $1 {{PLURAL:$1|rummad|rummad}}',
 'listusers' => 'Roll an implijerien',
 'listusers-editsonly' => 'Na ziskouez nemet an implijerien o deus degaset un dra bennak',
 'listusers-creationsort' => 'Renket dre urzh krouiñ',
+'listusers-desc' => 'Renkañ war ziskenn',
 'usereditcount' => '$1 {{PLURAL:$1|kemm|kemm}}',
 'usercreated' => "{{GENDER:$3|Krouet}} d'an $1 da $2",
 'newpages' => 'Pajennoù nevez',
@@ -2329,9 +2357,11 @@ Sellet ouzh $2 evit roll an diverkadennoù diwezhañ.',
 'deleteotherreason' => 'Abegoù/traoù all :',
 'deletereasonotherlist' => 'Abeg all',
 'deletereason-dropdown' => "*Abegoù diverkañ boazetañ
-** Goulenn gant saver ar pennad
+** Strob
+** Vandalerezh
 ** Gaou ouzh ar gwirioù perc'hennañ
-** Vandalerezh",
+** Goulenn gant saver ar pennad
+** Liamm torret",
 'delete-edit-reasonlist' => 'Kemmañ a ra an abegoù diverkañ',
 'delete-toobig' => 'Bras eo istor ar bajenn-mañ, ouzhpenn $1 {{PLURAL:$1|stumm|stumm}} zo. Bevennet eo bet an diverkañ pajennoù a-seurt-se kuit da zegas reuz war {{SITENAME}} dre fazi .',
 'delete-warning-toobig' => "Bras eo istor ar bajenn-mañ, ouzhpenn {{PLURAL:$1|stumm|stumm}} zo.
@@ -2509,8 +2539,10 @@ $1',
 'sp-contributions-blocked-notice-anon' => "Stanket eo ar chomlec'h IP-mañ evit ar mare.
 Dindan emañ merket enmont diwezhañ marilh ar stankadennoù, d'ho kelaouiñ :",
 'sp-contributions-search' => 'Klask degasadennoù',
+'sp-contributions-suppresslog' => 'degasadennoù diverket un implijer',
 'sp-contributions-username' => "Anv implijer pe chomlec'h IP :",
 'sp-contributions-toponly' => 'Na ziskouez nemet an adweladennoù diwezhañ',
+'sp-contributions-newonly' => 'Diskouez an aozadennoù a zo krouidigezhioù pajennoù hepken',
 'sp-contributions-submit' => 'Klask',
 
 # What links here
@@ -2612,7 +2644,7 @@ Sellit ouzh [[Special:BlockList|roll ar chomlec'hioù IP ha kontoù stanket]] ev
 'contribslink' => 'degasadennoù',
 'emaillink' => 'Kas ur postel',
 'autoblocker' => 'Emstanket rak implijet eo bet ho chomlec\'h IP gant "[[User:$1|$1]]" nevez zo.
-Setu aze an abeg(où) m\'eo bet stanket $1 : "\'\'$2\'\'"',
+Setu amañ perak $1 : "$2"',
 'blocklogpage' => 'Roll ar stankadennoù',
 'blocklog-showlog' => "Stanket eo bet an implijer-mañ c'hoazh. A-is emañ marilh ar stankadennoù, d'ho titouriñ :",
 'blocklog-showsuppresslog' => "Stanket ha kuzhet eo bet an implijer-mañ c'hoazh. A-is emañ marilh ar diverkadennoù, d'ho titouriñ :",
@@ -2630,7 +2662,7 @@ Setu aze an abeg(où) m\'eo bet stanket $1 : "\'\'$2\'\'"',
 'range_block_disabled' => "Diweredekaet eo bet ar stankañ stuc'hadoù IP.",
 'ipb_expiry_invalid' => 'amzer termen direizh.',
 'ipb_expiry_temp' => "Peurbadus e rank bezañ bloc'hadoù an implijerien guzh.",
-'ipb_hide_invalid' => 'Dibosupl diverkañ ar gont-mañ; evit doare ez eus bet graet re a gemmoù enni.',
+'ipb_hide_invalid' => "Ne c'haller ket dilemel ar gont-mañ : Ouzhpenn {{PLURAL:$1|ur c'hemm|$1 kemm}} zo enni.",
 'ipb_already_blocked' => 'Stanket eo "$1" dija',
 'ipb-needreblock' => "Stanket eo $1 c'hoazh. Kemmañ an arventennoù a fell deoc'h ?",
 'ipb-otherblocks-header' => '{{PLURAL:$1|Stankadenn|Stankadnenoù}} all',
@@ -2847,7 +2879,7 @@ Enrollit ar bajenn war hoc'h urzhiataer ha kargit anezhi amañ.",
 'importuploaderrortemp' => "C'hwitet eo bet enporzhiañ ar restr. Mankout a ra ur restr badennek.",
 'import-parse-failure' => "Troc'h e dielfennadenn an enporzh XML",
 'import-noarticle' => 'Pajenn ebet da enporzhiañ !',
-'import-nonewrevisions' => "Enporzhiet eo bet an holl degasadennoù c'hoazh.",
+'import-nonewrevisions' => "N'eus bet enporzhiet degasadenn ebet (aze e oant dija, pe distaolet e oant bet abalamour da fazioù).",
 'xml-error-string' => '$1 war al linenn $2, bann $3 (okted $4) : $5',
 'import-upload' => 'Enporzhiañ roadennoù XML',
 'import-token-mismatch' => "Kollet eo bet roadennoù an dalc'h. Klaskit en-dro.",
@@ -3007,6 +3039,7 @@ Sur a-walc'h abalamour d'ul liamm enni a gas d'ul lec'hienn ziavaez berzet.",
 'pageinfo-length' => 'Ment ar bajenn (en oktedoù)',
 'pageinfo-article-id' => 'Niverenn ar bajenn',
 'pageinfo-language' => 'Yezh ar bajenn',
+'pageinfo-content-model' => "Patrom endalc'had ar bajenn",
 'pageinfo-robot-policy' => 'Menegeriñ gant robotoù',
 'pageinfo-robot-index' => 'Aotreet',
 'pageinfo-robot-noindex' => 'Diaotreet',
@@ -3647,6 +3680,9 @@ Kadarnait mar plij e fell deoc'h krouiñ ar pennad-mañ da vat.",
 'confirm-unwatch-button' => 'Mat eo',
 'confirm-unwatch-top' => 'Lemel ar bajenn-mañ a-ziwar ho roll evezhiañ',
 
+# Separators for various lists, etc.
+'quotation-marks' => '« $1 »',
+
 # Multipage image navigation
 'imgmultipageprev' => '&larr; pajenn gent',
 'imgmultipagenext' => "pajenn war-lerc'h &rarr;",
@@ -4003,14 +4039,18 @@ A-hend-all e c'hallit ober gant ar furmskrid eeunaet dindan. Ouzhpennet e vo hoc
 'rotate-comment' => 'Skeudenn troet eus $1 {{PLURAL:$1|derez}} a-du gant an heol',
 
 # Limit report
+'limitreport-title' => 'Roadennoù da wellekaat an dielfenner :',
 'limitreport-cputime' => 'Amzer implij ar CPU',
 'limitreport-cputime-value' => '$1 {{PLURAL:$1|eiladenn}}',
 'limitreport-walltime' => 'Amzer implij gwirion',
 'limitreport-walltime-value' => '$1 {{PLURAL:$1|eiladenn}}',
+'limitreport-ppvisitednodes' => 'Niver a skoulmoù rakprosesor gweladennet',
+'limitreport-ppgeneratednodes' => 'Niver a skoulmoù rakprosesor ganet',
 'limitreport-postexpandincludesize-value' => '$1/$2 {{PLURAL:$2|okted}}',
 'limitreport-templateargumentsize' => 'Ment arguzenn ar patrom',
 'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|okted}}',
 'limitreport-expansiondepth' => 'Donder astenn brasañ',
+'limitreport-expensivefunctioncount' => "Niver a arc'hwelioù dielfennañ koustus",
 
 # Special:ExpandTemplates
 'expandtemplates' => 'Emled ar patromoù',
@@ -4022,6 +4062,7 @@ Astenn a ra ivez an arc'hwelioù parser evel
 'expand_templates_input' => 'Merkañ ho testenn amañ :',
 'expand_templates_output' => "Disoc'h",
 'expand_templates_xml_output' => 'Ezvont XML',
+'expand_templates_html_output' => "Disoc'h HTML kriz",
 'expand_templates_ok' => 'Mat eo',
 'expand_templates_remove_comments' => 'Lemel an notennoù kuit',
 'expand_templates_remove_nowiki' => "Diverkañ a ra ar balizennoù <nowiki> en disoc'h",
index 9c7079f..70d3afb 100644 (file)
@@ -3159,7 +3159,7 @@ Si l'executeu, podeu comprometre la seguretat del vostre sistema.",
 'file-no-thumb-animation-gif' => "''' Nota: degut a limitacions tècniques no s'animaran les miniatures d'alta resolució d'imatges GIF com aquesta.'''",
 
 # Special:NewFiles
-'newimages' => 'Galeria de nous fitxers',
+'newimages' => 'Galeria de fitxers nous',
 'imagelisttext' => "Llista {{PLURAL:$1|d'un sol fitxer|de '''$1''' fitxers ordenats $2}}.",
 'newimages-summary' => 'Aquesta pàgina especial mostra els darrers fitxers carregats.',
 'newimages-legend' => 'Nom del fitxer',
@@ -3701,9 +3701,9 @@ Confirmeu que realment voleu tornar-la a crear.",
 'recreate' => 'Torna a crear',
 
 # action=purge
-'confirm_purge_button' => 'OK',
+'confirm_purge_button' => "D'acord",
 'confirm-purge-top' => "Voleu buidar la memòria cau d'aquesta pàgina?",
-'confirm-purge-bottom' => "Purgar una pàgina força que hi aparegui la versió més actual i n'esborra la memòria cau.",
+'confirm-purge-bottom' => 'En refrescar una pàgina es neteja de la memòria cau i es força que hi aparegui la versió més actual.',
 
 # action=watch/unwatch
 'confirm-watch-button' => "D'acord",
index 9b69ddf..0da33fa 100644 (file)
@@ -1861,6 +1861,10 @@ $1',
 # List redirects
 'listredirects' => 'ДIасахьажоран могIам',
 
+# List duplicated files special page
+'listduplicatedfiles' => 'Файлийн могӀам дубликатшца',
+'listduplicatedfiles-entry' => 'Файлан [[:File:$1|$1]] — [[$3|{{PLURAL:$2|дубликат ю}}]].',
+
 # Unused templates
 'unusedtemplates' => 'Лелош доцу кепаш',
 'unusedtemplatestext' => 'Кхузахь дагар йина «{{ns:template}}» цӀерийн меттиган агӀонаш, кхечу агӀонийн юкъа тоьхна йоцу.
@@ -1948,12 +1952,12 @@ $1',
 Кхин йоцу файлаш гойту [[:$1]] чохь',
 'wantedfiletext-nocat' => 'Лахара йоцу файлаш лело гӀерта. Оцу могӀам юкъа ца хууш файлаш кхета там бу, кхечу проекташ чохь йолу. Ишта ца хууш юкъа нийса елачарна тӀехула <del>сиз</del> хира ду.',
 'wantedtemplates' => 'Оьшуш долу кепаш',
-'mostlinked' => 'Ð\94Ñ\83ккÑ\85а Ñ\85Ñ\8cажоÑ\80агаÑ\88 Ñ\82Iе Ñ\82оÑ\8cÑ\85на Ð¹Ð¾Ð»Ñ\83 Ð°Ð³Iонаш',
+'mostlinked' => 'Ð\94Ñ\83ккÑ\85а Ñ\85Ñ\8cажоÑ\80гаÑ\88 Ñ\82Ó\80е Ñ\82оÑ\8cÑ\85на Ð¹Ð¾Ð»Ñ\83 Ð°Ð³Ó\80онаш',
 'mostlinkedcategories' => 'Дуккха тӀе хьажораш йолу категореш',
 'mostlinkedtemplates' => 'Массарел дуккха а леладо кепаш',
 'mostcategories' => 'Дуккха категореш тӀе тоьхна йолу агӀонаш',
 'mostimages' => 'Массарел дуккха лелайо файлаш',
-'mostinterwikis' => 'Ð\94Ñ\83ккÑ\85а Ñ\8eкÑ\8aаÑ\80вики Ñ\85Ñ\8cажоÑ\80агаÑ\88 Ñ\82Ó\80е Ñ\82оÑ\8cÑ\85на Ð¹Ð¾Ð»Ñ\83 Ð°Ð³Ó\80онаÑ\88',
+'mostinterwikis' => 'Дуккха юкъарвики хьажоргаш тӀе тоьхна йолу агӀонаш',
 'mostrevisions' => 'Сих сиха нисйина йолу агIонаш',
 'prefixindex' => 'Хьалха агӀонашан цӀераш хӀотто йеза',
 'prefixindex-namespace' => 'Хьалха агӀонашан цӀераш хӀотто еза («{{ns:$1}}»)',
@@ -3060,6 +3064,12 @@ MediaWiki яржош ю и шуна пайдане хир яц те аьлла,
 
 # HTML forms
 'htmlform-invalid-input' => 'Ахьа яздинчу цхьан дакхано гӀалат далина',
+'htmlform-select-badoption' => 'Ахьа яздина маьӀна магийна дац.',
+'htmlform-int-invalid' => 'Ахьа яздина маьӀна дуьззина терахь дац.',
+'htmlform-float-invalid' => 'Ахьа яздина маьӀна терахь дац.',
+'htmlform-int-toolow' => 'Ахьа яздина маьӀна минималал лаха ду — $1',
+'htmlform-int-toohigh' => 'Ахьа яздина маьӀна максималал лакхара ду — $1',
+'htmlform-required' => 'ХӀара юззар тӀехь ду.',
 'htmlform-submit' => 'ДӀадахьийта',
 'htmlform-reset' => 'Цаоьшу хийцамаш',
 'htmlform-selectorother-other' => 'Кхин',
index 056b965..df3eeb2 100644 (file)
@@ -10,6 +10,7 @@
  * @author Aras Noori
  * @author Arastein
  * @author Asoxor
+ * @author Broosk
  * @author Calak
  * @author Cyrus abdi
  * @author Diyar se
@@ -224,6 +225,7 @@ $messages = array(
 'tog-showhiddencats' => 'پۆلە شاردراوەکان نیشان بدە',
 'tog-norollbackdiff' => 'لە دوای گەڕاندنەوە جیاوازی نیشان مەدە',
 'tog-useeditwarning' => 'ھۆشیارم بکەوە کاتێک لە پەڕەیەکی دەستکاری بە گۆڕانکاریی پاشەکەوت‌نەکراو دەردەچم',
+'tog-prefershttps' => 'هەمیشە پەیوەندییەکی پارێزراو بەکاربەرە کاتێک کە دەچیتە ژوورەوە',
 
 'underline-always' => 'ھەمیشە',
 'underline-never' => 'قەت',
@@ -325,7 +327,7 @@ $messages = array(
 'newwindow' => '(لە پەڕەیەکی نوێدا دەکرێتەوە)',
 'cancel' => 'ھەڵیوەشێنەوە',
 'moredotdotdot' => 'زیاتر',
-'morenotlisted' => 'درÛ\8eÚ\98Û\95Û\8c Ù¾Û\8eرست...',
+'morenotlisted' => 'ئÛ\95Ù\85 Ù\84Û\8cستÛ\95Û\8cÛ\95 ØªÛ\95Ù\88اÙ\88 Ù\86Û\8cÛ\8cÛ\95',
 'mypage' => 'پەڕه‌',
 'mytalk' => 'لێدوان',
 'anontalk' => 'وتووێژ بۆ ئەم ئای‌پی یە',
@@ -419,12 +421,13 @@ $messages = array(
 تکایە پێش ھەوڵی دووبارە بۆ دیتنی ئەم پەڕە، نەختێک بوەستە.
 
 $1',
+'pool-timeout' => 'لەکات دەرچوون ڕوویدا لەکاتی چاوەڕوانکردنی داخستندا',
 'pool-errorunknown' => 'هەڵەی نەزانراو',
 
 # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage).
 'aboutsite' => 'سەبارەت بە {{SITENAME}}',
 'aboutpage' => 'Project:سەبارەت',
-'copyright' => 'ناوەرۆک لە ژێر $1 لەبەردەستدایە.',
+'copyright' => 'ناوەرۆک لە ژێر $1 لەبەردەستدایە، دەنا تێبینیی دەکرا',
 'copyrightpage' => '{{ns:project}}:مافەکانی لەبەرگرتنەوە',
 'currentevents' => 'ڕووداوە ھەنووکەییەکان',
 'currentevents-url' => 'Project:ڕووداوە بەردەوامەکان',
@@ -509,6 +512,8 @@ $1',
 # General errors
 'error' => 'هه‌ڵه‌',
 'databaseerror' => 'ھەڵەی بنکەدراوه',
+'databaseerror-function' => 'کردە: $1',
+'databaseerror-error' => 'هەڵە: $1',
 'laggedslavemode' => 'ئاگاداری: لەوانەیە لاپەڕەکە نوێکردنەکان لە بەر نەگرێت.',
 'readonly' => 'بنکەدراوە داخراوە',
 'enterlockreason' => 'هۆیەک بۆ قوفڵ‌کردنەکە بنووسە کە  تێیدا کاتی کردنەوەی قۆفڵەکە باس کرابێت',
@@ -526,6 +531,7 @@ $1',
 'readonly_lag' => 'بنكه‌دراوه‌كه‌ به‌شێوه‌ی خۆكار به‌ندكراوه‌، له‌كاتێكدا بنكه‌دراوه‌ی ڕاژه‌كاره‌كه‌ ڕۆڵی له‌خۆگرتن ده‌گێڕێت',
 'internalerror' => 'ھەڵەی ناوخۆیی',
 'internalerror_info' => 'هه‌ڵه‌ی ناوخۆیی: $1',
+'fileappenderrorread' => 'نەتوانرا "$1" بخوێندرێتەوە لەکاتی هاوپێچکردندا.',
 'fileappenderror' => 'نه‌تواندرا "$1" بخرێته‌سه‌ر "$2".',
 'filecopyerror' => 'نەکرا پەڕگەی «$1» کۆپی بکرێت بۆ «$2».',
 'filerenameerror' => 'ناوی په‌ڕگه‌ی "$1" نه‌گۆڕدرا بۆ "$2".',
@@ -541,6 +547,7 @@ $1',
 'cannotdelete-title' => 'ناکرێ پەڕەی «$1» بسڕدرێتەوە',
 'delete-hook-aborted' => 'سڕینەوە لە لایەن قولاپەوە ھەڵوەشێنرایەوە.
 ھۆکارەکەی لەبەر دەست نییە.',
+'no-null-revision' => 'نەتوانرا پێداچوونەوەی خاڵیی بۆ پەڕەی "$1" درووست بکرێت',
 'badtitle' => 'ناونیشانی خراپ',
 'badtitletext' => 'سەرناوی پەڕەی داواکراو بەتاڵە، واڵایە یان سەرناوێکی نێوان-زمانی یان نێوانی-ویکییە کە بە شێوەیەکی ھەڵە بەستەری بۆ دراوە.
 ڕەنگە یەک یان چەند کاراکتەری تێدا بێت کە ناکرێت لە سەرناوەکاندا بەکار بھێنرێت.',
@@ -564,10 +571,20 @@ $1',
 'cascadeprotected' => 'ئەم لاپەڕە پارێزراوە لە دەستکاریی، چونکا خراوەتە سەر ڕیزی ئەم {{PLURAL:$1|لاپەڕانه‌، کە}} که‌ به‌ هه‌ڵکردنی بژارده‌ی داڕژان هه‌ڵکراوه‌:
 $2',
 'namespaceprotected' => "تۆ ناتوانی لاپەڕەکانی ناو نەیمسپەیسی '''$1''' بگۆڕی.",
+'customcssprotected' => 'دەسەڵاتی دەستکارییکردنی ئەم پەڕەی CSS ـەت نییە چوونکە ڕێکخستنەکانی کەسێکی تر لەخۆ دەگرێت.',
+'customjsprotected' => 'دەسەڵاتی دەستکارییکردنی ئەم پەڕەی JavaScript ـەت نییە چوونکە ڕێکخستنەکانی کەسێکی تر لەخۆ دەگرێت.',
+'mycustomcssprotected' => 'دەسەڵاتی دەستکارییکردنی ئەم پەڕەی CSS ـەت نییە.',
+'mycustomjsprotected' => 'دەسەڵاتی دەستکارییکردنی ئەم پەڕەی JavaScript ـەت نییە.',
+'myprivateinfoprotected' => 'دەسەڵاتی دەستکارییکردنی زانیارییە تایبەتییەکانی خۆتت نییە.',
+'mypreferencesprotected' => 'دەسەڵاتی دەستکارییکردنی هەڵبژاردنەکانی خۆتت نییە.',
 'ns-specialprotected' => 'تۆ ناتوانی لاپەڕە تایبەتەکان دەستکاریی بکەی.',
 'titleprotected' => 'ئەم سەرناوە پارێزراوە لە دروستکران لە لایەن [[User:$1|$1]].
 ھۆکاری ئەمە بریتیە لە "\'\'$2\'\'".',
+'invalidtitle-knownnamespace' => 'سەردێڕی هەڵە لەگەڵ ناوەبۆشایی "$2" و دەقی "$3"',
+'invalidtitle-unknownnamespace' => 'سەردێڕی هەڵە لەگەڵ ناوەبۆشایی نەناسراوی ژمارە $1 و دەقی "$2"',
 'exception-nologin' => 'لەژوورەوە نیت',
+'exception-nologin-text' => 'تکایە [[Special:Userlogin|بچۆ ژوورەوە]] تا بتوانیت بچیتە نێو ئەم پەڕەیە یان ئەم کردەیە ئەنجام بدەیت.',
+'exception-nologin-text-manual' => 'تکایە $1 تا بتوانیت بچیتە نێو ئەم پەڕەیە یان ئەم کردەیە ئەنجام بدەیت.',
 
 # Virus scanner
 'virus-badscanner' => "پێکەربەندیی نابەجێ: ڤایرس سکەنێری نەناسراو: ''$1''",
@@ -575,10 +592,9 @@ $2',
 'virus-unknownscanner' => 'دژەڤایرس نەناسراوە:',
 
 # Login and logout pages
-'logouttext' => "'''ئÛ\8eستا ØªÛ\86 Ù\84Û\95 Ú¾Û\95Ú\98Ù\85ارÛ\95Ú©Û\95ت Ú¾Ø§ØªÙ\88Ù\88Û\8cتÛ\95 Ø¯Û\95رÛ\95Ù\88Û\95.'''
+'logouttext' => "'''تÛ\86 Ø¦Û\8eستا Ù\84Û\95دÛ\95رÛ\95Ù\88Û\95Û\8cت.'''
 
-دەتوانی بە شێوەی بێناو درێژە بدەی بە بەرکارھێنانی {{SITENAME}}، یان دەتوانی <span class='plainlinks'>[$1 دیسانەوە بچیتەوە ژوورەوە]</span> ھەر بەو ناوە یان بە ناوی بەکارھێنەرییەکی جیاوازەوە.
-ئاگادار بە کە ھەتا کاتێک کە کەشی وێبگەڕەکەت دەسڕیتەوە، سەرەڕای چوونەدەرەوەی تۆ ھەندێک لە پەڕەکان ھەر بە شێوەیەک نیشان دەدرێن کە گوایە تۆ ھێشتا لە ژوورەوەیت.",
+تێبینیی ئەوە بکە کە هەندێک لە پەڕەکان بەردەوام وا دەردەکەون کە هێشتا لەژوورەوە بیت، هەتا ئەو دەمەی کەشی وێبگەڕەکەت پاک دەکەیتەوە.",
 'welcomeuser' => 'بەخێربێیت، $1!',
 'welcomecreation-msg' => 'ھەژمارەکەت دروست کرا.
 لە بیرت نەچێت [[Special:Preferences|ھەڵبژاردەکانی {{SITENAME}}]]ت بگۆڕی.',
@@ -615,7 +631,8 @@ $2',
 'gotaccount' => 'ھەژمارت ھەیە لێرە؟ $1.',
 'gotaccountlink' => 'بچۆ ژوورەوە',
 'userlogin-resetlink' => 'وردەکارییەکانی چوونەژوورەوەتت لە بیر کردووە؟',
-'userlogin-resetpassword-link' => 'تێپەڕوشە ڕیسێت بکەوە',
+'userlogin-resetpassword-link' => 'تێپەڕەووشەکەت لەبیر کردووە؟',
+'userlogin-helplink2' => 'یارمەتی بۆ چوونەژوورەوە',
 'userlogin-loggedin' => 'تۆ ھەر ئێستا بە ناوی {{GENDER:$1|$1}} چوویتە ژوورەوە.
 فۆرمی ژێرەوە بەکاربھێنە بۆ چوونەژوورەوە وەک بەکارھێنەرێکی تر.',
 'userlogin-createanother' => 'ھەژمارێکی تر دروست بکە',
@@ -624,7 +641,8 @@ $2',
 'createacct-emailrequired' => 'ناونیشانی ئیمەیل',
 'createacct-emailoptional' => 'ناونیشانی ئیمەیل (دڵخوازانە)',
 'createacct-email-ph' => 'ناونیشانی ئیمەیلەکەت بنووسە',
-'createaccountmail' => 'تێپەڕوشەیەکی ڕەمەکیی کاتی بەکاربھێنە و بینێرە بۆ ناونیشانی ئیمەیلی دیاری‌کراوی ژێرەوە',
+'createacct-another-email-ph' => 'ناونیشانی ئیمەیڵەکەت بنووسە',
+'createaccountmail' => 'تێپەڕوشەیەکی هەڕەمەکیی کاتی بەکاربھێنە و بینێرە بۆ ناونیشانی ئیمەیڵی دیاریکراو',
 'createacct-realname' => 'ناوی ڕاستی (دڵخوازانە)',
 'createaccountreason' => 'هۆکار:',
 'createacct-reason' => 'ھۆکار',
@@ -661,12 +679,14 @@ $2',
 'nosuchusershort' => 'بەکارهێنەر بە ناوی "$1" نیە.
 چاو لە ڕێنووسەکە بکە.',
 'nouserspecified' => 'دەبێ ناوی بەکارهێنەر دابین‌ بکەی.',
+'login-userblocked' => 'ئەم بەکارهێنەرە بڵۆک کراوە. چوونەژوورەوە ڕێگەپێنەدراوە.',
 'wrongpassword' => 'تێپەڕوشەی ھەڵە.
 تکایە دووبارە تێبکۆشە.',
 'wrongpasswordempty' => 'تێپەڕەوشەی لێدراو بەتاڵبوو.
 تکایە هەوڵ بدەوە.',
 'passwordtooshort' => 'تێپەڕوشەکەت لانی کەم دەبێ {{PLURAL:$1|١ پیت|$1 پیت}} بێت.',
 'password-name-match' => 'تێپەڕوشەکەت ئەبێ جیاواز بێت لە ناوی بەکارهێنەریت.',
+'password-login-forbidden' => 'بەکارهێنانی ئەم ناوی بەکارهێنەر و تێپەڕەووشەیە قەدەغەکراوە.',
 'mailmypassword' => 'تێپەڕوشەکە ڕێک بخەوە',
 'passwordremindertitle' => 'تێپەڕوشەیەکی نوێی کاتی بۆ  {{SITENAME}}',
 'passwordremindertext' => 'کەسێک (لەوانەیە خۆت، لە ئای‌پی ئەدرەسی $1) داوای تێپەڕوشەیەکی نوێی کردووە بۆ {{SITENAME}} ($4). تێپەڕوشەیەکی کاتی بۆ بەکارهێنەر «$2» دروستکراو و وەک «$3» دانراوه. ئەگەر ئەمە داخوازی تۆ بووە، پێویستت بەوەیە ئێستا بچیتە ژوورەوە و تێپەڕوشەیەکی نوێ هەڵبژێریت. ماوەی‌ تێپەڕوشە کاتییەکەت لە {{PLURAL:$5|یەک ڕۆژدا|$5 ڕۆژدا}} بەسەردەچێت.
@@ -679,8 +699,8 @@ $2',
 'blocked-mailpassword' => 'ئادرەسی ئای‌پی تۆ بۆ دەستکاری کردن بەستراوه بۆیە بۆ بەرگری لە بەکارهێنانی نابەجێ ئەنجامی گەڕانەوەی تێپەڕوشە ڕیگە نەدراوە.',
 'eauthentsent' => 'ئیمەیلێکی پشتڕاستکردنەوە بۆ ناونیشانی ئیمەیلی دیاریکراو ناردرا.
 پێش ئەوەی ئیمەیلی تر بۆ ئەم هەژمارە بنێردرێ، بۆ پشتڕاستکردنەوەی ئەمەی ئەم هەژمارە بەڕاستی ھی تۆیە، دەبێ پەیڕەوی ڕێکارەکانی ناو ئیمەیلەکە بکەیت.',
-'throttled-mailpassword' => 'بیرهێنەرەوەیەکی وشەی نهێنی پێش ئەمە لە {{PLURAL:$1|کاتژمێر}}ی ڕابردوودا ناردراوە.
-بۆ بەرگری لە بەکارهێنانی خراپ، تاکە یەک بیرهێنەرەوەی وشەی نهێنی هەر {{PLURAL:$1|کاتژمێر}} دەنێردرێت.',
+'throttled-mailpassword' => 'نامەی بەدەستهێنانەوەی تێپەڕەووشە نێردراوە لە ماوەی {{PLURAL:$1|کاتژمێر}}ی ڕابردوودا.
+بۆ ڕێگریی لە بەکارهێنانی خراپ، تاکە یەک نامەی بەدەستهێنانەوەی تێپەڕەووشە هەموو {{PLURAL:$1|کاتژمێر}}ێک دەنێردرێت.',
 'mailerror' => 'هەڵە ڕوویدا لە ناردنی ئیمەیل: $1',
 'acct_creation_throttle_hit' => 'بینەرانی ویکی بەکەڵک وەرگرتن لەم ئای‌پی ئەدرەسەی تۆ لە ڕۆژانی ڕابردوودا، دەستیان کردە بە درووست‌کردنی {{PLURAL:$1|هەژمارە}}، کە زۆرینە ڕیگەپێدان لە یەک ماوە‌دایە.
 وەک ئەنجامی ئەو ڕووداوە، ئەو بینەرانی لەم ئای‌پی ئەدرەسە کەڵک وەر دەگرن لەم کاتەدا ناتوانن هەژماری دیکە درووست‌بکەن.',
@@ -691,6 +711,7 @@ $2',
 'emailconfirmlink' => 'ئیمەیلەکەت پشت‌ڕاست بکەرەوە',
 'invalidemailaddress' => 'ناونیشانی ئیمەیل پەسند نەکرا، چون لەوە دەچێت شێوازێکی نادروستی ھەبێت.
 تکایە ناونیشانێک بە شێوازی دروست بنووسە یان ئەو بەشە واڵا بھێڵەوە.',
+'cannotchangeemail' => 'ئیمەیڵەکانی هەژمار ناکرێت بگۆڕدرێت لەم ویکییەدا.',
 'emaildisabled' => 'ئەم ماڵپەڕە ناتوانێ ئیمەیل بنێرێ.',
 'accountcreated' => 'ھەژمار دروست کرا',
 'accountcreatedtext' => 'هەژماری بەکارهێنەری [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|لێدوان]]) دروست کراوە.',
index 1419b00..3fcf383 100644 (file)
@@ -2177,6 +2177,11 @@ Vstup: <code>typ obsahu/podtyp</code>, např. <code>image/jpeg</code>.',
 # List redirects
 'listredirects' => 'Seznam přesměrování',
 
+# List duplicated files special page
+'listduplicatedfiles' => 'Seznam souborů s duplikáty',
+'listduplicatedfiles-summary' => 'Toto je seznam souborů, u kterých je aktuální revize duplikátem aktuální revize nějakého jiného souboru. Do úvahy se berou jen lokální soubory.',
+'listduplicatedfiles-entry' => '[[:File:$1|$1]] má [[$3|$2 {{PLURAL:$2|duplikát|duplikáty|duplikátů}}]].',
+
 # Unused templates
 'unusedtemplates' => 'Nepoužívané šablony',
 'unusedtemplatestext' => 'Tato stránka obsahuje seznam všech stran ve jmenném prostoru {{ns:template}}, které nejsou vloženy do žádné jiné strany. Před jejich smazáním nezapomeňte zkontrolovat ostatní odkazy.',
index 9703f3b..7aa79d8 100644 (file)
@@ -636,6 +636,7 @@ Glem ikke at ændre dine [[Special:Preferences|{{SITENAME}} indstillinger]].',
 'gotaccountlink' => 'Log på',
 'userlogin-resetlink' => 'Har du glemt dine login oplysninger?',
 'userlogin-resetpassword-link' => 'Glemt din adgangskode?',
+'userlogin-helplink2' => 'Hjælp med at logge på',
 'userlogin-loggedin' => 'Du er allerede logget på som {{GENDER:$1|$1}}.
 Brug formularen nedenfor til at logge på som en anden bruger.',
 'userlogin-createanother' => 'Opret en anden konto',
@@ -728,6 +729,7 @@ Vent venligst $1, før du prøver igen.',
 'createacct-another-realname-tip' => 'Angivelse af rigtigt navn er valgfrit.
 Hvis du vælger at oplyse dit navn, vil det blive brugt til at tilskrive dig dit arbejde.',
 'pt-login' => 'Log på',
+'pt-login-button' => 'Log på',
 'pt-createaccount' => 'Opret konto',
 'pt-userlogout' => 'Log af',
 
@@ -760,7 +762,10 @@ For at afslutte indlogning, skal du oprette et nyt kodeord:',
 'resetpass-temp-password' => 'Midlertidig adgangskode',
 'resetpass-abort-generic' => 'Ændring af adgangskode er blevet afbrudt af en udvidelse',
 'resetpass-expired' => 'Dit kodeord er udløbet. Vær venlig at ændre det til et nyt.',
-'resetpass-expired-soft' => 'Dit kodeord er udløbet og skal ændres. Vær venlig at ændre det nu, eller tryk annuller for at ændre det senere.',
+'resetpass-expired-soft' => 'Din adgangskode er udløbet og skal ændres. Vær venlig at ændre den nu, eller tryk "{{int:resetpass-submit-cancel}}" for at ændre den senere.',
+'resetpass-validity-soft' => 'Din adgangskode er ikke gyldig:  $1 
+
+Vær venlig at ændre den nu, eller tryk "{{int:resetpass-submit-cancel}}" for at ændre den senere.',
 
 # Special:PasswordReset
 'passwordreset' => 'Nulstil adgangskode',
@@ -1276,7 +1281,7 @@ Detaljer kan findes i [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}
 'search-section' => '(afsnit $1)',
 'search-suggest' => 'Mente du: $1',
 'search-interwiki-caption' => 'Søsterprojekter',
-'search-interwiki-default' => '{{PLURAL:$1|et resultat|$1 resultater}}:',
+'search-interwiki-default' => 'Resultater fra $1:',
 'search-interwiki-more' => '(mere)',
 'search-relatedarticle' => 'Relateret',
 'searcheverything-enable' => 'Søg i alle navnerum',
@@ -1745,6 +1750,7 @@ Du bør spørge en person med evnen til at se undertrykte fildata for at gennemg
 'uploaddisabledtext' => 'Oplægning af filer er deaktiveret.',
 'php-uploaddisabledtext' => 'Oplægning af filer er forhindret i PHP. Tjek indstillingen for file_uploads.',
 'uploadscripted' => 'Denne fil indeholder HTML eller script-kode, der i visse tilfælde can fejlfortolkes af en browser.',
+'uploadscriptednamespace' => 'Denne SVG-fil indeholder et ulovligt navnerum "$1"',
 'uploadinvalidxml' => 'XML i den uploadede fil kunne ikke tolkes.',
 'uploadvirus' => 'Denne fil indeholder en virus! Virusnavn: $1',
 'uploadjava' => 'Denne fil er en ZIP-fil, der indeholder en Java .class-fil.
@@ -2397,7 +2403,7 @@ Bekræft venligst at du virkelig vil gøre dette, at du forstår konsekvenserne,
 'delete-edit-reasonlist' => 'Rediger sletningsårsager',
 'delete-toobig' => 'Denne side har en stor historik, over {{PLURAL:$1|en version|$1 versioner}}. Sletning af sådanne sider er begrænset, for at forhindre utilsigtet forstyrrelse af {{SITENAME}}.',
 'delete-warning-toobig' => 'Denne side har en stor historik, over {{PLURAL:$1|en version|$1 versioner}} versioner, slettes den kan det forstyrre driften af {{SITENAME}}, gå forsigtigt frem.',
-'deleting-backlinks-warning' => "'''Advarsel:''' Andre sider linker til eller inkluderer den side, du er ved at slette.",
+'deleting-backlinks-warning' => "'''Advarsel:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Andre sider]] linker til eller inkluderer den side, du er ved at slette.",
 
 # Rollback
 'rollback' => 'Fjern redigeringer',
@@ -2447,7 +2453,7 @@ Se [[Special:ProtectedPages|listen over beskyttede sider]] for listen over sideb
 Her er de aktuelle beskyttelsesindstillinger for siden '''$1''':",
 'protect-locked-dblock' => "Databasen er spærret, sidebeskyttelsen kan derfor ikke ændres. her er de aktuelle beskyttelsesindstillinger for siden '''„$1“:'''",
 'protect-locked-access' => "Den brugerkonto har ikke de nødvendige rettigheder til at ændre sidebeskyttelsen. Her er de aktuelle beskyttelsesindstillinger for siden '''„$1“:'''",
-'protect-cascadeon' => 'Denne side er del af en nedarvet skrivebeskyttelse. Wen er indeholdt i nedenstående {{PLURAL:$1|side|sider}}, som er skrivebeskyttet med tilvalg af "nedarvende sidebeskyttelse" Sidebeskyttelsen kan ændres for denne side, det påvirker dog ikke kaskadespærringen:',
+'protect-cascadeon' => 'Denne side er del af en nedarvet skrivebeskyttelse. Den er indeholdt i nedenstående {{PLURAL:$1|side|sider}}, som er skrivebeskyttet med tilvalg af "nedarvende sidebeskyttelse". Sidebeskyttelsen kan ændres for denne side, det påvirker dog ikke den nedarvede sidebeskyttelse.',
 'protect-default' => 'Tillad alle brugere',
 'protect-fallback' => 'Tillad kun brugere med "$1" adgang',
 'protect-level-autoconfirmed' => 'Tillad kun autobekræftede brugere',
@@ -2571,6 +2577,7 @@ $1',
 'sp-contributions-blocked-notice-anon' => 'Denne IP-adresse er i øjeblikket blokeret.
 Den seneste post i blokeringsloggen vises nedenfor:',
 'sp-contributions-search' => 'Søg efter bidrag',
+'sp-contributions-suppresslog' => 'undertrykte brugerbidrag',
 'sp-contributions-username' => 'IP-adresse eller brugernavn:',
 'sp-contributions-toponly' => 'Vis kun redigeringer, der er aktuelle versioner',
 'sp-contributions-newonly' => 'Vis kun redigeringer, der er sideoprettelser',
index 70577de..99e64e5 100644 (file)
@@ -2246,6 +2246,11 @@ Vielleicht möchtest du die Beschreibung auf der dortigen [$2 Dateibeschreibungs
 # List redirects
 'listredirects' => 'Weiterleitungen',
 
+# List duplicated files special page
+'listduplicatedfiles' => 'Liste der Dateien mit Duplikaten',
+'listduplicatedfiles-summary' => 'Dies ist eine Liste der Dateien, deren aktuelle Dateiversion ein Duplikat der aktuellen Version einer anderen Datei ist. Es werden nur lokale Dateien berücksichtigt.',
+'listduplicatedfiles-entry' => '[[:File:$1|$1]] hat [[$3|{{PLURAL:$2|ein Duplikat|$2 Duplikate}}]].',
+
 # Unused templates
 'unusedtemplates' => 'Verwaiste Vorlagen',
 'unusedtemplatestext' => 'Diese Seite listet alle Seiten im {{ns:template}}-Namensraum auf, die nicht in anderen Seiten eingebunden sind.
index 9149ca3..f2287f5 100644 (file)
@@ -1410,7 +1410,7 @@ Detayê besternayışi [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}
 'search-file-match' => '(zerreyê dosya yewbini gêno)',
 'search-suggest' => 'To va: $1',
 'search-interwiki-caption' => 'Proceyê bıray',
-'search-interwiki-default' => '$1 neticeyan:',
+'search-interwiki-default' => '$1 ra neticey:',
 'search-interwiki-more' => '(véşi)',
 'search-relatedarticle' => 'Eleqeyın',
 'searcheverything-enable' => 'cayê nameyê hemi de bigêre',
index 222333b..192ef8d 100644 (file)
@@ -423,6 +423,7 @@ $specialPageAliases = array(
        'Listfiles'                 => array( 'ListFiles', 'FileList', 'ImageList' ),
        'Listgrouprights'           => array( 'ListGroupRights', 'UserGroupRights' ),
        'Listredirects'             => array( 'ListRedirects' ),
+       'ListDuplicatedFiles'       => array( 'ListDuplicatedFiles', 'ListFileDuplicates' ),
        'Listusers'                 => array( 'ListUsers', 'UserList' ),
        'Lockdb'                    => array( 'LockDB' ),
        'Log'                       => array( 'Log', 'Logs' ),
@@ -2641,6 +2642,10 @@ Input: contenttype/subtype, e.g. <code>image/jpeg</code>.',
 'listredirects'         => 'List of redirects',
 'listredirects-summary' => '', # do not translate or duplicate this message to other languages
 
+'listduplicatedfiles' => 'List of files with duplicates',
+'listduplicatedfiles-summary' => 'This is a list of files where the most recent version of the file is a duplicate of the most recent version of some other file. Only local files are considered.',
+'listduplicatedfiles-entry' => '[[:File:$1|$1]] has [[$3|{{PLURAL:$2|a duplicate|$2 duplicates}}]].',
+
 # Unused templates
 'unusedtemplates'         => 'Unused templates',
 'unusedtemplates-summary' => '', # do not translate or duplicate this message to other languages
index 2b6ac08..55bfc91 100644 (file)
@@ -750,6 +750,7 @@ Pane tähele, et seni kuni sa pole oma võrgulehitseja puhvrit tühjendanud, võ
 'gotaccountlink' => 'logi sisse',
 'userlogin-resetlink' => 'Kas oled unustanud oma sisselogimisandmed?',
 'userlogin-resetpassword-link' => 'Kas unustasid parooli?',
+'userlogin-helplink2' => 'Sisselogimisabi',
 'userlogin-loggedin' => 'Oled juba sisse logitud nimega {{GENDER:$1|$1}}.
 Kasuta allolevat vormi, et logida sisse teise kasutajaga.',
 'userlogin-createanother' => 'Loo teine konto',
@@ -837,6 +838,7 @@ Palun oota $1, enne kui uuesti proovid.',
 'createacct-another-realname-tip' => 'Tegelik nimi on valikuline.
 Kui otsustad selle sisestada, kasutatakse seda kasutaja töö temale omistamiseks.',
 'pt-login' => 'Logi sisse',
+'pt-login-button' => 'Logi sisse',
 'pt-createaccount' => 'Loo konto',
 'pt-userlogout' => 'Logi välja',
 
@@ -871,6 +873,9 @@ Et sisselogimine lõpule viia, pead määrama siin uue parooli:',
 'resetpass-abort-generic' => 'Tarkvaralisa on paroolimuudatuse abortinud.',
 'resetpass-expired' => 'Sinu parool on iganenud. Palun määra uus parool, et sisse logida.',
 'resetpass-expired-soft' => 'Sinu parool on iganenud ja tuleb uuesti määrata. Palun vali kohe uus parool või klõpsa "{{int:resetpass-submit-cancel}}", et määrata see hiljem.',
+'resetpass-validity-soft' => 'Sinu parool ei sobi: $1
+
+Palun vali kohe uus parool või klõpsa "{{int:resetpass-submit-cancel}}", et see hiljem uuesti määrata.',
 
 # Special:PasswordReset
 'passwordreset' => 'Parooli lähtestamine',
@@ -1251,6 +1256,10 @@ Saad seda muudatust vaadata. [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAG
 'revdelete-show-file-submit' => 'Jah',
 'revdelete-selected' => "'''Valitud {{PLURAL:$2|redaktsioon|redaktsioonid}} leheküljest [[:$1]]:'''",
 'logdelete-selected' => "'''Valitud {{PLURAL:$1|logisissekanne|logisissekanded}}:'''",
+'revdelete-text-text' => 'Kustutatud redaktsioonid jäävad lehekülje ajalukku alles, aga osa nende sisust pole kõigile juurdepääsetav.',
+'revdelete-text-file' => 'Kustutatud failiversioonid jäävad faili ajalukku alles, aga osa nende sisust pole kõigile juurdepääsetav.',
+'logdelete-text' => 'Kustutatud logisündmused jäävad logisse alles, aga osa nende sisust pole kõigile juurdepääsetav.',
+'revdelete-text-others' => 'Teised {{GRAMMAR:genitive|{{SITENAME}}}} administraatorid pääsevad ikkagi peidetud sisu juurde ja saavad sama liidese kaudu selle taastada, kui seatud pole lisapiiranguid.',
 'revdelete-confirm' => 'Kinnita, et soovid tõesti seda teha ning et saad aru tagajärgedest ja tegevus on kooskõlas [[{{MediaWiki:Policy-url}}|siinsete kokkulepetega]].',
 'revdelete-suppress-text' => "Andmed tuleks varjata '''ainult''' järgmistel juhtudel:
 * võimalik laim
@@ -2092,6 +2101,11 @@ Sisesta kujul tüüp/alamtüüp, näiteks <code>image/jpeg</code>.',
 # List redirects
 'listredirects' => 'Ümbersuunamised',
 
+# List duplicated files special page
+'listduplicatedfiles' => 'Duplikaatfailide loend',
+'listduplicatedfiles-summary' => 'Siin on loetletud failid, mille viimane versioon on mõne teise faili viimase versiooni duplikaat. Arvesse võetakse ainult kohalikke faile.',
+'listduplicatedfiles-entry' => 'Failil [[:File:$1|$1]] on [[$3|{{PLURAL:$2|üks duplikaat|$2 duplikaati}}]].',
+
 # Unused templates
 'unusedtemplates' => 'Kasutamata mallid',
 'unusedtemplatestext' => 'See lehekülg loetleb kõik leheküljed nimeruumis {{ns:template}}, mida teistel lehekülgedel ei kasutata. Enne kustutamist palun kontrollige, kas siia pole muid linke.',
@@ -2205,7 +2219,7 @@ Igal real on ära toodud esimene ja teine ümbersuunamisleht ning samuti teise 
 'deadendpagestext' => 'Järgmised leheküljed ei viita ühelegi teisele {{GRAMMAR:genitive|{{SITENAME}}}} leheküljele.',
 'protectedpages' => 'Kaitstud leheküljed',
 'protectedpages-indef' => 'Ainult määramata ajani kaitstud',
-'protectedpages-summary' => 'Siin on loetletud olemasolevad leheküljed, mis on praegu kaitstud. Loomise eest kaitstud pealkirjade loendi leiad leheküljelt [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].',
+'protectedpages-summary' => 'Siin on loetletud olemasolevad leheküljed, mis on praegu kaitstud. Loomise eest kaitstud pealkirjade loendi leiad [[{{#special:ProtectedTitles}}|siit]].',
 'protectedpages-cascade' => 'Ainult kaskaadkaitsega',
 'protectedpages-noredirect' => 'Peida ümbersuunamised',
 'protectedpagesempty' => 'Selliste parameetritega ei ole praegu ühtegi lehekülge kaitstud.',
@@ -2218,7 +2232,7 @@ Igal real on ära toodud esimene ja teine ümbersuunamisleht ning samuti teise 
 'protectedpages-unknown-timestamp' => 'Teadmata',
 'protectedpages-unknown-performer' => 'Teadmata kasutaja',
 'protectedtitles' => 'Kaitstud pealkirjad',
-'protectedtitles-summary' => 'Siin on loetletud pealkirjad, mis on praegu loomise eest kaitstud. Olemasolevate kaitstud lehekülgede loendi leiad leheküljelt [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].',
+'protectedtitles-summary' => 'Siin on loetletud pealkirjad, mis on praegu loomise eest kaitstud. Olemasolevate kaitstud lehekülgede loendi leiad [[{{#special:ProtectedPages}}|siit]].',
 'protectedtitlesempty' => 'Hetkel pole ükski pealkiri kaitstud.',
 'listusers' => 'Kasutajad',
 'listusers-editsonly' => 'Näita vaid kasutajaid, kes on teinud muudatusi',
@@ -2544,7 +2558,7 @@ Allpool on toodud lehekülje '''$1''' hetkel kehtivad seaded:",
 'protect-locked-access' => "Sinu kontol pole õigust muuta lehekülje kaitsetaset.
 Allpool on toodud lehekülje '''$1''' hetkel kehtivad seaded:",
 'protect-cascadeon' => 'See lehekülg on kaitstud, kuna ta on kasutusel {{PLURAL:$1|järgmisel leheküljel|järgmistel lehekülgedel}}, mis on omakorda kaskaadkaitse all.
-Sa saad muuta selle lehekülje kaitse staatust, kuid see ei mõjuta kaskaadkaitset.',
+Selle lehekülje kaitsetaseme muutmine ei mõjuta kaskaadkaitset.',
 'protect-default' => 'Luba kõigile kasutajatele',
 'protect-fallback' => 'Lubatud vaid kasutajatele õigusega "$1"',
 'protect-level-autoconfirmed' => 'Lubatud vaid automaatselt kinnitatud kasutajatele',
index c4f51b7..86e99ee 100644 (file)
@@ -348,7 +348,7 @@ $messages = array(
 'viewtalkpage' => 'Eztabaida ikusi',
 'otherlanguages' => 'Erdaretan',
 'redirectedfrom' => '($1(e)tik birzuzenduta)',
-'redirectpagesub' => 'Birzuzenketa orrialdea',
+'redirectpagesub' => 'Birbideratze orria',
 'lastmodifiedat' => 'Orrialdearen azken aldaketa: $2, $1.',
 'viewcount' => 'Orrialde hau {{PLURAL:$1|behin|$1 aldiz}} bisitatu da.',
 'protectedpage' => 'Babestutako orrialdea',
@@ -1163,7 +1163,7 @@ Kontura zaitez nabigazio loturek, zutabea ezabatu dezakela.',
 'search-result-size' => '$1 ({{PLURAL:$2|hitz bat|$2 hitz}})',
 'search-result-category-size' => '{{PLURAL:$1|kide 1|$1 kide}} ({{PLURAL:$2|azpikategoria 1|$2 azpikategoria}}, {{PLURAL:$3|fitxategi 1|$3 fitxategi}})',
 'search-result-score' => 'Garrantzia: %$1',
-'search-redirect' => '($1 birzuzenketa)',
+'search-redirect' => '(«$1» orritik birbideratua)',
 'search-section' => '($1 atala)',
 'search-suggest' => '$1 esan nahi zenuen',
 'search-interwiki-caption' => 'Beste proiektuak',
@@ -1364,7 +1364,7 @@ Informazio hau publikoa da.',
 'right-move-subpages' => 'Mugitu orrialdeak bere azpiorrialdeekin',
 'right-move-rootuserpages' => 'Erro-lankidearen orriak mugitu',
 'right-movefile' => 'Mugitu fitxategiak',
-'right-suppressredirect' => 'Ez sortu birzuzenketa bat antzinako izenetik orrialdea mugitzerakoan',
+'right-suppressredirect' => 'Orri bat mugitzean, ez sortu birbideratzea jatorrizko izenetik',
 'right-upload' => 'Fitxategia igo',
 'right-reupload' => 'Jada existitzen den artxibo bat gainidatzi',
 'right-reupload-own' => 'Norberak igotako fitxategi baten gainean idatzi',
@@ -1642,7 +1642,7 @@ $1',
 'upload-file-error-text' => 'Barne errore bat gertatu da zerbitzarian fitxategi tenporal bat sortzen saiatzean. Mesedez, jar zaitez [[Special:ListUsers/sysop|administratzaile]] batekin harremanetan.',
 'upload-misc-error' => 'Errore ezezaguna igotzerakoan',
 'upload-misc-error-text' => 'Errore ezezagun bat gertatu da fitxategia igotzen ari zenean. Mesedez, egiaztatu URLa baliozkoa eta eskuragarria dela eta berriz saiatu. Arazoak jarraitzen badu, jar zaitez [[Special:ListUsers/sysop|administratzailearekin]] harremanetan.',
-'upload-too-many-redirects' => 'URLak birzuzenketa gehiegi zituen',
+'upload-too-many-redirects' => 'URLak birbideratze gehiegi zituen',
 'upload-unknown-size' => 'Tamaina ezezaguna',
 'upload-http-error' => 'HTTP errorea gertatu da: $1',
 'upload-copy-upload-invalid-domain' => 'Domeinu honetan ezin dira igoerak kopiatu.',
@@ -1771,7 +1771,7 @@ Ondorengo zerrendak fitxategira dauden {{PLURAL:$1|lehen lotura|lehen $1 loturak
 [[Special:WhatLinksHere/$2|Zerrenda osoa]] ere eskuragarri dago.',
 'nolinkstoimage' => 'Ez dago fitxategi honetara lotura egiten duen orrialderik.',
 'morelinkstoimage' => 'Ikusi fitxategi honen [[Special:WhatLinksHere/$1|lotura gehiago]].',
-'linkstoimage-redirect' => '$1 (fitxategi birzuzenketa) $2',
+'linkstoimage-redirect' => '$1 (fitxategiranzko birbideratzea) $2',
 'duplicatesoffile' => 'Ondorengo fitxategi {{PLURAL:$1|hau beste honen berdina da|$1 hauek beste honen berdinak dira}} ([[Special:FileDuplicateSearch/$2|zehaztasun gehiago]]):',
 'sharedupload' => 'Elkarbanatutako fitxategi hau $1-(e)ko igoera bat da eta beste proiektuek ere erabil dezakete.',
 'sharedupload-desc-here' => 'Fitxategi hau $1-(e)koa da eta beste proeiktuetan erabilia izan liteke.
@@ -1840,7 +1840,7 @@ Bere [$2 fitxategiaren deskribapen orrialdea] behean dago.',
 'randomincategory-selectcategory-submit' => 'Joan',
 
 # Random redirect
-'randomredirect' => 'Ausazko birzuzenketa',
+'randomredirect' => 'Ausazko birbideratzea',
 'randomredirect-nopages' => 'Ez dago birzuzenketarik "$1" izen-tartean.',
 
 # Statistics
@@ -1852,7 +1852,7 @@ Bere [$2 fitxategiaren deskribapen orrialdea] behean dago.',
 'statistics-header-hooks' => 'Beste estatistikak',
 'statistics-articles' => 'Edukiak dituzten orrialdeak',
 'statistics-pages' => 'Orrialdeak',
-'statistics-pages-desc' => 'Wikian dauden orrialde guztiak, eztabaida orrialdeak, birzuzenketa, etab. barne.',
+'statistics-pages-desc' => 'Wikian dauden orri guztiak (eztabaida orriak, birbideratzeak eta abar barne).',
 'statistics-files' => 'Igotako fitxategiak',
 'statistics-edits' => '{{SITENAME}} sortu zenetik eginiko aldaketa kopurua',
 'statistics-edits-average' => 'Bataz-besteko aldaketak orrialdeko',
@@ -1869,14 +1869,14 @@ Bere [$2 fitxategiaren deskribapen orrialdea] behean dago.',
 'pageswithprop-submit' => 'Joan',
 'pageswithprop-prophidden-long' => 'testu luzearen ezagaurria izkutatua ($1)',
 
-'doubleredirects' => 'Birzuzenketa bikoitzak',
+'doubleredirects' => 'Birbideratze bikoitzak',
 'doubleredirectstext' => 'Lerro bakoitzean lehen eta bigarren birzuzenketetarako loturak ikus daitezke, eta baita edukia daukan edo eduki beharko lukeen orrialderako lotura ere. Lehen birzuzenketak azken honetara <del>zuzendu</del> beharko luke.',
-'double-redirect-fixed-move' => '[[$1]] mugitu da eta orain [[$2]](e)ra birzuzenketa bat da',
-'double-redirect-fixed-maintenance' => 'Birzuzenketa bikoitza konpontzen [[$1]]-etik [[$2]]-ra',
-'double-redirect-fixer' => 'Birzuzenketa zuzentzailea',
+'double-redirect-fixed-move' => '«[[$1]]» orria mugitu da, eta orain «[[$2]]» orrira daraman birbideratzea da',
+'double-redirect-fixed-maintenance' => '«[[$1]]» orritik «[[$2]]» orrira birbideratze bikoitza konpontzea',
+'double-redirect-fixer' => 'Birbideratze zuzentzailea',
 
 'brokenredirects' => 'Hautsitako birzuzenketak',
-'brokenredirectstext' => 'Jarraian zerrendatutako birzuzenketa loturak existitzen ez diren orrietara zuzenduta daude:',
+'brokenredirectstext' => 'Ondorengo birbideratze hauek existitzen ez diren orrietara bideratuta daude:',
 'brokenredirects-edit' => 'aldatu',
 'brokenredirects-delete' => 'ezabatu',
 
@@ -1979,8 +1979,8 @@ Erregistro mota, erabiltzailearen izena edota orrialdearen izena iragaziz bistar
 'alphaindexline' => '$1(e)tik $2(e)raino',
 'nextpage' => 'Hurrengo orrialdea ($1)',
 'prevpage' => 'Aurreko orrialdea ($1)',
-'allpagesfrom' => 'Honela hasten diren orrialdeak erakutsi:',
-'allpagesto' => 'Orrialde honetara zuzentzen diren guztiak erakutsi:',
+'allpagesfrom' => 'Erakutsi hasiera hau duten orriak:',
+'allpagesto' => 'Erakutsi bukaera hau duten orriak:',
 'allarticles' => 'Artikulu guztiak',
 'allinnamespace' => 'Orrialde guztiak ($1 izen-tartea)',
 'allpagessubmit' => 'Joan',
@@ -2380,7 +2380,7 @@ Blokeo erregistroa azken sarrera ematen da azpian erreferentziarako:',
 'linkshere' => "Hauek dute '''[[:$1]]''' orrialderako lotura:",
 'nolinkshere' => "Ez dago '''[[:$1]]''' lotura duen orrialderik.",
 'nolinkshere-ns' => "Hautatutako izen-tartean ez dago '''[[:$1]]''' orrialderako lotura duenik.",
-'isredirect' => 'birzuzenketa orrialdea',
+'isredirect' => 'birbideratze orrialdea',
 'istemplate' => 'erabilpena',
 'isimage' => 'fitxategi lotura',
 'whatlinkshere-prev' => '{{PLURAL:$1|aurrekoa|aurreko $1ak}}',
@@ -2526,24 +2526,18 @@ Hala ere, $2-(r)en parte denez, blokeoa kendu daiteke.',
 # Move page
 'move-page' => 'Mugitu «$1»',
 'move-page-legend' => 'Orrialdea mugitu',
-'movepagetext' => "Konturatu zaitez orrialdea '''ez''' dela mugituko izenburu berria duen orrialde bat badago jadanik, ez bada aldaketa-historiarik gabeko orrialde huts edo birbideratze bat.
-Horrek esan nahi du hanka sartzekotan orrialde baten jatorrizko izenburua berreskuratu daitekeela, baina ezin dela jada existitzen den orrialde baten gainean idatzi.
-
-'''Oharra!'''
-Aldaketa hau drastikoa eta ustekabekoa izan daiteke orrialde oso ezagunetan;
-mesedez, egiazta ezazu honen ondorioak ulertzen dituzula, jarraitu baino lehen.
-Inprimaki hau erabiliz, orri baten izena aldatuko da, eta haren historia izen berrira eraman.
-Izenburu zaharra izenburu berrirantz birzuzendutako orri bihurtuko da.
-Jatorrizko izenburura doazen birzuzenketak automatikoki egunera ditzakezu.
+'movepagetext' => 'Inprimaki hau erabiliz, orri baten izena aldatuko da, eta haren historia izen berrira eramango.
+Izenburu zaharra izenburu berrirantz birbideratutako orri bihurtuko da.
+Jatorrizko izenburura doazen birbideratzeak automatikoki egunera ditzakezu.
 Halako eguneratze automatikorik ez egitea aukeratzen baduzu, egiazta itzazu birbideratze [[Special:DoubleRedirects|bikoitzak]] eta [[Special:BrokenRedirects|apurtuak]].
 Zure ardura da loturak behar den tokirantz bideratzea.
 
-Gogoan izan ezazu ezazu: orriaren izena <strong>ez</strong> da aldatuko baldin jarri nahi duzun izenburua duen orria dagoeneko sortuta badago, salbu eta historiarik gabeko birzuzenketa orri bat bada.
+Gogoan izan ezazu ezazu: orriaren izena <strong>ez</strong> da aldatuko baldin jarri nahi duzun izenburua duen orria dagoeneko sortuta badago, salbu eta historiarik gabeko birbideratze orri bat bada.
 Hau da, nahasten baldin bazara, mugitu duzun orria lehengo izenburura itzultzeko modua badago, eta ezin duzun lehendik sortuta dagoen orri bat gainidatzi.
 
 <strong>Kontuz!</strong>
 Oso erabilia den orri batean, aldaketa hau bat-batekoa eta ustekabekoa izan liteke;
-zalantzarik baldin baduzu, lehenbizi adieraz ezazu zure asmoa eztabaida orrian, beste wikilarien iritziak jasotzeko.",
+zalantzarik baldin baduzu, lehenbizi adieraz ezazu zure asmoa eztabaida orrian, beste wikilarien iritziak jasotzeko.',
 'movepagetalktext' => "Dagokion eztabaida orrialdea berarekin batera mugitu da, honako kasu hauetan '''ezik:'''
 * Hutsik ez dagoen eztabaida orrialde bat existitzen bada izen berrian.
 * Beheko koadroa hautatzen ez baduzu.
@@ -2562,7 +2556,7 @@ Kasu horietan orrialdea eskuz mugitu edo bestearekin bateratu beharko duzu.",
 'pagemovedsub' => 'Mugimendua eginda',
 'movepage-moved' => '\'\'\'"$1" "$2"(e)ra mugitu da\'\'\'',
 'movepage-moved-redirect' => 'Birbideratze orri bat sortu da.',
-'movepage-moved-noredirect' => 'Birzuzenketa baten sorrera kendu da.',
+'movepage-moved-noredirect' => 'Birbideratzea sortzeko aukera kendu da.',
 'articleexists' => 'Izen hori duen artikulu bat badago edo hautatutako izena ez da baliozkoa. Mesedez, beste izen bat aukeratu.',
 'cantmove-titleprotected' => 'Ezin duzu orrialde bat leku honetara mugitu izenburu berri hori sor ez dadin babesa duelako',
 'movetalk' => 'Eztabaida orrialdea ere mugitu, ahal bada.',
@@ -2594,8 +2588,8 @@ Kasu horietan orrialdea eskuz mugitu edo bestearekin bateratu beharko duzu.",
 'imagenocrossnamespace' => 'Ezin da mugitu fitxategia fitxategiena ez den izen batera',
 'imagetypemismatch' => 'Fitxategiaren luzapen berriak ez du bere motako fitxategiekin bat egiten',
 'imageinvalidfilename' => 'Xede-artxiboaren izenak ez du balio',
-'fix-double-redirects' => 'Hasierako izenburura zuzentzen duten birzuzenketa guztiak aldatu',
-'move-leave-redirect' => 'Atzean birzuzenketa bat utzi',
+'fix-double-redirects' => 'Eguneratu jatorrizko izenburura zuzendutako birbideratze guztiak',
+'move-leave-redirect' => 'Utzi atzean birbideratzea',
 'protectedpagemovewarning' => "'''Oharra:''' Orrialde hau babestua izan da, beraz administratzaile eskumenak dituztenek alda dezakete bakarrik.
 Azken erregistroko sarrera ematen da azpian erreferentzia gisa:",
 'semiprotectedpagemovewarning' => "'''Oharra:''' Orrialde hau blokeatu dute, izena emanda duten erabiltzaileek soilik mugitu ahal dezaten. Erregistroko azken sarrera erakusten da jarraian erreferentzia gisa:",
@@ -3696,7 +3690,7 @@ Halaber [[Special:EditWatchlist|aldatzaile estandarra]] erabil dezakezu.',
 'logentry-move-move' => '$1 {{GENDER:$2|wikilariak}} «$3» orria «$4» izenera aldatu du',
 'logentry-move-move-noredirect' => '$1 {{GENDER:$2|wikilariak}} $3 orria $4 izenera aldatu du, birzuzenketarik utzi gabe',
 'logentry-move-move_redir' => '$1 {{GENDER:$2|wikilariak}} «$3» orria «$4» izenera aldatu du, birzuzenketaren gainetik',
-'logentry-move-move_redir-noredirect' => '$1 {{GENDER:wikilariak}} «$3» orria «$4» izenera aldatu du, birzuzenketa bat gainidatzita, birzuzenketarik utzi gabe',
+'logentry-move-move_redir-noredirect' => '$1 {{GENDER:wikilariak}} «$3» orria «$4» izenera aldatu du, birbideratze bat gainidatzita, birbideratzerik utzi gabe',
 'logentry-patrol-patrol' => '$1(e)k $3 orrialdearen $4 berrikuzpena patruilatutzat {{GENDER:$2|markatu}} du',
 'logentry-newusers-newusers' => '$1 erabiltzaile kontua sortu da',
 'logentry-newusers-create' => '$1 erabiltzaile kontua sortu da',
index 77da709..887dc3a 100644 (file)
@@ -3432,7 +3432,7 @@ $2',
 'markedaspatrollederror' => 'برچسب گشت زده نشد',
 'markedaspatrollederrortext' => 'باید یک نسخه را مشخص کنید تا برچسب گشت بخورد.',
 'markedaspatrollederror-noautopatrol' => 'شما نمی‌توانید به تغییرات انجام شده توسط خودتان برچسب گشت بزنید.',
-'markedaspatrollednotify' => 'این تغییر روی $1 برچسب گشت خورده است.',
+'markedaspatrollednotify' => 'این تغییر روی $1 برچسب گشت خورد.',
 'markedaspatrollederrornotify' => 'زدن برچسب گشت، ناموفق بود.',
 
 # Patrol log
index 06df49f..5dd9160 100644 (file)
@@ -885,7 +885,9 @@ Jotta pääset kirjautumaan sisään kunnolla, sinun on nyt asetettava uusi sala
 'resetpass-abort-generic' => 'Laajennus keskeytti salasanan vaihdon.',
 'resetpass-expired' => 'Salasanasi on vanhentunut. Valitse uusi salasana, jotta pääset kirjautumaan sisään.',
 'resetpass-expired-soft' => 'Salasanasi on vanhentunut ja se pitää uudistaa. Valitse uusi salasana nyt tai paina "{{int:resetpass-submit-cancel}}", niin voit uudistaa salasanan myöhemmin.',
-'resetpass-validity-soft' => 'Valitse nyt uusi salasana tai paina "{{int:resetpass-submit-cancel}}", niin voit vaihtaa sen myöhemmin.',
+'resetpass-validity-soft' => 'Salasanasi ei ole kelvollinen: $1
+
+Valitse nyt uusi salasana tai paina "{{int:resetpass-submit-cancel}}", niin voit vaihtaa sen myöhemmin.',
 
 # Special:PasswordReset
 'passwordreset' => 'Salasanan uudistus',
@@ -1264,6 +1266,7 @@ Voit silti nähdä tämän muutoksen. Lisätietoja löytyy [{{fullurl:{{#Special
 'revdelete-text-text' => 'Poistetut versiot näkyvät edelleen sivun historiassa, mutta osa niiden sisällöstä ei enää ole saatavilla julkisesti.',
 'revdelete-text-file' => 'Poistetut tiedostoversiot näkyvät yhä sivun historiassa, mutta osa niiden sisällöstä ei ole saatavilla julkisesti.',
 'logdelete-text' => 'Poistetut lokimerkinnät näkyvät edelleen lokeissa, mutta osa niiden sisällöstä ei enää ole saatavilla julkisesti.',
+'revdelete-text-others' => 'Muut ylläpitäjät sivustolla {{SITENAME}} kykenevät silti näkemään piilotetun sisällön ja voivat palauttaa sen takaisin näkyviin tämän saman käyttöliittymän kautta, paitsi silloin kun lisärajoituksia on asetettu.',
 'revdelete-confirm' => 'Varmista, että haluat tehdä tämän – ymmärrät seuraukset ja teet tämän [[{{MediaWiki:Policy-url}}|käytäntöjen]] mukaisesti.',
 'revdelete-suppress-text' => "Häivytystä pitäisi käyttää '''vain''' seuraavissa tapauksissa:
 * Mahdollisesti henkilön kunniaa loukkaavia tietoja
@@ -1348,9 +1351,9 @@ Uuden ja vanhan sivun muutoksien pitää muodostaa jatkumo – ne eivät saa men
 'mergelogpagetext' => 'Alla on loki viimeisimmistä muutoshistorioiden yhdistämisistä.',
 
 # Diffs
-'history-title' => 'Sivun $1 muutoshistoria',
-'difference-title' => 'Ero sivun $1 versioiden välillä',
-'difference-title-multipage' => 'Erot sivujen $1 ja $2 välillä',
+'history-title' => 'Sivun ”$1” muutoshistoria',
+'difference-title' => 'Ero sivun ”$1” versioiden välillä',
+'difference-title-multipage' => 'Erot sivujen ”$1” ja ”$2” välillä',
 'difference-multipage' => '(Sivujen välinen eroavaisuus)',
 'lineno' => 'Rivi $1:',
 'compareselectedversions' => 'Vertaile valittuja versioita',
@@ -1724,7 +1727,7 @@ Tämä tieto on julkinen.',
 'recentchanges-legend-heading' => "'''Selitys:'''",
 'recentchanges-legend-newpage' => '(katso myös [[Special:NewPages|lista uusista sivuista]])',
 'recentchanges-legend-plusminus' => "(''±123'')",
-'rcnotefrom' => 'Alla on muutokset <b>$2</b> lähtien. Enintään <b>$1</b> merkintää näytetään.',
+'rcnotefrom' => 'Alla ovat muutokset <strong>$2</strong> lähtien. (Enintään <strong>$1</strong> näytetään.)',
 'rclistfrom' => 'Näytä uudet muutokset $1 alkaen',
 'rcshowhideminor' => '$1 pienet muutokset',
 'rcshowhideminor-show' => 'Näytä',
@@ -1938,6 +1941,10 @@ $1',
 'backend-fail-batchsize' => 'Taustajärjestelmälle on annettu $1 {{PLURAL:$1|tiedostotoiminto|toimintoa}}; enimmäismäärä on $2 {{PLURAL:$2|tiedostotoiminto|toimintoa}}.',
 'backend-fail-usable' => 'Tiedostoa $1 ei voitu lukea tai luoda, koska käyttöoikeudet eivät riittäneet tai hakemisto puuttuu.',
 
+# File journal errors
+'filejournal-fail-dbconnect' => 'Ei voitu yhdistää kohteeseen journal database for storage backend "$1".',
+'filejournal-fail-dbquery' => 'Ei voitu päivittää kohdetta journal database for storage backend "$1".',
+
 # Lock manager
 'lockmanager-notlocked' => 'Kohteen $1 lukitusta ei voitu poistaa, koska se ei ole lukittu.',
 'lockmanager-fail-closelock' => 'Tiedoston $1 lukkotiedostoa ei voitu sulkea.',
@@ -2111,6 +2118,10 @@ Syöte: sisältötyyppi/alatyyppi, esimerkiksi <code>image/jpeg</code>.',
 # List redirects
 'listredirects' => 'Ohjaukset',
 
+# List duplicated files special page
+'listduplicatedfiles' => 'Luettelo tiedostoista, joista on kaksoiskappale.',
+'listduplicatedfiles-entry' => 'Tiedostosta [[:File:$1|$1]] on olemassa [[$3|{{PLURAL:$2|kaksoiskappale|$2 kaksoiskappaletta}}]].',
+
 # Unused templates
 'unusedtemplates' => 'Käyttämättömät mallineet',
 'unusedtemplatestext' => 'Tässä on lista nimiavaruuden {{ns:template}} kaikista sivuista, joita ei ole liitetty toiselle sivulle. Muista tarkistaa onko malline siitä huolimatta käytössä.',
@@ -2484,7 +2495,7 @@ Palaute ja lisäapu osoitteessa:
 'excontentauthor' => 'sisälsi: ”$1” (ainoa muokkaaja oli $2)',
 'exbeforeblank' => 'ennen tyhjentämistä sisälsi: ”$1”',
 'exblank' => 'oli tyhjä',
-'delete-confirm' => 'Sivun ”$1” poistaminen',
+'delete-confirm' => 'Poista ”$1”',
 'delete-legend' => 'Sivun poisto',
 'historywarning' => "'''Varoitus:''' Sivua, jota olet poistamassa, on muokattu noin $1 {{PLURAL:$1|kerta|kertaa}}:",
 'confirmdeletetext' => 'Olet poistamassa sivun tai tiedoston ja kaiken sen historian. Ymmärrä teon seuraukset ja tee poisto {{GRAMMAR:genitive|{{SITENAME}}}} [[{{MediaWiki:Policy-url}}|käytäntöjen]] mukaisesti.',
@@ -2537,7 +2548,7 @@ Viimeisimmän muokkauksen on tehnyt käyttäjä [[User:$3|$3]] ([[User talk:$3|k
 'modifiedarticleprotection' => 'muutti sivun [[$1]] suojaustasoa',
 'unprotectedarticle' => 'poisti suojauksen sivulta [[$1]]',
 'movedarticleprotection' => 'siirsi suojausasetukset sivulta [[$2]] sivulle [[$1]]',
-'protect-title' => 'Sivun $1 suojaus',
+'protect-title' => 'Muuta suojausta sivulla ”$1”',
 'protect-title-notallowed' => 'Sivun $1 suojaustaso',
 'prot_1movedto2' => 'siirsi sivun [[$1]] uudelle nimelle [[$2]]',
 'protect-badnamespace-title' => 'Nimiavaruus ei suojattavissa',
@@ -2554,7 +2565,9 @@ Viimeisimmän muokkauksen on tehnyt käyttäjä [[User:$3|$3]] ([[User talk:$3|k
 'protect-locked-blocked' => "Et voi muuttaa sivun suojauksia, koska sinut on estetty. Alla on sivun ”'''$1'''” nykyiset suojaukset:",
 'protect-locked-dblock' => "Sivun suojauksia ei voi muuttaa, koska tietokanta on lukittu. Alla on sivun ”'''$1'''” nykyiset suojaukset:",
 'protect-locked-access' => "Sinulla ei ole tarvittavia oikeuksia sivujen suojauksen muuttamiseen. Alla on sivun ”'''$1'''” nykyiset suojaukset:",
-'protect-cascadeon' => 'Tämä sivu on suojauksen kohteena, koska se on sisällytetty alla {{PLURAL:$1|olevaan tartuttavasti suojattuun sivuun|oleviin tartuttavasti suojattuihin sivuihin}}. Voit muuttaa tämän sivun suojaustasoa, mutta se ei vaikuta tarttuvaan suojaukseen.',
+'protect-cascadeon' => 'Tämä sivu on suojauksen kohteena, koska se on sisällytetty alla {{PLURAL:$1|olevaan suojattuun sivuun, jossa|oleviin suojattuihin sivuihin, joissa}} on kytketty tarttuva suojaus päälle.
+
+Tämän sivun suojaustasoon tehdyillä muutoksilla ei ole vaikutusta sivuun muualta tarttuneeseen suojaukseen.',
 'protect-default' => 'Salli kaikki käyttäjät',
 'protect-fallback' => 'Salli vain käyttäjät, joilla on oikeus $1',
 'protect-level-autoconfirmed' => 'Vain hyväksytyt käyttäjät',
@@ -2842,7 +2855,7 @@ Muista [[Special:UnlockDB|poistaa tietokannan lukitus]] kun huolto on tehty.',
 'lockedbyandtime' => '(lukinnut {{GENDER:$1|$1}} $2 kello $3)',
 
 # Move page
-'move-page' => 'Sivun $1 siirto',
+'move-page' => 'Siirrä $1',
 'move-page-legend' => 'Siirrä sivu',
 'movepagetext' => "Alla olevalla lomakkeella voit nimetä uudelleen sivuja, jolloin niiden koko historia siirtyy uuden nimen alle.
 Vanhasta sivusta tulee ohjaussivu, joka osoittaa uuteen sivuun.
@@ -3874,9 +3887,9 @@ Yritä normaalia esikatselua.',
 'watchlistedit-numitems' => 'Tarkkailulistallasi on {{PLURAL:$1|yksi sivu|$1 sivua}}, lukuun ottamatta keskustelusivuja.',
 'watchlistedit-noitems' => 'Tarkkailulistasi on tyhjä.',
 'watchlistedit-normal-title' => 'Tarkkailulistan muokkaus',
-'watchlistedit-normal-legend' => 'Sivut',
+'watchlistedit-normal-legend' => 'Poista sivuja tarkkailulistalta',
 'watchlistedit-normal-explain' => 'Tarkkailulistasi sivut on lueteltu alla. Voit poistaa sivuja valitsemalla niitä vastaavat valintaruudut ja napsauttamalla ”{{int:Watchlistedit-normal-submit}}”. Voit myös muokata listaa [[Special:EditWatchlist/raw|tekstimuodossa]].',
-'watchlistedit-normal-submit' => 'Poista',
+'watchlistedit-normal-submit' => 'Poista kohteet',
 'watchlistedit-normal-done' => '{{PLURAL:$1|Yksi sivu|$1 sivua}} poistettiin tarkkailulistaltasi:',
 'watchlistedit-raw-title' => 'Tarkkailulistan muokkaus',
 'watchlistedit-raw-legend' => 'Tarkkailulistan muokkaus',
@@ -3890,9 +3903,9 @@ Voit myös muokata listaa [[Special:EditWatchlist|tavalliseen tapaan]].',
 'watchlistedit-raw-removed' => '{{PLURAL:$1|Yksi sivu|$1 sivua}} poistettiin:',
 
 # Watchlist editing tools
-'watchlisttools-view' => 'Näytä muutokset',
-'watchlisttools-edit' => 'Muokkaa listaa',
-'watchlisttools-raw' => 'Lista raakamuodossa',
+'watchlisttools-view' => 'Näytä tarkkaillut muutokset',
+'watchlisttools-edit' => 'Katso ja muokkaa tarkkailulistaa',
+'watchlisttools-raw' => 'Muokkaa listaa raakamuodossa',
 
 # Signatures
 'signature' => '[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|keskustelu]])',
@@ -4024,7 +4037,7 @@ Sinun olisi pitänyt saada [{{SERVER}}{{SCRIPTPATH}}/COPYING kopio GNU General P
 'compare-rev1' => 'Versio 1',
 'compare-rev2' => 'Versio 2',
 'compare-submit' => 'Vertaa',
-'compare-invalid-title' => 'Antamasi otsikko on virheellinen.',
+'compare-invalid-title' => 'Antamasi sivun nimi on virheellinen.',
 'compare-title-not-exists' => 'Määrittämääsi sivua ei ole.',
 'compare-revision-not-exists' => 'Määrittämääsi versiota ei ole.',
 
@@ -4171,20 +4184,21 @@ Muussa tapauksessa voit käyttää alla olevaa helpompaa lomaketta. Kommenttisi
 'rotate-comment' => 'Kuvaa käännettiin $1 {{PLURAL:$1|aste|astetta}} myötäpäivään',
 
 # Limit report
-'limitreport-title' => 'Jäsentimen profilointitiedot',
+'limitreport-title' => 'Jäsentimen profilointitiedot:',
 'limitreport-cputime' => 'Suorittimen ajankäyttö',
 'limitreport-cputime-value' => '$1 {{PLURAL:$1|sekunti|sekuntia}}',
 'limitreport-walltime' => 'Todellinen ajankäyttö',
 'limitreport-walltime-value' => '$1 {{PLURAL:$1|sekunti|sekuntia}}',
-'limitreport-ppvisitednodes' => 'Esikääntäjän läpikäymien solmujen määrä',
+'limitreport-ppvisitednodes' => 'Esikääntäjän läpikäymien solmujen määrä<br />(preprocessor visited node count)',
+'limitreport-ppgeneratednodes' => 'Esikääntäjän synnyttämien solmujen määrä <br />(preprocessor generated node count)',
 'limitreport-postexpandincludesize-value' => '$1/$2 {{PLURAL:$2|tavu|tavua}}',
-'limitreport-templateargumentsize' => 'Mallineen argumenttien koko',
+'limitreport-templateargumentsize' => 'Mallineen argumenttien koko<br />(template argument size)',
 'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|tavu|tavua}}',
 'limitreport-expansiondepth' => 'Highest expansion depth',
 'limitreport-expensivefunctioncount' => 'Vaativien parserfunktioiden määrä',
 
 # Special:ExpandTemplates
-'expandtemplates' => 'Mallineiden laajennus',
+'expandtemplates' => 'Laajenna mallineet',
 'expand_templates_intro' => 'Tämä toimintosivu ottaa syötteeksi tekstiä ja laajentaa kaikki siinä olevat mallineet rekursiivisesti.
 Se myös laajentaa tuetut parserifunktiot kuten
 <code><nowiki>{{</nowiki>#language:...}}</code> ja -muuttujat kuten
index 0f4437f..b4bcc7b 100644 (file)
@@ -2244,6 +2244,11 @@ Entrée : ''typedecontenu''/''sous-type'', par exemple <code>image/jpeg</code>."
 # List redirects
 'listredirects' => 'Liste des redirections',
 
+# List duplicated files special page
+'listduplicatedfiles' => 'Liste de fichiers en double',
+'listduplicatedfiles-summary' => "C'est une liste de fichiers où la version la plus récente du fichier est une copie de la version la plus récente d'un autre fichier. Seuls les fichiers locaux sont examinés.",
+'listduplicatedfiles-entry' => '[[:Fichier:$1|$1]] a [[$3|{{PLURAL:$2|un doublon|$2 doublons}}]].',
+
 # Unused templates
 'unusedtemplates' => 'Modèles inutilisés',
 'unusedtemplatestext' => 'Cette page liste toutes les pages de l’espace de noms « {{ns:template}} » qui ne sont incluses dans aucune autre page.
@@ -2827,7 +2832,7 @@ $1',
 'sp-contributions-blocked-notice-anon' => "Cette adresse IP est actuellement bloquée.
 La dernière entrée du journal des blocages est indiquée ci-dessous à titre d'information :",
 'sp-contributions-search' => 'Rechercher les contributions',
-'sp-contributions-suppresslog' => 'contributions des utilisateurs supprimées',
+'sp-contributions-suppresslog' => 'contributions masquées',
 'sp-contributions-username' => "Adresse IP ou nom d'utilisateur :",
 'sp-contributions-toponly' => 'Ne montrer que les contributions qui sont les dernières des articles',
 'sp-contributions-newonly' => 'Afficher uniquement les modifications qui sont des créations de page',
index 2290c53..b4c9a9c 100644 (file)
@@ -469,6 +469,7 @@ Ferjid det ei, an aachte üüb din [[Special:Preferences|{{SITENAME}} iinstelang
 'gotaccountlink' => 'Uunmelde',
 'userlogin-resetlink' => 'Heest dü din login dooten ferjiden?',
 'userlogin-resetpassword-link' => 'Paaswurd ferjiden?',
+'userlogin-helplink2' => "Halep bi't uunmeldin",
 'userlogin-loggedin' => 'Du beest al üs {{GENDER:$1|$1}} uunmeldet.
 Brük det formulaar diar oner, am di mä en öödern nööm uuntumeldin.',
 'userlogin-createanother' => 'En ööder brükerkonto iinracht',
@@ -563,6 +564,10 @@ Wees so gud an teew $1, iar dü det noch ans ferschükst.',
 'loginlanguagelabel' => 'Spriak: $1',
 'suspicious-userlogout' => 'Din ufmeldang as ei föörnimen wurden, auer det uunfraag ferlicht faan en uunstakenen browser of faan en cache-proxy kaam.',
 'createacct-another-realname-tip' => 'Stäänt tu wool. Wan dü dan rochten nööm uundääst, koon hi mä din feranrangen ferbünjen wurd.',
+'pt-login' => 'Uunmelde',
+'pt-login-button' => 'Uunmelde',
+'pt-createaccount' => 'Brükerkonto iinracht',
+'pt-userlogout' => 'Ufmelde',
 
 # Email sending
 'php-mail-error-unknown' => 'Ünbekäänd feeler mä det funktjuun mail() faan PHP.',
@@ -571,8 +576,7 @@ Wees so gud an teew $1, iar dü det noch ans ferschükst.',
 
 # Change password dialog
 'changepassword' => 'Paaswurd feranre',
-'resetpass_announce' => 'Dü heest di mä di code uunmeldet, di dü per e-mail tuschüürd füngen heest.
-Am det uunmeldin uftuslütjen, skel dü en nei paaswurd iindu.',
+'resetpass_announce' => 'Am det uunmeldin uftuslütjen, skel dü en nei paaswurd iindu.',
 'resetpass_header' => 'Paaswurd feranre',
 'oldpassword' => 'Ual paaswurd:',
 'newpassword' => 'Nei paaswurd:',
@@ -588,8 +592,16 @@ Wees so gud an teew $1, iar dü det noch ans ferschükst.',
 'resetpass-wrong-oldpass' => 'Detdiar paaswurd docht niks.
 Ferlicht heest dü jüst din paaswurd feranert
 of am en nei paaswurd uunfraaget.',
+'resetpass-recycled' => 'Wees so gud an lei en nei paaswurd fääst.',
+'resetpass-temp-emailed' => 'Dü heest di mä en tidjwiis code uunmeldet.
+Am det uunmeldin uftuslütjen, lei nü en nei paaswurd fääst:',
 'resetpass-temp-password' => 'Tidjwiis paaswurd:',
 'resetpass-abort-generic' => 'Det paaswurd-anerang as ferhanert wurden.',
+'resetpass-expired' => 'Din paaswurd as uflepen. Wees so gud an lei en nei paaswurd fääst.',
+'resetpass-expired-soft' => 'Din paaswurd as uflepen an skal turagsaat wurd. Wees so gud an lei en nei paaswurd fääst of trak üüb "{{int:resetpass-submit-cancel}}", am det leeder turag tu saaten.',
+'resetpass-validity-soft' => 'Din paaswurd gongt ei: $1
+
+Wees so gud an lei en nei paaswurd fääst, of trak üüb "{{int:resetpass-submit-cancel}}" am det leeder turag tu saaten.',
 
 # Special:PasswordReset
 'passwordreset' => 'Paaswurd turagsaat',
@@ -963,6 +975,10 @@ Dü könst di ferskeel uunluke. Wan dü muar wed wel, luke iin uun't [{{fullurl:
 'revdelete-show-file-submit' => 'Ja',
 'revdelete-selected' => "'''{{PLURAL:$2|Ütjsoocht werjuun|Ütjsoocht werjuunen}} faan [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Ütjsoocht logbukiindrach|Ütjsoocht logbukiindracher}}:'''",
+'revdelete-text-text' => "Stregen werjuunen bliiw uun't werjuunshistoore, man dialen diarfaan san ei för arken tu sen.",
+'revdelete-text-file' => "Stregen datei-werjuunen bliiw uun't werjuunshistoore, man dialen diarfaan san ei för arken tu sen.",
+'logdelete-text' => 'Stregen logbuk-iindracher bliiw uun a logbuken, man dialen diarfaan san ei för arken tu sen.',
+'revdelete-text-others' => 'Ööder administratooren faan {{SITENAME}} kön widjerhen ales uunluke an kön det uk weder mä detheer spezial-sidj iinstel, wan diar niks ööders uun a wai as.',
 'revdelete-confirm' => 'Ferseekre noch ans, dat dü det würelk du wel, dat dü witjst, wat dü dääst, an dat det mä a [[{{MediaWiki:Policy-url}}|bestemangen]] auerian stemet.',
 'revdelete-suppress-text' => "Det skul '''bluas''' onertrakt wurd bi:
 * Persöönelk informatsjuunen, diar näämen wat uungung
@@ -1095,7 +1111,7 @@ Dü könst det uun't [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}}
 'search-file-match' => '(fünjen tekst)',
 'search-suggest' => 'Mendst dü „$1“?',
 'search-interwiki-caption' => 'Saster-projekten',
-'search-interwiki-default' => '$1 resultaaten:',
+'search-interwiki-default' => 'Resultaaten faan $1:',
 'search-interwiki-more' => '(muar)',
 'search-relatedarticle' => 'Ferbünjen',
 'searcheverything-enable' => 'Uun arke nöömrüm schük',
@@ -1419,14 +1435,26 @@ Arken koon det lees.',
 'recentchanges-legend-heading' => "'''Ferklaarang:'''",
 'recentchanges-legend-newpage' => "(luke uk bi't [[Special:NewPages|list mä nei sidjen]])",
 'recentchanges-legend-plusminus' => "(''±123'')",
-'rcnotefrom' => "Diar wurd a feranrangen sant '''$2'''uunwiset (ei muar üs '''$1''' feranrangen).",
+'rcnotefrom' => 'Diar wurd a feranrangen sant <strong>$2</strong>uunwiset (ei muar üs <strong>$1</strong> feranrangen).',
 'rclistfrom' => 'Bluas feranrangen sant $1 wise.',
 'rcshowhideminor' => '$1 letj feranrangen',
+'rcshowhideminor-show' => 'Wise',
+'rcshowhideminor-hide' => 'Fersteeg',
 'rcshowhidebots' => '$1 bots',
+'rcshowhidebots-show' => 'Wise',
+'rcshowhidebots-hide' => 'Fersteeg',
 'rcshowhideliu' => '$1 registriaret brükern',
+'rcshowhideliu-show' => 'Wise',
+'rcshowhideliu-hide' => 'Fersteeg',
 'rcshowhideanons' => '$1 anonüüm brükern',
+'rcshowhideanons-show' => 'Wise',
+'rcshowhideanons-hide' => 'Fersteeg',
 'rcshowhidepatr' => '$1 efterluket feranrangen',
+'rcshowhidepatr-show' => 'Wise',
+'rcshowhidepatr-hide' => 'Fersteeg',
 'rcshowhidemine' => '$1 min bidracher',
+'rcshowhidemine-show' => 'Wise',
+'rcshowhidemine-hide' => 'Fersteeg',
 'rclinks' => 'Wise a leetst $1 feranrangen faan a leetst $2 daar.<br />$3',
 'diff' => 'ferskeel',
 'hist' => 'werjuunen',
@@ -1549,6 +1577,7 @@ Dü skulst hoker fraage, di ferbürgen nöömer uunluke koon, am tu besnaakin, w
 'php-uploaddisabledtext' => 'Det huuchschüüren faan datein as uun PHP ei aktiwiaret.
 Luke di det iinstelang faan <code>file_uploads</code> uun.',
 'uploadscripted' => 'Uun detdiar datei stäänt HTML- of Scriptcode, an küd ütj fersen faan en browser ütjfeerd wurd.',
+'uploadscriptednamespace' => 'Detdiar SVG-datei wiset üüb en ferkiarden nöömrüm "$1".',
 'uploadinvalidxml' => "Det XML uun det huuchschüürd datei küd ei ''parset'' wurd.",
 'uploadvirus' => 'Uun detdiar datei as en wiirus! Details: $1',
 'uploadjava' => 'Detdiar as en ZIP-datei mä en CLASS-datei faan Java.
@@ -1786,6 +1815,11 @@ Det formoot as leewen slach/onerslach üs uun det bispal: <code>image/jpeg</code
 # List redirects
 'listredirects' => 'Widjerfeerangen',
 
+# List duplicated files special page
+'listduplicatedfiles' => 'List faan datein mä duplikaaten',
+'listduplicatedfiles-summary' => 'Det as en list mä datein, huar det aktuel werjuun en duplikaat faan en ööder datei as. Det gongt bluas am lokaal datein.',
+'listduplicatedfiles-entry' => '[[:File:$1|$1]] hää [[$3|{{PLURAL:$2|en duplikaat|$2 duplikaaten}}]].',
+
 # Unused templates
 'unusedtemplates' => 'Ei iinbünjen föörlaagen',
 'unusedtemplatestext' => 'Sidjen uun a {{ns:template}}-nöömrüm, diar ei uun ööder sidjen iinbünjen san.
@@ -1899,6 +1933,7 @@ Uun arke rä stun ferwisangen tu't iarst an ööder widjerfeerang an uk tu det s
 'deadendpagestext' => 'Jodiar sidjen ferwise ei üüb ööder sidjen uun {{SITENAME}}.',
 'protectedpages' => 'Seekert sidjen',
 'protectedpages-indef' => 'Bluas permanent seekert sidjen uunwise',
+'protectedpages-summary' => 'Detdiar sidj feert seekert sidjen ap. En list mä seekert sidjennöömer fanjst dü diar: „[[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]]“.',
 'protectedpages-cascade' => 'Bluas sidjen mä kaskaaden-seekerhaid',
 'protectedpages-noredirect' => 'Widjerfeerangen fersteeg',
 'protectedpagesempty' => 'Uun uugenblak san sok sidjen ei seekert.',
@@ -1911,6 +1946,7 @@ Uun arke rä stun ferwisangen tu't iarst an ööder widjerfeerang an uk tu det s
 'protectedpages-unknown-timestamp' => 'Ünbekäänd',
 'protectedpages-unknown-performer' => 'Ünbekäänd brüker',
 'protectedtitles' => 'Seekert sidjennöömer',
+'protectedtitles-summary' => 'Detdiar sidj feert seekert sidjennöömer ap. En list mä seekert sidjen fanjst dü diar: „[[{{#special:ProtectedPages}}|{{int:protectedpages}}]]“.',
 'protectedtitlesempty' => 'Uun uugenblak san sok sidjen ei speret.',
 'listusers' => 'Brükerfertiaknis',
 'listusers-editsonly' => 'Wise bluas aktiif brükern',
@@ -2173,7 +2209,7 @@ Halep an muar diartu: {{canonicalurl:{{MediaWiki:Helppage}}}}',
 'delete-edit-reasonlist' => "Grünjer för't striken bewerke",
 'delete-toobig' => 'Detdiar sidj hää muar üs $1 {{PLURAL:$1|werjuun|werjuunen}} . Sok sidjen kön ei so gau stregen wurd, ööders san a servers plaat.',
 'delete-warning-toobig' => "Detdiar sidj hää muar üs $1 {{PLURAL:$1|werjuun|werjuunen}} . Det striken koon komer maage bi't dootenbeenk.",
-'deleting-backlinks-warning' => "'''Paase üüb:''' Diar ferwise noch ööder sidjen üüb det sidj, diar dü strik wel. Of det sidj as noch huarööders iinbünjen.",
+'deleting-backlinks-warning' => "'''Paase üüb:''' Diar ferwise noch [[Special:WhatLinksHere/{{FULLPAGENAME}}|ööder sidjen]] üüb det sidj, diar dü strik wel. Of det sidj as noch huarööders iinbünjen.",
 
 # Rollback
 'rollback' => 'Feranrangen turagsaat',
@@ -2345,8 +2381,10 @@ $1",
 'sp-contributions-blocked-notice' => "Didiar brüker as speret. Det stäänt uun't sperlogbuk:",
 'sp-contributions-blocked-notice-anon' => "Detdiar IP-adres as speret. Det stäänt uun't sperlogbuk:",
 'sp-contributions-search' => 'Schük efter brükerbidracher',
+'sp-contributions-suppresslog' => 'Ei uunwiset brüker-bidracher',
 'sp-contributions-username' => 'IP-adres of brükernööm:',
 'sp-contributions-toponly' => 'Bluas aktuel werjuunen wise',
+'sp-contributions-newonly' => 'Bluas nei maaget sidjen wise',
 'sp-contributions-submit' => 'Schük',
 
 # What links here
index e8ad408..01f6931 100644 (file)
@@ -404,6 +404,10 @@ $2',
 'namespaceprotected' => "汝還無權限編輯'''$1'''名字空間嘅頁面。",
 'customcssprotected' => '汝還無權限編輯邇隻CSS頁面,因為其包含矣其他用戶嘅個人設置。',
 'customjsprotected' => '汝還無權限去編輯邇隻JavaScript頁面,因為其包含矣另一用戶嘅個人設定。',
+'mycustomcssprotected' => '汝無權限修改邇頁CSS。',
+'mycustomjsprotected' => '汝無編輯邇頁JavaScript之權限。',
+'myprivateinfoprotected' => '汝無權限編輯汝个個人信息。',
+'mypreferencesprotected' => '汝無權限編輯汝个個人設定。',
 'ns-specialprotected' => '邇兜特殊頁面係毋做得編輯嘅。',
 'titleprotected' => "邇隻標題已經分[[User:$1|$1]]保護來防止建立。理由係''$2''。",
 'filereadonlyerror' => '無辦法修改文件「$1」因為文件庫「$2」處於唯讀模式。 !
@@ -411,7 +415,7 @@ $2',
 'invalidtitle-knownnamespace' => '使用名字空間「$2」與文本「$3」嘅無效標題',
 'invalidtitle-unknownnamespace' => '使用未知名字空間編號$1與文本“$2”嘅無效標題',
 'exception-nologin' => '還吂登入',
-'exception-nologin-text' => '你愛登入本wiki正做得查閲邇頁或進行操作。',
+'exception-nologin-text' => '汝愛[[Special:Userlogin|登入]]本wiki查看邇頁或者進行操作。',
 
 # Virus scanner
 'virus-badscanner' => "損壞設定: 未知嘅病毒掃瞄器: ''$1''",
@@ -419,16 +423,16 @@ $2',
 'virus-unknownscanner' => '還吂知嘅反病毒軟件:',
 
 # Login and logout pages
-'logouttext' => "汝已經登出。
+'logouttext' => "'''汝今下既經登出。'''
 
-汝做得用匿名方式繼續使用{{SITENAME}},或用相同或毋同用戶身份<span class='plainlinks'>[$1 登入]</span>。
-請注意,假使汝再次登入,本頁可能會繼續顯示,直到汝清除瀏覽器緩存。",
+請注意一兜頁面可能還顯示汝係登入狀態,一直到汝清空汝嘅瀏覽器緩存為止。",
 'welcomeuser' => '歡迎,$1!',
 'welcomecreation-msg' => '汝嘅賬號已經建立。
 莫添忘訖設置[[Special:Preferences|{{SITENAME}}嘅個人參數]]。',
 'yourname' => '用戶名:',
 'userlogin-yourname' => '用戶名',
 'userlogin-yourname-ph' => '輸入汝嘅用戶名',
+'createacct-another-username-ph' => '輸入用戶名:',
 'yourpassword' => '密碼:',
 'userlogin-yourpassword' => '密碼',
 'userlogin-yourpassword-ph' => '輸入汝嘅密碼',
@@ -458,12 +462,16 @@ $2',
 'gotaccount' => '已經擁有帳號係無?$1。',
 'gotaccountlink' => '登入',
 'userlogin-resetlink' => '毋記得汝嘅登入信息?',
-'userlogin-resetpassword-link' => '重置爾嘅密碼',
+'userlogin-resetpassword-link' => '添忘訖汝嘅密碼?',
+'userlogin-loggedin' => '汝已作為{{GENDER:$1|$1}}登錄。
+利用以下表單以作為另一賬戶登錄。',
 'createacct-join' => '輸入汝嘅基本資料:',
+'createacct-another-join' => '在下方輸入新帳號个資訊。',
 'createacct-emailrequired' => '電郵地址:',
 'createacct-emailoptional' => '電郵地址(可選)',
 'createacct-email-ph' => '設置電郵地址',
-'createaccountmail' => '使用一隻臨時嘅隨機密碼,並發送其到以下指定嘅電子郵件地址',
+'createacct-another-email-ph' => '輸入電郵地址',
+'createaccountmail' => '使用一隻臨時嘅隨機密碼,並將其發送到指定嘅電子郵件地址',
 'createacct-realname' => '實名(可選)',
 'createaccountreason' => '原因:',
 'createacct-reason' => '原因',
@@ -499,7 +507,7 @@ $2',
 'passwordtooshort' => '汝嘅密碼毋得少過$1隻字符。',
 'password-name-match' => '汝嘅密碼必須撈汝嘅用戶名毋相同。',
 'password-login-forbidden' => '邇隻用戶名稱及密碼嘅使用係分禁止嘅。',
-'mailmypassword' => '用電郵寄新密碼分亻厓',
+'mailmypassword' => '重設密碼',
 'passwordremindertitle' => '{{SITENAME}}嘅新臨時密碼',
 'passwordremindertext' => '有人(可能係汝本人,來自IP地址$1)已請求{{SITENAME}}嘅新密碼 ($4)。
 用戶"$2"嘅一隻新臨時密碼今下已分設定好為"$3"。
@@ -513,27 +521,30 @@ $2',
 'passwordsent' => '用戶“$1”嘅新密碼已經寄到所登記嘅電子郵件地址。
 請在收到後再登入。',
 'blocked-mailpassword' => '汝嘅IP地址處於查封狀態故所毋允許編輯,為矣安全起見,密碼恢復功能已分禁用。',
-'eauthentsent' => '一封確認信已經發送到推薦地址。在發送其它郵件到邇隻賬戶前,汝必須首先按照邇封信肚嘅指導確認邇隻電子郵件信箱真實有效。',
+'eauthentsent' => '一封確認信已經發送到汝設定嘅電郵地址。
+在任何其他郵件發到賬戶之前,汝必須首先照邇封信嘅指示,確認介隻賬戶確實係汝嘅。',
 'throttled-mailpassword' => '密碼提醒已經在最近$1小時內發送。
 為防止濫用,限定在$1小時內僅發送一次密碼提醒。',
 'mailerror' => '發送郵件出差錯:$1',
 'acct_creation_throttle_hit' => '在邇隻wiki上係話訪客利用汝个IP地址在昨天創建矣$1個賬戶,係在邇段時間肚的上限。
 結果利用這個IP地址个訪客在邇段時間中無辦法創建更多个賬戶。',
-'emailauthenticated' => '汝嘅電郵地址已經於$2 $3確認有效。',
-'emailnotauthenticated' => '汝嘅郵箱地址<strong>還無分認証</strong>。以下功能將毋會發送任何郵件。',
+'emailauthenticated' => '汝嘅電郵地址已經於$2 $3確認。',
+'emailnotauthenticated' => '汝个電郵位址還㬟確認。
+將收毋到以下功能相關个電郵。',
 'noemailprefs' => '在嘅嘅偏好設定肚指定一隻電子郵件地址來使用邇隻功能。',
 'emailconfirmlink' => '確認汝嘅郵箱地址',
 'invalidemailaddress' => '郵箱地址格式不正確,請輸入正確个郵箱位址或清空該輸入框。',
+'cannotchangeemail' => '本Wiki毋允許對帳號个電子郵件位址進行變更。',
 'emaildisabled' => '邇隻網站毋可以發送電子郵件。',
 'accountcreated' => '已建立賬戶',
-'accountcreatedtext' => '$1嘅賬戶已經分建立。',
+'accountcreatedtext' => '[[{{ns:User}}:$1|$1]]([[{{ns:User talk}}:$1|討論]])的賬戶已經畀建立。',
 'createaccount-title' => '在{{SITENAME}}肚建立新賬戶',
 'createaccount-text' => '有人在{{SITENAME}}肚利用汝嘅電郵創建矣一隻喊做 "$2" 嘅新賬戶($4),密碼係 "$3" 。汝應該立即登入並更改密碼。
 
 如果該賬戶建立錯誤嘅話,汝可以忽略邇條訊息。',
 'usernamehasherror' => '用戶名毋可以包含Hash字符',
 'login-throttled' => '汝已經嘗試多次登入動作。
-請等再試。',
+請等$1後再試。',
 'login-abort-generic' => '登入錯誤 - 中止',
 'loginlanguagelabel' => '語言:$1',
 'suspicious-userlogout' => '汝登出嘅要求已經分拒絕,因為其可能係由已損壞嘅瀏覽器或者緩存代理傳送。',
@@ -863,7 +874,7 @@ Liá-chhṳ chhà-fûng he yù $1 só fûng ke. Tông-chûng ke ngièn-yîn he '
 'search-section' => '(段落 $1)',
 'search-suggest' => '汝係毋係尋:$1',
 'search-interwiki-caption' => '姊妹計劃',
-'search-interwiki-default' => '$1é \85çµ\90æ\9e\9c:',
+'search-interwiki-default' => 'ä¾\86è\87ª$1å\98\85çµ\90æ\9e\9c:',
 'search-interwiki-more' => '(還較多)',
 'searchrelated' => '相關',
 'searchall' => '全部',
@@ -1367,7 +1378,7 @@ Also see [[Special:WantedCategories|wanted categories]].',
 下背係'''$1'''今下嘅保護級別:",
 'protect-locked-access' => "汝嘅賬戶權限做毋得修改保護級別。
 下背係'''$1'''今下嘅保護級別:",
-'protect-cascadeon' => '下背嘅{{PLURAL:$1|一個|多個}}頁面包含緊本頁面嘅同時,啟動矣連鎖保護,故所本頁面目前也分保護,還吂做得編寫。汝做得設定本頁面嘅保護級別,毋過邇並不會對連鎖保護有所影響。',
+'protect-cascadeon' => '下背嘅$1嘅頁面包含緊本頁面嘅同時,還啟動矣連鎖保護,故所本頁面目前也分保護,還㬟做得編寫。汝做得設定本頁面嘅保護級別,毋過邇影響毋到連鎖保護。',
 'protect-default' => '容許所有用戶',
 'protect-fallback' => 'Sî-yeu "$1" ke hí-khó',
 'protect-level-autoconfirmed' => 'Kim-chṳ́  sîn-ke lâu hàn-mò chu-chhak ke yung-fu',
index 4e70138..f6e1dd2 100644 (file)
@@ -218,9 +218,11 @@ $messages = array(
 'noindex-category' => 'Nā ʻAoʻao i hoʻopapakuhikuhi kikoʻī ʻia',
 
 'about' => 'No ia',
+'article' => 'ʻAoʻao mealoko',
 'newwindow' => '(wehe ʻia i loko o kekahi pukaaniani hou)',
 'cancel' => 'Ho‘ōki',
 'moredotdotdot' => 'Nā mea ʻē aʻe...',
+'morenotlisted' => 'ʻAʻole pau kēia papahelu.',
 'mypage' => 'Ka‘u ‘ao‘ao',
 'mytalk' => 'Ka‘u walaʻau',
 'anontalk' => 'Walaʻau no kēia IP',
@@ -263,6 +265,7 @@ $messages = array(
 'searcharticle' => 'E huli',
 'history' => 'Mōʻaukala ʻaoʻao',
 'history_short' => 'Mōʻaukala',
+'updatedmarker' => 'ua hoʻopuka hou mahope mai koʻu kipa ʻana mai mua',
 'printableversion' => 'Mana paʻi pono',
 'permalink' => 'Loulou paʻa',
 'print' => 'Pa‘i',
@@ -332,6 +335,10 @@ $1',
 
 'badaccess' => 'Hewa ‘aena',
 
+'versionrequired' => 'Noi ʻia ka mana $1 o MekiaWiki',
+'versionrequiredtext' => 'Noi ʻia ka mana $1 o MekiaWiki no ka hoʻohana ʻana o kēia ʻaoʻao.
+ʻIke i ka [[Special:Version|ʻaoʻao mana]].',
+
 'ok' => 'Hiki nō',
 'retrievedfrom' => 'Kiʻi ʻia mai "$1"',
 'youhavenewmessages' => '$1 {{PLURAL:$3|kāu}} ($2).',
@@ -360,6 +367,8 @@ $1',
 'page-rss-feed' => 'Hānaīke RSS o "$1"',
 'page-atom-feed' => 'Hānaīke Atom o "$1"',
 'red-link-title' => '$1 (haku ʻia ʻole)',
+'sort-descending' => 'Wae iho',
+'sort-ascending' => 'Wae piʻi',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-main' => 'ʻAoʻao',
@@ -403,6 +412,7 @@ E ʻoluʻolu, e lono  kēia pilikia i kekahi [[Special:ListUsers/sysop|kahu]], m
 'directorycreateerror' => 'ʻAʻole hiki ke haku ka papakuhi waihona "$1"',
 'filenotfound' => '‘A‘ole hiki ke loa‘a ka waihona "$1".',
 'fileexistserror' => 'ʻAʻole hiki ke kākau i ka waihona "$1": Aia no ia.',
+'cannotdelete-title' => 'Hiki ʻole ke holoi iā "$1"',
 'badtitle' => 'Inoa ʻohe',
 'badtitletext' => 'ʻAʻohe paha, hakahaka paha aiʻole loulou hewa paha ka poʻoinoa ʻaoʻao.
 Loaʻa paha nā hua kikokikona e hiki ʻole ke hana i nā poʻoinoa.',
@@ -484,6 +494,7 @@ Hoʻouna ʻole i kekahi lekauila no kēia mau helena.',
 'createaccount-title' => 'Kāinoa moʻokāki no {{SITENAME}}',
 'loginlanguagelabel' => 'ʻŌlelo: $1',
 'pt-login' => 'ʻEʻe',
+'pt-login-button' => 'ʻEʻe',
 'pt-createaccount' => 'Kāinoa',
 'pt-userlogout' => 'Haʻalele',
 
@@ -508,6 +519,7 @@ Hoʻouna ʻole i kekahi lekauila no kēia mau helena.',
 'changeemail-newemail' => 'Wahinoho lekauila hou:',
 'changeemail-none' => '(ʻaʻohe)',
 'changeemail-password' => 'Kāu ʻōlelo hūnā {{SITENAME}}:',
+'changeemail-submit' => 'Loli i kāu lekauila',
 'changeemail-cancel' => 'Hoʻōki',
 
 # Edit page toolbar
@@ -542,6 +554,7 @@ Hoʻouna ʻole i kekahi lekauila no kēia mau helena.',
 E hoʻopaʻa ʻia ana kāu IP ma ko kēia ʻaoʻao mōʻaukala hoʻololi.',
 'blockedtitle' => 'Ua pale ‘ia ka mea ho‘ohana',
 'blockednoreason' => '‘a‘ohe kumu',
+'loginreqtitle' => 'Noi i ka ʻeʻe ʻana',
 'loginreqlink' => 'ʻeʻe',
 'accmailtitle' => 'Ua ho‘ouna ‘ia ka ‘ōlelo hūnā',
 'newarticle' => '(Hou)',
@@ -556,6 +569,8 @@ Inā he mea ho‘ohana inoa ʻole ʻoe a loaʻa kekahi mau manaʻo nāuʻole, e
 Hiki iā ʻoe ke [[Special:Search/{{PAGENAME}}|huli no kēia inoa ʻaoʻao]] i nā ʻaoʻao ʻē aʻe, <span class="plainlinks">[{{fullurl:SpecialLog|page={{FULLPAGENAMEE}}}} huli i nā moʻolelo pili], a i ʻole [{{fullurl:{{FULLPAGENAME}}|action=edit}} hoʻololi i kēia ʻaoʻao]</span>.',
 'noarticletext-nopermission' => 'ʻAʻohe kikokikona a kēia ʻaoʻao.
 Hiki iā ʻoe ke [[Special:Search/{{PAGENAME}}|huli no kēia inoa ʻaoʻao]] i nā ʻaoʻao ʻē aʻe aiʻole <span class="plainlinks">[{{fullurl:SpecialLog|page={{FULLPAGENAMEE}}}} huli i nā moʻolelo pili]</span>, akā hiki ʻole iā ʻoe ke hoʻololi i kēia ʻaoʻao.',
+'updated' => '(Hoʻopuka hou ʻia)',
+'note' => '<strong>E noka:</strong>',
 'previewnote' => '<strong>ʻO kēia ka nāmua wale nō.</strong>
 ‘A‘ole mālama ‘ia nā ho‘ololi!',
 'continue-editing' => 'Kele i kahi hoʻololi',
@@ -579,6 +594,7 @@ Aia nā loli hanalohi i lalo no ka ʻikena:',
 'template-semiprotected' => '(hapa-ho‘omalu ‘ia)',
 'hiddencategories' => 'ʻO kēia ʻaoʻao he lālā o {{PLURAL:$1|1 mahele hūnā|$1 mau māhele hūnā}}:',
 'edittools' => '<!-- Eia ka ‘ōlelo e hō‘ike ‘ia malalo o nā palapala ho‘ololi ame nā palapala ho‘ohui. -->',
+'nocreate-loggedin' => 'Loaʻa ʻole iā ʻoe nā kūleana no ka haku ʻana o nā ʻaoʻao hou.',
 'permissionserrorstext-withaction' => 'ʻAʻohe āu ʻae no $2, no {{PLURAL:$1|kumu| mau kumu}}:',
 'recreate-moveddeleted-warn' => '<strong>E akahele: Ke haku nei ʻoe i kekahi ʻaoʻao i holoi ʻia.</strong>
 
@@ -586,6 +602,13 @@ Pono ʻoe e noʻonoʻo e pili ana ka pono o ka hoʻomau ʻana o ka hoʻololi ʻa
 Aia ka moʻolelo holoi a hoʻoneʻe no kēia ʻaoʻao ma ʻaneʻi:',
 'moveddeleted-notice' => 'Ua holoi ʻia kēia ʻaoʻao.
 Hoʻolako ʻia ka moʻolelo holoi a hoʻoneʻe no kēia ʻaoʻao i lalo no ke kūmole.',
+'log-fulllog' => 'Nānā i ka moʻolelo piha',
+'postedit-confirmation' => 'Ua mālama ʻia kāu hoʻololi',
+'defaultmessagetext' => 'Kikokikona pūlono pa‘amau',
+
+# Content models
+'content-model-wikitext' => 'kikokikonawiki',
+'content-model-javascript' => 'IawaSikulipa',
 
 # Parser/template warnings
 'post-expand-template-inclusion-warning' => '<strong>E akahele:</strong> Hoʻokela ʻia ka palena nui o ke anakuhi.
@@ -630,7 +653,12 @@ Pahu hōʻailona: <strong>({{int:cur}})</strong> = ka ʻokoʻa me ke kāmua houl
 
 # Revision deletion
 'rev-delundel' => 'hoʻololi ka nānā ʻana',
+'rev-showdeleted' => 'hōʻike',
+'revisiondelete' => 'Holoi/holoi ʻole i nā kāmua',
 'revdelete-show-file-submit' => 'ʻAe',
+'revdelete-hide-text' => 'Kikokikona kāmua',
+'revdelete-hide-image' => 'Hoʻohūnā i nā waihona mealoko',
+'revdelete-hide-comment' => 'Hoʻololi i ka hōʻuluʻulu manaʻo',
 'revdelete-radio-same' => '(mai hoʻololi)',
 'revdelete-radio-set' => 'ʻAe',
 'revdelete-radio-unset' => 'ʻAʻole',
@@ -640,6 +668,7 @@ Pahu hōʻailona: <strong>({{int:cur}})</strong> = ka ʻokoʻa me ke kāmua houl
 'deletedhist' => 'Mōʻaukala holoi',
 'revdelete-otherreason' => 'Nā kumu ʻē aʻe',
 'revdelete-reasonotherlist' => 'Nā kumu ʻē aʻe',
+'revdelete-edit-reasonlist' => 'Hoʻololi i nā kumu holoi',
 'revdelete-offender' => 'Mea kākau kāmua:',
 
 # History merging
@@ -685,12 +714,14 @@ Pahu hōʻailona: <strong>({{int:cur}})</strong> = ka ʻokoʻa me ke kāmua houl
 'search-suggest' => 'ʻO kēia paha kou manaʻo: $1',
 'search-interwiki-caption' => 'Nā pāhana ʻē aʻe',
 'search-interwiki-more' => '(hou aʻe)',
+'search-relatedarticle' => 'Nā Mea ʻālike',
 'searchrelated' => 'na mea ʻālike',
 'searchall' => 'nā mea apau',
 'showingresultsheader' => '{{PLURAL:$5|<strong>$1</strong> hualoaʻa o <strong>$3</strong> mau hualoaʻa|<strong$1-$2</strong> mau hualoaʻa o <strong>$3</strong> mau hualoaʻa}} no <strong>$4</strong>',
 'search-nonefound' => 'ʻAʻohe hualoaʻa no kēia huli.',
 'powersearch-legend' => 'Hulina kūlana kiʻekiʻe',
 'powersearch-ns' => 'Huli i loko o nā wahi inoa:',
+'powersearch-togglelabel' => 'Hōʻoia:',
 'powersearch-toggleall' => 'Nā mea apau',
 'powersearch-togglenone' => 'ʻAʻohe',
 'search-external' => 'Huli kūwaho',
@@ -756,6 +787,14 @@ Pahu hōʻailona: <strong>({{int:cur}})</strong> = ka ʻokoʻa me ke kāmua houl
 'prefs-advancedediting' => 'Koho paʻamau',
 'prefs-editor' => 'Luna Hoʻoponopono:',
 'prefs-preview' => 'Nāmua',
+'prefs-advancedrc' => 'Koho kiʻelē',
+'prefs-advancedrendering' => 'Koho kiʻelē',
+'prefs-advancedsearchoptions' => 'Koho kiʻelē',
+'prefs-advancedwatchlist' => 'Koho kiʻelē',
+'prefs-displayrc' => 'Koho nānā',
+'prefs-displaysearchoptions' => 'Koho nānā',
+'prefs-displaywatchlist' => 'Koho nānā',
+'prefs-diffs' => 'ʻOkoʻa',
 
 # User rights
 'userrights' => 'Ho‘oponopono ‘ana o nā kuleana',
@@ -805,7 +844,11 @@ Pahu hōʻailona: <strong>({{int:cur}})</strong> = ka ʻokoʻa me ke kāmua houl
 'newuserlogpage' => 'Moʻolelo haku mea hoʻohana',
 
 # Associated actions - in the sentence "You do not have permission to X"
+'action-read' => 'heluhelu i kēia ʻaoʻao',
 'action-edit' => 'ka hoʻololi ʻana i kēia ʻaoʻao',
+'action-createpage' => 'haku ʻaoʻao',
+'action-createtalk' => 'haku ʻaoʻao kūkākūkā',
+'action-createaccount' => 'kāinoa i kēia moʻokāki mea hoʻohana',
 
 # Recent changes
 'nchanges' => '$1 {{PLURAL:$1|loli|mau loli}}',
@@ -880,29 +923,56 @@ Pahu hōʻailona: <strong>({{int:cur}})</strong> = ka ʻokoʻa me ke kāmua houl
 'license-header' => 'Laikini',
 
 # Special:ListFiles
+'imgfile' => 'waihona',
+'listfiles' => 'Papahelu waihona',
+'listfiles_thumb' => 'Kiʻiliʻi',
+'listfiles_date' => 'Lā',
 'listfiles_name' => 'Inoa',
+'listfiles_user' => 'Mea hoʻohana',
+'listfiles_size' => 'Nui',
+'listfiles_description' => 'Hōʻike ʻAno',
+'listfiles_count' => 'Mana',
+'listfiles-latestversion' => 'Mana okamanawa',
+'listfiles-latestversion-yes' => 'ʻAe',
+'listfiles-latestversion-no' => 'ʻAʻole',
 
 # File description page
 'file-anchor-link' => 'Waihona',
 'filehist' => 'Mōʻaukala waihona',
 'filehist-help' => 'Kāomi ma ka lā/hola no ka nānā ʻana i ka waihona ma kēlā manawa.',
+'filehist-deleteall' => 'holoi apau',
+'filehist-deleteone' => 'holoi',
 'filehist-revert' => 'hoʻihoʻi',
 'filehist-current' => 'okamanawa',
 'filehist-datetime' => 'Lā/Hola',
 'filehist-thumb' => 'Kiʻiliʻi',
 'filehist-thumbtext' => 'Ke kiʻiliʻi no ka mana ma $1',
+'filehist-nothumb' => 'ʻAʻohe kiʻiliʻi',
 'filehist-user' => 'Mea ho‘ohana',
 'filehist-dimensions' => 'Nā Nui',
 'filehist-filesize' => 'Nui o ka waihona',
 'filehist-comment' => 'Kaumanaʻo',
+'filehist-missing' => 'Nele ka waihona',
 'imagelinks' => 'Nā Hana waihona',
 'linkstoimage' => 'Loulou {{PLURAL:$1|kekahi ‘ao‘ao|kēia mau ‘ao‘ao $1}} i kēia waihona:',
 'nolinkstoimage' => 'ʻAʻohe ʻaoʻao e loulou i kēia waihona.',
 'sharedupload-desc-here' => 'ʻO kēia waihona mai $1 a hiki paha ke hana ʻia mai nā papahana ʻē aʻe.
 Aia i lalo ka hōʻike ʻano [mai ka ʻaoʻao hōʻike ʻano waihona $2].',
+'shared-repo-from' => 'mai $1',
+
+# File reversion
+'filerevert-comment' => 'Kumu:',
 
 # File deletion
+'filedelete' => 'Holoi iā $1',
+'filedelete-legend' => 'Holoi i ka waihona',
 'filedelete-comment' => 'Kumu:',
+'filedelete-submit' => 'Holoi',
+'filedelete-otherreason' => 'Nā kumu ʻē aʻe:',
+'filedelete-reason-otherlist' => 'Nā kumu ʻē aʻe',
+
+# MIME search
+'download' => 'hoʻoili',
 
 # Random page
 'randompage' => 'ʻAtikala Kaulele',
@@ -969,7 +1039,13 @@ Aia i lalo ka hōʻike ʻano [mai ka ʻaoʻao hōʻike ʻano waihona $2].',
 
 # Email user
 'emailuser' => 'E leka uila i kēia mea ho‘ohana',
+'emailusername' => 'Inoa mea hoʻohana:',
+'emailusernamesubmit' => 'Waiho',
+'emailfrom' => 'Mai:',
+'emailto' => 'Iā:',
+'emailsubject' => 'Kumunui:',
 'emailmessage' => 'Pūlono:',
+'emailsend' => 'Hoʻouna',
 
 # Watchlist
 'watchlist' => 'Kaʻu papakiaʻi',
index 7187de3..779f707 100644 (file)
@@ -1116,8 +1116,8 @@ $2
 'userpage-userdoesnotexist' => 'חשבון המשתמש "$1" אינו רשום.
 אנא בדקו אם ברצונכם ליצור/לערוך דף זה.',
 'userpage-userdoesnotexist-view' => 'חשבון המשתמש "$1" אינו רשום.',
-'blocked-notice-logextract' => 'משתמש זה חסום כרגע.
¤×¢×\95×\9cת ×\99×\95×\9e×\9f ×\94×\97ס×\99×\9e×\95ת ×\94×\90×\97ר×\95× ×\94 מוצגת להלן:',
+'blocked-notice-logextract' => '{{GENDER:$1|המשתמש הזה חסום|המשתמשת הזו חסומה}} כרגע.
\94פע×\95×\9c×\94 ×\94×\90×\97ר×\95× ×\94 ×\91×\99×\95×\9e×\9f ×\94×\97ס×\99×\9e×\95ת מוצגת להלן:',
 'clearyourcache' => "'''הערה:''' לאחר השמירה, עליכם לנקות את זיכרון המטמון (cache) של הדפדפן כדי להבחין בשינויים.
 * '''פיירפוקס / ספארי:''' לחצו על Shift בעת לחיצתכם על '''העלה מחדש''' (Reload), או הקישו על ''Ctrl-F5'' או על ''Ctrl-R'' (או על ''<span dir=\"ltr\">⌘-R</span>'' במחשב מק)
 * '''גוגל כרום:''' לחצו על ''Ctrl-Shift-R'' (או על ''<span dir=\"ltr\">⌘-Shift-R</span>'' במק)
@@ -2221,6 +2221,11 @@ $1',
 # List redirects
 'listredirects' => 'רשימת הפניות',
 
+# List duplicated files special page
+'listduplicatedfiles' => 'רשימת קבצים כפולים',
+'listduplicatedfiles-summary' => 'זוהי רשימה של קבצים שהגרסה החדשה ביותר שלהם זהה לגרסה החדשה ביותר של קובץ אחר כלשהו. רק קבצים מקומיים נבדקים לצורך זה.',
+'listduplicatedfiles-entry' => 'לקובץ [[:File:$1|$1]] יש [[$3|{{PLURAL:$2|עותק זהה|$2 עותקים זהים}}]].',
+
 # Unused templates
 'unusedtemplates' => 'תבניות שאינן בשימוש',
 'unusedtemplatestext' => 'דף זה מכיל רשימה של כל הדפים במרחב השם {{ns:template}} שאינם נכללים בדף אחר. אנא זכרו לבדוק את הקישורים האחרים לתבניות לפני שתמחקו אותן.',
@@ -2793,7 +2798,7 @@ $1',
 'sp-contributions-logs' => 'יומנים',
 'sp-contributions-talk' => 'שיחה',
 'sp-contributions-userrights' => 'ניהול הרשאות משתמש',
-'sp-contributions-blocked-notice' => 'משתמש זה חסום כרגע.
+'sp-contributions-blocked-notice' => '{{GENDER:$1|המשתמש הזה חסום|המשתמשת הזו חסומה}} כרגע.
 הפעולה האחרונה ביומן החסימות מוצגת להלן:',
 'sp-contributions-blocked-notice-anon' => 'כתובת IP זו חסומה כרגע.
 הפעולה האחרונה ביומן החסימות מוצגת להלן:',
index 5d61a40..296a0c5 100644 (file)
@@ -18,6 +18,7 @@
  * @author Charu
  * @author Darshan kandolkar
  * @author Dineshjk
+ * @author Goelujjwal
  * @author Hemant wikikosh1
  * @author Htt
  * @author InfinityO O
@@ -738,6 +739,7 @@ $2',
 'createacct-another-realname-tip' => 'असली नाम देना आवश्यक नहीं है।
 यदि आप प्रदान करते हैं तो इसका प्रयोग सदस्य के योगदानों के लिये उनको श्रेय (attribution) देने के लिये किया जायेगा।',
 'pt-login' => 'लॉग इन',
+'pt-login-button' => 'लॉग इन',
 'pt-createaccount' => 'खाता बनाएँ',
 'pt-userlogout' => 'लॉगआउट',
 
index 68f5bd0..93d82c4 100644 (file)
@@ -2087,6 +2087,11 @@ Probabilmente vuoi modificare la descrizione presente nella [$2 pagina di descri
 # List redirects
 'listredirects' => 'Elenco di tutti i redirect',
 
+# List duplicated files special page
+'listduplicatedfiles' => 'Elenco dei file duplicati',
+'listduplicatedfiles-summary' => 'Questo è un elenco di file, dove la versione più recente di un file è un duplicato della versione più recente di un altro file. Sono considerati solo i file locali.',
+'listduplicatedfiles-entry' => '[[:File:$1|$1]] ha [[$3|{{PLURAL:$2|un duplicato|$2 duplicati}}]].',
+
 # Unused templates
 'unusedtemplates' => 'Template non utilizzati',
 'unusedtemplatestext' => 'In questa pagina vengono elencate le pagine del namespace {{ns:template}} che non sono incluse in nessuna pagina. Prima di cancellarli è opportuno verificare che i singoli template non abbiano altri collegamenti entranti.',
index 8ae043d..27cd8ec 100644 (file)
@@ -2257,6 +2257,9 @@ contenttype/subtypeの形式で入力してください (例: <code>image/jpeg</
 # List redirects
 'listredirects' => '転送ページの一覧',
 
+# List duplicated files special page
+'listduplicatedfiles-entry' => '[[:File:$1|$1]] には [[$3|{{PLURAL:$2|$2 件の重複ファイル}}]]があります。',
+
 # Unused templates
 'unusedtemplates' => '使われていないテンプレート',
 'unusedtemplatestext' => 'このページでは{{ns:template}}名前空間にあって他のページに読み込まれていないページを一覧にしています。
index ce4e2bb..1e9dee2 100644 (file)
@@ -1521,7 +1521,7 @@ $1",
 # Groups
 'group' => 'Топ:',
 'group-user' => 'Қатысушылар',
-'group-autoconfirmed' => 'Өзқұпталған қатысушылар',
+'group-autoconfirmed' => 'Өздіктіқұпталған қатысушылар',
 'group-bot' => 'Боттар',
 'group-sysop' => 'Әкімшілер',
 'group-bureaucrat' => 'Бітікшілер',
@@ -1529,14 +1529,14 @@ $1",
 'group-all' => '(барлық)',
 
 'group-user-member' => '{{GENDER:$1|қатысушы}}',
-'group-autoconfirmed-member' => '{{GENDER:$1|өзқұпталған қатысушы}}',
+'group-autoconfirmed-member' => '{{GENDER:$1|өздіктіқұпталған қатысушы}}',
 'group-bot-member' => '{{GENDER:$1|бот}}',
 'group-sysop-member' => '{{GENDER:$1|әкімші}}',
 'group-bureaucrat-member' => '{{GENDER:$1|бітікші}}',
 'group-suppress-member' => '{{GENDER:$1|шеттетуші}}',
 
 'grouppage-user' => '{{ns:project}}:Қатысушылар',
-'grouppage-autoconfirmed' => '{{ns:project}}:Өзқұпталған қатысушылар',
+'grouppage-autoconfirmed' => '{{ns:project}}:Өздіктіқұпталған қатысушылар',
 'grouppage-bot' => '{{ns:project}}:Боттар',
 'grouppage-sysop' => '{{ns:project}}:Әкімшілер',
 'grouppage-bureaucrat' => '{{ns:project}}:Бітікшілер',
@@ -1668,15 +1668,15 @@ $1",
 'recentchanges-summary' => 'Бұл бетте осы уикидегі болған жуықтағы өзгерістер байқалады.',
 'recentchanges-noresult' => 'Бұл талап бойынша көрсетілген уақыттан бері өзгерістер болған жоқ.',
 'recentchanges-feed-description' => 'Бұл арнаменен уикидегі ең соңғы өзгерістер қадағаланады.',
-'recentchanges-label-newpage' => 'Ð\91ұл Ó©Ò£Ð´ÐµÐ¼Ðµ Ð°Ñ\80Ò\9bÑ\8bлÑ\8b Ð¶Ð°Ò£Ð° Ð±ÐµÑ\82 Ð±Ð°Ñ\81Ñ\82алдÑ\8b',
+'recentchanges-label-newpage' => 'Ð\96аңа Ð±ÐµÑ\82Ñ\82еÑ\80',
 'recentchanges-label-minor' => 'Бұл шағын өңдеме',
 'recentchanges-label-bot' => 'Бұл өңдемені бот жасады.',
 'recentchanges-label-unpatrolled' => 'Бұл өңдеме әлі тексеруден өтпеді.',
 'recentchanges-label-plusminus' => 'Байт бойынша беттің өзгеріс мөлшері',
 'recentchanges-legend-heading' => "'''Шартты белгілер:'''",
-'recentchanges-legend-newpage' => '(тағы қараңыз: [[Special:NewPages|жаңа беттер тізімі]])',
+'recentchanges-legend-newpage' => '(қ: [[Special:NewPages|бөлек бетте]])',
 'recentchanges-legend-plusminus' => "(''±123'')",
-'rcnotefrom' => 'Төменде <strong>$2</strong> кезінен бергі (<strong>$2</strong> жеткенше дейін) өзгерістер көрсетіледі.',
+'rcnotefrom' => 'Төменде <strong>$2</strong> кезінен бергі (<strong>$1</strong> өңдемеге дейін) өзгерістер көрсетіледі.',
 'rclistfrom' => '$1 кезінен бергі жаңа өзгерістерді көрсет.',
 'rcshowhideminor' => 'Шағын өңдемелерді $1',
 'rcshowhideminor-show' => 'көрсету',
@@ -3536,7 +3536,7 @@ $5
 'autosumm-blank' => 'Беттің барлық мағлұматын аластады',
 'autosumm-replace' => 'Бетті "$1" дегенмен алмастырды',
 'autoredircomment' => '[[$1]] дегенге айдады',
-'autosumm-new' => 'Жаңа бетте: <<$1>>',
+'autosumm-new' => 'Жаңа бетте: $1',
 
 # Size units
 'size-bytes' => '$1 байт',
index 2dc119b..5311d94 100644 (file)
@@ -811,7 +811,7 @@ $2',
 'gotaccountlink' => '로그인하세요',
 'userlogin-resetlink' => '로그인 정보를 잊으셨나요?',
 'userlogin-resetpassword-link' => '비밀번호를 잊으셨나요?',
-'userlogin-helplink2' => '로그인 도움말',
+'userlogin-helplink2' => '로그인에 대한 도움말',
 'userlogin-loggedin' => '이미 $1로 로그인되어 있습니다. 아래의 양식을 사용하여 다른 계정으로 로그인하세요.',
 'userlogin-createanother' => '다른 계정 만들기',
 'createacct-join' => '아래에 정보를 입력하세요.',
@@ -1467,8 +1467,7 @@ $1",
 'shown-title' => '쪽마다 {{PLURAL:$1|결과}} $1개씩 보기',
 'viewprevnext' => '($1 {{int:pipe-separator}} $2) ($3) 보기',
 'searchmenu-exists' => "'''이 위키에 \"[[:\$1]]\"의 이름을 가진 문서가 있습니다.'''",
-'searchmenu-new' => '<strong>이 위키에 "[[:$1]]" 문서를 만드세요!</strong>
-{{PLURAL:$2|0=|검색으로 찾은 문서들을 참조하세요.}}',
+'searchmenu-new' => '<strong>이 위키에 "[[:$1]]" 문서를 만드세요!</strong> {{PLURAL:$2|0=|검색으로 찾은 문서도 보세요.|찾은 검색 결과도 보세요.}}',
 'searchprofile-articles' => '본문',
 'searchprofile-project' => '도움말 및 프로젝트 문서',
 'searchprofile-images' => '멀티미디어',
index a78ad45..830d666 100644 (file)
@@ -1738,6 +1738,7 @@ Wann Dir de Fichier nach ëmmer eropluede wëllt, da gitt w.e.g. zréck a benotz
 Wann Dir dëse Fichier trotzdeem eropluede wëllt da gitt w.e.g. zréck a luet dëse Fichier ënner engem aneren Numm erop. [[File:$1|thumb|center|$1]]',
 'file-exists-duplicate' => 'Dëse Fichier schéngt een Doublon vun {{PLURAL:$1|dësem Fichier|dëse Fichieren}} ze sinn:',
 'file-deleted-duplicate' => 'En identesche Fichier ([[:$1]]) gouf virdru geläscht. Kuckt w.e.g. an der Lëscht vum Läschen no, ier Dir en nach emol eropluet.',
+'file-deleted-duplicate-notitle' => "En identesche Fichier gouf scho geläscht an den Titel gouf suppriméiert. Dir sollt e froen dee suppriméiert Date vu Fichiere kucken däerf fir d'Situatioun ze klären ier Dir de Fichier nach eng Kéier eroplued.",
 'uploadwarning' => 'Opgepasst',
 'uploadwarning-text' => "Ännert d'Beschreiwung hei ënnedrënner w.e.g. a versicht et nach eng Kéier.",
 'savefile' => 'Fichier späicheren',
@@ -2446,7 +2447,7 @@ Hei sinn déi aktuell Säiteprotektiounsastellunge fir d'Säit '''$1''':",
 Hei sinn déi aktuell Astellungen fir d'Säit '''$1''':",
 'protect-locked-access' => "Dir hutt net déi néideg Rechter fir de Protektiounsniveau vun dëser Säit z'änneren.
 Hei sinn déi aktuell Astellunge fir d'Säit '''$1''':",
-'protect-cascadeon' => "Dës Säit ass elo gespaart well si an déi folgend {{PLURAL:$1|Säit|Säiten}} agebonnen ass déi duerch eng Kaskadespär gespaart {{PLURAL:$1|ass|sinn}}. De Protektiounsniveau ka fir dës Säit geännert ginn, dat huet awer keen Afloss op d'Kaskadespär.",
+'protect-cascadeon' => "Dës Säit ass elo gespaart well si an déi folgend {{PLURAL:$1|Säit|Säiten}} agebonnen ass déi duerch eng Kaskadespär gespaart {{PLURAL:$1|ass|sinn}}. Ännerunge vum Protektiounsniveau fir dës Säit hu keen Afloss op d'Kaskadespär.",
 'protect-default' => 'All Benotzer erlaben',
 'protect-fallback' => 'Nëmme Benotzer mat enger "$1"-Autorisatioun erlaben.',
 'protect-level-autoconfirmed' => 'Nëmmen automatesch ugemellt Benotzer erlaben',
index d13a0f3..f7b2576 100644 (file)
@@ -2218,6 +2218,11 @@ $1',
 # List redirects
 'listredirects' => 'Список на пренасочувања',
 
+# List duplicated files special page
+'listduplicatedfiles' => 'Список на податотеки со дупликати',
+'listduplicatedfiles-summary' => 'Ова е список на податотеки чија најнова верзија е дупликат на најнова верзија на некоја друга податотека. Се земаат предвид само локални податотеки.',
+'listduplicatedfiles-entry' => '[[:File:$1|$1]] има [[$3|{{PLURAL:$2|дупликат|$2 дупликати}}]].',
+
 # Unused templates
 'unusedtemplates' => 'Неискористени шаблони',
 'unusedtemplatestext' => 'Оваа страница ги прикажува сите страници во именскиот простор {{ns:template}} кои не се вклучени во друга страница.
index 2a470b5..52eb21e 100644 (file)
@@ -2261,6 +2261,11 @@ Invoer: inhoudstype/subtype, bijvoorbeeld <code>image/jpeg</code>.',
 # List redirects
 'listredirects' => 'Doorverwijzingenlijst',
 
+# List duplicated files special page
+'listduplicatedfiles' => 'Lijst met bestanden met duplicaten',
+'listduplicatedfiles-summary' => 'Dit is een lijst met bestanden waarvan de laatste versie een duplicaat is van de meest recente versie van een ander bestand. Er wordt alleen gerapporteerd over lokale bestanden.',
+'listduplicatedfiles-entry' => '[[:File:$1|$1]] heeft [[$3|{{PLURAL:$2|één duplicaat|$2 duplicaten}}]].',
+
 # Unused templates
 'unusedtemplates' => 'Ongebruikte sjablonen',
 'unusedtemplatestext' => 'Deze pagina geeft alle pagina\'s weer in de naamruimte {{ns:template}} die op geen enkele pagina gebruikt worden.
index 908eb49..32bfbc2 100644 (file)
@@ -732,6 +732,7 @@ Doblidetz pas de modificar [[Special:Preferences|vòstras preferéncias per {{SI
 'gotaccountlink' => 'Identificatz-vos',
 'userlogin-resetlink' => 'Avètz doblidat vòstres detalhs de connexion ?',
 'userlogin-resetpassword-link' => 'Senhal doblidat ?',
+'userlogin-helplink2' => 'Ajuda a la connexion',
 'userlogin-loggedin' => 'Sètz ja connectat en tant que {{GENDER:$1|$1}}.
 Utilizatz lo formulari çaijós per vos connectar amb un autre utilizaire.',
 'userlogin-createanother' => 'Crear un autre compte',
@@ -850,8 +851,10 @@ Esperatz $1 abans d’ensajar tornarmai.',
 'resetpass-submit-cancel' => 'Anullar',
 'resetpass-wrong-oldpass' => 'Senhal actual o temporari invalid.
 Benlèu ja avètz modificat vòstre senhal o demandat un senhal temporari novèl.',
+'resetpass-recycled' => 'Reïnicializatz vòstre senhal a quicòm mai que l’actual.',
 'resetpass-temp-password' => 'Senhal temporari :',
 'resetpass-abort-generic' => 'La modificacion del senhal es estada anulada per una extension.',
+'resetpass-expired' => 'Vòstre senhal a expirat. Provesissètz-ne un novèl per vos connectar.',
 
 # Special:PasswordReset
 'passwordreset' => 'Remesa a zèro del senhal',
@@ -893,6 +896,8 @@ Senhal temporari: $2',
 'changeemail-password' => 'Vòstre senhal sus {{SITENAME}} :',
 'changeemail-submit' => "Cambiar l'adreça electronica:",
 'changeemail-cancel' => 'Anullar',
+'changeemail-throttled' => 'Avètz fach tròp de temptativas de connexion.
+Esperatz $1 abans d’ensajar tornarmai.',
 
 # Special:ResetTokens
 'resettokens' => 'Reïnicializar los getons',
@@ -1103,6 +1108,7 @@ Existís ja.',
 'editwarning-warning' => "Quitar aquesta pagina vos farà pèrdre totas las modificacions qu'avètz fachas.
 Se sètz connectat, podètz desactivar aqueste avertiment dins la seccion « {{int:prefs-editing}} » de vòstras preferéncias.",
 'editpage-notsupportedcontentformat-title' => 'Format de contengut pas pres en carga',
+'editpage-notsupportedcontentformat-text' => 'Lo format de contengut $1 es pas pres en carga pel modèl de contengut $2 .',
 
 # Content models
 'content-model-wikitext' => 'wikitèxte',
@@ -1135,6 +1141,7 @@ D'unas inclusions seràn pas efectuadas.",
 'undo-success' => "Aquesta modificacion va èsser desfacha. Confirmatz los cambiaments (visibles en bas d'aquesta pagina), puèi salvatz se sètz d’acòrdi. Mercés de motivar l’anullacion dins la bóstia de resumit.",
 'undo-failure' => 'Aquesta modificacion a pas pogut èsser desfacha a causa de conflictes amb de modificacions intermediàrias.',
 'undo-norev' => 'La modificacion a pas pogut èsser desfacha perque siá es inexistenta siá es estada suprimida.',
+'undo-nochange' => 'Sembla que la modificacion es ja estada anullada.',
 'undo-summary' => 'Anullacion de las modificacions $1 de [[Special:Contributions/$2|$2]] ([[User talk:$2|discutir]] | [[Special:Contributions/$2|{{MediaWiki:Contribslink}}]])',
 'undo-summary-username-hidden' => 'Anullar la revision $1 per un utilizaire amagat',
 
@@ -1311,6 +1318,7 @@ Asseguratz-vos qu'aqueste cambiament pòsca conservar la continuitat de l'istori
 'showhideselectedversions' => 'Afichar/amagar las versions seleccionadas',
 'editundo' => 'desfar',
 'diff-empty' => '(Pas cap de diferéncia)',
+'diff-multi-sameuser' => '({{PLURAL:$1|Una revision intermediària pel meteis utilizaire pas afichada|$1 revisions intermediàrias pel meteis utilizaire pas afichadas}})',
 'diff-multi-manyusers' => '({{PLURAL:$1|Una revision intermediària amagada|$1 revisions intermediàrias amagadas}}) per ({{PLURAL:$2|un utilizaire pas afichada|$2 utilizaires pas afichadas}})',
 'difference-missing-revision' => "{{PLURAL:$2|Una revision|$2 revisions}} d'aquesta diferéncia ($1) {{PLURAL:$2|es pas estada trobada|son pas estadas trobadas}}.
 
@@ -2059,6 +2067,9 @@ Una [[Special:WhatLinksHere/$2|lista completa]] es disponibla.',
 # List redirects
 'listredirects' => 'Lista de las redireccions',
 
+# List duplicated files special page
+'listduplicatedfiles' => 'Lista de fichièrs en doble',
+
 # Unused templates
 'unusedtemplates' => 'Modèls inutilizats',
 'unusedtemplatestext' => "Aquesta pagina lista totas las paginas de l’espaci de noms {{ns:template}} que son pas enclusas dins cap d'autra pagina.
@@ -2244,6 +2255,7 @@ Podètz restrénher la vista en seleccionant un tipe de jornal, un nom d’utili
 'allpages-hide-redirects' => 'Amagar las redireccions',
 
 # SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => "Visualizatz una version d'aquesta pagina mesa en escondedor, que pòt èsser datada d’al mai $1.",
 'cachedspecial-refresh-now' => 'Veire lo mai recent.',
 
 # Special:Categories
@@ -2496,6 +2508,7 @@ Consultatz la [[Special:ProtectedPages|lista de las paginas protegidas]] per la
 'prot_1movedto2' => 'a renomenat [[$1]] en [[$2]]',
 'protect-badnamespace-title' => 'Espaci de noms pas protegible',
 'protect-badnamespace-text' => 'Las paginas dins aqueste espaci de noms pòdon pas èsser protegidas.',
+'protect-norestrictiontypes-text' => 'Aquesta pagina pòt pas èsser protegida perque i a pas de tipe de restriccion disponible.',
 'protect-norestrictiontypes-title' => 'Pagina pas protegibla',
 'protect-legend' => 'Confirmar la proteccion',
 'protectcomment' => 'Rason :',
@@ -2507,7 +2520,7 @@ Consultatz la [[Special:ProtectedPages|lista de las paginas protegidas]] per la
 'protect-locked-blocked' => "Podètz pas modificar lo nivèl de proteccion tant que sètz blocat. Vaquí los reglatges actuals de la pagina '''$1''' :",
 'protect-locked-dblock' => "Lo nivèl de proteccion pòt pas èsser modificat perque la banca de donadas es blocada. Vaquí los reglatges actuals de la pagina '''$1''' :",
 'protect-locked-access' => "Avètz pas los dreches necessaris per modificar la proteccion de la pagina. Vaquí los reglatges actuals de la pagina '''$1''' :",
-'protect-cascadeon' => "Aquesta pagina es actualament protegida perque es inclusa dins {{PLURAL:$1|la pagina seguenta|las paginas seguentas}}, {{PLURAL:$1|qu'es estada protegida|que son estadas protegidas}} amb l’opcion « proteccion en cascada » activada. Podètz cambiar lo nivèl de proteccion d'aquesta pagina sens qu'aquò afècte la proteccion en cascada.",
+'protect-cascadeon' => "Aquesta pagina es protegida perque es inclusa dins {{PLURAL:$1|la pagina seguenta qu'es estada protegida|las paginas seguentas que son estadas protegidas}}, amb l’opcion « proteccion en cascada » activada. Podètz cambiar lo nivèl de proteccion d'aquesta pagina sens qu'aquò afècte la proteccion en cascada.",
 'protect-default' => 'Autorizar totes los utilizaires',
 'protect-fallback' => 'Autorizar unicament los utilizaires amb lo drech « $1 »',
 'protect-level-autoconfirmed' => 'Autorizar unicament los utilizaires autoconfirmats',
@@ -2688,6 +2701,7 @@ Donatz çaijós un motiu precís (per exemple en citant las paginas que son esta
 'blockipsuccesssub' => 'Blocatge capitat',
 'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] es esta{{GENDER:||t|(da)}} bloca{{GENDER:||t|(da)}}.<br />
 Podètz consultar la [[Special:BlockList|lista dels comptes e de las adreças IP blocats]].',
+'ipb-blockingself' => 'Sètz a mand de blocar vòstre pròpri compte ! Sètz segur{{GENDER:||a}} que volètz far aquò ?',
 'ipb-edit-dropdown' => 'Modificar los motius de blocatge per defaut',
 'ipb-unblock-addr' => 'Desblocar $1',
 'ipb-unblock' => "Desblocar un compte d'utilizaire o una adreça IP",
@@ -2755,6 +2769,7 @@ Consultatz la [[Special:BlockList|lista dels utilizaires blocats]] per veire los
 'ipb_already_blocked' => '« $1 » ja es blocat',
 'ipb-needreblock' => '$1 ja es blocat. Volètz modificar los paramètres ?',
 'ipb-otherblocks-header' => '{{PLURAL:$1|Autre blocatge|Autres blocatges}}',
+'unblock-hideuser' => 'Podètz pas desblocar aqueste utilizaire, perque son nom d’utilizaire es estat amagat.',
 'ipb_cant_unblock' => 'Error : Lo blocatge d’ID $1 existís pas. Es possible qu’un desblocatge ja siá estat efectuat.',
 'ipb_blocked_as_range' => "Error : L'adreça IP $1 es pas estada blocada dirèctament e doncas pòt pas èsser deblocada. Çaquelà, es estada blocada per la plaja $2 la quala pòt èsser deblocada.",
 'ip_range_invalid' => 'Plaja IP incorrècta.',
@@ -2961,6 +2976,7 @@ Salvatz-lo sus vòstre disc dur puèi importatz-lo aicí.",
 'import-error-invalid' => 'Pagina « $1 » es pas importada perque son nom es pas valid.',
 'import-options-wrong' => '{{PLURAL:$2|Marrida opcion|Marridas opcions}} : <nowiki>$1</nowiki>',
 'import-rootpage-invalid' => 'La pagina raiç provesida es un títol invalid.',
+'import-rootpage-nosubpage' => "L'espaci de noms « $1 » de la pagina raiç autoriza pas las sospaginas.",
 
 # Import log
 'importlogpage' => 'Istoric de las importacions de paginas',
@@ -3092,6 +3108,7 @@ Inscriviscatz '''PAS RES''' dedins !",
 
 # Info page
 'pageinfo-title' => 'Informacions per « $1 »',
+'pageinfo-not-current' => 'O planhèm, impossible de provesir aquesta informacion per las ancianas revisions.',
 'pageinfo-header-basic' => 'Informacions de basa',
 'pageinfo-header-edits' => 'Istoric de las modificacions',
 'pageinfo-header-restrictions' => 'Proteccion de la pagina',
@@ -3151,6 +3168,7 @@ Inscriviscatz '''PAS RES''' dedins !",
 'markedaspatrollederror' => 'Pòt pas èsser marcat coma pas vandalizat',
 'markedaspatrollederrortext' => 'Vos cal seleccionar una version per poder la marcar coma pas vandalizada.',
 'markedaspatrollederror-noautopatrol' => 'Avètz pas lo drech de marcar vòstras pròprias modificacions coma susvelhadas.',
+'markedaspatrollednotify' => 'Aquesta modificacion de $1 es estada marcada coma relegida.',
 'markedaspatrollederrornotify' => 'Fracàs del marcatge coma contrarotlat.',
 
 # Patrol log
@@ -3847,7 +3865,9 @@ Ensajatz la previsualizacion normala.',
 'version-ext-colheader-description' => 'Descripcion',
 'version-ext-colheader-credits' => 'Autors',
 'version-license-title' => 'Licéncia per $1',
+'version-license-not-found' => "Cap d'informacion detalhada de la licéncia es pas estada trobada per aquesta extension.",
 'version-credits-title' => 'Mercejaments per $1',
+'version-credits-not-found' => "Cap d'informacion detalhada dels mercejaments es pas estada trobada per aquesta extension.",
 'version-poweredby-credits' => "Aqueste wiki fonciona gràcias a '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'autres',
 'version-poweredby-translators' => 'traductors de translatewiki.net',
@@ -4036,6 +4056,7 @@ Ensajatz la previsualizacion normala.',
 'api-error-emptypage' => 'Creacion de paginas voidas pas autorizada.',
 'api-error-fetchfileerror' => "Error intèrna : Quicòm s'es mal passat al moment de la recuperacion del fichièr.",
 'api-error-fileexists-forbidden' => 'Un fichièr nomenat "$1" existís ja, e pòt pas èsser espotir.',
+'api-error-fileexists-shared-forbidden' => 'Un fichièr nomenat "$1" existís ja dins lo repertòri dels fichièrs partejats, e pòt pas èsser espotit.',
 'api-error-file-too-large' => "Lo fichièr qu'avètz somés èra tròp grand.",
 'api-error-filename-tooshort' => 'Lo nom del fichièr es tròp cort.',
 'api-error-filetype-banned' => 'Aqueste tipe de fichièr es interdich',
@@ -4051,6 +4072,7 @@ Ensajatz la previsualizacion normala.',
 'api-error-missingresult' => 'Error intèrna : Avèm pas pogut determinar se la còpia aviá capitat.',
 'api-error-mustbeloggedin' => 'Vos cal èsser connectat per telecargar de fichièrs.',
 'api-error-mustbeposted' => 'Error intèrna : aquesta requèsta necessita lo metòde HTTP POST.',
+'api-error-noimageinfo' => "Lo mandadís a capitat, mas lo servidor a pas donat cap d'informacions sul fichièr.",
 'api-error-nomodule' => 'Error intèrna : cap de modul de versament pas definit.',
 'api-error-ok-but-empty' => 'Error intèrna : Lo servidor a pas respondut.',
 'api-error-overwrite' => 'Espotir un fichièr existent es pas autorizat.',
index fe785d8..5d2bb7c 100644 (file)
@@ -244,8 +244,8 @@ $messages = array(
 'friday' => 'майрæмбон',
 'saturday' => 'сабат',
 'sun' => 'Хцб',
-'mon' => 'Ð\9aÑ\80с',
-'tue' => 'Дцг',
+'mon' => 'Ð\9aÑ\8aс',
+'tue' => 'Дц',
 'wed' => 'Æрт',
 'thu' => 'Цпр',
 'fri' => 'Мрб',
@@ -1182,7 +1182,7 @@ ASCII нысæнттæм чи нæ хауы, уыдон ивыны бынаты
 'recentchanges-feed-description' => 'Хъус дарын викийы фæстаг ивдтытæм ацы лæсæны уылты.',
 'recentchanges-label-newpage' => 'Ацы ивд нæуæг фарс бакодта',
 'recentchanges-label-minor' => 'Ай у чысыл ивд',
-'recentchanges-label-bot' => 'Ацы ивд бот сарызта',
+'recentchanges-label-bot' => 'Ацы ивд бот сарæзта',
 'recentchanges-label-unpatrolled' => 'Ацы ивд нырмæ нæу фидар гонд',
 'rcnotefrom' => "Бындæр сты æвдыст ивдтытæ '''$2'''-æй ('''{{grammar:genitive|$1}}''' йонг).",
 'rclistfrom' => 'Равдисын ивдтытæ амæй фæстæ: $1',
@@ -1760,6 +1760,7 @@ $3',
 
 # Special:SpecialPages
 'specialpages' => 'Сæрмагонд фæрстæ',
+'specialpages-note-top' => 'Легендæ',
 
 # External image whitelist
 'external_image_whitelist' => ' #Ныууадз ацы рæнхъ куыд у афтæ<pre>
index c9fcb7b..60f249d 100644 (file)
@@ -43,6 +43,7 @@
  * @author Odie2
  * @author Olgak85
  * @author Peter Bowman
+ * @author Pio387
  * @author Przemub
  * @author Reedy
  * @author Remedios44
@@ -1899,7 +1900,7 @@ Sprawdź historię usunięć tamtego pliku zanim prześlesz go ponownie.',
 'uploaddisabledtext' => 'Możliwość przesyłania plików została wyłączona.',
 'php-uploaddisabledtext' => 'Przesyłanie plików PHP zostało zablokowane. Sprawdź ustawienie „file_uploads”.',
 'uploadscripted' => 'Plik zawiera kod HTML lub skrypt, który może zostać błędnie zinterpretowany przez przeglądarkę internetową.',
-'uploadscriptednamespace' => "Ten plik SVG zawiera niepoprawną nazwę '$1'",
+'uploadscriptednamespace' => "Ten plik SVG zawiera niedozwoloną przestrzeń nazw '$1'",
 'uploadinvalidxml' => 'Nie udało się przeanalizować XML w załadowanym pliku.',
 'uploadvirus' => 'W pliku jest wirus! Szczegóły: $1',
 'uploadjava' => 'Ten plik zawiera deklarację klasy Java skompresowaną ZIP.
@@ -2736,7 +2737,7 @@ Poniżej znajduje się ostatni wpis w rejestrze blokowania.',
 'sp-contributions-search' => 'Szukaj wkładu',
 'sp-contributions-username' => 'Adres IP lub nazwa użytkownika',
 'sp-contributions-toponly' => 'Pokaż wyłącznie ostatnie wersje',
-'sp-contributions-newonly' => 'Pokazuj wyłącznie stworzenia stron',
+'sp-contributions-newonly' => 'Pokazuj tylko edycje tworzące nową stronę',
 'sp-contributions-submit' => 'Szukaj',
 
 # What links here
@@ -2820,7 +2821,7 @@ Przejdź do [[Special:BlockList|listy blokad]], by przejrzeć blokady.',
 'blocklist-timestamp' => 'Sygnatura czasowa',
 'blocklist-target' => 'Cel',
 'blocklist-expiry' => 'Upływa',
-'blocklist-by' => 'Zarządzanie blokowaniem',
+'blocklist-by' => 'Administrator blokujący',
 'blocklist-params' => 'Parametry blokad',
 'blocklist-reason' => 'Powód',
 'ipblocklist-submit' => 'Szukaj',
index 0faaf71..39fd18b 100644 (file)
@@ -583,6 +583,7 @@ $1',
 'userlogin-helplink2' => 'په ننوتلو کې مرسته',
 'userlogin-createanother' => 'بل گڼون جوړول',
 'createacct-join' => 'خپل مالومات مو لاندې ورکړئ.',
+'createacct-another-join' => 'د نوي گڼون مالومات مو لاندې ورکړئ.',
 'createacct-emailrequired' => 'برېښليک پته',
 'createacct-emailoptional' => 'برېښليک پته (اختياري)',
 'createacct-email-ph' => 'برېښليک پته مو وټاپۍ',
index 0805e94..262b1ec 100644 (file)
@@ -768,6 +768,7 @@ Não se esqueça de personalizar as suas [[Special:Preferences|preferências]].'
 'gotaccountlink' => 'Autentique-se',
 'userlogin-resetlink' => 'Esqueceu-se do seu nome de utilizador ou da palavra-chave?',
 'userlogin-resetpassword-link' => 'Esqueceu a sua palavra-chave?',
+'userlogin-helplink2' => 'Ajuda na autenticação',
 'userlogin-loggedin' => 'Já está {{GENDER:$1|autenticado|autenticada|autenticado}} com o nome $1.
 Use o formulário abaixo para iniciar uma sessão com outro nome.',
 'userlogin-createanother' => 'Criar outra conta',
@@ -898,6 +899,9 @@ Para completar a autenticação, tem de definir uma palavra-chave nova aqui:',
 'resetpass-abort-generic' => 'A alteração da palavra-chave foi cancelada por uma extensão.',
 'resetpass-expired' => 'A sua palavra-chave expirou. Para autenticar-se, defina uma nova.',
 'resetpass-expired-soft' => 'A sua palavra-chave expirou e tem de ser redefinida. Escolha uma nova agora ou clique "{{int:resetpass-submit-cancel}}" para redefini-la mais tarde.',
+'resetpass-validity-soft' => 'Sua palavra-chave não é válida: $1
+
+Por favor, escolha uma nova palavra-chave agora, ou clique em "{{int:resetpass-submit-cancel}}" para redefini-la mais tarde.',
 
 # Special:PasswordReset
 'passwordreset' => 'Redefinir palavra-chave',
@@ -1298,6 +1302,7 @@ Pode ver a diferença entre revisões; encontrará detalhes no [{{fullurl:{{#Spe
 'logdelete-selected' => "'''{{PLURAL:$1|Evento do registo selecionado|Eventos do registo selecionados}}:'''",
 'revdelete-text-text' => 'Revisões eliminadas ainda aparecerão no histórico da página, mas parte do seu conteúdo estará inacessível para o público.',
 'revdelete-text-file' => 'Versões eliminadas do ficheiro ainda aparecerão no histórico da página, mas parte do seu conteúdo estará inacessível para o público.',
+'logdelete-text' => 'Os eventos eliminados ainda aparecerão no histórico da página, mas pare de seu conteúdo será inacessível ao público.',
 'revdelete-text-others' => 'Outros administradores em {{SITENAME}} podem aceder ao conteúdo oculto e torná-lo visível novamente através desta mesma interface, a menos que sejam definidas restrições adicionais.',
 'revdelete-confirm' => 'Por favor confirme que pretende executar esta operação, que compreende as suas consequências e que o faz em concordância com as [[{{MediaWiki:Policy-url}}|políticas e recomendações]].',
 'revdelete-suppress-text' => "A supressão '''só''' deverá ser usada nos seguintes casos:
@@ -2173,6 +2178,11 @@ Talvez queira editar a descrição na [$2 página original de descrição do fic
 # List redirects
 'listredirects' => 'Lista de redirecionamentos',
 
+# List duplicated files special page
+'listduplicatedfiles' => 'Lista de ficheiros com duplicatas',
+'listduplicatedfiles-summary' => 'Esta é uma lista de ficheiros cuja suas versões mais recentes são duplicatas da versão mais recente de outros ficheiros. Somente os ficheiros locais são considerados.',
+'listduplicatedfiles-entry' => '[[:File:$1|$1]] possui [[$3|{{PLURAL:$2|uma duplicata|$2 duplicatas}}]].',
+
 # Unused templates
 'unusedtemplates' => 'Predefinições não utilizadas',
 'unusedtemplatestext' => 'Esta página lista todas as páginas no espaço nominal {{ns:template}} que não são incluídas em nenhuma outra página. Lembre-se de verificar a existência de outros links para as predefinições, antes de eliminá-las.',
@@ -2287,7 +2297,7 @@ Agora redirecciona para [[$2]].',
 'deadendpagestext' => 'As seguintes páginas não contêm links para outras páginas na {{SITENAME}}.',
 'protectedpages' => 'Páginas protegidas',
 'protectedpages-indef' => 'Apenas proteções indefinidas',
-'protectedpages-summary' => 'Esta página lista as páginas protegidas. Para ver os títulos protegidos, cuja criação está impossibilitada, consulte [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].',
+'protectedpages-summary' => 'Esta página lista páginas existentes que estão protegidas. Para ver os títulos cuja criação está impossibilitada, consulte [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].',
 'protectedpages-cascade' => 'Apenas proteções em cascata',
 'protectedpages-noredirect' => 'Esconder redirecionamentos',
 'protectedpagesempty' => 'Neste momento, nenhuma das páginas está protegida com estes parâmetros.',
@@ -2300,7 +2310,7 @@ Agora redirecciona para [[$2]].',
 'protectedpages-unknown-timestamp' => 'Desconhecido',
 'protectedpages-unknown-performer' => 'Utilizador desconhecido',
 'protectedtitles' => 'Títulos protegidos',
-'protectedtitles-summary' => 'Esta página lista os títulos protegidos, cuja criação está impossibilitada. Para ver as páginas protegidas consulte [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].',
+'protectedtitles-summary' => 'Esta página lista títulos cuja criação está impossibilitada. Para ver uma lista de páginas protegidas, consulte [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].',
 'protectedtitlesempty' => 'Neste momento, nenhum dos títulos está protegido com estes parâmetros.',
 'listusers' => 'Utilizadores',
 'listusers-editsonly' => 'Mostrar apenas utilizadores com edições',
@@ -2629,8 +2639,8 @@ Esta é a configuração presente para a página '''$1''':",
 Esta é a configuração atual para a página '''$1''':",
 'protect-locked-access' => "A sua conta não tem permissões para alterar os níveis de proteção de uma página.
 Esta é a configuração atual da página '''$1''':",
-'protect-cascadeon' => 'Esta página está protegida porque se encontra incluída {{PLURAL:$1|na página listada a seguir, protegida|nas páginas listadas a seguir, protegidas}} com proteção em cascata.
-Pode alterar o nível de proteção desta página, mas isso não afetará a proteção em cascata.',
+'protect-cascadeon' => 'Esta página está atualmente protegida porque está incluída {{PLURAL:$1|na página listada a seguir, a qual|nas páginas listadas a seguir, as quais}} têm a proteção em cascata ativada.
+Alterações feitas ao nível de proteção desta página não afetarão a proteção em cascata.',
 'protect-default' => 'Permitir todos os utilizadores',
 'protect-fallback' => 'Permitir apenas utilizadores com o privilégio de "$1"',
 'protect-level-autoconfirmed' => 'Permitir apenas utilizadores auto-confirmados',
index c5b76f9..f31d608 100644 (file)
@@ -2749,7 +2749,7 @@ $1',
 'sp-contributions-blocked-notice-anon' => 'Este endereço IP encontra-se bloqueado.
 Segue, para referência, a entrada mais recente no registro de bloqueios:',
 'sp-contributions-search' => 'Navegar pelas contribuições',
-'sp-contributions-suppresslog' => 'Contribuições de usuário eliminadas',
+'sp-contributions-suppresslog' => 'Contribuições de usuário suprimidas',
 'sp-contributions-username' => 'Endereço de IP ou usuário:',
 'sp-contributions-toponly' => 'Mostrar somente as edições que sejam a última alteração',
 'sp-contributions-newonly' => 'Mostre somente as edições que criaram uma nova página.',
index 83383c1..ee4b790 100644 (file)
@@ -4895,6 +4895,14 @@ See also:
 # List redirects
 'listredirects' => '{{doc-special|ListRedirects}}',
 
+# List duplicated files special page
+'listduplicatedfiles' => '{{doc-special|ListDuplicatedFiles}}',
+'listduplicatedfiles-summary' => 'Summary at top of Special:ListDuplicatedFiles',
+'listduplicatedfiles-entry' => 'A list item on [[Special:ListDuplicatedFiles]]. Parameters:
+* $1 - the file name (no namespace prefix)
+* $2 - the number of duplicates this file has
+* $3 - the name of the duplicate search page (aka "Special:FileDuplicateSearch/Foo.png" or "Spécial:Recherche_fichier_en_double/Firefox.png")',
+
 # Unused templates
 'unusedtemplates' => '{{doc-special|UnusedTemplates}}',
 'unusedtemplatestext' => 'Shown on top of [[Special:Unusedtemplates]]',
index be9829f..0c971d8 100644 (file)
@@ -2281,6 +2281,11 @@ $1',
 # List redirects
 'listredirects' => 'Список перенаправлений',
 
+# List duplicated files special page
+'listduplicatedfiles' => 'Список файлов с дубликатами',
+'listduplicatedfiles-summary' => 'Это список файлов, где самая последняя версия файла считается дубликатом последней версии некоторых других файлов. Учитываются только локальные файлы.',
+'listduplicatedfiles-entry' => 'У файла [[:File:$1|$1]] — [[$3|{{PLURAL:$2|один дубликат|$2 дубликатов|$2 дубликата}}]].',
+
 # Unused templates
 'unusedtemplates' => 'Неиспользуемые шаблоны',
 'unusedtemplatestext' => 'Здесь перечислены все страницы пространства имён «{{ns:template}}», не включённые ни в какие другие страницы.
@@ -2685,7 +2690,7 @@ $UNWATCHURL
 'delete-warning-toobig' => 'У этой страницы очень длинная история изменений, более $1 {{PLURAL:$1|версии|версий}}.
 Её удаление может привести к нарушению нормальной работы базы данных сайта «{{SITENAME}}»;
 действуйте с осторожностью.',
-'deleting-backlinks-warning' => "'''Предупреждение.''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Другие страницы]] ссылаются на страницу, которую вы собираетесь удалить или содержат её.",
+'deleting-backlinks-warning' => "'''Предупреждение.''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Другие страницы]] ссылаются на страницу, которую вы собираетесь удалить, или содержат её.",
 
 # Rollback
 'rollback' => 'Откатить изменения',
index c3a438c..020c31a 100644 (file)
@@ -381,9 +381,18 @@ $messages = array(
 'oct' => 'ओक्टो.',
 'nov' => 'नवे.',
 'dec' => 'डिस.',
+'january-date' => 'जनवरी $1',
 'february-date' => 'फरवरी $1',
+'march-date' => 'मार्च $1',
+'april-date' => 'अप्रैल $1',
+'may-date' => 'मई $1',
+'june-date' => 'जुन $1',
 'july-date' => 'जूलाई $1',
+'august-date' => 'अगस्त $1',
+'september-date' => 'March $1',
 'october-date' => 'अक्तूबर $1',
+'november-date' => 'नवम्बर $1',
+'december-date' => 'दिसम्बर $1',
 
 # Categories related messages
 'pagecategories' => '{{PLURAL:$1|वर्गः|वर्गाः}}',
@@ -396,52 +405,52 @@ $messages = array(
 'category-subcat-count' => '$2 इत्येषु {{PLURAL:$2|वर्गेऽस्मिन् अधो लिखिताः उपवर्गाः विद्यन्ते |वर्गेऽस्मिन् {{PLURAL:$1|अधो लिखितः उपवर्गः अस्ति|अधो लिखिताः $1 उपवर्गाः सन्ति}}}}',
 'category-subcat-count-limited' => 'अस्मिन् वर्गे {{PLURAL:$1|अधो लिखितः $1 वर्गः अस्ति|अधो लिखिताः $1 वर्गाः सन्ति}}',
 'category-article-count' => '$2 इत्येषु {{PLURAL:$2|वर्गेऽस्मिन् अधो लिखितानि पृष्ठानि विद्यन्ते |वर्गेऽस्मिन् {{PLURAL:$1|अधो लिखितं पृष्ठम् अस्ति|अधो लिखितानि $1 पृष्ठानि सन्ति}}}}',
-'category-article-count-limited' => 'अधोलिखितं {{PLURAL:$1|पृष्ठम् अस्मिन् श्रेण्याम् अस्ति|$1 पृष्ठाणि अस्मिन् श्रेण्यां सन्ति}}।',
-'category-file-count' => '{{PLURAL:$2|अस्मिन् वर्गे केवलम् इदं पृष्ठं विद्यते ।|अस्मिन् वर्गे  {{PLURAL:$1|अधोलिखितं पृष्ठमस्ति|$1 अधोलिखितानि पृष्ठानि सन्ति}}, सर्वाणि पृष्ठानि $2 ।}}',
-'category-file-count-limited' => 'एतस्यां श्रेण्यां {{PLURAL:$1|संचिका|$1 संचिकाः}} अधस्तात् सूचिता{{PLURAL:$1||ः}} -
-The following {{PLURAL:$1|file is|$1 files are}} in the current category.',
-'listingcontinuesabbrev' => 'आगामि.',
-'index-category' => 'सूचकांकितानि पृष्ठानि',
-'noindex-category' => 'नावलितानि पृष्ठानि',
-'broken-file-category' => 'भग्नसम्बन्धैः युक्तानि पृष्ठाणि',
-
-'about' => 'विषये:',
+'category-article-count-limited' => 'निम्नोल्लिखित{{PLURAL:$1|पृष्ठं|$1 पृष्ठानि}} वर्गेऽस्मिन् {{PLURAL:$1|अस्ति|$1 सन्ति}}',
+'category-file-count' => '$2 इत्येषु {{PLURAL:$2|वर्गेऽस्मिन् अधो उल्लिखिताः सञ्चिकाः विद्यन्ते |वर्गेऽस्मिन् {{PLURAL:$1|अधो उल्लिखिता सञ्चिका अस्ति|अधो उल्लिखिताः $1 सञ्चिकाः सन्ति}}}}',
+'category-file-count-limited' => 'निम्नोल्लिखित{{PLURAL:$1|सञ्चिका|$1 सञ्चिकाः}} वर्गेऽस्मिन् {{PLURAL:$1|अस्ति|$1 सन्ति}}',
+'listingcontinuesabbrev' => 'अनुवर्तते',
+'index-category' => 'अनुक्रमणिकापृष्ठानि',
+'noindex-category' => 'नानुक्रमणिकपृष्ठानि',
+'broken-file-category' => 'अविद्यानानां सञ्चिकानाम् आवलिः',
+
+'about' => 'विषये',
 'article' => 'लेखः',
 'newwindow' => '(इदं नवीने गवाक्षे उद्घाट्यते)',
 'cancel' => 'निरस्यताम्',
 'moredotdotdot' => 'अपि च...',
-'mypage' => 'मम पृष्ठम्',
+'morenotlisted' => 'एषाऽऽवलिः अपूर्णा अस्ति ।',
+'mypage' => 'पृष्ठम्',
 'mytalk' => 'सम्भाषणम्',
-'anontalk' => 'à¤\85सà¥\8dय à¤\86à¤\87.पà¥\80. à¤¸à¤\82à¤\95à¥\87तसà¥\8dय कृते सम्भाषणम्',
-'navigation' => 'सà¤\9eà¥\8dà¤\9aरणमà¥\8d',
+'anontalk' => 'à¤\85सà¥\8dय à¤\85नà¥\8dतरà¥\8dà¤\9cालसà¤\82विदà¤\83 (I P address) कृते सम्भाषणम्',
+'navigation' => 'सà¤\9eà¥\8dà¤\9aरणà¤\82',
 'and' => '&#32;तथा च',
 
 # Cologne Blue skin
 'qbfind' => 'अन्विष्यताम्',
-'qbbrowse' => 'बà¥\8dराà¤\89सà¥\8d à¤\87तà¥\8dयà¥\87ततà¥\8d à¤\95रà¥\8bतà¥\81।',
+'qbbrowse' => 'à¤\85नà¥\8dविषà¥\8dयतामà¥\8d',
 'qbedit' => 'सम्पाद्यताम्',
 'qbpageoptions' => 'इदं पृष्ठम्',
 'qbmyoptions' => 'मम पृष्ठानि',
 'faq' => 'सामान्यजिज्ञासाः (FAQ)',
-'faqpage' => 'Project:बहà¥\81धा à¤ªà¥\83à¤\9bà¥\8dयमानाà¤\83 à¤ªà¥\8dरशà¥\8dनाà¤\83',
+'faqpage' => 'Project:सामानà¥\8dयà¤\9cिà¤\9cà¥\8dà¤\9eासाà¤\83(FAQ)',
 
 # Vector skin
 'vector-action-addsection' => 'विषयः योज्यताम्',
 'vector-action-delete' => 'अपाक्रियताम्',
-'vector-action-move' => 'à¤\9aाल्यताम्',
+'vector-action-move' => 'शà¥\80रà¥\8dषà¤\95à¤\82 à¤ªà¤°à¤¿à¤µà¤°à¥\8dत्यताम्',
 'vector-action-protect' => 'संरक्ष्यताम्',
-'vector-action-undelete' => 'à¤\85पाà¤\95रणसà¥\8dय à¤¨à¤¿à¤°à¤¸à¤¨à¤®à¥\8d',
-'vector-action-unprotect' => 'सà¥\81रà¤\95à¥\8dषितà¥\80à¤\95रणसà¥\8dय à¤¨à¤¿à¤°à¤¸à¤¨à¤®à¥\8d',
+'vector-action-undelete' => 'नापाà¤\95à¥\83तà¤\82',
+'vector-action-unprotect' => 'सà¤\82रà¤\95à¥\8dषणà¤\82 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतयतà¥\81',
 'vector-view-create' => 'सृज्यताम्',
 'vector-view-edit' => 'सम्पाद्यताम्',
-'vector-view-history' => 'à¤\87तिहासà¤\83 à¤¦à¤°à¥\8dश्यताम्',
+'vector-view-history' => 'à¤\87तिहासà¤\83 à¤¦à¥\83श्यताम्',
 'vector-view-view' => 'पठ्यताम्',
 'vector-view-viewsource' => 'स्रोतः दृश्यताम्',
 'actions' => 'क्रियाः',
-'namespaces' => 'नामाकाशः',
-'variants' => 'पाठभेदः',
+'namespaces' => 'नामाà¤\95ाशाà¤\83',
+'variants' => 'पाठभà¥\87दाà¤\83',
 
-'navigation-heading' => 'मारà¥\8dà¤\97णसà¥\82à¤\9aिः',
+'navigation-heading' => 'सà¤\9eà¥\8dà¤\9aरणावलिः',
 'errorpagetitle' => 'दोषः',
 'returnto' => '$1 प्रति निवर्त्यताम् ।',
 'tagline' => '{{SITENAME}} तः',
@@ -452,7 +461,7 @@ The following {{PLURAL:$1|file is|$1 files are}} in the current category.',
 'searcharticle' => 'गम्यताम्',
 'history' => 'पृष्ठस्य इतिहासः',
 'history_short' => 'इतिहासः',
-'updatedmarker' => 'मम à¤ªà¥\8cरà¥\8dविà¤\95-à¤\86à¤\97मन-पशà¥\8dà¤\9aातà¥\8d à¤ªà¤°à¤¿à¤µà¤°à¥\8dतितानि',
+'updatedmarker' => 'पà¥\82रà¥\8dवपà¥\8dरवà¥\87शाननà¥\8dतरसà¥\8dय à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनानि',
 'printableversion' => 'मुद्रणयोग्यं संस्करणम्',
 'permalink' => 'स्थायिपरिसन्धिः',
 'print' => 'मुद्र्यताम्',
@@ -463,18 +472,19 @@ The following {{PLURAL:$1|file is|$1 files are}} in the current category.',
 'create-this-page' => 'इदं पृष्ठं सृज्यताम्',
 'delete' => 'अपाक्रियताम्',
 'deletethispage' => 'इदं पृष्ठम् अपाक्रियताम्',
-'undelete_short' => '{{PLURAL:$1|एकं सम्पादनं|$1 सम्पादनानि}} अनपाकरोतु',
-'viewdeleted_short' => 'दर्श्यताम् {{PLURAL:$1|एको विलुप्तं सम्पादनम्|$1 विलुप्तानि सम्पादनानि}}',
+'undeletethispage' => 'इदं पृष्ठं न अपाक्रियताम्',
+'undelete_short' => '{{PLURAL:$1|एकं सम्पादनं|$1 सम्पादनानि}} न अपाकरोतु',
+'viewdeleted_short' => '{{PLURAL:$1|एकम् अपाकृतं सम्पादनम्  |$1 अपाकृतानि सम्पादनानि}} दृश्यताम्',
 'protect' => 'संरक्ष्यताम्',
 'protect_change' => 'परिवर्त्यताम्',
 'protectthispage' => 'इदं पृष्ठं संरक्ष्यताम्',
 'unprotect' => 'संरक्षणं परिवर्तयतु',
-'unprotectthispage' => 'à¤\85सà¥\8dय à¤ªà¥\81à¤\9fस्य सुरक्षां परिवर्तयतु ।',
+'unprotectthispage' => 'à¤\85सà¥\8dय à¤ªà¥\83षà¥\8dठस्य सुरक्षां परिवर्तयतु ।',
 'newpage' => 'नवीनपृष्ठम्',
 'talkpage' => 'अस्य पृष्ठस्य विषये चर्चा क्रियताम्',
 'talkpagelinktext' => 'सम्भाषणम्',
 'specialpage' => 'विशेषपृष्ठम्',
-'personaltools' => 'वà¥\88यà¤\95à¥\8dतिà¤\95साधनानि',
+'personaltools' => 'वà¥\88यà¤\95à¥\8dतिà¤\95à¥\8bपà¤\95रणानि',
 'postcomment' => 'नवीनः विभागः',
 'articlepage' => 'लेखः दृश्यताम्',
 'talk' => 'सम्भाषणम्',
@@ -485,30 +495,29 @@ The following {{PLURAL:$1|file is|$1 files are}} in the current category.',
 'imagepage' => 'सञ्चिकापृष्ठं दृश्यताम्',
 'mediawikipage' => 'सन्देशपृष्ठं दृश्यताम्।',
 'templatepage' => 'फलकपृष्ठं दृश्यताम्',
-'viewhelppage' => 'सहायपृष्ठं दृश्यताम्',
+'viewhelppage' => 'साहायà¥\8dयपृष्ठं दृश्यताम्',
 'categorypage' => 'वर्गाणां पृष्ठं दृश्यताम्',
 'viewtalkpage' => 'चर्चा दृश्यताम्',
 'otherlanguages' => 'अन्यासु भाषासु',
 'redirectedfrom' => '($1 इत्यस्मात् पुनर्निर्दिष्टम्)',
-'redirectpagesub' => 'à¤\85नà¥\81पà¥\8dरà¥\87षण-पà¥\83षà¥\8dठम्',
+'redirectpagesub' => 'पà¥\83षà¥\8dठमà¥\8d à¤\85नà¥\81पà¥\8dरà¥\87षà¥\8dयताम्',
 'lastmodifiedat' => '$1 (तमे) दिनाङ्के अन्तिमसम्पादनं $2 समये अभवत्',
 'viewcount' => 'एतत्पृष्ठं {{PLURAL:$1|एक वारं|$1 वारं}} दृष्टम् अस्ति',
 'protectedpage' => 'संरक्षितपृष्ठम्',
 'jumpto' => 'अत्र गम्यताम् :',
 'jumptonavigation' => 'सञ्चरणं',
 'jumptosearch' => 'अन्वेषणम्',
-'view-pool-error' => 'भोः, अधुना वितारकः अतिभाराक्रान्तः ।
-बहवः योजकाः एतत् पृष्ठं द्रष्टुं प्रयतमानाः सन्ति ।
-कृपया, कञ्चित्कालं प्रतीक्षतां करोतु । 
-$1',
-'pool-timeout' => 'कालावधिः समाप्ता, यन्त्रणस्यार्थे प्रतीक्षते',
-'pool-queuefull' => 'कुण्डपंक्तिः (पूल् क्यू इत्येषा) पूर्णा अस्ति।',
-'pool-errorunknown' => 'अज्ञाता त्रुटिः',
+'view-pool-error' => 'क्षम्यताम् ! सद्यः वितरकस्य (server) उपरि बहु कार्यभारः अस्ति । 
+बहवः जनाः एतत् पृष्ठं पश्यन्तः सन्ति । 
+एतत् पृष्ठं पुनर्द्रष्टुं पतिक्षा क्रियताम् । $1',
+'pool-timeout' => 'संरक्षणार्थं कालावधिः समाप्ता',
+'pool-queuefull' => 'Pool इति पङ्कतिः पूर्णा अस्ति ।',
+'pool-errorunknown' => 'अज्ञातदोषः',
 
 # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage).
 'aboutsite' => '{{SITENAME}} विषयकं',
 'aboutpage' => 'Project:विषयकम्',
-'copyright' => 'à¤\85सà¥\8dय à¤\98à¤\9fà¤\95ानि $1 à¤\87तà¥\8dयसà¥\8dयानà¥\8dतरà¥\8dà¤\97तानि à¤\89पलबà¥\8dधानि।',
+'copyright' => 'भिनà¥\8dनà¥\8bलà¥\8dलà¤\96à¤\83 à¤¨ à¤­à¤µà¤¤à¤¿ à¤¤à¤¾à¤µà¤¤à¥\8d $1 à¤\85तà¥\8dर à¤\89लà¥\8dलà¥\87à¤\96à¥\8b à¤­à¤µà¤¤à¤¿ ।',
 'copyrightpage' => '{{ns:project}}:प्रतिकृत्यधिकारः',
 'currentevents' => 'वर्तमानवार्ताः',
 'currentevents-url' => 'Project:वर्तमानवार्ताः',
@@ -523,23 +532,22 @@ $1',
 'privacy' => 'गोपनीयतानीतिः',
 'privacypage' => 'Project:गोपनीयतानीतिः',
 
-'badaccess' => 'à¤\85नà¥\81à¤\9cà¥\8dà¤\9eा-पà¥\8dरमादः',
-'badaccess-group0' => 'भवदरà¥\8dथमà¥\8d, à¤\85तà¥\8dर à¤ªà¥\8dरारà¥\8dथितà¤\95à¥\8dरियायाà¤\83 à¤ªà¥\8dरवरà¥\8dतनà¤\82 à¤¨ à¤\85नà¥\81मतमà¥\8d।',
-'badaccess-groups' => 'भवता à¤ªà¥\8dरारà¥\8dथिता à¤\95à¥\8dरिया à¤\95à¥\87वलà¥\87 {{PLURAL:$2|à¤\85सà¥\8dमिनà¥\8d à¤¸à¤®à¥\82हà¥\87|à¤\8fतà¥\87षà¥\81 à¤¸à¤®à¥\82हà¥\87षà¥\81}} à¤\85नà¥\81मता à¤\85सà¥\8dति: $1।',
+'badaccess' => 'à¤\85नà¥\81मतिदà¥\8bषः',
+'badaccess-group0' => 'यसà¥\8dयाà¤\83 à¤\95à¥\8dरियायाà¤\83 à¤\95à¥\83तà¥\87 à¤­à¤µà¤¾à¤¨à¥\8d/भवतà¥\80 à¤\89दà¥\8dयà¥\81à¤\95à¥\8dता, à¤¤à¤¸à¥\8dयà¥\88 à¤\95à¥\8dरियायà¥\88 à¤\85नà¥\81मति à¤¨à¤¾à¤¸à¥\8dति ।',
+'badaccess-groups' => 'यसà¥\8dयाà¤\83 à¤\95à¥\8dरियायाà¤\83 à¤\95à¥\83तà¥\87 à¤­à¤µà¤¾à¤¨à¥\8d/भवतà¥\80 à¤\89दà¥\8dयà¥\81à¤\95à¥\8dता, à¤¤à¤¸à¥\8dयà¥\88 à¤\95à¥\8dरियायà¥\88 $1 {{PLURAL:$2|à¤\85सà¥\8dमिनà¥\8d à¤¸à¤®à¥\82हà¥\87|à¤\8fतà¥\87षà¥\81 à¤¸à¤®à¥\82हà¥\87षà¥\81}} à¤\85नà¥\81मतिà¤\83 à¤¨à¤¾à¤¸à¥\8dति ।',
 
-'versionrequired' => 'मीडीयाविके: $1 संस्करणम् आवश्यकम् ।',
-'versionrequiredtext' => 'à¤\8fततà¥\8dपà¥\83षà¥\8dठà¤\82 à¤ªà¥\8dरयà¥\8bà¤\95à¥\8dतà¥\81à¤\82 à¤®à¥\80डियाविà¤\95ि à¤\87तà¥\8dयà¥\87तसà¥\8dय $1तमा à¤\86वà¥\83तà¥\8dतिà¤\83 à¤\86वशà¥\8dयà¤\95à¥\80। à¤ªà¤¶à¥\8dयतà¥\81 [[Special:Version|à¤\86वà¥\83तà¥\8dति-सà¥\82à¤\9aिà¤\95ा]]',
+'versionrequired' => 'मीडीयाविक इत्यस्य $1 संस्करणम् आवश्यकम् ।',
+'versionrequiredtext' => 'à¤\85सà¥\8dय à¤ªà¥\83षà¥\8dठसà¥\8dय à¤\89पयà¥\8bà¤\97ारà¥\8dथà¤\82 à¤®à¥\80डà¥\80याविà¤\95ि à¤\87तà¥\8dयसà¥\8dय $1 à¤¸à¤\82सà¥\8dà¤\95रणमà¥\8d à¤\86वशà¥\8dयà¤\95मà¥\8d à¥¤ à¤ªà¤¶à¥\8dयतà¥\81 [[Special:सà¤\82सà¥\8dà¤\95रणमà¥\8d|सà¤\82सà¥\8dà¤\95रणानि]] à¥¤',
 
 'ok' => 'अस्तु',
 'pagetitle' => '$1 - {{SITENAME}}',
 'retrievedfrom' => '"$1" इत्यस्माद् पुनः प्राप्तिः',
-'youhavenewmessages' => 'भवदर्थम् $1 सन्ति। ($2).
-{{PLURAL:$3|भवतः/भवत्याः कृते}} $1 ($2).',
-'youhavenewmessagesfromusers' => 'भवदर्थम् {{PLURAL:$3|अन्यस्मात् सदस्यात्|$3 सदस्येभ्यः}} $1 अस्ति ($2)।',
-'youhavenewmessagesmanyusers' => 'नैकेभ्यः योजकेभ्यः ते $1 सन्ति $2 ।',
-'newmessageslinkplural' => '{{PLURAL:$1|नूतनः सन्देशः|नूतनसन्देशाः}}',
-'newmessagesdifflinkplural' => 'सद्यः {{PLURAL:$1|परिवर्तनम्|परिवर्तनानि}}',
-'youhavenewmessagesmulti' => 'भवतः कृते $1 मध्ये नूतनः सन्देशः विद्यते',
+'youhavenewmessages' => '{{PLURAL:$3|भवतः/भवत्याः कृते}} $1 ($2).',
+'youhavenewmessagesfromusers' => '{{PLURAL:$4|भवतः/भवत्याः कृते}} $1  {{PLURAL:$3|अन्यस्मात् योजकात्|$3 अन्येभ्यः योजकेभ्यः}} अस्ति ($2)।',
+'youhavenewmessagesmanyusers' => 'नैकेभ्यः योजकेभ्यः ते $1 सन्ति ($2) ।',
+'newmessageslinkplural' => '{{PLURAL:$1|नूतनः सन्देशः|नूतनाः सन्देशाः}}',
+'newmessagesdifflinkplural' => 'सद्यः {{PLURAL:$1|परिवर्तनम्| परिवर्तनानि}}',
+'youhavenewmessagesmulti' => 'भवते नूतनसन्देशाः सन्ति अत्र $1',
 'editsection' => 'सम्पाद्यताम्',
 'editold' => 'सम्पाद्यताम्',
 'viewsourceold' => 'स्रोतः दृश्यताम्',
@@ -549,21 +557,21 @@ $1',
 'toc' => 'अन्तर्विषयाः',
 'showtoc' => 'दर्श्यताम्',
 'hidetoc' => 'गोप्यताम्',
-'collapsible-collapse' => 'सà¤\82à¤\95à¥\8bच्यताम्',
+'collapsible-collapse' => 'सà¤\99à¥\8dà¤\95à¥\81च्यताम्',
 'collapsible-expand' => 'विस्तीर्यताम्',
-'thisisdeleted' => '$1 à¤¦à¤°à¥\8dशयà¥\87तà¥\8d à¤µà¤¾ à¤ªà¥\8dरतà¥\8dयानयà¥\87तà¥\8d à¤µà¤¾?',
+'thisisdeleted' => '$1 à¤¦à¥\83शà¥\8dयताà¤\82 à¤ªà¥\82रà¥\8dवतनà¤\82 à¤\95à¥\8dरियताà¤\82 à¤µà¤¾ ?',
 'viewdeleted' => '$1 दृश्यताम् ?',
-'restorelink' => '{{PLURAL:$1|à¤\8fà¤\95मà¥\8d à¤\85पाà¤\95à¥\83तà¤\82 à¤¸à¤\82पादनमà¥\8d  |$1 à¤\85पाà¤\95à¥\83तानि à¤¸à¤\82पादनानि}}',
+'restorelink' => '{{PLURAL:$1|à¤\8fà¤\95मà¥\8d à¤\85पाà¤\95à¥\83तà¤\82 à¤¸à¤®à¥\8dपादनमà¥\8d|$1 à¤\85पाà¤\95à¥\83तानि à¤¸à¤®à¥\8dपादनानि}}',
 'feedlinks' => 'अनुबन्ध:',
-'feed-invalid' => 'à¤\85मानà¥\8dयà¤\82 à¤¸à¥\87वाà¤\97à¥\8dरहण-पà¥\82रण (सबà¥\8dसà¥\8dà¤\95à¥\8dरिपà¥\8dशन-फà¥\80डà¥\8d à¤\87ति) à¤ªà¥\8dरà¤\95ारà¤\83।',
-'feed-unavailable' => 'समवायसमà¥\8dपà¥\82रणà¤\82 à¤¨à¥\8bपलभते ।',
-'site-rss-feed' => '$1 आरएसएस पूरणम्',
+'feed-invalid' => 'सदसà¥\8dयतायाà¤\83 à¤\85मानà¥\8dयà¤\83 à¤\85नà¥\81बनà¥\8dध(feed)पà¥\8dरà¤\95ारà¤\83',
+'feed-unavailable' => 'समवायानà¥\81बनà¥\8dधाà¤\83 à¤¨à¥\8bपलभनà¥\8dते ।',
+'site-rss-feed' => '$1 RSS अनुबन्धः',
 'site-atom-feed' => '$1 अणुपूरणम्',
-'page-rss-feed' => '"$1" आरएसएस-पूरणम्',
+'page-rss-feed' => '"$1" RSS अनुबन्धः',
 'page-atom-feed' => '"$1" अणुपूरणम्',
 'red-link-title' => '$1 (पृष्ठं न विद्यते)',
-'sort-descending' => 'à¤\85वरà¥\8bहिà¤\95à¥\8dरमà¥\87ण à¤¸à¤\9cà¥\8dà¤\9cयतà¥\81',
-'sort-ascending' => 'à¤\86रà¥\8bहिà¤\95à¥\8dरमà¥\87ण à¤¸à¤\9cà¥\8dà¤\9cयतà¥\81',
+'sort-descending' => 'अवरोहक्रमेण सज्जयतु',
+'sort-ascending' => 'आरोहक्रमेण सज्जयतु',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-main' => 'पृष्ठम्',
@@ -574,23 +582,27 @@ $1',
 'nstab-image' => 'सञ्चिका',
 'nstab-mediawiki' => 'सन्देशः',
 'nstab-template' => 'फलकम्',
-'nstab-help' => 'सहायपृष्ठम्',
+'nstab-help' => 'साहायà¥\8dयपृष्ठम्',
 'nstab-category' => 'वर्गः',
 
 # Main script and global functions
 'nosuchaction' => 'तादृशं कार्यं न विद्यते',
-'nosuchactiontext' => 'अनेन समरूप-संसाधन-अवस्थापकेन (URL इति) वर्णिता क्रिया अमान्याऽस्ति।
-भवता समरूप-संसाधन-अवस्थापकं अपटंकितं स्यात्, अथवा असुष्ठु संबंधनम् अनुसृतम् स्यात्।
-इदम् {{SITENAME}} इत्यनेन प्रयुक्ते क्रमादेशे त्रुटिर्वा स्यात्।',
-'nosuchspecialpage' => 'तादृशं विशेषपृष्टं न विद्यते',
-'nospecialpagetext' => '<strong>भवता एकम् अमान्यं विशिष्टपृष्ठं याचितम्। </strong>
-मान्यानां विशिष्टपृष्ठाणां सूचिका [[Special:SpecialPages|{{int:specialpages}}]] इत्यत्र प्राप्तुं शक्यते।',
+'nosuchactiontext' => 'अनेन सार्वसङ्केन (URL) दर्शिता क्रिया अयोग्या अस्ति । अयोग्यं त्रुटियुक्तं वा सार्वसङ्केतं भवता/भवत्या लिखितं स्यात् ।',
+'nosuchspecialpage' => 'तादृशं विशेषपृष्ठं न विद्यते',
+'nospecialpagetext' => '<strong>अयोग्यं विशिष्टपृष्ठं भवता/भवत्या ईप्सितम् ।</strong> विद्यमानानि विशिष्टपृष्ठानि [[Special:SpecialPages|{{int:specialpages}}]] अत्र प्राप्यन्ते ।',
 
 # General errors
 'error' => 'दोषः',
-'databaseerror' => 'दत्ताधारे दोषः',
-'laggedslavemode' => 'प्राक्प्रबोधनम्:अस्मिन् पृष्ठे सद्योजातानि परिशोधनानि न स्युः ।',
-'readonly' => 'दत्तधारः कीलितः',
+'databaseerror' => 'दत्तांशनिधौ (database) दोषः',
+'databaseerror-text' => 'दत्तांश-प्रश्नस्य (database query) दोषः प्राप्तः ।
+एषः दोषः तन्त्रांशस्य त्रुटिः स्यात् ।',
+'databaseerror-textcl' => 'दत्तांश-प्रश्नस्य (database query) दोषः प्राप्तः ।',
+'databaseerror-query' => 'प्रश्नः: $1',
+'databaseerror-function' => 'नियोज्यम्: $1',
+'databaseerror-error' => 'दोषः: $1',
+'laggedslavemode' => '<strong>पूर्वसूचना :</strong>
+सद्यः परिवर्तनानि अत्र न स्युः ।',
+'readonly' => 'दत्तांशनिधिः कीलितः',
 'enterlockreason' => 'तन्त्रितीकरणस्य कारणं ददातु, अपि च आकलितं ददातु यत् तन्त्रणं कदा उद्घाट्यिष्यते।',
 'readonlytext' => 'समंकाधारं वर्तमानकाले तन्त्रितमस्ति नूतनान् प्रविष्टीन् विरुध्य तथा च अन्यानि परिवर्तनानि विरुध्य। इदं नियमिततया समंकाधार परिचर्याऽर्थं तथा स्यात्। तत्पश्चादिदं सामान्यतां संप्राप्स्यति।
 तन्त्रितीकारकेन प्रबन्धकेन इदं कारणं प्रदत्तम्: $1',
@@ -598,7 +610,7 @@ $1',
 
 प्रायः अपाकृतस्य पृष्ठस्य इतिहासदर्शनस्य चेष्टाकाले एवं भवति ।
 
-तादृशी स्थितिः यदि नास्ति, तर्हि तन्त्रांशे वद्यमाना त्रुटिः भवेत् । कृपया कमपि [[Special:ListUsers/sysop|प्रबन्धकम्]] अस्य पृष्ठस्य सार्वसङ्केतं (U.R.L.) सूच्यताम् ।',
+तादà¥\83शà¥\80 à¤¸à¥\8dथितिà¤\83 à¤¯à¤¦à¤¿ à¤¨à¤¾à¤¸à¥\8dति, à¤¤à¤°à¥\8dहि à¤¤à¤¨à¥\8dतà¥\8dराà¤\82शà¥\87 à¤µà¤¿à¤¦à¥\8dयमाना à¤¤à¥\8dरà¥\81à¤\9fिà¤\83 à¤­à¤µà¥\87तà¥\8d à¥¤ à¤\95à¥\83पया à¤\95मपि [[Special:ListUsers/sysop|पà¥\8dरबनà¥\8dधà¤\95मà¥\8d]] à¤\85सà¥\8dय à¤ªà¥\83षà¥\8dठसà¥\8dय à¤¸à¤¾à¤°à¥\8dवसà¤\99à¥\8dà¤\95à¥\87तà¤\82 (U.R.L.) à¤¸à¥\82à¤\9aà¥\8dयतामà¥\8d à¥¤',
 'missingarticle-rev' => '(संस्करणं# :$1)',
 'missingarticle-diff' => '(व्यतिरेक: $1, $2)',
 'readonly_lag' => 'मुख्य-समंकाधार-परिवेशकं उपमुख्य-समंकाधार-परिवेशकस्य संप्रापणात् पूर्वे एव स्वतः तन्त्रितम् अस्ति।',
@@ -620,7 +632,7 @@ $1',
 'cannotdelete-title' => ' "$1" पृष्ठं निर्मार्जयितुम् अशक्यम्',
 'delete-hook-aborted' => 'आलम्बेन अपमार्जनम् अपनीतम् । अनेन विवरणं न दत्तम् ।',
 'badtitle' => 'अशुद्धं शिरोनाम',
-'badtitletext' => 'à¤\87पà¥\8dसितà¤\82 à¤¶à¥\80रà¥\8dषà¤\95मà¥\8d à¤\85मानà¥\8dयà¤\82, à¤°à¤¿à¤\95à¥\8dतमà¥\8d, à¤\85यà¥\8bà¤\97à¥\8dयà¤\82, à¤\85नà¥\8dयभाषà¥\80यà¤\82, à¤µà¤¿à¤\95ि-à¤\9cालविहाय च अस्ति । पृष्ठशीर्षकाय अयोग्यानि अक्षराणि चिह्नानि वा तस्मिन् भवेयुः ।',
+'badtitletext' => 'à¤\88पà¥\8dसितà¤\82 à¤¶à¥\80रà¥\8dषà¤\95मà¥\8d à¤\85मानà¥\8dयà¤\82, à¤°à¤¿à¤\95à¥\8dतमà¥\8d, à¤\85यà¥\8bà¤\97à¥\8dयमà¥\8d, à¤\85नà¥\8dयभाषà¥\80यà¤\82, à¤­à¤¾à¤·à¤¾à¤¨à¥\8dतरातà¥\8d à¤µà¤¿à¤\95ि-à¤\9cालसà¥\8dथलातà¥\8d च अस्ति । पृष्ठशीर्षकाय अयोग्यानि अक्षराणि चिह्नानि वा तस्मिन् भवेयुः ।',
 'perfcached' => 'अनुपदोक्तं लेखः कैश् इत्येतस्माद् अस्ति, अतः अद्यतनं न स्यात्।  {{PLURAL:$1|one result is|$1 results are}}',
 'perfcachedts' => 'अधोनिदेशितलेखः सञ्चितः । पूर्वपदोन्नतिः $1 । $4 {{PLURAL:}} अधिकाधिकपरिणामः सञ्चये उपलब्धः ।',
 'querypage-no-updates' => 'अस्य पृष्ठस्य परिशोधनं विफलीकृतमस्ति । 
@@ -753,7 +765,7 @@ $2',
 'emaildisabled' => 'स्थानमेतत् विद्युन्मनपत्रं न प्रेषयति ।',
 'accountcreated' => 'सदस्यता प्राप्ता',
 'accountcreatedtext' => '$1 इत्येतस्य सदस्यता प्राप्ता अस्ति।',
-'createaccount-title' => '{{SITENAME}} à¤\87तà¥\8dयà¥\87तदरà¥\8dथà¤\82 à¤²à¥\87à¤\96ासà¥\83à¤\9cनम्',
+'createaccount-title' => '{{SITENAME}} à¤\87तà¥\8dयतà¥\8dर à¤¸à¤¦à¤¸à¥\8dयता à¤ªà¥\8dरापà¥\8dयताम्',
 'createaccount-text' => 'भवतः विद्युत्संदेशसंकेतार्थं केनचित् $2 इति जनेन {{SITENAME}} ($4) इत्यत्र  $3 इति कूटशब्दं दत्वा लेखा सृष्टाऽस्ति।
 भवता अधुना प्रवेशं कृत्वा कूटशब्दः परिवर्तितव्यः।
 
@@ -771,6 +783,7 @@ You may ignore this message, if this account was created in error.',
 'loginlanguagelabel' => 'भाषा : $1',
 'suspicious-userlogout' => 'भवतः सत्राद् बहिर्गमनस्य अनुरोधः अस्वीकृतोऽस्ति, यस्मादेतत् भग्नादेकस्मात् ब्राउज़र्तः अथवा स्वल्पसञ्चयि-प्रॉक्सितः प्रेषित आसीत्।',
 'pt-login-button' => 'प्रविश्यताम्',
+'pt-userlogout' => 'निर्गमनम्',
 
 # Email sending
 'php-mail-error-unknown' => 'पीएच्पी इत्येतस्य mail() फलने अज्ञाता काऽपि त्रुटिर्जाता।',
@@ -850,13 +863,13 @@ $2
 'image_tip' => 'अन्तर्निहिता सञ्चिका',
 'media_sample' => 'उदाहरणम्.ogg',
 'media_tip' => 'सञ्चिकासम्बन्धः',
-'sig_tip' => 'समयà¥\8bलà¥\8dलà¥\87न à¤¸à¤¹ à¤­à¤µà¤¤à¤\83/भवतà¥\8dयाà¤\83 à¤¹à¤¸à¥\8dताà¤\95à¥\8dषरà¤\83',
+'sig_tip' => 'समयà¥\8bलà¥\8dलà¥\87à¤\96à¥\87न à¤¸à¤¹ à¤­à¤µà¤¤à¤\83/भवतà¥\8dयाà¤\83 à¤¹à¤¸à¥\8dताà¤\95à¥\8dषरमà¥\8d',
 'hr_tip' => 'क्षैतिज-रेखा (न्यूनतया प्रयोक्तव्या)',
 
 # Edit pages
 'summary' => 'सारांशः:',
 'subject' => 'विषयः/शीर्षकम् :',
-'minoredit' => 'à¤\87दà¤\82 à¤²à¤\98à¥\81 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनम्',
+'minoredit' => 'à¤\87दà¤\82 à¤²à¤\98à¥\81 à¤¸à¤®à¥\8dपादनम्',
 'watchthis' => 'इदं पृष्ठं निरीक्षताम्',
 'savearticle' => 'पृष्ठं रक्ष्यताम्',
 'preview' => 'प्राग्दृश्यम्',
@@ -913,9 +926,8 @@ $2
 सत्रारम्भपश्चात् नूतनायाः अस्याः लेखायाः कूटशब्दः  '''[[Special:ChangePassword|कूटशब्दं परिवर्तताम्]]'' इति पृष्ठे परिवर्तितुं शक्यते।",
 'newarticle' => '(नूतनम्)',
 'newarticletext' => 'भवान्/भवती अनिर्मिते पृष्ठे अस्ति । 
-
-पृष्ठं स्रष्टुम् अधः प्रदत्तायां पेटिकायां टङ्कनं प्रारभतु (साहाय्यार्थं [$1 अत्र] नुदतु ।
-भवान्/भवती यदि क्षतिकारणात् एतत् पृष्ठं प्रति आगच्छत्, तर्हि अस्य गवेषकस्य (browser) "बैक्" इति नुदतु ।',
+पृष्ठं स्रष्टुम् अधः प्रदत्तायां पेटिकायां टङ्कनं प्रारभतु (साहाय्यार्थं [$1 अत्र]) नुदतु ।
+भवान्/भवती यदि क्षतिकारणात् एतत् पृष्ठं प्रति आगच्छत्, तर्हि अस्य गवेषकस्य (browser) Back नुदतु ।',
 'anontalkpagetext' => 'तस्य अनामकयोजकस्य, अथवा अनुपयोजकस्य च परिचर्चापुटम् येन एतावति काले स्वस्थनं  न निर्मितम् । 
 अतः तस्य अभिज्ञानार्थं ऐ.पि.सङ्गेतसङ्ख्या प्रयोजनीया । 
 सा समाना सङ्ख्याः अन्ययोजकैः अपि विभक्ता । यदि भवान् अनामकयोजकः, भवता असम्बद्धटीकाः श्रुताः, कृपया स्वस्थनं निर्मीय नामाभिलेखं करोतु ।  [[Special:UserLogin/signup|create an account]], [[Special:UserLogin|log in]] अन्यानामकयोजकैः सह सम्भूयमनभ्रमैः विमुक्तः भवतु ।',
@@ -953,7 +965,7 @@ $2
 'updated' => '(अद्यतनीकृतः)',
 'note' => "'''सूचना:'''",
 'previewnote' => "'''एतत् केवलं प्राग्दृश्यं वर्तते इति स्मरतु'''
-भवता/भवतà¥\8dया à¤\95à¥\83तानि à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनानि à¤\8fतवातà¥\8d न रक्षितानि ।",
+भवता/भवतà¥\8dया à¤\95à¥\83तानि à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनानि à¤\8fतवता न रक्षितानि ।",
 'continue-editing' => 'सम्पादनम् अनुवर्तताम्',
 'previewconflict' => 'अस्मिन् प्राग्दृश्ये दर्शितमस्ति यत् उपरिवर्ति पाठ क्षेत्रस्य पाठः रक्षणपश्चात् कीदृशः दृष्टिगोचरः भविष्यति।',
 'session_fail_preview' => "'''क्षम्यताम्! अस्माभिः भवतः सम्पादनस्य संसाधनं न कर्तुं शक्तम् यस्माद्धि सत्रस्य सूचनाः लुप्ताः।'''
@@ -1000,14 +1012,15 @@ $2
 'templatesusedsection' => '{{PLURAL:$1|Template|Templates}} अस्मिन् विभागे उपयुक्तम् ।',
 'template-protected' => '(संरक्षितम्)',
 'template-semiprotected' => 'अर्धसंरक्षितम्',
-'hiddencategories' => 'à¤\87दà¤\82 à¤ªà¥\83षà¥\8dठà¤\82 {{PLURAL:$1|1 à¤¨à¤¿à¤\97à¥\82ढà¥\87 à¤µà¤°à¥\8dà¤\97à¥\87 |$1 à¤¨à¤¿à¤\97à¥\82ढà¥\87षà¥\81 à¤µà¤°à¥\8dà¤\97à¥\87षà¥\81}} à¤\85नà¥\8dयतमà¤\82 à¤µà¤¿à¤¦à¥\8dयतà¥\87 :',
+'hiddencategories' => 'à¤\87दà¤\82 à¤ªà¥\83षà¥\8dठà¤\82 {{PLURAL:$1|1 à¤¨à¤¿à¤\97à¥\82ढà¥\87 à¤µà¤°à¥\8dà¤\97à¥\87 |$1 à¤¨à¤¿à¤\97à¥\82ढà¥\87षà¥\81 à¤µà¤°à¥\8dà¤\97à¥\87षà¥\81}} à¤\85नà¥\8dतरà¥\8dभवति :',
 'nocreatetext' => '{{SITENAME}} नूतनपुटनिर्माणस्य क्षमता नियता । वर्तमानापुटानां सम्पादनार्थं निर्गच्छतु । अथवा [[Special:UserLogin|log in or create an account]].',
 'nocreate-loggedin' => 'नूतनपुटनिर्मार्थम् अनुमतिः नास्ति ।',
 'sectioneditnotsupported-title' => 'विभागसम्पादनं न पोषितम् ।',
 'sectioneditnotsupported-text' => 'अस्मिन् पुटे विभागसम्पादनण् न पोषितम् ।',
 'permissionserrors' => 'अनुज्ञा-विभ्रमाः',
 'permissionserrorstext' => 'भवान् तत् कर्तुं अनुज्ञां न धारयति {{PLURAL:$1|अधोऽङ्कितात् कारणात् |अधोऽङ्कितेभ्यः कारणेभ्यः:}}',
-'permissionserrorstext-withaction' => '$1 निम्नकारणत्वात्  $2 सम्पादनस्य अनुमतिः नास्ति ।',
+'permissionserrorstext-withaction' => '$1 निम्नकारणत्वात्  $2 सम्पादनस्य अनुमतिः नास्ति ।
+{{PLURAL:$1|कारणम्|कारणानि}}:',
 'recreate-moveddeleted-warn' => "'''पूर्वसूचना: पूर्वम् अपाकृतं पृष्टं भवता रच्यमानम् अस्ति ।'''
 अस्य पृष्ठस्य सम्पादनं करणात् प्राक् गभीरतया चिन्तनं करोतु ।
 अस्य पृष्ठस्य निर्माणं न्यायसङ्गतम् इति भवतः/भवत्याः मतमस्ति चेत् अत्र परिवर्तनं करोतु । सौकर्यार्थं पृष्ठ-अपाकरणस्य प्राक्तनसम्पादनस्य आवलिः अत्र वर्तते ।",
@@ -1040,8 +1053,8 @@ $2
 अत्र $2 संख्यातः  {{PLURAL:$2|न्यूनं आह्वानं|न्यूनानि आह्वानानि}} भवितव्यानि, सद्यः तत्र {{PLURAL:$1 $1 आह्वानं विद्यते|$1 आह्वानानि विद्यन्ते}}।",
 'expensive-parserfunction-category' => 'प्रभूतेभ्यः जटिलेभ्यः पार्सर्-फंक्शन्-आह्वानेभ्यः युक्तानि पृष्ठाणि।',
 'post-expand-template-inclusion-warning' => "'''पूर्वसूचना:''' फलकस्य आकारः बृहत् वर्तते । कानिचन फलकानि नान्तर्भविष्यन्ति ।",
-'post-expand-template-inclusion-category' => 'माहितà¥\80फलकस्य अपेक्षया पृष्ठं बृहत् वर्तते ।',
-'post-expand-template-argument-warning' => "'''पà¥\82रà¥\8dवसà¥\82à¤\9aना''' à¤\85सà¥\8dमिनà¥\8d à¤ªà¥\83षà¥\8dठà¥\87 à¤¸à¥\8dथितसà¥\8dय à¤«à¤²à¤\95सà¥\8dय à¤\8fà¤\95à¤\83 à¤µà¤¿à¤\95लà¥\8dपà¤\83 à¤¬à¤¹à¥\81 à¤¬à¥\83हतà¥\8d à¤­à¤µà¥\87तà¥\8d । तस्य विकल्पस्य अंशाः अपाकृताः ।",
+'post-expand-template-inclusion-category' => 'सà¥\82à¤\9aनाफलकस्य अपेक्षया पृष्ठं बृहत् वर्तते ।',
+'post-expand-template-argument-warning' => "'''पà¥\82रà¥\8dवसà¥\82à¤\9aना''' à¤\85सà¥\8dमिनà¥\8d à¤ªà¥\83षà¥\8dठà¥\87 à¤¸à¥\8dथितसà¥\8dय à¤«à¤²à¤\95सà¥\8dय à¤\8fà¤\95à¤\83 à¤µà¤¿à¤\95लà¥\8dपà¤\83 à¤¬à¤¹à¥\81 à¤¬à¥\83हतà¥\8d à¤µà¤°à¥\8dततà¥\87 । तस्य विकल्पस्य अंशाः अपाकृताः ।",
 'post-expand-template-argument-category' => 'येषु पृष्ठेषु फलके स्थिताः विकल्पाः न पूरिताः तेषां पृष्ठानाम् आवलिः',
 'parser-template-loop-warning' => 'बिम्बधर-पाशः प्राप्तः: [[$1]]',
 'parser-template-recursion-depth-warning' => 'बिम्बधर-पुनरावर्तनार्थं गहनतायाः सीमा अतिक्रान्ताऽस्ति ($1)',
@@ -1072,20 +1085,20 @@ $2
 'currentrev' => 'सद्यःकालीना आवृत्तिः',
 'currentrev-asof' => '$1 समयस्य संस्करणम्',
 'revisionasof' => '$1 इत्यस्य संस्करणं',
-'revision-info' => '$1 à¤ªà¤°à¥\8dयनà¥\8dतà¤\82 $2 à¤¦à¥\8dवारा à¤\9cातानि परिवर्तनानाम् आवलिः',
-'previousrevision' => 'â\86\90 à¤ªà¥\81रातनानि à¤¸à¤\82सà¥\8dà¤\95रणानि',
+'revision-info' => '$1 à¤ªà¤°à¥\8dयनà¥\8dतà¤\82 $2 à¤¦à¥\8dवारा à¤\9cातानाà¤\82 परिवर्तनानाम् आवलिः',
+'previousrevision' => 'â\86\90 à¤ªà¥\81रातनà¤\82 à¤¸à¤\82सà¥\8dà¤\95रणमà¥\8d',
 'nextrevision' => 'नूतनतरा आवृत्तिः →',
-'currentrevisionlink' => 'सदà¥\8dयà¤\83à¤\95ालà¥\80ना आवृत्तिः',
+'currentrevisionlink' => 'नà¥\82तनतमा आवृत्तिः',
 'cur' => 'वर्तमानः',
 'next' => 'आगामि',
 'last' => 'पूर्वतनम्',
 'page_first' => 'प्रथमम्',
 'page_last' => 'अन्तिमम्',
 'histlegend' => 'भेदस्य चयनम्: आवृत्तिभेदस्य दर्शनाय अग्रे प्रदत्ता रेडियोमञ्जूषा नुद्यताम्, एण्टर्-कुड्मलं नुद्यताम्, अधः दत्तं कुड्मलं वा नुद्यताम् । <br />
-à¤\87तिहासà¤\83: (सदà¥\8dयà¥\8bà¤\9cातमà¥\8d) = नूतनासु आवृत्तिषु भेदः, 
-(पà¥\82रà¥\8dवतनमà¥\8d) = à¤ªà¥\82रà¥\8dवतनासà¥\81 à¤\86वà¥\83तà¥\8dतिषà¥\81 à¤­à¥\87दà¤\83, (लà¤\98à¥\81) = à¤²à¤\98à¥\81 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनम्',
-'history-fieldset-title' => 'à¤\97वà¥\87षणसà¥\8dय (browser) इतिहासः',
-'history-show-deleted' => 'मातà¥\8dरम् अपाकृतम्',
+नà¥\82तनसà¤\82सà¥\8dà¤\95रणमà¥\8d = नूतनासु आवृत्तिषु भेदः, 
+(पà¥\82रà¥\8dवतनमà¥\8d) = à¤ªà¥\82रà¥\8dवतनासà¥\81 à¤\86वà¥\83तà¥\8dतिषà¥\81 à¤­à¥\87दà¤\83, (लà¤\98à¥\81) = à¤²à¤\98à¥\81 à¤¸à¤®à¥\8dपादनम्',
+'history-fieldset-title' => 'à¤\85नà¥\8dवà¥\87षणसà¥\8dय (browse) इतिहासः',
+'history-show-deleted' => 'à¤\95à¥\87वलम् अपाकृतम्',
 'histfirst' => 'पुरातनतमम्',
 'histlast' => 'नूतनतमम्',
 'historysize' => '({{PLURAL:$1|1 बैटम्|$1 बैटानि}})',
@@ -1206,12 +1219,12 @@ You can still [$1 view this revision]",
 'mergelogpagetext' => 'अतिनूतनविलीनस्य आवली अधो दत्ता यस्य इतिहासः अन्यस्मिन् अस्ति ।',
 
 # Diffs
-'history-title' => '"$1" इत्यस्य आवर्तनेतिहासः :',
+'history-title' => '"$1" इत्यस्य आवर्तनेतिहासः',
 'difference-title' => '"$1" इत्यस्य अवतरणमध्ये व्यत्यासः ।',
 'difference-title-multipage' => '"$1" तथा "$2" पुटयोः मध्ये व्यत्यासः ।',
 'difference-multipage' => 'पुटेषु व्यत्यासः ।',
 'lineno' => 'पङ्क्तिः $1:',
-'compareselectedversions' => 'à¤\9aितानामà¥\8d à¤\86वà¥\83तà¥\8dतà¥\80नाà¤\82 à¤¤à¥\8bलनà¤\82 क्रियताम्',
+'compareselectedversions' => 'à¤\9aितानामà¥\8d à¤\86वà¥\83तà¥\8dतà¥\80नाà¤\82 à¤¤à¥\81लना क्रियताम्',
 'showhideselectedversions' => 'चितावतरणानि दर्शयतु/गोपयतु ।',
 'editundo' => 'पूर्ववत्',
 'diff-multi-manyusers' => '({{PLURAL:$2|योजकेन|$2 योजकैः}} कृता {{PLURAL:$1|मध्यमा आवृत्तिः|$1 मध्यमा आवृत्तयः}} न दर्शिताः ।)',
@@ -1225,25 +1238,25 @@ You can still [$1 view this revision]",
 'titlematches' => 'पुटशीर्षिकामेलाः ।',
 'textmatches' => 'पुटपाठस्य मेलाः',
 'notextmatches' => 'न कस्यापि पृष्ठस्य पाठः अस्य सममस्ति',
-'prevn' => 'पà¥\81रसà¥\8dतात् {{PLURAL:$1|$1}}',
-'nextn' => 'परसà¥\8dतात् {{PLURAL:$1|$1}}',
-'prevn-title' => 'पà¥\81रसà¥\8dतातà¥\8d {{PLURAL:$1|परिणामः|परिणामाः}}',
-'nextn-title' => 'परसà¥\8dतातà¥\8d {{PLURAL:$1|परिणामः|परिणामाः}}',
+'prevn' => 'पà¥\82रà¥\8dवतनम् {{PLURAL:$1|$1}}',
+'nextn' => 'à¤\85à¤\97à¥\8dरिमम् {{PLURAL:$1|$1}}',
+'prevn-title' => 'पà¥\82रà¥\8dवतन{{PLURAL:$1|परिणामः|परिणामाः}}',
+'nextn-title' => 'à¤\85à¤\97à¥\8dरिम{{PLURAL:$1|परिणामः|परिणामाः}}',
 'shown-title' => 'प्रत्येकस्मिन् पृष्ठे $1 {{PLURAL:$1|फलितम्|फलितानि}} दर्श्यताम्',
-'viewprevnext' => 'दरà¥\8dश्यताम् ($1 {{int:pipe-separator}} $2) ($3)',
-'searchmenu-exists' => "'''विकि-जालस्थानेऽस्मिन् \"[[:\$1]]\" नामकं पृष्ठं विद्यते । '''",
+'viewprevnext' => 'दà¥\83श्यताम् ($1 {{int:pipe-separator}} $2) ($3)',
+'searchmenu-exists' => '<strong>अस्मिन् विकि-जालस्थाने "[[:$1]]" नामकं पृष्ठं विद्यते ।</strong> {{PLURAL:$2|0=|अन्यपरिणामाः दृश्यन्ताम्}}',
 'searchmenu-new' => '<strong> अस्मिन् विकिजालस्थाने "[[:$1]]" इदं पृष्ठं सृज्यताम् ।
 </strong>
-{{PLURAL:$2|0=|तव अन्वेषणस्य परिणामोपि दृश्यताम् ।|तव अन्वेषणस्य परिणामाः अपि दृश्यन्ताम्}}',
-'searchprofile-articles' => 'à¤\86नà¥\8dतरà¥\8dविषà¤\95à¤\82 à¤ªà¥\83षà¥\8dठà¤\82',
+{{PLURAL:$2|0=|तव à¤\85नà¥\8dवà¥\87षणसà¥\8dय à¤ªà¤°à¤¿à¤£à¤¾à¤®à¥\8bऽपि à¤¦à¥\83शà¥\8dयतामà¥\8d à¥¤|तव à¤\85नà¥\8dवà¥\87षणसà¥\8dय à¤ªà¤°à¤¿à¤£à¤¾à¤®à¤¾à¤\83 à¤\85पि à¤¦à¥\83शà¥\8dयनà¥\8dतामà¥\8d}}',
+'searchprofile-articles' => 'विषयसहितानि à¤ªà¥\83षà¥\8dठानि',
 'searchprofile-project' => 'साहाय्यं, प्रकल्पपृष्ठानि च',
 'searchprofile-images' => 'माध्यमसमुच्चयः',
 'searchprofile-everything' => 'सर्वम्',
 'searchprofile-advanced' => 'प्रगतम्',
 'searchprofile-articles-tooltip' => '$1 स्थले अन्विष्यताम्',
 'searchprofile-project-tooltip' => '$1 स्थले अन्विष्यताम्',
-'searchprofile-images-tooltip' => 'सञ्चिका अन्विष्यताम्',
-'searchprofile-everything-tooltip' => '(चर्चापृष्ठानि अविहाय) सर्वत्र अन्विष्यताम्',
+'searchprofile-images-tooltip' => 'सञ्चिकाः अन्विष्यन्ताम्',
+'searchprofile-everything-tooltip' => 'सर्वत्र अन्विष्यताम् (चर्चापृष्ठानि अपि)',
 'searchprofile-advanced-tooltip' => 'नामाकाशेषु अन्विष्यताम्',
 'search-result-size' => '$1 ({{PLURAL:$2|1 शब्दः|$2 शब्दाः}})',
 'search-result-category-size' => '{{PLURAL:$1|1 योजकः|$1 योजकाः}} ({{PLURAL:$2|1 उपवर्गः|$2 उपवर्गाः}}, {{PLURAL:$3|1 सञ्चिका|$3 सञ्चिकाः}})',
@@ -1281,7 +1294,7 @@ You can still [$1 view this revision]",
 'skin-preview' => 'प्राग्दृश्यम्',
 'datedefault' => 'वरीयांसि नास्ति',
 'prefs-beta' => 'आवर्णलक्षणानि ।',
-'prefs-datetime' => 'दिनाà¤\82à¤\95 à¤¤à¤¥à¤¾ à¤¸à¤®à¤¯',
+'prefs-datetime' => 'दिनाà¤\99à¥\8dà¤\95à¤\83, à¤¸à¤®à¤¯à¤\83 à¤\9a',
 'prefs-labs' => 'प्रयोगशालालक्षणानि ।',
 'prefs-user-pages' => 'योजकपुटानि ।',
 'prefs-personal' => 'योजकः व्यक्तिरेखा',
@@ -1361,7 +1374,7 @@ You can still [$1 view this revision]",
 'email' => 'विद्युत्पत्रव्यवस्था',
 'prefs-help-realname' => 'निजनामधेयस्य उल्लेखः आवश्यकः नास्ति । 
 यदि ददाति तर्हि अस्य प्रयोगः भवतः योगदानार्थं भवते श्रेयं दातुम् उपयुक्तः भवति ।',
-'prefs-help-email' => 'à¤\88-पतà¥\8dरसà¤\99à¥\8dà¤\95à¥\87तà¤\83 à¤\85निवारà¥\8dयà¤\83 à¤¨à¤¾à¤¸à¥\8dति à¥¤ à¤\95िनà¥\8dतà¥\81 à¤\95à¥\82à¤\9fशबà¥\8dदà¤\83 à¤µà¤¿à¤¸à¥\8dमरà¥\8dयतà¥\87 à¤\9aà¥\87तà¥\8d à¤¤à¤¸à¥\8dय à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनाय à¤\85वश्यकः भवति ।',
+'prefs-help-email' => 'à¤\88-पतà¥\8dरसà¤\99à¥\8dà¤\95à¥\87तà¤\83 à¤\85निवारà¥\8dयà¤\83 à¤¨à¤¾à¤¸à¥\8dति à¥¤ à¤\95िनà¥\8dतà¥\81 à¤\95à¥\82à¤\9fशबà¥\8dदà¤\83 à¤µà¤¿à¤¸à¥\8dमरà¥\8dयतà¥\87 à¤\9aà¥\87तà¥\8d à¤¤à¤¸à¥\8dय à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनाय à¤\86वश्यकः भवति ।',
 'prefs-help-email-others' => 'योजकपृष्ठ-सम्भाषणपृष्ठयोः माध्यमेन,  ई-पत्रमाध्यमेन वा अन्ये योजकाः भवतः/भवत्याः सम्पर्कं कर्तुं शक्नुयुः ।
 सम्पर्केऽस्मिन् भवतः/भवत्याः ई-पत्रसङ्केतम् अन्ययोजकाः ज्ञातुं न प्रभवतन्ति ।',
 'prefs-help-email-required' => 'विद्युन्मानपत्रसङ्केतः आवश्यकः ।',
@@ -1539,15 +1552,15 @@ You can still [$1 view this revision]",
 
 # Recent changes
 'nchanges' => '$1 {{PLURAL:$1|परिवर्तनम्|परिवर्तनानि}}',
-'recentchanges' => 'सदà¥\8dयपरिवर्तनानि',
-'recentchanges-legend' => 'सद्योजातानां परिवर्तनानां विकल्पाः',
+'recentchanges' => 'नà¥\82तनपरिवर्तनानि',
+'recentchanges-legend' => 'सद्यो जातानां परिवर्तनानां विकल्पाः',
 'recentchanges-summary' => 'अस्मिन् विकि-प्रकल्पे सद्योजातानि परिवर्तनानि दृश्यन्ताम्',
-'recentchanges-feed-description' => 'अस्मिन् विकि-प्रकल्पे सद्योजातानि परिवर्तनानि दर्श्यन्ताम्',
+'recentchanges-feed-description' => 'अस्मिन् विकि-प्रकल्पे सद्यो जातानि परिवर्तनानि दर्श्यन्ताम्',
 'recentchanges-label-newpage' => 'अनेन सम्पादनेन नूतनपृष्ठस्य रचना अभूत् ।',
-'recentchanges-label-minor' => 'à¤\87दà¤\82 à¤²à¤\98à¥\81 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनम्',
+'recentchanges-label-minor' => 'à¤\87दà¤\82 à¤²à¤\98à¥\81 à¤¸à¤®à¥\8dपादनम्',
 'recentchanges-label-bot' => 'बोट्-द्वारा कृतं सम्पादनमेतत्',
 'recentchanges-label-unpatrolled' => 'एतावता अस्य सम्पादनस्य परिशीलिनं नाभूत् ।',
-'rcnotefrom' => '<strong>$2</strong> तः आरभ्य (<strong>$1</strong> पर्यन्तं) जातानि परिवर्तनानि अधः प्रदर्शिता ।',
+'rcnotefrom' => '<strong>$2</strong> तः आरभ्य (<strong>$1</strong> पर्यन्तं) जातानि परिवर्तनानि अधः प्रदर्शितानि ।',
 'rclistfrom' => '$1 पश्चात् जातानि नूतनानि परिवर्तनानि दृश्यन्ताम्',
 'rcshowhideminor' => '$1 लघुसम्पादनानि',
 'rcshowhidebots' => '$1 बोट् इत्येतानि',
@@ -1561,7 +1574,7 @@ You can still [$1 view this revision]",
 'hide' => 'गोप्यताम्',
 'show' => 'दृश्यताम्',
 'minoreditletter' => '(लघु)',
-'newpageletter' => '(नवीनम्)',
+'newpageletter' => '<font color="green">(नवीनम्)</font>',
 'boteditletter' => '(बोट्)',
 'number_of_watching_users_pageview' => '[$1 अवलोकयति {{PLURAL:$1|योजकः|योजकाः}}]',
 'rc_categories' => 'वर्गान् नियतीकरोतु ।',
@@ -1577,11 +1590,11 @@ You can still [$1 view this revision]",
 'recentchangeslinked-feed' => 'पृष्ठ-सम्बन्धितानि परिवर्तनानि',
 'recentchangeslinked-toolbox' => 'पृष्ठसम्बद्धानि परिवर्तनानि',
 'recentchangeslinked-title' => '"$1" इत्यस्मिन् जातानि परिवर्तनानि',
-'recentchangeslinked-summary' => "विशेषपृष्ठेषु वर्गान्तर्गतपृष्ठेषु वा सद्योजातानां परिवर्तनानाम् एषा आवलिः ।
+'recentchangeslinked-summary' => "विशेषपृष्ठेषु वर्गान्तर्गतपृष्ठेषु वा सद्यो जातानां परिवर्तनानाम् एषा आवलिः ।
 
-[[Special:Watchlist|भवतà¤\83/भवतà¥\8dयाà¤\83 à¤\85वà¥\87à¤\95à¥\8dषणावलिà¤\83]] à¤\85तà¥\8dर à¤µà¤¿à¤¦à¥\8dयमानानि à¤ªà¥\83षà¥\8dठानि '''स्थूलाक्षरैः''' दर्शितानि।",
+[[Special:Watchlist|भवतà¤\83/भवतà¥\8dयाà¤\83 à¤\85वà¥\87à¤\95à¥\8dषणावलà¥\8dयाà¤\82]] à¤µà¤¿à¤¦à¥\8dयमानानि à¤ªà¥\83षà¥\8dठानि à¤\85तà¥\8dर '''स्थूलाक्षरैः''' दर्शितानि।",
 'recentchangeslinked-page' => 'पृष्ठनाम:',
-'recentchangeslinked-to' => 'à¤\85सà¥\8dमिनà¥\8d à¤¸à¥\8dथानà¥\87 à¤\85सà¥\8dय à¤ªà¥\83षà¥\8dठसà¥\8dय à¤¸à¤\82बद्धानां पृष्ठानां परिवर्तनानि दर्श्यन्ताम्',
+'recentchangeslinked-to' => 'à¤\85सà¥\8dमिनà¥\8d à¤¸à¥\8dथानà¥\87 à¤\85सà¥\8dय à¤ªà¥\83षà¥\8dठसà¥\8dय à¤¸à¤®à¥\8dबद्धानां पृष्ठानां परिवर्तनानि दर्श्यन्ताम्',
 
 # Upload
 'upload' => 'सञ्चिका आरोप्यताम्',
@@ -1853,7 +1866,7 @@ See https://www.mediawiki.org/wiki/Manual:Image_Authorization.',
 'filehist-comment' => 'टिप्पणी',
 'filehist-missing' => 'सञ्चिका विनष्टा ।',
 'imagelinks' => 'सञ्चिकायाः उपयोगः',
-'linkstoimage' => '{{PLURAL:$1|अधो निर्दिष्टपृष्ठस्य परिसन्धयः|$1 अधो निर्दिष्टपृष्ठानां परिसन्धिः} अत्र {{PLURAL:$1|संलग्नाः सन्ति|सल्लग्ना अस्ति}} :',
+'linkstoimage' => '{{PLURAL:$1|अधो निर्दिष्टपृष्ठस्य परिसन्धयः संलग्नाः सन्ति|$1 अधो निर्दिष्टपृष्ठानां परिसन्धिः संलग्ना अस्ति}}:',
 'linkstoimage-more' => '{{PLURAL:$1|$1}} तः अधिकपुटानि अस्यां सञ्चिकायां योज्यन्ते । 
 अधोनिदेशितसूची सञ्चिकाभिः योजनीयपुटानि पश्यति ।{{PLURAL:$1|$1 पृष्ठ|$1 पृष्ठ}} 
 [[Special:WhatLinksHere/$2|पूर्णसूची]] अपि लभ्यते ।',
@@ -1935,7 +1948,7 @@ See https://www.mediawiki.org/wiki/Manual:Image_Authorization.',
 'randomredirect-nopages' => '$1नामस्थाने चालनानि न सन्ति ।',
 
 # Statistics
-'statistics' => 'साङ्ख्यकी',
+'statistics' => 'साà¤\99à¥\8dà¤\96à¥\8dयिà¤\95à¥\80',
 'statistics-header-pages' => 'पुटसाङ्ख्यिकाः ।',
 'statistics-header-edits' => 'सङ्ख्यिकाः सम्पादयतु ।',
 'statistics-header-views' => 'साङ्ख्यिकाः अवलोकयतु ।',
@@ -2033,7 +2046,7 @@ See https://www.mediawiki.org/wiki/Manual:Image_Authorization.',
 'newpages' => 'नवीनपृष्ठानि',
 'newpages-username' => 'योजकनामन्:',
 'ancientpages' => 'प्राचीनतमानि पृष्ठानि',
-'move' => 'à¤\9aाल्यताम्',
+'move' => 'शà¥\80रà¥\8dषà¤\95à¤\82 à¤ªà¤°à¤¿à¤µà¤°à¥\8dत्यताम्',
 'movethispage' => 'इदं पृष्ठं चाल्यताम्',
 'unusedimagestext' => 'अधो दत्तसञ्चिकाः सन्ति किन्तु कस्मिंश्चिदपि पुटे न न्यस्ताः ।',
 'unusedcategoriestext' => 'निम्नलिखितवर्गाः सन्ति तथापि अन्यपुटं वर्गः वा न उपयुङ्क्ते ।',
@@ -2271,7 +2284,7 @@ Feedback and further assistance:
 'historywarning' => "' पूर्वसूचना ''' भवता अपमर्जनसिद्धपुटे बहुशः  $1 इतिहासयुक्तः अस्ति ।{{PLURAL:$1|revision|revisions}}:",
 'confirmdeletetext' => 'भवान् एकं पृष्ठं तस्य अखिलेन इतिहासेन सहितं अपाकर्तुं प्रवृत्तोऽस्ति। कृपया सुपुष्टीकरोतु यत् भवतः एतदेव आशयः, यद् भवता अस्य परिणामाः सुविज्ञाताः सन्ति तथा च भवता क्रियैषा [[{{MediaWiki:Policy-url}}| यथानीति]] सम्पाद्यते।',
 'actioncomplete' => 'कार्यं सम्पन्नम्',
-'actionfailed' => 'à¤\95ारà¥\8dयà¤\82 à¤°à¤¿à¤·à¥\8dà¤\9fà¤\82 (failed)',
+'actionfailed' => 'à¤\95ारà¥\8dयà¤\82 à¤°à¤¿à¤·à¥\8dà¤\9fमà¥\8d (failed)',
 'deletedtext' => '"$1" इत्येतद् अपाकृतमस्ति।
 सद्यःकृतानां अपाकरणानाम् अभिलेखः $2 इत्यस्मिन् पश्यतु।',
 'dellogpage' => 'अपाकरणानाम् आवलिः',
@@ -2433,11 +2446,11 @@ $2 द्वारा सम्पादितां अन्तिमावृ
 'tooltip-invert' => 'चितनामस्थाने परिवर्तनं गोपयितुं मञ्जूषाम् अर्गलयतु ।',
 'namespace_association' => 'सम्बद्धं नामस्थानम् ।',
 'tooltip-namespace_association' => 'चितनामस्थानेन सह सम्बद्धं विषयनामस्थानम् अथवा सम्भाषणम् अपि उपादातुम् इमां मञ्जूषाम् अर्गलयतु ।',
-'blanknamespace' => '(मà¥\81à¤\96à¥\8dयà¤\83)',
+'blanknamespace' => '(मà¥\81à¤\96à¥\8dयमà¥\8d)',
 
 # Contributions
 'contributions' => '{{GENDER:$1|प्रयोक्तॄणां}} योगदानानि',
-'contributions-title' => '$1 à¤\95à¥\83तà¥\87 à¤¯à¥\8bà¤\97दानà¤\82',
+'contributions-title' => '$1 à¤\95à¥\83तà¥\87 à¤¯à¥\8bà¤\9cà¤\95सà¥\8dय à¤¯à¥\8bà¤\97दानानि',
 'mycontris' => 'योगदानानि',
 'contribsub2' => '($2) कृते {{GENDER:$3|$1}}',
 'nocontribs' => 'एतादृशयोग्यताभिः समं परिवर्तनानि न दृष्टानि ।',
@@ -2460,25 +2473,25 @@ $2 द्वारा सम्पादितां अन्तिमावृ
 नूतनतमा अवरोधाभिलेख-प्रविष्टिः सन्दर्भार्थम् अधस्तात् प्रदत्ताऽस्ति:',
 'sp-contributions-search' => 'योगदानानि अन्विष्यन्ताम्',
 'sp-contributions-username' => 'अन्तर्जालसंविद् (I P address) योजकनाम वा :',
-'sp-contributions-toponly' => 'समà¥\8dपादनानाà¤\82 à¤\95à¥\87वलà¤\82 à¤¨à¥\82तनातमा आवलिः दृश्यताम्',
+'sp-contributions-toponly' => 'समà¥\8dपादनानाà¤\82 à¤¨à¥\82तनतमा आवलिः दृश्यताम्',
 'sp-contributions-submit' => 'अन्विष्यताम्',
 
 # What links here
 'whatlinkshere' => 'अनेन सह सम्बद्धाः',
 'whatlinkshere-title' => '"$1" सम्बद्धानि पृष्ठानि',
 'whatlinkshere-page' => 'पृष्ठम्:',
-'linkshere' => "'''[[:$1]]''' इत्यनेन सह अधोलिखितानां पृष्ठानां परिसन्धिं करोतु:",
+'linkshere' => "'''[[:$1]]''' इत्यनेन सह अधो लिखितानां पृष्ठानां परिसन्धिं करोतु:",
 'nolinkshere' => "'''[[:$1]]''' इत्यनेन सह न किमपि पृष्ठं परिसन्धितम्",
 'nolinkshere-ns' => "चितनामस्थानात्  '''[[:$1]]''' इत्येनं योजनयोग्यं पुटं नास्ति  ।",
 'isredirect' => 'अनुप्रेषण-पृष्ठम्',
 'istemplate' => 'अन्यलेखभागः (transclusion)',
 'isimage' => 'सञ्चिकासम्बन्धः',
 'whatlinkshere-prev' => '{{PLURAL:$1|पुरस्तात् (previous) $1}}',
-'whatlinkshere-next' => '{{PLURAL:$1|परसà¥\8dतात् $1}}',
+'whatlinkshere-next' => '{{PLURAL:$1|à¤\85à¤\97à¥\8dरिमम् $1}}',
 'whatlinkshere-links' => '← परिसन्धयः',
-'whatlinkshere-hideredirs' => '$1 पुनर्निर्दिष्टानि',
-'whatlinkshere-hidetrans' => '$1 अन्यलेखभागः (transclusions)',
-'whatlinkshere-hidelinks' => '$1 à¤ªà¤°à¤¿à¤¸à¤¨à¥\8dधिः',
+'whatlinkshere-hideredirs' => '$1 पुनर्निर्दिष्टानि पृष्ठानि',
+'whatlinkshere-hidetrans' => '$1 à¤\85नà¥\8dयलà¥\87à¤\96भाà¤\97ाà¤\83 (transclusions)',
+'whatlinkshere-hidelinks' => '$1 à¤ªà¤°à¤¿à¤¸à¤¨à¥\8dधयः',
 'whatlinkshere-hideimages' => '$1 चित्रपरिसन्धिः',
 'whatlinkshere-filters' => 'शोधनी',
 
@@ -2559,7 +2572,7 @@ $2 द्वारा सम्पादितां अन्तिमावृ
 'blocklink' => 'अवरुद्ध्यताम्',
 'unblocklink' => 'अवरोधः निरस्त्यताम्',
 'change-blocklink' => 'अवरोधः परिवर्त्यताम्',
-'contribslink' => 'यà¥\8bà¤\97दानमà¥\8d',
+'contribslink' => 'यà¥\8bà¤\97दानानि',
 'emaillink' => 'विद्युन्मानपत्रं प्रेषयतु ।',
 'autoblocker' => 'भवतः ऐपि सङ्केतः स्वयम् अवरुद्धः यः सद्यः काले एव [[User:$1|$1]]" इत्यनेन उपयुक्तः । 
 $1 इत्यस्य अवरोधस्य कारणं तु "$2" अस्ति ।',
@@ -2837,34 +2850,34 @@ $2 इति प्रकारस्य अवरोधं कर्तुं 
 'tooltip-pt-anontalk' => 'एतस्मात् ऐपिसङ्केतात् सम्पादनस्य परिचर्चा ।',
 'tooltip-pt-preferences' => 'भवतः/भवत्याः इष्टतमानि',
 'tooltip-pt-watchlist' => 'भवतः/भवत्याः निरीक्षासूच्यां विद्यमानानां पृष्ठानाम् आवलिः',
-'tooltip-pt-mycontris' => 'भवतà¤\83/भवतà¥\8dयाà¤\83 à¤¯à¥\8bà¤\97दानसà¥\8dय आवलिः',
+'tooltip-pt-mycontris' => 'भवतà¤\83/भवतà¥\8dयाà¤\83 à¤¯à¥\8bà¤\97दानानामà¥\8d आवलिः',
 'tooltip-pt-login' => 'सम्प्रवेशाय प्रोत्सहामहे । परन्तु सम्प्रवेशः ऐच्छिकः ।',
 'tooltip-pt-logout' => 'निर्गमनम्',
-'tooltip-ca-talk' => 'पà¥\83षà¥\8dठाऽनà¥\8dतरà¥\8dà¤\97ताय à¤µà¤¿à¤·à¤¯à¤¾à¤¯ चर्चा',
+'tooltip-ca-talk' => 'विषयसहितानाà¤\82 à¤ªà¥\83षà¥\8dठानाà¤\82 चर्चा',
 'tooltip-ca-edit' => 'इदं पृष्ठं सम्पादयितुं शक्यते । रक्षणात्पूर्वं कृपया प्राग्दृश्यं दृश्यताम् ।',
 'tooltip-ca-addsection' => 'नूतनविभागः आरभ्यताम्',
-'tooltip-ca-viewsource' => 'à¤\87दà¤\82 à¤ªà¥\83षà¥\8dठà¤\82 à¤¸à¤\82रà¤\95à¥\8dषितà¤\82 à¤µà¤¿à¤¦à¥\8dयतà¥\87 à¥¤ à¤\85सà¥\8dय à¤¸à¥\8dरà¥\8bतà¤\82 द्रष्टुं शक्यते ।',
+'tooltip-ca-viewsource' => 'à¤\87दà¤\82 à¤ªà¥\83षà¥\8dठà¤\82 à¤¸à¤\82रà¤\95à¥\8dषितà¤\82 à¤µà¤¿à¤¦à¥\8dयतà¥\87 à¥¤ à¤\85सà¥\8dय à¤¸à¥\8dरà¥\8bतà¤\83 द्रष्टुं शक्यते ।',
 'tooltip-ca-history' => 'अस्य पृष्ठस्य पुरातनाऽऽवृत्तिः',
 'tooltip-ca-protect' => 'इदं पृष्ठं संरक्ष्यताम्',
 'tooltip-ca-unprotect' => 'अस्य पुटास्य सुरक्षां परिवर्तयतु ।',
 'tooltip-ca-delete' => 'इदं पृष्ठम् अपाक्रियताम्',
 'tooltip-ca-undelete' => 'अस्य पुटस्य अपमर्जनात् पूर्वम् अस्य सम्पादनानि पुनस्थापयतु ।',
-'tooltip-ca-move' => 'à¤\85सà¥\8dय à¤ªà¥\83षà¥\8dठसà¥\8dय à¤¨à¤¾à¤® परिवर्त्यताम्',
+'tooltip-ca-move' => 'à¤\85सà¥\8dय à¤ªà¥\83षà¥\8dठसà¥\8dय à¤¶à¥\80रà¥\8dषà¤\95à¤\82 परिवर्त्यताम्',
 'tooltip-ca-watch' => 'इदं पृष्ठं भवतः/भवत्याः अवेक्षणावल्यां योज्यताम्',
 'tooltip-ca-unwatch' => 'भवतः/भवत्याः अवेक्षणसूच्याः इदं पृष्ठं निष्कास्यताम्',
 'tooltip-search' => '{{SITENAME}} अन्विष्यताम्',
 'tooltip-search-go' => 'समानशिरोनामयुक्तं पृष्ठं विद्यते चेत् तत्र गम्यताम्',
-'tooltip-search-fulltext' => 'à¤\8fनà¤\82 à¤µà¤¾à¤\95à¥\8dयाà¤\82शà¤\82 à¤ªà¥\83षà¥\8dठà¥\87षà¥\81 अन्विष्यताम्',
+'tooltip-search-fulltext' => 'पà¥\83षà¥\8dठà¥\87षà¥\81 à¤\8fषà¤\83 à¤µà¤¾à¤\95à¥\8dयाà¤\82शà¤\83 अन्विष्यताम्',
 'tooltip-p-logo' => 'मुख्यपृष्ठं गम्यताम्',
 'tooltip-n-mainpage' => 'मुख्यपृष्ठं गम्यताम्',
 'tooltip-n-mainpage-description' => 'मुख्यपृष्ठं गम्यताम्',
-'tooltip-n-portal' => 'तà¥\8dवया à¤ªà¥\8dरà¤\95लà¥\8dपविषयà¥\87 à¤\95िà¤\82 à¤\95रà¥\8dतà¥\81à¤\82 à¤¶à¤\95à¥\8dयतà¥\87, à¤\95à¥\81तà¤\83 साहाय्यं प्राप्तव्यम्',
+'tooltip-n-portal' => 'तà¥\8dवया à¤ªà¥\8dरà¤\95लà¥\8dपविषयà¥\87 à¤\95िà¤\82 à¤\95रà¥\8dतà¥\81à¤\82 à¤¶à¤\95à¥\8dयतà¥\87, à¤\95à¥\81थà¤\82 साहाय्यं प्राप्तव्यम्',
 'tooltip-n-currentevents' => 'वर्तमानप्रसङ्गानां पृष्ठभूमिका प्राप्यताम्',
-'tooltip-n-recentchanges' => 'सदà¥\8dयपरिवर्तनानाम् आवलिः',
+'tooltip-n-recentchanges' => 'नवà¥\80नपरिवर्तनानाम् आवलिः',
 'tooltip-n-randompage' => 'अशृङ्खलं (random) पृष्ठं गम्यताम्',
-'tooltip-n-help' => 'à¤\85नà¥\8dवà¥\87षणसà¥\8dथानम्',
+'tooltip-n-help' => 'à¤\85नà¥\8dवà¥\87षणसà¥\8dथलम्',
 'tooltip-t-whatlinkshere' => 'अत्र सम्बद्धानां परिसन्धितानां विकि-पृष्ठानाम् आवलिः',
-'tooltip-t-recentchangeslinked' => 'à¤\8fततà¥\8dपà¥\83षà¥\8dठसमà¥\8dबदà¥\8dधà¥\87षà¥\81 à¤ªà¥\83षà¥\8dठà¥\87षà¥\81 à¤¸à¤¦à¥\8dयà¤\9cातानि परिवर्तनानि',
+'tooltip-t-recentchangeslinked' => 'à¤\8fततà¥\8dपà¥\83षà¥\8dठसमà¥\8dबदà¥\8dधà¥\87षà¥\81 à¤ªà¥\83षà¥\8dठà¥\87षà¥\81 à¤\9cातानि à¤¨à¤µà¥\80नपरिवर्तनानि',
 'tooltip-feed-rss' => 'अस्मै पृष्ठाय आर-एस-एस-पूरणम्',
 'tooltip-feed-atom' => 'अस्मै पृष्ठाय अणुपूरणम्',
 'tooltip-t-contributions' => 'अस्य योजकस्य योगदानानाम् आवलिः',
@@ -2873,20 +2886,20 @@ $2 इति प्रकारस्य अवरोधं कर्तुं 
 'tooltip-t-specialpages' => 'सर्वेषां विशिष्टपृष्ठानाम् आवलिः',
 'tooltip-t-print' => 'अस्य पृष्ठस्य मुद्रणयोग्या आवृत्तिः',
 'tooltip-t-permalink' => 'पृष्ठस्यास्य स्थायिपरिसन्धिः',
-'tooltip-ca-nstab-main' => 'à¤\86नà¥\8dतरà¥\8dविषयà¤\95ं पृष्ठं पश्यतु',
+'tooltip-ca-nstab-main' => 'विषययà¥\81à¤\95à¥\8dतं पृष्ठं पश्यतु',
 'tooltip-ca-nstab-user' => 'योजकपृष्ठं दृश्यताम्',
 'tooltip-ca-nstab-media' => 'माध्यमपुटम् अवलोकयतु ।',
-'tooltip-ca-nstab-special' => 'à¤\87दमà¥\87à¤\95à¤\82 à¤µà¤¿à¤¶à¤¿à¤·à¥\8dà¤\9fà¤\82 à¤ªà¥\83षà¥\8dठमà¥\8d, भवान्/भवती इदं पृष्ठं सम्पादयितुं नार्हति ।',
+'tooltip-ca-nstab-special' => 'à¤\87दमà¥\87à¤\95à¤\82 à¤µà¤¿à¤¶à¤¿à¤·à¥\8dà¤\9fà¤\82 à¤ªà¥\83षà¥\8dठà¤\82, भवान्/भवती इदं पृष्ठं सम्पादयितुं नार्हति ।',
 'tooltip-ca-nstab-project' => 'प्रकल्पपृष्ठं दृश्यताम्',
 'tooltip-ca-nstab-image' => 'सञ्चिकापृष्ठं दृश्यताम्',
 'tooltip-ca-nstab-mediawiki' => 'तन्त्रसन्देशान् अवलोकयतु ।',
 'tooltip-ca-nstab-template' => 'फलकं दृश्यताम्',
 'tooltip-ca-nstab-help' => 'साहाय्यपुटम् अवलोकयतु ।',
 'tooltip-ca-nstab-category' => 'वर्गाणां पृष्ठं दृश्यताम्',
-'tooltip-minoredit' => 'लà¤\98à¥\81परिवरà¥\8dतनतà¥\8dवà¥\87न à¤\87दà¤\82 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनम् अङ्क्यताम्',
+'tooltip-minoredit' => 'लà¤\98à¥\81समà¥\8dपादनतà¥\8dवà¥\87न à¤\87दà¤\82 à¤¸à¤®à¥\8dपादनम् अङ्क्यताम्',
 'tooltip-save' => 'परिवर्तनानि रक्ष्यन्ताम्',
 'tooltip-preview' => 'भवता/भवत्या कृतानां परिवर्तनानां प्राग्दृश्यं दृश्यताम्, रक्षणात्पूर्वं कृपया इदम् उपयुज्यताम्।',
-'tooltip-diff' => 'भवता/भवतà¥\8dया à¤\85तà¥\8dर à¤\95à¥\83तानि à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनानि द्रष्टुं शक्यते',
+'tooltip-diff' => 'भवता/भवतà¥\8dया à¤\95à¥\83तानि à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनानि à¤\85तà¥\8dर द्रष्टुं शक्यते',
 'tooltip-compareselectedversions' => 'पृष्ठस्य द्वयोः चितयोः आवृत्त्योः भेदः दृश्यताम्',
 'tooltip-watch' => 'इदं पृष्ठं भवतः/भवत्याः अवेक्षणावल्यां योज्यताम्',
 'tooltip-watchlistedit-normal-submit' => 'शीर्षकानि अपनयतु ।',
@@ -2894,9 +2907,9 @@ $2 इति प्रकारस्य अवरोधं कर्तुं 
 'tooltip-recreate' => 'एतत्पुटं पूर्वमेव अपमर्जितः अतः पुन सृजतु ।',
 'tooltip-upload' => 'उत्तारणम् आरभताम्',
 'tooltip-rollback' => '"प्रत्याहरणम् (roll back)" इत्येतत् अन्तिमसम्पादकस्य अन्तिमयोगदानं निराकरोति ।',
-'tooltip-undo' => '"पूर्ववत्" इति अन्तिमसम्पादनम् अपाकरोति, सम्पादनप्रारूपं प्राग्दृश्यरूपेण उद्घाटयति, नवीनसम्पादनान्तरं सम्पादनपृष्ठं प्राग्दृश्यत्वेन प्रदर्शयति च । 
+'tooltip-undo' => '\'"पूर्ववत्"\' इति अन्तिमसम्पादनम् अपाकरोति, सम्पादनप्रारूपं प्राग्दृश्यरूपेण उद्घाटयति, नवीनसम्पादनानन्तरं सम्पादनपृष्ठं प्राग्दृश्यत्वेन प्रदर्शयति च । 
 
-à¤\85सà¥\8dय à¤¸à¤¾à¤°à¤¾à¤\82शà¥\87 à¤\85पाà¤\95रणसà¥\8dय à¤\95ारणमपि à¤²à¥\87खितुं शक्यते ।',
+à¤\85सà¥\8dय à¤¸à¤¾à¤°à¤¾à¤\82शà¥\87 à¤\85पाà¤\95रणसà¥\8dय à¤\95ारणमपि à¤²à¤¿खितुं शक्यते ।',
 'tooltip-preferences-save' => 'आद्यताः रक्षतु ।',
 'tooltip-summary' => 'सङ्क्षिप्तसारांशः योज्यताम्',
 
@@ -3054,13 +3067,13 @@ $2 इति प्रकारस्य अवरोधं कर्तुं 
 # Bad image list
 'bad_image_list' => 'अत्र प्रारूपं एवं भवेत् -
 
-à¤\95à¥\87वलमà¥\8d à¤\86वलà¥\8dयनà¥\8dतरà¥\8dà¤\97ताà¤\83 à¤µà¤¿à¤·à¤¯à¤¾à¤\83 (* à¤\87ति à¤\9aिनà¥\8dहात् आरभमाणाः पङ्क्तयः) आकलिताः ।
+à¤\95à¥\87वलमà¥\8d à¤\86वलà¥\8dयनà¥\8dतरà¥\8dà¤\97ताà¤\83 à¤µà¤¿à¤·à¤¯à¤¾à¤\83 (* à¤\87ति à¤\9aिहà¥\8dनात् आरभमाणाः पङ्क्तयः) आकलिताः ।
 
 पङ्क्त्यां विद्यमाना प्रथमा परिसन्धिः (link) दोषपूर्णया सञ्चिकया सह परिसन्धिता (linked) स्यादेव । तस्यामेव पङ्क्तौ उत्तरोत्तरं विद्यमानाः परिसन्धयः अपवादिताः ज्ञेयाः, अर्थात् अत्र तेषां पृष्ठानाम् आवलिरेव भविष्यति, येषु एषा सञ्चिका विद्यते ।',
 
 # Metadata
 'metadata' => 'प्रदत्तांशः (दत्तांशविषयकदत्तांशः अयम्)',
-'metadata-help' => 'à¤\85नà¥\87न à¤¸à¤¹ à¤µà¤¿à¤¸à¥\8dतà¥\83तमाहितà¥\80 सल्लग्ना अस्ति, प्रतिबिम्बग्राहकेन (scanner) अङ्कीयछायाचित्रग्राहकेन (digital camera ) वा अस्याः सञ्चिकायाः रचना जाता स्यात् । 
+'metadata-help' => 'à¤\85नà¥\87न à¤¸à¤¹ à¤µà¤¿à¤¸à¥\8dतà¥\83तसà¥\82à¤\9aना सल्लग्ना अस्ति, प्रतिबिम्बग्राहकेन (scanner) अङ्कीयछायाचित्रग्राहकेन (digital camera ) वा अस्याः सञ्चिकायाः रचना जाता स्यात् । 
 
 एषा सञ्चिका यदि मूलावस्थात् परिवर्त्यते, तर्हि अत्रस्थानि कानिचित् विवरणानि परिवर्तितसञ्चिकायां पूर्णतया न दृश्यन्ते ।',
 'metadata-expand' => 'विस्तारितानि विवरणानि दर्शयतु',
@@ -3618,14 +3631,14 @@ $5
 # Watchlist editing tools
 'watchlisttools-view' => 'योग्यपरिवर्तनानि दृश्यन्ताम्',
 'watchlisttools-edit' => 'अवेक्षणाऽऽवलिः दृश्यतां, सम्पाद्यतां च',
-'watchlisttools-raw' => 'à¤\85पà¤\95à¥\8dवामà¥\8d à¤\85वलà¥\8bà¤\95नावलà¥\80à¤\82 à¤¸à¤®à¥\8dपादयतà¥\81 à¥¤',
+'watchlisttools-raw' => 'विवरणरहिता à¤\85वलà¥\8bà¤\95नावलिà¤\83 à¤¸à¤®à¥\8dपादà¥\8dयतामà¥\8d',
 
 # Signatures
 'signature' => '[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|अम्भाषणम्]])',
 
 # Core parser functions
 'unknown_extension_tag' => 'अज्ञातं वर्तमानसूत्रम् $1',
-'duplicate-defaultsort' => '\'\'\'पà¥\82रà¥\8dवसà¥\82à¤\9aना\'\'\' "$1" à¤\87ति à¤ªà¥\81रातनà¤\82 à¤®à¥\82लà¤\95à¥\8dरमाà¤\99à¥\8dà¤\95नà¤\82 à¤\95à¥\81डà¥\8dमलà¤\82 à¤µà¤¿à¤¹à¤¾à¤¯  "$2" à¤\87ति à¤¨à¤µà¥\80नà¤\82 à¤®à¥\82लà¤\95à¥\8dरमाà¤\99à¥\8dà¤\95नà¤\95à¥\81णà¥\8dडलतà¥\8dवà¥\87न à¤¸à¥\8dवयमà¥\87व à¤¨à¤¯à¤¤à¤¿ à¤\8fततà¥\8d à¥¤',
+'duplicate-defaultsort' => '\'\'\'पूर्वसूचना\'\'\' "$1" इति पुरातनं मूलक्रमाङ्कनकुड्मलं विहाय  "$2" इति नवीनं मूलक्रमाङ्कनकुण्डलत्वेन स्वयमेव नयति एतत् ।',
 
 # Special:Version
 'version' => 'आवृत्तिः',
@@ -3694,10 +3707,10 @@ $5
 # External image whitelist
 'external_image_whitelist' => '# एषा पङ्क्तिः न परिवर्त्यताम् <pre>
 # अत्र केवलं सामान्यचिह्नानाम् उपयोगः क्रियताम् (यथा // इत्यनयोः मध्ये स्थापनीयः भागः)
-# à¤\87तà¥\8dयसà¥\8dय à¤¬à¤¹à¤¿à¤¸à¥\8dतातà¥\8d à¤\86à¤\97तानाà¤\82 à¤\9aितà¥\8dराणाà¤\82 à¤¸à¤¾à¤°à¥\8dवसà¤\99à¥\8dà¤\95à¥\87तà¥\88à¤\83 (U R L) à¤¸à¤¹ तुलना भवति
+# à¤¬à¤¹à¤¿à¤¸à¥\8dतातà¥\8d à¤\86à¤\97तानाà¤\82 à¤\9aितà¥\8dराणाà¤\82 à¤¸à¤¾à¤°à¥\8dवसà¤\99à¥\8dà¤\95à¥\87तà¥\88à¤\83 (U R L) à¤¸à¤¹ à¤\8fतà¥\87षाà¤\82 तुलना भवति
 # यत् चित्रम् अनुकूलं भवति तत् योज्यते, अन्यथा तस्य चित्रस्य परिसन्धिः योज्यते । 
-# à¤ªà¤\99à¥\8dà¤\95तयà¤\83 # à¤\87तसà¥\8dमातà¥\8d à¤\86रभनà¥\8dतà¥\87 à¥¤ à¤\8fततà¥\8d à¤¸à¥\82à¤\9aना à¤\87ति à¤\89à¤\9aà¥\8dयतà¥\87 à¥¤ 
-# अत्र सर्वं पक्षविगुणं case-insensitive वर्तते 
+# à¤¯à¤¾à¤\83 à¤ªà¤\99à¥\8dà¤\95à¥\8dतयà¤\83 # à¤\87तà¥\8dयसà¥\8dमातà¥\8d à¤\86रभनà¥\8dतà¥\87, à¤¤à¤¾à¤\83 à¤¸à¥\82à¤\9aनाà¤\83
+# अत्र सर्वं पक्षविगुणं (case-insensitive) वर्तते 
 # सर्वान् regex भागान् अस्याः पङ्क्तेः उपरि स्थापयतु । एतां पङ्क्तिम् एवमेव स्थापयतु </pre>',
 
 # Special:Tags
index 136a516..236ec4c 100644 (file)
@@ -1818,6 +1818,11 @@ Input: contenttype/subtype, e.g. <code>image/jpeg</code>.',
 # List redirects
 'listredirects' => 'Leet o reguidals',
 
+# List duplicated files special page
+'listduplicatedfiles' => 'Leet o files wi dupleecates',
+'listduplicatedfiles-summary' => 'This is ae leet o files whaur the maist recynt version o the file is ae duplicate o the maist recynt version o some ither file. Yinlie local files ar conseederit.',
+'listduplicatedfiles-entry' => '[[:File:$1|$1]] haes [[$3|{{PLURAL:$2|ae dupleecate|$2 dupleecates}}]].',
+
 # Unused templates
 'unusedtemplates' => 'Templates that arena uised',
 'unusedtemplatestext' => "This page leets aw pages in the {{ns:template}} namespace that's naw incuidit in anither page. Mynd n check fer ither links til the templates afore delytin thaim.",
index e3bb7cd..f670c63 100644 (file)
@@ -2042,6 +2042,11 @@ Vnesite: vrstavsebine/podvrsta, npr. <code>image/jpeg</code>.',
 # List redirects
 'listredirects' => 'Seznam preusmeritev',
 
+# List duplicated files special page
+'listduplicatedfiles' => 'Seznam datotek z dvojniki',
+'listduplicatedfiles-summary' => 'Seznam datotek, kjer je najnovejša različica datoteke dvojnik najnovejše različice neke druge datoteke. Upoštevamo samo lokalne datoteke.',
+'listduplicatedfiles-entry' => '[[:File:$1|$1]] ima [[$3|{{PLURAL:$2|dvojnik|$2 dvojnika|$2 dvojnike|$2 dvojnikov}}]].',
+
 # Unused templates
 'unusedtemplates' => 'Osirotele predloge',
 'unusedtemplatestext' => 'Naslednji seznam navaja vse strani v imenskem prostoru {{ns:template}}, ki niso vključene v nobeno stran.
index 0e60f09..4b3e87b 100644 (file)
@@ -2337,9 +2337,9 @@ $1',
 'protectedtitles-summary' => 'На овој страници се налази списак тренутно заштићених наслова. За списак тренутно заштићених страница види [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].',
 'protectedtitlesempty' => 'Нема заштићених наслова с овим параметрима.',
 'listusers' => 'Списак корисника',
-'listusers-editsonly' => 'прикажи само кориснике који су уређивали',
-'listusers-creationsort' => 'поређај по датуму стварања',
-'listusers-desc' => 'сортирај у опадајућем редоследу',
+'listusers-editsonly' => 'Ð\9fрикажи само кориснике који су уређивали',
+'listusers-creationsort' => 'Ð\9fоређај по датуму стварања',
+'listusers-desc' => 'Сортирај у опадајућем редоследу',
 'usereditcount' => '$1 {{PLURAL:$1|измена|измене|измена}}',
 'usercreated' => '{{GENDER:$3|је направио|је направила|је направио}} дана $1 у $2',
 'newpages' => 'Нове странице',
index 4610467..f30eb87 100644 (file)
@@ -2192,9 +2192,9 @@ Sada je preusmerenje na [[$2]].',
 'protectedtitles' => 'Zaštićeni naslovi',
 'protectedtitlesempty' => 'Nema zaštićenih naslova s ovim parametrima.',
 'listusers' => 'Spisak korisnika',
-'listusers-editsonly' => 'prikaži samo korisnike koji su uređivali',
-'listusers-creationsort' => 'poređaj po datumu stvaranja',
-'listusers-desc' => 'sortiraj u opadajućem redosledu',
+'listusers-editsonly' => 'Prikaži samo korisnike koji su uređivali',
+'listusers-creationsort' => 'Poređaj po datumu stvaranja',
+'listusers-desc' => 'Sortiraj u opadajućem redosledu',
 'usereditcount' => '$1 {{PLURAL:$1|izmena|izmene|izmena}}',
 'usercreated' => '{{GENDER:$3|je napravio|je napravila|je napravio}} dana $1 u $2',
 'newpages' => 'Nove stranice',
index 4de2191..2633718 100644 (file)
@@ -2155,6 +2155,11 @@ Kanske vill du redigera beskrivningen på dess [$2 filbeskrivningssida] där.',
 # List redirects
 'listredirects' => 'Lista över omdirigeringar',
 
+# List duplicated files special page
+'listduplicatedfiles' => 'Lista över filer med dubbletter',
+'listduplicatedfiles-summary' => 'Detta är en lista över filer där den senaste versionen av filen är en dubblett av den senaste versionen av någon annan fil. Endast lokala filer behandlas.',
+'listduplicatedfiles-entry' => '[[:File:$1|$1]] har [[$3|{{PLURAL:$2|en dubblett|$2 dubbletter}}]].',
+
 # Unused templates
 'unusedtemplates' => 'Oanvända mallar',
 'unusedtemplatestext' => 'Denna sida listar alla sidor i {{ns:template}}-namnrymden som inte inkluderas på någon annan sida.
index e97d307..40fc31c 100644 (file)
@@ -236,8 +236,8 @@ $messages = array(
 'tog-useeditwarning' => 'เตือนฉัน เมื่อฉันกำลังจะออกจากหน้าแก้ไขโดยมีข้อมูลที่ยังไม่ได้บันทึก',
 'tog-prefershttps' => 'ใช้การเชื่อมต่อปลอดภัยทุกครั้งเมื่อล็อกอิน',
 
-'underline-always' => 'à¹\80สมอ',
-'underline-never' => 'ไม่เคย',
+'underline-always' => 'à¸\97ุà¸\81à¸\84รัà¹\89à¸\87',
+'underline-never' => 'ไม่',
 'underline-default' => 'ค่าโดยปริยายของหน้าตาหรือเบราว์เซอร์',
 
 # Font style option in Special:Preferences
@@ -637,6 +637,7 @@ $1',
 'gotaccountlink' => 'ล็อกอิน',
 'userlogin-resetlink' => 'ลืมรายละเอียดล็อกอินของคุณหรือ',
 'userlogin-resetpassword-link' => 'ลืมรหัสผ่านหรือ',
+'userlogin-helplink2' => 'วิธีใช้เรื่องการล็อกอิน',
 'userlogin-loggedin' => 'คุณล็อกอินในชื่อ {{GENDER:$1|$1}} แล้ว
 ใช้แบบด้านล่างเพื่อล็อกอินเป็นอีกผู้ใช้หนึ่ง',
 'userlogin-createanother' => 'สร้างอีกบัญชี',
@@ -722,6 +723,7 @@ $1',
 'createacct-another-realname-tip' => 'ไม่จำเป็นต้องใส่ชื่อจริง
 หากคุณเลือกใส่ชื่อจริง จะใช้เพื่อแสดงที่มาสำหรับงานของตน',
 'pt-login' => 'ล็อกอิน',
+'pt-login-button' => 'ล็อกอิน',
 'pt-createaccount' => 'สร้างบัญชี',
 'pt-userlogout' => 'ล็อกเอาต์',
 
@@ -755,6 +757,9 @@ $1',
 'resetpass-abort-generic' => 'การเปลี่ยนรหัสผ่านถูกส่วนขยายยกเลิก',
 'resetpass-expired' => 'รหัสผ่านของคุณหมดอายุแล้ว โปรดตั้งรหัสผ่านใหม่เพื่อล็อกอิน',
 'resetpass-expired-soft' => 'รหัสผ่านของคุณหมดอายุแล้วและจำเป็นต้องตั้งใหม่ โปรดเลือกรหัสผ่านใหม่ขณะนี้ หรือคลิก "{{int:resetpass-submit-cancel}}" เพื่อตั้งใหม่ทีหลัง',
+'resetpass-validity-soft' => 'รหัสผ่านของคุณไม่สมเหตุสมผล: $1
+
+โปรดเลือดรหัสผ่านใหม่ในขณะนี้ หรือคลิก "{{int:resetpass-submit-cancel}}" เพื่อตั้งใหม่ทีหลัง',
 
 # Special:PasswordReset
 'passwordreset' => 'ตั้งรหัสผ่านใหม่',
@@ -1068,7 +1073,7 @@ $2
 'page_first' => 'แรกสุด',
 'page_last' => 'ท้ายสุด',
 'histlegend' => 'วิธีเปรียบเทียบ: เลือกปุ่มของรุ่นสองรุ่นที่ต้องการเปรียบเทียบ และกดปุ่มเริ่มเปรียบเทียบด้านล่าง<br />
-คำอธิบาย: (ป) = เทียบกับรุ่นปัจจุบัน, (ก) = เทียบกับรุ่นก่อนหน้า, ล = การแก้ไขเล็กน้อย',
+คำอธิบาย: <strong>({{int:cur}})</strong> = เทียบกับรุ่นปัจจุบัน, <strong>({{int:last}})</strong> = เทียบกับรุ่นก่อนหน้า, <strong>{{int:minoreditletter}}</strong> = การแก้ไขเล็กน้อย',
 'history-fieldset-title' => 'ค้นหาประวัติ',
 'history-show-deleted' => 'เฉพาะที่ถูกลบ',
 'histfirst' => 'แรกสุด',
@@ -1124,6 +1129,10 @@ $2
 'revdelete-show-file-submit' => 'ใช่',
 'revdelete-selected' => "'''{{PLURAL:$2|รุ่นการปรับปรุงที่ถูกเลือก|รุ่นการปรับปรุงที่ถูกเลือก}}ของ [[:$1]] :'''",
 'logdelete-selected' => "'''{{PLURAL:$1|เหตุการณ์ปูมที่เลือก|เหตุการณ์ปูมที่เลือก}} :'''",
+'revdelete-text-text' => 'รุ่นที่ถูกลบจะยังปรากฏในประวัติหน้า แต่สาธารณะจะไม่สามารถเข้าถึงเนื้อหาบางส่วนได้',
+'revdelete-text-file' => 'รุ่นที่ถูกลบจะยังปรากฏในประวัติไฟล์ แต่สาธารณะจะไม่สามารถเข้าถึงเนื้อหาบางส่วนได้',
+'logdelete-text' => 'รายการปูมที่ถูกลบจะยังปรากฏในปูม แต่สาธารณะจะไม่สามารถเข้าถึงเนื้อหาบางส่วนได้',
+'revdelete-text-others' => 'ผู้ดูแลระบบคนอื่นบน {{SITENAME}} จะยังสามารถเข้าถึงเนื้อหาที่ถูกซ่อน และสามารถกู้คืนได้อีกผ่านอินเตอร์เฟซเดียวกันนี้ ยกเว้นตั้งข้อจำกัดเพิ่มเติม',
 'revdelete-confirm' => 'กรุณายืนยันว่าคุณมีเจตนาลบจริง และเข้าใจผลลัพธ์ และกระทำภายใต้[[{{MediaWiki:Policy-url}}|นโยบาย]]',
 'revdelete-suppress-text' => "การระงับควรใช้'''เฉพาะ'''กรณีต่อไปนี้:
 * ข้อมูลที่อาจหมิ่นประมาท
@@ -1238,7 +1247,8 @@ $1",
 'nextn-title' => '$1 ผลลัพธ์ถัดไป',
 'shown-title' => 'แสดง $1 ผลลัพธ์ต่อหน้า',
 'viewprevnext' => 'ดู ($1 {{int:pipe-separator}} $2) ($3)',
-'searchmenu-exists' => "'''มีหน้าชื่อ \"[[:\$1]]\" บนวิกินี้'''",
+'searchmenu-exists' => '<strong>มีหน้าชื่อ "[[:$1]]" บนวิกินี้</strong>
+{{PLURAL:$2|0=|ดูผลการค้นหาอื่นที่พบเพิ่มเติม}}',
 'searchmenu-new' => '<strong>สร้างหน้า "[[:$1]]" บนวิกินี้!</strong> {{PLURAL:$2|0=|ดูหน้าที่พบด้วยการค้นหาของคุณ|ดูผลการค้นหาที่พบเพิ่มเติม}}',
 'searchprofile-articles' => 'หน้าเนื้อหา',
 'searchprofile-project' => 'คำอธิบายและหน้าโครงการ',
@@ -1258,7 +1268,7 @@ $1",
 'search-file-match' => '(จับคู่เนื้อหาไฟล์)',
 'search-suggest' => 'คุณอาจหมายถึง: $1',
 'search-interwiki-caption' => 'โครงการพี่น้อง',
-'search-interwiki-default' => '$1 ผลลัพธ์:',
+'search-interwiki-default' => 'ผลลัพธ์จาก $1 :',
 'search-interwiki-more' => '(เพิ่มเติม)',
 'search-relatedarticle' => 'สัมพันธ์',
 'searcheverything-enable' => 'ค้นหาในทุกเนมสเปซ',
@@ -1624,7 +1634,7 @@ $1",
 'recentchangeslinked-title' => 'การปรับปรุงที่โยงมายัง "$1"',
 'recentchangeslinked-summary' => "หน้านี้เป็นรายการปรับปรุงล่าสุดของหน้าที่ถูกโยงไป (หรือไปยังหน้าต่าง ๆ ของหมวดหมู่ที่กำหนด) โดยหน้าที่อยู่ใน[[Special:Watchlist|รายการเฝ้าดู]]แสดงเป็น'''ตัวหนา'''",
 'recentchangeslinked-page' => 'ชื่อหน้า:',
-'recentchangeslinked-to' => 'à¹\81สà¸\94à¸\87à¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87à¸\97ีà¹\88à¹\80à¸\8aืà¹\88อมà¹\82ยà¸\87มายัà¸\87หà¸\99à¹\89าà¸\99ีà¹\89แทน',
+'recentchangeslinked-to' => 'à¹\81สà¸\94à¸\87à¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87à¹\84à¸\9bยัà¸\87หà¸\99à¹\89าà¸\97ีà¹\88à¹\80à¸\8aืà¹\88อมà¹\82ยà¸\87มายัà¸\87หà¸\99à¹\89าà¸\97ีà¹\88ระà¸\9aุแทน',
 
 # Upload
 'upload' => 'อัปโหลดไฟล์',
@@ -1654,7 +1664,7 @@ $1",
 'uploadlogpagetext' => 'ด้านล่างเป็นรายการการอัปโหลดไฟล์ล่าสุด
 ดูภาพรวมที่ [[Special:NewFiles|แกลอรีไฟล์ใหม่]]',
 'filename' => 'ชื่อไฟล์',
-'filedesc' => 'รายละà¹\80อียà¸\94à¹\84à¸\9fลà¹\8c',
+'filedesc' => 'à¸\84วามยà¹\88อ',
 'fileuploadsummary' => 'รายละเอียดไฟล์:',
 'filereuploadsummary' => 'เปลี่ยนแปลงไฟล์:',
 'filestatus' => 'สถานะลิขสิทธิ์:',
@@ -2382,7 +2392,7 @@ $UNWATCHURL
 'protect-locked-dblock' => "ไม่สามารถเปลี่ยนระดับการล็อกได้เนื่องจากฐานข้อมูลถูกล็อก การตั้งค่าปัจจุบันของหน้า '''$1''' คือ:",
 'protect-locked-access' => "บัญชีของคุณไม่ได้รับอนุญาตให้เปลี่ยนแปลงระดับการล็อกหน้า การตั้งค่าปัจจุบันของหน้า '''$1''' คือ:",
 'protect-cascadeon' => 'หน้านี้ถูกล็อกเนื่องจากเป็นส่วนหนึ่งของ{{PLURAL:$1|หน้า|หน้า}}ที่เปิดการล็อกแบบสืบทอด
-à¸\84ุà¸\93สามารà¸\96à¹\80à¸\9bลีà¹\88ยà¸\99ระà¸\94ัà¸\9aà¸\81ารลà¹\87อà¸\81à¹\84à¸\94à¹\89 à¹\81à¸\95à¹\88จะไม่มีผลต่อการล็อกแบบสืบทอด',
+à¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99ระà¸\94ัà¸\9aà¸\81ารลà¹\87อà¸\81à¸\82อà¸\87หà¸\99à¹\89าà¸\99ีà¹\89จะไม่มีผลต่อการล็อกแบบสืบทอด',
 'protect-default' => 'อนุญาตผู้ใช้ทั้งหมด',
 'protect-fallback' => 'อนุญาตเฉพาะผู้ใช้ที่มีสิทธิ "$1"',
 'protect-level-autoconfirmed' => 'อนุญาตเฉพาะผู้ใช้ยืนยันอัตโนมัติ',
@@ -2485,14 +2495,14 @@ $1',
 'blanknamespace' => '(หลัก)',
 
 # Contributions
-'contributions' => 'เรื่องที่ผู้ใช้รายนี้เขียน',
+'contributions' => 'เรื่องที่{{GENDER:$1|ผู้ใช้}}รายนี้เขียน',
 'contributions-title' => 'เรื่องที่เขียนโดย $1',
 'mycontris' => 'เรื่องที่เขียน',
 'contribsub2' => 'สำหรับ {{GENDER:$3|$1}} ($2)',
 'nocontribs' => 'ไม่พบการเปลี่ยนแปลงตรงกับเงื่อนไขเหล่านี้',
 'uctop' => '(ปัจจุบัน)',
-'month' => 'à¸\88าà¸\81เดือน (และก่อนหน้า):',
-'year' => 'à¸\88าà¸\81ปี (และก่อนหน้า):',
+'month' => 'à¸\95ัà¹\89à¸\87à¹\81à¸\95à¹\88เดือน (และก่อนหน้า):',
+'year' => 'à¸\95ัà¹\89à¸\87à¹\81à¸\95à¹\88ปี (และก่อนหน้า):',
 
 'sp-contributions-newbies' => 'แสดงการแก้ไขของบัญชีใหม่เท่านั้น',
 'sp-contributions-newbies-sub' => 'สำหรับบัญชีใหม่',
@@ -2923,7 +2933,7 @@ $1',
 'tooltip-ca-nstab-template' => 'ดูหน้าแม่แบบ',
 'tooltip-ca-nstab-help' => 'ดูหน้าคำอธิบาย',
 'tooltip-ca-nstab-category' => 'ดูหน้าหมวดหมู่',
-'tooltip-minoredit' => 'à¸\81ำหà¸\99à¸\94เป็นการแก้ไขเล็กน้อย',
+'tooltip-minoredit' => 'à¸\97ำà¹\80à¸\84รืà¹\88อà¸\87หมายเป็นการแก้ไขเล็กน้อย',
 'tooltip-save' => 'บันทึกการแก้ไข',
 'tooltip-preview' => 'แสดงตัวอย่างการเปลี่ยนแปลงของคุณ กรุณาใช้คำสั่งนี้ก่อนบันทึก!',
 'tooltip-diff' => 'แสดงการเปลี่ยนการต่อข้อความ',
index c63bd5b..05ef03f 100644 (file)
@@ -478,6 +478,8 @@ Matatagpuan ang isang tala ng mga tamang natatanging pahina sa [[Special:Special
 'databaseerror' => 'Kamalian sa kalipunan ng datos',
 'databaseerror-text' => 'Mayroong kamalian sa pagtanong o pag-query sa database.
 Maaring ipinapahiwatig nito ang depekto o bug sa software.',
+'databaseerror-textcl' => 'May nangyaring depekto sa pag-query ng database.',
+'databaseerror-error' => 'Depekto: $1',
 'laggedslavemode' => "'''Babala:''' Maaaring hindi naglalaman ang pahina ng mga huling dagdag.",
 'readonly' => 'Nakakandado ang kalipunan ng datos',
 'enterlockreason' => 'Maglagay ng dahilan sa pagkakandado, kasama ang taya kung kailan magtatapos ang pagkakandado',
@@ -511,6 +513,7 @@ Maaaring ibinura na ito ng iba.',
 'cannotdelete-title' => 'Hindi maibura ang pahinang "$1"',
 'delete-hook-aborted' => 'Pinigil ng sungkit ang pagbura.
 Walang ibinigay na paliwanag.',
+'no-null-revision' => 'Hindi makalikha ng bagong "null" para sa pahina na "$1"',
 'badtitle' => 'Hindi kanais-nais na pamagat',
 'badtitletext' => 'Ang hiniling na pamagat ng pahina ay hindi katanggap-tanggap, wala, o isang may-maling kawing na pamagat na pangugnayang-wika (interwika) o pangugnayang wiki (interwiki).
 Maaaring naglalaman ito ng isa o higit pang mga panitik (karakter) na hindi maaaring gamitin para sa mga pamagat.',
@@ -523,10 +526,11 @@ Ang mga dato dito ay hindi pa masasariwa sa kasalukuyan.',
 'actionthrottled' => 'Hinadlangan ang gawain',
 'actionthrottledtext' => "Bilang paraang panglaban sa ''spam'', pinigalan kang magawa ang galaw na ito nang maraming ulit sa loob ng maikling panahon, at lumabis ka na sa limitasyong ito.
 Pakisubok na lang ulit pagkaraan ng kaunting mga minuto.",
-'protectedpagetext' => 'Kinandado ang pahinang ito upang mahadlangang ang pagbago.',
+'protectedpagetext' => 'Kinandado ang pahinang ito upang mahadlangang ang pagbago o ibang aksyon.',
 'viewsourcetext' => 'Maaari mong tingnan at kopyahin ang pinagmulan ng pahinang ito:',
 'viewyourtext' => "Matitingnan at makukopya mo ang pinagmulan ng '''mga pagbabago''' papunta sa pahinang ito:",
-'protectedinterface' => "Nagbibigay ang pahinang ito ng tekstong panghangganan (''interface'') para sa sopwer, at ikinandado para maiwasan ang pangaabuso.",
+'protectedinterface' => 'Nagbibigay ang pahinang ito ng tekstong interface para sa software, at ikinandado para maiwasan ang pangaabuso.
+Upang dagdagan o baguhin ang mga salin para sa lahat ng mga wiki, pakigamit ang [//translatewiki.net/ translatewiki.net], ang proyekto para sa lokalisasyon ng MediaWiki.',
 'editinginterface' => "'''Babala:''' Binabago mo ang isang pahinang ginagamit sa pagbibigay ng tekstong panghangganan para sa sopwer.
 Makaaapekto ang mga pagbago sa pahinang ito sa anyo ng hangganang (''interface'') pantagagamit na para sa ibang mga tagagamit sa wiking ito.
 Upang magdagag o magbago ng mga salinwika, isaaalang-alang na lang po ang paggamit ng [//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net], ang proyekto para sa lokalisasyon ng MediaWiki.",
@@ -537,6 +541,8 @@ $2',
 'customjsprotected' => 'Wala kang pahintulot na baguhin ang pahina ng JavaScript na ito, dahil naglalaman ito ng mga katakdaang pansarili ng ibang tagagamit.',
 'mycustomcssprotected' => 'Wala kang pahintulot na baguhin itong pahinang CSS.',
 'mycustomjsprotected' => 'Wala kang pahintulot na baguhin itong pahinang JavaScript.',
+'myprivateinfoprotected' => 'Wala kang pahintulot na baguhin ang iyong pribadong impormasyon.',
+'mypreferencesprotected' => 'Wala kang pahintulot na baguhin ang iyong mga kagustuhan.',
 'ns-specialprotected' => 'Hindi pwedeng baguhin ang mga natatanging pahina.',
 'titleprotected' => "Nakasanggalang ang pamagat na ito mula sa paglikha ni [[User:$1|$1]].
 Ang ibinigay na dahilan ay ''$2''.",
@@ -546,7 +552,8 @@ Ang tagapangasiwang nagkandado nito ay nag-alok ng ganitong paliwanag: "$3".',
 'invalidtitle-knownnamespace' => 'Hindi katanggap-tanggap na pamagat na may puwang na pampangalang "$2" at tekstong "$3"',
 'invalidtitle-unknownnamespace' => 'Hindi katanggap-tanggap na pamagat na mayroong hindi nalalamang bilang na pampuwang ng pangalan na $1 at tekstong "$2"',
 'exception-nologin' => 'Hindi nakalagda',
-'exception-nologin-text' => 'Ang pahina o kilos na ito ay nangangailangan ng paglagda mo sa wiking ito.',
+'exception-nologin-text' => '[[Natatangi:Paglagda_ng_tagagamit|Mag-login]] upang ma-access ang aksyon o pahinang ito.',
+'exception-nologin-text-manual' => '$1 upang ma-access ang pahina o aksyong ito.',
 
 # Virus scanner
 'virus-badscanner' => "Masamang kompigurasyon: hindi kilalang tagahagilap (iskaner) ng birus: ''$1''",
@@ -554,10 +561,9 @@ Ang tagapangasiwang nagkandado nito ay nag-alok ng ganitong paliwanag: "$3".',
 'virus-unknownscanner' => 'hindi kilalang panlaban sa birus:',
 
 # Login and logout pages
-'logouttext' => "'''Nakaalis ka na sa pagkakalagda.'''
+'logouttext' => '<strong>Nakaalis ka na sa pagkaka-login.</strong>
 
-Maaari kang tumuloy sa paggamit ng {{SITENAME}} nang hindi nakikilala (anonimo), o maaaring kang <span class='plainlinks'>[$1 lumagda/tumala muli]</span> bilang kapareho o ibang tagagamit.
-Tandaan na may ilang pahinang maaaring magpatuloy na nagpapakitang parang nakalagda ka pa rin, hanggang sa linisin mo ang iyong baunang pambasa-basa (''browser cache'').",
+Tandaan na may ilang mga pahina na patuloy na nagpapakita na parang hindi ka naka-login, hanggang alisin mo ang iyong <i>browser cache</i>.',
 'welcomeuser' => 'Mabuhay, $1!',
 'welcomecreation-msg' => 'Nilikha na ang iyong kuwenta.
 Huwag kalimutang baguhin ang iyong [[Special:Preferences|mga kagustuhan sa {{SITENAME}}]].',
@@ -565,18 +571,18 @@ Huwag kalimutang baguhin ang iyong [[Special:Preferences|mga kagustuhan sa {{SIT
 'userlogin-yourname' => 'Pangngalan',
 'userlogin-yourname-ph' => 'Ilagay ang iyong Pangalan',
 'createacct-another-username-ph' => 'Ilagay ang Pangalan',
-'yourpassword' => 'Hudyat:',
+'yourpassword' => 'Password:',
 'userlogin-yourpassword' => 'Hudyat',
 'userlogin-yourpassword-ph' => 'Ipasok ang iyong hudyat',
 'createacct-yourpassword-ph' => 'Ilagay ang hudyat (password)',
-'yourpasswordagain' => 'Hudyat mo uli:',
+'yourpasswordagain' => 'Password mo uli:',
 'createacct-yourpasswordagain' => 'Tiyakin ang hudyat',
 'createacct-yourpasswordagain-ph' => 'Muling ilagay ang hudyat (password)',
 'remembermypassword' => 'Tandaan ang paglagda ko sa kompyuter na ito (pinakamarami na ang $1 {{PLURAL:$1|araw|mga araw}})',
 'userlogin-remembermypassword' => 'Panatilihin akong nakalagda',
 'userlogin-signwithsecure' => 'Gumamit ng ligtas na koneksyon',
 'yourdomainname' => 'Dominyo mo:',
-'password-change-forbidden' => 'Hindi mo maaaring palitan ang mga hudyat sa wiking ito.',
+'password-change-forbidden' => 'Hindi mo maaaring palitan ang mga password sa wiking ito.',
 'externaldberror' => 'Maaaring may kamalian sa pagpapatotoo ng kalipunan ng mga dato o kaya hindi ka pinahintulutang isapanahon ng iyong panlabas na kuwenta o patnugutan.',
 'login' => 'Lumagda',
 'nav-login-createaccount' => 'Lumagda / lumikha ng kuwenta',
@@ -595,18 +601,29 @@ Huwag kalimutang baguhin ang iyong [[Special:Preferences|mga kagustuhan sa {{SIT
 'gotaccountlink' => 'Lumagda',
 'userlogin-resetlink' => 'Nakalimutan mo ang iyong mga detalyeng panglagda?',
 'userlogin-resetpassword-link' => 'Nakalimutan ba ang iyong hudyat (password)?',
+'userlogin-helplink2' => 'Tulong sa pag-login',
+'userlogin-loggedin' => 'Naka-login ka na bilang {{GENDER:$1|$1}}. Gamitin ang form sa ibaba upang maka-login bilang ibang tagagamit o user.',
 'userlogin-createanother' => 'Lumikha ng iba pang akawnt',
 'createacct-join' => 'Ilagay ang iyong impormasyon sa ibaba.',
 'createacct-another-join' => 'Ilagay ang impormasyon ng bagong akawnt sa ibaba.',
 'createacct-emailrequired' => 'Direksiyong e-liham:',
-'createaccountmail' => 'Gumamit ng pansamantalang walang-piling hudyat at ipadala ito sa direksiyong e-liham na nakasaad sa ibaba',
+'createacct-emailoptional' => 'Email (hindi kailangan)',
+'createacct-email-ph' => 'Ipasok ang iyong email address',
+'createacct-another-email-ph' => 'Ipasok ang email address',
+'createaccountmail' => 'Gumamit ng pansamantalang random na password at ipadala ito sa email na nakasaad sa ibaba',
 'createacct-realname' => 'Tunay na pangalan (maaaring wala)',
 'createaccountreason' => 'Dahilan:',
 'createacct-reason' => 'Dahilan',
 'createacct-reason-ph' => 'Bakit ka gagawa ng isa pang akawnt?',
+'createacct-captcha' => 'Siyasatin ang seguridad',
 'createacct-imgcaptcha-ph' => 'Ilagay ang tekstong makikita sa itaas.',
+'createacct-submit' => 'Likhain ang iyong akawnt',
+'createacct-another-submit' => 'Lumikha ng ibang akawnt',
 'createacct-benefit-heading' => '{{SITENAME}} ay nilikha ng mga taong iyong katulad.',
-'badretype' => 'Hindi magkatugma ang ipinasok mong mga hudyat.',
+'createacct-benefit-body1' => '{{PLURAL:$1|pagbabago|mga pagbabago}}',
+'createacct-benefit-body2' => '{{PLURAL:$1|pahina|mga pahina}}',
+'createacct-benefit-body3' => 'kamakailang {{PLURAL:$1|nag-ambag|mga nag-ambag}}',
+'badretype' => 'Hindi magkatugma ang ipinasok mong mga password.',
 'userexists' => 'May gumagamit na ng ipinasok na bansag.
 Pumili po ng ibang pangalan.',
 'loginerror' => 'Kamalian sa paglagda',
@@ -632,15 +649,15 @@ Suriin ang iyong pagbabaybay, o [[Special:UserLogin/signup|lumikha ng bagong kuw
 Pakitingnan ang iyong pagbabaybay.',
 'nouserspecified' => 'Kailangang tukuyin mo ang isang pangalang pantagagamit.',
 'login-userblocked' => 'Hinarang ang tagagamit na ito.  Hindi pinahihintulutan ang paglalagda.',
-'wrongpassword' => 'Mali ang ipinasok na hudyat.
+'wrongpassword' => 'Mali ang ipinasok na password.
 Pakisubok muli.',
-'wrongpasswordempty' => 'Walang laman ang ipinasok na hudyat.
+'wrongpasswordempty' => 'Walang laman ang ipinasok na password.
 Pakisubok muli.',
 'passwordtooshort' => 'Ang mga hudyat ay dapat mayroong {{PLURAL:$1|1 panitik|$1 panitik}} (karakter).',
-'password-name-match' => 'Dapat magkaiba ang hudyat mo sa bansag mo.',
-'password-login-forbidden' => 'Ipinagbabawal ang paggamit ng ganitong pangalan ng tagagamit at hudyat.',
-'mailmypassword' => 'Baguhin ang hudyat',
-'passwordremindertitle' => 'Bagong pansamantalang hudyat para sa {{SITENAME}}',
+'password-name-match' => 'Dapat magkaiba ang password mo sa bansag o username mo.',
+'password-login-forbidden' => 'Ipinagbabawal ang paggamit ng ganitong pangalan ng tagagamit at password.',
+'mailmypassword' => 'Baguhin ang password',
+'passwordremindertitle' => 'Bagong pansamantalang password para sa {{SITENAME}}',
 'passwordremindertext' => 'Mayroong (na maaaring ikaw, mula sa adres ng IP na $1) humiling ng isang bagong
 hudyat para sa {{SITENAME}} ($4). Isang pansamantalang hudyat ang nilikha
 para sa tagagamit na "$2" at itinakda sa "$3".  Kung ito ang iyong pakay,
@@ -655,16 +672,16 @@ magpatuloy sa paggamit ng iyong lumang hudyat.',
 'passwordsent' => 'Isang bagong hudyat ang ipinadala sa adres ng e-liham na nakatala para kay "$1".
 Lumagda/Tumala lang po muli pagkaraan mong matanggap ito.',
 'blocked-mailpassword' => 'Hinarangan sa paggawa ng mga pagbabago ang iyong adres ng IP, at kaya hindi rin pinapahintulutang gumamit ng tungkuling makabawi ng hudyat para maiwasan ang pangaabuso.',
-'eauthentsent' => 'Nagpadala ng isang e-liham na pangkompirmasyon doon sa iniharap na direksiyong e-liham.
-Bago magpadala ng iba pang e-liham sa kuwenta, kailangan mong sundin ang mga tagubiling nasa loob ng e-liham, para mapatunayang iyo talaga ang kuwenta.',
-'throttled-mailpassword' => 'Nagpadala na ng isang paalalang panghudyat, nitong huling {{PLURAL:$1|oras|$1 oras}}.
-Para maiwasin ang pangaabuso, isang paalalang panghudyat lang ang ipapadala bawat {{PLURAL:$1|oras|$1 oras}}.',
+'eauthentsent' => 'Nagpadala ng isang email na pangkompirmasyon doon sa tinukoy na email address.
+Bago magpadala ng iba email sa akawnt, kailangan mong sundin ang mga tagubiling nasa loob ng email, para mapatunayang iyo talaga ang akawnt.',
+'throttled-mailpassword' => 'Nagpadala na ng isang paalalang pang-password, nitong huling {{PLURAL:$1|oras|$1 oras}}.
+Para maiwasin ang pangaabuso, isang paalalang pang-password lamang ang ipapadala bawat {{PLURAL:$1|oras|$1 oras}}.',
 'mailerror' => 'Kamalian sa pagpapadala ng liham: $1',
 'acct_creation_throttle_hit' => 'Ang mga panauhin sa wiking ito na gumagamit ng direksiyong IP mo ay nakalikha na ng {{PLURAL:$1|1 kuwenta|$1 kuwenta}} sa loob ng huling araw, na siyang pinakamataas na pinapahintulutan sa loob ng sakop ng panahong ito.
 Bilang kinalabasan, ang mga panauhing gumagamit ng ganitong direksiyong IP ay hindi na muna makakalikha ng anumang karagdagang kuwenta sa ngayon.',
-'emailauthenticated' => 'Napatunayan na ang iyong direksiyong e-liham sa $2 noong $3.',
-'emailnotauthenticated' => 'Hindi pa napapatunayan ang iyong direksiyong e-liham.
-Walang e-liham na ipapadala para sa anumang sumusunod na tampok na kasangkapang-katangian.',
+'emailauthenticated' => 'Napatunayan na ang iyong email address sa $2 noong $3.',
+'emailnotauthenticated' => 'Hindi pa napapatunayan ang iyong email address.
+Walang email na ipapadala para sa anumang sumusunod na mga tampok o features.',
 'noemailprefs' => 'Tumukoy ng isang direksiyong e-liham sa loob ng mga nais mo upang gumana ang mga kasangkapang-katangiang ito.',
 'emailconfirmlink' => 'Pakikompirma ang iyong direksiyong e-liham.',
 'invalidemailaddress' => 'Hindi matatanggap ang direksiyong e-liham na ito dahil tila mayroon itong maling anyo.
@@ -679,56 +696,71 @@ Dapat kang tumala at baguhin ang hudyat mo ngayon.
 
 Maaari mong huwag pansinin ang mensaheng ito, kung mali ang paglikha ng kuwentang ito.',
 'usernamehasherror' => 'Hindi maaaring maglaman ng mga panitik na pantadtad ang pangalan ng tagagamit',
-'login-throttled' => 'Masyadong marami ang ginawa mong kamakailan lang na mga pagsubok sa paglagdang papasok.
-Maghintay po muna bago subukan uli.',
+'login-throttled' => 'Masyadong madami ang kamakailan lamang mong pagsubok sa pag-login.
+Maghintay po muna ng $1 bago subukan uli.',
 'login-abort-generic' => 'Bigo ang paglagda mo - Pinigil',
 'loginlanguagelabel' => 'Wika: $1',
 'suspicious-userlogout' => "Tinanggihan ang inyong kahilingang umalis sa pagkalagda dahil tila ito ay ipinadala ng sirang pambasa-basa o apoderadong pambaon (''caching proxy'')",
+'createacct-another-realname-tip' => 'Hindi kinakailangan ang tunay na pangalan.
+Kung nais mo na ibigay ito, gagamitin ito para sa pagbibigay ng atribusyon para sa kanilang gawa.',
+'pt-login' => 'Mag-login',
+'pt-login-button' => 'Mag-login',
 'pt-createaccount' => 'Lumikha ng akawnt',
 'pt-userlogout' => 'Umalis sa pagkakatala',
 
 # Email sending
 'php-mail-error-unknown' => 'Hindi malamang kamalian sa tungkulin ng liham ng PHP ()',
 'user-mail-no-addy' => 'Sinubukang magpadala ng e-liham na walang tirahan na para sa e-liham.',
+'user-mail-no-body' => 'Sinubukan na magpadala ng email na walang laman o maikling laman.',
 
 # Change password dialog
-'changepassword' => 'Baguhin ang hudyat',
+'changepassword' => 'Baguhin ang password',
 'resetpass_announce' => 'Para sa ganap na pagtala, magtalaga ng panibagong password.',
 'resetpass_text' => '<!-- Magdagdag ng teksto rito -->',
-'resetpass_header' => 'Baguhin ang hudyat ng kuwenta',
-'oldpassword' => 'Lumang hudyat:',
-'newpassword' => 'Bagong hudyat:',
-'retypenew' => 'Ipasok muli ang bagong hudyat:',
-'resetpass_submit' => 'Itakda ang hudyat at lumagda',
-'changepassword-success' => 'Matagumpay na nabago ang iyong hudyat!  Inilalagda ka na ngayon...',
-'resetpass_forbidden' => 'Hindi mababago ang mga hudyat',
+'resetpass_header' => 'Baguhin ang password ng akawnt',
+'oldpassword' => 'Lumang password:',
+'newpassword' => 'Bagong password:',
+'retypenew' => 'Ipasok muli ang bagong password:',
+'resetpass_submit' => 'Itakda ang password at mag-login',
+'changepassword-success' => 'Matagumpay na nabago ang iyong password!',
+'changepassword-throttled' => 'Masyadong madami ang kamakailan lamang mong pagsubok sa pag-login.
+Maghintay po muna ng $1 bago subukan uli.',
+'resetpass_forbidden' => 'Hindi mababago ang mga password',
 'resetpass-no-info' => 'Nakalagda ka dapat para tuwirang mapuntahan ang pahina ito.',
-'resetpass-submit-loggedin' => 'Baguhin ang hudyat',
+'resetpass-submit-loggedin' => 'Baguhin ang password',
 'resetpass-submit-cancel' => 'Kanselahin',
-'resetpass-wrong-oldpass' => 'Hindi tanggap na pansamantala o pangkasalukuyang hudyat.
-Maaaring matagumpay mo nang nabago ang iyong hudyat o nakahiling na ng isang bagong pansamantalang hudyat.',
+'resetpass-wrong-oldpass' => 'Hindi balido na pansamantala o pangkasalukuyang password.
+Maaaring matagumpay mo nang nabago ang iyong password o nakahiling na ng isang bagong pansamantalang password.',
 'resetpass-recycled' => 'Ireset ang iyong password sa pamamagitan ng paggamit ng iba pa maliban sa iyong ginagamit sa kasalukuyan.',
 'resetpass-temp-emailed' => 'Nakapagtala sa pamamagitan ng pansamantalang email code.
 Para sa ganap na pagtatala, magtakda ng panibagong password dito:',
-'resetpass-temp-password' => 'Pansamantalang hudyat:',
-'resetpass-expired-soft' => 'Napaso na ang iyong password at kailangan ireset. Pumili ng bagong password o iklik ang cancel upang i-reset sa ibang pagkakataon.',
+'resetpass-temp-password' => 'Pansamantalang password:',
+'resetpass-abort-generic' => 'Inuurong sa pamamagitan ng isan extensyon ang pagpalit ng password.',
+'resetpass-expired' => 'Paso na ang iyong password. Pakipalit ng bagong password upang maka-login.',
+'resetpass-expired-soft' => 'Napaso na ang iyong password at kailangan i-reset. Pumili ng bagong password o i-klik ang "{{int:resetpass-submit-cancel}}" upang i-reset sa ibang pagkakataon.',
+'resetpass-validity-soft' => 'Hindi matanggap ang iyong password: $1
+
+Pumili ng bagong password ngayon, o i-klik ang "{{int:resetpass-submit-cancel}}" para i-reset ito sa ibang pagkakataon.',
 
 # Special:PasswordReset
-'passwordreset' => 'Muling pagtatakda ng hudyat',
-'passwordreset-legend' => 'Itakdang muli ang hudyat',
+'passwordreset' => 'Muling pagtatakda ng password',
+'passwordreset-text-one' => 'Ikumpleto ang form na ito upang makatanggap ng pansamantalang password sa pamamagitan ng email.',
+'passwordreset-text-many' => '{{PLURAL:$1|Ipasok sa isa sa mga field upang makatanggap ng isang pansamantalang password sa pamamagitan ng email.}}',
+'passwordreset-legend' => 'Itakdang muli ang password',
 'passwordreset-disabled' => 'Hindi pinagagana sa wiking ito ang muling mga pagtatakda ng hudyat.',
+'passwordreset-emaildisabled' => 'Hindi pinagana ang email features sa wiking ito.',
 'passwordreset-username' => 'Pangalan ng tagagamit:',
 'passwordreset-domain' => 'Nasasakupan:',
 'passwordreset-capture' => 'Tingnan ang lumabas na e-liham?',
 'passwordreset-capture-help' => 'Kapag tsetsekan mo ang kahong ito, ang e-liham (may pansamantalang hudyat) ay ipapakita sa iyo at ipapadala rin sa tagagamit.',
 'passwordreset-email' => 'Direksiyong e-liham:',
 'passwordreset-emailtitle' => 'Mga detalye ng kuwenta sa {{SITENAME}}',
-'passwordreset-emailtext-ip' => 'Isang tao (marahil ay ikaw, mula sa direksiyong IP na $1) ang humiling ng isang paalala sa iyong mga detalye ng kuwenta para sa {{SITENAME}} ($4). Ang sumusunod na {{PLURAL:$3|kuwenta ng tagagamit ay|mga kuwenta ng tagagamit ay}} may kaugnayan sa direksiyong e-liham na ito:
+'passwordreset-emailtext-ip' => 'Isang tao (marahil ay ikaw, mula sa IP address na $1) ang humiling ng isang paalala sa iyong mga detalye ng kuwenta para sa {{SITENAME}} ($4). Ang sumusunod na {{PLURAL:$3|akawant ng tagagamit ay|mga akawnt ng tagagamit ay}} may kaugnayan sa email address na ito:
 
 $2
 
-{{PLURAL:$3|Ang pansamantalang hudyat na ito|Ang mga pansamantalang hudyat na ito}} ay mawawalan ng bisa sa loob ng {{PLURAL:$5|isang araw|$5 mga araw}}.
-Dapat kang lumagda at pumili ng isang bagong hudyat ngayon. Kung ibang tao ang gumawa ng kahilingang ito, o kung naalala mo na ang orihinal mong hudyat, at hindi mo na nais palitan ito, maaari mong huwag nang pansinin ang mensaheng ito at magpatuloy sa paggamit ng luma mong hudyat.',
+{{PLURAL:$3|Ang pansamantalang hudyat na ito|Ang mga pansamantalang hudyat na ito}} ay mawawalan ng bisa sa loob ng {{PLURAL:$5|isang araw|$5 araw}}.
+Dapat kang mag-login at pumili ng isang bagong password ngayon. Kung ibang tao ang gumawa ng kahilingang ito, o kung naalala mo na ang orihinal mong password, at hindi mo na nais palitan ito, maaari mong huwag nang pansinin ang mensaheng ito at magpatuloy sa paggamit ng luma mong password.',
 'passwordreset-emailtext-user' => 'Ang tagagamit na si $1 sa {{SITENAME}} ay humiling ng isang paalala ng iyong mga akawnt ng detalye para sa {{SITENAME}}
 ($4). Ang sumusunod na pangtagagamit na {{PLURAL:$3|akawnt ay|mga akawnt ay}} may kaugnayan sa tirahang ito ng e-liham:
 
@@ -737,7 +769,7 @@ $2
 {{PLURAL:$3|Ang pansamantalang hudyat na ito|Ang pansamantalang mga hudyat na ito}} mawawalan ng bias sa loob ng {{PLURAL:$5|isang araw|$5 mga araw}}.
 Dapat kang lumagda at pumili ng isang hudyat ngayon. Kung ibang tao ang gumawa ng kahilingang ito, o kung naalala mo na ang iyong orihinal na hudyat, at hindi mo na nais palitan pa ito, maaari mong huwag nang pansinin ang mensaheng ito at magpatuloy sa paggamit ng iyong lumang hudyat.',
 'passwordreset-emailelement' => 'Pangalan ng tagagamit: $1
-Pansamantalang hudyat: $2',
+Pansamantalang password: $2',
 'passwordreset-emailsent' => 'Naipadala na ang isang e-liham na pampaalala.',
 'passwordreset-emailsent-capture' => 'Naipadala na ang isang e-liham na paalala, na ipinapakita sa ibaba.',
 'passwordreset-emailerror-capture' => 'Nalikha na ang isang e-liham na paalala, na ipinapakita sa ibaba, subalit nabigo ang pagpapadala sa tagagamit: $1',
@@ -750,8 +782,14 @@ Pansamantalang hudyat: $2',
 'changeemail-oldemail' => 'Kasalukuyang direksiyong e-liham:',
 'changeemail-newemail' => 'Bagong direksiyong e-liham:',
 'changeemail-none' => '(wala)',
+'changeemail-password' => 'Ang iyong {{SITENAME}} password:',
 'changeemail-submit' => 'Baguhin ang e-liham',
 'changeemail-cancel' => 'Kanselahin',
+'changeemail-throttled' => 'Masyadong madami ang kamakailan lamang mong pagsubok sa pag-login.
+Maghintay po muna ng $1 bago subukan uli.',
+
+# Special:ResetTokens
+'resettokens' => 'I-reset ang mga token o susi',
 
 # Edit page toolbar
 'bold_sample' => 'Makapal na panitik',
@@ -832,7 +870,7 @@ Maaaring inilipat o ibinura ito habang tinitingnan mo ang pahina.',
 'loginreqtitle' => 'Paglagda/Pagtala Kailangan',
 'loginreqlink' => 'lumagda/tumala',
 'loginreqpagetext' => 'Kailangan mong $1 para matanaw ang ibang mga pahina.',
-'accmailtitle' => 'Ipinadala na ang hudyat.',
+'accmailtitle' => 'Ipinadala na ang password.',
 'accmailtext' => "Ipinadala na sa $2 ang isang hudyat na nilikha ng pagkakataon para kay [[User talk:$1|$1]].  Maaari itong baguhin sa pahinang ''[[Special:ChangePassword|palitan ng hudyat]]'' kapag lumagdang papasok.",
 'newarticle' => '(Bago)',
 'newarticletext' => "Sinundan mo ang isang kawing para sa isang pahinang hindi pa umiiral.
@@ -961,6 +999,7 @@ Walang ibinigay na paliwanag.',
 Tila binura na ito.',
 'edit-conflict' => 'Alitan sa pagbabago.',
 'edit-no-change' => 'Binalewala ang pagbabago mo, dahil walang pagbabagong ginawa sa teksto.',
+'postedit-confirmation' => 'Naitala na ang iyong pagbabago.',
 'edit-already-exists' => 'Hindi makalikha ng isang bagong pahina.
 Umiiral na ito.',
 'defaultmessagetext' => 'Nakatakdang teksto ng mensahe',
@@ -1246,7 +1285,7 @@ Matatagpuan ang mga detalye sa loob ng [{{fullurl:{{#Special:Log}}/delete|page={
 'prefs-watchlist-edits-max' => 'Pinakamataas na bilang: 1000',
 'prefs-watchlist-token' => 'Balap ng talaan ng mga binabantayan:',
 'prefs-misc' => 'Bala-balaki',
-'prefs-resetpass' => 'Baguhin ang hudyat',
+'prefs-resetpass' => 'Baguhin ang password',
 'prefs-changeemail' => 'Baguhin ang direksiyong e-liham',
 'prefs-setemail' => 'Magtakda ng direksiyong e-liham',
 'prefs-email' => 'Mga pagpipilian para sa e-liham',
@@ -1328,6 +1367,7 @@ Kung pipiliin mong ibigay ito, gagamitin ito para mabigyan ka ng pagkilala para
 'prefs-dateformat' => 'Anyo ng petsa',
 'prefs-timeoffset' => 'Pagtatama ng oras',
 'prefs-advancedediting' => 'Masulong na mga mapagpipilian',
+'prefs-preview' => 'Paunang tingin',
 'prefs-advancedrc' => 'Masulong na mga mapagpipilian',
 'prefs-advancedrendering' => 'Masulong na mga mapagpipilian',
 'prefs-advancedsearchoptions' => 'Masulong na mga mapagpipilian',
@@ -1335,6 +1375,7 @@ Kung pipiliin mong ibigay ito, gagamitin ito para mabigyan ka ng pagkilala para
 'prefs-displayrc' => 'Ipakita ang mga pagpipilian',
 'prefs-displaysearchoptions' => 'Ipakita ang mga pagpipilian',
 'prefs-displaywatchlist' => 'Ipakita ang mga pagpipilian',
+'prefs-tokenwatchlist' => 'Token o susi',
 'prefs-diffs' => 'Mga pagkakaiba',
 
 # User preference: email validation using jQuery
@@ -1448,7 +1489,7 @@ Kung pipiliin mong ibigay ito, gagamitin ito para mabigyan ka ng pagkilala para
 'right-siteadmin' => 'Ikandado at alisin ang pagkakakandado ng kalipunan ng dato',
 'right-override-export-depth' => 'Iluwas ang mga pahina na kabilang ang mga pahinang nakakawing magpahanggang sa isang lalim na 5',
 'right-sendemail' => 'Magpadala ng e-liham sa ibang mga tagagamit',
-'right-passwordreset' => 'Tingnan ang mga e-liham ng muling pagtatakda ng hudyat',
+'right-passwordreset' => 'Tingnan ang mga email ng muling pagtatakda ng password',
 
 # Special:Log/newusers
 'newuserlogpage' => 'Talaan ng paglikha ng tagagamit',
@@ -1509,11 +1550,23 @@ Kung pipiliin mong ibigay ito, gagamitin ito para mabigyan ka ng pagkilala para
 'rcnotefrom' => "Nasa ibaba ang mga pagbabago mula pa noong '''$2''' (ipinapakita ang magpahanggang sa '''$1''').",
 'rclistfrom' => 'Ipakita ang bagong mga pagbabago simula sa $1',
 'rcshowhideminor' => '$1 maliliit na mga pagbabago',
+'rcshowhideminor-show' => 'Ipakita',
+'rcshowhideminor-hide' => 'Itago',
 'rcshowhidebots' => "$1 mga ''bot''",
-'rcshowhideliu' => '$1 nakalagdang mga tagagamit',
+'rcshowhidebots-show' => 'Ipakita',
+'rcshowhidebots-hide' => 'Itago',
+'rcshowhideliu' => '$1 nakatalang mga tagagamit',
+'rcshowhideliu-show' => 'Ipakita',
+'rcshowhideliu-hide' => 'Itago',
 'rcshowhideanons' => '$1 hindi kilalang mga tagagamit',
+'rcshowhideanons-show' => 'Ipakita',
+'rcshowhideanons-hide' => 'Itago',
 'rcshowhidepatr' => '$1 napatrolyang mga pagbabago',
+'rcshowhidepatr-show' => 'Ipakita',
+'rcshowhidepatr-hide' => 'Itago',
 'rcshowhidemine' => '$1 mga pagbabago ko',
+'rcshowhidemine-show' => 'Ipakita',
+'rcshowhidemine-hide' => 'Itago',
 'rclinks' => 'Ipakita ang huling $1 mga pagbabago sa loob ng huling $2 mga araw<br />$3',
 'diff' => 'pagkakaiba',
 'hist' => 'kasaysayan',
@@ -1529,7 +1582,7 @@ Kung pipiliin mong ibigay ito, gagamitin ito para mabigyan ka ng pagkilala para
 'rc-change-size' => '$1',
 'rc-change-size-new' => '$1 {{PLURAL:$1|byte|mga byte}} pagkaraan ng pagbabago',
 'newsectionsummary' => '/* $1 */ bagong seksyon',
-'rc-enhanced-expand' => 'Ipakita ang mga detalye (kailangan ng JavaScript)',
+'rc-enhanced-expand' => 'Ipakita ang mga detalye',
 'rc-enhanced-hide' => 'Itago ang mga detalye',
 'rc-old-title' => 'dating nalikha bilang "$1"',
 
@@ -1548,8 +1601,7 @@ Kung pipiliin mong ibigay ito, gagamitin ito para mabigyan ka ng pagkilala para
 'reuploaddesc' => 'Kanselahin/Iurong ang pagkarga at magbalik sa pormularyo ng pagkakarga',
 'upload-tryagain' => 'Ipasa ang binagong paglalarawan ng talaksan',
 'uploadnologin' => 'Hindi nakalagda',
-'uploadnologintext' => 'Dapat ikaw ay [[Special:UserLogin|nakalagda]]
-upang makapagkarga ng talaksan.',
+'uploadnologintext' => '$1 upang makapag-upload ng files.',
 'upload_directory_missing' => 'Nawawala ang direktoryo ng pagkarga ($1) at hindi na mailikha ng webserver.',
 'upload_directory_read_only' => 'Ang direktoryo ng pagkarga ($1) ay hindi maisulat ng webserver.',
 'uploaderror' => 'Kamalian sa pagkarga',
@@ -1806,6 +1858,8 @@ Kapag sinala ng tagagamit, tanging mga talaksan lang kung saan nagkarga ang taga
 'listfiles_size' => 'Sukat',
 'listfiles_description' => 'Paglalarawan',
 'listfiles_count' => 'Mga bersiyon',
+'listfiles-latestversion-yes' => 'Oo',
+'listfiles-latestversion-no' => 'Hindi',
 
 # File description page
 'file-anchor-link' => 'Talaksan',
@@ -1902,6 +1956,9 @@ Marahil ay naisa mong baguhin ang paglalarawan doon sa [$2 pahina ng paglalarawa
 'randompage' => 'Pahinang walang-pili',
 'randompage-nopages' => 'Walang mga pahina sa sumusunod na {{PLURAL:$2|ngalan-espasyo|mga ngalan-espasyo}}: $1.',
 
+# Random page in category
+'randomincategory-selectcategory-submit' => 'Gawin',
+
 # Random redirect
 'randomredirect' => 'Pagkargang walang-pili',
 'randomredirect-nopages' => 'Walang mga pagkarga sa ngalan-espasyong "$1".',
@@ -1990,6 +2047,10 @@ Nasugpo na ang mga ipinasok na <del>inekisan</del>.',
 'protectedpages-indef' => 'Mga walang katiyakang proteksyon lamang',
 'protectedpages-cascade' => 'Baita-baitang na mga panananggalang lamang',
 'protectedpagesempty' => 'Sa kasalukuyan, walang mga pahinang nakasanggalang na may ganitong mga parametro.',
+'protectedpages-page' => 'Pahina',
+'protectedpages-reason' => 'Dahilan',
+'protectedpages-unknown-timestamp' => 'Hindi alam',
+'protectedpages-unknown-performer' => 'Hindi alam na tagagamit o user',
 'protectedtitles' => 'Nakasanggalang na mga pamagat',
 'protectedtitlesempty' => 'Walang pamagat ang kasalukuyang nakaprotekta sa binigay na parametro.',
 'listusers' => 'Tala ng tagagamit',
@@ -2152,7 +2213,7 @@ Ang ipinasok mong direksiyong e-liham sa [[Special:Preferences|iyong mga kagustu
 'usermessage-template' => 'MediaWiki:UserMessage',
 
 # Watchlist
-'watchlist' => 'Mga binabantayan ko',
+'watchlist' => 'Talaan ng mga binabantayan',
 'mywatchlist' => 'Bantayan',
 'watchlistfor2' => 'Para sa $1 $2',
 'nowatchlist' => 'Wala kang pahinang binabantayan.',
@@ -3864,7 +3925,7 @@ Dapat na nakatanggap ka ng [{{SERVER}}{{SCRIPTPATH}}/COPYING isang sipi ng Pangk
 * <span class="mw-specialpagerestricted">Pinaghihigpitang natatanging mga pahina.</span>',
 'specialpages-group-maintenance' => 'Mga pagpapanatiling ulat',
 'specialpages-group-other' => 'Iba pang natatanging mga pahina',
-'specialpages-group-login' => 'Lumagda / lumikha ng kuwenta',
+'specialpages-group-login' => 'Mag-login / lumikha ng akawnt',
 'specialpages-group-changes' => 'Mga huling binago at mga tala',
 'specialpages-group-media' => 'Mga ulat ng midya at mga pagkarga',
 'specialpages-group-users' => 'Mga tagagamit at mga karapatan',
index 975a6e7..4fa35ad 100644 (file)
@@ -50,6 +50,7 @@
  * @author Rhinestorm
  * @author Runningfridgesrule
  * @author Sadrettin
+ * @author SiLveRLeaD
  * @author Srhat
  * @author Stultiwikia
  * @author Suelnur
@@ -891,6 +892,7 @@ Devam etmeden önce $1 bekleyin.',
 'createacct-another-realname-tip' => 'Gerçek adınız isteğe bağlıdır.
 Eğer gerçek adınızı belirtirseniz, çalışmalarınıza atıfta bulunulması için de kullanılacaktır.',
 'pt-login' => 'Giriş yap',
+'pt-login-button' => 'Oturum aç',
 'pt-createaccount' => 'Hesap oluştur',
 'pt-userlogout' => 'Oturumu kapat',
 
index 404d52e..23e5dc7 100644 (file)
@@ -1355,7 +1355,7 @@ $1",
 'rcshowhidebots' => 'ботларны $1',
 'rcshowhidebots-show' => 'күрсәт',
 'rcshowhidebots-hide' => 'яшер',
-'rcshowhideliu' => 'Теркәлгән кулланучыларны $1',
+'rcshowhideliu' => 'теркәлгән кулланучыларны $1',
 'rcshowhideliu-show' => 'күрсәт',
 'rcshowhideliu-hide' => 'яшер',
 'rcshowhideanons' => 'кермәгән кулланучыларны $1',
index a3c551b..8e6fd89 100644 (file)
@@ -44,6 +44,7 @@
  * @author Sodmy
  * @author Ua2004
  * @author Urhixidur
+ * @author Vittalio
  * @author VolodymyrF
  * @author Vox
  * @author Yuriy Apostol
@@ -2223,6 +2224,11 @@ $1',
 # List redirects
 'listredirects' => 'Список перенаправлень',
 
+# List duplicated files special page
+'listduplicatedfiles' => 'Список файлів з дублікатами',
+'listduplicatedfiles-summary' => 'Це список файлів, де остання версія файлу вважається дублікатом останньої версії деяких інших файлів. Враховуються тільки локальні файли.',
+'listduplicatedfiles-entry' => 'У файлу [[:File:$1|$1]] - [[$3|{{PLURAL:$2|один дублікат|$2 дублікатів|$2 дублікат}}]].',
+
 # Unused templates
 'unusedtemplates' => 'Шаблони, що не використовуються',
 'unusedtemplatestext' => 'На цій сторінці показані всі сторінки простору назв «{{ns:template}}», які не включені до інших сторінок. Не забувайте перевірити відсутність інших посилань на шаблон, перш ніж вилучити його.',
@@ -2680,7 +2686,7 @@ $UNWATCHURL
 Поточні установки для сторінки '''$1''':",
 'protect-locked-access' => "У вашого облікового запису недостатньо прав для зміни рівня захисту сторінки.
 Поточні установки для сторінки: '''$1''':",
-'protect-cascadeon' => 'Ця сторінка захищена, бо вона включена {{PLURAL:$1|1=до зазначеної нижче сторінки, на яку|до нижчезазначених сторінок, на які}} встановлено каскадний захист. Ви можете змінити рівень захисту цієї сторінки, але це не вплине на каскадний захист.',
+'protect-cascadeon' => "Ця сторінка зараз захищена у зв'язку з тим, що вона включена в {{PLURAL:$1/1=зазначену нижче сторінку, для якої|нижченаведені сторінки, для яких}} встановлений каскадний захист. Зміни рівня захисту цієї сторінки не вплине на каскадний захист.",
 'protect-default' => 'Дозволити всім користувачам',
 'protect-fallback' => 'Дозволено тільки користувачам із дозволом «$1»',
 'protect-level-autoconfirmed' => 'Дозволено тільки автопідтвердженим користувачам',
index 8079db0..17cf49c 100644 (file)
@@ -1592,8 +1592,8 @@ Umumiy omborda [[:$1]] mavjud. Faylning bu nomga qayta nomlanishi faylning umumi
 'tooltip-n-portal' => 'Loyiha haqida, nimalar qilishingiz mumkin, nimalarni qayerdan topish mumkin',
 'tooltip-n-currentevents' => 'Joriy hodisalar haqida ma’lumot olish',
 'tooltip-n-recentchanges' => 'Wikidagi eng so‘nggi o‘zgartirishlar ro‘yxati',
-'tooltip-n-randompage' => 'Tasodifiy sahifani yuklash',
-'tooltip-n-help' => 'O‘rganish uchun manzil',
+'tooltip-n-randompage' => 'Tasodifiy sahifaga oʻtish',
+'tooltip-n-help' => 'Qisqa va loʻnda maʼlumotnoma',
 'tooltip-t-whatlinkshere' => 'Ushbu sahifaga bogʻlangan sahifalar roʻyxati',
 'tooltip-t-recentchangeslinked' => 'Bu sahifaga bogʻlangan sahifalardagi yangi oʻzgarishlar',
 'tooltip-feed-rss' => "Bu sahifa uchun RSS ta'minot",
index b0c10ae..ad1270f 100644 (file)
@@ -780,6 +780,7 @@ Hãy nhớ thay đổi [[Special:Preferences|tùy chọn cá nhân {{SITENAME}}]
 'gotaccountlink' => 'Đăng nhập',
 'userlogin-resetlink' => 'Quên mất thông tin đăng nhập?',
 'userlogin-resetpassword-link' => 'Quên mật khẩu?',
+'userlogin-helplink2' => 'Trợ giúp đăng nhập',
 'userlogin-loggedin' => 'Bạn đã đăng nhập với tên {{GENDER:$1}}$1.
 Hãy sử dụng biểu mẫu ở dưới để đăng nhập với tài khoản người dùng khác.',
 'userlogin-createanother' => 'Mở thêm tài khoản',
@@ -894,6 +895,9 @@ Có thể bạn đã thay đổi thành công mật khẩu của mình hoặc đ
 'resetpass-abort-generic' => 'Một phần mở rộng đã hủy bỏ tác vụ thay đổi mật khẩu.',
 'resetpass-expired' => 'Mật khẩu của bạn đã hết hạn. Xin vui lòng tạo lại mật khẩu mới để đăng nhập.',
 'resetpass-expired-soft' => 'Mật khẩu của bạn đã hết hạn và cần được đặt lại. Xin vui lòng chọn một mật khẩu mới lúc bây giờ hoặc bấm “{{int:resetpass-submit-cancel}}” để đặt lại sau.',
+'resetpass-validity-soft' => 'Mật khẩu của bạn không hợp lệ: $1
+
+Xin hãy chọn mật khẩu mới bây giờ hoặc bấm “{{int:resetpass-submit-cancel}}” để đặt lại sau.',
 
 # Special:PasswordReset
 'passwordreset' => 'Tái tạo mật khẩu',
@@ -2598,7 +2602,7 @@ hiện tại của trang '''$1''':",
 Đây là trạng thái hiện tại của trang '''$1''':",
 'protect-locked-access' => "Tài khoản của bạn không được cấp quyền đổi mức khóa của trang.
 Đây là trạng thái hiện tại của trang '''$1''':",
-'protect-cascadeon' => 'Trang này hiện bị khóa vì nó được nhúng vào {{PLURAL:$1|những trang|trang}} dưới đây bị khóa với tùy chọn “khóa theo tầng” được kích hoạt. Bạn có thể đổi mức độ khóa của trang này, nhưng nó sẽ không ảnh hưởng đến việc khóa theo tầng.',
+'protect-cascadeon' => 'Trang này hiện bị khóa vì nó được nhúng vào {{PLURAL:$1|những trang|trang}} dưới đây bị khóa với tùy chọn “khóa theo tầng” được kích hoạt. Việc thay đổi mức độ khóa của trang này sẽ không ảnh hưởng đến việc khóa theo tầng.',
 'protect-default' => 'Cho phép mọi thành viên',
 'protect-fallback' => 'Chỉ cho phép những người dùng có quyền “$1”',
 'protect-level-autoconfirmed' => 'Chỉ cho phép các thành viên tự động xác nhận',
index a0d36f4..37545dd 100644 (file)
@@ -646,6 +646,7 @@ $2',
 'gotaccountlink' => 'אַרײַנלאגירן',
 'userlogin-resetlink' => 'פארגעסן אײַערע אַרײַנלאָגירן פרטים?',
 'userlogin-resetpassword-link' => 'פֿאַרגעסן אײַער פאַסווארט?',
+'userlogin-helplink2' => 'הילף מיט ארײַנלאגירן',
 'userlogin-loggedin' => 'איר זענט שוין אריינלאגירט ווי {{GENDER:$1|$1}}.
 ניצט די פארעם אונטן כדי אריינלאגירן ווי אן אנדער באניצער.',
 'userlogin-createanother' => 'שאפֿן נאך א קאנטע',
@@ -773,6 +774,7 @@ $2',
 'resetpass-wrong-oldpass' => 'אומגילטיג צײַטווײַליק אדער לויפֿיק פאַסווארט.
 איר האט מעגלעך שוין געטוישט אייער פאַסווארט מיט הצלחה אדער געבעטן א נײַ  צײַטווײַליק פאַסווארט.',
 'resetpass-recycled' => 'זײַט אזוי גוט שטעטל אירע פאסווארט צו עפעס אנדערש פונעם לויפיקן פאסווארט.',
+'resetpass-temp-emailed' => 'איר האט זיך ארי לאגירת מיט א פראוויזארישן קאד געשיקט דורכן ע־פאסט. כדי שליסן דאס ארײַנלאגירן, דארט איר שטעלן א נײַ פאסווארט דא.',
 'resetpass-temp-password' => 'צײַטווייליק פאַסווארט:',
 'resetpass-abort-generic' => 'פאסווארט ענדערונג איז מבוטל געווארן דורך א פארברייטערונג.',
 'resetpass-expired' => 'אירע פאסווארט איז אויסגעגאנגען. זײַט אזוי גוט שטעלט א נײַ פאסווארט כדי ארײַנלאגירן.',
@@ -2422,7 +2424,7 @@ $UNWATCHURL
 דא זענען די לויפֿיקע שטעלונגען פֿאַר דעם בלאַט '''$1''':",
 'protect-cascadeon' => 'דער בלאַט איז געשיצט אַצינד ווײַל ער איז אײַנגעשלאסן אין  {{PLURAL:$1|דעם פֿאלגנדן בלאַט, וואס האט|די פֿאלגנדע בלעטער, וואס האבן}} קאַסקאַדירטע שיצונג.
 
\90×\99ר ×§×¢× ×\98 ×¢× ×\93ער×\9f ×\93×¢×\9d ×©×\99צ×\95× ×\92 × ×\99×\95×\95×\90 ×¤×\95× ×¢×\9d ×\91×\9c×\90Ö·×\98, ×\90×\91ער ×\93×\90ס ×\95×\95×¢×\98 נישט ווירקן אויף דער קאַסקאַדירטער שיצונג .',
¢× ×\93ער×\95× ×\92×¢×\9f ×¦×\95×\9d ×©×\99צ×\95× ×\92 × ×\99×\95×\95×\90 ×¤×\95× ×¢×\9d ×\91×\9c×\90Ö·×\98 ×\95×\95×¢×\9c×\9f נישט ווירקן אויף דער קאַסקאַדירטער שיצונג .',
 'protect-default' => 'אלע באניצער ערלויבט',
 'protect-fallback' => 'דערלויבן נאר באניצער מיט "$1" ערלויבניש',
 'protect-level-autoconfirmed' => 'לאזן נאר אויטאמאטיש באשטעטיקטע באַניצער',
index 269a73a..40fcce5 100644 (file)
@@ -1773,22 +1773,22 @@ $1",
 # Upload
 'upload' => '上传文件',
 'uploadbtn' => '上传文件',
-'reuploaddesc' => '取消上传并返回上传表单',
-'upload-tryagain' => '提交修改后的文件描述',
+'reuploaddesc' => '取消上传,返回上传表格',
+'upload-tryagain' => '提交修改过的文件说明',
 'uploadnologin' => '未登录',
 'uploadnologintext' => '您必须先$1才能上传文件。',
 'upload_directory_missing' => '上传目录($1)遗失,不能由网页服务器建立。',
 'upload_directory_read_only' => '上传目录($1)不存在或无写权限。',
-'uploaderror' => '上传错误',
+'uploaderror' => '上传出错',
 'upload-recreate-warning' => "'''警告:一个相同名字的文件曾经被删除或者移动至别处。'''
 
 这个页面的删除和移动日志在这里提供以便参考:",
-'uploadtext' => "请使用下面的表格上传文件。要查看或搜索以前上传的文件,可以进入[[Special:FileList|文件上传列表]],(重新)上传也将在[[Special:Log/upload|上传日志]]中记录,而删除将在[[Special:Log/delete|删除日志]]中记录
+'uploadtext' => '请使用下面的表格上传文件。要查看或搜索以往上传的文件,请前往[[Special:FileList|上传的文件的列表]],(重新)上传也将记录在[[Special:Log/upload|上传日志]]中,删除将记录在[[Special:Log/delete|删除日志]]中
 
-è¦\81å\9c¨é¡µé\9d¢ä¸­å\8a å\85¥文件,请使用一种以下形式的链接:
-* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>'''使用文件的完整版本
-* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|替换文字]]</nowiki></code>'''使用放置于左侧的一个框内的200像素宽的图片,同时使用“替换文字”作为描述
-* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>'''直接链接到文件而不显示文件",
+è¦\81å\9c¨é¡µé\9d¢ä¸­å\8c\85å\90«文件,请使用一种以下形式的链接:
+* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code></strong>使用文件的完整版本
+* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|替代文字]]</nowiki></code></strong>使用位于页面左边的框内的200像素宽的图片,以“替代文字”作为说明
+* <strong><code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code></strong>直接链接到文件而不显示文件',
 'upload-permitted' => '允许的文件类型:$1。',
 'upload-preferred' => '建议的文件类型:$1。',
 'upload-prohibited' => '禁止的文件类型:$1。',
@@ -1802,7 +1802,7 @@ $1",
 'filestatus' => '著作权状况:',
 'filesource' => '来源:',
 'uploadedfiles' => '已上传文件',
-'ignorewarning' => '忽视警告并继续保存文件',
+'ignorewarning' => '忽略警告,继续保存文件',
 'ignorewarnings' => '忽略所有警告',
 'minlength1' => '文件名至少要有一个字符。',
 'illegalfilename' => '文件名“$1”包含在页面标题中不允许使用的字符。请重命名该文件,然后重新上传。',
@@ -1832,10 +1832,7 @@ $1",
 'emptyfile' => '您所上传的文件不存在。这可能是由于文件名键入错误。请检查您是否真的要上传此文件。',
 'windows-nonascii-filename' => '本wiki不支持在文件名中使用特殊字符。',
 'fileexists' => '已存在相同名称的文件,如果您无法确定您是否要改变它,请检查<strong><strong>[[:$1]]</strong></strong>。 [[$1|thumb]]',
-'filepageexists' => '这个文件的描述页已经于<strong><strong>[[:$1]]</strong></strong>创建,但是这个名称的文件尚不存在。
-您输入的摘要不会显示在该描述页中。
-要令该摘要在该处中出现,您需要手动地编辑该页。
-[[$1|thumb]]',
+'filepageexists' => '该文件的说明页面已经创建于<strong>[[:$1]]</strong>,但是目前没有名称为此的文件存在。你输入的摘要不会显示在说明页面上。要使你的摘要在那里显示,你需要手工编辑它。[[$1|thumb]]',
 'fileexists-extension' => '一个相似名称的文件已经存在: [[$2|thumb]]
 * 上传文件的文件名:<strong>[[:$1]]</strong>
 * 现有文件的文件名:<strong>[[:$2]]</strong>
@@ -2014,7 +2011,7 @@ $1',
 # File description page
 'file-anchor-link' => '文件',
 'filehist' => '文件历史',
-'filehist-help' => '查看某一时刻的文件,请单击相应的日期/时间。',
+'filehist-help' => '单击某个日期/时间查看对应时刻的文件。',
 'filehist-deleteall' => '删除全部',
 'filehist-deleteone' => '删除',
 'filehist-revert' => '恢复',
@@ -2037,16 +2034,16 @@ $1',
 'morelinkstoimage' => '查看连接到这个文件的[[Special:WhatLinksHere/$1|更多链接]]。',
 'linkstoimage-redirect' => '$1(文件重定向)$2',
 'duplicatesoffile' => '以下{{PLURAL:$1|文件|$1个文件}}是本文件的副本([[Special:FileDuplicateSearch/$2|更多细节]]):',
-'sharedupload' => '本文件来自$1并可能被其项目使用。',
-'sharedupload-desc-there' => '本文件来自$1并可能被其项目使用。更多信息请见[$2 文件说明页面]。',
-'sharedupload-desc-here' => '本文件来自$1并可能被其项目使用。其[$2 文件说明页面]上的说明显示在下面。',
-'sharedupload-desc-edit' => '本文件来自$1并可能被其项目使用。也许你想要编辑其[$2 文件说明页面]上的说明。',
+'sharedupload' => '本文件来自$1并可能被其项目使用。',
+'sharedupload-desc-there' => '本文件来自$1并可能被其项目使用。更多信息请见[$2 文件说明页面]。',
+'sharedupload-desc-here' => '本文件来自$1并可能被其项目使用。其[$2 文件说明页面]上的说明显示在下面。',
+'sharedupload-desc-edit' => '本文件来自$1并可能被其项目使用。也许你想要编辑其[$2 文件说明页面]上的说明。',
 'sharedupload-desc-create' => '本文件来自$1并可能被其他项目使用。也许你想要编辑其[$2 文件说明页面]上的说明。',
 'filepage-nofile' => '不存在此名称的文件。',
 'filepage-nofile-link' => '不存在此名称的文件,但您可以[$1 上传它]。',
 'uploadnewversion-linktext' => '上传该文件的新版本',
-'shared-repo-from' => '自$1',
-'shared-repo' => '一个共文件库',
+'shared-repo-from' => '自$1',
+'shared-repo' => '一个共文件库',
 'shared-repo-name-wikimediacommons' => '维基共享资源',
 'upload-disallowed-here' => '您不可以覆盖此文件。',
 
@@ -2093,6 +2090,11 @@ $1',
 # List redirects
 'listredirects' => '重定向列表',
 
+# List duplicated files special page
+'listduplicatedfiles' => '重复文件列表',
+'listduplicatedfiles-summary' => '这是某文件的最新版本与其他文件最新版本重复的文件列表。仅考虑本地文件。',
+'listduplicatedfiles-entry' => '文件[[:File:$1|$1]]与[[$3|$2个重复]]。',
+
 # Unused templates
 'unusedtemplates' => '未使用模板',
 'unusedtemplatestext' => '本页面列出{{ns:template}}名字空间中所有未包含于其它页面的页面。请记得在删除这些模板前检查其他链至它们的链接。',
@@ -3417,7 +3419,7 @@ Variants for Chinese language
 'exif-contrast' => '对比度',
 'exif-saturation' => '饱和度',
 'exif-sharpness' => '锐化',
-'exif-devicesettingdescription' => '设备设定描述',
+'exif-devicesettingdescription' => '设备设置说明',
 'exif-subjectdistancerange' => '主体距离范围',
 'exif-imageuniqueid' => '唯一图像ID',
 'exif-gpsversionid' => 'GPS标签版本',
@@ -3473,7 +3475,7 @@ Variants for Chinese language
 'exif-editstatus' => '编辑状态的图像',
 'exif-urgency' => '紧急性',
 'exif-fixtureidentifier' => '夹具名称',
-'exif-locationdest' => '位置描述',
+'exif-locationdest' => '描绘的地点',
 'exif-locationdestcode' => '位置所示的代码',
 'exif-objectcycle' => '媒体文件使用时间要求',
 'exif-contact' => '联系信息',
@@ -3510,9 +3512,9 @@ Variants for Chinese language
 'exif-intellectualgenre' => '项目类型',
 'exif-subjectnewscode' => '主题代码',
 'exif-scenecode' => 'IPTC 现场代码',
-'exif-event' => '事件描述',
-'exif-organisationinimage' => '组织描述',
-'exif-personinimage' => '描述的人',
+'exif-event' => '描绘的事件',
+'exif-organisationinimage' => '描绘的组织',
+'exif-personinimage' => '描绘的人物',
 'exif-originalimageheight' => '裁剪前的图像高度',
 'exif-originalimagewidth' => '裁剪前的图像宽度',
 
index 35e96f5..438188e 100644 (file)
@@ -2040,6 +2040,11 @@ $1',
 # List redirects
 'listredirects' => '重定向清單',
 
+# List duplicated files special page
+'listduplicatedfiles' => '重複檔案列表',
+'listduplicatedfiles-summary' => '以下列表中某檔案之最新版本與其他檔案之最新版本重複。進包含本地檔案',
+'listduplicatedfiles-entry' => '檔案[[:File:$1|$1]]與[[$3|其他$2個重複]]。',
+
 # Unused templates
 'unusedtemplates' => '未使用的模板',
 'unusedtemplatestext' => '本頁面列出{{ns:template}}名字空間下所有未被其他頁面使用的頁面。請在刪除這些模板前檢查其他連入該模板的頁面。',
index eb2f474..2ad9228 100644 (file)
@@ -82,14 +82,13 @@ wikicities|http://www.wikia.com/wiki/$1|0
 wikif1|http://www.wikif1.org/$1|0
 wikihow|http://www.wikihow.com/$1|0
 wikinfo|http://www.wikinfo.org/index.php/$1|0
-# The following wik[it]* interwikis but wikitravel belong to the Wikimedia Family:
+# The following wik[it]* interwikis belong to the Wikimedia Family:
 wikimedia|https://wikimediafoundation.org/wiki/$1|0
 wikinews|https://en.wikinews.org/wiki/$1|1
 wikipedia|https://en.wikipedia.org/wiki/$1|1
 wikiquote|https://en.wikiquote.org/wiki/$1|1
 wikisource|https://wikisource.org/wiki/$1|1
 wikispecies|https://species.wikimedia.org/wiki/$1|1
-wikitravel|http://wikitravel.org/en/$1|0
 wikiversity|https://en.wikiversity.org/wiki/$1|1
 wikivoyage|https://en.wikivoyage.org/wiki/$1|1
 wikt|https://en.wiktionary.org/wiki/$1|1
index 0c05206..1d8b540 100644 (file)
@@ -84,14 +84,13 @@ REPLACE INTO /*$wgDBprefix*/interwiki (iw_prefix,iw_url,iw_local) VALUES
 ('wikif1','http://www.wikif1.org/$1',0),
 ('wikihow','http://www.wikihow.com/$1',0),
 ('wikinfo','http://www.wikinfo.org/index.php/$1',0),
-# The following wik[it]* interwikis but wikitravel belong to the Wikimedia Family:
+# The following wik[it]* interwikis belong to the Wikimedia Family:
 ('wikimedia','https://wikimediafoundation.org/wiki/$1',0),
 ('wikinews','https://en.wikinews.org/wiki/$1',1),
 ('wikipedia','https://en.wikipedia.org/wiki/$1',1),
 ('wikiquote','https://en.wikiquote.org/wiki/$1',1),
 ('wikisource','https://wikisource.org/wiki/$1',1),
 ('wikispecies','https://species.wikimedia.org/wiki/$1',1),
-('wikitravel','http://wikitravel.org/en/$1',0),
 ('wikiversity','https://en.wikiversity.org/wiki/$1',1),
 ('wikivoyage','https://en.wikivoyage.org/wiki/$1',1),
 ('wikt','https://en.wiktionary.org/wiki/$1',1),
index 746c7d7..6b5506e 100644 (file)
@@ -1690,6 +1690,11 @@ $wgMessageStructure = array(
                'listredirects',
                'listredirects-summary',
        ),
+       'listduplicatedfiles' => array(
+               'listduplicatedfiles',
+               'listduplicatedfiles-summary',
+               'listduplicatedfiles-entry',
+       ),
        'unusedtemplates' => array(
                'unusedtemplates',
                'unusedtemplates-summary',
@@ -4103,6 +4108,7 @@ future releases. Also note that since each list value is wrapped in a unique
        'filedelete' => 'File deletion',
        'mimesearch' => 'MIME search',
        'unwatchedpages' => 'Unwatched pages',
+       'listduplicatedfiles' => 'List duplicated files special page',
        'listredirects' => 'List redirects',
        'unusedtemplates' => 'Unused templates',
        'randompage' => 'Random page',
index 49a932a..a473f61 100644 (file)
@@ -146,4 +146,4 @@ $.fn.autoEllipsis = function ( options ) {
        } );
 };
 
-}( jQuery ) );
\ No newline at end of file
+}( jQuery ) );
index a8c0b06..b398fdd 100644 (file)
                                $el.attr( 'maxlength', elLimit );
                        }
 
-
                        // Safe base value, used to determine the path between the previous state
                        // and the state that triggered the event handler below - and enforce the
                        // limit approppiately (e.g. don't chop from the end if text was inserted
index 9c6f9ec..37bf176 100644 (file)
@@ -12,7 +12,7 @@
                // By Blair Mitchelmore
                // http://jquery.offput.ca/highlightFade/
                // Parse strings looking for color tuples [255,255,255]
-               getRGB : function ( color ) {
+               getRGB: function ( color ) {
                        /*jshint boss:true */
                        var result;
 
@@ -28,7 +28,7 @@
 
                        // Look for rgb(num%,num%,num%)
                        if (result = /rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(color)) {
-                               return [parseFloat(result[1],10)*2.55, parseFloat(result[2],10)*2.55, parseFloat(result[3])*2.55];
+                               return [parseFloat(result[1],10) * 2.55, parseFloat(result[2],10) * 2.55, parseFloat(result[3]) * 2.55];
                        }
 
                        // Look for #a0b1c2
@@ -38,7 +38,7 @@
 
                        // Look for #fff
                        if (result = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(color)) {
-                               return [parseInt(result[1]+result[1],16), parseInt(result[2]+result[2],16), parseInt(result[3]+result[3],16)];
+                               return [parseInt(result[1] + result[1],16), parseInt(result[2] + result[2],16), parseInt(result[3] + result[3],16)];
                        }
 
                        // Look for rgba(0, 0, 0, 0) == transparent in Safari 3
                                        if ( t > 1 ) {
                                                t -= 1;
                                        }
-                                       if ( t < 1/6 ) {
+                                       if ( t < 1 / 6 ) {
                                                return p + (q - p) * 6 * t;
                                        }
-                                       if ( t < 1/2 ) {
+                                       if ( t < 1 / 2 ) {
                                                return q;
                                        }
-                                       if ( t < 2/3 ) {
-                                               return p + (q - p) * (2/3 - t) * 6;
+                                       if ( t < 2 / 3 ) {
+                                               return p + (q - p) * (2 / 3 - t) * 6;
                                        }
                                        return p;
                                };
 
                                q = l < 0.5 ? l * (1 + s) : l + s - l * s;
                                p = 2 * l - q;
-                               r = hue2rgb( p, q, h + 1/3 );
+                               r = hue2rgb( p, q, h + 1 / 3 );
                                g = hue2rgb( p, q, h );
-                               b = hue2rgb( p, q, h - 1/3 );
+                               b = hue2rgb( p, q, h - 1 / 3 );
                        }
 
                        return [r * 255, g * 255, b * 255];
                getColorBrightness: function ( currentColor, mod ) {
                        var rgbArr = $.colorUtil.getRGB( currentColor ),
                                hslArr = $.colorUtil.rgbToHsl(rgbArr[0], rgbArr[1], rgbArr[2] );
-                       rgbArr = $.colorUtil.hslToRgb(hslArr[0], hslArr[1], hslArr[2]+mod);
+                       rgbArr = $.colorUtil.hslToRgb(hslArr[0], hslArr[1], hslArr[2] + mod);
 
                        return 'rgb(' +
                                [parseInt( rgbArr[0], 10), parseInt( rgbArr[1], 10 ), parseInt( rgbArr[2], 10 )].join( ',' ) +
index e0d9de2..8c8fb56 100644 (file)
@@ -146,12 +146,12 @@ $.fn.localize = function ( options ) {
        } );
 
        // HTML, Text for elements which cannot have children e.g. OPTION
-       $target.find( '[data-msg-text]' ).each( function() {
+       $target.find( '[data-msg-text]' ).each( function () {
                var $el = $( this );
                $el.text( msg( options, $el.attr( 'data-msg-text' ) ) );
        } );
 
-       $target.find( '[data-msg-html]' ).each( function() {
+       $target.find( '[data-msg-html]' ).each( function () {
                var $el = $( this );
                $el.html( msg( options, $el.attr( 'data-msg-html' ) ) );
        } );
index 60c0afc..01fde4c 100644 (file)
@@ -11,7 +11,7 @@
  * @author Krinkle, 2011-2012
  *
  * Dual license:
- * @license CC-BY 3.0 <http://creativecommons.org/licenses/by/3.0>
+ * @license CC BY 3.0 <http://creativecommons.org/licenses/by/3.0>
  * @license GPL2 <http://www.gnu.org/licenses/old-licenses/gpl-2.0.html>
  */
 ( function ( $, mw ) {
index 5020b37..6f7ada3 100644 (file)
@@ -13,7 +13,7 @@
  * @version 2.1.0
  * @license MIT
  */
-(function($) {
+(function ($) {
 
        var isInputSupported = 'placeholder' in document.createElement('input'),
                isTextareaSupported = 'placeholder' in document.createElement('textarea'),
 
        if (isInputSupported && isTextareaSupported) {
 
-               placeholder = prototype.placeholder = function(text) {
+               placeholder = prototype.placeholder = function (text) {
                        var hasArgs = arguments.length;
 
-                       if( hasArgs ) {
+                       if (hasArgs) {
                                changePlaceholder.call(this, text);
                        }
 
 
        } else {
 
-               placeholder = prototype.placeholder = function(text) {
+               placeholder = prototype.placeholder = function (text) {
                        var $this = this,
                                hasArgs = arguments.length;
 
-                       if(hasArgs) {
+                       if (hasArgs) {
                                changePlaceholder.call(this, text);
                        }
 
-
                        $this
                                .filter((isInputSupported ? 'textarea' : ':input') + '[placeholder]')
-                               .filter(function() {
+                               .filter(function () {
                                        return !$(this).data('placeholder-enabled');
                                })
                                .bind({
@@ -66,7 +65,7 @@
                placeholder.textarea = isTextareaSupported;
 
                hooks = {
-                       'get': function(element) {
+                       'get': function (element) {
                                var $element = $(element),
                                        $passwordInput = $element.data('placeholder-password');
                                if ($passwordInput) {
@@ -75,7 +74,7 @@
 
                                return $element.data('placeholder-enabled') && $element.hasClass('placeholder') ? '' : element.value;
                        },
-                       'set': function(element, value) {
+                       'set': function (element, value) {
                                var $element = $(element),
                                        $passwordInput = $element.data('placeholder-password');
                                if ($passwordInput) {
@@ -95,7 +94,7 @@
                                                setPlaceholder.call(element);
                                        }
                                } else if ($element.hasClass('placeholder')) {
-                                       if(!clearPlaceholder.call(element, true, value)) {
+                                       if (!clearPlaceholder.call(element, true, value)) {
                                                element.value = value;
                                        }
                                } else {
                        propHooks.value = hooks;
                }
 
-               $(function() {
+               $(function () {
                        // Look for forms
-                       $(document).delegate('form', 'submit.placeholder', function() {
+                       $(document).delegate('form', 'submit.placeholder', function () {
                                // Clear the placeholder values so they don't get submitted
                                var $inputs = $('.placeholder', this).each(clearPlaceholder);
-                               setTimeout(function() {
+                               setTimeout(function () {
                                        $inputs.each(setPlaceholder);
                                }, 10);
                        });
                });
 
                // Clear placeholder values upon page reload
-               $(window).bind('beforeunload.placeholder', function() {
-                       $('.placeholder').each(function() {
+               $(window).bind('beforeunload.placeholder', function () {
+                       $('.placeholder').each(function () {
                                this.value = '';
                        });
                });
                // Return an object of element attributes
                var newAttrs = {},
                        rinlinejQuery = /^jQuery\d+$/;
-               $.each(elem.attributes, function(i, attr) {
+               $.each(elem.attributes, function (i, attr) {
                        if (attr.specified && !rinlinejQuery.test(attr.name)) {
                                newAttrs[attr.name] = attr.value;
                        }
                        } else {
                                input.value = '';
                                $input.removeClass('placeholder');
-                               if(input === safeActiveElement()) {
+                               if (input === safeActiveElement()) {
                                        input.select();
                                }
                        }
        function changePlaceholder(text) {
                var hasArgs = arguments.length,
                        $input = this;
-               if(hasArgs) {
-                       if($input.attr('placeholder') !== text) {
+               if (hasArgs) {
+                       if ($input.attr('placeholder') !== text) {
                                $input.prop('placeholder', text);
-                               if($input.hasClass('placeholder')) {
+                               if ($input.hasClass('placeholder')) {
                                        $input[0].value = text;
                                }
                        }
index 20e6678..86fcaea 100644 (file)
@@ -79,7 +79,6 @@
                isEmptyObject: $.isEmptyObject
        };
 
-
        /**
         * CompletenessTest
         * @constructor
index f967a1d..f9a225f 100644 (file)
@@ -142,7 +142,7 @@ $.suggestions = {
                        i, expWidth, matchedText, maxWidth, text;
 
                // Validate creation using fallback values
-               switch( property ) {
+               switch ( property ) {
                        case 'fetch':
                        case 'cancel':
                        case 'special':
@@ -281,7 +281,7 @@ $.suggestions = {
                                                }
                                                // Apply new width for results box, if any
                                                if ( expWidth > context.data.$container.width() ) {
-                                                       maxWidth = context.config.maxExpandFactor*context.data.$textbox.width();
+                                                       maxWidth = context.config.maxExpandFactor * context.data.$textbox.width();
                                                        context.data.$container.width( Math.min( expWidth, maxWidth ) );
                                                }
                                                // autoEllipse the results. Has to be done after changing the width
index f9ee268..af0d897 100644 (file)
@@ -68,8 +68,6 @@
  */
 
 ( function ( $, mw ) {
-       /*jshint onevar:false */
-
        /* Local scope */
 
        var ts,
@@ -78,8 +76,9 @@
        /* Parser utility functions */
 
        function getParserById( name ) {
-               var len = parsers.length;
-               for ( var i = 0; i < len; i++ ) {
+               var i,
+                       len = parsers.length;
+               for ( i = 0; i < len; i++ ) {
                        if ( parsers[i].id.toLowerCase() === name.toLowerCase() ) {
                                return parsers[i];
                        }
        }
 
        function appendToTable( table, cache ) {
-               var row = cache.row,
+               var i, pos, l, j,
+                       row = cache.row,
                        normalized = cache.normalized,
                        totalRows = normalized.length,
                        checkCell = ( normalized[0].length - 1 ),
                        fragment = document.createDocumentFragment();
 
-               for ( var i = 0; i < totalRows; i++ ) {
-                       var pos = normalized[i][checkCell];
+               for ( i = 0; i < totalRows; i++ ) {
+                       pos = normalized[i][checkCell];
 
-                       var l = row[pos].length;
+                       l = row[pos].length;
 
-                       for ( var j = 0; j < l; j++ ) {
+                       for ( j = 0; j < l; j++ ) {
                                fragment.appendChild( row[pos][j] );
                        }
 
         * @param $table jQuery object for a <table>
         */
        function emulateTHeadAndFoot( $table ) {
-               var $rows = $table.find( '> tbody > tr' );
-               if( !$table.get(0).tHead ) {
-                       var $thead = $( '<thead>' );
+               var $thead, $tfoot, i, len,
+                       $rows = $table.find( '> tbody > tr' );
+               if ( !$table.get(0).tHead ) {
+                       $thead = $( '<thead>' );
                        $rows.each( function () {
-                               if ( $(this).children( 'td' ).length > 0 ) {
+                               if ( $(this).children( 'td' ).length ) {
                                        // This row contains a <td>, so it's not a header row
                                        // Stop here
                                        return false;
                        } );
                        $table.find(' > tbody:first').before( $thead );
                }
-               if( !$table.get(0).tFoot ) {
-                       var $tfoot = $( '<tfoot>' );
-                       var len = $rows.length;
-                       for ( var i = len-1; i >= 0; i-- ) {
-                               if( $( $rows[i] ).children( 'td' ).length > 0 ){
+               if ( !$table.get(0).tFoot ) {
+                       $tfoot = $( '<tfoot>' );
+                       len = $rows.length;
+                       for ( i = len - 1; i >= 0; i-- ) {
+                               if ( $( $rows[i] ).children( 'td' ).length ){
                                        break;
                                }
                                $tfoot.prepend( $( $rows[i] ));
                return false;
        }
 
-
        function uniqueElements( array ) {
                var uniques = [];
                $.each( array, function( index, elem ) {
        }
 
        function multisort( table, sortList, cache ) {
-               var sortFn = [];
-               var len = sortList.length;
-               for ( var i = 0; i < len; i++ ) {
+               var i,
+                       sortFn = [],
+                       len = sortList.length;
+               for ( i = 0; i < len; i++ ) {
                        sortFn[i] = ( sortList[i][1] ) ? sortTextDesc : sortText;
                }
                cache.normalized.sort( function ( array1, array2 ) {
-                       var col, ret;
-                       for ( var i = 0; i < len; i++ ) {
+                       var i, col, ret;
+                       for ( i = 0; i < len; i++ ) {
                                col = sortList[i][0];
                                ret = sortFn[i].call( this, array1[col], array2[col] );
                                if ( ret !== 0 ) {
        }
 
        function buildTransformTable() {
-               var digits = '0123456789,.'.split( '' );
-               var separatorTransformTable = mw.config.get( 'wgSeparatorTransformTable' );
-               var digitTransformTable = mw.config.get( 'wgDigitTransformTable' );
+               var ascii, localised, i, digitClass,
+                       digits = '0123456789,.'.split( '' ),
+                       separatorTransformTable = mw.config.get( 'wgSeparatorTransformTable' ),
+                       digitTransformTable = mw.config.get( 'wgDigitTransformTable' );
+
                if ( separatorTransformTable === null || ( separatorTransformTable[0] === '' && digitTransformTable[2] === '' ) ) {
                        ts.transformTable = false;
                } else {
                        ts.transformTable = {};
 
                        // Unpack the transform table
-                       var ascii = separatorTransformTable[0].split( '\t' ).concat( digitTransformTable[0].split( '\t' ) );
-                       var localised = separatorTransformTable[1].split( '\t' ).concat( digitTransformTable[1].split( '\t' ) );
+                       ascii = separatorTransformTable[0].split( '\t' ).concat( digitTransformTable[0].split( '\t' ) );
+                       localised = separatorTransformTable[1].split( '\t' ).concat( digitTransformTable[1].split( '\t' ) );
 
                        // Construct regex for number identification
-                       for ( var i = 0; i < ascii.length; i++ ) {
+                       for ( i = 0; i < ascii.length; i++ ) {
                                ts.transformTable[localised[i]] = ascii[i];
                                digits.push( $.escapeRE( localised[i] ) );
                        }
                }
-               var digitClass = '[' + digits.join( '', digits ) + ']';
+               digitClass = '[' + digits.join( '', digits ) + ']';
 
                // We allow a trailing percent sign, which we just strip. This works fine
                // if percents and regular numbers aren't being mixed.
        }
 
        function buildDateTable() {
-               var regex = [];
+               var i, name,
+                       regex = [];
+
                ts.monthNames = {};
 
-               for ( var i = 0; i < 12; i++ ) {
-                       var name = mw.language.months.names[i].toLowerCase();
+               for ( i = 0; i < 12; i++ ) {
+                       name = mw.language.months.names[i].toLowerCase();
                        ts.monthNames[name] = i + 1;
                        regex.push( $.escapeRE( name ) );
                        name = mw.language.months.genitive[i].toLowerCase();
         * @param $table jQuery object for a <table>
         */
        function explodeRowspans( $table ) {
-               var rowspanCells = $table.find( '> tbody > tr > [rowspan]' ).get();
+               var spanningRealCellIndex, rowSpan, colSpan,
+                       cell, i, $tds, $clone, $nextRows,
+                       rowspanCells = $table.find( '> tbody > tr > [rowspan]' ).get();
 
                // Short circuit
                if ( !rowspanCells.length ) {
                // account colspans. We also cache the rowIndex to avoid having to take
                // cell.parentNode.rowIndex in the sorting function below.
                $table.find( '> tbody > tr' ).each( function () {
-                       var col = 0;
-                       var l = this.cells.length;
-                       for ( var i = 0; i < l; i++ ) {
+                       var i,
+                               col = 0,
+                               l = this.cells.length;
+                       for ( i = 0; i < l; i++ ) {
                                this.cells[i].realCellIndex = col;
                                this.cells[i].realRowIndex = this.rowIndex;
                                col += this.cells[i].colSpan;
                }
                resortCells();
 
-               var spanningRealCellIndex, rowSpan, colSpan;
                function filterfunc() {
                        return this.realCellIndex >= spanningRealCellIndex;
                }
                                resortCells();
                        }
 
-                       var cell = rowspanCells.shift();
+                       cell = rowspanCells.shift();
                        rowSpan = cell.rowSpan;
                        colSpan = cell.colSpan;
                        spanningRealCellIndex = cell.realCellIndex;
                        cell.rowSpan = 1;
-                       var $nextRows = $( cell ).parent().nextAll();
-                       for ( var i = 0; i < rowSpan - 1; i++ ) {
-                               var $tds = $( $nextRows[i].cells ).filter( filterfunc );
-                               var $clone = $( cell ).clone();
+                       $nextRows = $( cell ).parent().nextAll();
+                       for ( i = 0; i < rowSpan - 1; i++ ) {
+                               $tds = $( $nextRows[i].cells ).filter( filterfunc );
+                               $clone = $( cell ).clone();
                                $clone[0].realCellIndex = spanningRealCellIndex;
                                if ( $tds.length ) {
                                        $tds.each( fixTdCellIndex );
                ts.collationTable = mw.config.get( 'tableSorterCollation' );
                ts.collationRegex = null;
                if ( ts.collationTable ) {
-                       var keys = [];
+                       var key,
+                               keys = [];
 
                        // Build array of key names
-                       for ( var key in ts.collationTable ) {
-                               if ( ts.collationTable.hasOwnProperty(key) ) { //to be safe
+                       for ( key in ts.collationTable ) {
+                               // Check hasOwn to be safe
+                               if ( ts.collationTable.hasOwnProperty(key) ) {
                                        keys.push(key);
                                }
                        }
-                       if (keys.length) {
+                       if ( keys.length ) {
                                ts.collationRegex = new RegExp( '[' + keys.join( '' ) + ']', 'ig' );
                        }
                }
                        construct: function ( $tables, settings ) {
                                return $tables.each( function ( i, table ) {
                                        // Declare and cache.
-                                       var $headers, cache, config,
+                                       var $headers, cache, config, sortCSS, sortMsg,
                                                $table = $( table ),
                                                firstTime = true;
 
                                        $.data( table, 'tablesorter', { config: config } );
 
                                        // Get the CSS class names, could be done else where.
-                                       var sortCSS = [ config.cssDesc, config.cssAsc ];
-                                       var sortMsg = [ mw.msg( 'sort-descending' ), mw.msg( 'sort-ascending' ) ];
+                                       sortCSS = [ config.cssDesc, config.cssAsc ];
+                                       sortMsg = [ mw.msg( 'sort-descending' ), mw.msg( 'sort-ascending' ) ];
 
                                        // Build headers
                                        $headers = buildHeaders( table, sortMsg );
                                                        this.order = this.count % 2;
                                                        this.count++;
 
-                                                       var cell = this;
+                                                       var cell, columns, newSortList, i;
+
+                                                       cell = this;
                                                        // Get current column index
-                                                       var columns = table.headerToColumns[ this.headerIndex ];
-                                                       var newSortList = $.map( columns, function (c) {
+                                                       columns = table.headerToColumns[ this.headerIndex ];
+                                                       newSortList = $.map( columns, function ( c ) {
                                                                // jQuery "helpfully" flattens the arrays...
                                                                return [[c, cell.order]];
                                                        });
                                                        // Index of first column belonging to this header
-                                                       var i = columns[0];
+                                                       i = columns[0];
 
                                                        if ( !e[config.sortMultiSortKey] ) {
                                                                // User only wants to sort on one column set
                                         *
                                         * @param sortList {Array} (optional) List of sort objects.
                                         */
-                                       $table.data( 'tablesorter' ).sort = function( sortList ) {
+                                       $table.data( 'tablesorter' ).sort = function ( sortList ) {
 
                                                if ( firstTime ) {
                                                        setupForFirstSort();
index 2b5a440..7262fe6 100644 (file)
@@ -2,8 +2,6 @@
  * These plugins provide extra functionality for interaction with textareas.
  */
 ( function ( $ ) {
-       /*jshint noempty:false */
-
        if ( document.selection && document.selection.createRange ) {
                // On IE, patch the focus() method to restore the windows' scroll position
                // (bug 32241)
@@ -13,7 +11,7 @@
                                        var $w, state, result;
                                        if ( arguments.length === 0 ) {
                                                $w = $( window );
-                                               state = {top: $w.scrollTop(), left: $w.scrollLeft()};
+                                               state = { top: $w.scrollTop(), left: $w.scrollLeft() };
                                                result = jqFocus.apply( this, arguments );
                                                window.scrollTo( state.top, state.left );
                                                return result;
@@ -73,7 +71,6 @@
                                        el = this.get( 0 );
 
                                if ( $(el).is( ':hidden' ) ) {
-                                       // Do nothing
                                        retval = '';
                                } else if ( document.selection && document.selection.createRange ) {
                                        activateElementOnIE( el );
                                        }
 
                                        isSample = false;
-                                       if ( this.style.display === 'none' ) {
-                                               // Do nothing
-                                       } else if ( document.selection && document.selection.createRange ) {
-                                               // IE
+                                       // Do nothing if display none
+                                       if ( this.style.display !== 'none' ) {
+                                               if ( document.selection && document.selection.createRange ) {
+                                                       // IE
 
-                                               // Note that IE9 will trigger the next section unless we check this first.
-                                               // See bug 35201.
+                                                       // Note that IE9 will trigger the next section unless we check this first.
+                                                       // See bug 35201.
 
-                                               activateElementOnIE( this );
-                                               if ( context ) {
-                                                       context.fn.restoreCursorAndScrollTop();
-                                               }
-                                               if ( options.selectionStart !== undefined ) {
-                                                       $(this).textSelection( 'setSelection', { 'start': options.selectionStart, 'end': options.selectionEnd } );
-                                               }
+                                                       activateElementOnIE( this );
+                                                       if ( context ) {
+                                                               context.fn.restoreCursorAndScrollTop();
+                                                       }
+                                                       if ( options.selectionStart !== undefined ) {
+                                                               $(this).textSelection( 'setSelection', { 'start': options.selectionStart, 'end': options.selectionEnd } );
+                                                       }
 
-                                               selText = $(this).textSelection( 'getSelection' );
-                                               scrollTop = this.scrollTop;
-                                               range = document.selection.createRange();
+                                                       selText = $(this).textSelection( 'getSelection' );
+                                                       scrollTop = this.scrollTop;
+                                                       range = document.selection.createRange();
 
-                                               checkSelectedText();
-                                               insertText = pre + selText + post;
-                                               if ( options.splitlines ) {
-                                                       insertText = doSplitLines( selText, pre, post );
-                                               }
-                                               if ( options.ownline && range.moveStart ) {
-                                                       range2 = document.selection.createRange();
-                                                       range2.collapse();
-                                                       range2.moveStart( 'character', -1 );
-                                                       // FIXME: Which check is correct?
-                                                       if ( range2.text !== '\r' && range2.text !== '\n' && range2.text !== '' ) {
-                                                               insertText = '\n' + insertText;
-                                                               pre += '\n';
+                                                       checkSelectedText();
+                                                       insertText = pre + selText + post;
+                                                       if ( options.splitlines ) {
+                                                               insertText = doSplitLines( selText, pre, post );
                                                        }
-                                                       range3 = document.selection.createRange();
-                                                       range3.collapse( false );
-                                                       range3.moveEnd( 'character', 1 );
-                                                       if ( range3.text !== '\r' && range3.text !== '\n' && range3.text !== '' ) {
-                                                               insertText += '\n';
-                                                               post += '\n';
+                                                       if ( options.ownline && range.moveStart ) {
+                                                               range2 = document.selection.createRange();
+                                                               range2.collapse();
+                                                               range2.moveStart( 'character', -1 );
+                                                               // FIXME: Which check is correct?
+                                                               if ( range2.text !== '\r' && range2.text !== '\n' && range2.text !== '' ) {
+                                                                       insertText = '\n' + insertText;
+                                                                       pre += '\n';
+                                                               }
+                                                               range3 = document.selection.createRange();
+                                                               range3.collapse( false );
+                                                               range3.moveEnd( 'character', 1 );
+                                                               if ( range3.text !== '\r' && range3.text !== '\n' && range3.text !== '' ) {
+                                                                       insertText += '\n';
+                                                                       post += '\n';
+                                                               }
                                                        }
-                                               }
 
-                                               range.text = insertText;
-                                               if ( isSample && options.selectPeri && range.moveStart ) {
-                                                       range.moveStart( 'character', - post.length - selText.length );
-                                                       range.moveEnd( 'character', - post.length );
-                                               }
-                                               range.select();
-                                               // Restore the scroll position
-                                               this.scrollTop = scrollTop;
-                                       } else if ( this.selectionStart || this.selectionStart === 0 ) {
-                                               // Mozilla/Opera
-
-                                               $(this).focus();
-                                               if ( options.selectionStart !== undefined ) {
-                                                       $(this).textSelection( 'setSelection', { 'start': options.selectionStart, 'end': options.selectionEnd } );
-                                               }
+                                                       range.text = insertText;
+                                                       if ( isSample && options.selectPeri && range.moveStart ) {
+                                                               range.moveStart( 'character', -post.length - selText.length );
+                                                               range.moveEnd( 'character', -post.length );
+                                                       }
+                                                       range.select();
+                                                       // Restore the scroll position
+                                                       this.scrollTop = scrollTop;
+                                               } else if ( this.selectionStart || this.selectionStart === 0 ) {
+                                                       // Mozilla/Opera
+
+                                                       $(this).focus();
+                                                       if ( options.selectionStart !== undefined ) {
+                                                               $(this).textSelection( 'setSelection', { 'start': options.selectionStart, 'end': options.selectionEnd } );
+                                                       }
 
-                                               selText = $(this).textSelection( 'getSelection' );
-                                               startPos = this.selectionStart;
-                                               endPos = this.selectionEnd;
-                                               scrollTop = this.scrollTop;
-                                               checkSelectedText();
-                                               if ( options.selectionStart !== undefined
-                                                               && endPos - startPos !== options.selectionEnd - options.selectionStart )
-                                               {
-                                                       // This means there is a difference in the selection range returned by browser and what we passed.
-                                                       // This happens for Chrome in the case of composite characters. Ref bug #30130
-                                                       // Set the startPos to the correct position.
-                                                       startPos = options.selectionStart;
-                                               }
+                                                       selText = $(this).textSelection( 'getSelection' );
+                                                       startPos = this.selectionStart;
+                                                       endPos = this.selectionEnd;
+                                                       scrollTop = this.scrollTop;
+                                                       checkSelectedText();
+                                                       if ( options.selectionStart !== undefined
+                                                                       && endPos - startPos !== options.selectionEnd - options.selectionStart )
+                                                       {
+                                                               // This means there is a difference in the selection range returned by browser and what we passed.
+                                                               // This happens for Chrome in the case of composite characters. Ref bug #30130
+                                                               // Set the startPos to the correct position.
+                                                               startPos = options.selectionStart;
+                                                       }
 
-                                               insertText = pre + selText + post;
-                                               if ( options.splitlines ) {
-                                                       insertText = doSplitLines( selText, pre, post );
-                                               }
-                                               if ( options.ownline ) {
-                                                       if ( startPos !== 0 && this.value.charAt( startPos - 1 ) !== '\n' && this.value.charAt( startPos - 1 ) !== '\r' ) {
-                                                               insertText = '\n' + insertText;
-                                                               pre += '\n';
+                                                       insertText = pre + selText + post;
+                                                       if ( options.splitlines ) {
+                                                               insertText = doSplitLines( selText, pre, post );
                                                        }
-                                                       if ( this.value.charAt( endPos ) !== '\n' && this.value.charAt( endPos ) !== '\r' ) {
-                                                               insertText += '\n';
-                                                               post += '\n';
+                                                       if ( options.ownline ) {
+                                                               if ( startPos !== 0 && this.value.charAt( startPos - 1 ) !== '\n' && this.value.charAt( startPos - 1 ) !== '\r' ) {
+                                                                       insertText = '\n' + insertText;
+                                                                       pre += '\n';
+                                                               }
+                                                               if ( this.value.charAt( endPos ) !== '\n' && this.value.charAt( endPos ) !== '\r' ) {
+                                                                       insertText += '\n';
+                                                                       post += '\n';
+                                                               }
+                                                       }
+                                                       this.value = this.value.substring( 0, startPos ) + insertText +
+                                                               this.value.substring( endPos, this.value.length );
+                                                       // Setting this.value scrolls the textarea to the top, restore the scroll position
+                                                       this.scrollTop = scrollTop;
+                                                       if ( window.opera ) {
+                                                               pre = pre.replace( /\r?\n/g, '\r\n' );
+                                                               selText = selText.replace( /\r?\n/g, '\r\n' );
+                                                               post = post.replace( /\r?\n/g, '\r\n' );
+                                                       }
+                                                       if ( isSample && options.selectPeri && !options.splitlines ) {
+                                                               this.selectionStart = startPos + pre.length;
+                                                               this.selectionEnd = startPos + pre.length + selText.length;
+                                                       } else {
+                                                               this.selectionStart = startPos + insertText.length;
+                                                               this.selectionEnd = this.selectionStart;
                                                        }
-                                               }
-                                               this.value = this.value.substring( 0, startPos ) + insertText +
-                                                       this.value.substring( endPos, this.value.length );
-                                               // Setting this.value scrolls the textarea to the top, restore the scroll position
-                                               this.scrollTop = scrollTop;
-                                               if ( window.opera ) {
-                                                       pre = pre.replace( /\r?\n/g, '\r\n' );
-                                                       selText = selText.replace( /\r?\n/g, '\r\n' );
-                                                       post = post.replace( /\r?\n/g, '\r\n' );
-                                               }
-                                               if ( isSample && options.selectPeri && !options.splitlines ) {
-                                                       this.selectionStart = startPos + pre.length;
-                                                       this.selectionEnd = startPos + pre.length + selText.length;
-                                               } else {
-                                                       this.selectionStart = startPos + insertText.length;
-                                                       this.selectionEnd = this.selectionStart;
                                                }
                                        }
                                        $(this).trigger( 'encapsulateSelection', [ options.pre, options.peri, options.post, options.ownline,
                        setSelection: function ( options ) {
                                return this.each( function () {
                                        var selection, length, newLines;
-                                       if ( $(this).is( ':hidden' ) ) {
-                                               // Do nothing
-                                       } else if ( this.selectionStart || this.selectionStart === 0 ) {
-                                               // Opera 9.0 doesn't allow setting selectionStart past
-                                               // selectionEnd; any attempts to do that will be ignored
-                                               // Make sure to set them in the right order
-                                               if ( options.start > this.selectionEnd ) {
-                                                       this.selectionEnd = options.end;
-                                                       this.selectionStart = options.start;
-                                               } else {
-                                                       this.selectionStart = options.start;
-                                                       this.selectionEnd = options.end;
-                                               }
-                                       } else if ( document.body.createTextRange ) {
-                                               selection = rangeForElementIE( this );
-                                               length = this.value.length;
-                                               // IE doesn't count \n when computing the offset, so we won't either
-                                               newLines = this.value.match( /\n/g );
-                                               if ( newLines ) {
-                                                       length = length - newLines.length;
+                                       // Do nothing if hidden
+                                       if ( !$(this).is( ':hidden' ) ) {
+                                               if ( this.selectionStart || this.selectionStart === 0 ) {
+                                                       // Opera 9.0 doesn't allow setting selectionStart past
+                                                       // selectionEnd; any attempts to do that will be ignored
+                                                       // Make sure to set them in the right order
+                                                       if ( options.start > this.selectionEnd ) {
+                                                               this.selectionEnd = options.end;
+                                                               this.selectionStart = options.start;
+                                                       } else {
+                                                               this.selectionStart = options.start;
+                                                               this.selectionEnd = options.end;
+                                                       }
+                                               } else if ( document.body.createTextRange ) {
+                                                       selection = rangeForElementIE( this );
+                                                       length = this.value.length;
+                                                       // IE doesn't count \n when computing the offset, so we won't either
+                                                       newLines = this.value.match( /\n/g );
+                                                       if ( newLines ) {
+                                                               length = length - newLines.length;
+                                                       }
+                                                       selection.moveStart( 'character', options.start );
+                                                       selection.moveEnd( 'character', -length + options.end );
+
+                                                       // This line can cause an error under certain circumstances (textarea empty, no selection)
+                                                       // Silence that error
+                                                       try {
+                                                               selection.select();
+                                                       } catch ( e ) { }
                                                }
-                                               selection.moveStart( 'character', options.start );
-                                               selection.moveEnd( 'character', -length + options.end );
-
-                                               // This line can cause an error under certain circumstances (textarea empty, no selection)
-                                               // Silence that error
-                                               try {
-                                                       selection.select();
-                                               } catch ( e ) { }
                                        }
                                });
                        },
                                }
                                return this.each(function () {
                                        var scroll, range, savedRange, pos, oldScrollTop;
-                                       if ( $(this).is( ':hidden' ) ) {
-                                               // Do nothing
-                                       } else if ( this.selectionStart || this.selectionStart === 0 ) {
-                                               // Mozilla
-                                               scroll = getCaretScrollPosition( this );
-                                               if ( options.force || scroll < $(this).scrollTop() ||
-                                                               scroll > $(this).scrollTop() + $(this).height() ) {
-                                                       $(this).scrollTop( scroll );
-                                               }
-                                       } else if ( document.selection && document.selection.createRange ) {
-                                               // IE / Opera
-                                               /*
-                                                * IE automatically scrolls the selected text to the
-                                                * bottom of the textarea at range.select() time, except
-                                                * if it was already in view and the cursor position
-                                                * wasn't changed, in which case it does nothing. To
-                                                * cover that case, we'll force it to act by moving one
-                                                * character back and forth.
-                                                */
-                                               range = document.body.createTextRange();
-                                               savedRange = document.selection.createRange();
-                                               pos = $(this).textSelection( 'getCaretPosition' );
-                                               oldScrollTop = this.scrollTop;
-                                               range.moveToElementText( this );
-                                               range.collapse();
-                                               range.move( 'character', pos + 1);
-                                               range.select();
-                                               if ( this.scrollTop !== oldScrollTop ) {
-                                                       this.scrollTop += range.offsetTop;
-                                               } else if ( options.force ) {
-                                                       range.move( 'character', -1 );
+                                       // Do nothing if hidden
+                                       if ( !$(this).is( ':hidden' ) ) {
+                                               if ( this.selectionStart || this.selectionStart === 0 ) {
+                                                       // Mozilla
+                                                       scroll = getCaretScrollPosition( this );
+                                                       if ( options.force || scroll < $(this).scrollTop() ||
+                                                                       scroll > $(this).scrollTop() + $(this).height() ) {
+                                                               $(this).scrollTop( scroll );
+                                                       }
+                                               } else if ( document.selection && document.selection.createRange ) {
+                                                       // IE / Opera
+                                                       /*
+                                                        * IE automatically scrolls the selected text to the
+                                                        * bottom of the textarea at range.select() time, except
+                                                        * if it was already in view and the cursor position
+                                                        * wasn't changed, in which case it does nothing. To
+                                                        * cover that case, we'll force it to act by moving one
+                                                        * character back and forth.
+                                                        */
+                                                       range = document.body.createTextRange();
+                                                       savedRange = document.selection.createRange();
+                                                       pos = $(this).textSelection( 'getCaretPosition' );
+                                                       oldScrollTop = this.scrollTop;
+                                                       range.moveToElementText( this );
+                                                       range.collapse();
+                                                       range.move( 'character', pos + 1);
                                                        range.select();
+                                                       if ( this.scrollTop !== oldScrollTop ) {
+                                                               this.scrollTop += range.offsetTop;
+                                                       } else if ( options.force ) {
+                                                               range.move( 'character', -1 );
+                                                               range.select();
+                                                       }
+                                                       savedRange.select();
                                                }
-                                               savedRange.select();
                                        }
                                        $(this).trigger( 'scrollToPosition' );
                                } );
index 299fabd..bbffe79 100644 (file)
                        };
                }
                var $image = $( '<img>' ).attr( {
-                       width : 23,
+                       width: 23,
                        height: 22,
-                       src   : b.imageFile,
-                       alt   : b.speedTip,
-                       title : b.speedTip,
-                       id    : b.imageId || undefined,
+                       src: b.imageFile,
+                       alt: b.speedTip,
+                       title: b.speedTip,
+                       id: b.imageId || undefined,
                        'class': 'mw-toolbar-editbutton'
                } ).click( function () {
                        toolbar.insertTags( b.tagOpen, b.tagClose, b.sampleText );
index 500a47a..2a02d87 100644 (file)
@@ -70,7 +70,6 @@ jQuery( function ( $ ) {
        // Set initial state
        updateDiffRadios();
 
-
        // Prettify url output for HistoryAction submissions,
        // to cover up action=historysubmit construction.
 
index d23a937..21f40c5 100644 (file)
@@ -44,4 +44,4 @@
                $table.addClass( 'collapsed' );
        } );
 
-}( mediaWiki, jQuery ) );
\ No newline at end of file
+}( mediaWiki, jQuery ) );
index 026052c..4321b1b 100644 (file)
@@ -84,7 +84,6 @@
                                .promise( { abort: apiPromise.abort } );
                },
 
-
                /**
                 * Get the categories that a particular page on the wiki belongs to
                 * @param {mw.Title} title
index 2410091..2382aae 100644 (file)
@@ -34,7 +34,7 @@ mediaWiki.language.convertGrammar = function ( word, form ) {
                        break;
                case 'illative':
                        // Double the last letter and add 'n'
-                       word += word.substr(  word.length-1 ) + 'n';
+                       word += word.substr(  word.length - 1 ) + 'n';
                        break;
                case 'inessive':
                        word += ( aou ? 'ssa' : 'ssä' );
index d1ed041..ae16f24 100644 (file)
@@ -15,7 +15,7 @@ mediaWiki.language.convertGrammar = function ( word, form ) {
        switch ( form ) {
                case 'genitive': // սեռական հոլով
                        if ( word.substr( -1 ) === 'ա' ) {
-                               word = word.substr( 0, word.length -1 )  + 'այի';
+                               word = word.substr( 0, word.length - 1 ) + 'այի';
                        } else if ( word.substr( -1 ) === 'ո' ) {
                                word = word.substr( 0, word.length - 1 ) + 'ոյի';
                        } else if ( word.substr( -4 ) === 'գիրք' ) {
index 7fc171d..04b7d0a 100644 (file)
@@ -19,7 +19,7 @@ mediaWiki.language.convertGrammar = function ( word, form ) {
                        word = word.replace( /tio$/i,'tionis' ); // 3rd declension singular (partly)
                        word = word.replace( /ns$/i, 'ntis' );
                        word = word.replace( /as$/i, 'atis' );
-                       word = word.replace( /es$/i ,'ei' ); // 5th declension singular
+                       word = word.replace( /es$/i'ei' ); // 5th declension singular
                        break;
                case 'accusative':
                        // only a few declensions, and even for those mostly the singular only
@@ -31,7 +31,7 @@ mediaWiki.language.convertGrammar = function ( word, form ) {
                        word = word.replace( /tio$/i,'tionem' ); // 3rd declension singular (partly)
                        word = word.replace( /ns$/i, 'ntem' );
                        word = word.replace( /as$/i, 'atem');
-                       word = word.replace( /es$/i ,'em' ); // 5th declension singular
+                       word = word.replace( /es$/i'em' ); // 5th declension singular
                        break;
                case 'ablative':
                        // only a few declensions, and even for those mostly the singular only
@@ -43,7 +43,7 @@ mediaWiki.language.convertGrammar = function ( word, form ) {
                        word = word.replace( /tio$/i,'tione' ); // 3rd declension singular (partly)
                        word = word.replace( /ns$/i, 'nte' );
                        word = word.replace( /as$/i, 'ate');
-                       word = word.replace( /es$/i ,'e' ); // 5th declension singular
+                       word = word.replace( /es$/i'e' ); // 5th declension singular
                        break;
        }
        return word;
index 4b50834..bdf59be 100644 (file)
@@ -30,7 +30,7 @@ mediaWiki.language.convertGrammar = function ( word, form ) {
        // Checking if word ends on 'у'. 'У' can be either consonant 'W' or vowel 'U' in cyrillic Ossetic.
        // Examples: {{grammar:genitive|аунеу}} = аунеуы, {{grammar:genitive|лæппу}} = лæппуйы.
        else if ( word.match( /у$/i ) ) {
-               if ( ! word.substring( word.length-2, word.length-1 ).match( /[аæеёиоыэюя]$/i ) ) {
+               if ( !word.substring( word.length - 2, word.length - 1 ).match( /[аæеёиоыэюя]$/i ) ) {
                        jot = 'й';
                }
        } else if ( !word.match( /[бвгджзйклмнопрстфхцчшщьъ]$/i ) ) {
index 9b63382..69f7ec5 100644 (file)
@@ -3,33 +3,33 @@
  */
 
 mediaWiki.language.convertGrammar = function ( word, form ) {
-       /*jshint noempty:false */
        var grammarForms = mediaWiki.language.getData( 'uk', 'grammarForms' );
        if ( grammarForms && grammarForms[form] ) {
                return grammarForms[form][word];
        }
        switch ( form ) {
                case 'genitive': // родовий відмінок
-                       if ( ( word.substr( word.length - 4 ) === 'вікі' ) || ( word.substr( word.length - 4 ) === 'Вікі' ) ) {
-                       } else if ( word.substr( word.length - 1 ) === 'ь' ) {
-                               word = word.substr(0, word.length - 1 ) + 'я';
-                       } else if ( word.substr( word.length - 2 ) === 'ія' ) {
-                               word = word.substr(0, word.length - 2 ) + 'ії';
-                       } else if ( word.substr( word.length - 2 ) === 'ка' ) {
-                               word = word.substr(0, word.length - 2 ) + 'ки';
-                       } else if ( word.substr( word.length - 2 ) === 'ти' ) {
-                               word = word.substr(0, word.length - 2 ) + 'тей';
-                       } else if ( word.substr( word.length - 2 ) === 'ды' ) {
-                               word = word.substr(0, word.length - 2 ) + 'дов';
-                       } else if ( word.substr( word.length - 3 ) === 'ник' ) {
-                               word = word.substr(0, word.length - 3 ) + 'ника';
+                       if ( word.substr( word.length - 4 ) !== 'вікі' && word.substr( word.length - 4 ) !== 'Вікі' ) {
+                               if ( word.substr( word.length - 1 ) === 'ь' ) {
+                                       word = word.substr(0, word.length - 1 ) + 'я';
+                               } else if ( word.substr( word.length - 2 ) === 'ія' ) {
+                                       word = word.substr(0, word.length - 2 ) + 'ії';
+                               } else if ( word.substr( word.length - 2 ) === 'ка' ) {
+                                       word = word.substr(0, word.length - 2 ) + 'ки';
+                               } else if ( word.substr( word.length - 2 ) === 'ти' ) {
+                                       word = word.substr(0, word.length - 2 ) + 'тей';
+                               } else if ( word.substr( word.length - 2 ) === 'ды' ) {
+                                       word = word.substr(0, word.length - 2 ) + 'дов';
+                               } else if ( word.substr( word.length - 3 ) === 'ник' ) {
+                                       word = word.substr(0, word.length - 3 ) + 'ника';
+                               }
                        }
                        break;
                case 'accusative': // знахідний відмінок
-                       if ( ( word.substr( word.length - 4 ) === 'вікі' ) || ( word.substr( word.length - 4 ) === 'Вікі' ) ) {
-                       }
-                       else if ( word.substr( word.length - 2 ) === 'ія' ) {
-                               word = word.substr(0, word.length - 2 ) + 'ію';
+                       if ( word.substr( word.length - 4 ) !== 'вікі' && word.substr( word.length - 4 ) !== 'Вікі' ) {
+                               if ( word.substr( word.length - 2 ) === 'ія' ) {
+                                       word = word.substr(0, word.length - 2 ) + 'ію';
+                               }
                        }
                        break;
        }
index 87018f6..a0b5569 100644 (file)
@@ -96,7 +96,7 @@ $.extend( mw.language, {
         */
        preConvertPlural: function ( forms, count ) {
                while ( forms.length < count ) {
-                       forms.push( forms[ forms.length-1 ] );
+                       forms.push( forms[ forms.length - 1 ] );
                }
                return forms;
        },
index 64efbb9..f92d372 100644 (file)
                                        imgHeight = 0;
                                }
 
-                               rows[rows.length-1][rows[rows.length-1].length] = {
+                               rows[rows.length - 1][rows[rows.length - 1].length] = {
                                        $elm: $this,
                                        width: $this.outerWidth(),
                                        imgWidth: imgWidth,
-                                       aspect: imgWidth / imgHeight, // XXX: can divide by 0 ever happen?
+                                       // XXX: can divide by 0 ever happen?
+                                       aspect: imgWidth / imgHeight,
                                        captionWidth: $this.children().children( 'div.gallerytextwrapper' ).width(),
                                        height: imgHeight
                                };
                                                // Also on the off chance there is a bug in this
                                                // code, would prevent accidentally expanding to
                                                // be 10 billion pixels wide.
-                                               mw.log( 'mw.page.gallery: Cannot fit row, aspect is ' + preferredHeight/curRowHeight );
+                                               mw.log( 'mw.page.gallery: Cannot fit row, aspect is ' + preferredHeight / curRowHeight );
                                                if ( i === rows.length - 1 ) {
                                                        // If its the last row, and we can't fit it,
                                                        // don't make the entire row huge.
                                        }
                                        if ( preferredHeight < 5 ) {
                                                // Well something clearly went wrong...
-                                               mw.log( {maxWidth: maxWidth, combinedPadding: combinedPadding, combinedAspect: combinedAspect, wantedWidth: wantedWidth } );
+                                               mw.log( {
+                                                       maxWidth: maxWidth,
+                                                       combinedPadding: combinedPadding,
+                                                       combinedAspect: combinedAspect,
+                                                       wantedWidth: wantedWidth
+                                               } );
                                                mw.log( 'mw.page.gallery: [BUG!] Fitting row ' + i + ' to too small a size: ' + preferredHeight );
                                                // Skip this row.
                                                continue;
                                                imageElm = $imageElm.length ? $imageElm[0] : null;
                                                $caption = $outerDiv.find( 'div.gallerytextwrapper' );
 
-
                                                // Since we are going to re-adjust the height, the vertical
                                                // centering margins need to be reset.
                                                $imageDiv.children( 'div' ).css( 'margin', '0px auto' );
index 8a4d526..50301bd 100644 (file)
@@ -90,4 +90,4 @@
                        }
                }
        } );
-}( mediaWiki, jQuery ) );
\ No newline at end of file
+}( mediaWiki, jQuery ) );
index 23d7837..2cd27af 100644 (file)
@@ -128,7 +128,7 @@ jQuery( function ( $ ) {
        // make the selected tab visible.
        hash = window.location.hash;
        if ( hash.match( /^#mw-prefsection-[\w\-]+/ ) ) {
-               switchPrefTab( hash.replace( '#mw-prefsection-' , '' ) );
+               switchPrefTab( hash.replace( '#mw-prefsection-', '' ) );
        }
 
        // In browsers that support the onhashchange event we will not bind click
@@ -140,7 +140,7 @@ jQuery( function ( $ ) {
        if ( 'onhashchange' in window &&
                ( document.documentMode === undefined || document.documentMode >= 8 )
        ) {
-               $( window ).on( 'hashchange' , function () {
+               $( window ).on( 'hashchange', function () {
                        var hash = window.location.hash;
                        if ( hash.match( /^#mw-prefsection-[\w\-]+/ ) ) {
                                switchPrefTab( hash.replace( '#mw-prefsection-', '' ) );
index 4ee3de3..8a5ff59 100644 (file)
                                };
                                img.src = dataURL;
                        }, mw.config.get( 'wgFileCanRotate' ) ? function ( data ) {
-                               /*jshint camelcase: false, nomen: false */
+                               /*jshint camelcase:false, nomen:false */
                                try {
                                        meta = mw.libs.jpegmeta( data, file.fileName );
                                        meta._binary_data = null;
                        return true;
                }
 
-
                /**
                 * Initialization
                 */
index 73b5dc4..54d1608 100644 (file)
@@ -208,11 +208,15 @@ a.mw-ui-button {
        border-radius: 0;
        float: left;
 
-       &:first-child{
+       &:first-child {
                border-top-left-radius: @buttonBorderRadius;
                border-bottom-left-radius: @buttonBorderRadius;
        }
 
+       &:not(:first-child) {
+               border-left: none;
+       }
+
        &:last-child{
                border-top-right-radius: @buttonBorderRadius;
                border-bottom-right-radius: @buttonBorderRadius;
index eb8c203..9daad74 100644 (file)
@@ -17,7 +17,8 @@
                }
        }
 
-       &:active {
+       &:active,
+       &.mw-ui-checked {
                // lessphp doesn't implement shade (https://github.com/leafo/lessphp/issues/528);
                // it passes it through, then ResourceLoader drops it.
                // background: shade(@bgColor, 20%);
@@ -51,7 +52,8 @@
 
                // make sure disabled buttons don't have hover and active states
                &:hover,
-               &:active {
+               &:active,
+               &.mw-ui-checked {
                        box-shadow: none;
                }
        }
@@ -69,7 +71,8 @@
                color: mix(#fff, @textColor, 20%);
        }
 
-       &:active {
+       &:active,
+       &.mw-ui-checked {
                // lessphp doesn't implement shade, see above
                // color: shade(@textColor, 20%);
                color: mix(#000, @textColor, 20%);
index 32c3f1e..8a7aec2 100644 (file)
                                .replace( rUnderscoreTrim, '' );
                }
 
-
                // Reject illegal characters
                if ( title.match( rInvalid ) ) {
                        return false;
                };
        }() );
 
-
        /* Static members */
 
        /**
         */
        Title.prototype.toString = Title.prototype.getPrefixedDb;
 
-
        /**
         * @alias #getPrefixedText
         * @method
index b6cc2b7..1b183d9 100644 (file)
                        $( '<colgroup>' ).appendTo( $table );
                        $( '<colgroup>' ).css( 'width', 350 ).appendTo( $table );
 
-
                        entryTypeText = function ( entryType ) {
                                switch ( entryType ) {
                                        case 'log':
                                .appendTo( $table );
                        }
 
-
                        return $table;
                },
 
index 6dd4f88..90a6425 100644 (file)
                 * The section of the dialog to show.
                 */
                display: function ( s ) {
-                       this.$dialog.dialog( { buttons:{} } ); // hide the buttons
-                       this.$dialog.find( '.feedback-mode' ).hide(); // hide everything
-                       this.$dialog.find( '.feedback-' + s ).show(); // show the desired div
+                       // Hide the buttons
+                       this.$dialog.dialog( { buttons: {} } );
+                       // Hide everything
+                       this.$dialog.find( '.feedback-mode' ).hide();
+                       // Show the desired div
+                       this.$dialog.find( '.feedback-' + s ).show();
                },
 
                /**
index 85669fb..3a6869e 100644 (file)
        var oldParser,
                slice = Array.prototype.slice,
                parserDefaults = {
-                       magic : {
-                               'SITENAME' : mw.config.get( 'wgSiteName' )
+                       magic: {
+                               'SITENAME': mw.config.get( 'wgSiteName' )
                        },
                        // This is a whitelist based on, but simpler than, Sanitizer.php.
                        // Self-closing tags are not currently supported.
-                       allowedHtmlElements : [
+                       allowedHtmlElements: [
                                'b',
                                'i'
                        ],
                        // Key tag name, value allowed attributes for that tag.
                        // See Sanitizer::setupAttributeWhitelist
-                       allowedHtmlCommonAttributes : [
+                       allowedHtmlCommonAttributes: [
                                // HTML
                                'id',
                                'class',
@@ -41,9 +41,9 @@
                        // Attributes allowed for specific elements.
                        // Key is element name in lower case
                        // Value is array of allowed attributes for that element
-                       allowedHtmlAttributesByElement : {},
-                       messages : mw.messages,
-                       language : mw.language,
+                       allowedHtmlAttributesByElement: {},
+                       messages: mw.messages,
+                       language: mw.language,
 
                        // Same meaning as in mediawiki.js.
                        //
index ee95b8a..adf8ce8 100644 (file)
@@ -8,5 +8,6 @@
     "ooui-dialog-action-close": "Slütj",
     "ooui-outline-control-move-down": "Element efter onern sküüw",
     "ooui-outline-control-move-up": "Element efter boowen sküüw",
+    "ooui-outline-control-remove": "Element wechnem",
     "ooui-toolbar-more": "Muar"
 }
\ No newline at end of file
index 65ec22b..ccabf8d 100644 (file)
@@ -9,5 +9,6 @@
     "ooui-dialog-action-close": "બંધ કરો",
     "ooui-outline-control-move-down": "વસ્તુ નીચે ખસેડો",
     "ooui-outline-control-move-up": "વસ્તુ ઉપર ખસેડો",
+    "ooui-outline-control-remove": "વસ્તુ હટાવો",
     "ooui-toolbar-more": "વધુ"
 }
\ No newline at end of file
index 8798603..33ff886 100644 (file)
@@ -19,6 +19,6 @@
     "ooui-dialog-action-close": "Zamknij",
     "ooui-outline-control-move-down": "Przenieś niżej",
     "ooui-outline-control-move-up": "Przenieś wyżej",
-    "ooui-outline-control-remove": "Usuń przedmiot",
+    "ooui-outline-control-remove": "Usuń element",
     "ooui-toolbar-more": "Więcej"
 }
\ No newline at end of file
index dc3f1f5..f8dc77c 100644 (file)
@@ -4,5 +4,9 @@
             "John Reid"
         ]
     },
-    "ooui-outline-control-remove": "Remuiv eitem"
+    "ooui-dialog-action-close": "Claise",
+    "ooui-outline-control-move-down": "Muiv eetem doon",
+    "ooui-outline-control-move-up": "Muiv eetem up",
+    "ooui-outline-control-remove": "Remuiv eitem",
+    "ooui-toolbar-more": "Mair"
 }
\ No newline at end of file
index 8f3d980..19bcdfe 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.1.0-pre (3b434d5388)
+ * OOjs UI v0.1.0
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2014 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: Fri Mar 21 2014 11:06:28 GMT-0700 (PDT)
+ * Date: Mon Mar 24 2014 17:35:46 GMT-0700 (PDT)
  */
 ( function () {
 
@@ -7044,12 +7044,13 @@ OO.ui.PopupWidget = function OoUiPopupWidget( config ) {
 
        // Mixin constructors
        OO.ui.LabeledElement.call( this, this.$( '<div>' ), config );
+       OO.ui.ClippableElement.call( this, this.$( '<div>' ), config );
 
        // Properties
        this.visible = false;
        this.$popup = this.$( '<div>' );
        this.$head = this.$( '<div>' );
-       this.$body = this.$( '<div>' );
+       this.$body = this.$clippable;
        this.$tail = this.$( '<div>' );
        this.$container = config.$container || this.$( 'body' );
        this.autoClose = !!config.autoClose;
@@ -7087,6 +7088,8 @@ OO.inheritClass( OO.ui.PopupWidget, OO.ui.Widget );
 
 OO.mixinClass( OO.ui.PopupWidget, OO.ui.LabeledElement );
 
+OO.mixinClass( OO.ui.PopupWidget, OO.ui.ClippableElement );
+
 /* Events */
 
 /**
@@ -7192,6 +7195,7 @@ OO.ui.PopupWidget.prototype.hasTail = function () {
  */
 OO.ui.PopupWidget.prototype.show = function () {
        if ( !this.visible ) {
+               this.setClipping( true );
                this.$element.show();
                this.visible = true;
                this.emit( 'show' );
@@ -7211,6 +7215,7 @@ OO.ui.PopupWidget.prototype.show = function () {
  */
 OO.ui.PopupWidget.prototype.hide = function () {
        if ( this.visible ) {
+               this.setClipping( false );
                this.$element.hide();
                this.visible = false;
                this.emit( 'hide' );
@@ -7476,6 +7481,13 @@ OO.ui.SearchWidget.prototype.getQuery = function () {
        return this.query;
 };
 
+/**
+ * Reset the widget to initial value.
+ */
+OO.ui.SearchWidget.prototype.clear = function () {
+       this.query.setValue( '' );
+};
+
 /**
  * Get the results list.
  *
index dbce03d..b546253 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.1.0-pre (3b434d5388)
+ * OOjs UI v0.1.0
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2014 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: Fri Mar 21 2014 11:06:28 GMT-0700 (PDT)
+ * Date: Mon Mar 24 2014 17:35:46 GMT-0700 (PDT)
  */
 
 /* Textures */
 }
 
 .oo-ui-popupToolGroup.oo-ui-iconedElement .oo-ui-popupToolGroup-handle .oo-ui-labeledElement-label {
-  margin-left: 3.25em;
+  margin-left: 3em;
 }
 
 .oo-ui-popupToolGroup.oo-ui-indicatedElement .oo-ui-popupToolGroup-handle .oo-ui-labeledElement-label {
   display: inline-block;
   width: 2em;
   height: 2em;
-  margin-right: 0.5em;
+  margin-right: 0.25em;
   vertical-align: middle;
 }
 
   cursor: default;
 }
 
+.oo-ui-popupWidget-body {
+  clear: both;
+}
+
 .oo-ui-buttonGroupWidget {
   border-radius: 0.3em;
 }
index e35fcd1..03f133e 100644 (file)
@@ -91,7 +91,7 @@ relativeforfloats = window.relativeforfloats = function () {
 setrelative = window.setrelative = function ( nodes ) {
        var i = 0;
        while ( i < nodes.length ) {
-               if( ( ( nodes[i].style.float && nodes[i].style.float !== ( 'none' ) ||
+               if ( ( ( nodes[i].style.float && nodes[i].style.float !== ( 'none' ) ||
                        ( nodes[i].align && nodes[i].align !== ( 'none' ) ) ) &&
                        ( !nodes[i].style.position || nodes[i].style.position !== 'relative' ) ) )
                {
@@ -135,7 +135,7 @@ window.onbeforeprint = function () {
        }
 };
 
-window.onafterprint = function() {
+window.onafterprint = function () {
        for ( var i = 0; i < expandedURLs.length; i++ ) {
                if ( expandedURLs[i] ) {
                        expandedURLs[i].removeNode( true );
index ca74b38..c017e3c 100644 (file)
@@ -5,7 +5,7 @@
  * http://www.modernmethod.com/sajax/
  */
 
-/*jshint camelcase:false, onevar:false */
+/*jshint camelcase:false */
 /*global alert */
 ( function ( mw ) {
 
@@ -89,9 +89,7 @@ function createXhr() {
  * with id = showFoo
  */
 function doAjaxRequest( func_name, args, target ) {
-       var i, x;
-       var uri;
-       var post_data;
+       var i, x, uri, post_data;
        uri = mw.util.wikiScript() + '?action=ajax';
        if ( window.sajax_request_type === 'GET' ) {
                if ( uri.indexOf( '?' ) === -1 ) {
@@ -146,7 +144,7 @@ function doAjaxRequest( func_name, args, target ) {
                } else if ( typeof target === 'object' ) {
                        if ( target.tagName === 'INPUT' ) {
                                if ( x.status === 200 ) {
-                                       target.value= x.responseText;
+                                       target.value = x.responseText;
                                }
                                //else alert( 'Error: ' + x.status + ' ' + x.statusText + ' (' + x.responseText + ')' );
                        } else {
@@ -173,8 +171,9 @@ function doAjaxRequest( func_name, args, target ) {
  * @return {boolean} Whether the browser supports AJAX
  */
 function wfSupportsAjax() {
-       var request = createXhr();
-       var supportsAjax = request ? true : false;
+       var request = createXhr(),
+               supportsAjax = request ? true : false;
+
        request = undefined;
        return supportsAjax;
 }
index a869923..41d20fb 100644 (file)
@@ -149,14 +149,3 @@ div.magnify a, div.magnify img {
 img.thumbborder {
        border: 1px solid #dddddd;
 }
-
-/**
- * Basic styles for the user login and create account forms
- */
-#loginend {
-       margin: 0.5em;
-}
-
-#loginend table {
-       width: 100%;
-}
index fb8edc1..2886e08 100644 (file)
@@ -98,7 +98,7 @@
                // Show/Hide memcached servers when needed
                $( 'input[name$="config_wgMainCacheType"]' ).change( function () {
                        var $memc = $( '#config-memcachewrapper' );
-                       if( $( 'input[name$="config_wgMainCacheType"]:checked' ).val() === 'memcached' ) {
+                       if ( $( 'input[name$="config_wgMainCacheType"]:checked' ).val() === 'memcached' ) {
                                $memc.show( 'slow' );
                        } else {
                                $memc.hide( 'slow' );
index d639f63..7933caf 100644 (file)
@@ -85,7 +85,6 @@ function uploadSetup() {
                wpLicenseTbody.insertBefore( row, wpLicenseRow.nextSibling );
        }
 
-
        // fillDestFile setup
        uploadSourceIds = mw.config.get( 'wgUploadSourceIds' );
        len = uploadSourceIds.length;
@@ -98,7 +97,7 @@ function uploadSetup() {
 }
 
 wgUploadWarningObj = window.wgUploadWarningObj = {
-       responseCache: { '' : '&nbsp;' },
+       responseCache: { '': '&nbsp;' },
        nameToCheck: '',
        typing: false,
        delay: 500, // ms
@@ -303,7 +302,7 @@ window.toggleFilenameFiller = function () {
 
 wgUploadLicenseObj = window.wgUploadLicenseObj = {
 
-       responseCache: { '' : '' },
+       responseCache: { '': '' },
 
        fetchPreview: function ( license ) {
                var cached, title;
index f0aa943..df5682e 100644 (file)
@@ -240,7 +240,7 @@ win.importStylesheet = function ( page ) {
        return win.importStylesheetURI( uri );
 };
 
-win.importStylesheetURI = function( url, media ) {
+win.importStylesheetURI = function ( url, media ) {
        var l = document.createElement( 'link' );
        l.rel = 'stylesheet';
        l.href = url;
index 4326496..c32e869 100644 (file)
@@ -642,10 +642,6 @@ td.htmlform-tip {
        margin-top: 2em;
 }
 
-#loginend, #signupend {
-       clear: both;
-}
-
 #userloginprompt, #languagelinks {
        font-size: 85%;
 }
index 8420431..0bc114a 100644 (file)
@@ -8,7 +8,7 @@ jQuery( function ( $ ) {
                        .attr( 'tabindex', '0' )
                        // For accessibility, show the menu when the h3 is clicked (bug 24298/46486)
                        .on( 'click keypress', function ( e ) {
-                               if( e.type === 'click' || e.which === 13 ) {
+                               if ( e.type === 'click' || e.which === 13 ) {
                                        $el.toggleClass( 'menuForceShow' );
                                        e.preventDefault();
                                }
diff --git a/tests/frontend/Gruntfile.js b/tests/frontend/Gruntfile.js
new file mode 100644 (file)
index 0000000..a8aad41
--- /dev/null
@@ -0,0 +1,51 @@
+/*!
+ * Grunt file
+ */
+
+/*jshint node:true */
+module.exports = function ( grunt ) {
+       grunt.loadNpmTasks( 'grunt-contrib-jshint' );
+       grunt.loadNpmTasks( 'grunt-contrib-watch' );
+       grunt.loadNpmTasks( 'grunt-jscs-checker' );
+
+       grunt.file.setBase(  __dirname + '/../..' );
+
+       grunt.initConfig( {
+               pkg: grunt.file.readJSON( __dirname + '/package.json' ),
+               jshint: {
+                       options: {
+                               jshintrc: '.jshintrc'
+                       },
+                       all: [ '*.js', '{includes,languages,resources,skins,tests}/**/*.js' ]
+               },
+               jscs: {
+                       // Known issues:
+                       // - https://github.com/mdevils/node-jscs/issues/277
+                       // - https://github.com/mdevils/node-jscs/issues/278
+                       all: [
+                               '<%= jshint.all %>',
+                               // Auto-generated file with JSON (double quotes)
+                               '!tests/qunit/data/mediawiki.jqueryMsg.data.js'
+
+                       // Exclude all files ignored by jshint
+                       ].concat( grunt.file.read( '.jshintignore' ).split( '\n' ).reduce( function ( patterns, pattern ) {
+                               // Filter out empty lines
+                               if ( pattern.length && pattern[0] !== '#' ) {
+                                       patterns.push( '!' + pattern );
+                               }
+                               return patterns;
+                       }, [] ) )
+               },
+               watch: {
+                       files: [
+                               '.{jshintrc,jscs.json,jshintignore,csslintrc}',
+                               '<%= jshint.all %>'
+                       ],
+                       tasks: ['test']
+               }
+       } );
+
+       grunt.registerTask( 'lint', ['jshint', 'jscs'] );
+       grunt.registerTask( 'test', ['lint'] );
+       grunt.registerTask( 'default', ['test'] );
+};
diff --git a/tests/frontend/package.json b/tests/frontend/package.json
new file mode 100644 (file)
index 0000000..5eb5c0a
--- /dev/null
@@ -0,0 +1,13 @@
+{
+  "name": "mediawiki",
+  "version": "0.0.0",
+  "scripts": {
+    "test": "grunt test"
+  },
+  "devDependencies": {
+    "grunt": "0.4.2",
+    "grunt-contrib-jshint": "0.8.0",
+    "grunt-contrib-watch": "0.5.3",
+    "grunt-jscs-checker": "0.4.0"
+  }
+}
index 1e0f78d..e8e71b8 100644 (file)
@@ -10170,7 +10170,8 @@ parsoid=wt2html,wt2wt,html2html
 # See https://www.mediawiki.org/wiki/Help:Images#Size_and_frame
 # and https://bugzilla.wikimedia.org/show_bug.cgi?id=62258
 # Foobar has actual size of 1941x220
-# 1. Thumbs & frameless always reduce, can't be enlarged
+# 1. Thumbs & frameless always reduce, can't be enlarged unless it's
+#    a scalable format.
 # 2. Framed images ignore width; always render at default size.
 #    If given a height, they respect height but continue to ignore width.
 # 3. "Unspecified format" and border are the only types which can be
@@ -10224,16 +10225,20 @@ parsoid=wt2html,wt2wt,html2html
 !! end
 
 !! test
-Image: thumbs can't be enlarged past original size
+Image: bitmap thumbs can't be enlarged past original size, but vector can.
 !! options
 parsoid=wt2html,wt2wt,html2html
 !! wikitext
 [[File:Foobar.jpg|thumb|2000px]]
+
+[[File:Foobar.svg|thumb|2000px]]
 !! html/php
 <div class="thumb tright"><div class="thumbinner" style="width:1943px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" class="thumbimage" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div></div></div></div>
+<div class="thumb tright"><div class="thumbinner" style="width:2002px;"><a href="/wiki/File:Foobar.svg" class="image"><img alt="Foobar.svg" src="http://example.com/images/thumb/f/ff/Foobar.svg/2000px-Foobar.svg.png" width="2000" height="1500" class="thumbimage" srcset="http://example.com/images/thumb/f/ff/Foobar.svg/3000px-Foobar.svg.png 1.5x, http://example.com/images/thumb/f/ff/Foobar.svg/4000px-Foobar.svg.png 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.svg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div></div></div></div>
 
 !! html/parsoid
 <figure typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a></figure>
+<figure typeof="mw:Image/Thumb"><a href="File:Foobar.svg"><img resource="./File:Foobar.svg" src="//example.com/images/f/ff/Foobar.svg" height="1500" width="2000"/></a></figure>
 !! end
 
 !! test
@@ -10250,16 +10255,20 @@ parsoid=wt2html,wt2wt,html2html
 !! end
 
 !! test
-Image: frameless can't be enlarged past original size
+Image: bitmap frameless can't be enlarged past original size, but vector can
 !! options
 parsoid=wt2html,wt2wt,html2html
 !! wikitext
 [[File:Foobar.jpg|frameless|2000px]]
+
+[[File:Foobar.svg|frameless|2000px]]
 !! html/php
 <p><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
+</p><p><a href="/wiki/File:Foobar.svg" class="image"><img alt="Foobar.svg" src="http://example.com/images/thumb/f/ff/Foobar.svg/2000px-Foobar.svg.png" width="2000" height="1500" srcset="http://example.com/images/thumb/f/ff/Foobar.svg/3000px-Foobar.svg.png 1.5x, http://example.com/images/thumb/f/ff/Foobar.svg/4000px-Foobar.svg.png 2x" /></a>
 </p>
 !! html/parsoid
 <p><span typeof="mw:Image/Frameless"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a></span></p>
+<p><span typeof="mw:Image/Frameless"><a href="File:Foobar.svg"><img resource="./File:Foobar.svg" src="//example.com/images/f/ff/Foobar.svg" height="1500" width="2000"/></a></span></p>
 !! end
 
 !! test
@@ -10357,153 +10366,191 @@ SVG thumbnails with no language set
 !! options
 !! wikitext
 [[File:Foobar.svg|thumb|caption]]
-!! html
+!! html/php
 <div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.svg" class="image"><img alt="" src="http://example.com/images/thumb/f/ff/Foobar.svg/180px-Foobar.svg.png" width="180" height="135" class="thumbimage" srcset="http://example.com/images/thumb/f/ff/Foobar.svg/270px-Foobar.svg.png 1.5x, http://example.com/images/thumb/f/ff/Foobar.svg/360px-Foobar.svg.png 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.svg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div>caption</div></div></div>
 
+!! html/parsoid
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="File:Foobar.svg"><img resource="./File:Foobar.svg" src="//example.com/images/f/ff/Foobar.svg" height="165" width="220"/></a><figcaption>caption</figcaption></figure>
 !! end
 
 !! test
 SVG thumbnails with language de
 !! options
+parsoid=wt2html,wt2wt,html2html
 !! wikitext
 [[File:Foobar.svg|thumb|caption|lang=de]]
-!! html
+!! html/php
 <div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/index.php?title=File:Foobar.svg&amp;lang=de" class="image"><img alt="" src="http://example.com/images/thumb/f/ff/Foobar.svg/langde-180px-Foobar.svg.png" width="180" height="135" class="thumbimage" srcset="http://example.com/images/thumb/f/ff/Foobar.svg/langde-270px-Foobar.svg.png 1.5x, http://example.com/images/thumb/f/ff/Foobar.svg/langde-360px-Foobar.svg.png 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.svg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div>caption</div></div></div>
 
+!! html/parsoid
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="File:Foobar.svg"><img resource="./File:Foobar.svg" src="//example.com/images/f/ff/Foobar.svg" lang="de" height="165" width="220"/></a><figcaption>caption</figcaption></figure>
 !! end
 
 !! test
 SVG thumbnails with invalid language code
 !! options
+parsoid=wt2html,wt2wt,html2html
 !! wikitext
 [[File:Foobar.svg|thumb|caption|lang=invalid.language.code]]
-!! html
+!! html/php
 <div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.svg" class="image"><img alt="" src="http://example.com/images/thumb/f/ff/Foobar.svg/180px-Foobar.svg.png" width="180" height="135" class="thumbimage" srcset="http://example.com/images/thumb/f/ff/Foobar.svg/270px-Foobar.svg.png 1.5x, http://example.com/images/thumb/f/ff/Foobar.svg/360px-Foobar.svg.png 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.svg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div>lang=invalid.language.code</div></div></div>
 
+!! html/parsoid
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="File:Foobar.svg"><img resource="./File:Foobar.svg" src="//example.com/images/f/ff/Foobar.svg" height="165" width="220"/></a><figcaption>lang=invalid.language.code</figcaption></figure>
 !! end
 
 !! test
 BUG 1887: A ISBN with a thumbnail
 !! wikitext
-[[Image:foobar.jpg|thumb|ISBN 1235467890]]
-!! html
+[[File:Foobar.jpg|thumb|ISBN 1235467890]]
+!! html/php
 <div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div><a href="/wiki/Special:BookSources/1235467890" class="internal mw-magiclink-isbn">ISBN 1235467890</a></div></div></div>
 
+!! html/parsoid
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="25" width="220"/></a><figcaption><a href="Special:BookSources/1235467890" rel="mw:ExtLink">ISBN 1235467890</a></figcaption></figure>
 !! end
 
 !! test
 BUG 1887: A RFC with a thumbnail
 !! wikitext
-[[Image:foobar.jpg|thumb|This is RFC 12354]]
-!! html
+[[File:Foobar.jpg|thumb|This is RFC 12354]]
+!! html/php
 <div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div>This is <a class="external mw-magiclink-rfc" rel="nofollow" href="//tools.ietf.org/html/rfc12354">RFC 12354</a></div></div></div>
 
+!! html/parsoid
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="25" width="220"/></a><figcaption>This is <a href="//tools.ietf.org/html/rfc12354" rel="mw:ExtLink">RFC 12354</a></figcaption></figure>
 !! end
 
 !! test
 BUG 1887: A mailto link with a thumbnail
 !! wikitext
-[[Image:foobar.jpg|thumb|Please mailto:nobody@example.com]]
-!! html
+[[File:Foobar.jpg|thumb|Please mailto:nobody@example.com]]
+!! html/php
 <div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div>Please <a rel="nofollow" class="external free" href="mailto:nobody@example.com">mailto:nobody@example.com</a></div></div></div>
 
+!! html/parsoid
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="25" width="220"/></a><figcaption>Please <a rel="mw:ExtLink" href="mailto:nobody@example.com">mailto:nobody@example.com</a></figcaption></figure>
 !! end
 
 # Pending resolution to bug 368
 !! test
 BUG 648: Frameless image caption with a link
 !! wikitext
-[[Image:foobar.jpg|text with a [[link]] in it]]
-!! html
+[[File:Foobar.jpg|text with a [[link]] in it]]
+!! html/php
 <p><a href="/wiki/File:Foobar.jpg" class="image" title="text with a link in it"><img alt="text with a link in it" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
 </p>
+!! html/parsoid
+<p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"text with a [[link]] in it"}'><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a></span></p>
 !! end
 
 !! test
 BUG 648: Frameless image caption with a link (suffix)
 !! wikitext
-[[Image:foobar.jpg|text with a [[link]]foo in it]]
-!! html
+[[File:Foobar.jpg|text with a [[link]]foo in it]]
+!! html/php
 <p><a href="/wiki/File:Foobar.jpg" class="image" title="text with a linkfoo in it"><img alt="text with a linkfoo in it" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
 </p>
+!! html/parsoid
+<p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"text with a [[link]]foo in it"}'><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a></span></p>
 !! end
 
 !! test
 BUG 648: Frameless image caption with an interwiki link
 !! wikitext
-[[Image:foobar.jpg|text with a [[MeatBall:Link]] in it]]
-!! html
+[[File:Foobar.jpg|text with a [[MeatBall:Link]] in it]]
+!! html/php
 <p><a href="/wiki/File:Foobar.jpg" class="image" title="text with a MeatBall:Link in it"><img alt="text with a MeatBall:Link in it" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
 </p>
+!! html/parsoid
+<p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"text with a [[MeatBall:Link]] in it"}'><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a></span></p>
 !! end
 
 !! test
 BUG 648: Frameless image caption with a piped interwiki link
 !! wikitext
-[[Image:foobar.jpg|text with a [[MeatBall:Link|link]] in it]]
-!! html
+[[File:Foobar.jpg|text with a [[MeatBall:Link|link]] in it]]
+!! html/php
 <p><a href="/wiki/File:Foobar.jpg" class="image" title="text with a link in it"><img alt="text with a link in it" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
 </p>
+!! html/parsoid
+<p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"text with a [[MeatBall:Link|link]] in it"}'><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a></span></p>
 !! end
 
 !! test
 Escape HTML special chars in image alt text
 !! wikitext
-[[Image:foobar.jpg|& < > "]]
-!! html
+[[File:Foobar.jpg|& < > "]]
+!! html/php
 <p><a href="/wiki/File:Foobar.jpg" class="image" title="&amp; &lt; &gt; &quot;"><img alt="&amp; &lt; &gt; &quot;" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
 </p>
+!! html/parsoid
+<p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"&amp; &lt; > \""}'><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a></span></p>
 !! end
 
 !! test
 BUG 499: Alt text should have &#1234;, not &amp;1234;
 !! wikitext
-[[Image:foobar.jpg|&#9792;]]
-!! html
+[[File:Foobar.jpg|&#9792;]]
+!! html/php
 <p><a href="/wiki/File:Foobar.jpg" class="image" title="♀"><img alt="♀" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
 </p>
+!! html/parsoid
+<p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"&amp;#9792;"}'><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a></span></p>
 !! end
 
 !! test
 Broken image caption with link
+!! options
+parsoid=wt2html,wt2wt,html2html
 !! wikitext
 [[Image:Foobar.jpg|thumb|This is a broken caption. But [[Main Page|this]] is just an ordinary link.
-!! html
+!! html/php
 <p>[[Image:Foobar.jpg|thumb|This is a broken caption. But <a href="/wiki/Main_Page" title="Main Page">this</a> is just an ordinary link.
 </p>
+!! html/parsoid
+<p>[[Image:Foobar.jpg|thumb|This is a broken caption. But <a rel="mw:WikiLink" href="Main_Page">this</a> is just an ordinary link.</p>
 !! end
 
 !! test
 Image caption containing another image
 !! wikitext
-[[Image:Foobar.jpg|thumb|This is a caption with another [[Image:icon.png|image]] inside it!]]
-!! html
-<div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div>This is a caption with another <a href="/index.php?title=Special:Upload&amp;wpDestFile=Icon.png" class="new" title="File:Icon.png">image</a> inside it!</div></div></div>
+[[File:Foobar.jpg|thumb|This is a caption with another [[File:Thumb.png|image]] inside it!]]
+!! html/php
+<div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div>This is a caption with another <a href="/wiki/File:Thumb.png" class="image" title="image"><img alt="image" src="http://example.com/images/e/ea/Thumb.png" width="135" height="135" /></a> inside it!</div></div></div>
 
+!! html/parsoid
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="25" width="220"/></a><figcaption>This is a caption with another <span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"image"}'><a href="File:Thumb.png"><img resource="./File:Thumb.png" src="//example.com/images/e/ea/Thumb.png" height="135" width="135"/></a></span> inside it!</figcaption></figure>
 !! end
 
 !! test
-Image caption containing a newline
+Image: caption containing a newline
 !! wikitext
-[[Image:Foobar.jpg|This
+[[File:Foobar.jpg|This
 *is some text]]
-!! html
+!! html/php
 <p><a href="/wiki/File:Foobar.jpg" class="image" title="This *is some text"><img alt="This *is some text" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
 </p>
+!! html/parsoid
+<p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"This\n*is some text"}'><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a></span></p>
 !!end
 
 !!test
-Parsoid: Image caption containing leading space
+Image: caption containing leading space
 (The leading space should not trigger nowiki escaping in wt2wt mode)
 !! wikitext
-[[Image:Foobar.jpg|thumb| bar]]
-!! html
+[[File:Foobar.jpg|thumb| bar]]
+!! html/php
 <div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div>bar</div></div></div>
 
+!! html/parsoid
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="25" width="220"/></a><figcaption> bar</figcaption></figure>
 !!end
 
 !! test
-Images: caption containing a table
+Image: caption containing a table
+!! options
+parsoid=wt2html,wt2wt,html2html
 !! wikitext
 [[Image:Foobar.jpg|thumb|200px|This is an example image thumbnail caption with a table
 {|
@@ -14712,6 +14759,14 @@ ISBN 3-462-04561-X
 </p>
 !! end
 
+!! test
+ISBN with empty prefix (parsoid test)
+!! wikitext
+ISBN 1234567890
+!! html/parsoid
+<p><a href="Special:BookSources/1234567890" rel="mw:ExtLink">ISBN 1234567890</a></p>
+!! end
+
 !! test
 Bug 22905: <abbr> followed by ISBN followed by </a>
 !! wikitext
@@ -19373,62 +19428,128 @@ parsoid=html2wt
 !! test
 Image: Modifying size of an image (1)
 !! options
-parsoid=html2wt
+parsoid={
+  "modes": ["wt2wt"],
+  "changes": [
+    ["img[height]", "attr", "height", "22"],
+    ["img[width]", "attr", "width", "200"]
+  ]
+}
 !! wikitext
+[[Image:Foobar.jpg|230x230px]]
+!! wikitext/edited
 [[Image:Foobar.jpg|200x200px]]
-!! html
-<p><span typeof="mw:Image" data-parsoid='{"optList":[{"ck":"width","ak":"230x230px"}]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"}}'><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/230px-Foobar.jpg" height="22" width="200" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"26","width":"230"},"sa":{"resource":"Image:Foobar.jpg"}}'/></a></span></p>
 !!end
 
 !! test
 Image: Modifying size of an image (2)
 !! options
-parsoid=html2wt
+parsoid={
+  "modes": ["wt2wt"],
+  "changes": [
+    ["img[height]", "attr", "height", "100"],
+    ["img[width]", "attr", "width", "500"]
+  ]
+}
 !! wikitext
+[[Image:Foobar.jpg|230x230px]]
+!! wikitext/edited
 [[Image:Foobar.jpg|500x500px]]
-!! html
-<p><span typeof="mw:Image" data-parsoid='{"optList":[{"ck":"width","ak":"230x230px"}]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"}}'><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/230px-Foobar.jpg" height="100" width="500" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"26","width":"230"},"sa":{"resource":"Image:Foobar.jpg"}}'/></a></span></p>
 !!end
 
-# note that the data-parsoid value conflicts with the figure's class
+# Change in size is ignored so long as class='mw-default-size'
+!! test
+Image: Modifying size of an image (3)
+!! options
+parsoid={
+  "modes": ["wt2wt"],
+  "changes": [
+    ["figure[class]", "removeClass", "mw-default-size"],
+    ["figure img", "attr", "height", "19"],
+    ["figure img", "attr", "width", "170"]
+  ]
+}
+!! wikitext
+[[Image:Foobar.jpg|thumb]]
+!! wikitext/edited
+[[Image:Foobar.jpg|thumb|170x170px]]
+!!end
+
 !! test
 Image: Modifying alignment of an image (bug 48665)
 !! options
-parsoid=html2wt
+parsoid={
+  "modes": ["wt2wt"],
+  "changes": [
+    ["figure[class]", "removeClass", "mw-halign-right"],
+    ["figure[class]", "addClass", "mw-halign-left"]
+  ]
+}
 !! wikitext
+[[Image:Foobar.jpg|thumb|caption|right]]
+!! wikitext/edited
 [[Image:Foobar.jpg|thumb|caption|left]]
-!! html
-<figure class="mw-default-size mw-halign-left" typeof="mw:Image/Thumb" data-parsoid='{"optList":[{"ck":"thumbnail","ak":"thumb"},{"ck":"caption","ak":"caption"},{"ck":"right","ak":"right"}]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"}}'><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" height="20" width="180" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"20","width":"180"},"sa":{"resource":"Image:Foobar.jpg"}}'/></a><figcaption>caption</figcaption></figure>
+!! end
+
+!! test
+Image: Modifying mw-default-size of an frameless image (bug 62805)
+!! options
+parsoid={
+  "modes": ["wt2wt"],
+  "changes": [
+    ["figure.mw-default-size", "removeClass", "mw-default-size"]
+  ]
+}
+!! wikitext
+[[Image:Foobar.jpg|frameless|right]]
+!! wikitext/edited
+[[Image:Foobar.jpg|frameless|right|220x220px]]
 !! end
 
 !! test
 Image: Modifying valign of an image (bug 49221)
 !! options
-parsoid=html2wt
+parsoid={
+  "modes": ["wt2wt"],
+  "changes": [
+    ["*[typeof=\"mw:Image\"]", "removeClass", "mw-valign-middle"],
+    ["*[typeof=\"mw:Image\"]", "addClass", "mw-valign-text-top"]
+  ]
+}
 !! wikitext
+[[File:Foobar.jpg|20px|middle]]
+!! wikitext/edited
 [[File:Foobar.jpg|20px|text-top]]
-!! html
-<p><span class="mw-valign-text-top" typeof="mw:Image" data-parsoid='{"optList":[{"ck":"width","ak":"20px"},{"ck":"text_top","ak":"text-top"}]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"}}'><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/20px-Foobar.jpg" height="2" width="20" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"2","width":"20"},"sa":{"resource":"File:Foobar.jpg"}}'/></a></span></p>
 !! end
 
 !! test
 Image: Modifying alt attribute of an image (bug 56400)
 !! options
-parsoid=html2wt
+parsoid={
+  "modes": ["wt2wt"],
+  "changes": [
+    ["img[alt]", "attr", "alt", "some alternate edited text"]
+  ]
+}
 !! wikitext
+[[File:Foobar.jpg|thumb|some caption|alt=some alternate text]]
+!! wikitext/edited
 [[File:Foobar.jpg|thumb|some caption|alt=some alternate edited text]]
-!! html
-<figure class="mw-default-size" typeof="mw:Image/Thumb" data-parsoid='{"optList":[{"ck":"thumbnail","ak":"thumb"},{"ck":"caption","ak":"some caption"},{"ck":"alt","ak":"alt=some alternate text"}]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"}}'><img alt="some alternate edited text" resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" height="20" width="180" data-parsoid='{"a":{"alt":"some alternate edited text","resource":"./File:Foobar.jpg","height":"20","width":"180"},"sa":{"alt":"alt=some alternate edited text","resource":"File:Foobar.jpg"}}'/></a><figcaption>some caption</figcaption></figure>
 !!end
 
 !! test
 Image: Modifying caption of an image
 !! options
-parsoid=html2wt
+parsoid={
+  "modes": ["wt2wt"],
+  "changes": [
+    ["figcaption", "text", "new caption"]
+  ]
+}
 !! wikitext
+[[Image:Foobar.jpg|thumb|original caption]]
+!! wikitext/edited
 [[Image:Foobar.jpg|thumb|new caption]]
-!! html
-<figure class="mw-default-size" typeof="mw:Image/Thumb" data-parsoid='{"optList":[{"ck":"thumbnail","ak":"thumb"},{"ck":"caption","ak":"original caption"}]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"}}'><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" height="20" width="180" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"20","width":"180"},"sa":{"resource":"Image:Foobar.jpg"}}'/></a><figcaption>new caption</figcaption></figure>
 !!end
 
 !! test
@@ -19480,7 +19601,7 @@ parsoid
 !!end
 
 !! test
-Images: upright option (parsoid)
+Image: upright option (parsoid)
 !! options
 parsoid
 !! wikitext
@@ -19492,7 +19613,7 @@ parsoid
 !!end
 
 !! test
-Images: upright option is ignored on inline and frame images (parsoid)
+Image: upright option is ignored on inline and frame images (parsoid)
 !! options
 parsoid
 !! wikitext
@@ -19501,6 +19622,48 @@ parsoid
 <p><span typeof="mw:Image" data-mw='{"caption":"caption"}'><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="57" width="500"/></a></span></p>
 !!end
 
+!! test
+Image: from basic HTML (1)
+!! options
+parsoid=html2wt
+!! html/parsoid
+<span typeof="mw:Image">
+  <img src="File:Foobar.jpg" width=100 height=100 alt="Alt">
+</span>
+!! wikitext
+[[File:Foobar.jpg|link=|alt=Alt|100x100px]]
+!! end
+
+!! test
+Image: from basic HTML (2)
+!! options
+parsoid=html2wt
+!! html/parsoid
+<img src="File:Foobar.jpg" width=100 height=100 alt="Alt">
+!! wikitext
+[[File:Foobar.jpg|link=|alt=Alt|100x100px]]
+!! end
+
+!! test
+Image: from basic HTML (3)
+!! options
+parsoid=html2wt
+!! html/parsoid
+<a href="Main"><img src="File:Foobar.jpg" width=100 height=100 alt="Alt"></a>
+!! wikitext
+[[File:Foobar.jpg|link=Main|alt=Alt|100x100px]]
+!! end
+
+!! test
+Image: from basic HTML (4)
+!! options
+parsoid=html2wt
+!! html/parsoid
+<img src="File:Foobar.jpg">
+!! wikitext
+[[File:Foobar.jpg|link=]]
+!! end
+
 !! test
 Lists: Serialize correctly even when list content is wrapped in p-tags (like VE does)
 !! options
index 4fcd5fc..57879f8 100644 (file)
@@ -16,7 +16,7 @@ David Vignoni
 
 US_states_by_total_state_tax_revenue.svg
 http://commons.wikimedia.org/wiki/File:US_states_by_total_state_tax_revenue.svg
-CC-BY 3.0
+CC BY 3.0
 TastyCakes on English Wikipedia
 
 greyscale-na-png.png, rgb-png.png, Xmp-exif-multilingual_test.jpg
@@ -43,6 +43,6 @@ Larry Ewing, Simon Budig, Anja Gerwinski
 
 Speech_bubbles.svg (Modified slightly)
 https://commons.wikimedia.org/wiki/File:Speech_bubbles.svg
-CC-BY-SA 3.0
+CC BY-SA 3.0
 Jarry1250
 
index e568eaf..aedc23a 100644 (file)
@@ -24,9 +24,9 @@ class DjVuTest extends MediaWikiTestCase {
                parent::setUp();
 
                //cli tool setup
-               $wgDjvuRenderer = $wgDjvuRenderer ? $wgDjvuRenderer : '/usr/local/bin/ddjvu';
-               $wgDjvuDump = $wgDjvuDump ? $wgDjvuDump : '/usr/local/bin/djvudump';
-               $wgDjvuToXML = $wgDjvuToXML ? $wgDjvuToXML : '/usr/local/bin/djvutoxml';
+               $wgDjvuRenderer = $wgDjvuRenderer ? $wgDjvuRenderer : '/usr/bin/ddjvu';
+               $wgDjvuDump = $wgDjvuDump ? $wgDjvuDump : '/usr/bin/djvudump';
+               $wgDjvuToXML = $wgDjvuToXML ? $wgDjvuToXML : '/usr/bin/djvutoxml';
                if (
                        !$this->checkIfToolExists( $wgDjvuRenderer ) ||
                        !$this->checkIfToolExists( $wgDjvuDump ) ||
index 8aee937..cfb3f72 100644 (file)
@@ -158,10 +158,10 @@ class PreprocessorTest extends MediaWikiTestCase {
         */
        public static function provideFiles() {
                return array(
-                       array( "QuoteQuran" ), # http://en.wikipedia.org/w/index.php?title=Template:QuoteQuran/sandbox&oldid=237348988 GFDL + CC-BY-SA by Striver
-                       array( "Factorial" ), # http://en.wikipedia.org/w/index.php?title=Template:Factorial&oldid=98548758 GFDL + CC-BY-SA by Polonium
+                       array( "QuoteQuran" ), # http://en.wikipedia.org/w/index.php?title=Template:QuoteQuran/sandbox&oldid=237348988 GFDL + CC BY-SA by Striver
+                       array( "Factorial" ), # http://en.wikipedia.org/w/index.php?title=Template:Factorial&oldid=98548758 GFDL + CC BY-SA by Polonium
                        array( "All_system_messages" ), # http://tl.wiktionary.org/w/index.php?title=Suleras:All_system_messages&oldid=2765 GPL text generated by MediaWiki
-                       array( "Fundraising" ), # http://tl.wiktionary.org/w/index.php?title=MediaWiki:Sitenotice&oldid=5716 GFDL + CC-BY-SA, copied there by Sky Harbor.
+                       array( "Fundraising" ), # http://tl.wiktionary.org/w/index.php?title=MediaWiki:Sitenotice&oldid=5716 GFDL + CC BY-SA, copied there by Sky Harbor.
                        array( "NestedTemplates" ), # bug 27936
                );
        }
index 12e5a2d..461ab87 100644 (file)
@@ -135,7 +135,6 @@ class GenerateJqueryMsgData extends Maintenance {
                                . '// Last generated with ' . basename( __FILE__ ) . ' at ' . gmdate( 'r' ) . "\n"
                                // This file will contain unquoted JSON strings as javascript native object literals,
                                // flip the quotemark convention for this file.
-                               . "/*jshint quotmark: double */\n"
                                . "\n"
                                . 'mediaWiki.libs.phpParserData = ' . FormatJson::encode( $phpParserData, true ) . ";\n";
 
index 776ee24..4ab5f14 100644 (file)
 // This file stores the output from the PHP parser for various messages, arguments,
 // languages, and parser modes. Intended for use by a unit test framework by looping
 // through the object and comparing its parser return value with the 'result' property.
-// Last generated with generateJqueryMsgData.php at Sat, 03 Nov 2012 21:32:01 +0000
-/*jshint quotmark: double */
+// Last generated with generateJqueryMsgData.php at Thu, 30 Jan 2014 04:04:41 +0000
 
 mediaWiki.libs.phpParserData = {
-       "messages": {
-               "en_undelete_short": "Undelete {{PLURAL:$1|one edit|$1 edits}}",
-               "en_category-subcat-count": "{{PLURAL:$2|This category has only the following subcategory.|This category has the following {{PLURAL:$1|subcategory|$1 subcategories}}, out of $2 total.}}",
-               "fr_undelete_short": "Restaurer $1 modification{{PLURAL:$1||s}}",
-               "fr_category-subcat-count": "Cette cat\u00e9gorie comprend {{PLURAL:$2|la sous-cat\u00e9gorie|$2 sous-cat\u00e9gories, dont {{PLURAL:$1|celle|les $1}}}} ci-dessous.",
-               "ar_undelete_short": "\u0627\u0633\u062a\u0631\u062c\u0627\u0639 {{PLURAL:$1|\u062a\u0639\u062f\u064a\u0644 \u0648\u0627\u062d\u062f|\u062a\u0639\u062f\u064a\u0644\u064a\u0646|$1 \u062a\u0639\u062f\u064a\u0644\u0627\u062a|$1 \u062a\u0639\u062f\u064a\u0644|$1 \u062a\u0639\u062f\u064a\u0644\u0627}}",
-               "ar_category-subcat-count": "{{PLURAL:$2|\u0644\u0627 \u062a\u0635\u0627\u0646\u064a\u0641 \u0641\u0631\u0639\u064a\u0629 \u0641\u064a \u0647\u0630\u0627 \u0627\u0644\u062a\u0635\u0646\u064a\u0641|\u0647\u0630\u0627 \u0627\u0644\u062a\u0635\u0646\u064a\u0641 \u0641\u064a\u0647 \u0627\u0644\u062a\u0635\u0646\u064a\u0641 \u0627\u0644\u0641\u0631\u0639\u064a \u0627\u0644\u062a\u0627\u0644\u064a \u0641\u0642\u0637.|\u0647\u0630\u0627 \u0627\u0644\u062a\u0635\u0646\u064a\u0641 \u0641\u064a\u0647 {{PLURAL:$1||\u0647\u0630\u0627 \u0627\u0644\u062a\u0635\u0646\u064a\u0641 \u0627\u0644\u0641\u0631\u0639\u064a|\u0647\u0630\u064a\u0646 \u0627\u0644\u062a\u0635\u0646\u064a\u0641\u064a\u0646 \u0627\u0644\u0641\u0631\u0639\u064a\u064a\u0646|\u0647\u0630\u0647 \u0627\u0644$1 \u062a\u0635\u0627\u0646\u064a\u0641 \u0627\u0644\u0641\u0631\u0639\u064a\u0629|\u0647\u0630\u0647 \u0627\u0644$1 \u062a\u0635\u0646\u064a\u0641\u0627 \u0641\u0631\u0639\u064a\u0627|\u0647\u0630\u0647 \u0627\u0644$1 \u062a\u0635\u0646\u064a\u0641 \u0641\u0631\u0639\u064a}}\u060c \u0645\u0646 \u0625\u062c\u0645\u0627\u0644\u064a $2.}}",
-               "jp_undelete_short": "Undelete {{PLURAL:$1|one edit|$1 edits}}",
-               "jp_category-subcat-count": "{{PLURAL:$2|This category has only the following subcategory.|This category has the following {{PLURAL:$1|subcategory|$1 subcategories}}, out of $2 total.}}",
-               "zh_undelete_short": "\u6062\u590d$1\u4e2a\u88ab\u5220\u9664\u7684\u7f16\u8f91",
-               "zh_category-subcat-count": "{{PLURAL:$2|\u672c\u5206\u7c7b\u53ea\u6709\u4e0b\u5217\u4e00\u4e2a\u5b50\u5206\u7c7b\u3002|\u672c\u5206\u7c7b\u5305\u542b\u4e0b\u5217$1\u4e2a\u5b50\u5206\u7c7b\uff0c\u5171$2\u4e2a\u5b50\u5206\u7c7b\u3002}}"
-       },
-       "tests": [
-               {
-                       "name": "en undelete_short 0",
-                       "key": "en_undelete_short",
-                       "args": [
-                               0
-                       ],
-                       "result": "Undelete 0 edits",
-                       "lang": "en"
-               },
-               {
-                       "name": "en undelete_short 1",
-                       "key": "en_undelete_short",
-                       "args": [
-                               1
-                       ],
-                       "result": "Undelete one edit",
-                       "lang": "en"
-               },
-               {
-                       "name": "en undelete_short 2",
-                       "key": "en_undelete_short",
-                       "args": [
-                               2
-                       ],
-                       "result": "Undelete 2 edits",
-                       "lang": "en"
-               },
-               {
-                       "name": "en undelete_short 5",
-                       "key": "en_undelete_short",
-                       "args": [
-                               5
-                       ],
-                       "result": "Undelete 5 edits",
-                       "lang": "en"
-               },
-               {
-                       "name": "en undelete_short 21",
-                       "key": "en_undelete_short",
-                       "args": [
-                               21
-                       ],
-                       "result": "Undelete 21 edits",
-                       "lang": "en"
-               },
-               {
-                       "name": "en undelete_short 101",
-                       "key": "en_undelete_short",
-                       "args": [
-                               101
-                       ],
-                       "result": "Undelete 101 edits",
-                       "lang": "en"
-               },
-               {
-                       "name": "en category-subcat-count 0,10",
-                       "key": "en_category-subcat-count",
-                       "args": [
-                               0,
-                               10
-                       ],
-                       "result": "This category has the following 0 subcategories, out of 10 total.",
-                       "lang": "en"
-               },
-               {
-                       "name": "en category-subcat-count 1,1",
-                       "key": "en_category-subcat-count",
-                       "args": [
-                               1,
-                               1
-                       ],
-                       "result": "This category has only the following subcategory.",
-                       "lang": "en"
-               },
-               {
-                       "name": "en category-subcat-count 1,2",
-                       "key": "en_category-subcat-count",
-                       "args": [
-                               1,
-                               2
-                       ],
-                       "result": "This category has the following subcategory, out of 2 total.",
-                       "lang": "en"
-               },
-               {
-                       "name": "en category-subcat-count 3,30",
-                       "key": "en_category-subcat-count",
-                       "args": [
-                               3,
-                               30
-                       ],
-                       "result": "This category has the following 3 subcategories, out of 30 total.",
-                       "lang": "en"
-               },
-               {
-                       "name": "fr undelete_short 0",
-                       "key": "fr_undelete_short",
-                       "args": [
-                               0
-                       ],
-                       "result": "Restaurer 0 modification",
-                       "lang": "fr"
-               },
-               {
-                       "name": "fr undelete_short 1",
-                       "key": "fr_undelete_short",
-                       "args": [
-                               1
-                       ],
-                       "result": "Restaurer 1 modification",
-                       "lang": "fr"
-               },
-               {
-                       "name": "fr undelete_short 2",
-                       "key": "fr_undelete_short",
-                       "args": [
-                               2
-                       ],
-                       "result": "Restaurer 2 modifications",
-                       "lang": "fr"
-               },
-               {
-                       "name": "fr undelete_short 5",
-                       "key": "fr_undelete_short",
-                       "args": [
-                               5
-                       ],
-                       "result": "Restaurer 5 modifications",
-                       "lang": "fr"
-               },
-               {
-                       "name": "fr undelete_short 21",
-                       "key": "fr_undelete_short",
-                       "args": [
-                               21
-                       ],
-                       "result": "Restaurer 21 modifications",
-                       "lang": "fr"
-               },
-               {
-                       "name": "fr undelete_short 101",
-                       "key": "fr_undelete_short",
-                       "args": [
-                               101
-                       ],
-                       "result": "Restaurer 101 modifications",
-                       "lang": "fr"
-               },
-               {
-                       "name": "fr category-subcat-count 0,10",
-                       "key": "fr_category-subcat-count",
-                       "args": [
-                               0,
-                               10
-                       ],
-                       "result": "Cette cat\u00e9gorie comprend 10 sous-cat\u00e9gories, dont celle ci-dessous.",
-                       "lang": "fr"
-               },
-               {
-                       "name": "fr category-subcat-count 1,1",
-                       "key": "fr_category-subcat-count",
-                       "args": [
-                               1,
-                               1
-                       ],
-                       "result": "Cette cat\u00e9gorie comprend la sous-cat\u00e9gorie ci-dessous.",
-                       "lang": "fr"
-               },
-               {
-                       "name": "fr category-subcat-count 1,2",
-                       "key": "fr_category-subcat-count",
-                       "args": [
-                               1,
-                               2
-                       ],
-                       "result": "Cette cat\u00e9gorie comprend 2 sous-cat\u00e9gories, dont celle ci-dessous.",
-                       "lang": "fr"
-               },
-               {
-                       "name": "fr category-subcat-count 3,30",
-                       "key": "fr_category-subcat-count",
-                       "args": [
-                               3,
-                               30
-                       ],
-                       "result": "Cette cat\u00e9gorie comprend 30 sous-cat\u00e9gories, dont les 3 ci-dessous.",
-                       "lang": "fr"
-               },
-               {
-                       "name": "ar undelete_short 0",
-                       "key": "ar_undelete_short",
-                       "args": [
-                               0
-                       ],
-                       "result": "\u0627\u0633\u062a\u0631\u062c\u0627\u0639 \u062a\u0639\u062f\u064a\u0644 \u0648\u0627\u062d\u062f",
-                       "lang": "ar"
-               },
-               {
-                       "name": "ar undelete_short 1",
-                       "key": "ar_undelete_short",
-                       "args": [
-                               1
-                       ],
-                       "result": "\u0627\u0633\u062a\u0631\u062c\u0627\u0639 \u062a\u0639\u062f\u064a\u0644\u064a\u0646",
-                       "lang": "ar"
-               },
-               {
-                       "name": "ar undelete_short 2",
-                       "key": "ar_undelete_short",
-                       "args": [
-                               2
-                       ],
-                       "result": "\u0627\u0633\u062a\u0631\u062c\u0627\u0639 2 \u062a\u0639\u062f\u064a\u0644\u0627\u062a",
-                       "lang": "ar"
-               },
-               {
-                       "name": "ar undelete_short 5",
-                       "key": "ar_undelete_short",
-                       "args": [
-                               5
-                       ],
-                       "result": "\u0627\u0633\u062a\u0631\u062c\u0627\u0639 5 \u062a\u0639\u062f\u064a\u0644",
-                       "lang": "ar"
-               },
-               {
-                       "name": "ar undelete_short 21",
-                       "key": "ar_undelete_short",
-                       "args": [
-                               21
-                       ],
-                       "result": "\u0627\u0633\u062a\u0631\u062c\u0627\u0639 21 \u062a\u0639\u062f\u064a\u0644\u0627",
-                       "lang": "ar"
-               },
-               {
-                       "name": "ar undelete_short 101",
-                       "key": "ar_undelete_short",
-                       "args": [
-                               101
-                       ],
-                       "result": "\u0627\u0633\u062a\u0631\u062c\u0627\u0639 101 \u062a\u0639\u062f\u064a\u0644\u0627",
-                       "lang": "ar"
-               },
-               {
-                       "name": "ar category-subcat-count 0,10",
-                       "key": "ar_category-subcat-count",
-                       "args": [
-                               0,
-                               10
-                       ],
-                       "result": "\u0647\u0630\u0627 \u0627\u0644\u062a\u0635\u0646\u064a\u0641 \u0641\u064a\u0647 \u060c \u0645\u0646 \u0625\u062c\u0645\u0627\u0644\u064a 10.",
-                       "lang": "ar"
-               },
-               {
-                       "name": "ar category-subcat-count 1,1",
-                       "key": "ar_category-subcat-count",
-                       "args": [
-                               1,
-                               1
-                       ],
-                       "result": "\u0647\u0630\u0627 \u0627\u0644\u062a\u0635\u0646\u064a\u0641 \u0641\u064a\u0647 \u0627\u0644\u062a\u0635\u0646\u064a\u0641 \u0627\u0644\u0641\u0631\u0639\u064a \u0627\u0644\u062a\u0627\u0644\u064a \u0641\u0642\u0637.",
-                       "lang": "ar"
-               },
-               {
-                       "name": "ar category-subcat-count 1,2",
-                       "key": "ar_category-subcat-count",
-                       "args": [
-                               1,
-                               2
-                       ],
-                       "result": "\u0647\u0630\u0627 \u0627\u0644\u062a\u0635\u0646\u064a\u0641 \u0641\u064a\u0647 \u0647\u0630\u0627 \u0627\u0644\u062a\u0635\u0646\u064a\u0641 \u0627\u0644\u0641\u0631\u0639\u064a\u060c \u0645\u0646 \u0625\u062c\u0645\u0627\u0644\u064a 2.",
-                       "lang": "ar"
-               },
-               {
-                       "name": "ar category-subcat-count 3,30",
-                       "key": "ar_category-subcat-count",
-                       "args": [
-                               3,
-                               30
-                       ],
-                       "result": "\u0647\u0630\u0627 \u0627\u0644\u062a\u0635\u0646\u064a\u0641 \u0641\u064a\u0647 \u0647\u0630\u0647 \u0627\u06443 \u062a\u0635\u0627\u0646\u064a\u0641 \u0627\u0644\u0641\u0631\u0639\u064a\u0629\u060c \u0645\u0646 \u0625\u062c\u0645\u0627\u0644\u064a 30.",
-                       "lang": "ar"
-               },
-               {
-                       "name": "jp undelete_short 0",
-                       "key": "jp_undelete_short",
-                       "args": [
-                               0
-                       ],
-                       "result": "Undelete 0 edits",
-                       "lang": "jp"
-               },
-               {
-                       "name": "jp undelete_short 1",
-                       "key": "jp_undelete_short",
-                       "args": [
-                               1
-                       ],
-                       "result": "Undelete one edit",
-                       "lang": "jp"
-               },
-               {
-                       "name": "jp undelete_short 2",
-                       "key": "jp_undelete_short",
-                       "args": [
-                               2
-                       ],
-                       "result": "Undelete 2 edits",
-                       "lang": "jp"
-               },
-               {
-                       "name": "jp undelete_short 5",
-                       "key": "jp_undelete_short",
-                       "args": [
-                               5
-                       ],
-                       "result": "Undelete 5 edits",
-                       "lang": "jp"
-               },
-               {
-                       "name": "jp undelete_short 21",
-                       "key": "jp_undelete_short",
-                       "args": [
-                               21
-                       ],
-                       "result": "Undelete 21 edits",
-                       "lang": "jp"
-               },
-               {
-                       "name": "jp undelete_short 101",
-                       "key": "jp_undelete_short",
-                       "args": [
-                               101
-                       ],
-                       "result": "Undelete 101 edits",
-                       "lang": "jp"
-               },
-               {
-                       "name": "jp category-subcat-count 0,10",
-                       "key": "jp_category-subcat-count",
-                       "args": [
-                               0,
-                               10
-                       ],
-                       "result": "This category has the following 0 subcategories, out of 10 total.",
-                       "lang": "jp"
-               },
-               {
-                       "name": "jp category-subcat-count 1,1",
-                       "key": "jp_category-subcat-count",
-                       "args": [
-                               1,
-                               1
-                       ],
-                       "result": "This category has only the following subcategory.",
-                       "lang": "jp"
-               },
-               {
-                       "name": "jp category-subcat-count 1,2",
-                       "key": "jp_category-subcat-count",
-                       "args": [
-                               1,
-                               2
-                       ],
-                       "result": "This category has the following subcategory, out of 2 total.",
-                       "lang": "jp"
-               },
-               {
-                       "name": "jp category-subcat-count 3,30",
-                       "key": "jp_category-subcat-count",
-                       "args": [
-                               3,
-                               30
-                       ],
-                       "result": "This category has the following 3 subcategories, out of 30 total.",
-                       "lang": "jp"
-               },
-               {
-                       "name": "zh undelete_short 0",
-                       "key": "zh_undelete_short",
-                       "args": [
-                               0
-                       ],
-                       "result": "\u6062\u590d0\u4e2a\u88ab\u5220\u9664\u7684\u7f16\u8f91",
-                       "lang": "zh"
-               },
-               {
-                       "name": "zh undelete_short 1",
-                       "key": "zh_undelete_short",
-                       "args": [
-                               1
-                       ],
-                       "result": "\u6062\u590d1\u4e2a\u88ab\u5220\u9664\u7684\u7f16\u8f91",
-                       "lang": "zh"
-               },
-               {
-                       "name": "zh undelete_short 2",
-                       "key": "zh_undelete_short",
-                       "args": [
-                               2
-                       ],
-                       "result": "\u6062\u590d2\u4e2a\u88ab\u5220\u9664\u7684\u7f16\u8f91",
-                       "lang": "zh"
-               },
-               {
-                       "name": "zh undelete_short 5",
-                       "key": "zh_undelete_short",
-                       "args": [
-                               5
-                       ],
-                       "result": "\u6062\u590d5\u4e2a\u88ab\u5220\u9664\u7684\u7f16\u8f91",
-                       "lang": "zh"
-               },
-               {
-                       "name": "zh undelete_short 21",
-                       "key": "zh_undelete_short",
-                       "args": [
-                               21
-                       ],
-                       "result": "\u6062\u590d21\u4e2a\u88ab\u5220\u9664\u7684\u7f16\u8f91",
-                       "lang": "zh"
-               },
-               {
-                       "name": "zh undelete_short 101",
-                       "key": "zh_undelete_short",
-                       "args": [
-                               101
-                       ],
-                       "result": "\u6062\u590d101\u4e2a\u88ab\u5220\u9664\u7684\u7f16\u8f91",
-                       "lang": "zh"
-               },
-               {
-                       "name": "zh category-subcat-count 0,10",
-                       "key": "zh_category-subcat-count",
-                       "args": [
-                               0,
-                               10
-                       ],
-                       "result": "\u672c\u5206\u7c7b\u5305\u542b\u4e0b\u52170\u4e2a\u5b50\u5206\u7c7b\uff0c\u517110\u4e2a\u5b50\u5206\u7c7b\u3002",
-                       "lang": "zh"
-               },
-               {
-                       "name": "zh category-subcat-count 1,1",
-                       "key": "zh_category-subcat-count",
-                       "args": [
-                               1,
-                               1
-                       ],
-                       "result": "\u672c\u5206\u7c7b\u53ea\u6709\u4e0b\u5217\u4e00\u4e2a\u5b50\u5206\u7c7b\u3002",
-                       "lang": "zh"
-               },
-               {
-                       "name": "zh category-subcat-count 1,2",
-                       "key": "zh_category-subcat-count",
-                       "args": [
-                               1,
-                               2
-                       ],
-                       "result": "\u672c\u5206\u7c7b\u5305\u542b\u4e0b\u52171\u4e2a\u5b50\u5206\u7c7b\uff0c\u51712\u4e2a\u5b50\u5206\u7c7b\u3002",
-                       "lang": "zh"
-               },
-               {
-                       "name": "zh category-subcat-count 3,30",
-                       "key": "zh_category-subcat-count",
-                       "args": [
-                               3,
-                               30
-                       ],
-                       "result": "\u672c\u5206\u7c7b\u5305\u542b\u4e0b\u52173\u4e2a\u5b50\u5206\u7c7b\uff0c\u517130\u4e2a\u5b50\u5206\u7c7b\u3002",
-                       "lang": "zh"
-               }
-       ]
+    "messages": {
+        "en_undelete_short": "Undelete {{PLURAL:$1|one edit|$1 edits}}",
+        "en_category-subcat-count": "{{PLURAL:$2|This category has only the following subcategory.|This category has the following {{PLURAL:$1|subcategory|$1 subcategories}}, out of $2 total.}}",
+        "fr_undelete_short": "Restaurer $1 modification{{PLURAL:$1||s}}",
+        "fr_category-subcat-count": "Cette cat\u00e9gorie comprend {{PLURAL:$2|la sous-cat\u00e9gorie|$2 sous-cat\u00e9gories, dont {{PLURAL:$1|celle|les $1}}}} ci-dessous.",
+        "ar_undelete_short": "\u0627\u0633\u062a\u0631\u062c\u0627\u0639 {{PLURAL:$1||\u062a\u0639\u062f\u064a\u0644 \u0648\u0627\u062d\u062f|\u062a\u0639\u062f\u064a\u0644\u064a\u0646|$1 \u062a\u0639\u062f\u064a\u0644\u0627\u062a|$1 \u062a\u0639\u062f\u064a\u0644\u0627\u064b|$1 \u062a\u0639\u062f\u064a\u0644}}",
+        "ar_category-subcat-count": "{{PLURAL:$2|\u0647\u0630\u0627 \u0627\u0644\u062a\u0635\u0646\u064a\u0641 \u064a\u062d\u0648\u064a \u0627\u0644\u062a\u0635\u0646\u064a\u0641 \u0627\u0644\u0641\u0631\u0639\u064a \u0627\u0644\u062a\u0627\u0644\u064a|\u0647\u0630\u0627 \u0627\u0644\u062a\u0635\u0646\u064a\u0641 \u064a\u062d\u0648\u064a {{PLURAL:$1||\u0627\u0644\u062a\u0635\u0646\u064a\u0641 \u0627\u0644\u0641\u0631\u0639\u064a|\u062a\u0635\u0646\u064a\u0641\u064a\u0646 \u0641\u0631\u0639\u064a\u064a\u0646|$1 \u062a\u0635\u0646\u064a\u0641\u0627\u062a \u0641\u0631\u0639\u064a\u0629}}\u060c \u0645\u0646 \u0625\u062c\u0645\u0627\u0644\u064a $2.}}",
+        "jp_undelete_short": "Undelete {{PLURAL:$1|one edit|$1 edits}}",
+        "jp_category-subcat-count": "{{PLURAL:$2|This category has only the following subcategory.|This category has the following {{PLURAL:$1|subcategory|$1 subcategories}}, out of $2 total.}}",
+        "zh_undelete_short": "\u8fd8\u539f{{PLURAL:$1|$1\u4e2a\u7f16\u8f91}}",
+        "zh_category-subcat-count": "{{PLURAL:$2|\u672c\u5206\u7c7b\u53ea\u6709\u4ee5\u4e0b\u5b50\u5206\u7c7b\u3002|\u672c\u5206\u7c7b\u6709\u4ee5\u4e0b$1\u4e2a\u5b50\u5206\u7c7b\uff0c\u5171\u6709$2\u4e2a\u5b50\u5206\u7c7b\u3002}}"
+    },
+    "tests": [
+        {
+            "name": "en undelete_short 0",
+            "key": "en_undelete_short",
+            "args": [
+                0
+            ],
+            "result": "Undelete 0 edits",
+            "lang": "en"
+        },
+        {
+            "name": "en undelete_short 1",
+            "key": "en_undelete_short",
+            "args": [
+                1
+            ],
+            "result": "Undelete one edit",
+            "lang": "en"
+        },
+        {
+            "name": "en undelete_short 2",
+            "key": "en_undelete_short",
+            "args": [
+                2
+            ],
+            "result": "Undelete 2 edits",
+            "lang": "en"
+        },
+        {
+            "name": "en undelete_short 5",
+            "key": "en_undelete_short",
+            "args": [
+                5
+            ],
+            "result": "Undelete 5 edits",
+            "lang": "en"
+        },
+        {
+            "name": "en undelete_short 21",
+            "key": "en_undelete_short",
+            "args": [
+                21
+            ],
+            "result": "Undelete 21 edits",
+            "lang": "en"
+        },
+        {
+            "name": "en undelete_short 101",
+            "key": "en_undelete_short",
+            "args": [
+                101
+            ],
+            "result": "Undelete 101 edits",
+            "lang": "en"
+        },
+        {
+            "name": "en category-subcat-count 0,10",
+            "key": "en_category-subcat-count",
+            "args": [
+                0,
+                10
+            ],
+            "result": "This category has the following 0 subcategories, out of 10 total.",
+            "lang": "en"
+        },
+        {
+            "name": "en category-subcat-count 1,1",
+            "key": "en_category-subcat-count",
+            "args": [
+                1,
+                1
+            ],
+            "result": "This category has only the following subcategory.",
+            "lang": "en"
+        },
+        {
+            "name": "en category-subcat-count 1,2",
+            "key": "en_category-subcat-count",
+            "args": [
+                1,
+                2
+            ],
+            "result": "This category has the following subcategory, out of 2 total.",
+            "lang": "en"
+        },
+        {
+            "name": "en category-subcat-count 3,30",
+            "key": "en_category-subcat-count",
+            "args": [
+                3,
+                30
+            ],
+            "result": "This category has the following 3 subcategories, out of 30 total.",
+            "lang": "en"
+        },
+        {
+            "name": "fr undelete_short 0",
+            "key": "fr_undelete_short",
+            "args": [
+                0
+            ],
+            "result": "Restaurer 0 modification",
+            "lang": "fr"
+        },
+        {
+            "name": "fr undelete_short 1",
+            "key": "fr_undelete_short",
+            "args": [
+                1
+            ],
+            "result": "Restaurer 1 modification",
+            "lang": "fr"
+        },
+        {
+            "name": "fr undelete_short 2",
+            "key": "fr_undelete_short",
+            "args": [
+                2
+            ],
+            "result": "Restaurer 2 modifications",
+            "lang": "fr"
+        },
+        {
+            "name": "fr undelete_short 5",
+            "key": "fr_undelete_short",
+            "args": [
+                5
+            ],
+            "result": "Restaurer 5 modifications",
+            "lang": "fr"
+        },
+        {
+            "name": "fr undelete_short 21",
+            "key": "fr_undelete_short",
+            "args": [
+                21
+            ],
+            "result": "Restaurer 21 modifications",
+            "lang": "fr"
+        },
+        {
+            "name": "fr undelete_short 101",
+            "key": "fr_undelete_short",
+            "args": [
+                101
+            ],
+            "result": "Restaurer 101 modifications",
+            "lang": "fr"
+        },
+        {
+            "name": "fr category-subcat-count 0,10",
+            "key": "fr_category-subcat-count",
+            "args": [
+                0,
+                10
+            ],
+            "result": "Cette cat\u00e9gorie comprend 10 sous-cat\u00e9gories, dont celle ci-dessous.",
+            "lang": "fr"
+        },
+        {
+            "name": "fr category-subcat-count 1,1",
+            "key": "fr_category-subcat-count",
+            "args": [
+                1,
+                1
+            ],
+            "result": "Cette cat\u00e9gorie comprend la sous-cat\u00e9gorie ci-dessous.",
+            "lang": "fr"
+        },
+        {
+            "name": "fr category-subcat-count 1,2",
+            "key": "fr_category-subcat-count",
+            "args": [
+                1,
+                2
+            ],
+            "result": "Cette cat\u00e9gorie comprend 2 sous-cat\u00e9gories, dont celle ci-dessous.",
+            "lang": "fr"
+        },
+        {
+            "name": "fr category-subcat-count 3,30",
+            "key": "fr_category-subcat-count",
+            "args": [
+                3,
+                30
+            ],
+            "result": "Cette cat\u00e9gorie comprend 30 sous-cat\u00e9gories, dont les 3 ci-dessous.",
+            "lang": "fr"
+        },
+        {
+            "name": "ar undelete_short 0",
+            "key": "ar_undelete_short",
+            "args": [
+                0
+            ],
+            "result": "\u0627\u0633\u062a\u0631\u062c\u0627\u0639 ",
+            "lang": "ar"
+        },
+        {
+            "name": "ar undelete_short 1",
+            "key": "ar_undelete_short",
+            "args": [
+                1
+            ],
+            "result": "\u0627\u0633\u062a\u0631\u062c\u0627\u0639 \u062a\u0639\u062f\u064a\u0644 \u0648\u0627\u062d\u062f",
+            "lang": "ar"
+        },
+        {
+            "name": "ar undelete_short 2",
+            "key": "ar_undelete_short",
+            "args": [
+                2
+            ],
+            "result": "\u0627\u0633\u062a\u0631\u062c\u0627\u0639 \u062a\u0639\u062f\u064a\u0644\u064a\u0646",
+            "lang": "ar"
+        },
+        {
+            "name": "ar undelete_short 5",
+            "key": "ar_undelete_short",
+            "args": [
+                5
+            ],
+            "result": "\u0627\u0633\u062a\u0631\u062c\u0627\u0639 5 \u062a\u0639\u062f\u064a\u0644\u0627\u062a",
+            "lang": "ar"
+        },
+        {
+            "name": "ar undelete_short 21",
+            "key": "ar_undelete_short",
+            "args": [
+                21
+            ],
+            "result": "\u0627\u0633\u062a\u0631\u062c\u0627\u0639 21 \u062a\u0639\u062f\u064a\u0644\u0627\u064b",
+            "lang": "ar"
+        },
+        {
+            "name": "ar undelete_short 101",
+            "key": "ar_undelete_short",
+            "args": [
+                101
+            ],
+            "result": "\u0627\u0633\u062a\u0631\u062c\u0627\u0639 101 \u062a\u0639\u062f\u064a\u0644",
+            "lang": "ar"
+        },
+        {
+            "name": "ar category-subcat-count 0,10",
+            "key": "ar_category-subcat-count",
+            "args": [
+                0,
+                10
+            ],
+            "result": "\u0647\u0630\u0627 \u0627\u0644\u062a\u0635\u0646\u064a\u0641 \u064a\u062d\u0648\u064a \u060c \u0645\u0646 \u0625\u062c\u0645\u0627\u0644\u064a 10.",
+            "lang": "ar"
+        },
+        {
+            "name": "ar category-subcat-count 1,1",
+            "key": "ar_category-subcat-count",
+            "args": [
+                1,
+                1
+            ],
+            "result": "\u0647\u0630\u0627 \u0627\u0644\u062a\u0635\u0646\u064a\u0641 \u064a\u062d\u0648\u064a \u0627\u0644\u062a\u0635\u0646\u064a\u0641 \u0627\u0644\u0641\u0631\u0639\u064a\u060c \u0645\u0646 \u0625\u062c\u0645\u0627\u0644\u064a 1.",
+            "lang": "ar"
+        },
+        {
+            "name": "ar category-subcat-count 1,2",
+            "key": "ar_category-subcat-count",
+            "args": [
+                1,
+                2
+            ],
+            "result": "\u0647\u0630\u0627 \u0627\u0644\u062a\u0635\u0646\u064a\u0641 \u064a\u062d\u0648\u064a \u0627\u0644\u062a\u0635\u0646\u064a\u0641 \u0627\u0644\u0641\u0631\u0639\u064a\u060c \u0645\u0646 \u0625\u062c\u0645\u0627\u0644\u064a 2.",
+            "lang": "ar"
+        },
+        {
+            "name": "ar category-subcat-count 3,30",
+            "key": "ar_category-subcat-count",
+            "args": [
+                3,
+                30
+            ],
+            "result": "\u0647\u0630\u0627 \u0627\u0644\u062a\u0635\u0646\u064a\u0641 \u064a\u062d\u0648\u064a 3 \u062a\u0635\u0646\u064a\u0641\u0627\u062a \u0641\u0631\u0639\u064a\u0629\u060c \u0645\u0646 \u0625\u062c\u0645\u0627\u0644\u064a 30.",
+            "lang": "ar"
+        },
+        {
+            "name": "jp undelete_short 0",
+            "key": "jp_undelete_short",
+            "args": [
+                0
+            ],
+            "result": "Undelete 0 edits",
+            "lang": "jp"
+        },
+        {
+            "name": "jp undelete_short 1",
+            "key": "jp_undelete_short",
+            "args": [
+                1
+            ],
+            "result": "Undelete one edit",
+            "lang": "jp"
+        },
+        {
+            "name": "jp undelete_short 2",
+            "key": "jp_undelete_short",
+            "args": [
+                2
+            ],
+            "result": "Undelete 2 edits",
+            "lang": "jp"
+        },
+        {
+            "name": "jp undelete_short 5",
+            "key": "jp_undelete_short",
+            "args": [
+                5
+            ],
+            "result": "Undelete 5 edits",
+            "lang": "jp"
+        },
+        {
+            "name": "jp undelete_short 21",
+            "key": "jp_undelete_short",
+            "args": [
+                21
+            ],
+            "result": "Undelete 21 edits",
+            "lang": "jp"
+        },
+        {
+            "name": "jp undelete_short 101",
+            "key": "jp_undelete_short",
+            "args": [
+                101
+            ],
+            "result": "Undelete 101 edits",
+            "lang": "jp"
+        },
+        {
+            "name": "jp category-subcat-count 0,10",
+            "key": "jp_category-subcat-count",
+            "args": [
+                0,
+                10
+            ],
+            "result": "This category has the following 0 subcategories, out of 10 total.",
+            "lang": "jp"
+        },
+        {
+            "name": "jp category-subcat-count 1,1",
+            "key": "jp_category-subcat-count",
+            "args": [
+                1,
+                1
+            ],
+            "result": "This category has only the following subcategory.",
+            "lang": "jp"
+        },
+        {
+            "name": "jp category-subcat-count 1,2",
+            "key": "jp_category-subcat-count",
+            "args": [
+                1,
+                2
+            ],
+            "result": "This category has the following subcategory, out of 2 total.",
+            "lang": "jp"
+        },
+        {
+            "name": "jp category-subcat-count 3,30",
+            "key": "jp_category-subcat-count",
+            "args": [
+                3,
+                30
+            ],
+            "result": "This category has the following 3 subcategories, out of 30 total.",
+            "lang": "jp"
+        },
+        {
+            "name": "zh undelete_short 0",
+            "key": "zh_undelete_short",
+            "args": [
+                0
+            ],
+            "result": "\u8fd8\u539f0\u4e2a\u7f16\u8f91",
+            "lang": "zh"
+        },
+        {
+            "name": "zh undelete_short 1",
+            "key": "zh_undelete_short",
+            "args": [
+                1
+            ],
+            "result": "\u8fd8\u539f1\u4e2a\u7f16\u8f91",
+            "lang": "zh"
+        },
+        {
+            "name": "zh undelete_short 2",
+            "key": "zh_undelete_short",
+            "args": [
+                2
+            ],
+            "result": "\u8fd8\u539f2\u4e2a\u7f16\u8f91",
+            "lang": "zh"
+        },
+        {
+            "name": "zh undelete_short 5",
+            "key": "zh_undelete_short",
+            "args": [
+                5
+            ],
+            "result": "\u8fd8\u539f5\u4e2a\u7f16\u8f91",
+            "lang": "zh"
+        },
+        {
+            "name": "zh undelete_short 21",
+            "key": "zh_undelete_short",
+            "args": [
+                21
+            ],
+            "result": "\u8fd8\u539f21\u4e2a\u7f16\u8f91",
+            "lang": "zh"
+        },
+        {
+            "name": "zh undelete_short 101",
+            "key": "zh_undelete_short",
+            "args": [
+                101
+            ],
+            "result": "\u8fd8\u539f101\u4e2a\u7f16\u8f91",
+            "lang": "zh"
+        },
+        {
+            "name": "zh category-subcat-count 0,10",
+            "key": "zh_category-subcat-count",
+            "args": [
+                0,
+                10
+            ],
+            "result": "\u672c\u5206\u7c7b\u6709\u4ee5\u4e0b0\u4e2a\u5b50\u5206\u7c7b\uff0c\u5171\u670910\u4e2a\u5b50\u5206\u7c7b\u3002",
+            "lang": "zh"
+        },
+        {
+            "name": "zh category-subcat-count 1,1",
+            "key": "zh_category-subcat-count",
+            "args": [
+                1,
+                1
+            ],
+            "result": "\u672c\u5206\u7c7b\u53ea\u6709\u4ee5\u4e0b\u5b50\u5206\u7c7b\u3002",
+            "lang": "zh"
+        },
+        {
+            "name": "zh category-subcat-count 1,2",
+            "key": "zh_category-subcat-count",
+            "args": [
+                1,
+                2
+            ],
+            "result": "\u672c\u5206\u7c7b\u6709\u4ee5\u4e0b1\u4e2a\u5b50\u5206\u7c7b\uff0c\u5171\u67092\u4e2a\u5b50\u5206\u7c7b\u3002",
+            "lang": "zh"
+        },
+        {
+            "name": "zh category-subcat-count 3,30",
+            "key": "zh_category-subcat-count",
+            "args": [
+                3,
+                30
+            ],
+            "result": "\u672c\u5206\u7c7b\u6709\u4ee5\u4e0b3\u4e2a\u5b50\u5206\u7c7b\uff0c\u5171\u670930\u4e2a\u5b50\u5206\u7c7b\u3002",
+            "lang": "zh"
+        }
+    ]
 };
index b644a3c..839c5d5 100644 (file)
@@ -4,7 +4,7 @@
        QUnit.asyncTest( 'animate', 3, function ( assert ) {
                var $canvas = $( '<div>' ).css( 'background-color', '#fff' );
 
-               $canvas.animate( { backgroundColor: '#000' }, 4 ).promise().then( function() {
+               $canvas.animate( { backgroundColor: '#000' }, 4 ).promise().then( function () {
                        var endColors = $.colorUtil.getRGB( $canvas.css( 'background-color' ) );
                        assert.strictEqual( endColors[0], 0 );
                        assert.strictEqual( endColors[1], 0 );
index bfb857d..e6a6124 100644 (file)
                $collapsible.find( '.mw-collapsible-toggle' ).trigger( 'click' );
        } );
 
-       QUnit.test( 'clicks on links inside toggler pass through (options.linksPassthru)' , 2, function ( assert ) {
+       QUnit.test( 'clicks on links inside toggler pass through (options.linksPassthru)', 2, function ( assert ) {
                var $collapsible = prepareCollapsible(
                                '<div class="mw-collapsible">' +
                                        '<div class="mw-collapsible-toggle">' +
index ca0ea67..bbea829 100644 (file)
@@ -1,8 +1,8 @@
-(function($) {
+(function ($) {
 
        QUnit.module('jquery.placeholder', QUnit.newMwEnvironment());
 
-       QUnit.test('caches results of feature tests', 2, function(assert) {
+       QUnit.test('caches results of feature tests', 2, function (assert) {
                assert.strictEqual(typeof $.fn.placeholder.input, 'boolean', '$.fn.placeholder.input');
                assert.strictEqual(typeof $.fn.placeholder.textarea, 'boolean', '$.fn.placeholder.textarea');
        });
@@ -20,7 +20,7 @@
                        '<input id="input-type-password" type="password" placeholder="e.g. hunter2">' +
                        '<textarea id="textarea" name="message" placeholder="Your message goes here"></textarea>' +
                '</form>',
-       testElement = function($el, assert) {
+       testElement = function ($el, assert) {
 
                var el = $el[0],
                        placeholder = el.getAttribute('placeholder');
                $el.placeholder(placeholder);
        };
 
-       QUnit.test('emulates placeholder for <input type=text>', 22, function(assert) {
+       QUnit.test('emulates placeholder for <input type=text>', 22, function (assert) {
                $('<div>').html(html).appendTo($('#qunit-fixture'));
                testElement($('#input-type-text'), assert);
        });
 
-       QUnit.test('emulates placeholder for <input type=search>', 22, function(assert) {
+       QUnit.test('emulates placeholder for <input type=search>', 22, function (assert) {
                $('<div>').html(html).appendTo($('#qunit-fixture'));
                testElement($('#input-type-search'), assert);
        });
 
-       QUnit.test('emulates placeholder for <input type=email>', 22, function(assert) {
+       QUnit.test('emulates placeholder for <input type=email>', 22, function (assert) {
                $('<div>').html(html).appendTo($('#qunit-fixture'));
                testElement($('#input-type-email'), assert);
        });
 
-       QUnit.test('emulates placeholder for <input type=url>', 22, function(assert) {
+       QUnit.test('emulates placeholder for <input type=url>', 22, function (assert) {
                $('<div>').html(html).appendTo($('#qunit-fixture'));
                testElement($('#input-type-url'), assert);
        });
 
-       QUnit.test('emulates placeholder for <input type=tel>', 22, function(assert) {
+       QUnit.test('emulates placeholder for <input type=tel>', 22, function (assert) {
                $('<div>').html(html).appendTo($('#qunit-fixture'));
                testElement($('#input-type-tel'), assert);
        });
 
-       QUnit.test('emulates placeholder for <input type=password>', 13, function(assert) {
+       QUnit.test('emulates placeholder for <input type=password>', 13, function (assert) {
                $('<div>').html(html).appendTo($('#qunit-fixture'));
 
                var selector = '#input-type-password',
 
        });
 
-       QUnit.test('emulates placeholder for <textarea></textarea>', 22, function(assert) {
+       QUnit.test('emulates placeholder for <textarea></textarea>', 22, function (assert) {
                $('<div>').html(html).appendTo($('#qunit-fixture'));
                testElement($('#textarea'), assert);
        });
index 5fe2394..25d9f73 100644 (file)
                }, opt.after );
 
                QUnit.test( opt.description, function ( assert ) {
-                       /*jshint onevar: false */
-                       var tests = 1;
+                       var $textarea, start, end, options, text,
+                               tests = 1;
                        if ( opt.after.selected !== null ) {
                                tests++;
                        }
                        QUnit.expect( tests );
 
-                       var $textarea = $( '<textarea>' );
+                       $textarea = $( '<textarea>' );
 
                        $( '#qunit-fixture' ).append( $textarea );
 
-                       //$textarea.textSelection( 'setContents', opt.before.text); // this method is actually missing atm...
-                       $textarea.val( opt.before.text ); // won't work with the WikiEditor iframe?
+                       // This method is actually missing atm...
+                       //$textarea.textSelection( 'setContents', opt.before.text);
 
-                       var start = opt.before.start,
-                               end = opt.before.end;
+                       // Won't work with the WikiEditor iframe?
+                       $textarea.val( opt.before.text );
 
-                       var options = $.extend( {}, opt.replace ); // Clone opt.replace
+                       start = opt.before.start;
+                       end = opt.before.end;
+
+                       // Clone opt.replace
+                       options = $.extend( {}, opt.replace );
                        options.selectionStart = start;
                        options.selectionEnd = end;
                        $textarea.textSelection( 'encapsulateSelection', options );
 
-                       var text = $textarea.textSelection( 'getContents' ).replace( /\r\n/g, '\n' );
+                       text = $textarea.textSelection( 'getContents' ).replace( /\r\n/g, '\n' );
 
                        assert.equal( text, opt.after.text, 'Checking full text after encapsulation' );
 
                replace: h2
        } );
 
-
        encapsulateTest( {
                description: 'ownline option: turn a partial line into new h2',
                before: {
                replace: h2
        } );
 
-
        encapsulateTest( {
                description: 'splitlines option: no selection, insert new list item',
                before: {
                replace: ulist
        } );
 
-
        function caretTest( options ) {
                QUnit.test( options.description, 2, function ( assert ) {
-                       var pos, $textarea = $( '<textarea>' ).text( options.text );
+                       var pos,
+                               $textarea = $( '<textarea>' ).text( options.text );
 
                        $( '#qunit-fixture' ).append( $textarea );
 
index 2ad7622..3be3642 100644 (file)
@@ -29,7 +29,6 @@
                } );
        } );
 
-
        QUnit.test( 'API error', function ( assert ) {
                QUnit.expect( 1 );
 
index aeefd64..f49be49 100644 (file)
                        100: 'Penguins'
                },
                wgNamespaceIds: {
-                       /*jshint camelcase: false */
-                       media: -2,
-                       special: -1,
+                       'media': -2,
+                       'special': -1,
                        '': 0,
-                       talk: 1,
-                       user: 2,
-                       user_talk: 3,
-                       wikipedia: 4,
-                       wikipedia_talk: 5,
-                       file: 6,
-                       file_talk: 7,
-                       mediawiki: 8,
-                       mediawiki_talk: 9,
-                       template: 10,
-                       template_talk: 11,
-                       help: 12,
-                       help_talk: 13,
-                       category: 14,
-                       category_talk: 15,
-                       image: 6,
-                       image_talk: 7,
-                       project: 4,
-                       project_talk: 5,
-                       /* testing custom / alias */
-                       penguins: 100,
-                       antarctic_waterfowl: 100
+                       'talk': 1,
+                       'user': 2,
+                       'user_talk': 3,
+                       'wikipedia': 4,
+                       'wikipedia_talk': 5,
+                       'file': 6,
+                       'file_talk': 7,
+                       'mediawiki': 8,
+                       'mediawiki_talk': 9,
+                       'template': 10,
+                       'template_talk': 11,
+                       'help': 12,
+                       'help_talk': 13,
+                       'category': 14,
+                       'category_talk': 15,
+                       'image': 6,
+                       'image_talk': 7,
+                       'project': 4,
+                       'project_talk': 5,
+                       // Testing custom namespaces and aliases
+                       'penguins': 100,
+                       'antarctic_waterfowl': 100
                },
                wgCaseSensitiveNamespaces: []
        },
index 24a7cc9..a2ad50d 100644 (file)
@@ -705,7 +705,6 @@ QUnit.test( 'HTML', 26, function ( assert ) {
                'Escaped attributes are parsed correctly'
        );
 
-
        mw.messages.set( 'jquerymsg-wikitext-contents-parsed', '<i>[http://example.com Example]</i>' );
        assert.htmlEqual(
                formatParse( 'jquerymsg-wikitext-contents-parsed' ),
index 594ae25..441fcbc 100644 (file)
@@ -75,7 +75,7 @@
                assert.strictEqual( conf.get( 'constructor' ), 42, 'Map.get for key "constructor"' );
 
                assert.strictEqual( conf.set( 'ImUndefined', undefined ), true, 'Map.set allows setting value to `undefined`' );
-               assert.equal( conf.get( 'ImUndefined', 'fallback' ), undefined , 'Map.get supports retreiving value of `undefined`' );
+               assert.equal( conf.get( 'ImUndefined', 'fallback' ), undefined, 'Map.get supports retreiving value of `undefined`' );
 
                assert.strictEqual( conf.set( funky, 'Funky' ), false, 'Map.set returns boolean false if key was invalid (Function)' );
                assert.strictEqual( conf.set( arry, 'Arry' ), false, 'Map.set returns boolean false if key was invalid (Array)' );
                        'notExist': null
                }, 'Map.get return includes keys that were not found as null values' );
 
-
                // Interacting with globals and accessing the values object
                assert.strictEqual( conf.get(), conf.values, 'Map.get returns the entire values object by reference (if called without arguments)' );
 
                assertMultipleFormats( ['mediawiki-test-version-entrypoints-index-php'], ['plain', 'text', 'escaped'], mw.messages.get( 'mediawiki-test-version-entrypoints-index-php' ), 'External link markup is unprocessed' );
                assert.htmlEqual( mw.message( 'mediawiki-test-version-entrypoints-index-php' ).parse(), '<a href="https://www.mediawiki.org/wiki/Manual:index.php">index.php</a>', 'External link works correctly in parse mode' );
 
-               assertMultipleFormats( ['external-link-replace', 'http://example.org/?x=y&z'], ['plain', 'text'] , 'Foo [http://example.org/?x=y&z bar]', 'Parameters are substituted but external link is not processed' );
+               assertMultipleFormats( ['external-link-replace', 'http://example.org/?x=y&z'], ['plain', 'text'], 'Foo [http://example.org/?x=y&z bar]', 'Parameters are substituted but external link is not processed' );
                assert.equal( mw.message( 'external-link-replace', 'http://example.org/?x=y&z' ).escaped(), 'Foo [http://example.org/?x=y&amp;z bar]', 'In escaped mode, parameters are substituted and ampersand is escaped, but external link is not processed' );
                assert.htmlEqual( mw.message( 'external-link-replace', 'http://example.org/?x=y&z' ).parse(), 'Foo <a href="http://example.org/?x=y&amp;z">bar</a>', 'External link with replacement works in parse mode without double-escaping' );
 
                assertMultipleFormats( ['plural-test-msg-explicit-beginning', 6], ['text', 'parse', 'escaped'], 'Basket has half a dozen eggs', 'explicit plural given at beginning get resolved for 6' );
                assertMultipleFormats( ['plural-test-msg-explicit-beginning', 0], ['text', 'parse', 'escaped'], 'Basket has no eggs', 'explicit plural given at beginning get resolved for 0' );
 
-
                assertMultipleFormats( ['mediawiki-test-pagetriage-del-talk-page-notify-summary'], ['plain', 'text'], mw.messages.get( 'mediawiki-test-pagetriage-del-talk-page-notify-summary' ), 'Double square brackets with no parameters unchanged' );
 
                assertMultipleFormats( ['mediawiki-test-pagetriage-del-talk-page-notify-summary', specialCharactersPageName], ['plain', 'text'], 'Notifying author of deletion nomination for [[' + specialCharactersPageName + ']]', 'Double square brackets with one parameter' );
 
                assert.equal( mw.message( 'mediawiki-test-pagetriage-del-talk-page-notify-summary', specialCharactersPageName ).escaped(), 'Notifying author of deletion nomination for [[' + mw.html.escape( specialCharactersPageName ) + ']]', 'Double square brackets with one parameter, when escaped' );
 
-
                assert.ok( mw.messages.set( 'mediawiki-test-categorytree-collapse-bullet', '[<b>−</b>]' ), 'mw.messages.set: Register' );
                assert.equal( mw.message( 'mediawiki-test-categorytree-collapse-bullet' ).plain(), mw.messages.get( 'mediawiki-test-categorytree-collapse-bullet' ), 'Single square brackets unchanged in plain mode' );
 
                        'Script escaped when using parse format'
                );
 
-
        } );
 
        QUnit.test( 'mw.msg', 14, function ( assert ) {
                assert.equal( mw.msg( 'hello' ), 'Hello <b>awesome</b> world', 'Gets message with default options (existing message)' );
                assert.equal( mw.msg( 'goodbye' ), '<goodbye>', 'Gets message with default options (nonexistent message)' );
 
-               assert.ok( mw.messages.set( 'plural-item' , 'Found $1 {{PLURAL:$1|item|items}}' ), 'mw.messages.set: Register' );
+               assert.ok( mw.messages.set( 'plural-item', 'Found $1 {{PLURAL:$1|item|items}}' ), 'mw.messages.set: Register' );
                assert.equal( mw.msg( 'plural-item', 5 ), 'Found 5 items', 'Apply plural for count 5' );
                assert.equal( mw.msg( 'plural-item', 0 ), 'Found 0 items', 'Apply plural for count 0' );
                assert.equal( mw.msg( 'plural-item', 1 ), 'Found 1 item', 'Apply plural for count 1' );