Merge "Remove deprecated $wgBetterDirectionality"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Fri, 17 Jan 2014 20:47:17 +0000 (20:47 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Fri, 17 Jan 2014 20:47:17 +0000 (20:47 +0000)
163 files changed:
RELEASE-NOTES-1.23
img_auth.php
includes/AutoLoader.php
includes/DefaultSettings.php
includes/Defines.php
includes/MagicWord.php
includes/OutputPage.php
includes/Sanitizer.php
includes/SpecialPageFactory.php [deleted file]
includes/Title.php
includes/ZhClient.php [deleted file]
includes/actions/InfoAction.php
includes/api/ApiQueryLogEvents.php
includes/api/ApiQuerySiteinfo.php
includes/changes/EnhancedChangesList.php
includes/db/Database.php
includes/db/DatabaseMssql.php
includes/db/DatabaseMysqlBase.php
includes/db/DatabaseOracle.php
includes/db/DatabasePostgres.php
includes/db/DatabaseSqlite.php
includes/db/DatabaseUtility.php
includes/filebackend/SwiftFileBackend.php
includes/filerepo/FileRepo.php
includes/filerepo/LocalRepo.php
includes/installer/Installer.i18n.php
includes/installer/WebInstallerPage.php
includes/libs/XmlTypeCheck.php
includes/normal/.gitignore [new file with mode: 0644]
includes/normal/Makefile
includes/normal/Utf8Case.php [deleted file]
includes/normal/Utf8CaseGenerate.php [deleted file]
includes/objectcache/DBABagOStuff.php [deleted file]
includes/objectcache/EhcacheBagOStuff.php [deleted file]
includes/objectcache/HashBagOStuff.php
includes/objectcache/RedisBagOStuff.php
includes/parser/CoreParserFunctions.php
includes/parser/Tidy.php
includes/search/SearchEngine.php
includes/specialpage/SpecialPageFactory.php [new file with mode: 0644]
includes/specials/SpecialRecentchanges.php
includes/specials/SpecialSearch.php
includes/specials/SpecialWatchlist.php
includes/upload/UploadBase.php
includes/utils/IP.php
languages/messages/MessagesAeb.php
languages/messages/MessagesAr.php
languages/messages/MessagesAz.php
languages/messages/MessagesBcl.php
languages/messages/MessagesBe_tarask.php
languages/messages/MessagesBn.php
languages/messages/MessagesBr.php
languages/messages/MessagesBs.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/MessagesDsb.php
languages/messages/MessagesEgl.php
languages/messages/MessagesEl.php
languages/messages/MessagesEn.php
languages/messages/MessagesEs.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/MessagesGl.php
languages/messages/MessagesHe.php
languages/messages/MessagesHr.php
languages/messages/MessagesHsb.php
languages/messages/MessagesIa.php
languages/messages/MessagesId.php
languages/messages/MessagesIs.php
languages/messages/MessagesIt.php
languages/messages/MessagesJa.php
languages/messages/MessagesJv.php
languages/messages/MessagesKa.php
languages/messages/MessagesKab.php
languages/messages/MessagesKm.php
languages/messages/MessagesKo.php
languages/messages/MessagesKrc.php
languages/messages/MessagesLad.php
languages/messages/MessagesLb.php
languages/messages/MessagesLez.php
languages/messages/MessagesLrc.php
languages/messages/MessagesLv.php
languages/messages/MessagesMap_bms.php
languages/messages/MessagesMg.php
languages/messages/MessagesMk.php
languages/messages/MessagesMr.php
languages/messages/MessagesNah.php
languages/messages/MessagesNan.php
languages/messages/MessagesNb.php
languages/messages/MessagesNe.php
languages/messages/MessagesNl.php
languages/messages/MessagesPl.php
languages/messages/MessagesPms.php
languages/messages/MessagesPt_br.php
languages/messages/MessagesQqq.php
languages/messages/MessagesRo.php
languages/messages/MessagesRu.php
languages/messages/MessagesSi.php
languages/messages/MessagesSr_ec.php
languages/messages/MessagesSr_el.php
languages/messages/MessagesTe.php
languages/messages/MessagesTr.php
languages/messages/MessagesTru.php
languages/messages/MessagesUk.php
languages/messages/MessagesUz.php
languages/messages/MessagesVep.php
languages/messages/MessagesVi.php
languages/messages/MessagesWar.php
languages/messages/MessagesYi.php
languages/messages/MessagesZh_hans.php
languages/messages/MessagesZh_hant.php
maintenance/dictionary/mediawiki.dic
maintenance/jsduck/MetaTags.rb
maintenance/jsduck/categories.json
maintenance/jsduck/config.json
maintenance/language/generateNormalizerData.php [deleted file]
maintenance/language/generateNormalizerDataAr.php [new file with mode: 0644]
maintenance/language/generateNormalizerDataMl.php [new file with mode: 0644]
maintenance/language/generateUtf8Case.php [new file with mode: 0644]
maintenance/language/messageTypes.inc
maintenance/language/messages.inc
maintenance/rebuildrecentchanges.php
resources/mediawiki.language/languages/bs.js
resources/mediawiki.language/languages/dsb.js
resources/mediawiki.language/languages/fi.js
resources/mediawiki.language/languages/ga.js
resources/mediawiki.language/languages/he.js
resources/mediawiki.language/languages/hsb.js
resources/mediawiki.language/languages/hu.js
resources/mediawiki.language/languages/hy.js
resources/mediawiki.language/languages/la.js
resources/mediawiki.language/languages/os.js
resources/mediawiki.language/languages/ru.js
resources/mediawiki.language/languages/sl.js
resources/mediawiki.language/languages/uk.js
resources/mediawiki.language/mediawiki.cldr.js
resources/mediawiki.language/mediawiki.language.init.js
resources/mediawiki.language/mediawiki.language.js
resources/mediawiki.language/mediawiki.language.months.js
resources/mediawiki.language/mediawiki.language.numbers.js
resources/mediawiki.special/mediawiki.special.changeslist.css
resources/mediawiki/mediawiki.Uri.js
resources/mediawiki/mediawiki.js
resources/mediawiki/mediawiki.searchSuggest.js
serialized/.gitignore [new file with mode: 0644]
serialized/Makefile
serialized/serialize.php [deleted file]
tests/parser/parserTests.txt
tests/phpunit/MediaWikiTestCase.php
tests/phpunit/data/autoloader/TestAutoloadedAliasedClassNew.php [deleted file]
tests/phpunit/includes/HtmlFormatterTest.php
tests/phpunit/includes/filebackend/FileBackendTest.php
tests/phpunit/includes/utils/IPTest.php
tests/phpunit/structure/AutoLoaderTest.php
tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js

index 10671fe..6dceccc 100644 (file)
@@ -28,6 +28,7 @@ production.
   should be updated if LBFactory_Simple or LBFactory_Multi is configured.
 * $wgPasswordSenderName has been deprecated. To set a custom mailer name,
   the system message 'emailsender' should be modified (default: "{{SITENAME}}").
+* $wgDBAhandler was removed as the only class using it was also removed
 
 === New features in 1.23 ===
 * ResourceLoader can utilize the Web Storage API to cache modules client-side.
@@ -102,6 +103,10 @@ production.
   remaining page content.
 * (bug 23542) imagelinks now stores both the redirect and target (as
   templatelinks does).
+* (bug 58167) The web installer no longer throws an exception when PHP is
+  compiled without support for MySQL yet with support for another DBMS.
+* (bug 56199) Raw option of parser functions must now match complete word,
+  to take effect.
 
 === Web API changes in 1.23 ===
 * (bug 54884) action=parse&prop=categories now indicates hidden and missing
index 2d2db9a..72a7dab 100644 (file)
@@ -92,12 +92,17 @@ function wfImageAuthMain() {
                if ( strpos( $path, $prefix ) === 0 ) {
                        $be = FileBackendGroup::singleton()->backendFromPath( $storageDir );
                        $filename = $storageDir . substr( $path, strlen( $prefix ) ); // strip prefix
+                       // Check basic user authorization
+                       if ( !RequestContext::getMain()->getUser()->isAllowed( 'read' ) ) {
+                               wfForbidden( 'img-auth-accessdenied', 'img-auth-noread', $path );
+                               return;
+                       }
                        if ( $be->fileExists( array( 'src' => $filename ) ) ) {
                                wfDebugLog( 'img_auth', "Streaming `" . $filename . "`." );
                                $be->streamFile( array( 'src' => $filename ),
                                        array( 'Cache-Control: private', 'Vary: Cookie' ) );
                        } else {
-                               wfForbidden( 'img-auth-accessdenied', 'img-auth-nofile', $filename );
+                               wfForbidden( 'img-auth-accessdenied', 'img-auth-nofile', $path );
                        }
                        return;
                }
index 0e56b7c..bab00f9 100644 (file)
@@ -200,7 +200,7 @@ $wgAutoloadLocalClasses = array(
        'SpecialMyuploads' => 'includes/specials/SpecialMyRedirectPages.php',
        'SpecialAllMyUploads' => 'includes/specials/SpecialMyRedirectPages.php',
        'SpecialPage' => 'includes/specialpage/SpecialPage.php',
-       'SpecialPageFactory' => 'includes/SpecialPageFactory.php',
+       'SpecialPageFactory' => 'includes/specialpage/SpecialPageFactory.php',
        'SpecialRedirectToSpecial' => 'includes/specialpage/RedirectSpecialPage.php',
        'SquidPurgeClient' => 'includes/SquidPurgeClient.php',
        'SquidPurgeClientPool' => 'includes/SquidPurgeClient.php',
@@ -246,7 +246,6 @@ $wgAutoloadLocalClasses = array(
        'XmlJsCode' => 'includes/Xml.php',
        'XMLReader2' => 'includes/Import.php',
        'XmlSelect' => 'includes/Xml.php',
-       'ZhClient' => 'includes/ZhClient.php',
 
        # includes/actions
        'CachedAction' => 'includes/actions/CachedAction.php',
@@ -768,8 +767,6 @@ $wgAutoloadLocalClasses = array(
        # includes/objectcache
        'APCBagOStuff' => 'includes/objectcache/APCBagOStuff.php',
        'BagOStuff' => 'includes/objectcache/BagOStuff.php',
-       'DBABagOStuff' => 'includes/objectcache/DBABagOStuff.php',
-       'EhcacheBagOStuff' => 'includes/objectcache/EhcacheBagOStuff.php',
        'EmptyBagOStuff' => 'includes/objectcache/EmptyBagOStuff.php',
        'FakeMemCachedClient' => 'includes/objectcache/EmptyBagOStuff.php',
        'HashBagOStuff' => 'includes/objectcache/HashBagOStuff.php',
@@ -1211,32 +1208,6 @@ class AutoLoader {
                        return;
                }
 
-               if ( substr( $filename, 0, 6 ) === 'alias:' ) {
-                       // Supported alias formats:
-                       // - No deprecation warning: alias:MyNewClassName
-                       // - Deprecated in MediaWiki 1.1: alias:MyNewClassName?v=1.1
-                       // - Deprecated in MyExtension 1.1: alias:MyNewClassName?c=MyExtension&v=1.1
-                       $parts = explode( '?', substr( $filename, 6 ), 2 );
-                       $newClassName = $parts[0];
-
-                       // If necessary, this will make a recursive call to this function to
-                       // load the class using its actual, canonical name.
-                       class_alias( $newClassName, $className );
-
-                       if ( isset( $parts[1] ) && function_exists( 'wfDeprecated' ) ) {
-                               $info = wfCgiToArray( $parts[1] );
-                               $function = "name $className for class $newClassName";
-                               $version = isset( $info['v'] ) ? $info['v'] : false;
-                               $component = isset( $info['c'] ) ? $info['c'] : false;
-
-                               // https://github.com/facebook/hhvm/issues/1018
-                               $callerOffset = wfIsHHVM() ? 2 : 3;
-                               wfDeprecated( $function, $version, $component, $callerOffset );
-                       }
-
-                       return;
-               }
-
                # Make an absolute path, this improves performance by avoiding some stat calls
                if ( substr( $filename, 0, 1 ) != '/' && substr( $filename, 1, 1 ) != ':' ) {
                        global $IP;
index 1dd904b..69d4633 100644 (file)
@@ -1945,9 +1945,6 @@ $wgCacheDirectory = false;
  *   - CACHE_DB:         Store cache objects in the DB
  *   - CACHE_MEMCACHED:  MemCached, must specify servers in $wgMemCachedServers
  *   - CACHE_ACCEL:      APC, XCache or WinCache
- *   - CACHE_DBA:        Use PHP's DBA extension to store in a DBM-style
- *                       database. This is slow, and is not recommended for
- *                       anything other than debugging.
  *   - (other):          A string may be used which identifies a cache
  *                       configuration in $wgObjectCaches.
  *
@@ -2000,15 +1997,10 @@ $wgLanguageConverterCacheType = CACHE_ANYTHING;
  * the value is an associative array of parameters. The "class" parameter is the
  * class name which will be used. Alternatively, a "factory" parameter may be
  * given, giving a callable function which will generate a suitable cache object.
- *
- * The other parameters are dependent on the class used.
- * - CACHE_DBA uses $wgTmpDirectory by default. The 'dir' parameter let you
- *   overrides that.
  */
 $wgObjectCaches = array(
        CACHE_NONE => array( 'class' => 'EmptyBagOStuff' ),
        CACHE_DB => array( 'class' => 'SqlBagOStuff', 'table' => 'objectcache' ),
-       CACHE_DBA => array( 'class' => 'DBABagOStuff' ),
 
        CACHE_ANYTHING => array( 'factory' => 'ObjectCache::newAnything' ),
        CACHE_ACCEL => array( 'factory' => 'ObjectCache::newAccelerator' ),
@@ -2028,12 +2020,6 @@ $wgObjectCaches = array(
  */
 $wgParserCacheExpireTime = 86400;
 
-/**
- * Select which DBA handler <http://www.php.net/manual/en/dba.requirements.php>
- * to use as CACHE_DBA backend.
- */
-$wgDBAhandler = 'db3';
-
 /**
  * Deprecated alias for $wgSessionsInObjectCache.
  *
index 7c71fe7..015ea9c 100644 (file)
@@ -113,7 +113,6 @@ define( 'CACHE_NONE', 0 );       // Do not cache
 define( 'CACHE_DB', 1 );         // Store cache objects in the DB
 define( 'CACHE_MEMCACHED', 2 );  // MemCached, must specify servers in $wgMemCacheServers
 define( 'CACHE_ACCEL', 3 );      // APC, XCache or WinCache
-define( 'CACHE_DBA', 4 );        // Use PHP's DBA extension to store in a DBM-style database
 /**@}*/
 
 /**@{
index bf15bf3..377d406 100644 (file)
@@ -65,6 +65,7 @@ class MagicWord {
        var $mId, $mSynonyms, $mCaseSensitive;
        var $mRegex = '';
        var $mRegexStart = '';
+       var $mRegexStartToEnd = '';
        var $mBaseRegex = '';
        var $mVariableRegex = '';
        var $mVariableStartToEndRegex = '';
@@ -339,6 +340,7 @@ class MagicWord {
                $case = $this->mCaseSensitive ? '' : 'iu';
                $this->mRegex = "/{$this->mBaseRegex}/{$case}";
                $this->mRegexStart = "/^(?:{$this->mBaseRegex})/{$case}";
+               $this->mRegexStartToEnd = "/^(?:{$this->mBaseRegex})$/{$case}";
                $this->mVariableRegex = str_replace( "\\$1", "(.*?)", $this->mRegex );
                $this->mVariableStartToEndRegex = str_replace( "\\$1", "(.*?)",
                        "/^(?:{$this->mBaseRegex})$/{$case}" );
@@ -405,6 +407,19 @@ class MagicWord {
                return $this->mRegexStart;
        }
 
+       /**
+        * Gets a regex matching the word from start to end of a string
+        *
+        * @return string
+        * @since 1.23
+        */
+       function getRegexStartToEnd() {
+               if ( $this->mRegexStartToEnd == '' ) {
+                       $this->initRegex();
+               }
+               return $this->mRegexStartToEnd;
+       }
+
        /**
         * regex without the slashes and what not
         *
@@ -439,6 +454,18 @@ class MagicWord {
                return (bool)preg_match( $this->getRegexStart(), $text );
        }
 
+       /**
+        * Returns true if the text matched the word
+        *
+        * @param $text string
+        *
+        * @return bool
+        * @since 1.23
+        */
+       function matchStartToEnd( $text ) {
+               return (bool)preg_match( $this->getRegexStartToEnd(), $text );
+       }
+
        /**
         * Returns NULL if there's no match, the value of $1 otherwise
         * The return code is the matched string, if there's no variable
index b6a8d24..9866e2c 100644 (file)
@@ -2510,6 +2510,10 @@ $templates
 
                $ret .= Html::element( 'title', null, $this->getHTMLTitle() ) . "\n";
 
+               // Avoid Internet Explorer "compatibility view", so that
+               // jQuery can work correctly.
+               $ret .= Html::element( 'meta', array( 'http-equiv' => 'X-UA-Compatible', 'content' => 'IE=EDGE' ) );
+
                $ret .= implode( "\n", array(
                        $this->getHeadLinks(),
                        $this->buildCssLinks(),
index a6fb6d0..0de8cda 100644 (file)
@@ -867,7 +867,7 @@ class Sanitizer {
 
                // Normalize Halfwidth and Fullwidth Unicode block that IE6 might treat as ascii
                $value = preg_replace_callback(
-                       '/[ï¼\81½\9a]/u', // U+FF01 to U+FF5A
+                       '/[ï¼\81¼»ï¼½-ï½\9a]/u', // U+FF01 to U+FF5A, excluding U+FF3C (bug 58088)
                        function ( $matches ) {
                                $cp = utf8ToCodepoint( $matches[0] );
                                if ( $cp === false ) {
@@ -926,9 +926,16 @@ class Sanitizer {
                if ( preg_match( '/[\000-\010\013\016-\037\177]/', $value ) ) {
                        return '/* invalid control char */';
                } elseif ( preg_match(
-                       '! expression | filter\s*: | accelerator\s*: | url\s*\( | image\s*\( | image-set\s*\( !ix',
-                       $value
-               ) ) {
+                       '! expression
+                               | filter\s*:
+                               | accelerator\s*:
+                               | -o-link\s*:
+                               | -o-link-source\s*:
+                               | -o-replace\s*:
+                               | url\s*\(
+                               | image\s*\(
+                               | image-set\s*\(
+                       !ix', $value ) ) {
                        return '/* insecure input */';
                }
                return $value;
diff --git a/includes/SpecialPageFactory.php b/includes/SpecialPageFactory.php
deleted file mode 100644 (file)
index 18b8f0b..0000000
+++ /dev/null
@@ -1,587 +0,0 @@
-<?php
-/**
- * Factory for handling the special page list and generating SpecialPage objects.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup SpecialPage
- * @defgroup SpecialPage SpecialPage
- */
-
-/**
- * Factory for handling the special page list and generating SpecialPage objects.
- *
- * To add a special page in an extension, add to $wgSpecialPages either
- * an object instance or an array containing the name and constructor
- * parameters. The latter is preferred for performance reasons.
- *
- * The object instantiated must be either an instance of SpecialPage or a
- * sub-class thereof. It must have an execute() method, which sends the HTML
- * for the special page to $wgOut. The parent class has an execute() method
- * which distributes the call to the historical global functions. Additionally,
- * execute() also checks if the user has the necessary access privileges
- * and bails out if not.
- *
- * To add a core special page, use the similar static list in
- * SpecialPageFactory::$list. To remove a core static special page at runtime, use
- * a SpecialPage_initList hook.
- *
- * @ingroup SpecialPage
- * @since 1.17
- */
-class SpecialPageFactory {
-       /**
-        * List of special page names to the subclass of SpecialPage which handles them.
-        */
-       private static $list = array(
-               // Maintenance Reports
-               'BrokenRedirects'           => 'BrokenRedirectsPage',
-               'Deadendpages'              => 'DeadendpagesPage',
-               'DoubleRedirects'           => 'DoubleRedirectsPage',
-               'Longpages'                 => 'LongpagesPage',
-               'Ancientpages'              => 'AncientpagesPage',
-               'Lonelypages'               => 'LonelypagesPage',
-               'Fewestrevisions'           => 'FewestrevisionsPage',
-               'Withoutinterwiki'          => 'WithoutinterwikiPage',
-               'Protectedpages'            => 'SpecialProtectedpages',
-               'Protectedtitles'           => 'SpecialProtectedtitles',
-               'Shortpages'                => 'ShortpagesPage',
-               'Uncategorizedcategories'   => 'UncategorizedcategoriesPage',
-               'Uncategorizedimages'       => 'UncategorizedimagesPage',
-               'Uncategorizedpages'        => 'UncategorizedpagesPage',
-               'Uncategorizedtemplates'    => 'UncategorizedtemplatesPage',
-               'Unusedcategories'          => 'UnusedcategoriesPage',
-               'Unusedimages'              => 'UnusedimagesPage',
-               'Unusedtemplates'           => 'UnusedtemplatesPage',
-               'Unwatchedpages'            => 'UnwatchedpagesPage',
-               'Wantedcategories'          => 'WantedcategoriesPage',
-               'Wantedfiles'               => 'WantedfilesPage',
-               'Wantedpages'               => 'WantedpagesPage',
-               'Wantedtemplates'           => 'WantedtemplatesPage',
-
-               // List of pages
-               'Allpages'                  => 'SpecialAllpages',
-               'Prefixindex'               => 'SpecialPrefixindex',
-               'Categories'                => 'SpecialCategories',
-               'Listredirects'             => 'ListredirectsPage',
-               'PagesWithProp'             => 'SpecialPagesWithProp',
-
-               // Login/create account
-               'Userlogin'                 => 'LoginForm',
-               'CreateAccount'             => 'SpecialCreateAccount',
-
-               // Users and rights
-               'Block'                     => 'SpecialBlock',
-               'Unblock'                   => 'SpecialUnblock',
-               'BlockList'                 => 'SpecialBlockList',
-               'ChangePassword'            => 'SpecialChangePassword',
-               'PasswordReset'             => 'SpecialPasswordReset',
-               'DeletedContributions'      => 'DeletedContributionsPage',
-               'Preferences'               => 'SpecialPreferences',
-               'ResetTokens'               => 'SpecialResetTokens',
-               'Contributions'             => 'SpecialContributions',
-               'Listgrouprights'           => 'SpecialListGroupRights',
-               'Listusers'                 => 'SpecialListUsers',
-               'Listadmins'                => 'SpecialListAdmins',
-               'Listbots'                  => 'SpecialListBots',
-               'Activeusers'               => 'SpecialActiveUsers',
-               'Userrights'                => 'UserrightsPage',
-               'EditWatchlist'             => 'SpecialEditWatchlist',
-
-               // Recent changes and logs
-               'Newimages'                 => 'SpecialNewFiles',
-               'Log'                       => 'SpecialLog',
-               'Watchlist'                 => 'SpecialWatchlist',
-               'Newpages'                  => 'SpecialNewpages',
-               'Recentchanges'             => 'SpecialRecentChanges',
-               'Recentchangeslinked'       => 'SpecialRecentChangesLinked',
-               'Tags'                      => 'SpecialTags',
-
-               // Media reports and uploads
-               'Listfiles'                 => 'SpecialListFiles',
-               'Filepath'                  => 'SpecialFilepath',
-               'MIMEsearch'                => 'MIMEsearchPage',
-               'FileDuplicateSearch'       => 'FileDuplicateSearchPage',
-               'Upload'                    => 'SpecialUpload',
-               'UploadStash'               => 'SpecialUploadStash',
-
-               // Data and tools
-               'Statistics'                => 'SpecialStatistics',
-               'Allmessages'               => 'SpecialAllmessages',
-               'Version'                   => 'SpecialVersion',
-               'Lockdb'                    => 'SpecialLockdb',
-               'Unlockdb'                  => 'SpecialUnlockdb',
-
-               // Redirecting special pages
-               'LinkSearch'                => 'LinkSearchPage',
-               'Randompage'                => 'Randompage',
-               'RandomInCategory'          => 'SpecialRandomInCategory',
-               'Randomredirect'            => 'SpecialRandomredirect',
-
-               // High use pages
-               'Mostlinkedcategories'      => 'MostlinkedCategoriesPage',
-               'Mostimages'                => 'MostimagesPage',
-               'Mostinterwikis'            => 'MostinterwikisPage',
-               'Mostlinked'                => 'MostlinkedPage',
-               'Mostlinkedtemplates'       => 'MostlinkedTemplatesPage',
-               'Mostcategories'            => 'MostcategoriesPage',
-               'Mostrevisions'             => 'MostrevisionsPage',
-
-               // Page tools
-               'ComparePages'              => 'SpecialComparePages',
-               'Export'                    => 'SpecialExport',
-               'Import'                    => 'SpecialImport',
-               'Undelete'                  => 'SpecialUndelete',
-               'Whatlinkshere'             => 'SpecialWhatlinkshere',
-               'MergeHistory'              => 'SpecialMergeHistory',
-               'ExpandTemplates'           => 'SpecialExpandTemplates',
-
-               // Other
-               'Booksources'               => 'SpecialBookSources',
-
-               // Unlisted / redirects
-               'Blankpage'                 => 'SpecialBlankpage',
-               'Emailuser'                 => 'SpecialEmailUser',
-               'Movepage'                  => 'MovePageForm',
-               'Mycontributions'           => 'SpecialMycontributions',
-               'Mypage'                    => 'SpecialMypage',
-               'Mytalk'                    => 'SpecialMytalk',
-               'Myuploads'                 => 'SpecialMyuploads',
-               'AllMyUploads'              => 'SpecialAllMyUploads',
-               'PermanentLink'             => 'SpecialPermanentLink',
-               'Redirect'                  => 'SpecialRedirect',
-               'Revisiondelete'            => 'SpecialRevisionDelete',
-               'Specialpages'              => 'SpecialSpecialpages',
-               'Userlogout'                => 'SpecialUserlogout',
-       );
-
-       private static $aliases;
-
-       /**
-        * Get the special page list
-        *
-        * @return array
-        */
-       static function getList() {
-               global $wgSpecialPages;
-               global $wgDisableCounters, $wgDisableInternalSearch, $wgEmailAuthentication;
-               global $wgEnableEmail, $wgEnableJavaScriptTest;
-
-               if ( !is_object( self::$list ) ) {
-                       wfProfileIn( __METHOD__ );
-
-                       if ( !$wgDisableCounters ) {
-                               self::$list['Popularpages'] = 'PopularpagesPage';
-                       }
-
-                       if ( !$wgDisableInternalSearch ) {
-                               self::$list['Search'] = 'SpecialSearch';
-                       }
-
-                       if ( $wgEmailAuthentication ) {
-                               self::$list['Confirmemail'] = 'EmailConfirmation';
-                               self::$list['Invalidateemail'] = 'EmailInvalidation';
-                       }
-
-                       if ( $wgEnableEmail ) {
-                               self::$list['ChangeEmail'] = 'SpecialChangeEmail';
-                       }
-
-                       if ( $wgEnableJavaScriptTest ) {
-                               self::$list['JavaScriptTest'] = 'SpecialJavaScriptTest';
-                       }
-
-                       // Add extension special pages
-                       self::$list = array_merge( self::$list, $wgSpecialPages );
-
-                       // Run hooks
-                       // This hook can be used to remove undesired built-in special pages
-                       wfRunHooks( 'SpecialPage_initList', array( &self::$list ) );
-
-                       // Cast to object: func()[$key] doesn't work, but func()->$key does
-                       settype( self::$list, 'object' );
-
-                       wfProfileOut( __METHOD__ );
-               }
-               return self::$list;
-       }
-
-       /**
-        * Initialise and return the list of special page aliases.  Returns an object with
-        * properties which can be accessed $obj->pagename - each property is an array of
-        * aliases; the first in the array is the canonical alias.  All registered special
-        * pages are guaranteed to have a property entry, and for that property array to
-        * contain at least one entry (English fallbacks will be added if necessary).
-        * @return Object
-        */
-       static function getAliasList() {
-               if ( !is_object( self::$aliases ) ) {
-                       global $wgContLang;
-                       $aliases = $wgContLang->getSpecialPageAliases();
-
-                       // Objects are passed by reference by default, need to create a copy
-                       $missingPages = clone self::getList();
-
-                       self::$aliases = array();
-                       foreach ( $aliases as $realName => $aliasList ) {
-                               foreach ( $aliasList as $alias ) {
-                                       self::$aliases[$wgContLang->caseFold( $alias )] = $realName;
-                               }
-                               unset( $missingPages->$realName );
-                       }
-                       foreach ( $missingPages as $name => $stuff ) {
-                               self::$aliases[$wgContLang->caseFold( $name )] = $name;
-                       }
-
-                       // Cast to object: func()[$key] doesn't work, but func()->$key does
-                       self::$aliases = (object)self::$aliases;
-               }
-               return self::$aliases;
-       }
-
-       /**
-        * Given a special page name with a possible subpage, return an array
-        * where the first element is the special page name and the second is the
-        * subpage.
-        *
-        * @param string $alias
-        * @return array Array( String, String|null ), or array( null, null ) if the page is invalid
-        */
-       public static function resolveAlias( $alias ) {
-               global $wgContLang;
-               $bits = explode( '/', $alias, 2 );
-
-               $caseFoldedAlias = $wgContLang->caseFold( $bits[0] );
-               $caseFoldedAlias = str_replace( ' ', '_', $caseFoldedAlias );
-               if ( isset( self::getAliasList()->$caseFoldedAlias ) ) {
-                       $name = self::getAliasList()->$caseFoldedAlias;
-               } else {
-                       return array( null, null );
-               }
-
-               if ( !isset( $bits[1] ) ) { // bug 2087
-                       $par = null;
-               } else {
-                       $par = $bits[1];
-               }
-
-               return array( $name, $par );
-       }
-
-       /**
-        * Add a page to a certain display group for Special:SpecialPages
-        *
-        * @param SpecialPage|string $page
-        * @param string $group
-        * @deprecated since 1.21 Override SpecialPage::getGroupName
-        */
-       public static function setGroup( $page, $group ) {
-               wfDeprecated( __METHOD__, '1.21' );
-
-               global $wgSpecialPageGroups;
-               $name = is_object( $page ) ? $page->getName() : $page;
-               $wgSpecialPageGroups[$name] = $group;
-       }
-
-       /**
-        * Get the group that the special page belongs in on Special:SpecialPage
-        *
-        * @param SpecialPage $page
-        * @return string
-        * @deprecated since 1.21 Use SpecialPage::getFinalGroupName
-        */
-       public static function getGroup( &$page ) {
-               wfDeprecated( __METHOD__, '1.21' );
-
-               return $page->getFinalGroupName();
-       }
-
-       /**
-        * Check if a given name exist as a special page or as a special page alias
-        *
-        * @param string $name Name of a special page
-        * @return bool True if a special page exists with this name
-        */
-       public static function exists( $name ) {
-               list( $title, /*...*/ ) = self::resolveAlias( $name );
-               return property_exists( self::getList(), $title );
-       }
-
-       /**
-        * Find the object with a given name and return it (or NULL)
-        *
-        * @param string $name Special page name, may be localised and/or an alias
-        * @return SpecialPage|null SpecialPage object or null if the page doesn't exist
-        */
-       public static function getPage( $name ) {
-               list( $realName, /*...*/ ) = self::resolveAlias( $name );
-               if ( property_exists( self::getList(), $realName ) ) {
-                       $rec = self::getList()->$realName;
-                       if ( is_string( $rec ) ) {
-                               $className = $rec;
-                               return new $className;
-                       } elseif ( is_array( $rec ) ) {
-                               // @deprecated, officially since 1.18, unofficially since forever
-                               wfDebug( "Array syntax for \$wgSpecialPages is deprecated, define a subclass of SpecialPage instead." );
-                               $className = array_shift( $rec );
-                               self::getList()->$realName = MWFunction::newObj( $className, $rec );
-                       }
-                       return self::getList()->$realName;
-               } else {
-                       return null;
-               }
-       }
-
-       /**
-        * Return categorised listable special pages which are available
-        * for the current user, and everyone.
-        *
-        * @param $user User object to check permissions, $wgUser will be used if
-        *   if not provided
-        * @return array ( string => Specialpage )
-        */
-       public static function getUsablePages( User $user = null ) {
-               $pages = array();
-               if ( $user === null ) {
-                       global $wgUser;
-                       $user = $wgUser;
-               }
-               foreach ( self::getList() as $name => $rec ) {
-                       $page = self::getPage( $name );
-                       if ( $page ) { // not null
-                               $page->setContext( RequestContext::getMain() );
-                               if ( $page->isListed()
-                                       && ( !$page->isRestricted() || $page->userCanExecute( $user ) )
-                               ) {
-                                       $pages[$name] = $page;
-                               }
-                       }
-               }
-               return $pages;
-       }
-
-       /**
-        * Return categorised listable special pages for all users
-        *
-        * @return array ( string => Specialpage )
-        */
-       public static function getRegularPages() {
-               $pages = array();
-               foreach ( self::getList() as $name => $rec ) {
-                       $page = self::getPage( $name );
-                       if ( $page->isListed() && !$page->isRestricted() ) {
-                               $pages[$name] = $page;
-                       }
-               }
-               return $pages;
-       }
-
-       /**
-        * Return categorised listable special pages which are available
-        * for the current user, but not for everyone
-        *
-        * @return array ( string => Specialpage )
-        */
-       public static function getRestrictedPages() {
-               global $wgUser;
-               $pages = array();
-               foreach ( self::getList() as $name => $rec ) {
-                       $page = self::getPage( $name );
-                       if (
-                               $page->isListed()
-                               && $page->isRestricted()
-                               && $page->userCanExecute( $wgUser )
-                       ) {
-                               $pages[$name] = $page;
-                       }
-               }
-               return $pages;
-       }
-
-       /**
-        * Execute a special page path.
-        * The path may contain parameters, e.g. Special:Name/Params
-        * Extracts the special page name and call the execute method, passing the parameters
-        *
-        * Returns a title object if the page is redirected, false if there was no such special
-        * page, and true if it was successful.
-        *
-        * @param Title $title
-        * @param IContextSource $context
-        * @param bool $including Bool output is being captured for use in {{special:whatever}}
-        *
-        * @return bool
-        */
-       public static function executePath( Title &$title, IContextSource &$context, $including = false ) {
-               wfProfileIn( __METHOD__ );
-
-               // @todo FIXME: Redirects broken due to this call
-               $bits = explode( '/', $title->getDBkey(), 2 );
-               $name = $bits[0];
-               if ( !isset( $bits[1] ) ) { // bug 2087
-                       $par = null;
-               } else {
-                       $par = $bits[1];
-               }
-               $page = self::getPage( $name );
-               // Nonexistent?
-               if ( !$page ) {
-                       $context->getOutput()->setArticleRelated( false );
-                       $context->getOutput()->setRobotPolicy( 'noindex,nofollow' );
-
-                       global $wgSend404Code;
-                       if ( $wgSend404Code ) {
-                               $context->getOutput()->setStatusCode( 404 );
-                       }
-
-                       $context->getOutput()->showErrorPage( 'nosuchspecialpage', 'nospecialpagetext' );
-                       wfProfileOut( __METHOD__ );
-                       return false;
-               }
-
-               // Page exists, set the context
-               $page->setContext( $context );
-
-               if ( !$including ) {
-                       // Redirect to canonical alias for GET commands
-                       // Not for POST, we'd lose the post data, so it's best to just distribute
-                       // the request. Such POST requests are possible for old extensions that
-                       // generate self-links without being aware that their default name has
-                       // changed.
-                       if ( $name != $page->getLocalName() && !$context->getRequest()->wasPosted() ) {
-                               $query = $context->getRequest()->getQueryValues();
-                               unset( $query['title'] );
-                               $title = $page->getPageTitle( $par );
-                               $url = $title->getFullURL( $query );
-                               $context->getOutput()->redirect( $url );
-                               wfProfileOut( __METHOD__ );
-                               return $title;
-                       } else {
-                               $context->setTitle( $page->getPageTitle( $par ) );
-                       }
-
-               } elseif ( !$page->isIncludable() ) {
-                       wfProfileOut( __METHOD__ );
-                       return false;
-               }
-
-               $page->including( $including );
-
-               // Execute special page
-               $profName = 'Special:' . $page->getName();
-               wfProfileIn( $profName );
-               $page->run( $par );
-               wfProfileOut( $profName );
-               wfProfileOut( __METHOD__ );
-               return true;
-       }
-
-       /**
-        * Just like executePath() but will override global variables and execute
-        * the page in "inclusion" mode. Returns true if the execution was
-        * successful or false if there was no such special page, or a title object
-        * if it was a redirect.
-        *
-        * Also saves the current $wgTitle, $wgOut, $wgRequest, $wgUser and $wgLang
-        * variables so that the special page will get the context it'd expect on a
-        * normal request, and then restores them to their previous values after.
-        *
-        * @param Title $title
-        * @param IContextSource $context
-        * @return string HTML fragment
-        */
-       static function capturePath( Title $title, IContextSource $context ) {
-               global $wgOut, $wgTitle, $wgRequest, $wgUser, $wgLang;
-
-               // Save current globals
-               $oldTitle = $wgTitle;
-               $oldOut = $wgOut;
-               $oldRequest = $wgRequest;
-               $oldUser = $wgUser;
-               $oldLang = $wgLang;
-
-               // Set the globals to the current context
-               $wgTitle = $title;
-               $wgOut = $context->getOutput();
-               $wgRequest = $context->getRequest();
-               $wgUser = $context->getUser();
-               $wgLang = $context->getLanguage();
-
-               // The useful part
-               $ret = self::executePath( $title, $context, true );
-
-               // And restore the old globals
-               $wgTitle = $oldTitle;
-               $wgOut = $oldOut;
-               $wgRequest = $oldRequest;
-               $wgUser = $oldUser;
-               $wgLang = $oldLang;
-
-               return $ret;
-       }
-
-       /**
-        * Get the local name for a specified canonical name
-        *
-        * @param string $name
-        * @param string|bool $subpage
-        * @return string
-        */
-       static function getLocalNameFor( $name, $subpage = false ) {
-               global $wgContLang;
-               $aliases = $wgContLang->getSpecialPageAliases();
-
-               if ( isset( $aliases[$name][0] ) ) {
-                       $name = $aliases[$name][0];
-               } else {
-                       // Try harder in case someone misspelled the correct casing
-                       $found = false;
-                       foreach ( $aliases as $n => $values ) {
-                               if ( strcasecmp( $name, $n ) === 0 ) {
-                                       wfWarn( "Found alias defined for $n when searching for " .
-                                               "special page aliases for $name. Case mismatch?" );
-                                       $name = $values[0];
-                                       $found = true;
-                                       break;
-                               }
-                       }
-                       if ( !$found ) {
-                               wfWarn( "Did not find alias for special page '$name'. " .
-                                       "Perhaps no aliases are defined for it?" );
-                       }
-               }
-               if ( $subpage !== false && !is_null( $subpage ) ) {
-                       $name = "$name/$subpage";
-               }
-               return $wgContLang->ucfirst( $name );
-       }
-
-       /**
-        * Get a title for a given alias
-        *
-        * @param string $alias
-        * @return Title|null Title or null if there is no such alias
-        */
-       static function getTitleForAlias( $alias ) {
-               $name = self::resolveAlias( $alias );
-               if ( $name ) {
-                       return SpecialPage::getTitleFor( $name );
-               } else {
-                       return null;
-               }
-       }
-}
index 096a04d..f2de4b8 100644 (file)
@@ -2555,6 +2555,19 @@ class Title {
                return ( $sources > 0 );
        }
 
+       /**
+        * Determines whether cascading protection sources have already been loaded from
+        * the database.
+        *
+        * @param bool $getPages True to check if the pages are loaded, or false to check
+        * if the status is loaded.
+        * @return bool Whether or not the specified information has been loaded
+        * @since 1.23
+        */
+       public function areCascadeProtectionSourcesLoaded( $getPages = true ) {
+               return $getPages ? isset( $this->mCascadeSources ) : isset( $this->mHasCascadingRestrictions );
+       }
+
        /**
         * Cascading protection: Get the source of any cascading restrictions on this page.
         *
@@ -2655,6 +2668,17 @@ class Title {
                return array( $sources, $pagerestrictions );
        }
 
+       /**
+        * Accessor for mRestrictionsLoaded
+        *
+        * @return bool Whether or not the page's restrictions have already been
+        * loaded from the database
+        * @since 1.23
+        */
+       public function areRestrictionsLoaded() {
+               return $this->mRestrictionsLoaded;
+       }
+
        /**
         * Accessor/initialisation for mRestrictions
         *
@@ -2670,6 +2694,21 @@ class Title {
                                : array();
        }
 
+       /**
+        * Accessor/initialisation for mRestrictions
+        *
+        * @return Array of Arrays of Strings the first level indexed by
+        * action, the second level containing the names of the groups
+        * allowed to perform each action
+        * @since 1.23
+        */
+       public function getAllRestrictions() {
+               if ( !$this->mRestrictionsLoaded ) {
+                       $this->loadRestrictions();
+               }
+               return $this->mRestrictions;
+       }
+
        /**
         * Get the expiry time for the restriction against a given action
         *
diff --git a/includes/ZhClient.php b/includes/ZhClient.php
deleted file mode 100644 (file)
index c5955ae..0000000
+++ /dev/null
@@ -1,164 +0,0 @@
-<?php
-/**
- * Client for querying zhdaemon.
- *
- * 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
- */
-
-/**
- * Client for querying zhdaemon
- */
-class ZhClient {
-       var $mHost, $mPort, $mFP, $mConnected;
-
-       /**
-        * Constructor
-        *
-        * @param $host
-        * @param $port
-        *
-        * @return ZhClient
-        */
-       function __construct( $host, $port ) {
-               $this->mHost = $host;
-               $this->mPort = $port;
-               $this->mConnected = $this->connect();
-       }
-
-       /**
-        * Check if connection to zhdaemon is successful
-        *
-        * @return bool
-        */
-       function isconnected() {
-               return $this->mConnected;
-       }
-
-       /**
-        * Establish connection
-        *
-        * @access private
-        *
-        * @return bool
-        */
-       function connect() {
-               wfSuppressWarnings();
-               $errno = $errstr = '';
-               $this->mFP = fsockopen( $this->mHost, $this->mPort, $errno, $errstr, 30 );
-               wfRestoreWarnings();
-               return !$this->mFP;
-       }
-
-       /**
-        * Query the daemon and return the result
-        *
-        * @access private
-        *
-        * @return string
-        */
-       function query( $request ) {
-               if ( !$this->mConnected ) {
-                       return false;
-               }
-
-               fwrite( $this->mFP, $request );
-
-               $result = fgets( $this->mFP, 1024 );
-
-               list( $status, $len ) = explode( ' ', $result );
-               if ( $status == 'ERROR' ) {
-                       // $len is actually the error code...
-                       print "zhdaemon error $len<br />\n";
-                       return false;
-               }
-               $bytesread = 0;
-               $data = '';
-               while ( !feof( $this->mFP ) && $bytesread < $len ) {
-                       $str = fread( $this->mFP, $len - $bytesread );
-                       $bytesread += strlen( $str );
-                       $data .= $str;
-               }
-               // data should be of length $len. otherwise something is wrong
-               return strlen( $data ) == $len;
-       }
-
-       /**
-        * Convert the input to a different language variant
-        *
-        * @param string $text input text
-        * @param string $tolang language variant
-        * @return string the converted text
-        */
-       function convert( $text, $tolang ) {
-               $len = strlen( $text );
-               $q = "CONV $tolang $len\n$text";
-               $result = $this->query( $q );
-               if ( !$result ) {
-                       $result = $text;
-               }
-               return $result;
-       }
-
-       /**
-        * Convert the input to all possible variants
-        *
-        * @param string $text input text
-        * @return array langcode => converted_string
-        */
-       function convertToAllVariants( $text ) {
-               $len = strlen( $text );
-               $q = "CONV ALL $len\n$text";
-               $result = $this->query( $q );
-               if ( !$result ) {
-                       return false;
-               }
-               list( $infoline, $data ) = explode( '|', $result, 2 );
-               $info = explode( ';', $infoline );
-               $ret = array();
-               $i = 0;
-               foreach ( $info as $variant ) {
-                       list( $code, $len ) = explode( ' ', $variant );
-                       $ret[strtolower( $code )] = substr( $data, $i, $len );
-                       $i += $len;
-               }
-               return $ret;
-       }
-
-       /**
-        * Perform word segmentation
-        *
-        * @param string $text input text
-        * @return string segmented text
-        */
-       function segment( $text ) {
-               $len = strlen( $text );
-               $q = "SEG $len\n$text";
-               $result = $this->query( $q );
-               if ( !$result ) { // fallback to character based segmentation
-                       $result = $this->segment( $text );
-               }
-               return $result;
-       }
-
-       /**
-        * Close the connection
-        */
-       function close() {
-               fclose( $this->mFP );
-       }
-}
index 811e35d..a424b9d 100644 (file)
@@ -193,7 +193,7 @@ class InfoAction extends FormlessAction {
         * @return array
         */
        protected function pageInfo() {
-               global $wgContLang, $wgRCMaxAge, $wgMemc,
+               global $wgContLang, $wgRCMaxAge, $wgMemc, $wgMiserMode,
                        $wgUnwatchedPageThreshold, $wgPageInfoTransclusionLimit;
 
                $user = $this->getUser();
@@ -540,7 +540,11 @@ class InfoAction extends FormlessAction {
                ) {
                        $options = array( 'LIMIT' => $wgPageInfoTransclusionLimit );
                        $transcludedTemplates = $title->getTemplateLinksFrom( $options );
-                       $transcludedTargets = $title->getTemplateLinksTo( $options );
+                       if ( $wgMiserMode ) {
+                               $transcludedTargets = array();
+                       } else {
+                               $transcludedTargets = $title->getTemplateLinksTo( $options );
+                       }
 
                        // Page properties
                        $pageInfo['header-properties'] = array();
@@ -581,7 +585,7 @@ class InfoAction extends FormlessAction {
                                );
                        }
 
-                       if ( $pageCounts['transclusion']['to'] > 0 ) {
+                       if ( !$wgMiserMode && $pageCounts['transclusion']['to'] > 0 ) {
                                if ( $pageCounts['transclusion']['to'] > count( $transcludedTargets ) ) {
                                        $more = Linker::link(
                                                $whatLinksHere,
index 356fa3e..e4ce256 100644 (file)
@@ -299,18 +299,22 @@ class ApiQueryLogEvents extends ApiQueryBase {
 
                if ( $this->fld_ids ) {
                        $vals['logid'] = intval( $row->log_id );
-                       $vals['pageid'] = intval( $row->page_id );
                }
 
                if ( $this->fld_title || $this->fld_parsedcomment ) {
                        $title = Title::makeTitle( $row->log_namespace, $row->log_title );
                }
 
-               if ( $this->fld_title ) {
+               if ( $this->fld_title || $this->fld_ids ) {
                        if ( LogEventsList::isDeleted( $row, LogPage::DELETED_ACTION ) ) {
                                $vals['actionhidden'] = '';
                        } else {
-                               ApiQueryBase::addTitleInfo( $vals, $title );
+                               if ( $this->fld_title ) {
+                                       ApiQueryBase::addTitleInfo( $vals, $title );
+                               }
+                               if ( $this->fld_ids ) {
+                                       $vals['pageid'] = intval( $row->page_id );
+                               }
                        }
                }
 
index 0a74d98..dc76a2d 100644 (file)
@@ -253,6 +253,10 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                        $data['imagelimits'][$k] = array( 'width' => $limit[0], 'height' => $limit[1] );
                }
 
+               if ( !empty( $GLOBALS['wgFavicon'] ) ) {
+                       $data['favicon'] = $GLOBALS['wgFavicon'];
+               }
+
                wfRunHooks( 'APIQuerySiteInfoGeneralInfo', array( $this, &$data ) );
 
                return $this->getResult()->addValue( 'query', $property, $data );
index 42b112c..cc299a9 100644 (file)
@@ -223,7 +223,7 @@ class EnhancedChangesList extends ChangesList {
                if ( $block[0]->mAttribs['rc_log_type'] ) {
                        # Log entry
                        $classes[] = Sanitizer::escapeClass( 'mw-changeslist-log-'
-                               . $block[0]->mAttribs['rc_log_type'] . '-' . $block[0]->mAttribs['rc_title'] );
+                               . $block[0]->mAttribs['rc_log_type'] );
                } else {
                        $classes[] = Sanitizer::escapeClass( 'mw-changeslist-ns'
                                . $block[0]->mAttribs['rc_namespace'] . '-' . $block[0]->mAttribs['rc_title'] );
@@ -589,8 +589,7 @@ class EnhancedChangesList extends ChangesList {
                $classes = array( 'mw-enhanced-rc' );
                if ( $logType ) {
                        # Log entry
-                       $classes[] = Sanitizer::escapeClass( 'mw-changeslist-log-'
-                               . $logType . '-' . $rcObj->mAttribs['rc_title'] );
+                       $classes[] = Sanitizer::escapeClass( 'mw-changeslist-log-' . $logType );
                } else {
                        $classes[] = Sanitizer::escapeClass( 'mw-changeslist-ns' .
                                $rcObj->mAttribs['rc_namespace'] . '-' . $rcObj->mAttribs['rc_title'] );
index 6e87c40..90e658f 100644 (file)
@@ -249,7 +249,6 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
        protected $mForeign;
        protected $mErrorCount = 0;
        protected $mLBInfo = array();
-       protected $mFakeSlaveLag = null, $mFakeMaster = false;
        protected $mDefaultBigSelects = null;
        protected $mSchemaVars = false;
 
@@ -478,10 +477,11 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
        /**
         * Set lag time in seconds for a fake slave
         *
-        * @param int $lag
+        * @param mixed $lag Valid values for this parameter are determined by the
+        *   subclass, but should be a PHP scalar or array that would be sensible
+        *   as part of $wgLBFactoryConf.
         */
        public function setFakeSlaveLag( $lag ) {
-               $this->mFakeSlaveLag = $lag;
        }
 
        /**
@@ -490,7 +490,6 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
         * @param bool $enabled
         */
        public function setFakeMaster( $enabled = true ) {
-               $this->mFakeMaster = $enabled;
        }
 
        /**
@@ -3117,32 +3116,6 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
         *   zero if we timed out.
         */
        public function masterPosWait( DBMasterPos $pos, $timeout ) {
-               wfProfileIn( __METHOD__ );
-
-               if ( !is_null( $this->mFakeSlaveLag ) ) {
-                       $wait = intval( ( $pos->pos - microtime( true ) + $this->mFakeSlaveLag ) * 1e6 );
-
-                       if ( $wait > $timeout * 1e6 ) {
-                               wfDebug( "Fake slave timed out waiting for $pos ($wait us)\n" );
-                               wfProfileOut( __METHOD__ );
-
-                               return -1;
-                       } elseif ( $wait > 0 ) {
-                               wfDebug( "Fake slave waiting $wait us\n" );
-                               usleep( $wait );
-                               wfProfileOut( __METHOD__ );
-
-                               return 1;
-                       } else {
-                               wfDebug( "Fake slave up to date ($wait us)\n" );
-                               wfProfileOut( __METHOD__ );
-
-                               return 0;
-                       }
-               }
-
-               wfProfileOut( __METHOD__ );
-
                # Real waits are implemented in the subclass.
                return 0;
        }
@@ -3153,15 +3126,8 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
         * @return DBMasterPos|bool False if this is not a slave.
         */
        public function getSlavePos() {
-               if ( !is_null( $this->mFakeSlaveLag ) ) {
-                       $pos = new MySQLMasterPos( 'fake', microtime( true ) - $this->mFakeSlaveLag );
-                       wfDebug( __METHOD__ . ": fake slave pos = $pos\n" );
-
-                       return $pos;
-               } else {
-                       # Stub
-                       return false;
-               }
+               # Stub
+               return false;
        }
 
        /**
@@ -3170,11 +3136,8 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
         * @return DBMasterPos|bool False if this is not a master
         */
        public function getMasterPos() {
-               if ( $this->mFakeMaster ) {
-                       return new MySQLMasterPos( 'fake', microtime( true ) );
-               } else {
-                       return false;
-               }
+               # Stub
+               return false;
        }
 
        /**
@@ -3642,7 +3605,7 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
         * @return int Database replication lag in seconds
         */
        public function getLag() {
-               return intval( $this->mFakeSlaveLag );
+               return 0;
        }
 
        /**
index 8937089..9636da5 100644 (file)
@@ -783,7 +783,7 @@ class DatabaseMssql extends DatabaseBase {
         * @return string Wikitext of a link to the server software's web site
         */
        public function getSoftwareLink() {
-               return "[http://www.microsoft.com/sql/ MS SQL Server]";
+               return "[{{int:version-db-mssql-url}} MS SQL Server]";
        }
 
        /**
index 7bf247f..647a42a 100644 (file)
@@ -33,6 +33,11 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
        /** @var MysqlMasterPos */
        protected $lastKnownSlavePos;
 
+       /** @var null|int */
+       protected $mFakeSlaveLag = null;
+
+       protected $mFakeMaster = false;
+
        /**
         * @return string
         */
@@ -578,6 +583,24 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
         */
        abstract protected function mysqlPing();
 
+       /**
+        * Set lag time in seconds for a fake slave
+        *
+        * @param int $lag
+        */
+       public function setFakeSlaveLag( $lag ) {
+               $this->mFakeSlaveLag = $lag;
+       }
+
+       /**
+        * Make this connection a fake master
+        *
+        * @param bool $enabled
+        */
+       public function setFakeMaster( $enabled = true ) {
+               $this->mFakeMaster = $enabled;
+       }
+
        /**
         * Returns slave lag.
         *
@@ -661,7 +684,9 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
         *
         * @param DBMasterPos|MySQLMasterPos $pos
         * @param int $timeout The maximum number of seconds to wait for synchronisation
-        * @return bool|string
+        * @return int Zero if the slave was past that position already,
+        *   greater than zero if we waited for some period of time, less than
+        *   zero if we timed out.
         */
        function masterPosWait( DBMasterPos $pos, $timeout ) {
                if ( $this->lastKnownSlavePos && $this->lastKnownSlavePos->hasReached( $pos ) ) {
@@ -673,15 +698,30 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
                $this->commit( __METHOD__, 'flush' );
 
                if ( !is_null( $this->mFakeSlaveLag ) ) {
-                       $status = parent::masterPosWait( $pos, $timeout );
-                       wfProfileOut( __METHOD__ );
+                       $wait = intval( ( $pos->pos - microtime( true ) + $this->mFakeSlaveLag ) * 1e6 );
+
+                       if ( $wait > $timeout * 1e6 ) {
+                               wfDebug( "Fake slave timed out waiting for $pos ($wait us)\n" );
+                               wfProfileOut( __METHOD__ );
 
-                       return $status;
+                               return -1;
+                       } elseif ( $wait > 0 ) {
+                               wfDebug( "Fake slave waiting $wait us\n" );
+                               usleep( $wait );
+                               wfProfileOut( __METHOD__ );
+
+                               return 1;
+                       } else {
+                               wfDebug( "Fake slave up to date ($wait us)\n" );
+                               wfProfileOut( __METHOD__ );
+
+                               return 0;
+                       }
                }
 
                # Call doQuery() directly, to avoid opening a transaction if DBO_TRX is set
                $encFile = $this->addQuotes( $pos->file );
-               $encPos = intval( $pos->getMasterPos() );
+               $encPos = intval( $pos->pos );
                $sql = "SELECT MASTER_POS_WAIT($encFile, $encPos, $timeout)";
                $res = $this->doQuery( $sql );
 
@@ -705,7 +745,10 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
         */
        function getSlavePos() {
                if ( !is_null( $this->mFakeSlaveLag ) ) {
-                       return parent::getSlavePos();
+                       $pos = new MySQLMasterPos( 'fake', microtime( true ) - $this->mFakeSlaveLag );
+                       wfDebug( __METHOD__ . ": fake slave pos = $pos\n" );
+
+                       return $pos;
                }
 
                $res = $this->query( 'SHOW SLAVE STATUS', 'DatabaseBase::getSlavePos' );
@@ -729,7 +772,7 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
         */
        function getMasterPos() {
                if ( $this->mFakeMaster ) {
-                       return parent::getMasterPos();
+                       return new MySQLMasterPos( 'fake', microtime( true ) );
                }
 
                $res = $this->query( 'SHOW MASTER STATUS', 'DatabaseBase::getMasterPos' );
@@ -761,7 +804,14 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
         * @return string
         */
        public function getSoftwareLink() {
-               return '[http://www.mysql.com/ MySQL]';
+               $version = $this->getServerVersion();
+               if ( strpos( $version, 'MariaDB' ) !== 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]';
+               }
        }
 
        /**
@@ -1225,8 +1275,8 @@ class MySQLMasterPos implements DBMasterPos {
        /** @var string */
        public $file;
 
-       /** @var int */
-       private $pos;
+       /** @var int timestamp */
+       public $pos;
 
        function __construct( $file, $pos ) {
                $this->file = $file;
@@ -1256,11 +1306,4 @@ class MySQLMasterPos implements DBMasterPos {
 
                return ( $thisPos && $thatPos && $thisPos >= $thatPos );
        }
-
-       /**
-        * @return int
-        */
-       public function getMasterPos() {
-               return $this->pos;
-       }
 }
index b1a8f66..d304444 100644 (file)
@@ -972,7 +972,7 @@ class DatabaseOracle extends DatabaseBase {
         * @return string wikitext of a link to the server software's web site
         */
        public function getSoftwareLink() {
-               return '[http://www.oracle.com/ Oracle]';
+               return '[{{int:version-db-oracle-url}} Oracle]';
        }
 
        /**
@@ -1513,9 +1513,6 @@ class DatabaseOracle extends DatabaseBase {
                return 'BITOR(' . $fieldLeft . ', ' . $fieldRight . ')';
        }
 
-       function setFakeMaster( $enabled = true ) {
-       }
-
        function getDBname() {
                return $this->mDBname;
        }
index 9f96ccb..83d8cae 100644 (file)
@@ -819,6 +819,29 @@ __INDEXATTR__;
                return $res->numRows() > 0;
        }
 
+       /**
+        * Change the FOR UPDATE option as necessary based on the join conditions. Then pass
+        * to the parent function to get the actual SQL text.
+        *
+        * In Postgres when using FOR UPDATE, only the main table and tables that are inner joined
+        * can be locked. That means tables in an outer join cannot be FOR UPDATE locked. Trying to do
+        * so causes a DB error. This wrapper checks which tables can be locked and adjusts it accordingly.
+        */
+       function selectSQLText( $table, $vars, $conds = '', $fname = __METHOD__, $options = array(), $join_conds = array() ) {
+               $forUpdateKey = array_search( 'FOR UPDATE', $options );
+               if ( $forUpdateKey !== false && $join_conds ) {
+                       unset( $options[$forUpdateKey] );
+
+                       foreach ( $join_conds as $table => $join_cond ) {
+                               if ( 0 === preg_match( '/^(?:LEFT|RIGHT|FULL)(?: OUTER)? JOIN$/i', $join_cond[0] ) ) {
+                                       $options['FOR UPDATE'][] = $table;
+                               }
+                       }
+               }
+
+               return parent::selectSQLText( $table, $vars, $conds, $fname, $options, $join_conds );
+       }
+
        /**
         * INSERT wrapper, inserts an array into a table
         *
@@ -1176,7 +1199,7 @@ __INDEXATTR__;
         * @return string Wikitext of a link to the server software's web site
         */
        public function getSoftwareLink() {
-               return '[http://www.postgresql.org/ PostgreSQL]';
+               return '[{{int:version-db-postgres-url}} PostgreSQL]';
        }
 
        /**
@@ -1537,9 +1560,12 @@ SQL;
                //              : false );
                //}
 
-               if ( isset( $noKeyOptions['FOR UPDATE'] ) ) {
+               if ( isset( $options['FOR UPDATE'] ) ) {
+                       $postLimitTail .= ' FOR UPDATE OF ' . implode( ', ', $options['FOR UPDATE'] );
+               } else if ( isset( $noKeyOptions['FOR UPDATE'] ) ) {
                        $postLimitTail .= ' FOR UPDATE';
                }
+
                if ( isset( $noKeyOptions['DISTINCT'] ) || isset( $noKeyOptions['DISTINCTROW'] ) ) {
                        $startOpts .= 'DISTINCT';
                }
@@ -1547,9 +1573,6 @@ SQL;
                return array( $startOpts, $useIndex, $preLimitTail, $postLimitTail );
        }
 
-       function setFakeMaster( $enabled = true ) {
-       }
-
        function getDBname() {
                return $this->mDBname;
        }
index 5f14aef..5aaeb65 100644 (file)
@@ -663,7 +663,7 @@ class DatabaseSqlite extends DatabaseBase {
         * @return string wikitext of a link to the server software's web site
         */
        public function getSoftwareLink() {
-               return "[http://sqlite.org/ SQLite]";
+               return "[{{int:version-db-sqlite-url}} SQLite]";
        }
 
        /**
index 2b4b634..87687db 100644 (file)
@@ -326,12 +326,8 @@ class LikeMatch {
 
 /**
  * An object representing a master or slave position in a replicated setup.
+ *
+ * The implementation details of this opaque type are up to the database subclass.
  */
 interface DBMasterPos {
-       /**
-        * Return the master position.
-        *
-        * @return mixed Master position
-        */
-       public function getMasterPos();
 }
index 91df61b..b459b77 100644 (file)
@@ -638,7 +638,7 @@ class SwiftFileBackend extends FileBackendStore {
                list( $rcode, $rdesc, $rhdrs, $rbody, $rerr ) = $this->http->run( array(
                        'method'  => 'HEAD',
                        'url'     => $this->storageUrl( $auth, $srcCont, $srcRel ),
-                       'headers' => $this->authTokenHeaders( $auth )
+                       'headers' => $this->authTokenHeaders( $auth ) + $this->headersFromParams( $params )
                ) );
                if ( $rcode === 200 || $rcode === 204 ) {
                        // Update the object if it is missing some headers
@@ -1101,7 +1101,7 @@ class SwiftFileBackend extends FileBackendStore {
                                fclose( $op['stream'] ); // close open handle
                                if ( $rcode >= 200 && $rcode <= 299
                                        // double check that the disk is not full/broken
-                                       && $tmpFile->getSize() == $rhdrs['content-length']
+                                       && $tmpFiles[$path]->getSize() == $rhdrs['content-length']
                                ) {
                                        // good
                                } elseif ( $rcode === 404 ) {
@@ -1136,8 +1136,10 @@ class SwiftFileBackend extends FileBackendStore {
 
                        if ( $this->swiftTempUrlKey != '' ) {
                                $url = $this->storageUrl( $auth, $srcCont, $srcRel );
+                               // Swift wants the signature based on the unencoded object name
+                               $contPath = parse_url( $this->storageUrl( $auth, $srcCont ), PHP_URL_PATH );
                                $signature = hash_hmac( 'sha1',
-                                       "GET\n{$expires}\n" . parse_url( $url, PHP_URL_PATH ),
+                                       "GET\n{$expires}\n{$contPath}/{$srcRel}",
                                        $this->swiftTempUrlKey
                                );
                                return "{$url}?temp_url_sig={$signature}&temp_url_expires={$expires}";
@@ -1183,7 +1185,7 @@ class SwiftFileBackend extends FileBackendStore {
        protected function headersFromParams( array $params ) {
                $hdrs = array();
                if ( !empty( $params['latest'] ) ) {
-                       $hdrs[] = 'X-Newest: true';
+                       $hdrs['x-newest'] = 'true';
                }
 
                return $hdrs;
index cab5690..81529e7 100644 (file)
@@ -416,7 +416,7 @@ class FileRepo {
         *   ignoreRedirect: If true, do not follow file redirects
         *   private:        If true, return restricted (deleted) files if the current
         *                   user is allowed to view them. Otherwise, such files will not
-        *                   be found.
+        *                   be found. If a User object, use that user instead of the current.
         * @return File|bool False on failure
         */
        public function findFile( $title, $options = array() ) {
@@ -439,7 +439,11 @@ class FileRepo {
                        if ( $img && $img->exists() ) {
                                if ( !$img->isDeleted( File::DELETED_FILE ) ) {
                                        return $img; // always OK
-                               } elseif ( !empty( $options['private'] ) && $img->userCan( File::DELETED_FILE ) ) {
+                               } elseif ( !empty( $options['private'] ) &&
+                                       $img->userCan( File::DELETED_FILE,
+                                               $options['private'] instanceof User ? $options['private'] : null
+                                       )
+                               ) {
                                        return $img;
                                }
                        }
@@ -536,7 +540,11 @@ class FileRepo {
                        if ( $img && $img->exists() ) {
                                if ( !$img->isDeleted( File::DELETED_FILE ) ) {
                                        return $img; // always OK
-                               } elseif ( !empty( $options['private'] ) && $img->userCan( File::DELETED_FILE ) ) {
+                               } elseif ( !empty( $options['private'] ) &&
+                                       $img->userCan( File::DELETED_FILE,
+                                               $options['private'] instanceof User ? $options['private'] : null
+                                       )
+                               ) {
                                        return $img;
                                }
                        }
index c5346aa..99c0e09 100644 (file)
@@ -260,6 +260,9 @@ class LocalRepo extends FileRepo {
 
                $fileMatchesSearch = function( File $file, array $search ) {
                        // Note: file name comparison done elsewhere (to handle redirects)
+                       $user = ( !empty( $search['private'] ) && $search['private'] instanceof User )
+                               ? $search['private']
+                               : null;
                        return (
                                $file->exists() &&
                                (
@@ -267,7 +270,7 @@ class LocalRepo extends FileRepo {
                                        ( !empty( $search['time'] ) && $search['time'] === $file->getTimestamp() )
                                ) &&
                                ( !empty( $search['private'] ) || !$file->isDeleted( File::DELETED_FILE ) ) &&
-                               $file->userCan( File::DELETED_FILE )
+                               $file->userCan( File::DELETED_FILE, $user )
                        );
                };
 
@@ -315,11 +318,11 @@ class LocalRepo extends FileRepo {
                // Query old image table
                $oiConds = array(); // WHERE clause array for each file
                foreach ( $searchSet as $dbKey => $search ) {
-                       if ( isset( $search['params']['time'] ) ) {
+                       if ( isset( $search['time'] ) ) {
                                $oiConds[] = $dbr->makeList(
                                        array(
                                                'oi_name' => $this->getNameFromTitle( File::normalizeTitle( $dbKey ) ),
-                                               'oi_timestamp' => $dbr->timestamp( $search['params']['time'] )
+                                               'oi_timestamp' => $dbr->timestamp( $search['time'] )
                                        ),
                                        LIST_AND
                                );
index 68dd216..3ba91d4 100644 (file)
@@ -100,9 +100,8 @@ You should [//www.mediawiki.org/wiki/Unicode_normalization_considerations upgrad
        'config-no-db'                    => 'Could not find a suitable database driver! You need to install a database driver for PHP.
 The following database types are supported: $1.
 
-If you are on shared hosting, ask your hosting provider to install a suitable database driver.
-If you compiled PHP yourself, reconfigure it with a database client enabled, for example using <code>./configure --with-mysql</code>.
-If you installed PHP from a Debian or Ubuntu package, then you also need install the php5-mysql module.',
+If you compiled PHP yourself, reconfigure it with a database client enabled, for example, using <code>./configure --with-mysqli</code>.
+If you installed PHP from a Debian or Ubuntu package, then you also need to install, for example, the <code>php5-mysql</code> package.',
        'config-outdated-sqlite'          => "'''Warning:''' you have SQLite $1, which is lower than minimum required version $2. SQLite will be unavailable.",
        'config-no-fts3'                  => "'''Warning:''' SQLite is compiled without the [//sqlite.org/fts3.html FTS3 module], search features will be unavailable on this backend.",
        'config-register-globals'         => "'''Warning: PHP's <code>[http://php.net/register_globals register_globals]</code> option is enabled.'''
@@ -243,7 +242,7 @@ That includes raw user data (email addresses, hashed passwords) as well as delet
 Consider putting the database somewhere else altogether, for example in <code>/var/lib/mediawiki/yourwiki</code>.",
        'config-oracle-def-ts'            => 'Default tablespace:',
        'config-oracle-temp-ts'           => 'Temporary tablespace:',
-       'config-type-mysql'               => 'MySQL',
+       'config-type-mysql'               => 'MySQL (or compatible)',
        'config-type-postgres'            => 'PostgreSQL',
        'config-type-sqlite'              => 'SQLite',
        'config-type-oracle'              => 'Oracle',
@@ -252,10 +251,10 @@ Consider putting the database somewhere else altogether, for example in <code>/v
 $1
 
 If you do not see the database system you are trying to use listed below, then follow the instructions linked above to enable support.',
-       'config-support-mysql'            => '* $1 is the primary target for MediaWiki and is best supported ([http://www.php.net/manual/en/mysql.installation.php how to compile PHP with MySQL support])',
-       'config-support-postgres'         => '* $1 is a popular open source database system as an alternative to MySQL ([http://www.php.net/manual/en/pgsql.installation.php how to compile PHP with PostgreSQL support]). There may be some minor outstanding bugs, and it is not recommended for use in a production environment.',
-       'config-support-sqlite'           => '* $1 is a lightweight database system which is very well supported. ([http://www.php.net/manual/en/pdo.installation.php How to compile PHP with SQLite support], uses PDO)',
-       'config-support-oracle'           => '* $1 is a commercial enterprise database. ([http://www.php.net/manual/en/oci8.installation.php How to compile PHP with OCI8 support])',
+       'config-dbsupport-mysql'          => '* [{{int:version-db-mysql-url}} MySQL] is the primary target for MediaWiki and is best supported. MediaWiki also works with [{{int:version-db-mariadb-url}} MariaDB] and [{{int:version-db-percona-url}} Percona Server], which are MySQL compatible. ([http://www.php.net/manual/en/mysqli.installation.php How to compile PHP with MySQL support])',
+       'config-dbsupport-postgres'       => '* [{{int:version-db-postgres-url}} PostgreSQL] is a popular open source database system as an alternative to MySQL. There may be some minor outstanding bugs, and it is not recommended for use in a production environment. ([http://www.php.net/manual/en/pgsql.installation.php How to compile PHP with PostgreSQL support])',
+       'config-dbsupport-sqlite'         => '* [{{int:version-db-sqlite-url}} SQLite] is a lightweight database system that is very well supported. ([http://www.php.net/manual/en/pdo.installation.php How to compile PHP with SQLite support], uses PDO)',
+       'config-dbsupport-oracle'         => '* [{{int:version-db-oracle-url}} Oracle] is a commercial enterprise database. ([http://www.php.net/manual/en/oci8.installation.php How to compile PHP with OCI8 support])',
        'config-header-mysql'             => 'MySQL settings',
        'config-header-postgres'          => 'PostgreSQL settings',
        'config-header-sqlite'            => 'SQLite settings',
@@ -640,7 +639,7 @@ See also:
 * {{msg-mw|config-env-php}}',
        'config-unicode-pure-php-warning' => 'PECL is the name of a group producing standard pieces of software for PHP, and intl is the name of their library handling some aspects of internationalization.',
        'config-unicode-update-warning' => "ICU is a body producing standard software tools for support of Unicode and other internationalization aspects. This message warns the system administrator installing MediaWiki that the server's software is not up-to-date and MediaWiki will have problems handling some characters.",
-       'config-no-db' => '{{doc-important|Do not translate "<code>./configure --with-mysql</code>" and "<code>php5-mysql</code>".}}
+       'config-no-db' => '{{doc-important|Do not translate "<code>./configure --with-mysqli</code>" and "<code>php5-mysql</code>".}}
 Parameters:
 * $1 is comma separated list of database types supported by MediaWiki.',
        'config-outdated-sqlite' => 'Used as warning. Parameters:
@@ -704,12 +703,12 @@ Message shown when PHP parameter <code>suhosin.get.max_value_length</code> is be
 * $2 - error message',
        'config-sqlite-dir-help' => '{{doc-important|Do not translate <code>.htaccess</code> and <code>/var/lib/mediawiki/yourwiki</code>.}}
 Used in help box.',
-       'config-type-mysql' => '{{optional}}',
+       'config-type-mysql' => '"Or compatible" refers to several database systems that are compatible with MySQL, as explained in {{msg-mw|config-dbsupport-mysql}}, and thus also work with this choice of database type.',
        'config-type-postgres' => '{{optional}}',
        'config-type-sqlite' => '{{optional}}',
        'config-type-oracle' => '{{optional}}',
        'config-support-info' => 'Parameters:
-* $1 - a list of DBMSs that MediaWiki supports, composed with other config-type-* and config-support-* messages.',
+* $1 - a list of DBMSs that MediaWiki supports, composed with config-dbsupport-* messages.',
        'config-support-mysql' => 'Parameters:
 * $1 - a link to the MySQL home page having the anchor text "MySQL".',
        'config-support-postgres' => 'Parameters:
@@ -718,6 +717,10 @@ Used in help box.',
 * $1 - a link to the SQLite home page having the anchor text "SQLite".',
        'config-support-oracle' => 'Parameters:
 * $1 - a link to the Oracle home page, the anchor text of which is "Oracle".',
+       'config-dbsupport-mysql' => 'Used in {{msg-mw|config-support-info}}.',
+       'config-dbsupport-postgres' => 'Used in {{msg-mw|config-support-info}}.',
+       'config-dbsupport-sqlite' => 'Used in {{msg-mw|config-support-info}}.',
+       'config-dbsupport-oracle' => 'Used in {{msg-mw|config-support-info}}.',
        'config-invalid-db-server-oracle' => 'Used as error message. Parameters:
 * $1 - database server name
 See also:
index aa324de..d4b3d65 100644 (file)
@@ -481,12 +481,11 @@ class WebInstaller_DBConnect extends WebInstallerPage {
                $settings = '';
                $defaultType = $this->getVar( 'wgDBtype' );
 
-               // Messages: config-support-mysql, config-support-postgres, config-support-oracle,
-               // config-support-sqlite
+               // Messages: config-dbsupport-mysql, config-dbsupport-postgres, config-dbsupport-oracle,
+               // config-dbsupport-sqlite
                $dbSupport = '';
-               foreach ( $this->parent->getDBTypes() as $type ) {
-                       $link = DatabaseBase::factory( $type )->getSoftwareLink();
-                       $dbSupport .= wfMessage( "config-support-$type", $link )->plain() . "\n";
+               foreach ( Installer::getDBTypes() as $type ) {
+                       $dbSupport .= wfMessage( "config-dbsupport-$type" )->plain() . "\n";
                }
                $this->addHTML( $this->parent->getInfoBox(
                        wfMessage( 'config-support-info', trim( $dbSupport ) )->text() ) );
index 92ca7d8..eb98a4a 100644 (file)
@@ -39,6 +39,13 @@ class XmlTypeCheck {
         */
        public $rootElement = '';
 
+       /**
+        * Additional parsing options
+        */
+       private $parserOptions = array(
+               'processing_instruction_handler' => '',
+       );
+
        /**
         * @param string $input a filename or string containing the XML element
         * @param callable $filterCallback (optional)
@@ -48,9 +55,13 @@ class XmlTypeCheck {
         *        Filter should return 'true' to toggle on $this->filterMatch
         * @param boolean $isFile (optional) indicates if the first parameter is a
         *        filename (default, true) or if it is a string (false)
+        * @param array $options list of additional parsing options:
+        *        processing_instruction_handler: Callback for xml_set_processing_instruction_handler
         */
-       function __construct( $input, $filterCallback = null, $isFile = true ) {
+       function __construct( $input, $filterCallback = null, $isFile = true, $options = array() ) {
                $this->filterCallback = $filterCallback;
+               $this->parserOptions = array_merge( $this->parserOptions, $options );
+
                if ( $isFile ) {
                        $this->validateFromFile( $input );
                } else {
@@ -107,6 +118,12 @@ class XmlTypeCheck {
                // case folding violates XML standard, turn it off
                xml_parser_set_option( $parser, XML_OPTION_CASE_FOLDING, false );
                xml_set_element_handler( $parser, array( $this, 'rootElementOpen' ), false );
+               if ( $this->parserOptions['processing_instruction_handler'] ) {
+                       xml_set_processing_instruction_handler(
+                               $parser,
+                               array( $this, 'processingInstructionHandler' )
+                       );
+               }
                return $parser;
        }
 
@@ -181,4 +198,16 @@ class XmlTypeCheck {
                        $this->filterMatch = true;
                }
        }
+
+       /**
+        * @param $parser
+        * @param $target
+        * @param $data
+        */
+       private function processingInstructionHandler( $parser, $target, $data ) {
+               if ( call_user_func( $this->parserOptions['processing_instruction_handler'], $target, $data ) ) {
+                       // Filter hit!
+                       $this->filterMatch = true;
+               }
+       }
 }
diff --git a/includes/normal/.gitignore b/includes/normal/.gitignore
new file mode 100644 (file)
index 0000000..0dea457
--- /dev/null
@@ -0,0 +1,7 @@
+/CompositionExclusions.txt
+/DerivedNormalizationProps.txt
+/NormalizationCorrections.txt
+/NormalizationTest.txt
+/UTF-8-test.txt
+/UnicodeData.txt
+/testdata
index 66348ee..76cb68b 100644 (file)
@@ -16,14 +16,11 @@ PHP=php
 FETCH=wget
 #FETCH=fetch
 
-all : UtfNormalData.inc Utf8Case.php
+all : UtfNormalData.inc
 
 UtfNormalData.inc : UtfNormalGenerate.php UtfNormalUtil.php UnicodeData.txt CompositionExclusions.txt NormalizationCorrections.txt DerivedNormalizationProps.txt
        $(PHP) UtfNormalGenerate.php
 
-Utf8Case.php : Utf8CaseGenerate.php UtfNormalUtil.php UnicodeData.txt
-       $(PHP) Utf8CaseGenerate.php
-
 test : testutf8 UtfNormalTest.php UtfNormalData.inc NormalizationTest.txt
        $(PHP) UtfNormalTest.php
 
diff --git a/includes/normal/Utf8Case.php b/includes/normal/Utf8Case.php
deleted file mode 100644 (file)
index abc56e4..0000000
+++ /dev/null
@@ -1,2109 +0,0 @@
-<?php
-/**
- * Simple 1:1 upper/lowercase switching arrays for utf-8 text.
- * Won't get context-sensitive things yet.
- *
- * Hack for bugs in ucfirst() and company
- *
- * These are pulled from memcached if possible, as this is faster than filling
- * up a big array manually.
- *
- * @file
- * @ingroup Language
- */
-
-/**
- * Translation array to get upper case character
- */
-$wikiUpperChars = array(
-       'a' => 'A',
-       'b' => 'B',
-       'c' => 'C',
-       'd' => 'D',
-       'e' => 'E',
-       'f' => 'F',
-       'g' => 'G',
-       'h' => 'H',
-       'i' => 'I',
-       'j' => 'J',
-       'k' => 'K',
-       'l' => 'L',
-       'm' => 'M',
-       'n' => 'N',
-       'o' => 'O',
-       'p' => 'P',
-       'q' => 'Q',
-       'r' => 'R',
-       's' => 'S',
-       't' => 'T',
-       'u' => 'U',
-       'v' => 'V',
-       'w' => 'W',
-       'x' => 'X',
-       'y' => 'Y',
-       'z' => 'Z',
-       'µ' => 'Μ',
-       'à' => 'À',
-       'á' => 'Á',
-       'â' => 'Â',
-       'ã' => 'Ã',
-       'ä' => 'Ä',
-       'å' => 'Å',
-       'æ' => 'Æ',
-       'ç' => 'Ç',
-       'è' => 'È',
-       'é' => 'É',
-       'ê' => 'Ê',
-       'ë' => 'Ë',
-       'ì' => 'Ì',
-       'í' => 'Í',
-       'î' => 'Î',
-       'ï' => 'Ï',
-       'ð' => 'Ð',
-       'ñ' => 'Ñ',
-       'ò' => 'Ò',
-       'ó' => 'Ó',
-       'ô' => 'Ô',
-       'õ' => 'Õ',
-       'ö' => 'Ö',
-       'ø' => 'Ø',
-       'ù' => 'Ù',
-       'ú' => 'Ú',
-       'û' => 'Û',
-       'ü' => 'Ü',
-       'ý' => 'Ý',
-       'þ' => 'Þ',
-       'ÿ' => 'Ÿ',
-       'ā' => 'Ā',
-       'ă' => 'Ă',
-       'ą' => 'Ą',
-       'ć' => 'Ć',
-       'ĉ' => 'Ĉ',
-       'ċ' => 'Ċ',
-       'č' => 'Č',
-       'ď' => 'Ď',
-       'đ' => 'Đ',
-       'ē' => 'Ē',
-       'ĕ' => 'Ĕ',
-       'ė' => 'Ė',
-       'ę' => 'Ę',
-       'ě' => 'Ě',
-       'ĝ' => 'Ĝ',
-       'ğ' => 'Ğ',
-       'ġ' => 'Ġ',
-       'ģ' => 'Ģ',
-       'ĥ' => 'Ĥ',
-       'ħ' => 'Ħ',
-       'ĩ' => 'Ĩ',
-       'ī' => 'Ī',
-       'ĭ' => 'Ĭ',
-       'į' => 'Į',
-       'ı' => 'I',
-       'ij' => 'IJ',
-       'ĵ' => 'Ĵ',
-       'ķ' => 'Ķ',
-       'ĺ' => 'Ĺ',
-       'ļ' => 'Ļ',
-       'ľ' => 'Ľ',
-       'ŀ' => 'Ŀ',
-       'ł' => 'Ł',
-       'ń' => 'Ń',
-       'ņ' => 'Ņ',
-       'ň' => 'Ň',
-       'ŋ' => 'Ŋ',
-       'ō' => 'Ō',
-       'ŏ' => 'Ŏ',
-       'ő' => 'Ő',
-       'œ' => 'Œ',
-       'ŕ' => 'Ŕ',
-       'ŗ' => 'Ŗ',
-       'ř' => 'Ř',
-       'ś' => 'Ś',
-       'ŝ' => 'Ŝ',
-       'ş' => 'Ş',
-       'š' => 'Š',
-       'ţ' => 'Ţ',
-       'ť' => 'Ť',
-       'ŧ' => 'Ŧ',
-       'ũ' => 'Ũ',
-       'ū' => 'Ū',
-       'ŭ' => 'Ŭ',
-       'ů' => 'Ů',
-       'ű' => 'Ű',
-       'ų' => 'Ų',
-       'ŵ' => 'Ŵ',
-       'ŷ' => 'Ŷ',
-       'ź' => 'Ź',
-       'ż' => 'Ż',
-       'ž' => 'Ž',
-       'ſ' => 'S',
-       'ƀ' => 'Ƀ',
-       'ƃ' => 'Ƃ',
-       'ƅ' => 'Ƅ',
-       'ƈ' => 'Ƈ',
-       'ƌ' => 'Ƌ',
-       'ƒ' => 'Ƒ',
-       'ƕ' => 'Ƕ',
-       'ƙ' => 'Ƙ',
-       'ƚ' => 'Ƚ',
-       'ƞ' => 'Ƞ',
-       'ơ' => 'Ơ',
-       'ƣ' => 'Ƣ',
-       'ƥ' => 'Ƥ',
-       'ƨ' => 'Ƨ',
-       'ƭ' => 'Ƭ',
-       'ư' => 'Ư',
-       'ƴ' => 'Ƴ',
-       'ƶ' => 'Ƶ',
-       'ƹ' => 'Ƹ',
-       'ƽ' => 'Ƽ',
-       'ƿ' => 'Ƿ',
-       'Dž' => 'DŽ',
-       'dž' => 'DŽ',
-       'Lj' => 'LJ',
-       'lj' => 'LJ',
-       'Nj' => 'NJ',
-       'nj' => 'NJ',
-       'ǎ' => 'Ǎ',
-       'ǐ' => 'Ǐ',
-       'ǒ' => 'Ǒ',
-       'ǔ' => 'Ǔ',
-       'ǖ' => 'Ǖ',
-       'ǘ' => 'Ǘ',
-       'ǚ' => 'Ǚ',
-       'ǜ' => 'Ǜ',
-       'ǝ' => 'Ǝ',
-       'ǟ' => 'Ǟ',
-       'ǡ' => 'Ǡ',
-       'ǣ' => 'Ǣ',
-       'ǥ' => 'Ǥ',
-       'ǧ' => 'Ǧ',
-       'ǩ' => 'Ǩ',
-       'ǫ' => 'Ǫ',
-       'ǭ' => 'Ǭ',
-       'ǯ' => 'Ǯ',
-       'Dz' => 'DZ',
-       'dz' => 'DZ',
-       'ǵ' => 'Ǵ',
-       'ǹ' => 'Ǹ',
-       'ǻ' => 'Ǻ',
-       'ǽ' => 'Ǽ',
-       'ǿ' => 'Ǿ',
-       'ȁ' => 'Ȁ',
-       'ȃ' => 'Ȃ',
-       'ȅ' => 'Ȅ',
-       'ȇ' => 'Ȇ',
-       'ȉ' => 'Ȉ',
-       'ȋ' => 'Ȋ',
-       'ȍ' => 'Ȍ',
-       'ȏ' => 'Ȏ',
-       'ȑ' => 'Ȑ',
-       'ȓ' => 'Ȓ',
-       'ȕ' => 'Ȕ',
-       'ȗ' => 'Ȗ',
-       'ș' => 'Ș',
-       'ț' => 'Ț',
-       'ȝ' => 'Ȝ',
-       'ȟ' => 'Ȟ',
-       'ȣ' => 'Ȣ',
-       'ȥ' => 'Ȥ',
-       'ȧ' => 'Ȧ',
-       'ȩ' => 'Ȩ',
-       'ȫ' => 'Ȫ',
-       'ȭ' => 'Ȭ',
-       'ȯ' => 'Ȯ',
-       'ȱ' => 'Ȱ',
-       'ȳ' => 'Ȳ',
-       'ȼ' => 'Ȼ',
-       'ȿ' => 'Ȿ',
-       'ɀ' => 'Ɀ',
-       'ɂ' => 'Ɂ',
-       'ɇ' => 'Ɇ',
-       'ɉ' => 'Ɉ',
-       'ɋ' => 'Ɋ',
-       'ɍ' => 'Ɍ',
-       'ɏ' => 'Ɏ',
-       'ɐ' => 'Ɐ',
-       'ɑ' => 'Ɑ',
-       'ɒ' => 'Ɒ',
-       'ɓ' => 'Ɓ',
-       'ɔ' => 'Ɔ',
-       'ɖ' => 'Ɖ',
-       'ɗ' => 'Ɗ',
-       'ə' => 'Ə',
-       'ɛ' => 'Ɛ',
-       'ɠ' => 'Ɠ',
-       'ɣ' => 'Ɣ',
-       'ɥ' => 'Ɥ',
-       'ɨ' => 'Ɨ',
-       'ɩ' => 'Ɩ',
-       'ɫ' => 'Ɫ',
-       'ɯ' => 'Ɯ',
-       'ɱ' => 'Ɱ',
-       'ɲ' => 'Ɲ',
-       'ɵ' => 'Ɵ',
-       'ɽ' => 'Ɽ',
-       'ʀ' => 'Ʀ',
-       'ʃ' => 'Ʃ',
-       'ʈ' => 'Ʈ',
-       'ʉ' => 'Ʉ',
-       'ʊ' => 'Ʊ',
-       'ʋ' => 'Ʋ',
-       'ʌ' => 'Ʌ',
-       'ʒ' => 'Ʒ',
-       'ͅ' => 'Ι',
-       'ͱ' => 'Ͱ',
-       'ͳ' => 'Ͳ',
-       'ͷ' => 'Ͷ',
-       'ͻ' => 'Ͻ',
-       'ͼ' => 'Ͼ',
-       'ͽ' => 'Ͽ',
-       'ά' => 'Ά',
-       'έ' => 'Έ',
-       'ή' => 'Ή',
-       'ί' => 'Ί',
-       'α' => 'Α',
-       'β' => 'Β',
-       'γ' => 'Γ',
-       'δ' => 'Δ',
-       'ε' => 'Ε',
-       'ζ' => 'Ζ',
-       'η' => 'Η',
-       'θ' => 'Θ',
-       'ι' => 'Ι',
-       'κ' => 'Κ',
-       'λ' => 'Λ',
-       'μ' => 'Μ',
-       'ν' => 'Ν',
-       'ξ' => 'Ξ',
-       'ο' => 'Ο',
-       'π' => 'Π',
-       'ρ' => 'Ρ',
-       'ς' => 'Σ',
-       'σ' => 'Σ',
-       'τ' => 'Τ',
-       'υ' => 'Υ',
-       'φ' => 'Φ',
-       'χ' => 'Χ',
-       'ψ' => 'Ψ',
-       'ω' => 'Ω',
-       'ϊ' => 'Ϊ',
-       'ϋ' => 'Ϋ',
-       'ό' => 'Ό',
-       'ύ' => 'Ύ',
-       'ώ' => 'Ώ',
-       'ϐ' => 'Β',
-       'ϑ' => 'Θ',
-       'ϕ' => 'Φ',
-       'ϖ' => 'Π',
-       'ϗ' => 'Ϗ',
-       'ϙ' => 'Ϙ',
-       'ϛ' => 'Ϛ',
-       'ϝ' => 'Ϝ',
-       'ϟ' => 'Ϟ',
-       'ϡ' => 'Ϡ',
-       'ϣ' => 'Ϣ',
-       'ϥ' => 'Ϥ',
-       'ϧ' => 'Ϧ',
-       'ϩ' => 'Ϩ',
-       'ϫ' => 'Ϫ',
-       'ϭ' => 'Ϭ',
-       'ϯ' => 'Ϯ',
-       'ϰ' => 'Κ',
-       'ϱ' => 'Ρ',
-       'ϲ' => 'Ϲ',
-       'ϵ' => 'Ε',
-       'ϸ' => 'Ϸ',
-       'ϻ' => 'Ϻ',
-       'а' => 'А',
-       'б' => 'Б',
-       'в' => 'В',
-       'г' => 'Г',
-       'д' => 'Д',
-       'е' => 'Е',
-       'ж' => 'Ж',
-       'з' => 'З',
-       'и' => 'И',
-       'й' => 'Й',
-       'к' => 'К',
-       'л' => 'Л',
-       'м' => 'М',
-       'н' => 'Н',
-       'о' => 'О',
-       'п' => 'П',
-       'р' => 'Р',
-       'с' => 'С',
-       'т' => 'Т',
-       'у' => 'У',
-       'ф' => 'Ф',
-       'х' => 'Х',
-       'ц' => 'Ц',
-       'ч' => 'Ч',
-       'ш' => 'Ш',
-       'щ' => 'Щ',
-       'ъ' => 'Ъ',
-       'ы' => 'Ы',
-       'ь' => 'Ь',
-       'э' => 'Э',
-       'ю' => 'Ю',
-       'я' => 'Я',
-       'ѐ' => 'Ѐ',
-       'ё' => 'Ё',
-       'ђ' => 'Ђ',
-       'ѓ' => 'Ѓ',
-       'є' => 'Є',
-       'ѕ' => 'Ѕ',
-       'і' => 'І',
-       'ї' => 'Ї',
-       'ј' => 'Ј',
-       'љ' => 'Љ',
-       'њ' => 'Њ',
-       'ћ' => 'Ћ',
-       'ќ' => 'Ќ',
-       'ѝ' => 'Ѝ',
-       'ў' => 'Ў',
-       'џ' => 'Џ',
-       'ѡ' => 'Ѡ',
-       'ѣ' => 'Ѣ',
-       'ѥ' => 'Ѥ',
-       'ѧ' => 'Ѧ',
-       'ѩ' => 'Ѩ',
-       'ѫ' => 'Ѫ',
-       'ѭ' => 'Ѭ',
-       'ѯ' => 'Ѯ',
-       'ѱ' => 'Ѱ',
-       'ѳ' => 'Ѳ',
-       'ѵ' => 'Ѵ',
-       'ѷ' => 'Ѷ',
-       'ѹ' => 'Ѹ',
-       'ѻ' => 'Ѻ',
-       'ѽ' => 'Ѽ',
-       'ѿ' => 'Ѿ',
-       'ҁ' => 'Ҁ',
-       'ҋ' => 'Ҋ',
-       'ҍ' => 'Ҍ',
-       'ҏ' => 'Ҏ',
-       'ґ' => 'Ґ',
-       'ғ' => 'Ғ',
-       'ҕ' => 'Ҕ',
-       'җ' => 'Җ',
-       'ҙ' => 'Ҙ',
-       'қ' => 'Қ',
-       'ҝ' => 'Ҝ',
-       'ҟ' => 'Ҟ',
-       'ҡ' => 'Ҡ',
-       'ң' => 'Ң',
-       'ҥ' => 'Ҥ',
-       'ҧ' => 'Ҧ',
-       'ҩ' => 'Ҩ',
-       'ҫ' => 'Ҫ',
-       'ҭ' => 'Ҭ',
-       'ү' => 'Ү',
-       'ұ' => 'Ұ',
-       'ҳ' => 'Ҳ',
-       'ҵ' => 'Ҵ',
-       'ҷ' => 'Ҷ',
-       'ҹ' => 'Ҹ',
-       'һ' => 'Һ',
-       'ҽ' => 'Ҽ',
-       'ҿ' => 'Ҿ',
-       'ӂ' => 'Ӂ',
-       'ӄ' => 'Ӄ',
-       'ӆ' => 'Ӆ',
-       'ӈ' => 'Ӈ',
-       'ӊ' => 'Ӊ',
-       'ӌ' => 'Ӌ',
-       'ӎ' => 'Ӎ',
-       'ӏ' => 'Ӏ',
-       'ӑ' => 'Ӑ',
-       'ӓ' => 'Ӓ',
-       'ӕ' => 'Ӕ',
-       'ӗ' => 'Ӗ',
-       'ә' => 'Ә',
-       'ӛ' => 'Ӛ',
-       'ӝ' => 'Ӝ',
-       'ӟ' => 'Ӟ',
-       'ӡ' => 'Ӡ',
-       'ӣ' => 'Ӣ',
-       'ӥ' => 'Ӥ',
-       'ӧ' => 'Ӧ',
-       'ө' => 'Ө',
-       'ӫ' => 'Ӫ',
-       'ӭ' => 'Ӭ',
-       'ӯ' => 'Ӯ',
-       'ӱ' => 'Ӱ',
-       'ӳ' => 'Ӳ',
-       'ӵ' => 'Ӵ',
-       'ӷ' => 'Ӷ',
-       'ӹ' => 'Ӹ',
-       'ӻ' => 'Ӻ',
-       'ӽ' => 'Ӽ',
-       'ӿ' => 'Ӿ',
-       'ԁ' => 'Ԁ',
-       'ԃ' => 'Ԃ',
-       'ԅ' => 'Ԅ',
-       'ԇ' => 'Ԇ',
-       'ԉ' => 'Ԉ',
-       'ԋ' => 'Ԋ',
-       'ԍ' => 'Ԍ',
-       'ԏ' => 'Ԏ',
-       'ԑ' => 'Ԑ',
-       'ԓ' => 'Ԓ',
-       'ԕ' => 'Ԕ',
-       'ԗ' => 'Ԗ',
-       'ԙ' => 'Ԙ',
-       'ԛ' => 'Ԛ',
-       'ԝ' => 'Ԝ',
-       'ԟ' => 'Ԟ',
-       'ԡ' => 'Ԡ',
-       'ԣ' => 'Ԣ',
-       'ԥ' => 'Ԥ',
-       'ԧ' => 'Ԧ',
-       'ա' => 'Ա',
-       'բ' => 'Բ',
-       'գ' => 'Գ',
-       'դ' => 'Դ',
-       'ե' => 'Ե',
-       'զ' => 'Զ',
-       'է' => 'Է',
-       'ը' => 'Ը',
-       'թ' => 'Թ',
-       'ժ' => 'Ժ',
-       'ի' => 'Ի',
-       'լ' => 'Լ',
-       'խ' => 'Խ',
-       'ծ' => 'Ծ',
-       'կ' => 'Կ',
-       'հ' => 'Հ',
-       'ձ' => 'Ձ',
-       'ղ' => 'Ղ',
-       'ճ' => 'Ճ',
-       'մ' => 'Մ',
-       'յ' => 'Յ',
-       'ն' => 'Ն',
-       'շ' => 'Շ',
-       'ո' => 'Ո',
-       'չ' => 'Չ',
-       'պ' => 'Պ',
-       'ջ' => 'Ջ',
-       'ռ' => 'Ռ',
-       'ս' => 'Ս',
-       'վ' => 'Վ',
-       'տ' => 'Տ',
-       'ր' => 'Ր',
-       'ց' => 'Ց',
-       'ւ' => 'Ւ',
-       'փ' => 'Փ',
-       'ք' => 'Ք',
-       'օ' => 'Օ',
-       'ֆ' => 'Ֆ',
-       'ᵹ' => 'Ᵹ',
-       'ᵽ' => 'Ᵽ',
-       'ḁ' => 'Ḁ',
-       'ḃ' => 'Ḃ',
-       'ḅ' => 'Ḅ',
-       'ḇ' => 'Ḇ',
-       'ḉ' => 'Ḉ',
-       'ḋ' => 'Ḋ',
-       'ḍ' => 'Ḍ',
-       'ḏ' => 'Ḏ',
-       'ḑ' => 'Ḑ',
-       'ḓ' => 'Ḓ',
-       'ḕ' => 'Ḕ',
-       'ḗ' => 'Ḗ',
-       'ḙ' => 'Ḙ',
-       'ḛ' => 'Ḛ',
-       'ḝ' => 'Ḝ',
-       'ḟ' => 'Ḟ',
-       'ḡ' => 'Ḡ',
-       'ḣ' => 'Ḣ',
-       'ḥ' => 'Ḥ',
-       'ḧ' => 'Ḧ',
-       'ḩ' => 'Ḩ',
-       'ḫ' => 'Ḫ',
-       'ḭ' => 'Ḭ',
-       'ḯ' => 'Ḯ',
-       'ḱ' => 'Ḱ',
-       'ḳ' => 'Ḳ',
-       'ḵ' => 'Ḵ',
-       'ḷ' => 'Ḷ',
-       'ḹ' => 'Ḹ',
-       'ḻ' => 'Ḻ',
-       'ḽ' => 'Ḽ',
-       'ḿ' => 'Ḿ',
-       'ṁ' => 'Ṁ',
-       'ṃ' => 'Ṃ',
-       'ṅ' => 'Ṅ',
-       'ṇ' => 'Ṇ',
-       'ṉ' => 'Ṉ',
-       'ṋ' => 'Ṋ',
-       'ṍ' => 'Ṍ',
-       'ṏ' => 'Ṏ',
-       'ṑ' => 'Ṑ',
-       'ṓ' => 'Ṓ',
-       'ṕ' => 'Ṕ',
-       'ṗ' => 'Ṗ',
-       'ṙ' => 'Ṙ',
-       'ṛ' => 'Ṛ',
-       'ṝ' => 'Ṝ',
-       'ṟ' => 'Ṟ',
-       'ṡ' => 'Ṡ',
-       'ṣ' => 'Ṣ',
-       'ṥ' => 'Ṥ',
-       'ṧ' => 'Ṧ',
-       'ṩ' => 'Ṩ',
-       'ṫ' => 'Ṫ',
-       'ṭ' => 'Ṭ',
-       'ṯ' => 'Ṯ',
-       'ṱ' => 'Ṱ',
-       'ṳ' => 'Ṳ',
-       'ṵ' => 'Ṵ',
-       'ṷ' => 'Ṷ',
-       'ṹ' => 'Ṹ',
-       'ṻ' => 'Ṻ',
-       'ṽ' => 'Ṽ',
-       'ṿ' => 'Ṿ',
-       'ẁ' => 'Ẁ',
-       'ẃ' => 'Ẃ',
-       'ẅ' => 'Ẅ',
-       'ẇ' => 'Ẇ',
-       'ẉ' => 'Ẉ',
-       'ẋ' => 'Ẋ',
-       'ẍ' => 'Ẍ',
-       'ẏ' => 'Ẏ',
-       'ẑ' => 'Ẑ',
-       'ẓ' => 'Ẓ',
-       'ẕ' => 'Ẕ',
-       'ẛ' => 'Ṡ',
-       'ạ' => 'Ạ',
-       'ả' => 'Ả',
-       'ấ' => 'Ấ',
-       'ầ' => 'Ầ',
-       'ẩ' => 'Ẩ',
-       'ẫ' => 'Ẫ',
-       'ậ' => 'Ậ',
-       'ắ' => 'Ắ',
-       'ằ' => 'Ằ',
-       'ẳ' => 'Ẳ',
-       'ẵ' => 'Ẵ',
-       'ặ' => 'Ặ',
-       'ẹ' => 'Ẹ',
-       'ẻ' => 'Ẻ',
-       'ẽ' => 'Ẽ',
-       'ế' => 'Ế',
-       'ề' => 'Ề',
-       'ể' => 'Ể',
-       'ễ' => 'Ễ',
-       'ệ' => 'Ệ',
-       'ỉ' => 'Ỉ',
-       'ị' => 'Ị',
-       'ọ' => 'Ọ',
-       'ỏ' => 'Ỏ',
-       'ố' => 'Ố',
-       'ồ' => 'Ồ',
-       'ổ' => 'Ổ',
-       'ỗ' => 'Ỗ',
-       'ộ' => 'Ộ',
-       'ớ' => 'Ớ',
-       'ờ' => 'Ờ',
-       'ở' => 'Ở',
-       'ỡ' => 'Ỡ',
-       'ợ' => 'Ợ',
-       'ụ' => 'Ụ',
-       'ủ' => 'Ủ',
-       'ứ' => 'Ứ',
-       'ừ' => 'Ừ',
-       'ử' => 'Ử',
-       'ữ' => 'Ữ',
-       'ự' => 'Ự',
-       'ỳ' => 'Ỳ',
-       'ỵ' => 'Ỵ',
-       'ỷ' => 'Ỷ',
-       'ỹ' => 'Ỹ',
-       'ỻ' => 'Ỻ',
-       'ỽ' => 'Ỽ',
-       'ỿ' => 'Ỿ',
-       'ἀ' => 'Ἀ',
-       'ἁ' => 'Ἁ',
-       'ἂ' => 'Ἂ',
-       'ἃ' => 'Ἃ',
-       'ἄ' => 'Ἄ',
-       'ἅ' => 'Ἅ',
-       'ἆ' => 'Ἆ',
-       'ἇ' => 'Ἇ',
-       'ἐ' => 'Ἐ',
-       'ἑ' => 'Ἑ',
-       'ἒ' => 'Ἒ',
-       'ἓ' => 'Ἓ',
-       'ἔ' => 'Ἔ',
-       'ἕ' => 'Ἕ',
-       'ἠ' => 'Ἠ',
-       'ἡ' => 'Ἡ',
-       'ἢ' => 'Ἢ',
-       'ἣ' => 'Ἣ',
-       'ἤ' => 'Ἤ',
-       'ἥ' => 'Ἥ',
-       'ἦ' => 'Ἦ',
-       'ἧ' => 'Ἧ',
-       'ἰ' => 'Ἰ',
-       'ἱ' => 'Ἱ',
-       'ἲ' => 'Ἲ',
-       'ἳ' => 'Ἳ',
-       'ἴ' => 'Ἴ',
-       'ἵ' => 'Ἵ',
-       'ἶ' => 'Ἶ',
-       'ἷ' => 'Ἷ',
-       'ὀ' => 'Ὀ',
-       'ὁ' => 'Ὁ',
-       'ὂ' => 'Ὂ',
-       'ὃ' => 'Ὃ',
-       'ὄ' => 'Ὄ',
-       'ὅ' => 'Ὅ',
-       'ὑ' => 'Ὑ',
-       'ὓ' => 'Ὓ',
-       'ὕ' => 'Ὕ',
-       'ὗ' => 'Ὗ',
-       'ὠ' => 'Ὠ',
-       'ὡ' => 'Ὡ',
-       'ὢ' => 'Ὢ',
-       'ὣ' => 'Ὣ',
-       'ὤ' => 'Ὤ',
-       'ὥ' => 'Ὥ',
-       'ὦ' => 'Ὦ',
-       'ὧ' => 'Ὧ',
-       'ὰ' => 'Ὰ',
-       'ά' => 'Ά',
-       'ὲ' => 'Ὲ',
-       'έ' => 'Έ',
-       'ὴ' => 'Ὴ',
-       'ή' => 'Ή',
-       'ὶ' => 'Ὶ',
-       'ί' => 'Ί',
-       'ὸ' => 'Ὸ',
-       'ό' => 'Ό',
-       'ὺ' => 'Ὺ',
-       'ύ' => 'Ύ',
-       'ὼ' => 'Ὼ',
-       'ώ' => 'Ώ',
-       'ᾀ' => 'ᾈ',
-       'ᾁ' => 'ᾉ',
-       'ᾂ' => 'ᾊ',
-       'ᾃ' => 'ᾋ',
-       'ᾄ' => 'ᾌ',
-       'ᾅ' => 'ᾍ',
-       'ᾆ' => 'ᾎ',
-       'ᾇ' => 'ᾏ',
-       'ᾐ' => 'ᾘ',
-       'ᾑ' => 'ᾙ',
-       'ᾒ' => 'ᾚ',
-       'ᾓ' => 'ᾛ',
-       'ᾔ' => 'ᾜ',
-       'ᾕ' => 'ᾝ',
-       'ᾖ' => 'ᾞ',
-       'ᾗ' => 'ᾟ',
-       'ᾠ' => 'ᾨ',
-       'ᾡ' => 'ᾩ',
-       'ᾢ' => 'ᾪ',
-       'ᾣ' => 'ᾫ',
-       'ᾤ' => 'ᾬ',
-       'ᾥ' => 'ᾭ',
-       'ᾦ' => 'ᾮ',
-       'ᾧ' => 'ᾯ',
-       'ᾰ' => 'Ᾰ',
-       'ᾱ' => 'Ᾱ',
-       'ᾳ' => 'ᾼ',
-       'ι' => 'Ι',
-       'ῃ' => 'ῌ',
-       'ῐ' => 'Ῐ',
-       'ῑ' => 'Ῑ',
-       'ῠ' => 'Ῠ',
-       'ῡ' => 'Ῡ',
-       'ῥ' => 'Ῥ',
-       'ῳ' => 'ῼ',
-       'ⅎ' => 'Ⅎ',
-       'ⅰ' => 'Ⅰ',
-       'ⅱ' => 'Ⅱ',
-       'ⅲ' => 'Ⅲ',
-       'ⅳ' => 'Ⅳ',
-       'ⅴ' => 'Ⅴ',
-       'ⅵ' => 'Ⅵ',
-       'ⅶ' => 'Ⅶ',
-       'ⅷ' => 'Ⅷ',
-       'ⅸ' => 'Ⅸ',
-       'ⅹ' => 'Ⅹ',
-       'ⅺ' => 'Ⅺ',
-       'ⅻ' => 'Ⅻ',
-       'ⅼ' => 'Ⅼ',
-       'ⅽ' => 'Ⅽ',
-       'ⅾ' => 'Ⅾ',
-       'ⅿ' => 'Ⅿ',
-       'ↄ' => 'Ↄ',
-       'ⓐ' => 'Ⓐ',
-       'ⓑ' => 'Ⓑ',
-       'ⓒ' => 'Ⓒ',
-       'ⓓ' => 'Ⓓ',
-       'ⓔ' => 'Ⓔ',
-       'ⓕ' => 'Ⓕ',
-       'ⓖ' => 'Ⓖ',
-       'ⓗ' => 'Ⓗ',
-       'ⓘ' => 'Ⓘ',
-       'ⓙ' => 'Ⓙ',
-       'ⓚ' => 'Ⓚ',
-       'ⓛ' => 'Ⓛ',
-       'ⓜ' => 'Ⓜ',
-       'ⓝ' => 'Ⓝ',
-       'ⓞ' => 'Ⓞ',
-       'ⓟ' => 'Ⓟ',
-       'ⓠ' => 'Ⓠ',
-       'ⓡ' => 'Ⓡ',
-       'ⓢ' => 'Ⓢ',
-       'ⓣ' => 'Ⓣ',
-       'ⓤ' => 'Ⓤ',
-       'ⓥ' => 'Ⓥ',
-       'ⓦ' => 'Ⓦ',
-       'ⓧ' => 'Ⓧ',
-       'ⓨ' => 'Ⓨ',
-       'ⓩ' => 'Ⓩ',
-       'ⰰ' => 'Ⰰ',
-       'ⰱ' => 'Ⰱ',
-       'ⰲ' => 'Ⰲ',
-       'ⰳ' => 'Ⰳ',
-       'ⰴ' => 'Ⰴ',
-       'ⰵ' => 'Ⰵ',
-       'ⰶ' => 'Ⰶ',
-       'ⰷ' => 'Ⰷ',
-       'ⰸ' => 'Ⰸ',
-       'ⰹ' => 'Ⰹ',
-       'ⰺ' => 'Ⰺ',
-       'ⰻ' => 'Ⰻ',
-       'ⰼ' => 'Ⰼ',
-       'ⰽ' => 'Ⰽ',
-       'ⰾ' => 'Ⰾ',
-       'ⰿ' => 'Ⰿ',
-       'ⱀ' => 'Ⱀ',
-       'ⱁ' => 'Ⱁ',
-       'ⱂ' => 'Ⱂ',
-       'ⱃ' => 'Ⱃ',
-       'ⱄ' => 'Ⱄ',
-       'ⱅ' => 'Ⱅ',
-       'ⱆ' => 'Ⱆ',
-       'ⱇ' => 'Ⱇ',
-       'ⱈ' => 'Ⱈ',
-       'ⱉ' => 'Ⱉ',
-       'ⱊ' => 'Ⱊ',
-       'ⱋ' => 'Ⱋ',
-       'ⱌ' => 'Ⱌ',
-       'ⱍ' => 'Ⱍ',
-       'ⱎ' => 'Ⱎ',
-       'ⱏ' => 'Ⱏ',
-       'ⱐ' => 'Ⱐ',
-       'ⱑ' => 'Ⱑ',
-       'ⱒ' => 'Ⱒ',
-       'ⱓ' => 'Ⱓ',
-       'ⱔ' => 'Ⱔ',
-       'ⱕ' => 'Ⱕ',
-       'ⱖ' => 'Ⱖ',
-       'ⱗ' => 'Ⱗ',
-       'ⱘ' => 'Ⱘ',
-       'ⱙ' => 'Ⱙ',
-       'ⱚ' => 'Ⱚ',
-       'ⱛ' => 'Ⱛ',
-       'ⱜ' => 'Ⱜ',
-       'ⱝ' => 'Ⱝ',
-       'ⱞ' => 'Ⱞ',
-       'ⱡ' => 'Ⱡ',
-       'ⱥ' => 'Ⱥ',
-       'ⱦ' => 'Ⱦ',
-       'ⱨ' => 'Ⱨ',
-       'ⱪ' => 'Ⱪ',
-       'ⱬ' => 'Ⱬ',
-       'ⱳ' => 'Ⱳ',
-       'ⱶ' => 'Ⱶ',
-       'ⲁ' => 'Ⲁ',
-       'ⲃ' => 'Ⲃ',
-       'ⲅ' => 'Ⲅ',
-       'ⲇ' => 'Ⲇ',
-       'ⲉ' => 'Ⲉ',
-       'ⲋ' => 'Ⲋ',
-       'ⲍ' => 'Ⲍ',
-       'ⲏ' => 'Ⲏ',
-       'ⲑ' => 'Ⲑ',
-       'ⲓ' => 'Ⲓ',
-       'ⲕ' => 'Ⲕ',
-       'ⲗ' => 'Ⲗ',
-       'ⲙ' => 'Ⲙ',
-       'ⲛ' => 'Ⲛ',
-       'ⲝ' => 'Ⲝ',
-       'ⲟ' => 'Ⲟ',
-       'ⲡ' => 'Ⲡ',
-       'ⲣ' => 'Ⲣ',
-       'ⲥ' => 'Ⲥ',
-       'ⲧ' => 'Ⲧ',
-       'ⲩ' => 'Ⲩ',
-       'ⲫ' => 'Ⲫ',
-       'ⲭ' => 'Ⲭ',
-       'ⲯ' => 'Ⲯ',
-       'ⲱ' => 'Ⲱ',
-       'ⲳ' => 'Ⲳ',
-       'ⲵ' => 'Ⲵ',
-       'ⲷ' => 'Ⲷ',
-       'ⲹ' => 'Ⲹ',
-       'ⲻ' => 'Ⲻ',
-       'ⲽ' => 'Ⲽ',
-       'ⲿ' => 'Ⲿ',
-       'ⳁ' => 'Ⳁ',
-       'ⳃ' => 'Ⳃ',
-       'ⳅ' => 'Ⳅ',
-       'ⳇ' => 'Ⳇ',
-       'ⳉ' => 'Ⳉ',
-       'ⳋ' => 'Ⳋ',
-       'ⳍ' => 'Ⳍ',
-       'ⳏ' => 'Ⳏ',
-       'ⳑ' => 'Ⳑ',
-       'ⳓ' => 'Ⳓ',
-       'ⳕ' => 'Ⳕ',
-       'ⳗ' => 'Ⳗ',
-       'ⳙ' => 'Ⳙ',
-       'ⳛ' => 'Ⳛ',
-       'ⳝ' => 'Ⳝ',
-       'ⳟ' => 'Ⳟ',
-       'ⳡ' => 'Ⳡ',
-       'ⳣ' => 'Ⳣ',
-       'ⳬ' => 'Ⳬ',
-       'ⳮ' => 'Ⳮ',
-       'ⴀ' => 'Ⴀ',
-       'ⴁ' => 'Ⴁ',
-       'ⴂ' => 'Ⴂ',
-       'ⴃ' => 'Ⴃ',
-       'ⴄ' => 'Ⴄ',
-       'ⴅ' => 'Ⴅ',
-       'ⴆ' => 'Ⴆ',
-       'ⴇ' => 'Ⴇ',
-       'ⴈ' => 'Ⴈ',
-       'ⴉ' => 'Ⴉ',
-       'ⴊ' => 'Ⴊ',
-       'ⴋ' => 'Ⴋ',
-       'ⴌ' => 'Ⴌ',
-       'ⴍ' => 'Ⴍ',
-       'ⴎ' => 'Ⴎ',
-       'ⴏ' => 'Ⴏ',
-       'ⴐ' => 'Ⴐ',
-       'ⴑ' => 'Ⴑ',
-       'ⴒ' => 'Ⴒ',
-       'ⴓ' => 'Ⴓ',
-       'ⴔ' => 'Ⴔ',
-       'ⴕ' => 'Ⴕ',
-       'ⴖ' => 'Ⴖ',
-       'ⴗ' => 'Ⴗ',
-       'ⴘ' => 'Ⴘ',
-       'ⴙ' => 'Ⴙ',
-       'ⴚ' => 'Ⴚ',
-       'ⴛ' => 'Ⴛ',
-       'ⴜ' => 'Ⴜ',
-       'ⴝ' => 'Ⴝ',
-       'ⴞ' => 'Ⴞ',
-       'ⴟ' => 'Ⴟ',
-       'ⴠ' => 'Ⴠ',
-       'ⴡ' => 'Ⴡ',
-       'ⴢ' => 'Ⴢ',
-       'ⴣ' => 'Ⴣ',
-       'ⴤ' => 'Ⴤ',
-       'ⴥ' => 'Ⴥ',
-       'ꙁ' => 'Ꙁ',
-       'ꙃ' => 'Ꙃ',
-       'ꙅ' => 'Ꙅ',
-       'ꙇ' => 'Ꙇ',
-       'ꙉ' => 'Ꙉ',
-       'ꙋ' => 'Ꙋ',
-       'ꙍ' => 'Ꙍ',
-       'ꙏ' => 'Ꙏ',
-       'ꙑ' => 'Ꙑ',
-       'ꙓ' => 'Ꙓ',
-       'ꙕ' => 'Ꙕ',
-       'ꙗ' => 'Ꙗ',
-       'ꙙ' => 'Ꙙ',
-       'ꙛ' => 'Ꙛ',
-       'ꙝ' => 'Ꙝ',
-       'ꙟ' => 'Ꙟ',
-       'ꙡ' => 'Ꙡ',
-       'ꙣ' => 'Ꙣ',
-       'ꙥ' => 'Ꙥ',
-       'ꙧ' => 'Ꙧ',
-       'ꙩ' => 'Ꙩ',
-       'ꙫ' => 'Ꙫ',
-       'ꙭ' => 'Ꙭ',
-       'ꚁ' => 'Ꚁ',
-       'ꚃ' => 'Ꚃ',
-       'ꚅ' => 'Ꚅ',
-       'ꚇ' => 'Ꚇ',
-       'ꚉ' => 'Ꚉ',
-       'ꚋ' => 'Ꚋ',
-       'ꚍ' => 'Ꚍ',
-       'ꚏ' => 'Ꚏ',
-       'ꚑ' => 'Ꚑ',
-       'ꚓ' => 'Ꚓ',
-       'ꚕ' => 'Ꚕ',
-       'ꚗ' => 'Ꚗ',
-       'ꜣ' => 'Ꜣ',
-       'ꜥ' => 'Ꜥ',
-       'ꜧ' => 'Ꜧ',
-       'ꜩ' => 'Ꜩ',
-       'ꜫ' => 'Ꜫ',
-       'ꜭ' => 'Ꜭ',
-       'ꜯ' => 'Ꜯ',
-       'ꜳ' => 'Ꜳ',
-       'ꜵ' => 'Ꜵ',
-       'ꜷ' => 'Ꜷ',
-       'ꜹ' => 'Ꜹ',
-       'ꜻ' => 'Ꜻ',
-       'ꜽ' => 'Ꜽ',
-       'ꜿ' => 'Ꜿ',
-       'ꝁ' => 'Ꝁ',
-       'ꝃ' => 'Ꝃ',
-       'ꝅ' => 'Ꝅ',
-       'ꝇ' => 'Ꝇ',
-       'ꝉ' => 'Ꝉ',
-       'ꝋ' => 'Ꝋ',
-       'ꝍ' => 'Ꝍ',
-       'ꝏ' => 'Ꝏ',
-       'ꝑ' => 'Ꝑ',
-       'ꝓ' => 'Ꝓ',
-       'ꝕ' => 'Ꝕ',
-       'ꝗ' => 'Ꝗ',
-       'ꝙ' => 'Ꝙ',
-       'ꝛ' => 'Ꝛ',
-       'ꝝ' => 'Ꝝ',
-       'ꝟ' => 'Ꝟ',
-       'ꝡ' => 'Ꝡ',
-       'ꝣ' => 'Ꝣ',
-       'ꝥ' => 'Ꝥ',
-       'ꝧ' => 'Ꝧ',
-       'ꝩ' => 'Ꝩ',
-       'ꝫ' => 'Ꝫ',
-       'ꝭ' => 'Ꝭ',
-       'ꝯ' => 'Ꝯ',
-       'ꝺ' => 'Ꝺ',
-       'ꝼ' => 'Ꝼ',
-       'ꝿ' => 'Ꝿ',
-       'ꞁ' => 'Ꞁ',
-       'ꞃ' => 'Ꞃ',
-       'ꞅ' => 'Ꞅ',
-       'ꞇ' => 'Ꞇ',
-       'ꞌ' => 'Ꞌ',
-       'ꞑ' => 'Ꞑ',
-       'ꞡ' => 'Ꞡ',
-       'ꞣ' => 'Ꞣ',
-       'ꞥ' => 'Ꞥ',
-       'ꞧ' => 'Ꞧ',
-       'ꞩ' => 'Ꞩ',
-       'a' => 'A',
-       'b' => 'B',
-       'c' => 'C',
-       'd' => 'D',
-       'e' => 'E',
-       'f' => 'F',
-       'g' => 'G',
-       'h' => 'H',
-       'i' => 'I',
-       'j' => 'J',
-       'k' => 'K',
-       'l' => 'L',
-       'm' => 'M',
-       'n' => 'N',
-       'o' => 'O',
-       'p' => 'P',
-       'q' => 'Q',
-       'r' => 'R',
-       's' => 'S',
-       't' => 'T',
-       'u' => 'U',
-       'v' => 'V',
-       'w' => 'W',
-       'x' => 'X',
-       'y' => 'Y',
-       'z' => 'Z',
-       '𐐨' => '𐐀',
-       '𐐩' => '𐐁',
-       '𐐪' => '𐐂',
-       '𐐫' => '𐐃',
-       '𐐬' => '𐐄',
-       '𐐭' => '𐐅',
-       '𐐮' => '𐐆',
-       '𐐯' => '𐐇',
-       '𐐰' => '𐐈',
-       '𐐱' => '𐐉',
-       '𐐲' => '𐐊',
-       '𐐳' => '𐐋',
-       '𐐴' => '𐐌',
-       '𐐵' => '𐐍',
-       '𐐶' => '𐐎',
-       '𐐷' => '𐐏',
-       '𐐸' => '𐐐',
-       '𐐹' => '𐐑',
-       '𐐺' => '𐐒',
-       '𐐻' => '𐐓',
-       '𐐼' => '𐐔',
-       '𐐽' => '𐐕',
-       '𐐾' => '𐐖',
-       '𐐿' => '𐐗',
-       '𐑀' => '𐐘',
-       '𐑁' => '𐐙',
-       '𐑂' => '𐐚',
-       '𐑃' => '𐐛',
-       '𐑄' => '𐐜',
-       '𐑅' => '𐐝',
-       '𐑆' => '𐐞',
-       '𐑇' => '𐐟',
-       '𐑈' => '𐐠',
-       '𐑉' => '𐐡',
-       '𐑊' => '𐐢',
-       '𐑋' => '𐐣',
-       '𐑌' => '𐐤',
-       '𐑍' => '𐐥',
-       '𐑎' => '𐐦',
-       '𐑏' => '𐐧'
-);
-
-/**
- * Translation array to get lower case character
- */
-$wikiLowerChars = array(
-       'A' => 'a',
-       'B' => 'b',
-       'C' => 'c',
-       'D' => 'd',
-       'E' => 'e',
-       'F' => 'f',
-       'G' => 'g',
-       'H' => 'h',
-       'I' => 'i',
-       'J' => 'j',
-       'K' => 'k',
-       'L' => 'l',
-       'M' => 'm',
-       'N' => 'n',
-       'O' => 'o',
-       'P' => 'p',
-       'Q' => 'q',
-       'R' => 'r',
-       'S' => 's',
-       'T' => 't',
-       'U' => 'u',
-       'V' => 'v',
-       'W' => 'w',
-       'X' => 'x',
-       'Y' => 'y',
-       'Z' => 'z',
-       'À' => 'à',
-       'Á' => 'á',
-       'Â' => 'â',
-       'Ã' => 'ã',
-       'Ä' => 'ä',
-       'Å' => 'å',
-       'Æ' => 'æ',
-       'Ç' => 'ç',
-       'È' => 'è',
-       'É' => 'é',
-       'Ê' => 'ê',
-       'Ë' => 'ë',
-       'Ì' => 'ì',
-       'Í' => 'í',
-       'Î' => 'î',
-       'Ï' => 'ï',
-       'Ð' => 'ð',
-       'Ñ' => 'ñ',
-       'Ò' => 'ò',
-       'Ó' => 'ó',
-       'Ô' => 'ô',
-       'Õ' => 'õ',
-       'Ö' => 'ö',
-       'Ø' => 'ø',
-       'Ù' => 'ù',
-       'Ú' => 'ú',
-       'Û' => 'û',
-       'Ü' => 'ü',
-       'Ý' => 'ý',
-       'Þ' => 'þ',
-       'Ā' => 'ā',
-       'Ă' => 'ă',
-       'Ą' => 'ą',
-       'Ć' => 'ć',
-       'Ĉ' => 'ĉ',
-       'Ċ' => 'ċ',
-       'Č' => 'č',
-       'Ď' => 'ď',
-       'Đ' => 'đ',
-       'Ē' => 'ē',
-       'Ĕ' => 'ĕ',
-       'Ė' => 'ė',
-       'Ę' => 'ę',
-       'Ě' => 'ě',
-       'Ĝ' => 'ĝ',
-       'Ğ' => 'ğ',
-       'Ġ' => 'ġ',
-       'Ģ' => 'ģ',
-       'Ĥ' => 'ĥ',
-       'Ħ' => 'ħ',
-       'Ĩ' => 'ĩ',
-       'Ī' => 'ī',
-       'Ĭ' => 'ĭ',
-       'Į' => 'į',
-       'İ' => 'i',
-       'IJ' => 'ij',
-       'Ĵ' => 'ĵ',
-       'Ķ' => 'ķ',
-       'Ĺ' => 'ĺ',
-       'Ļ' => 'ļ',
-       'Ľ' => 'ľ',
-       'Ŀ' => 'ŀ',
-       'Ł' => 'ł',
-       'Ń' => 'ń',
-       'Ņ' => 'ņ',
-       'Ň' => 'ň',
-       'Ŋ' => 'ŋ',
-       'Ō' => 'ō',
-       'Ŏ' => 'ŏ',
-       'Ő' => 'ő',
-       'Œ' => 'œ',
-       'Ŕ' => 'ŕ',
-       'Ŗ' => 'ŗ',
-       'Ř' => 'ř',
-       'Ś' => 'ś',
-       'Ŝ' => 'ŝ',
-       'Ş' => 'ş',
-       'Š' => 'š',
-       'Ţ' => 'ţ',
-       'Ť' => 'ť',
-       'Ŧ' => 'ŧ',
-       'Ũ' => 'ũ',
-       'Ū' => 'ū',
-       'Ŭ' => 'ŭ',
-       'Ů' => 'ů',
-       'Ű' => 'ű',
-       'Ų' => 'ų',
-       'Ŵ' => 'ŵ',
-       'Ŷ' => 'ŷ',
-       'Ÿ' => 'ÿ',
-       'Ź' => 'ź',
-       'Ż' => 'ż',
-       'Ž' => 'ž',
-       'Ɓ' => 'ɓ',
-       'Ƃ' => 'ƃ',
-       'Ƅ' => 'ƅ',
-       'Ɔ' => 'ɔ',
-       'Ƈ' => 'ƈ',
-       'Ɖ' => 'ɖ',
-       'Ɗ' => 'ɗ',
-       'Ƌ' => 'ƌ',
-       'Ǝ' => 'ǝ',
-       'Ə' => 'ə',
-       'Ɛ' => 'ɛ',
-       'Ƒ' => 'ƒ',
-       'Ɠ' => 'ɠ',
-       'Ɣ' => 'ɣ',
-       'Ɩ' => 'ɩ',
-       'Ɨ' => 'ɨ',
-       'Ƙ' => 'ƙ',
-       'Ɯ' => 'ɯ',
-       'Ɲ' => 'ɲ',
-       'Ɵ' => 'ɵ',
-       'Ơ' => 'ơ',
-       'Ƣ' => 'ƣ',
-       'Ƥ' => 'ƥ',
-       'Ʀ' => 'ʀ',
-       'Ƨ' => 'ƨ',
-       'Ʃ' => 'ʃ',
-       'Ƭ' => 'ƭ',
-       'Ʈ' => 'ʈ',
-       'Ư' => 'ư',
-       'Ʊ' => 'ʊ',
-       'Ʋ' => 'ʋ',
-       'Ƴ' => 'ƴ',
-       'Ƶ' => 'ƶ',
-       'Ʒ' => 'ʒ',
-       'Ƹ' => 'ƹ',
-       'Ƽ' => 'ƽ',
-       'DŽ' => 'dž',
-       'Dž' => 'dž',
-       'LJ' => 'lj',
-       'Lj' => 'lj',
-       'NJ' => 'nj',
-       'Nj' => 'nj',
-       'Ǎ' => 'ǎ',
-       'Ǐ' => 'ǐ',
-       'Ǒ' => 'ǒ',
-       'Ǔ' => 'ǔ',
-       'Ǖ' => 'ǖ',
-       'Ǘ' => 'ǘ',
-       'Ǚ' => 'ǚ',
-       'Ǜ' => 'ǜ',
-       'Ǟ' => 'ǟ',
-       'Ǡ' => 'ǡ',
-       'Ǣ' => 'ǣ',
-       'Ǥ' => 'ǥ',
-       'Ǧ' => 'ǧ',
-       'Ǩ' => 'ǩ',
-       'Ǫ' => 'ǫ',
-       'Ǭ' => 'ǭ',
-       'Ǯ' => 'ǯ',
-       'DZ' => 'dz',
-       'Dz' => 'dz',
-       'Ǵ' => 'ǵ',
-       'Ƕ' => 'ƕ',
-       'Ƿ' => 'ƿ',
-       'Ǹ' => 'ǹ',
-       'Ǻ' => 'ǻ',
-       'Ǽ' => 'ǽ',
-       'Ǿ' => 'ǿ',
-       'Ȁ' => 'ȁ',
-       'Ȃ' => 'ȃ',
-       'Ȅ' => 'ȅ',
-       'Ȇ' => 'ȇ',
-       'Ȉ' => 'ȉ',
-       'Ȋ' => 'ȋ',
-       'Ȍ' => 'ȍ',
-       'Ȏ' => 'ȏ',
-       'Ȑ' => 'ȑ',
-       'Ȓ' => 'ȓ',
-       'Ȕ' => 'ȕ',
-       'Ȗ' => 'ȗ',
-       'Ș' => 'ș',
-       'Ț' => 'ț',
-       'Ȝ' => 'ȝ',
-       'Ȟ' => 'ȟ',
-       'Ƞ' => 'ƞ',
-       'Ȣ' => 'ȣ',
-       'Ȥ' => 'ȥ',
-       'Ȧ' => 'ȧ',
-       'Ȩ' => 'ȩ',
-       'Ȫ' => 'ȫ',
-       'Ȭ' => 'ȭ',
-       'Ȯ' => 'ȯ',
-       'Ȱ' => 'ȱ',
-       'Ȳ' => 'ȳ',
-       'Ⱥ' => 'ⱥ',
-       'Ȼ' => 'ȼ',
-       'Ƚ' => 'ƚ',
-       'Ⱦ' => 'ⱦ',
-       'Ɂ' => 'ɂ',
-       'Ƀ' => 'ƀ',
-       'Ʉ' => 'ʉ',
-       'Ʌ' => 'ʌ',
-       'Ɇ' => 'ɇ',
-       'Ɉ' => 'ɉ',
-       'Ɋ' => 'ɋ',
-       'Ɍ' => 'ɍ',
-       'Ɏ' => 'ɏ',
-       'Ͱ' => 'ͱ',
-       'Ͳ' => 'ͳ',
-       'Ͷ' => 'ͷ',
-       'Ά' => 'ά',
-       'Έ' => 'έ',
-       'Ή' => 'ή',
-       'Ί' => 'ί',
-       'Ό' => 'ό',
-       'Ύ' => 'ύ',
-       'Ώ' => 'ώ',
-       'Α' => 'α',
-       'Β' => 'β',
-       'Γ' => 'γ',
-       'Δ' => 'δ',
-       'Ε' => 'ε',
-       'Ζ' => 'ζ',
-       'Η' => 'η',
-       'Θ' => 'θ',
-       'Ι' => 'ι',
-       'Κ' => 'κ',
-       'Λ' => 'λ',
-       'Μ' => 'μ',
-       'Ν' => 'ν',
-       'Ξ' => 'ξ',
-       'Ο' => 'ο',
-       'Π' => 'π',
-       'Ρ' => 'ρ',
-       'Σ' => 'σ',
-       'Τ' => 'τ',
-       'Υ' => 'υ',
-       'Φ' => 'φ',
-       'Χ' => 'χ',
-       'Ψ' => 'ψ',
-       'Ω' => 'ω',
-       'Ϊ' => 'ϊ',
-       'Ϋ' => 'ϋ',
-       'Ϗ' => 'ϗ',
-       'Ϙ' => 'ϙ',
-       'Ϛ' => 'ϛ',
-       'Ϝ' => 'ϝ',
-       'Ϟ' => 'ϟ',
-       'Ϡ' => 'ϡ',
-       'Ϣ' => 'ϣ',
-       'Ϥ' => 'ϥ',
-       'Ϧ' => 'ϧ',
-       'Ϩ' => 'ϩ',
-       'Ϫ' => 'ϫ',
-       'Ϭ' => 'ϭ',
-       'Ϯ' => 'ϯ',
-       'ϴ' => 'θ',
-       'Ϸ' => 'ϸ',
-       'Ϲ' => 'ϲ',
-       'Ϻ' => 'ϻ',
-       'Ͻ' => 'ͻ',
-       'Ͼ' => 'ͼ',
-       'Ͽ' => 'ͽ',
-       'Ѐ' => 'ѐ',
-       'Ё' => 'ё',
-       'Ђ' => 'ђ',
-       'Ѓ' => 'ѓ',
-       'Є' => 'є',
-       'Ѕ' => 'ѕ',
-       'І' => 'і',
-       'Ї' => 'ї',
-       'Ј' => 'ј',
-       'Љ' => 'љ',
-       'Њ' => 'њ',
-       'Ћ' => 'ћ',
-       'Ќ' => 'ќ',
-       'Ѝ' => 'ѝ',
-       'Ў' => 'ў',
-       'Џ' => 'џ',
-       'А' => 'а',
-       'Б' => 'б',
-       'В' => 'в',
-       'Г' => 'г',
-       'Д' => 'д',
-       'Е' => 'е',
-       'Ж' => 'ж',
-       'З' => 'з',
-       'И' => 'и',
-       'Й' => 'й',
-       'К' => 'к',
-       'Л' => 'л',
-       'М' => 'м',
-       'Н' => 'н',
-       'О' => 'о',
-       'П' => 'п',
-       'Р' => 'р',
-       'С' => 'с',
-       'Т' => 'т',
-       'У' => 'у',
-       'Ф' => 'ф',
-       'Х' => 'х',
-       'Ц' => 'ц',
-       'Ч' => 'ч',
-       'Ш' => 'ш',
-       'Щ' => 'щ',
-       'Ъ' => 'ъ',
-       'Ы' => 'ы',
-       'Ь' => 'ь',
-       'Э' => 'э',
-       'Ю' => 'ю',
-       'Я' => 'я',
-       'Ѡ' => 'ѡ',
-       'Ѣ' => 'ѣ',
-       'Ѥ' => 'ѥ',
-       'Ѧ' => 'ѧ',
-       'Ѩ' => 'ѩ',
-       'Ѫ' => 'ѫ',
-       'Ѭ' => 'ѭ',
-       'Ѯ' => 'ѯ',
-       'Ѱ' => 'ѱ',
-       'Ѳ' => 'ѳ',
-       'Ѵ' => 'ѵ',
-       'Ѷ' => 'ѷ',
-       'Ѹ' => 'ѹ',
-       'Ѻ' => 'ѻ',
-       'Ѽ' => 'ѽ',
-       'Ѿ' => 'ѿ',
-       'Ҁ' => 'ҁ',
-       'Ҋ' => 'ҋ',
-       'Ҍ' => 'ҍ',
-       'Ҏ' => 'ҏ',
-       'Ґ' => 'ґ',
-       'Ғ' => 'ғ',
-       'Ҕ' => 'ҕ',
-       'Җ' => 'җ',
-       'Ҙ' => 'ҙ',
-       'Қ' => 'қ',
-       'Ҝ' => 'ҝ',
-       'Ҟ' => 'ҟ',
-       'Ҡ' => 'ҡ',
-       'Ң' => 'ң',
-       'Ҥ' => 'ҥ',
-       'Ҧ' => 'ҧ',
-       'Ҩ' => 'ҩ',
-       'Ҫ' => 'ҫ',
-       'Ҭ' => 'ҭ',
-       'Ү' => 'ү',
-       'Ұ' => 'ұ',
-       'Ҳ' => 'ҳ',
-       'Ҵ' => 'ҵ',
-       'Ҷ' => 'ҷ',
-       'Ҹ' => 'ҹ',
-       'Һ' => 'һ',
-       'Ҽ' => 'ҽ',
-       'Ҿ' => 'ҿ',
-       'Ӏ' => 'ӏ',
-       'Ӂ' => 'ӂ',
-       'Ӄ' => 'ӄ',
-       'Ӆ' => 'ӆ',
-       'Ӈ' => 'ӈ',
-       'Ӊ' => 'ӊ',
-       'Ӌ' => 'ӌ',
-       'Ӎ' => 'ӎ',
-       'Ӑ' => 'ӑ',
-       'Ӓ' => 'ӓ',
-       'Ӕ' => 'ӕ',
-       'Ӗ' => 'ӗ',
-       'Ә' => 'ә',
-       'Ӛ' => 'ӛ',
-       'Ӝ' => 'ӝ',
-       'Ӟ' => 'ӟ',
-       'Ӡ' => 'ӡ',
-       'Ӣ' => 'ӣ',
-       'Ӥ' => 'ӥ',
-       'Ӧ' => 'ӧ',
-       'Ө' => 'ө',
-       'Ӫ' => 'ӫ',
-       'Ӭ' => 'ӭ',
-       'Ӯ' => 'ӯ',
-       'Ӱ' => 'ӱ',
-       'Ӳ' => 'ӳ',
-       'Ӵ' => 'ӵ',
-       'Ӷ' => 'ӷ',
-       'Ӹ' => 'ӹ',
-       'Ӻ' => 'ӻ',
-       'Ӽ' => 'ӽ',
-       'Ӿ' => 'ӿ',
-       'Ԁ' => 'ԁ',
-       'Ԃ' => 'ԃ',
-       'Ԅ' => 'ԅ',
-       'Ԇ' => 'ԇ',
-       'Ԉ' => 'ԉ',
-       'Ԋ' => 'ԋ',
-       'Ԍ' => 'ԍ',
-       'Ԏ' => 'ԏ',
-       'Ԑ' => 'ԑ',
-       'Ԓ' => 'ԓ',
-       'Ԕ' => 'ԕ',
-       'Ԗ' => 'ԗ',
-       'Ԙ' => 'ԙ',
-       'Ԛ' => 'ԛ',
-       'Ԝ' => 'ԝ',
-       'Ԟ' => 'ԟ',
-       'Ԡ' => 'ԡ',
-       'Ԣ' => 'ԣ',
-       'Ԥ' => 'ԥ',
-       'Ԧ' => 'ԧ',
-       'Ա' => 'ա',
-       'Բ' => 'բ',
-       'Գ' => 'գ',
-       'Դ' => 'դ',
-       'Ե' => 'ե',
-       'Զ' => 'զ',
-       'Է' => 'է',
-       'Ը' => 'ը',
-       'Թ' => 'թ',
-       'Ժ' => 'ժ',
-       'Ի' => 'ի',
-       'Լ' => 'լ',
-       'Խ' => 'խ',
-       'Ծ' => 'ծ',
-       'Կ' => 'կ',
-       'Հ' => 'հ',
-       'Ձ' => 'ձ',
-       'Ղ' => 'ղ',
-       'Ճ' => 'ճ',
-       'Մ' => 'մ',
-       'Յ' => 'յ',
-       'Ն' => 'ն',
-       'Շ' => 'շ',
-       'Ո' => 'ո',
-       'Չ' => 'չ',
-       'Պ' => 'պ',
-       'Ջ' => 'ջ',
-       'Ռ' => 'ռ',
-       'Ս' => 'ս',
-       'Վ' => 'վ',
-       'Տ' => 'տ',
-       'Ր' => 'ր',
-       'Ց' => 'ց',
-       'Ւ' => 'ւ',
-       'Փ' => 'փ',
-       'Ք' => 'ք',
-       'Օ' => 'օ',
-       'Ֆ' => 'ֆ',
-       'Ⴀ' => 'ⴀ',
-       'Ⴁ' => 'ⴁ',
-       'Ⴂ' => 'ⴂ',
-       'Ⴃ' => 'ⴃ',
-       'Ⴄ' => 'ⴄ',
-       'Ⴅ' => 'ⴅ',
-       'Ⴆ' => 'ⴆ',
-       'Ⴇ' => 'ⴇ',
-       'Ⴈ' => 'ⴈ',
-       'Ⴉ' => 'ⴉ',
-       'Ⴊ' => 'ⴊ',
-       'Ⴋ' => 'ⴋ',
-       'Ⴌ' => 'ⴌ',
-       'Ⴍ' => 'ⴍ',
-       'Ⴎ' => 'ⴎ',
-       'Ⴏ' => 'ⴏ',
-       'Ⴐ' => 'ⴐ',
-       'Ⴑ' => 'ⴑ',
-       'Ⴒ' => 'ⴒ',
-       'Ⴓ' => 'ⴓ',
-       'Ⴔ' => 'ⴔ',
-       'Ⴕ' => 'ⴕ',
-       'Ⴖ' => 'ⴖ',
-       'Ⴗ' => 'ⴗ',
-       'Ⴘ' => 'ⴘ',
-       'Ⴙ' => 'ⴙ',
-       'Ⴚ' => 'ⴚ',
-       'Ⴛ' => 'ⴛ',
-       'Ⴜ' => 'ⴜ',
-       'Ⴝ' => 'ⴝ',
-       'Ⴞ' => 'ⴞ',
-       'Ⴟ' => 'ⴟ',
-       'Ⴠ' => 'ⴠ',
-       'Ⴡ' => 'ⴡ',
-       'Ⴢ' => 'ⴢ',
-       'Ⴣ' => 'ⴣ',
-       'Ⴤ' => 'ⴤ',
-       'Ⴥ' => 'ⴥ',
-       'Ḁ' => 'ḁ',
-       'Ḃ' => 'ḃ',
-       'Ḅ' => 'ḅ',
-       'Ḇ' => 'ḇ',
-       'Ḉ' => 'ḉ',
-       'Ḋ' => 'ḋ',
-       'Ḍ' => 'ḍ',
-       'Ḏ' => 'ḏ',
-       'Ḑ' => 'ḑ',
-       'Ḓ' => 'ḓ',
-       'Ḕ' => 'ḕ',
-       'Ḗ' => 'ḗ',
-       'Ḙ' => 'ḙ',
-       'Ḛ' => 'ḛ',
-       'Ḝ' => 'ḝ',
-       'Ḟ' => 'ḟ',
-       'Ḡ' => 'ḡ',
-       'Ḣ' => 'ḣ',
-       'Ḥ' => 'ḥ',
-       'Ḧ' => 'ḧ',
-       'Ḩ' => 'ḩ',
-       'Ḫ' => 'ḫ',
-       'Ḭ' => 'ḭ',
-       'Ḯ' => 'ḯ',
-       'Ḱ' => 'ḱ',
-       'Ḳ' => 'ḳ',
-       'Ḵ' => 'ḵ',
-       'Ḷ' => 'ḷ',
-       'Ḹ' => 'ḹ',
-       'Ḻ' => 'ḻ',
-       'Ḽ' => 'ḽ',
-       'Ḿ' => 'ḿ',
-       'Ṁ' => 'ṁ',
-       'Ṃ' => 'ṃ',
-       'Ṅ' => 'ṅ',
-       'Ṇ' => 'ṇ',
-       'Ṉ' => 'ṉ',
-       'Ṋ' => 'ṋ',
-       'Ṍ' => 'ṍ',
-       'Ṏ' => 'ṏ',
-       'Ṑ' => 'ṑ',
-       'Ṓ' => 'ṓ',
-       'Ṕ' => 'ṕ',
-       'Ṗ' => 'ṗ',
-       'Ṙ' => 'ṙ',
-       'Ṛ' => 'ṛ',
-       'Ṝ' => 'ṝ',
-       'Ṟ' => 'ṟ',
-       'Ṡ' => 'ṡ',
-       'Ṣ' => 'ṣ',
-       'Ṥ' => 'ṥ',
-       'Ṧ' => 'ṧ',
-       'Ṩ' => 'ṩ',
-       'Ṫ' => 'ṫ',
-       'Ṭ' => 'ṭ',
-       'Ṯ' => 'ṯ',
-       'Ṱ' => 'ṱ',
-       'Ṳ' => 'ṳ',
-       'Ṵ' => 'ṵ',
-       'Ṷ' => 'ṷ',
-       'Ṹ' => 'ṹ',
-       'Ṻ' => 'ṻ',
-       'Ṽ' => 'ṽ',
-       'Ṿ' => 'ṿ',
-       'Ẁ' => 'ẁ',
-       'Ẃ' => 'ẃ',
-       'Ẅ' => 'ẅ',
-       'Ẇ' => 'ẇ',
-       'Ẉ' => 'ẉ',
-       'Ẋ' => 'ẋ',
-       'Ẍ' => 'ẍ',
-       'Ẏ' => 'ẏ',
-       'Ẑ' => 'ẑ',
-       'Ẓ' => 'ẓ',
-       'Ẕ' => 'ẕ',
-       'ẞ' => 'ß',
-       'Ạ' => 'ạ',
-       'Ả' => 'ả',
-       'Ấ' => 'ấ',
-       'Ầ' => 'ầ',
-       'Ẩ' => 'ẩ',
-       'Ẫ' => 'ẫ',
-       'Ậ' => 'ậ',
-       'Ắ' => 'ắ',
-       'Ằ' => 'ằ',
-       'Ẳ' => 'ẳ',
-       'Ẵ' => 'ẵ',
-       'Ặ' => 'ặ',
-       'Ẹ' => 'ẹ',
-       'Ẻ' => 'ẻ',
-       'Ẽ' => 'ẽ',
-       'Ế' => 'ế',
-       'Ề' => 'ề',
-       'Ể' => 'ể',
-       'Ễ' => 'ễ',
-       'Ệ' => 'ệ',
-       'Ỉ' => 'ỉ',
-       'Ị' => 'ị',
-       'Ọ' => 'ọ',
-       'Ỏ' => 'ỏ',
-       'Ố' => 'ố',
-       'Ồ' => 'ồ',
-       'Ổ' => 'ổ',
-       'Ỗ' => 'ỗ',
-       'Ộ' => 'ộ',
-       'Ớ' => 'ớ',
-       'Ờ' => 'ờ',
-       'Ở' => 'ở',
-       'Ỡ' => 'ỡ',
-       'Ợ' => 'ợ',
-       'Ụ' => 'ụ',
-       'Ủ' => 'ủ',
-       'Ứ' => 'ứ',
-       'Ừ' => 'ừ',
-       'Ử' => 'ử',
-       'Ữ' => 'ữ',
-       'Ự' => 'ự',
-       'Ỳ' => 'ỳ',
-       'Ỵ' => 'ỵ',
-       'Ỷ' => 'ỷ',
-       'Ỹ' => 'ỹ',
-       'Ỻ' => 'ỻ',
-       'Ỽ' => 'ỽ',
-       'Ỿ' => 'ỿ',
-       'Ἀ' => 'ἀ',
-       'Ἁ' => 'ἁ',
-       'Ἂ' => 'ἂ',
-       'Ἃ' => 'ἃ',
-       'Ἄ' => 'ἄ',
-       'Ἅ' => 'ἅ',
-       'Ἆ' => 'ἆ',
-       'Ἇ' => 'ἇ',
-       'Ἐ' => 'ἐ',
-       'Ἑ' => 'ἑ',
-       'Ἒ' => 'ἒ',
-       'Ἓ' => 'ἓ',
-       'Ἔ' => 'ἔ',
-       'Ἕ' => 'ἕ',
-       'Ἠ' => 'ἠ',
-       'Ἡ' => 'ἡ',
-       'Ἢ' => 'ἢ',
-       'Ἣ' => 'ἣ',
-       'Ἤ' => 'ἤ',
-       'Ἥ' => 'ἥ',
-       'Ἦ' => 'ἦ',
-       'Ἧ' => 'ἧ',
-       'Ἰ' => 'ἰ',
-       'Ἱ' => 'ἱ',
-       'Ἲ' => 'ἲ',
-       'Ἳ' => 'ἳ',
-       'Ἴ' => 'ἴ',
-       'Ἵ' => 'ἵ',
-       'Ἶ' => 'ἶ',
-       'Ἷ' => 'ἷ',
-       'Ὀ' => 'ὀ',
-       'Ὁ' => 'ὁ',
-       'Ὂ' => 'ὂ',
-       'Ὃ' => 'ὃ',
-       'Ὄ' => 'ὄ',
-       'Ὅ' => 'ὅ',
-       'Ὑ' => 'ὑ',
-       'Ὓ' => 'ὓ',
-       'Ὕ' => 'ὕ',
-       'Ὗ' => 'ὗ',
-       'Ὠ' => 'ὠ',
-       'Ὡ' => 'ὡ',
-       'Ὢ' => 'ὢ',
-       'Ὣ' => 'ὣ',
-       'Ὤ' => 'ὤ',
-       'Ὥ' => 'ὥ',
-       'Ὦ' => 'ὦ',
-       'Ὧ' => 'ὧ',
-       'ᾈ' => 'ᾀ',
-       'ᾉ' => 'ᾁ',
-       'ᾊ' => 'ᾂ',
-       'ᾋ' => 'ᾃ',
-       'ᾌ' => 'ᾄ',
-       'ᾍ' => 'ᾅ',
-       'ᾎ' => 'ᾆ',
-       'ᾏ' => 'ᾇ',
-       'ᾘ' => 'ᾐ',
-       'ᾙ' => 'ᾑ',
-       'ᾚ' => 'ᾒ',
-       'ᾛ' => 'ᾓ',
-       'ᾜ' => 'ᾔ',
-       'ᾝ' => 'ᾕ',
-       'ᾞ' => 'ᾖ',
-       'ᾟ' => 'ᾗ',
-       'ᾨ' => 'ᾠ',
-       'ᾩ' => 'ᾡ',
-       'ᾪ' => 'ᾢ',
-       'ᾫ' => 'ᾣ',
-       'ᾬ' => 'ᾤ',
-       'ᾭ' => 'ᾥ',
-       'ᾮ' => 'ᾦ',
-       'ᾯ' => 'ᾧ',
-       'Ᾰ' => 'ᾰ',
-       'Ᾱ' => 'ᾱ',
-       'Ὰ' => 'ὰ',
-       'Ά' => 'ά',
-       'ᾼ' => 'ᾳ',
-       'Ὲ' => 'ὲ',
-       'Έ' => 'έ',
-       'Ὴ' => 'ὴ',
-       'Ή' => 'ή',
-       'ῌ' => 'ῃ',
-       'Ῐ' => 'ῐ',
-       'Ῑ' => 'ῑ',
-       'Ὶ' => 'ὶ',
-       'Ί' => 'ί',
-       'Ῠ' => 'ῠ',
-       'Ῡ' => 'ῡ',
-       'Ὺ' => 'ὺ',
-       'Ύ' => 'ύ',
-       'Ῥ' => 'ῥ',
-       'Ὸ' => 'ὸ',
-       'Ό' => 'ό',
-       'Ὼ' => 'ὼ',
-       'Ώ' => 'ώ',
-       'ῼ' => 'ῳ',
-       'Ω' => 'ω',
-       'K' => 'k',
-       'Å' => 'å',
-       'Ⅎ' => 'ⅎ',
-       'Ⅰ' => 'ⅰ',
-       'Ⅱ' => 'ⅱ',
-       'Ⅲ' => 'ⅲ',
-       'Ⅳ' => 'ⅳ',
-       'Ⅴ' => 'ⅴ',
-       'Ⅵ' => 'ⅵ',
-       'Ⅶ' => 'ⅶ',
-       'Ⅷ' => 'ⅷ',
-       'Ⅸ' => 'ⅸ',
-       'Ⅹ' => 'ⅹ',
-       'Ⅺ' => 'ⅺ',
-       'Ⅻ' => 'ⅻ',
-       'Ⅼ' => 'ⅼ',
-       'Ⅽ' => 'ⅽ',
-       'Ⅾ' => 'ⅾ',
-       'Ⅿ' => 'ⅿ',
-       'Ↄ' => 'ↄ',
-       'Ⓐ' => 'ⓐ',
-       'Ⓑ' => 'ⓑ',
-       'Ⓒ' => 'ⓒ',
-       'Ⓓ' => 'ⓓ',
-       'Ⓔ' => 'ⓔ',
-       'Ⓕ' => 'ⓕ',
-       'Ⓖ' => 'ⓖ',
-       'Ⓗ' => 'ⓗ',
-       'Ⓘ' => 'ⓘ',
-       'Ⓙ' => 'ⓙ',
-       'Ⓚ' => 'ⓚ',
-       'Ⓛ' => 'ⓛ',
-       'Ⓜ' => 'ⓜ',
-       'Ⓝ' => 'ⓝ',
-       'Ⓞ' => 'ⓞ',
-       'Ⓟ' => 'ⓟ',
-       'Ⓠ' => 'ⓠ',
-       'Ⓡ' => 'ⓡ',
-       'Ⓢ' => 'ⓢ',
-       'Ⓣ' => 'ⓣ',
-       'Ⓤ' => 'ⓤ',
-       'Ⓥ' => 'ⓥ',
-       'Ⓦ' => 'ⓦ',
-       'Ⓧ' => 'ⓧ',
-       'Ⓨ' => 'ⓨ',
-       'Ⓩ' => 'ⓩ',
-       'Ⰰ' => 'ⰰ',
-       'Ⰱ' => 'ⰱ',
-       'Ⰲ' => 'ⰲ',
-       'Ⰳ' => 'ⰳ',
-       'Ⰴ' => 'ⰴ',
-       'Ⰵ' => 'ⰵ',
-       'Ⰶ' => 'ⰶ',
-       'Ⰷ' => 'ⰷ',
-       'Ⰸ' => 'ⰸ',
-       'Ⰹ' => 'ⰹ',
-       'Ⰺ' => 'ⰺ',
-       'Ⰻ' => 'ⰻ',
-       'Ⰼ' => 'ⰼ',
-       'Ⰽ' => 'ⰽ',
-       'Ⰾ' => 'ⰾ',
-       'Ⰿ' => 'ⰿ',
-       'Ⱀ' => 'ⱀ',
-       'Ⱁ' => 'ⱁ',
-       'Ⱂ' => 'ⱂ',
-       'Ⱃ' => 'ⱃ',
-       'Ⱄ' => 'ⱄ',
-       'Ⱅ' => 'ⱅ',
-       'Ⱆ' => 'ⱆ',
-       'Ⱇ' => 'ⱇ',
-       'Ⱈ' => 'ⱈ',
-       'Ⱉ' => 'ⱉ',
-       'Ⱊ' => 'ⱊ',
-       'Ⱋ' => 'ⱋ',
-       'Ⱌ' => 'ⱌ',
-       'Ⱍ' => 'ⱍ',
-       'Ⱎ' => 'ⱎ',
-       'Ⱏ' => 'ⱏ',
-       'Ⱐ' => 'ⱐ',
-       'Ⱑ' => 'ⱑ',
-       'Ⱒ' => 'ⱒ',
-       'Ⱓ' => 'ⱓ',
-       'Ⱔ' => 'ⱔ',
-       'Ⱕ' => 'ⱕ',
-       'Ⱖ' => 'ⱖ',
-       'Ⱗ' => 'ⱗ',
-       'Ⱘ' => 'ⱘ',
-       'Ⱙ' => 'ⱙ',
-       'Ⱚ' => 'ⱚ',
-       'Ⱛ' => 'ⱛ',
-       'Ⱜ' => 'ⱜ',
-       'Ⱝ' => 'ⱝ',
-       'Ⱞ' => 'ⱞ',
-       'Ⱡ' => 'ⱡ',
-       'Ɫ' => 'ɫ',
-       'Ᵽ' => 'ᵽ',
-       'Ɽ' => 'ɽ',
-       'Ⱨ' => 'ⱨ',
-       'Ⱪ' => 'ⱪ',
-       'Ⱬ' => 'ⱬ',
-       'Ɑ' => 'ɑ',
-       'Ɱ' => 'ɱ',
-       'Ɐ' => 'ɐ',
-       'Ɒ' => 'ɒ',
-       'Ⱳ' => 'ⱳ',
-       'Ⱶ' => 'ⱶ',
-       'Ȿ' => 'ȿ',
-       'Ɀ' => 'ɀ',
-       'Ⲁ' => 'ⲁ',
-       'Ⲃ' => 'ⲃ',
-       'Ⲅ' => 'ⲅ',
-       'Ⲇ' => 'ⲇ',
-       'Ⲉ' => 'ⲉ',
-       'Ⲋ' => 'ⲋ',
-       'Ⲍ' => 'ⲍ',
-       'Ⲏ' => 'ⲏ',
-       'Ⲑ' => 'ⲑ',
-       'Ⲓ' => 'ⲓ',
-       'Ⲕ' => 'ⲕ',
-       'Ⲗ' => 'ⲗ',
-       'Ⲙ' => 'ⲙ',
-       'Ⲛ' => 'ⲛ',
-       'Ⲝ' => 'ⲝ',
-       'Ⲟ' => 'ⲟ',
-       'Ⲡ' => 'ⲡ',
-       'Ⲣ' => 'ⲣ',
-       'Ⲥ' => 'ⲥ',
-       'Ⲧ' => 'ⲧ',
-       'Ⲩ' => 'ⲩ',
-       'Ⲫ' => 'ⲫ',
-       'Ⲭ' => 'ⲭ',
-       'Ⲯ' => 'ⲯ',
-       'Ⲱ' => 'ⲱ',
-       'Ⲳ' => 'ⲳ',
-       'Ⲵ' => 'ⲵ',
-       'Ⲷ' => 'ⲷ',
-       'Ⲹ' => 'ⲹ',
-       'Ⲻ' => 'ⲻ',
-       'Ⲽ' => 'ⲽ',
-       'Ⲿ' => 'ⲿ',
-       'Ⳁ' => 'ⳁ',
-       'Ⳃ' => 'ⳃ',
-       'Ⳅ' => 'ⳅ',
-       'Ⳇ' => 'ⳇ',
-       'Ⳉ' => 'ⳉ',
-       'Ⳋ' => 'ⳋ',
-       'Ⳍ' => 'ⳍ',
-       'Ⳏ' => 'ⳏ',
-       'Ⳑ' => 'ⳑ',
-       'Ⳓ' => 'ⳓ',
-       'Ⳕ' => 'ⳕ',
-       'Ⳗ' => 'ⳗ',
-       'Ⳙ' => 'ⳙ',
-       'Ⳛ' => 'ⳛ',
-       'Ⳝ' => 'ⳝ',
-       'Ⳟ' => 'ⳟ',
-       'Ⳡ' => 'ⳡ',
-       'Ⳣ' => 'ⳣ',
-       'Ⳬ' => 'ⳬ',
-       'Ⳮ' => 'ⳮ',
-       'Ꙁ' => 'ꙁ',
-       'Ꙃ' => 'ꙃ',
-       'Ꙅ' => 'ꙅ',
-       'Ꙇ' => 'ꙇ',
-       'Ꙉ' => 'ꙉ',
-       'Ꙋ' => 'ꙋ',
-       'Ꙍ' => 'ꙍ',
-       'Ꙏ' => 'ꙏ',
-       'Ꙑ' => 'ꙑ',
-       'Ꙓ' => 'ꙓ',
-       'Ꙕ' => 'ꙕ',
-       'Ꙗ' => 'ꙗ',
-       'Ꙙ' => 'ꙙ',
-       'Ꙛ' => 'ꙛ',
-       'Ꙝ' => 'ꙝ',
-       'Ꙟ' => 'ꙟ',
-       'Ꙡ' => 'ꙡ',
-       'Ꙣ' => 'ꙣ',
-       'Ꙥ' => 'ꙥ',
-       'Ꙧ' => 'ꙧ',
-       'Ꙩ' => 'ꙩ',
-       'Ꙫ' => 'ꙫ',
-       'Ꙭ' => 'ꙭ',
-       'Ꚁ' => 'ꚁ',
-       'Ꚃ' => 'ꚃ',
-       'Ꚅ' => 'ꚅ',
-       'Ꚇ' => 'ꚇ',
-       'Ꚉ' => 'ꚉ',
-       'Ꚋ' => 'ꚋ',
-       'Ꚍ' => 'ꚍ',
-       'Ꚏ' => 'ꚏ',
-       'Ꚑ' => 'ꚑ',
-       'Ꚓ' => 'ꚓ',
-       'Ꚕ' => 'ꚕ',
-       'Ꚗ' => 'ꚗ',
-       'Ꜣ' => 'ꜣ',
-       'Ꜥ' => 'ꜥ',
-       'Ꜧ' => 'ꜧ',
-       'Ꜩ' => 'ꜩ',
-       'Ꜫ' => 'ꜫ',
-       'Ꜭ' => 'ꜭ',
-       'Ꜯ' => 'ꜯ',
-       'Ꜳ' => 'ꜳ',
-       'Ꜵ' => 'ꜵ',
-       'Ꜷ' => 'ꜷ',
-       'Ꜹ' => 'ꜹ',
-       'Ꜻ' => 'ꜻ',
-       'Ꜽ' => 'ꜽ',
-       'Ꜿ' => 'ꜿ',
-       'Ꝁ' => 'ꝁ',
-       'Ꝃ' => 'ꝃ',
-       'Ꝅ' => 'ꝅ',
-       'Ꝇ' => 'ꝇ',
-       'Ꝉ' => 'ꝉ',
-       'Ꝋ' => 'ꝋ',
-       'Ꝍ' => 'ꝍ',
-       'Ꝏ' => 'ꝏ',
-       'Ꝑ' => 'ꝑ',
-       'Ꝓ' => 'ꝓ',
-       'Ꝕ' => 'ꝕ',
-       'Ꝗ' => 'ꝗ',
-       'Ꝙ' => 'ꝙ',
-       'Ꝛ' => 'ꝛ',
-       'Ꝝ' => 'ꝝ',
-       'Ꝟ' => 'ꝟ',
-       'Ꝡ' => 'ꝡ',
-       'Ꝣ' => 'ꝣ',
-       'Ꝥ' => 'ꝥ',
-       'Ꝧ' => 'ꝧ',
-       'Ꝩ' => 'ꝩ',
-       'Ꝫ' => 'ꝫ',
-       'Ꝭ' => 'ꝭ',
-       'Ꝯ' => 'ꝯ',
-       'Ꝺ' => 'ꝺ',
-       'Ꝼ' => 'ꝼ',
-       'Ᵹ' => 'ᵹ',
-       'Ꝿ' => 'ꝿ',
-       'Ꞁ' => 'ꞁ',
-       'Ꞃ' => 'ꞃ',
-       'Ꞅ' => 'ꞅ',
-       'Ꞇ' => 'ꞇ',
-       'Ꞌ' => 'ꞌ',
-       'Ɥ' => 'ɥ',
-       'Ꞑ' => 'ꞑ',
-       'Ꞡ' => 'ꞡ',
-       'Ꞣ' => 'ꞣ',
-       'Ꞥ' => 'ꞥ',
-       'Ꞧ' => 'ꞧ',
-       'Ꞩ' => 'ꞩ',
-       'A' => 'a',
-       'B' => 'b',
-       'C' => 'c',
-       'D' => 'd',
-       'E' => 'e',
-       'F' => 'f',
-       'G' => 'g',
-       'H' => 'h',
-       'I' => 'i',
-       'J' => 'j',
-       'K' => 'k',
-       'L' => 'l',
-       'M' => 'm',
-       'N' => 'n',
-       'O' => 'o',
-       'P' => 'p',
-       'Q' => 'q',
-       'R' => 'r',
-       'S' => 's',
-       'T' => 't',
-       'U' => 'u',
-       'V' => 'v',
-       'W' => 'w',
-       'X' => 'x',
-       'Y' => 'y',
-       'Z' => 'z',
-       '𐐀' => '𐐨',
-       '𐐁' => '𐐩',
-       '𐐂' => '𐐪',
-       '𐐃' => '𐐫',
-       '𐐄' => '𐐬',
-       '𐐅' => '𐐭',
-       '𐐆' => '𐐮',
-       '𐐇' => '𐐯',
-       '𐐈' => '𐐰',
-       '𐐉' => '𐐱',
-       '𐐊' => '𐐲',
-       '𐐋' => '𐐳',
-       '𐐌' => '𐐴',
-       '𐐍' => '𐐵',
-       '𐐎' => '𐐶',
-       '𐐏' => '𐐷',
-       '𐐐' => '𐐸',
-       '𐐑' => '𐐹',
-       '𐐒' => '𐐺',
-       '𐐓' => '𐐻',
-       '𐐔' => '𐐼',
-       '𐐕' => '𐐽',
-       '𐐖' => '𐐾',
-       '𐐗' => '𐐿',
-       '𐐘' => '𐑀',
-       '𐐙' => '𐑁',
-       '𐐚' => '𐑂',
-       '𐐛' => '𐑃',
-       '𐐜' => '𐑄',
-       '𐐝' => '𐑅',
-       '𐐞' => '𐑆',
-       '𐐟' => '𐑇',
-       '𐐠' => '𐑈',
-       '𐐡' => '𐑉',
-       '𐐢' => '𐑊',
-       '𐐣' => '𐑋',
-       '𐐤' => '𐑌',
-       '𐐥' => '𐑍',
-       '𐐦' => '𐑎',
-       '𐐧' => '𐑏'
-);
diff --git a/includes/normal/Utf8CaseGenerate.php b/includes/normal/Utf8CaseGenerate.php
deleted file mode 100644 (file)
index adc3ef2..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-<?php
-/**
- * This script generates Utf8Case.php from the Unicode Character Database
- * and supplementary files.
- *
- * Copyright © 2004,2008 Brion Vibber <brion@pobox.com>
- * http://www.mediawiki.org/
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup UtfNormal
- */
-
-if( PHP_SAPI != 'cli' ) {
-       die( "Run me from the command line please.\n" );
-}
-
-require_once 'UtfNormalDefines.php';
-require_once 'UtfNormalUtil.php';
-
-$in = fopen("UnicodeData.txt", "rt" );
-if( !$in ) {
-       print "Can't open UnicodeData.txt for reading.\n";
-       print "If necessary, fetch this file from the internet:\n";
-       print "http://www.unicode.org/Public/UNIDATA/UnicodeData.txt\n";
-       exit(-1);
-}
-$wikiUpperChars = array();
-$wikiLowerChars = array();
-
-print "Reading character definitions...\n";
-while( false !== ($line = fgets( $in ) ) ) {
-       $columns = explode(';', $line);
-       $codepoint = $columns[0];
-       $name = $columns[1];
-       $simpleUpper = $columns[12];
-       $simpleLower = $columns[13];
-
-       $source = codepointToUtf8( hexdec( $codepoint ) );
-       if( $simpleUpper ) {
-               $wikiUpperChars[$source] = codepointToUtf8( hexdec( $simpleUpper ) );
-       }
-       if( $simpleLower ) {
-               $wikiLowerChars[$source] = codepointToUtf8( hexdec( $simpleLower ) );
-       }
-}
-fclose( $in );
-
-$out = fopen( "Utf8Case.php", "wt" );
-if( $out ) {
-       $outUpperChars = escapeArray( $wikiUpperChars );
-       $outLowerChars = escapeArray( $wikiLowerChars );
-       $outdata = "<" . "?php
-/**
- * Simple 1:1 upper/lowercase switching arrays for utf-8 text.
- * Won't get context-sensitive things yet.
- *
- * Hack for bugs in ucfirst() and company
- *
- * These are pulled from memcached if possible, as this is faster than filling
- * up a big array manually.
- *
- * @file
- * @ingroup Language
- */
-
-/**
- * Translation array to get upper case character
- */
-\$wikiUpperChars = $outUpperChars;
-
-/**
- * Translation array to get lower case character
- */
-\$wikiLowerChars = $outLowerChars;\n";
-       fputs( $out, $outdata );
-       fclose( $out );
-       print "Wrote out Utf8Case.php\n";
-} else {
-       print "Can't create file Utf8Case.php\n";
-       exit(-1);
-}
-
-
-function escapeArray( $arr ) {
-       return "array(\n" .
-               implode( ",\n",
-                       array_map( "escapeLine",
-                               array_keys( $arr ),
-                               array_values( $arr ) ) ) .
-               "\n)";
-}
-
-function escapeLine( $key, $val ) {
-       $encKey = escapeSingleString( $key );
-       $encVal = escapeSingleString( $val );
-       return "\t'$encKey' => '$encVal'";
-}
diff --git a/includes/objectcache/DBABagOStuff.php b/includes/objectcache/DBABagOStuff.php
deleted file mode 100644 (file)
index c82b3aa..0000000
+++ /dev/null
@@ -1,307 +0,0 @@
-<?php
-/**
- * Object caching using DBA backend.
- *
- * 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 Cache
- */
-
-/**
- * Cache that uses DBA as a backend.
- * Slow due to the need to constantly open and close the file to avoid holding
- * writer locks. Intended for development use only,  as a memcached workalike
- * for systems that don't have it.
- *
- * On construction you can pass array( 'dir' => '/some/path' ); as a parameter
- * to override the default DBA files directory (wfTempDir()).
- *
- * @ingroup Cache
- */
-class DBABagOStuff extends BagOStuff {
-       var $mHandler, $mFile, $mReader, $mWriter, $mDisabled;
-
-       /**
-        * @param $params array
-        */
-       public function __construct( $params ) {
-               global $wgDBAhandler;
-
-               if ( !isset( $params['dir'] ) ) {
-                       $params['dir'] = wfTempDir();
-               }
-
-               $this->mFile = $params['dir'] . '/mw-cache-' . wfWikiID() . '.db';
-               wfDebug( __CLASS__ . ": using cache file {$this->mFile}\n" );
-               $this->mHandler = $wgDBAhandler;
-       }
-
-       /**
-        * Encode value and expiry for storage
-        * @param $value
-        * @param $expiry
-        *
-        * @return string
-        */
-       protected function encode( $value, $expiry ) {
-               # Convert to absolute time
-               $expiry = $this->convertExpiry( $expiry );
-
-               return sprintf( '%010u', intval( $expiry ) ) . ' ' . serialize( $value );
-       }
-
-       /**
-        * @param $blob string
-        * @return array list containing value first and expiry second
-        */
-       protected function decode( $blob ) {
-               if ( !is_string( $blob ) ) {
-                       return array( false, 0 );
-               } else {
-                       return array(
-                               unserialize( substr( $blob, 11 ) ),
-                               intval( substr( $blob, 0, 10 ) )
-                       );
-               }
-       }
-
-       /**
-        * @return resource
-        */
-       protected function getReader() {
-               if ( file_exists( $this->mFile ) ) {
-                       $handle = dba_open( $this->mFile, 'rl', $this->mHandler );
-               } else {
-                       $handle = $this->getWriter();
-               }
-
-               if ( !$handle ) {
-                       wfDebug( "Unable to open DBA cache file {$this->mFile}\n" );
-               }
-
-               return $handle;
-       }
-
-       /**
-        * @return resource
-        */
-       protected function getWriter() {
-               $handle = dba_open( $this->mFile, 'cl', $this->mHandler );
-
-               if ( !$handle ) {
-                       wfDebug( "Unable to open DBA cache file {$this->mFile}\n" );
-               }
-
-               return $handle;
-       }
-
-       /**
-        * @param $key string
-        * @param $casToken[optional] mixed
-        * @return mixed
-        */
-       public function get( $key, &$casToken = null ) {
-               wfProfileIn( __METHOD__ );
-               wfDebug( __METHOD__ . "($key)\n" );
-
-               $handle = $this->getReader();
-               if ( !$handle ) {
-                       wfProfileOut( __METHOD__ );
-                       return false;
-               }
-
-               $val = dba_fetch( $key, $handle );
-               list( $val, $expiry ) = $this->decode( $val );
-
-               # Must close ASAP because locks are held
-               dba_close( $handle );
-
-               if ( $val !== false && $expiry && $expiry < time() ) {
-                       # Key is expired, delete it
-                       $handle = $this->getWriter();
-                       dba_delete( $key, $handle );
-                       dba_close( $handle );
-                       wfDebug( __METHOD__ . ": $key expired\n" );
-                       $val = false;
-               }
-
-               $casToken = $val;
-
-               wfProfileOut( __METHOD__ );
-
-               return $val;
-       }
-
-       /**
-        * @param $key string
-        * @param $value mixed
-        * @param $exptime int
-        * @return bool
-        */
-       public function set( $key, $value, $exptime = 0 ) {
-               wfProfileIn( __METHOD__ );
-               wfDebug( __METHOD__ . "($key)\n" );
-
-               $blob = $this->encode( $value, $exptime );
-
-               $handle = $this->getWriter();
-               if ( !$handle ) {
-                       wfProfileOut( __METHOD__ );
-                       return false;
-               }
-
-               $ret = dba_replace( $key, $blob, $handle );
-               dba_close( $handle );
-
-               wfProfileOut( __METHOD__ );
-               return $ret;
-       }
-
-       /**
-        * @param $casToken mixed
-        * @param $key string
-        * @param $value mixed
-        * @param $exptime int
-        * @return bool
-        */
-       public function cas( $casToken, $key, $value, $exptime = 0 ) {
-               wfProfileIn( __METHOD__ );
-               wfDebug( __METHOD__ . "($key)\n" );
-
-               $blob = $this->encode( $value, $exptime );
-
-               $handle = $this->getWriter();
-               if ( !$handle ) {
-                       wfProfileOut( __METHOD__ );
-                       return false;
-               }
-
-               // DBA is locked to any other write connection, so we can safely
-               // compare the current & previous value before saving new value
-               $val = dba_fetch( $key, $handle );
-               list( $val, $exptime ) = $this->decode( $val );
-               if ( $casToken !== $val ) {
-                       dba_close( $handle );
-                       wfProfileOut( __METHOD__ );
-                       return false;
-               }
-
-               $ret = dba_replace( $key, $blob, $handle );
-               dba_close( $handle );
-
-               wfProfileOut( __METHOD__ );
-               return $ret;
-       }
-
-       /**
-        * @param $key string
-        * @param $time int
-        * @return bool
-        */
-       public function delete( $key, $time = 0 ) {
-               wfProfileIn( __METHOD__ );
-               wfDebug( __METHOD__ . "($key)\n" );
-
-               $handle = $this->getWriter();
-               if ( !$handle ) {
-                       wfProfileOut( __METHOD__ );
-                       return false;
-               }
-
-               $ret = !dba_exists( $key, $handle ) || dba_delete( $key, $handle );
-               dba_close( $handle );
-
-               wfProfileOut( __METHOD__ );
-               return $ret;
-       }
-
-       /**
-        * @param $key string
-        * @param $value mixed
-        * @param $exptime int
-        * @return bool
-        */
-       public function add( $key, $value, $exptime = 0 ) {
-               wfProfileIn( __METHOD__ );
-
-               $blob = $this->encode( $value, $exptime );
-
-               $handle = $this->getWriter();
-
-               if ( !$handle ) {
-                       wfProfileOut( __METHOD__ );
-                       return false;
-               }
-
-               $ret = dba_insert( $key, $blob, $handle );
-
-               # Insert failed, check to see if it failed due to an expired key
-               if ( !$ret ) {
-                       list( , $expiry ) = $this->decode( dba_fetch( $key, $handle ) );
-
-                       if ( $expiry && $expiry < time() ) {
-                               # Yes expired, delete and try again
-                               dba_delete( $key, $handle );
-                               $ret = dba_insert( $key, $blob, $handle );
-                               # This time if it failed then it will be handled by the caller like any other race
-                       }
-               }
-
-               dba_close( $handle );
-
-               wfProfileOut( __METHOD__ );
-               return $ret;
-       }
-
-       /**
-        * @param $key string
-        * @param $step integer
-        * @return integer|bool
-        */
-       public function incr( $key, $step = 1 ) {
-               wfProfileIn( __METHOD__ );
-
-               $handle = $this->getWriter();
-
-               if ( !$handle ) {
-                       wfProfileOut( __METHOD__ );
-                       return false;
-               }
-
-               list( $value, $expiry ) = $this->decode( dba_fetch( $key, $handle ) );
-               if ( $value !== false ) {
-                       if ( $expiry && $expiry < time() ) {
-                               # Key is expired, delete it
-                               dba_delete( $key, $handle );
-                               wfDebug( __METHOD__ . ": $key expired\n" );
-                               $value = false;
-                       } else {
-                               $value += $step;
-                               $blob = $this->encode( $value, $expiry );
-
-                               $ret = dba_replace( $key, $blob, $handle );
-                               $value = $ret ? $value : false;
-                       }
-               }
-
-               dba_close( $handle );
-
-               wfProfileOut( __METHOD__ );
-
-               return ( $value === false ) ? false : (int)$value;
-       }
-}
diff --git a/includes/objectcache/EhcacheBagOStuff.php b/includes/objectcache/EhcacheBagOStuff.php
deleted file mode 100644 (file)
index 960668f..0000000
+++ /dev/null
@@ -1,324 +0,0 @@
-<?php
-/**
- * Object caching using the Ehcache RESTful web service.
- *
- * 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 Cache
- */
-
-/**
- * Client for the Ehcache RESTful web service - http://ehcache.org/documentation/cache_server.html
- * TODO: Simplify configuration and add to the installer.
- *
- * @ingroup Cache
- */
-class EhcacheBagOStuff extends BagOStuff {
-       var $servers, $cacheName, $connectTimeout, $timeout, $curlOptions,
-               $requestData, $requestDataPos;
-
-       var $curls = array();
-
-       /**
-        * @param $params array
-        * @throws MWException
-        */
-       function __construct( $params ) {
-               if ( !defined( 'CURLOPT_TIMEOUT_MS' ) ) {
-                       throw new MWException( __CLASS__ . ' requires curl version 7.16.2 or later.' );
-               }
-               if ( !extension_loaded( 'zlib' ) ) {
-                       throw new MWException( __CLASS__ . ' requires the zlib extension' );
-               }
-               if ( !isset( $params['servers'] ) ) {
-                       throw new MWException( __METHOD__ . ': servers parameter is required' );
-               }
-               $this->servers = $params['servers'];
-               $this->cacheName = isset( $params['cache'] ) ? $params['cache'] : 'mw';
-               $this->connectTimeout = isset( $params['connectTimeout'] )
-                       ? $params['connectTimeout'] : 1;
-               $this->timeout = isset( $params['timeout'] ) ? $params['timeout'] : 1;
-               $this->curlOptions = array(
-                       CURLOPT_CONNECTTIMEOUT_MS => intval( $this->connectTimeout * 1000 ),
-                       CURLOPT_TIMEOUT_MS => intval( $this->timeout * 1000 ),
-                       CURLOPT_RETURNTRANSFER => 1,
-                       CURLOPT_CUSTOMREQUEST => 'GET',
-                       CURLOPT_POST => 0,
-                       CURLOPT_POSTFIELDS => '',
-                       CURLOPT_HTTPHEADER => array(),
-               );
-       }
-
-       /**
-        * @param $key string
-        * @param $casToken[optional] mixed
-        * @return bool|mixed
-        */
-       public function get( $key, &$casToken = null ) {
-               wfProfileIn( __METHOD__ );
-               $response = $this->doItemRequest( $key );
-               if ( !$response || $response['http_code'] == 404 ) {
-                       wfProfileOut( __METHOD__ );
-                       return false;
-               }
-               if ( $response['http_code'] >= 300 ) {
-                       wfDebug( __METHOD__ . ": GET failure, got HTTP {$response['http_code']}\n" );
-                       wfProfileOut( __METHOD__ );
-                       return false;
-               }
-               $body = $response['body'];
-               $type = $response['content_type'];
-               if ( $type == 'application/vnd.php.serialized+deflate' ) {
-                       $body = gzinflate( $body );
-                       if ( !$body ) {
-                               wfDebug( __METHOD__ . ": error inflating $key\n" );
-                               wfProfileOut( __METHOD__ );
-                               return false;
-                       }
-                       $data = unserialize( $body );
-               } elseif ( $type == 'application/vnd.php.serialized' ) {
-                       $data = unserialize( $body );
-               } else {
-                       wfDebug( __METHOD__ . ": unknown content type \"$type\"\n" );
-                       wfProfileOut( __METHOD__ );
-                       return false;
-               }
-
-               $casToken = $body;
-
-               wfProfileOut( __METHOD__ );
-               return $data;
-       }
-
-       /**
-        * @param $key string
-        * @param $value mixed
-        * @param $expiry int
-        * @return bool
-        */
-       public function set( $key, $value, $expiry = 0 ) {
-               wfProfileIn( __METHOD__ );
-               $expiry = $this->convertExpiry( $expiry );
-               $ttl = $expiry ? $expiry - time() : 2147483647;
-               $blob = serialize( $value );
-               if ( strlen( $blob ) > 100 ) {
-                       $blob = gzdeflate( $blob );
-                       $contentType = 'application/vnd.php.serialized+deflate';
-               } else {
-                       $contentType = 'application/vnd.php.serialized';
-               }
-
-               $code = $this->attemptPut( $key, $blob, $contentType, $ttl );
-
-               if ( $code == 404 ) {
-                       // Maybe the cache does not exist yet, let's try creating it
-                       if ( !$this->createCache( $key ) ) {
-                               wfDebug( __METHOD__ . ": cache creation failed\n" );
-                               wfProfileOut( __METHOD__ );
-                               return false;
-                       }
-                       $code = $this->attemptPut( $key, $blob, $contentType, $ttl );
-               }
-
-               $result = false;
-               if ( !$code ) {
-                       wfDebug( __METHOD__ . ": PUT failure for key $key\n" );
-               } elseif ( $code >= 300 ) {
-                       wfDebug( __METHOD__ . ": PUT failure for key $key: HTTP $code\n" );
-               } else {
-                       $result = true;
-               }
-
-               wfProfileOut( __METHOD__ );
-               return $result;
-       }
-
-       /**
-        * @param $casToken mixed
-        * @param $key string
-        * @param $value mixed
-        * @param $exptime int
-        * @return bool
-        */
-       public function cas( $casToken, $key, $value, $exptime = 0 ) {
-               // Not sure if we can implement CAS for ehcache. There appears to be CAS-support per
-               // http://ehcache.org/documentation/get-started/consistency-options#cas-cache-operations,
-               // but I can't find any docs for our current implementation.
-               throw new MWException( "CAS is not implemented in " . __CLASS__ );
-       }
-
-       /**
-        * @param $key string
-        * @param $time int
-        * @return bool
-        */
-       public function delete( $key, $time = 0 ) {
-               wfProfileIn( __METHOD__ );
-               $response = $this->doItemRequest( $key,
-                       array( CURLOPT_CUSTOMREQUEST => 'DELETE' ) );
-               $code = isset( $response['http_code'] ) ? $response['http_code'] : 0;
-               if ( !$response || ( $code != 404 && $code >= 300 ) ) {
-                       wfDebug( __METHOD__ . ": DELETE failure for key $key\n" );
-                       $result = false;
-               } else {
-                       $result = true;
-               }
-               wfProfileOut( __METHOD__ );
-               return $result;
-       }
-
-       /**
-        * @see BagOStuff::merge()
-        * @return bool success
-        */
-       public function merge( $key, closure $callback, $exptime = 0, $attempts = 10 ) {
-               return $this->mergeViaLock( $key, $callback, $exptime, $attempts );
-       }
-
-       /**
-        * @param $key string
-        * @return string
-        */
-       protected function getCacheUrl( $key ) {
-               if ( count( $this->servers ) == 1 ) {
-                       $server = reset( $this->servers );
-               } else {
-                       // Use consistent hashing
-                       $hashes = array();
-                       foreach ( $this->servers as $server ) {
-                               $hashes[$server] = md5( $server . '/' . $key );
-                       }
-                       asort( $hashes );
-                       reset( $hashes );
-                       $server = key( $hashes );
-               }
-               return "http://$server/ehcache/rest/{$this->cacheName}";
-       }
-
-       /**
-        * Get a cURL handle for the given cache URL.
-        * We cache the handles to allow keepalive.
-        */
-       protected function getCurl( $cacheUrl ) {
-               if ( !isset( $this->curls[$cacheUrl] ) ) {
-                       $this->curls[$cacheUrl] = curl_init();
-               }
-               return $this->curls[$cacheUrl];
-       }
-
-       /**
-        * @param $key string
-        * @param $data
-        * @param $type
-        * @param $ttl
-        * @return int
-        */
-       protected function attemptPut( $key, $data, $type, $ttl ) {
-               // In initial benchmarking, it was 30 times faster to use CURLOPT_POST
-               // than CURLOPT_UPLOAD with CURLOPT_READFUNCTION. This was because
-               // CURLOPT_UPLOAD was pushing the request headers first, then waiting
-               // for an ACK packet, then sending the data, whereas CURLOPT_POST just
-               // sends the headers and the data in a single send().
-               $response = $this->doItemRequest( $key,
-                       array(
-                               CURLOPT_POST => 1,
-                               CURLOPT_CUSTOMREQUEST => 'PUT',
-                               CURLOPT_POSTFIELDS => $data,
-                               CURLOPT_HTTPHEADER => array(
-                                       'Content-Type: ' . $type,
-                                       'ehcacheTimeToLiveSeconds: ' . $ttl
-                               )
-                       )
-               );
-               if ( !$response ) {
-                       return 0;
-               } else {
-                       return $response['http_code'];
-               }
-       }
-
-       /**
-        * @param $key string
-        * @return bool
-        */
-       protected function createCache( $key ) {
-               wfDebug( __METHOD__ . ": creating cache for $key\n" );
-               $response = $this->doCacheRequest( $key,
-                       array(
-                               CURLOPT_POST => 1,
-                               CURLOPT_CUSTOMREQUEST => 'PUT',
-                               CURLOPT_POSTFIELDS => '',
-                       ) );
-               if ( !$response ) {
-                       wfDebug( __CLASS__ . ": failed to create cache for $key\n" );
-                       return false;
-               }
-               return ( $response['http_code'] == 201 /* created */
-                       || $response['http_code'] == 409 /* already there */ );
-       }
-
-       /**
-        * @param $key string
-        * @param $curlOptions array
-        * @return array|bool|mixed
-        */
-       protected function doCacheRequest( $key, $curlOptions = array() ) {
-               $cacheUrl = $this->getCacheUrl( $key );
-               $curl = $this->getCurl( $cacheUrl );
-               return $this->doRequest( $curl, $cacheUrl, $curlOptions );
-       }
-
-       /**
-        * @param $key string
-        * @param $curlOptions array
-        * @return array|bool|mixed
-        */
-       protected function doItemRequest( $key, $curlOptions = array() ) {
-               $cacheUrl = $this->getCacheUrl( $key );
-               $curl = $this->getCurl( $cacheUrl );
-               $url = $cacheUrl . '/' . rawurlencode( $key );
-               return $this->doRequest( $curl, $url, $curlOptions );
-       }
-
-       /**
-        * @param $curl
-        * @param $url string
-        * @param $curlOptions array
-        * @return array|bool|mixed
-        * @throws MWException
-        */
-       protected function doRequest( $curl, $url, $curlOptions = array() ) {
-               if ( array_diff_key( $curlOptions, $this->curlOptions ) ) {
-                       // var_dump( array_diff_key( $curlOptions, $this->curlOptions ) );
-                       throw new MWException( __METHOD__ . ": to prevent options set in one doRequest() " .
-                               "call from affecting subsequent doRequest() calls, only options listed " .
-                               "in \$this->curlOptions may be specified in the \$curlOptions parameter." );
-               }
-               $curlOptions += $this->curlOptions;
-               $curlOptions[CURLOPT_URL] = $url;
-
-               curl_setopt_array( $curl, $curlOptions );
-               $result = curl_exec( $curl );
-               if ( $result === false ) {
-                       wfDebug( __CLASS__ . ": curl error: " . curl_error( $curl ) . "\n" );
-                       return false;
-               }
-               $info = curl_getinfo( $curl );
-               $info['body'] = $result;
-               return $info;
-       }
-}
index d061eff..bc5167d 100644 (file)
@@ -64,7 +64,7 @@ class HashBagOStuff extends BagOStuff {
                        return false;
                }
 
-               $casToken = $this->bag[$key][0];
+               $casToken = serialize( $this->bag[$key][0] );
 
                return $this->bag[$key][0];
        }
@@ -88,7 +88,7 @@ class HashBagOStuff extends BagOStuff {
         * @return bool
         */
        function cas( $casToken, $key, $value, $exptime = 0 ) {
-               if ( $this->get( $key ) === $casToken ) {
+               if ( serialize( $this->get( $key ) ) === $casToken ) {
                        return $this->set( $key, $value, $exptime );
                }
 
index adcf762..3c97480 100644 (file)
@@ -79,12 +79,13 @@ class RedisBagOStuff extends BagOStuff {
                        return false;
                }
                try {
-                       $result = $this->unserialize( $conn->get( $key ) );
+                       $value = $conn->get( $key );
+                       $casToken = $value;
+                       $result = $this->unserialize( $value );
                } catch ( RedisException $e ) {
                        $result = false;
                        $this->handleException( $server, $conn, $e );
                }
-               $casToken = $result;
 
                $this->logRequest( 'get', $key, $server, $result );
                return $result;
@@ -125,7 +126,7 @@ class RedisBagOStuff extends BagOStuff {
                try {
                        $conn->watch( $key );
 
-                       if ( $this->get( $key ) !== $casToken ) {
+                       if ( $this->serialize( $this->get( $key ) ) !== $casToken ) {
                                $conn->unwatch();
                                return false;
                        }
index 250442c..35e8bf8 100644 (file)
@@ -402,11 +402,12 @@ class CoreParserFunctions {
         * @return boolean true on successful match
         */
        private static function matchAgainstMagicword( $magicword, $value ) {
-               if ( strval( $value ) === '' ) {
+               $value = trim( strval( $value ) );
+               if ( $value === '' ) {
                        return false;
                }
                $mwObject = MagicWord::get( $magicword );
-               return $mwObject->match( $value );
+               return $mwObject->matchStartToEnd( $value );
        }
 
        static function formatRaw( $num, $raw ) {
@@ -703,7 +704,10 @@ class CoreParserFunctions {
        }
 
        /**
-        * Returns the requested protection level for the current page
+        * Returns the requested protection level for the current page. This
+        * is an expensive parser function and can't be called too many times
+        * per page, unless the protection levels for the given title have
+        * already been retrieved
         *
         * @param Parser $parser
         * @param string $type
@@ -716,10 +720,13 @@ class CoreParserFunctions {
                if ( !( $titleObject instanceof Title ) ) {
                        $titleObject = $parser->mTitle;
                }
-               $restrictions = $titleObject->getRestrictions( strtolower( $type ) );
-               # Title::getRestrictions returns an array, its possible it may have
-               # multiple values in the future
-               return implode( $restrictions, ',' );
+               if ( $titleObject->areRestrictionsLoaded() || $parser->incrementExpensiveFunctionCount() ) {
+                       $restrictions = $titleObject->getRestrictions( strtolower( $type ) );
+                       # Title::getRestrictions returns an array, its possible it may have
+                       # multiple values in the future
+                       return implode( $restrictions, ',' );
+               }
+               return '';
        }
 
        /**
@@ -985,10 +992,34 @@ class CoreParserFunctions {
                // Use title from parser to have correct pageid after edit
                if ( $t->equals( $parser->getTitle() ) ) {
                        $t = $parser->getTitle();
+                       return $t->getArticleID();
+               }
+
+               // These can't have ids
+               if ( !$t->canExist() || $t->isExternal() ) {
+                       return 0;
+               }
+
+               // Check the link cache, maybe something already looked it up.
+               $linkCache = LinkCache::singleton();
+               $pdbk = $t->getPrefixedDBkey();
+               $id = $linkCache->getGoodLinkID( $pdbk );
+               if ( $id != 0 ) {
+                       $parser->mOutput->addLink( $t, $id );
+                       return $id;
+               }
+               if ( $linkCache->isBadLink( $pdbk ) ) {
+                       $parser->mOutput->addLink( $t, 0 );
+                       return $id;
                }
-               // fetch pageid from cache/database and return the value
-               $pageid = $t->getArticleID();
-               return $pageid ? $pageid : '';
+
+               // We need to load it from the DB, so mark expensive
+               if ( $parser->incrementExpensiveFunctionCount() ) {
+                       $id = $t->getArticleID();
+                       $parser->mOutput->addLink( $t, $id );
+                       return $id;
+               }
+               return null;
        }
 
        /**
@@ -1122,7 +1153,8 @@ class CoreParserFunctions {
        /**
         * Returns the sources of any cascading protection acting on a specified page.
         * Pages will not return their own title unless they transclude themselves.
-        * This is an expensive parser function and can't be called too many times per page.
+        * This is an expensive parser function and can't be called too many times per page,
+        * unless cascading protection sources for the page have already been loaded.
         *
         * @param Parser $parser
         * @param string $title
@@ -1135,15 +1167,17 @@ class CoreParserFunctions {
                if ( !( $titleObject instanceof Title ) ) {
                        $titleObject = $parser->mTitle;
                }
-               $names = array();
-               if ( $parser->incrementExpensiveFunctionCount() ) {
+               if ( $titleObject->areCascadeProtectionSourcesLoaded()
+                       || $parser->incrementExpensiveFunctionCount()
+               ) {
+                       $names = array();
                        $sources = $titleObject->getCascadeProtectionSources();
                        foreach ( $sources[0] as $sourceTitle ) {
                                $names[] = $sourceTitle->getPrefixedText();
                        }
+                       return implode( $names, '|' );
                }
-
-               return implode( $names, '|' );
+               return '';
        }
 
 }
index 32b16aa..dbfab34 100644 (file)
@@ -206,6 +206,9 @@ class MWTidy {
                $process = proc_open(
                        "$wgTidyBin -config $wgTidyConf $wgTidyOpts$opts", $descriptorspec, $pipes );
 
+               //NOTE: At least on linux, the process will be created even if tidy is not installed.
+               //      This means that missing tidy will be treated as a validation failure.
+
                if ( is_resource( $process ) ) {
                        // Theoretically, this style of communication could cause a deadlock
                        // here. If the stdout buffer fills up, then writes to stdin could
index 94d39a5..e3a10ab 100644 (file)
@@ -762,18 +762,22 @@ class SearchResult {
        /**
         * @var Revision
         */
-       var $mRevision = null;
-       var $mImage = null;
+       protected $mRevision = null;
+
+       /**
+        * @var File
+        */
+       protected $mImage = null;
 
        /**
         * @var Title
         */
-       var $mTitle;
+       protected $mTitle;
 
        /**
         * @var String
         */
-       var $mText;
+       protected $mText;
 
        /**
         * Return a new SearchResult and initializes it with a title.
@@ -840,10 +844,7 @@ class SearchResult {
         * @return Boolean
         */
        function isBrokenTitle() {
-               if ( is_null( $this->mTitle ) ) {
-                       return true;
-               }
-               return false;
+               return is_null( $this->mTitle );
        }
 
        /**
@@ -862,6 +863,14 @@ class SearchResult {
                return $this->mTitle;
        }
 
+       /**
+        * Get the file for this page, if one exists
+        * @return File|null
+        */
+       function getFile() {
+               return $this->mImage;
+       }
+
        /**
         * @return float|null if not supported
         */
@@ -979,6 +988,13 @@ class SearchResult {
        function getInterwikiPrefix() {
                return '';
        }
+
+       /**
+        * Did this match file contents (eg: PDF/DJVU)?
+        */
+       function isFileMatch() {
+               return false;
+       }
 }
 /**
  * A SearchResultSet wrapper for SearchEngine::getNearMatch
diff --git a/includes/specialpage/SpecialPageFactory.php b/includes/specialpage/SpecialPageFactory.php
new file mode 100644 (file)
index 0000000..dcf5f67
--- /dev/null
@@ -0,0 +1,591 @@
+<?php
+/**
+ * Factory for handling the special page list and generating SpecialPage objects.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup SpecialPage
+ * @defgroup SpecialPage SpecialPage
+ */
+
+/**
+ * Factory for handling the special page list and generating SpecialPage objects.
+ *
+ * To add a special page in an extension, add to $wgSpecialPages either
+ * an object instance or an array containing the name and constructor
+ * parameters. The latter is preferred for performance reasons.
+ *
+ * The object instantiated must be either an instance of SpecialPage or a
+ * sub-class thereof. It must have an execute() method, which sends the HTML
+ * for the special page to $wgOut. The parent class has an execute() method
+ * which distributes the call to the historical global functions. Additionally,
+ * execute() also checks if the user has the necessary access privileges
+ * and bails out if not.
+ *
+ * To add a core special page, use the similar static list in
+ * SpecialPageFactory::$list. To remove a core static special page at runtime, use
+ * a SpecialPage_initList hook.
+ *
+ * @ingroup SpecialPage
+ * @since 1.17
+ */
+class SpecialPageFactory {
+       /**
+        * List of special page names to the subclass of SpecialPage which handles them.
+        */
+       private static $list = array(
+               // Maintenance Reports
+               'BrokenRedirects'           => 'BrokenRedirectsPage',
+               'Deadendpages'              => 'DeadendpagesPage',
+               'DoubleRedirects'           => 'DoubleRedirectsPage',
+               'Longpages'                 => 'LongpagesPage',
+               'Ancientpages'              => 'AncientpagesPage',
+               'Lonelypages'               => 'LonelypagesPage',
+               'Fewestrevisions'           => 'FewestrevisionsPage',
+               'Withoutinterwiki'          => 'WithoutinterwikiPage',
+               'Protectedpages'            => 'SpecialProtectedpages',
+               'Protectedtitles'           => 'SpecialProtectedtitles',
+               'Shortpages'                => 'ShortpagesPage',
+               'Uncategorizedcategories'   => 'UncategorizedcategoriesPage',
+               'Uncategorizedimages'       => 'UncategorizedimagesPage',
+               'Uncategorizedpages'        => 'UncategorizedpagesPage',
+               'Uncategorizedtemplates'    => 'UncategorizedtemplatesPage',
+               'Unusedcategories'          => 'UnusedcategoriesPage',
+               'Unusedimages'              => 'UnusedimagesPage',
+               'Unusedtemplates'           => 'UnusedtemplatesPage',
+               'Unwatchedpages'            => 'UnwatchedpagesPage',
+               'Wantedcategories'          => 'WantedcategoriesPage',
+               'Wantedfiles'               => 'WantedfilesPage',
+               'Wantedpages'               => 'WantedpagesPage',
+               'Wantedtemplates'           => 'WantedtemplatesPage',
+
+               // List of pages
+               'Allpages'                  => 'SpecialAllpages',
+               'Prefixindex'               => 'SpecialPrefixindex',
+               'Categories'                => 'SpecialCategories',
+               'Listredirects'             => 'ListredirectsPage',
+               'PagesWithProp'             => 'SpecialPagesWithProp',
+
+               // Login/create account
+               'Userlogin'                 => 'LoginForm',
+               'CreateAccount'             => 'SpecialCreateAccount',
+
+               // Users and rights
+               'Block'                     => 'SpecialBlock',
+               'Unblock'                   => 'SpecialUnblock',
+               'BlockList'                 => 'SpecialBlockList',
+               'ChangePassword'            => 'SpecialChangePassword',
+               'PasswordReset'             => 'SpecialPasswordReset',
+               'DeletedContributions'      => 'DeletedContributionsPage',
+               'Preferences'               => 'SpecialPreferences',
+               'ResetTokens'               => 'SpecialResetTokens',
+               'Contributions'             => 'SpecialContributions',
+               'Listgrouprights'           => 'SpecialListGroupRights',
+               'Listusers'                 => 'SpecialListUsers',
+               'Listadmins'                => 'SpecialListAdmins',
+               'Listbots'                  => 'SpecialListBots',
+               'Userrights'                => 'UserrightsPage',
+               'EditWatchlist'             => 'SpecialEditWatchlist',
+
+               // Recent changes and logs
+               'Newimages'                 => 'SpecialNewFiles',
+               'Log'                       => 'SpecialLog',
+               'Watchlist'                 => 'SpecialWatchlist',
+               'Newpages'                  => 'SpecialNewpages',
+               'Recentchanges'             => 'SpecialRecentChanges',
+               'Recentchangeslinked'       => 'SpecialRecentChangesLinked',
+               'Tags'                      => 'SpecialTags',
+
+               // Media reports and uploads
+               'Listfiles'                 => 'SpecialListFiles',
+               'Filepath'                  => 'SpecialFilepath',
+               'MIMEsearch'                => 'MIMEsearchPage',
+               'FileDuplicateSearch'       => 'FileDuplicateSearchPage',
+               'Upload'                    => 'SpecialUpload',
+               'UploadStash'               => 'SpecialUploadStash',
+
+               // Data and tools
+               'Statistics'                => 'SpecialStatistics',
+               'Allmessages'               => 'SpecialAllmessages',
+               'Version'                   => 'SpecialVersion',
+               'Lockdb'                    => 'SpecialLockdb',
+               'Unlockdb'                  => 'SpecialUnlockdb',
+
+               // Redirecting special pages
+               'LinkSearch'                => 'LinkSearchPage',
+               'Randompage'                => 'Randompage',
+               'RandomInCategory'          => 'SpecialRandomInCategory',
+               'Randomredirect'            => 'SpecialRandomredirect',
+
+               // High use pages
+               'Mostlinkedcategories'      => 'MostlinkedCategoriesPage',
+               'Mostimages'                => 'MostimagesPage',
+               'Mostinterwikis'            => 'MostinterwikisPage',
+               'Mostlinked'                => 'MostlinkedPage',
+               'Mostlinkedtemplates'       => 'MostlinkedTemplatesPage',
+               'Mostcategories'            => 'MostcategoriesPage',
+               'Mostrevisions'             => 'MostrevisionsPage',
+
+               // Page tools
+               'ComparePages'              => 'SpecialComparePages',
+               'Export'                    => 'SpecialExport',
+               'Import'                    => 'SpecialImport',
+               'Undelete'                  => 'SpecialUndelete',
+               'Whatlinkshere'             => 'SpecialWhatlinkshere',
+               'MergeHistory'              => 'SpecialMergeHistory',
+               'ExpandTemplates'           => 'SpecialExpandTemplates',
+
+               // Other
+               'Booksources'               => 'SpecialBookSources',
+
+               // Unlisted / redirects
+               'Blankpage'                 => 'SpecialBlankpage',
+               'Emailuser'                 => 'SpecialEmailUser',
+               'Movepage'                  => 'MovePageForm',
+               'Mycontributions'           => 'SpecialMycontributions',
+               'Mypage'                    => 'SpecialMypage',
+               'Mytalk'                    => 'SpecialMytalk',
+               'Myuploads'                 => 'SpecialMyuploads',
+               'AllMyUploads'              => 'SpecialAllMyUploads',
+               'PermanentLink'             => 'SpecialPermanentLink',
+               'Redirect'                  => 'SpecialRedirect',
+               'Revisiondelete'            => 'SpecialRevisionDelete',
+               'Specialpages'              => 'SpecialSpecialpages',
+               'Userlogout'                => 'SpecialUserlogout',
+       );
+
+       private static $aliases;
+
+       /**
+        * Get the special page list
+        *
+        * @return array
+        */
+       static function getList() {
+               global $wgSpecialPages;
+               global $wgDisableCounters, $wgDisableInternalSearch, $wgEmailAuthentication;
+               global $wgEnableEmail, $wgEnableJavaScriptTest;
+               global $wgMiserMode;
+
+               if ( !is_object( self::$list ) ) {
+                       wfProfileIn( __METHOD__ );
+
+                       if ( !$wgDisableCounters ) {
+                               self::$list['Popularpages'] = 'PopularpagesPage';
+                       }
+
+                       if ( !$wgDisableInternalSearch ) {
+                               self::$list['Search'] = 'SpecialSearch';
+                       }
+
+                       if ( $wgEmailAuthentication ) {
+                               self::$list['Confirmemail'] = 'EmailConfirmation';
+                               self::$list['Invalidateemail'] = 'EmailInvalidation';
+                       }
+
+                       if ( $wgEnableEmail ) {
+                               self::$list['ChangeEmail'] = 'SpecialChangeEmail';
+                       }
+
+                       if ( $wgEnableJavaScriptTest ) {
+                               self::$list['JavaScriptTest'] = 'SpecialJavaScriptTest';
+                       }
+
+                       if ( !$wgMiserMode ) {
+                               self::$list['Activeusers'] = 'SpecialActiveUsers';
+                       }
+
+                       // Add extension special pages
+                       self::$list = array_merge( self::$list, $wgSpecialPages );
+
+                       // Run hooks
+                       // This hook can be used to remove undesired built-in special pages
+                       wfRunHooks( 'SpecialPage_initList', array( &self::$list ) );
+
+                       // Cast to object: func()[$key] doesn't work, but func()->$key does
+                       settype( self::$list, 'object' );
+
+                       wfProfileOut( __METHOD__ );
+               }
+               return self::$list;
+       }
+
+       /**
+        * Initialise and return the list of special page aliases.  Returns an object with
+        * properties which can be accessed $obj->pagename - each property is an array of
+        * aliases; the first in the array is the canonical alias.  All registered special
+        * pages are guaranteed to have a property entry, and for that property array to
+        * contain at least one entry (English fallbacks will be added if necessary).
+        * @return Object
+        */
+       static function getAliasList() {
+               if ( !is_object( self::$aliases ) ) {
+                       global $wgContLang;
+                       $aliases = $wgContLang->getSpecialPageAliases();
+
+                       // Objects are passed by reference by default, need to create a copy
+                       $missingPages = clone self::getList();
+
+                       self::$aliases = array();
+                       foreach ( $aliases as $realName => $aliasList ) {
+                               foreach ( $aliasList as $alias ) {
+                                       self::$aliases[$wgContLang->caseFold( $alias )] = $realName;
+                               }
+                               unset( $missingPages->$realName );
+                       }
+                       foreach ( $missingPages as $name => $stuff ) {
+                               self::$aliases[$wgContLang->caseFold( $name )] = $name;
+                       }
+
+                       // Cast to object: func()[$key] doesn't work, but func()->$key does
+                       self::$aliases = (object)self::$aliases;
+               }
+               return self::$aliases;
+       }
+
+       /**
+        * Given a special page name with a possible subpage, return an array
+        * where the first element is the special page name and the second is the
+        * subpage.
+        *
+        * @param string $alias
+        * @return array Array( String, String|null ), or array( null, null ) if the page is invalid
+        */
+       public static function resolveAlias( $alias ) {
+               global $wgContLang;
+               $bits = explode( '/', $alias, 2 );
+
+               $caseFoldedAlias = $wgContLang->caseFold( $bits[0] );
+               $caseFoldedAlias = str_replace( ' ', '_', $caseFoldedAlias );
+               if ( isset( self::getAliasList()->$caseFoldedAlias ) ) {
+                       $name = self::getAliasList()->$caseFoldedAlias;
+               } else {
+                       return array( null, null );
+               }
+
+               if ( !isset( $bits[1] ) ) { // bug 2087
+                       $par = null;
+               } else {
+                       $par = $bits[1];
+               }
+
+               return array( $name, $par );
+       }
+
+       /**
+        * Add a page to a certain display group for Special:SpecialPages
+        *
+        * @param SpecialPage|string $page
+        * @param string $group
+        * @deprecated since 1.21 Override SpecialPage::getGroupName
+        */
+       public static function setGroup( $page, $group ) {
+               wfDeprecated( __METHOD__, '1.21' );
+
+               global $wgSpecialPageGroups;
+               $name = is_object( $page ) ? $page->getName() : $page;
+               $wgSpecialPageGroups[$name] = $group;
+       }
+
+       /**
+        * Get the group that the special page belongs in on Special:SpecialPage
+        *
+        * @param SpecialPage $page
+        * @return string
+        * @deprecated since 1.21 Use SpecialPage::getFinalGroupName
+        */
+       public static function getGroup( &$page ) {
+               wfDeprecated( __METHOD__, '1.21' );
+
+               return $page->getFinalGroupName();
+       }
+
+       /**
+        * Check if a given name exist as a special page or as a special page alias
+        *
+        * @param string $name Name of a special page
+        * @return bool True if a special page exists with this name
+        */
+       public static function exists( $name ) {
+               list( $title, /*...*/ ) = self::resolveAlias( $name );
+               return property_exists( self::getList(), $title );
+       }
+
+       /**
+        * Find the object with a given name and return it (or NULL)
+        *
+        * @param string $name Special page name, may be localised and/or an alias
+        * @return SpecialPage|null SpecialPage object or null if the page doesn't exist
+        */
+       public static function getPage( $name ) {
+               list( $realName, /*...*/ ) = self::resolveAlias( $name );
+               if ( property_exists( self::getList(), $realName ) ) {
+                       $rec = self::getList()->$realName;
+                       if ( is_string( $rec ) ) {
+                               $className = $rec;
+                               return new $className;
+                       } elseif ( is_array( $rec ) ) {
+                               // @deprecated, officially since 1.18, unofficially since forever
+                               wfDebug( "Array syntax for \$wgSpecialPages is deprecated, define a subclass of SpecialPage instead." );
+                               $className = array_shift( $rec );
+                               self::getList()->$realName = MWFunction::newObj( $className, $rec );
+                       }
+                       return self::getList()->$realName;
+               } else {
+                       return null;
+               }
+       }
+
+       /**
+        * Return categorised listable special pages which are available
+        * for the current user, and everyone.
+        *
+        * @param $user User object to check permissions, $wgUser will be used if
+        *   if not provided
+        * @return array ( string => Specialpage )
+        */
+       public static function getUsablePages( User $user = null ) {
+               $pages = array();
+               if ( $user === null ) {
+                       global $wgUser;
+                       $user = $wgUser;
+               }
+               foreach ( self::getList() as $name => $rec ) {
+                       $page = self::getPage( $name );
+                       if ( $page ) { // not null
+                               $page->setContext( RequestContext::getMain() );
+                               if ( $page->isListed()
+                                       && ( !$page->isRestricted() || $page->userCanExecute( $user ) )
+                               ) {
+                                       $pages[$name] = $page;
+                               }
+                       }
+               }
+               return $pages;
+       }
+
+       /**
+        * Return categorised listable special pages for all users
+        *
+        * @return array ( string => Specialpage )
+        */
+       public static function getRegularPages() {
+               $pages = array();
+               foreach ( self::getList() as $name => $rec ) {
+                       $page = self::getPage( $name );
+                       if ( $page->isListed() && !$page->isRestricted() ) {
+                               $pages[$name] = $page;
+                       }
+               }
+               return $pages;
+       }
+
+       /**
+        * Return categorised listable special pages which are available
+        * for the current user, but not for everyone
+        *
+        * @return array ( string => Specialpage )
+        */
+       public static function getRestrictedPages() {
+               global $wgUser;
+               $pages = array();
+               foreach ( self::getList() as $name => $rec ) {
+                       $page = self::getPage( $name );
+                       if (
+                               $page->isListed()
+                               && $page->isRestricted()
+                               && $page->userCanExecute( $wgUser )
+                       ) {
+                               $pages[$name] = $page;
+                       }
+               }
+               return $pages;
+       }
+
+       /**
+        * Execute a special page path.
+        * The path may contain parameters, e.g. Special:Name/Params
+        * Extracts the special page name and call the execute method, passing the parameters
+        *
+        * Returns a title object if the page is redirected, false if there was no such special
+        * page, and true if it was successful.
+        *
+        * @param Title $title
+        * @param IContextSource $context
+        * @param bool $including Bool output is being captured for use in {{special:whatever}}
+        *
+        * @return bool
+        */
+       public static function executePath( Title &$title, IContextSource &$context, $including = false ) {
+               wfProfileIn( __METHOD__ );
+
+               // @todo FIXME: Redirects broken due to this call
+               $bits = explode( '/', $title->getDBkey(), 2 );
+               $name = $bits[0];
+               if ( !isset( $bits[1] ) ) { // bug 2087
+                       $par = null;
+               } else {
+                       $par = $bits[1];
+               }
+               $page = self::getPage( $name );
+               // Nonexistent?
+               if ( !$page ) {
+                       $context->getOutput()->setArticleRelated( false );
+                       $context->getOutput()->setRobotPolicy( 'noindex,nofollow' );
+
+                       global $wgSend404Code;
+                       if ( $wgSend404Code ) {
+                               $context->getOutput()->setStatusCode( 404 );
+                       }
+
+                       $context->getOutput()->showErrorPage( 'nosuchspecialpage', 'nospecialpagetext' );
+                       wfProfileOut( __METHOD__ );
+                       return false;
+               }
+
+               // Page exists, set the context
+               $page->setContext( $context );
+
+               if ( !$including ) {
+                       // Redirect to canonical alias for GET commands
+                       // Not for POST, we'd lose the post data, so it's best to just distribute
+                       // the request. Such POST requests are possible for old extensions that
+                       // generate self-links without being aware that their default name has
+                       // changed.
+                       if ( $name != $page->getLocalName() && !$context->getRequest()->wasPosted() ) {
+                               $query = $context->getRequest()->getQueryValues();
+                               unset( $query['title'] );
+                               $title = $page->getPageTitle( $par );
+                               $url = $title->getFullURL( $query );
+                               $context->getOutput()->redirect( $url );
+                               wfProfileOut( __METHOD__ );
+                               return $title;
+                       } else {
+                               $context->setTitle( $page->getPageTitle( $par ) );
+                       }
+
+               } elseif ( !$page->isIncludable() ) {
+                       wfProfileOut( __METHOD__ );
+                       return false;
+               }
+
+               $page->including( $including );
+
+               // Execute special page
+               $profName = 'Special:' . $page->getName();
+               wfProfileIn( $profName );
+               $page->run( $par );
+               wfProfileOut( $profName );
+               wfProfileOut( __METHOD__ );
+               return true;
+       }
+
+       /**
+        * Just like executePath() but will override global variables and execute
+        * the page in "inclusion" mode. Returns true if the execution was
+        * successful or false if there was no such special page, or a title object
+        * if it was a redirect.
+        *
+        * Also saves the current $wgTitle, $wgOut, $wgRequest, $wgUser and $wgLang
+        * variables so that the special page will get the context it'd expect on a
+        * normal request, and then restores them to their previous values after.
+        *
+        * @param Title $title
+        * @param IContextSource $context
+        * @return string HTML fragment
+        */
+       static function capturePath( Title $title, IContextSource $context ) {
+               global $wgOut, $wgTitle, $wgRequest, $wgUser, $wgLang;
+
+               // Save current globals
+               $oldTitle = $wgTitle;
+               $oldOut = $wgOut;
+               $oldRequest = $wgRequest;
+               $oldUser = $wgUser;
+               $oldLang = $wgLang;
+
+               // Set the globals to the current context
+               $wgTitle = $title;
+               $wgOut = $context->getOutput();
+               $wgRequest = $context->getRequest();
+               $wgUser = $context->getUser();
+               $wgLang = $context->getLanguage();
+
+               // The useful part
+               $ret = self::executePath( $title, $context, true );
+
+               // And restore the old globals
+               $wgTitle = $oldTitle;
+               $wgOut = $oldOut;
+               $wgRequest = $oldRequest;
+               $wgUser = $oldUser;
+               $wgLang = $oldLang;
+
+               return $ret;
+       }
+
+       /**
+        * Get the local name for a specified canonical name
+        *
+        * @param string $name
+        * @param string|bool $subpage
+        * @return string
+        */
+       static function getLocalNameFor( $name, $subpage = false ) {
+               global $wgContLang;
+               $aliases = $wgContLang->getSpecialPageAliases();
+
+               if ( isset( $aliases[$name][0] ) ) {
+                       $name = $aliases[$name][0];
+               } else {
+                       // Try harder in case someone misspelled the correct casing
+                       $found = false;
+                       foreach ( $aliases as $n => $values ) {
+                               if ( strcasecmp( $name, $n ) === 0 ) {
+                                       wfWarn( "Found alias defined for $n when searching for " .
+                                               "special page aliases for $name. Case mismatch?" );
+                                       $name = $values[0];
+                                       $found = true;
+                                       break;
+                               }
+                       }
+                       if ( !$found ) {
+                               wfWarn( "Did not find alias for special page '$name'. " .
+                                       "Perhaps no aliases are defined for it?" );
+                       }
+               }
+               if ( $subpage !== false && !is_null( $subpage ) ) {
+                       $name = "$name/$subpage";
+               }
+               return $wgContLang->ucfirst( $name );
+       }
+
+       /**
+        * Get a title for a given alias
+        *
+        * @param string $alias
+        * @return Title|null Title or null if there is no such alias
+        */
+       static function getTitleForAlias( $alias ) {
+               $name = self::resolveAlias( $alias );
+               if ( $name ) {
+                       return SpecialPage::getTitleFor( $name );
+               } else {
+                       return null;
+               }
+       }
+}
index a4e0b85..90abe1c 100644 (file)
@@ -978,9 +978,11 @@ class SpecialRecentChanges extends SpecialPage {
         * Add page-specific modules.
         */
        protected function addModules() {
-               $this->getOutput()->addModules( array(
-                       'mediawiki.special.recentchanges',
-               ) );
+               $out = $this->getOutput();
+               $out->addModules( 'mediawiki.special.recentchanges' );
+               // This modules include styles and behavior for the legend box, load it unconditionally
+               $out->addModuleStyles( 'mediawiki.special.changeslist' );
+               $out->addModules( 'mediawiki.special.changeslist.js' );
        }
 
        protected function getGroupName() {
index 98ae6f5..18e777a 100644 (file)
@@ -687,9 +687,15 @@ class SpecialSearch extends SpecialPage {
                        );
                }
 
+               $fileMatch = '';
                // Include a thumbnail for media files...
                if ( $t->getNamespace() == NS_FILE ) {
-                       $img = wfFindFile( $t );
+                       $img = $result->getFile();
+                       $img = $img ?: wfFindFile( $t );
+                       if ( $result->isFileMatch() ) {
+                               $fileMatch = "<span class='searchalttitle'>" .
+                                       $this->msg( 'search-file-match' )->escaped() . "</span>";
+                       }
                        if ( $img ) {
                                $thumb = $img->transform( array( 'width' => 120, 'height' => 120 ) );
                                if ( $thumb ) {
@@ -705,7 +711,7 @@ class SpecialSearch extends SpecialPage {
                                                $thumb->toHtml( array( 'desc-link' => true ) ) .
                                                '</td>' .
                                                '<td style="vertical-align: top;">' .
-                                               $link .
+                                               "{$link} {$fileMatch}" .
                                                $extract .
                                                "<div class='mw-search-result-data'>{$score}{$desc} - {$date}{$related}</div>" .
                                                '</td>' .
@@ -724,7 +730,7 @@ class SpecialSearch extends SpecialPage {
                        &$score, &$size, &$date, &$related,
                        &$html
                ) ) ) {
-                       $html = "<li><div class='mw-search-result-heading'>{$link} {$redirect} {$section}</div> {$extract}\n" .
+                       $html = "<li><div class='mw-search-result-heading'>{$link} {$redirect} {$section} {$fileMatch}</div> {$extract}\n" .
                                "<div class='mw-search-result-data'>{$score}{$size} - {$date}{$related}</div>" .
                                "</li>\n";
                }
index afdf981..ac41340 100644 (file)
@@ -136,8 +136,6 @@ class SpecialWatchlist extends SpecialRecentChanges {
 
                $user = $this->getUser();
                $output = $this->getOutput();
-               $output->addModuleStyles( 'mediawiki.special.changeslist' );
-               $output->addModules( 'mediawiki.special.changeslist.js' );
 
                # Anons don't get a watchlist
                $this->requireLogin( 'watchlistanontext' );
@@ -145,27 +143,8 @@ class SpecialWatchlist extends SpecialRecentChanges {
                // Check permissions
                $this->checkPermissions();
 
-               // Add feed links
-               $wlToken = $user->getTokenFromOption( 'watchlisttoken' );
-               if ( $wlToken ) {
-                       $this->addFeedLinks( array(
-                               'action' => 'feedwatchlist',
-                               'allrev' => 1,
-                               'wlowner' => $user->getName(),
-                               'wltoken' => $wlToken,
-                       ) );
-               }
-
-               $opts = $this->getOptions();
-               $this->setHeaders();
-               $this->outputHeader();
-
-               $output->addSubtitle(
-                       $this->msg( 'watchlistfor2', $user->getName() )
-                               ->rawParams( SpecialEditWatchlist::buildTools( null ) )
-               );
-
                $request = $this->getRequest();
+               $opts = $this->getOptions();
 
                $mode = SpecialEditWatchlist::getMode( $request, $par );
                if ( $mode !== false ) {
@@ -179,49 +158,69 @@ class SpecialWatchlist extends SpecialRecentChanges {
                        return;
                }
 
+               if ( ( $wgEnotifWatchlist || $wgShowUpdatedMarker ) && $request->getVal( 'reset' ) &&
+                       $request->wasPosted() )
+               {
+                       $user->clearAllNotifications();
+                       $output->redirect( $this->getPageTitle()->getFullURL( $opts->getChangedValues() ) );
+                       return;
+               }
+
+               $this->setHeaders();
+               $this->outputHeader();
+               $this->addModules();
+
                $dbr = wfGetDB( DB_SLAVE, 'watchlist' );
 
-               $nitems = $this->countItems( $dbr );
-               if ( $nitems == 0 ) {
+               $this->numItems = $this->countItems( $dbr ); // TODO kill me
+               if ( $this->numItems == 0 ) {
                        $output->addWikiMsg( 'nowatchlist' );
                        return;
                }
 
-               # Get namespace value, if supplied, and prepare a WHERE fragment
-               $nameSpace = $opts['namespace'];
-               $invert = $opts['invert'];
-               $associated = $opts['associated'];
+               // Fetch results, prepare a batch link existence check query
+               $conds = $this->buildMainQueryConds( $opts );
+               $rows = $this->doMainQuery( $conds, $opts );
+               $this->numRows = $rows->numRows(); // TODO kill me
+               if ( $rows === false ) {
+                       $this->doHeader( $opts );
 
-               if ( $nameSpace !== '' ) {
-                       $eq_op = $invert ? '!=' : '=';
-                       $bool_op = $invert ? 'AND' : 'OR';
-                       if ( !$associated ) {
-                               $nameSpaceClause = "rc_namespace $eq_op $nameSpace";
-                       } else {
-                               $associatedNS = MWNamespace::getAssociated( $nameSpace );
-                               $nameSpaceClause =
-                                       "rc_namespace $eq_op $nameSpace " .
-                                       $bool_op .
-                                       " rc_namespace $eq_op $associatedNS";
+                       return;
+               }
+
+               $feedFormat = $this->getRequest()->getVal( 'feed' );
+               if ( !$feedFormat ) {
+                       $batch = new LinkBatch;
+                       foreach ( $rows as $row ) {
+                               $batch->add( NS_USER, $row->rc_user_text );
+                               $batch->add( NS_USER_TALK, $row->rc_user_text );
+                               $batch->add( $row->rc_namespace, $row->rc_title );
                        }
+                       $batch->execute();
+               }
+               if ( $feedFormat ) {
+                       list( $changesFeed, $formatter ) = $this->getFeedObject( $feedFormat );
+                       /** @var ChangesFeed $changesFeed */
+                       $changesFeed->execute( $formatter, $rows, $lastmod, $opts );
                } else {
-                       $nameSpaceClause = '';
+                       $this->webOutput( $rows, $opts );
                }
 
-               // Dump everything here
-               $nondefaults = $opts->getChangedValues();
-
-               if ( ( $wgEnotifWatchlist || $wgShowUpdatedMarker ) && $request->getVal( 'reset' )
-                       && $request->wasPosted()
-               ) {
-                       $user->clearAllNotifications();
-                       $output->redirect( $this->getPageTitle()->getFullURL( $nondefaults ) );
-                       return;
-               }
+               $rows->free();
+       }
 
-               # Possible where conditions
+       /**
+        * Return an array of conditions depending of options set in $opts
+        *
+        * @param FormOptions $opts
+        * @return array
+        */
+       public function buildMainQueryConds( FormOptions $opts ) {
+               $dbr = wfGetDB( DB_SLAVE, 'watchlist' );
                $conds = array();
+               $user = $this->getUser();
 
+               // Calculate cutoff
                if ( $opts['days'] > 0 ) {
                        $conds[] = 'rc_timestamp > ' . $dbr->addQuotes( $dbr->timestamp( time() - intval( $opts['days'] * 86400 ) ) );
                }
@@ -245,10 +244,44 @@ class SpecialWatchlist extends SpecialRecentChanges {
                if ( $user->useRCPatrol() && $opts['hidepatrolled'] ) {
                        $conds[] = 'rc_patrolled != 1';
                }
-               if ( $nameSpaceClause ) {
-                       $conds[] = $nameSpaceClause;
+
+               # Namespace filtering
+               if ( $opts['namespace'] !== '' ) {
+                       $selectedNS = $dbr->addQuotes( $opts['namespace'] );
+                       $operator = $opts['invert'] ? '!=' : '=';
+                       $boolean = $opts['invert'] ? 'AND' : 'OR';
+
+                       # namespace association (bug 2429)
+                       if ( !$opts['associated'] ) {
+                               $condition = "rc_namespace $operator $selectedNS";
+                       } else {
+                               # Also add the associated namespace
+                               $associatedNS = $dbr->addQuotes(
+                                       MWNamespace::getAssociated( $opts['namespace'] )
+                               );
+                               $condition = "(rc_namespace $operator $selectedNS "
+                                       . $boolean
+                                       . " rc_namespace $operator $associatedNS)";
+                       }
+
+                       $conds[] = $condition;
                }
 
+               return $conds;
+       }
+
+       /**
+        * Process the query
+        *
+        * @param array $conds
+        * @param FormOptions $opts
+        * @return bool|ResultWrapper Result or false (for Recentchangeslinked only)
+        */
+       public function doMainQuery( $conds, $opts ) {
+               global $wgShowUpdatedMarker;
+
+               $dbr = wfGetDB( DB_SLAVE, 'watchlist' );
+               $user = $this->getUser();
                # Toggle watchlist content (all recent edits or just the latest)
                if ( $opts['extended'] ) {
                        $limitWatchlist = $user->getIntOption( 'wllimit' );
@@ -270,18 +303,155 @@ class SpecialWatchlist extends SpecialRecentChanges {
                        $usePage = true;
                }
 
+               $tables = array( 'recentchanges', 'watchlist' );
+               $fields = RecentChange::selectFields();
+               $join_conds = array(
+                       'watchlist' => array(
+                               'INNER JOIN',
+                               array(
+                                       'wl_user' => $user->getId(),
+                                       'wl_namespace=rc_namespace',
+                                       'wl_title=rc_title'
+                               ),
+                       ),
+               );
+               $options = array( 'ORDER BY' => 'rc_timestamp DESC' );
+               if ( $wgShowUpdatedMarker ) {
+                       $fields[] = 'wl_notificationtimestamp';
+               }
+               if ( $limitWatchlist ) {
+                       $options['LIMIT'] = $limitWatchlist;
+               }
+
+               $rollbacker = $user->isAllowed( 'rollback' );
+               if ( $usePage || $rollbacker ) {
+                       $tables[] = 'page';
+                       $join_conds['page'] = array( 'LEFT JOIN', 'rc_cur_id=page_id' );
+                       if ( $rollbacker ) {
+                               $fields[] = 'page_latest';
+                       }
+               }
+
+               // Log entries with DELETED_ACTION must not show up unless the user has
+               // the necessary rights.
+               if ( !$user->isAllowed( 'deletedhistory' ) ) {
+                       $bitmask = LogPage::DELETED_ACTION;
+               } elseif ( !$user->isAllowed( 'suppressrevision' ) ) {
+                       $bitmask = LogPage::DELETED_ACTION | LogPage::DELETED_RESTRICTED;
+               } else {
+                       $bitmask = 0;
+               }
+               if ( $bitmask ) {
+                       $conds[] = $dbr->makeList( array(
+                               'rc_type != ' . RC_LOG,
+                               $dbr->bitAnd( 'rc_deleted', $bitmask ) . " != $bitmask",
+                       ), LIST_OR );
+               }
+
+
+               ChangeTags::modifyDisplayQuery( $tables, $fields, $conds, $join_conds, $options, '' );
+               wfRunHooks( 'SpecialWatchlistQuery', array( &$conds, &$tables, &$join_conds, &$fields, $opts ) );
+
+               return $dbr->select( $tables, $fields, $conds, __METHOD__, $options, $join_conds );
+       }
+
+       /**
+        * Send output to the OutputPage object, only called if not used feeds
+        *
+        * @param array $rows Database rows
+        * @param FormOptions $opts
+        */
+       public function webOutput( $rows, $opts ) {
+               global $wgShowUpdatedMarker, $wgRCShowWatchingUsers;
+
+               $dbr = wfGetDB( DB_SLAVE, 'watchlist' );
+               $user = $this->getUser();
+
+               $dbr->dataSeek( $rows, 0 );
+
+               $list = ChangesList::newFromContext( $this->getContext() );
+               $list->setWatchlistDivs();
+
+               $s = $list->beginRecentChangesList();
+               $counter = 1;
+               foreach ( $rows as $obj ) {
+                       # Make RC entry
+                       $rc = RecentChange::newFromRow( $obj );
+                       $rc->counter = $counter++;
+
+                       if ( $wgShowUpdatedMarker ) {
+                               $updated = $obj->wl_notificationtimestamp;
+                       } else {
+                               $updated = false;
+                       }
+
+                       if ( $wgRCShowWatchingUsers && $user->getOption( 'shownumberswatching' ) ) {
+                               $rc->numberofWatchingusers = $dbr->selectField( 'watchlist',
+                                       'COUNT(*)',
+                                       array(
+                                               'wl_namespace' => $obj->rc_namespace,
+                                               'wl_title' => $obj->rc_title,
+                                       ),
+                                       __METHOD__ );
+                       } else {
+                               $rc->numberofWatchingusers = 0;
+                       }
+
+                       $changeLine = $list->recentChangesLine( $rc, $updated, $counter );
+                       if ( $changeLine !== false ) {
+                               $s .= $changeLine;
+                       }
+               }
+               $s .= $list->endRecentChangesList();
+
+               // Print things out
+
+               $output = $this->getOutput();
+
+               $output->addSubtitle(
+                       $this->msg( 'watchlistfor2', $user->getName() )
+                               ->rawParams( SpecialEditWatchlist::buildTools( null ) )
+               );
+
+               // Output options box
+               $this->doHeader( $opts );
+
+               // Add feed links
+               $wlToken = $user->getTokenFromOption( 'watchlisttoken' );
+               if ( $wlToken ) {
+                       $this->addFeedLinks( array(
+                               'action' => 'feedwatchlist',
+                               'allrev' => 1,
+                               'wlowner' => $user->getName(),
+                               'wltoken' => $wlToken,
+                       ) );
+               }
+
                # Show a message about slave lag, if applicable
                $lag = wfGetLB()->safeGetLag( $dbr );
                if ( $lag > 0 ) {
                        $output->showLagWarning( $lag );
                }
 
-               # Create output
-               $form = '';
+               if ( $rows->numRows() == 0 ) {
+                       $output->wrapWikiMsg(
+                               "<div class='mw-changeslist-empty'>\n$1\n</div>", 'recentchanges-noresult'
+                       );
+               } else {
+                       $output->addHTML( $s );
+               }
+       }
+
+       function setTopText( FormOptions $opts ) {
+               global $wgEnotifWatchlist, $wgShowUpdatedMarker;
+
+               $nondefaults = $opts->getChangedValues();
+               $form = "";
+               $user = $this->getUser();
 
                # Show watchlist header
                $form .= "<p>";
-               $form .= $this->msg( 'watchlist-details' )->numParams( $nitems )->parse() . "\n";
+               $form .= $this->msg( 'watchlist-details' )->numParams( $this->numItems )->parse() . "\n";
                if ( $wgEnotifWatchlist && $user->getOption( 'enotifwatchlistpages' ) ) {
                        $form .= $this->msg( 'wlheader-enotif' )->parse() . "\n";
                }
@@ -315,51 +485,31 @@ class SpecialWatchlist extends SpecialRecentChanges {
 
                $form .= SpecialRecentChanges::makeLegend( $this->getContext() );
 
-               $tables = array( 'recentchanges', 'watchlist' );
-               $fields = RecentChange::selectFields();
-               $join_conds = array(
-                       'watchlist' => array(
-                               'INNER JOIN',
-                               array(
-                                       'wl_user' => $user->getId(),
-                                       'wl_namespace=rc_namespace',
-                                       'wl_title=rc_title'
-                               ),
-                       ),
-               );
-               $options = array( 'ORDER BY' => 'rc_timestamp DESC' );
-               if ( $wgShowUpdatedMarker ) {
-                       $fields[] = 'wl_notificationtimestamp';
-               }
-               if ( $limitWatchlist ) {
-                       $options['LIMIT'] = $limitWatchlist;
-               }
-
-               $rollbacker = $user->isAllowed( 'rollback' );
-               if ( $usePage || $rollbacker ) {
-                       $tables[] = 'page';
-                       $join_conds['page'] = array( 'LEFT JOIN', 'rc_cur_id=page_id' );
-                       if ( $rollbacker ) {
-                               $fields[] = 'page_latest';
-                       }
-               }
+               $this->getOutput()->addHTML( $form );
+       }
 
-               ChangeTags::modifyDisplayQuery( $tables, $fields, $conds, $join_conds, $options, '' );
-               wfRunHooks( 'SpecialWatchlistQuery', array( &$conds, &$tables, &$join_conds, &$fields, $opts ) );
+       /**
+        * Return the text to be displayed above the changes
+        *
+        * @param FormOptions $opts
+        * @return string XHTML
+        */
+       public function doHeader( $opts ) {
+               global $wgScript;
 
-               $res = $dbr->select( $tables, $fields, $conds, __METHOD__, $options, $join_conds );
-               $numRows = $res->numRows();
+               $user = $this->getUser();
 
-               /* Start bottom header */
+               $this->setTopText( $opts );
 
                $lang = $this->getLanguage();
                $wlInfo = '';
                if ( $opts['days'] > 0 ) {
                        $timestamp = wfTimestampNow();
-                       $wlInfo = $this->msg( 'wlnote' )->numParams( $numRows, round( $opts['days'] * 24 ) )->params(
+                       $wlInfo = $this->msg( 'wlnote' )->numParams( $this->numRows, round( $opts['days'] * 24 ) )->params(
                                $lang->userDate( $timestamp, $user ), $lang->userTime( $timestamp, $user ) )->parse() . "<br />\n";
                }
 
+               $nondefaults = $opts->getChangedValues();
                $cutofflinks = $this->cutoffLinks( $opts['days'], $nondefaults ) . "<br />\n";
 
                # Spit out some control panel links
@@ -389,6 +539,9 @@ class SpecialWatchlist extends SpecialRecentChanges {
                unset( $hiddenFields['invert'] );
                unset( $hiddenFields['associated'] );
 
+               # Create output
+               $form = '';
+
                # Namespace filter and put the whole form together.
                $form .= $wlInfo;
                $form .= $cutofflinks;
@@ -396,7 +549,7 @@ class SpecialWatchlist extends SpecialRecentChanges {
                $form .= "<hr />\n<p>";
                $form .= Html::namespaceSelector(
                        array(
-                               'selected' => $nameSpace,
+                               'selected' => $opts['namespace'],
                                'all' => '',
                                'label' => $this->msg( 'namespace' )->text()
                        ), array(
@@ -409,14 +562,14 @@ class SpecialWatchlist extends SpecialRecentChanges {
                        $this->msg( 'invert' )->text(),
                        'invert',
                        'nsinvert',
-                       $invert,
+                       $opts['invert'],
                        array( 'title' => $this->msg( 'tooltip-invert' )->text() )
                ) . '&#160;';
                $form .= Xml::checkLabel(
                        $this->msg( 'namespace_association' )->text(),
                        'associated',
-                       'associated',
-                       $associated,
+                       'nsassociated',
+                       $opts['associated'],
                        array( 'title' => $this->msg( 'tooltip-namespace_association' )->text() )
                ) . '&#160;';
                $form .= Xml::submitButton( $this->msg( 'allpagessubmit' )->text() ) . "</p>\n";
@@ -425,68 +578,9 @@ class SpecialWatchlist extends SpecialRecentChanges {
                }
                $form .= Xml::closeElement( 'fieldset' ) . "\n";
                $form .= Xml::closeElement( 'form' ) . "\n";
-               $output->addHTML( $form );
-
-               # If there's nothing to show, stop here
-               if ( $numRows == 0 ) {
-                       $output->wrapWikiMsg(
-                               "<div class='mw-changeslist-empty'>\n$1\n</div>", 'recentchanges-noresult'
-                       );
-                       return;
-               }
-
-               /* End bottom header */
-
-               /* Do link batch query */
-               $linkBatch = new LinkBatch;
-               foreach ( $res as $row ) {
-                       $userNameUnderscored = str_replace( ' ', '_', $row->rc_user_text );
-                       if ( $row->rc_user != 0 ) {
-                               $linkBatch->add( NS_USER, $userNameUnderscored );
-                       }
-                       $linkBatch->add( NS_USER_TALK, $userNameUnderscored );
-
-                       $linkBatch->add( $row->rc_namespace, $row->rc_title );
-               }
-               $linkBatch->execute();
-               $dbr->dataSeek( $res, 0 );
-
-               $list = ChangesList::newFromContext( $this->getContext() );
-               $list->setWatchlistDivs();
-
-               $s = $list->beginRecentChangesList();
-               $counter = 1;
-               foreach ( $res as $obj ) {
-                       # Make RC entry
-                       $rc = RecentChange::newFromRow( $obj );
-                       $rc->counter = $counter++;
-
-                       if ( $wgShowUpdatedMarker ) {
-                               $updated = $obj->wl_notificationtimestamp;
-                       } else {
-                               $updated = false;
-                       }
-
-                       if ( $wgRCShowWatchingUsers && $user->getOption( 'shownumberswatching' ) ) {
-                               $rc->numberofWatchingusers = $dbr->selectField( 'watchlist',
-                                       'COUNT(*)',
-                                       array(
-                                               'wl_namespace' => $obj->rc_namespace,
-                                               'wl_title' => $obj->rc_title,
-                                       ),
-                                       __METHOD__ );
-                       } else {
-                               $rc->numberofWatchingusers = 0;
-                       }
-
-                       $changeLine = $list->recentChangesLine( $rc, $updated, $counter );
-                       if ( $changeLine !== false ) {
-                               $s .= $changeLine;
-                       }
-               }
-               $s .= $list->endRecentChangesList();
+               $this->getOutput()->addHTML( $form );
 
-               $output->addHTML( $s );
+               $this->setBottomText( $opts );
        }
 
        protected function showHideLink( $options, $message, $name, $value ) {
@@ -551,9 +645,9 @@ class SpecialWatchlist extends SpecialRecentChanges {
         */
        protected function countItems( $dbr ) {
                # Fetch the raw count
-               $res = $dbr->select( 'watchlist', array( 'count' => 'COUNT(*)' ),
+               $rows = $dbr->select( 'watchlist', array( 'count' => 'COUNT(*)' ),
                        array( 'wl_user' => $this->getUser()->getId() ), __METHOD__ );
-               $row = $dbr->fetchObject( $res );
+               $row = $dbr->fetchObject( $rows );
                $count = $row->count;
 
                return floor( $count / 2 );
index 4c8148a..67bffc3 100644 (file)
@@ -474,9 +474,10 @@ abstract class UploadBase {
                                return array( 'uploadscripted' );
                        }
                        if ( $this->mFinalExtension == 'svg' || $mime == 'image/svg+xml' ) {
-                               if ( $this->detectScriptInSvg( $this->mTempPath ) ) {
+                               $svgStatus = $this->detectScriptInSvg( $this->mTempPath );
+                               if ( $svgStatus !== false ) {
                                        wfProfileOut( __METHOD__ );
-                                       return array( 'uploadscripted' );
+                                       return $svgStatus;
                                }
                        }
                }
@@ -1164,11 +1165,36 @@ abstract class UploadBase {
 
        /**
         * @param $filename string
-        * @return bool
+        * @return mixed false of the file is verified (does not contain scripts), array otherwise.
         */
        protected function detectScriptInSvg( $filename ) {
-               $check = new XmlTypeCheck( $filename, array( $this, 'checkSvgScriptCallback' ) );
-               return $check->filterMatch;
+               $check = new XmlTypeCheck(
+                       $filename,
+                       array( $this, 'checkSvgScriptCallback' ),
+                       true,
+                       array( 'processing_instruction_handler' => 'UploadBase::checkSvgPICallback' )
+               );
+               if ( $check->wellFormed !== true ) {
+                       // Invalid xml (bug 58553)
+                       return array( 'uploadinvalidxml' );
+               } elseif ( $check->filterMatch ) {
+                       return array( 'uploadscripted' );
+               }
+               return false;
+       }
+
+       /**
+        * Callback to filter SVG Processing Instructions.
+        * @param $target string processing instruction name
+        * @param $data string processing instruction attribute and value
+        * @return bool (true if the filter identified something bad)
+        */
+       public static function checkSvgPICallback( $target, $data ) {
+               // Don't allow external stylesheets (bug 57550)
+               if ( preg_match( '/xml-stylesheet/i', $target) ) {
+                       return true;
+               }
+               return false;
        }
 
        /**
index 2686e11..871f71b 100644 (file)
@@ -489,6 +489,8 @@ class IP {
                if ( self::isIPv6( $ip ) ) {
                        $n = self::toUnsigned6( $ip );
                } else {
+                       // Bug 60035: an IP with leading 0's fails in ip2long sometimes (e.g. *.08)
+                       $ip = preg_replace( '/(?<=\.)0+(?=[1-9])/', '', $ip );
                        $n = ip2long( $ip );
                        if ( $n < 0 ) {
                                $n += pow( 2, 32 );
index 331f3ae..0ea1fe4 100644 (file)
@@ -9,6 +9,7 @@
  *
  * @author Abanima
  * @author Csisc
+ * @author Malekbr
  */
 
 $fallback = 'ar';
@@ -84,50 +85,50 @@ $messages = array(
 'thu' => 'el5mis',
 'fri' => 'ejjom3a',
 'sat' => 'essibt',
-'january' => 'janfi',
-'february' => 'fivri',
-'march' => 'mars',
-'april' => 'avril',
-'may_long' => 'mai',
-'june' => 'juin',
-'july' => 'juillia',
-'august' => 'août',
-'september' => 'septembre',
-'october' => 'octobre',
-'november' => 'novembre',
-'december' => 'décembre',
-'january-gen' => 'janfi',
-'february-gen' => 'fivri',
-'march-gen' => 'mars',
-'april-gen' => 'avril',
-'may-gen' => 'mai',
-'june-gen' => 'juin',
-'july-gen' => 'juillia',
-'august-gen' => 'août',
-'september-gen' => 'septembre',
-'october-gen' => 'octobre',
-'november-gen' => 'novembre',
-'december-gen' => 'décembre',
-'jan' => 'Janvi',
-'feb' => 'fivri',
-'mar' => 'mars',
-'apr' => 'avril',
-'may' => 'mai',
+'january' => 'Janvi',
+'february' => 'Fivri',
+'march' => 'Mars',
+'april' => 'Avril',
+'may_long' => 'Mai',
+'june' => 'Juin',
+'july' => 'Juilia',
+'august' => 'Août',
+'september' => 'Septembre',
+'october' => 'Octobre',
+'november' => 'Novembre',
+'december' => 'Décembre',
+'january-gen' => 'Janvi',
+'february-gen' => 'Fivri',
+'march-gen' => 'Mars',
+'april-gen' => 'Avril',
+'may-gen' => 'Mai',
+'june-gen' => 'Juin',
+'july-gen' => 'Juilia',
+'august-gen' => 'Août',
+'september-gen' => 'Septembre',
+'october-gen' => 'Octobre',
+'november-gen' => 'Novembre',
+'december-gen' => 'Décembre',
+'jan' => 'Janv',
+'feb' => 'Fivr',
+'mar' => 'Mars',
+'apr' => 'Avrl',
+'may' => 'Mai',
 'jun' => 'Juin',
-'jul' => 'juillia',
-'aug' => 'août',
-'sep' => 'septembre',
-'oct' => 'octobre',
-'nov' => 'novembre',
-'dec' => 'décembre',
+'jul' => 'Juil',
+'aug' => 'Août',
+'sep' => 'Sept',
+'oct' => 'Oct',
+'nov' => 'Nov',
+'dec' => 'Déc',
 
 # Categories related messages
-'pagecategories' => '{{PLURAL:$1|لا تصنيف|تصنيف|تصنيفان|تصنيفات}}',
+'pagecategories' => '{{PLURAL:Catégorie weħed|Zouz catégories|$1 catégories|$1 en catégorie}}',
 'category_header' => 'صفحات تصنيف "$1"',
 'subcategories' => 'التصنيفات الفرعية',
 'category-media-header' => 'الوسائط في التصنيف "$1"',
 'category-empty' => "''هذا التصنيف لا يحتوي حاليا على صفحات أو وسائط.''",
-'hidden-categories' => '{{PLURAL:$1|لا تصنيف مخفيا|تصنيف مخفي|تصنيفان مخفيان|تصنيفات مخفية}}',
+'hidden-categories' => '{{PLURAL:Catégorie mkhabia waħda|Zouz catégories mkhabbin|$1 catégories mkhabbin|$1 en catégorie mkhabia}}',
 'hidden-category-category' => 'تصنيفات مخفية',
 'category-subcat-count' => '{{PLURAL:$2|لا تصانيف فرعية في هذا التصنيف|هذا التصنيف فيه التصنيف الفرعي التالي فقط.|هذا التصنيف فيه {{PLURAL:$1||هذا التصنيف الفرعي|هذين التصنيفين الفرعيين|هذه ال$1 تصانيف الفرعية|هذه ال$1 تصنيفا فرعيا|هذه ال$1 تصنيف فرعي}}، من إجمالي $2.}}',
 'category-subcat-count-limited' => 'هذا التصنيف فيه {{PLURAL:$1||التصنيف الفرعي التالي|التصنيفين الفرعيين التاليين|$1 تصانيف فرعية تالية|$1 تصنيفا فرعيا تاليا|$1 تصنيف فرعي تالي}}.',
@@ -148,7 +149,7 @@ $messages = array(
 'mypage' => 'صفحتي',
 'mytalk' => 'نقاشي',
 'anontalk' => 'النقاش لعنوان الأيبي هذا',
-'navigation' => 'إبحار',
+'navigation' => 'Navigui',
 'and' => '&#32;و',
 
 # Cologne Blue skin
@@ -169,30 +170,30 @@ $messages = array(
 'vector-action-unprotect' => 'غير الحماية',
 'vector-simplesearch-preference' => 'مكّن مقترحات البحث المُحسّنة (لواجهة فكتور فقط)',
 'vector-view-create' => 'أنشئ',
-'vector-view-edit' => 'modifi el page (baddelha)',
-'vector-view-history' => 'اعرض التاريخ',
-'vector-view-view' => 'اقرأ',
+'vector-view-edit' => 'Baddel',
+'vector-view-history' => "Warri l'historique",
+'vector-view-view' => 'Aqra',
 'vector-view-viewsource' => 'اعرض المصدر',
-'actions' => 'أفعال',
-'namespaces' => 'النطاقات',
-'variants' => 'المتغيرات',
+'actions' => 'Aεmel',
+'namespaces' => 'El espaces de noms',
+'variants' => 'Anweε',
 
 'errorpagetitle' => 'ghalath',
 'returnto' => 'ارجع إلى $1.',
-'tagline' => 'عن {{SITENAME}}',
-'help' => '3awenni ya3chek',
-'search' => 'lawwej',
-'searchbutton' => 'lawwej',
+'tagline' => 'Fima ykhoss {{SITENAME}}',
+'help' => 'Mouεawna',
+'search' => 'Lawwej',
+'searchbutton' => 'Lawwej',
 'go' => 'اذهب',
 'searcharticle' => 'اذهب',
 'history' => 'teri5 el milaf',
-'history_short' => 'تاريخ',
+'history_short' => 'Historique',
 'updatedmarker' => 'تم تحديثها منذ زيارتي الأخيرة',
-'printableversion' => 'نسخة للطباعة',
-'permalink' => 'وصلة دائمة',
+'printableversion' => 'Copie bech tetetbaε',
+'permalink' => 'Lien deyem',
 'print' => 'itthba3',
 'view' => 'عرض',
-'edit' => 'modifi el page (baddelha)',
+'edit' => 'Baddel',
 'create' => 'أنشئ',
 'editthispage' => 'modifi hal page',
 'create-this-page' => 'أنشئ هذه الصفحة',
@@ -207,14 +208,14 @@ $messages = array(
 'unprotectthispage' => 'غير حماية هذه الصفحة',
 'newpage' => 'صفحات جديدة',
 'talkpage' => 'ناقش هذه الصفحة',
-'talkpagelinktext' => 'نقاش',
+'talkpagelinktext' => 'Ħdith',
 'specialpage' => 'صفحة خاصة',
-'personaltools' => 'أدوات شخصية',
+'personaltools' => 'Outils mteεek',
 'postcomment' => 'قسم جديد',
 'articlepage' => 'عرض صفحة المحتوى',
-'talk' => 'نقاش',
-'views' => 'معاينة',
-'toolbox' => 'صندوق الأدوات',
+'talk' => 'Ħdith',
+'views' => 'Affichages',
+'toolbox' => 'Outils',
 'userpage' => 'عرض صفحة المستخدم',
 'projectpage' => 'عرض صفحة المشروع',
 'imagepage' => 'عرض صفحة الملف',
@@ -223,15 +224,15 @@ $messages = array(
 'viewhelppage' => 'عرض صفحة المساعدة',
 'categorypage' => 'عرض صفحة التصنيف',
 'viewtalkpage' => 'عرض النقاش',
-'otherlanguages' => 'بلغات أخرى',
+'otherlanguages' => 'Bloughat okhra',
 'redirectedfrom' => '(تم التحويل من $1)',
 'redirectpagesub' => 'صفحة تحويل',
-'lastmodifiedat' => 'آخر تعديل لهذه الصفحة في $2، $1.',
+'lastmodifiedat' => 'Ekher tabdil elhassafħa nhar $2, mεa $1.',
 'viewcount' => '{{PLURAL:$1|لم تعرض هذه الصفحة أبدا|تم عرض هذه الصفحة مرة واحدة|تم عرض هذه الصفحة مرتين|تم عرض هذه الصفحة $1 مرات|تم عرض هذه الصفحة $1 مرة}}.',
 'protectedpage' => 'صفحة محمية',
-'jumpto' => 'اذهب إلى:',
-'jumptonavigation' => 'إبحار',
-'jumptosearch' => 'lawwej',
+'jumpto' => 'Emchi el:',
+'jumptonavigation' => 'Navigation',
+'jumptosearch' => 'Lawwej',
 'view-pool-error' => 'عذرا، الخوادم منهكة حاليا.
 يحاول مستخدمون كثر الوصول إلى هذه الصفحة.
 من فضلك انتظر قليلا قبل أن تحاول الوصول إلى هذه الصفحة مجددا.
@@ -242,23 +243,23 @@ $1',
 '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:عن',
+'aboutsite' => 'Fima ykhoss {{SITENAME}}',
+'aboutpage' => 'Project:Fima ykhoss',
 'copyright' => 'المحتوى متوفر تحت $1.',
 'copyrightpage' => '{{ns:project}}:حقوق النسخ',
-'currentevents' => 'الأحداث الجارية',
-'currentevents-url' => 'Project:الأحداث الجارية',
-'disclaimers' => 'عدم مسؤولية',
-'disclaimerpage' => 'Project:عدم مسؤولية عام',
+'currentevents' => 'Laħdeth mtaε tawa',
+'currentevents-url' => 'Project:Laħdeth mtaε tawa',
+'disclaimers' => "Ɛadam mas'ouliya",
+'disclaimerpage' => "Project:Ɛadam mas'ouliya bsifa εamma",
 'edithelp' => 'مساعدة التحرير',
-'helppage' => 'Help:محتويات',
-'mainpage' => 'الصفحة الرئيسية',
-'mainpage-description' => 'الصفحة الرئيسية',
+'helppage' => 'Help:Contenu',
+'mainpage' => 'Elpage principale',
+'mainpage-description' => 'Elpage principale',
 'policy-url' => 'Project:سياسة',
-'portal' => 'بوابة المجتمع',
-'portal-url' => 'Project:بوابة المجتمع',
-'privacy' => 'سÙ\8aاسة Ø§Ù\84خصÙ\88صÙ\8aØ©',
-'privacypage' => 'Project:سÙ\8aاسة Ø§Ù\84خصÙ\88صÙ\8aØ©',
+'portal' => 'Mojtamaε',
+'portal-url' => 'Project:Mojtamaε',
+'privacy' => 'Syeset elconfidentialité',
+'privacypage' => 'Project:Syeset elconfidentialité',
 
 'badaccess' => 'خطأ في السماح',
 'badaccess-group0' => 'ليس من المسموح لك تنفيذ الفعل الذي طلبته.',
@@ -268,16 +269,16 @@ $1',
 'versionrequiredtext' => 'تلزم النسخة $1 من ميدياويكي لاستعمال هذه الصفحة. انظر [[Special:Version|صفحة النسخة]]',
 
 'ok' => 'ok',
-'retrievedfrom' => 'تم الاسترجاع من "$1"',
+'retrievedfrom' => 'Tekhdhet men "$1"',
 'youhavenewmessages' => 'توجد لديك $1 ($2).',
 'youhavenewmessagesmulti' => 'لديك رسائل جديدة على $1',
-'editsection' => 'modifi el page (baddelha)',
-'editold' => 'modifi el page (baddelha)',
+'editsection' => 'Baddel essafħa',
+'editold' => 'Baddel',
 'viewsourceold' => 'اعرض المصدر',
 'editlink' => 'modifi el page (baddelha)',
-'viewsourcelink' => 'اعرض المصدر',
-'editsectionhint' => 'حرر القسم: $1',
-'toc' => 'ta3li9at',
+'viewsourcelink' => 'Warri essource',
+'editsectionhint' => 'Baddel essection: $1',
+'toc' => 'Contenu',
 'showtoc' => 'اعرض',
 'hidetoc' => 'أخف',
 'collapsible-collapse' => 'اطو',
@@ -289,20 +290,20 @@ $1',
 'feed-invalid' => 'نوع اشتراك التلقيم غير صحيح.',
 'feed-unavailable' => 'التلقيمات غير متوفرة',
 'site-rss-feed' => '$1 تلقيم أر إس إس',
-'site-atom-feed' => '$1 تلقيم أتوم',
+'site-atom-feed' => 'Flux Atom mtaε $1',
 'page-rss-feed' => '"$1" تلقيم أر إس إس',
 'page-atom-feed' => '$1 تلقيم أتوم',
-'red-link-title' => '$1 (الصفحة غير موجودة)',
+'red-link-title' => '$1 (Essafħa mouch mawjouda)',
 'sort-descending' => 'ترتيب تنازلي',
 'sort-ascending' => 'ترتيب تصاعدي',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main' => "ss'af7a",
+'nstab-main' => 'Safħa',
 'nstab-user' => 'صفحة مستخدم',
 'nstab-media' => 'صفحة وسيط',
-'nstab-special' => 'صفحة خاصة',
+'nstab-special' => 'Safħa spéciale',
 'nstab-project' => 'صفحة مشروع',
-'nstab-image' => 'milaf (Fichier)',
+'nstab-image' => 'Fichier',
 'nstab-mediawiki' => 'رسالة',
 'nstab-template' => 'قالب',
 'nstab-help' => 'صفحة مساعدة',
@@ -327,12 +328,12 @@ $1',
 'readonlytext' => 'قاعدة البيانات مغلقة حاليا أمام المدخلات الجديدة والتعديلات الأخرى، السبب غالبا ما يكون الصيانة، وستعود قاعدة البيانات للوضع الطبيعي قريبا.
 
 الإداري الذي أغلق قاعدة البيانات أعطى التفسير التالي: $1',
-'missing-article' => 'لم تجد قاعدة البيانات النص الخاص بصفحة كان يجب أن تجدها، واسمها "$1" $2.
+'missing-article' => 'Elbase de données malqatech ettexte mtaε essafħa elli supposée talqaha, welli esmha "$1" $2.
 
-عادة ما يحدث هذا عند اتباع فرق قديم أو وصلة تاريخ تؤدي إلى صفحة حذفت.
+Hedha elli ysir elεada waqtelli tħel farq qdim walla lien mtaε l\'historique mtaε safħa tnaħħat.
 
-إذا لم تكن هذه هي الحالة، فالمحتمل أنك وجدت خللا في البرنامج.
-من فضلك أبلغ أحد [[Special:ListUsers/sysop|الإداريين]]، وأعطه وصلة إلى مسار هذه الصفحة.',
+Idha ken mouch hedheka li sar, rak momken lqit mochkla fel programme.
+Aman qoul elweħeb mel les [[Special:ListUsers/sysop|administrateurs]], waεtih ellien elli ħabit temchilou.',
 'missingarticle-rev' => '(رقم المراجعة: $1)',
 'missingarticle-diff' => '(فرق: $1، $2)',
 'readonly_lag' => 'تم إغلاق قاعدة البيانات تلقائيا حتى تستطيع الخواديم التابعة ملاحقة الخادوم الرئيسي',
@@ -406,7 +407,7 @@ $2',
 'yourdomainname' => 'نطاقك:',
 'externaldberror' => 'هناك إما خطأ في دخول قاعدة البيانات الخارجية أو أنه غير مسموح لك بتحديث حسابك الخارجي.',
 'login' => 'ادخل',
-'nav-login-createaccount' => 'ادخل / أنشئ حسابا',
+'nav-login-createaccount' => 'Connecti / aεmel compte',
 'loginprompt' => 'يجب أن تكون الكوكيز لديك مفعلة لتسجل الدخول إلى {{SITENAME}}.',
 'userlogin' => 'ادخل / أنشئ حسابا',
 'userloginnocreate' => 'دخول',
@@ -646,10 +647,9 @@ $2
 لذا فيجب علينا استعمال رقم الأيبي للتعرف عليه/عليها.
 مثل هذا العنوان يمكن أن يشترك فيه عدة مستخدمين.
 لو كنت مستخدما مجهولا وتشعر بأن تعليقات لا تخصك تم توجيهها إليك، من فضلك [[Special:UserLogin/signup|أنشئ حسابا]] أو [[Special:UserLogin|سجل الدخول]] لتجنب الارتباك المستقبلي مع مستخدمين مجهولين آخرين.''",
-'noarticletext' => 'لا يوجد حاليا أي نص في هذه الصفحة.
-يمكنك [[Special:Search/{{PAGENAME}}|البحث عن عنوان هذه الصفحة]] في الصفحات الأخرى،
-<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} البحث في السجلات المتعلقة]،
-أو [{{fullurl:{{FULLPAGENAME}}|action=edit}} تعديل هذه الصفحة]</span>.',
+'noarticletext' => 'Mafamma ħatta texte tawa f\'essafħa hedhi.
+Tnajjem [[Special:Search/{{PAGENAME}}|tfarkes εal titre mtaε essafħa]] fi safħat okhrine, <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} tfarkes f\'elhistoriques elli εandhom εaleqa], 
+walla [{{fullurl:{{FULLPAGENAME}}|action=edit}} tbaddel essafħa hedhi]</span>',
 'noarticletext-nopermission' => 'لا يوجد حاليا أي نص في هذه الصفحة.يمكنك [[Special:Search/{{PAGENAME}}|البحث عن عنوان هذه الصفحة]] في الصفحات الأخرى,أو <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} بحث السجلات المتصلة]</span>.',
 'userpage-userdoesnotexist' => 'حساب المستخدم "<nowiki>$1</nowiki>" غير مسجل.
 من فضلك تأكد أنك تريد إنشاء/تعديل هذه الصفحة.',
@@ -734,7 +734,7 @@ $2
 'templatesused' => '{{PLURAL:$1||القالب المستخدم|القالبان المستخدمان|القوالب المستخدمة}} في هذه الصفحة:',
 'templatesusedpreview' => '{{PLURAL:$1||القالب المستخدم|القالبان المستخدمان|القوالب المستخدمة}} في هذه المعاينة:',
 'templatesusedsection' => '{{PLURAL:$1||القالب المستخدم|القالبان المستخدمان|القوالب المستخدمة}} في هذا القسم:',
-'template-protected' => '(Ø­Ù\85اÙ\8aØ© Ù\83اÙ\85Ù\84Ø©)',
+'template-protected' => '(protégé)',
 'template-semiprotected' => '(حماية جزئية)',
 'hiddencategories' => '{{PLURAL:$1|هذه الصفحة غير موجودة في أي تصنايف مخفية|هذه الصفحة موجودة في تصنيف مخفي واحد|هذه الصفحة موجودة في تصنيفين مخفيين|هذه الصفحة موجودة في $1 تصانيف مخفية|هذه الصفحة موجودة في $1 تصنيفا مخفيا|هذه الصفحة موجودة في $1 تصنيف مخفي}}:',
 'nocreatetext' => 'قام {{SITENAME}} بتحديد القدرة على إنشاء صفحات جديدة.
@@ -801,7 +801,7 @@ $2
 'nohistory' => 'لا يوجد تاريخ للتعديلات لهذه الصفحة.',
 'currentrev' => 'المراجعة الحالية',
 'currentrev-asof' => 'المراجعة الحالية بتاريخ $1',
-'revisionasof' => 'مراجعة $1',
+'revisionasof' => 'Version mtaε $1',
 'revision-info' => 'مراجعة $1 بواسطة $2',
 'previousrevision' => '→ مراجعة أقدم',
 'nextrevision' => 'مراجعة أحدث ←',
@@ -960,41 +960,41 @@ $1",
 'difference-title' => '«$1»: الفرق بين المراجعتين',
 'difference-title-multipage' => '«$1» و«$2»: الفرق بين الصفحتين',
 'difference-multipage' => '(الفرق بين الصفحتين)',
-'lineno' => 'سطر $1:',
+'lineno' => 'Star $1:',
 'compareselectedversions' => 'قارن بين النسختين المختارتين',
 'showhideselectedversions' => 'أظهر/أخف المراجعات المختارة',
-'editundo' => 'تراجع',
+'editundo' => 'Rajjaε',
 'diff-multi' => '({{PLURAL:$1||مراجعة واحدة متوسطة غير معروضة أجراها|مراجعتان متوسطتان غير معروضتين أجراهما|$1 مراجعات متوسطة غير معروضة أجراها|$1 مراجعة متوسطة غير معروضة أجراها}} {{PLURAL:$2||مستخدم واحد|مستخدمان|$2 مستخدمين|$2 مستخدمًا|$2 مستخدم}}.)',
 'diff-multi-manyusers' => '({{PLURAL:$1||مراجعة واحدة متوسطة غير معروضة أجراها|مراجعتان متوسطتان غير معروضتان أجراهما|$1 مراجعات متوسطة غير معروضة أجراها|$1 مراجعة متوسطة غير معروضة أجراها}} أكثر من {{PLURAL:$2||مستخدم واحد|مستخدمين|$2 مستخدمين|$2 مستخدمًا|$2 مستخدم}}.)',
 
 # Search results
-'searchresults' => 'el resultats',
-'searchresults-title' => 'نتائج البحث عن "$1"',
+'searchresults' => 'Elrésultats mtaε elrecherche',
+'searchresults-title' => 'Elrésultats mtaε elrecherche εla "$1"',
 'prevn' => '{{PLURAL:$1|$1}} السابقة',
 'nextn' => '{{PLURAL:$1|$1}} التالية',
 'prevn-title' => '$1 {{PLURAL:$1|نتيجة|نتيجة}} سابقة',
 'nextn-title' => '$1 {{PLURAL:$1|نتيجة|نتيجة}} سابقة',
-'shown-title' => 'عرض $1 {{PLURAL:$1|نتيجة|نتيجة}} لكل صفحة',
-'viewprevnext' => 'عرض ($1 {{int:pipe-separator}} $2) ($3).',
+'shown-title' => ' Warri{{PLURAL:Résultat weħed|Zouz résultats|$1  résultats|$1 en résultat}} men kol safħa',
+'viewprevnext' => 'Chouf ($1 {{int:pipe-separator}} $2) ($3)',
 'searchmenu-exists' => "'''famma ss'af7a ismha \"[[:\$1]]\" fi hedha el wiki.'''",
 'searchmenu-new' => "'''أنشئ الصفحة \"[[:\$1]]\" في هذا الويكي!'''",
-'searchprofile-articles' => 'صفحات المحتوى',
-'searchprofile-project' => 'صفحات المساعدة والمشروع',
-'searchprofile-images' => 'الوسائط المتعددة',
-'searchprofile-everything' => 'كل شيء',
-'searchprofile-advanced' => 'متقدم',
-'searchprofile-articles-tooltip' => 'ابحث في $1',
-'searchprofile-project-tooltip' => 'ابحث في $1',
-'searchprofile-images-tooltip' => 'ابحث عن ملفات',
-'searchprofile-everything-tooltip' => 'ابحث في كل المحتوى (شاملا صفحات النقاش)',
-'searchprofile-advanced-tooltip' => 'ابحث في النطاقات المخصصة',
-'search-result-size' => '$1 ({{PLURAL:$2|لا كلمات|كلمة واحدة|كلمتان|$2 كلمات|$2 كلمة}})',
+'searchprofile-articles' => 'Safħat mtaε contenu',
+'searchprofile-project' => 'Safħat mtaε elmouεawna w les projets',
+'searchprofile-images' => 'Multimédia',
+'searchprofile-everything' => 'Kol chay',
+'searchprofile-advanced' => 'Avancé',
+'searchprofile-articles-tooltip' => 'Farkes fi $1',
+'searchprofile-project-tooltip' => 'Farkis fi $1',
+'searchprofile-images-tooltip' => "Farkes f'elfichiers",
+'searchprofile-everything-tooltip' => 'Farkes kol chay (ħatta safħat leħdith)',
+'searchprofile-advanced-tooltip' => 'Ekhtar les espaces de noms elli bech tfarkes εlihom',
+'search-result-size' => '$1 ({{PLURAL:Ħatta kelma|Kelma waħda|Kelmtin|$2 kelmat|$2 en kelma}})',
 'search-result-category-size' => '{{PLURAL:$1|لا أعضاء|عضو واحد|عضوان|$1 أعضاء|$1 عضوًا|$1 عضو}} ({{PLURAL:$2|لا تصانيف فرعية|تصنيف فرعي واحد|تصنيفان فرعيان|$2 تصنيفات فرعية|$2 تصنيفًا فرعيًا|$2 تصنيف فرعي}} و{{PLURAL:$3|لا ملفات|ملف واحد|ملفان|$3 ملفات|$3 ملفًا|$3 ملف}})',
 'search-redirect' => '(تحويلة $1)',
-'search-section' => '(قسم $1)',
+'search-section' => '(section $1)',
 'search-suggest' => 'هل كنت تقصد: $1',
 'searchrelated' => 'مرتبطة',
-'searchall' => 'الكل',
+'searchall' => 'Elkol',
 'showingresultsheader' => "{{PLURAL:$5|النتيجة '''$1''' من'''$3'''|النتائج '''$1 - $2''' من'''$3'''}} ل'''$4'''",
 'search-nonefound' => 'لا توجد نتائج تطابق الاستعلام.',
 
@@ -1013,7 +1013,7 @@ $1",
 
 # Recent changes
 'nchanges' => '{{PLURAL:$1|لا تغييرات|تغيير واحد|تغييران|$1 تغييرات|$1 تغييرا|$1 تغيير}}',
-'recentchanges' => 'أحدث التغييرات',
+'recentchanges' => 'Ajad tabdilet',
 'recentchanges-legend' => 'خيارات أحدث التغييرات',
 'recentchanges-summary' => 'تابع أحدث التغييرات للويكي عبر هذه التلقيمة.',
 'recentchanges-feed-description' => 'تابع أحدث التغييرات للويكي عبر هذه التلقيمة.',
@@ -1030,8 +1030,8 @@ $1",
 'rcshowhidepatr' => '$1 التعديلات المراجعة',
 'rcshowhidemine' => '$1 تعديلاتي',
 'rclinks' => 'أظهر آخر $1 تعديل في آخر $2 يوم<br />$3',
-'diff' => 'فرق',
-'hist' => 'تاريخ',
+'diff' => 'Farq',
+'hist' => 'Hist',
 'hide' => 'أخف',
 'show' => 'اعرض',
 'minoreditletter' => 'thafif',
@@ -1042,7 +1042,7 @@ $1",
 
 # Recent changes linked
 'recentchangeslinked' => 'تغييرات ذات علاقة',
-'recentchangeslinked-toolbox' => 'تغييرات ذات علاقة',
+'recentchangeslinked-toolbox' => 'Tabdilet them',
 'recentchangeslinked-title' => 'التغييرات المرتبطة ب "$1"',
 'recentchangeslinked-summary' => "هذه قائمة بالتغييرات التي تمت حديثا للصفحات الموصولة من صفحة معينة (أو إلى الأعضاء ضمن تصنيف معين).
 الصفحات في [[Special:Watchlist|قائمة مراقبتك]] '''عريضة'''",
@@ -1050,7 +1050,7 @@ $1",
 'recentchangeslinked-to' => 'أظهر التغييرات للصفحات الموصولة للصفحة المعطاة عوضا عن ذلك',
 
 # Upload
-'upload' => 'ارفع ملفات',
+'upload' => "Abεeth des fichiers l'esserveur",
 'uploadlogpage' => 'سجل الرفع',
 'filedesc' => 'ملخص:',
 'uploadedimage' => 'رفع "[[$1]]"',
@@ -1077,17 +1077,17 @@ $1",
 الوصف على [$2 صفحة وصف الملف] هناك معروض بالأسفل.',
 
 # Random page
-'randompage' => 'صفحة عشوائية',
+'randompage' => 'Safħa elli tji',
 
 # Statistics
 'statistics' => 'إحصاءات',
 
 # Miscellaneous special pages
-'nbytes' => '$1 {{PLURAL:$1|بايت|بايت}}',
+'nbytes' => '{{PLURAL:Octet weħed|Zouz octets|$1 octets|$1 en octet}}',
 'nmembers' => '{{PLURAL:$1|لا أعضاء|عضو واحد|عضوان|$1 أعضاء|$1 عضوا|$1 عضو}}',
 'prefixindex' => 'كل الصفحات بالبادئة',
 'usercreated' => '{{GENDER:$3|أنشأه|أنشأته}} في $1 الساعة $2',
-'newpages' => 'صفحات جديدة',
+'newpages' => 'Safħat jdod',
 'move' => 'انقل',
 'pager-newer-n' => '{{PLURAL:$1|أقدم 1|أقدم $1}}',
 'pager-older-n' => '{{PLURAL:$1|أقدم 1|أقدم $1}}',
@@ -1134,7 +1134,7 @@ $1",
 'dellogpage' => 'سجل الحذف',
 
 # Rollback
-'rollbacklink' => 'استرجع',
+'rollbacklink' => 'rajjaε',
 
 # Protect
 'protectlogpage' => 'سجل الحماية',
@@ -1147,7 +1147,7 @@ $1",
 # Namespace form on various pages
 'namespace' => 'النطاق',
 'invert' => 'اعكس الاختيار',
-'blanknamespace' => '(رئيسي)',
+'blanknamespace' => '(Principal)',
 
 # Contributions
 'contributions' => 'مساهماتي',
@@ -1169,7 +1169,7 @@ $1",
 'sp-contributions-submit' => 'lawwej',
 
 # What links here
-'whatlinkshere' => 'ماذا يصل هنا',
+'whatlinkshere' => 'Chnowa elli ywassel elhouni',
 'whatlinkshere-title' => 'الصفحات التي تصل إلى "$1"',
 'whatlinkshere-page' => "ss'af7a:",
 'linkshere' => "الصفحات التالية تصل إلى '''[[:$1]]''':",
@@ -1189,10 +1189,10 @@ $1",
 # Block/unblock
 'ipboptions' => 'ساعتين:2 hours,يوم واحد:1 day,3 أيام:3 days,أسبوع واحد:1 week,أسبوعين:2 weeks,شهر واحد:1 month,3 أشهر:3 months,6 أشهر:6 months,سنة واحدة:1 year,دائم:infinite',
 'ipblocklist' => 'المستخدمون الممنوعون',
-'blocklink' => 'امنع',
+'blocklink' => 'Bloqui',
 'unblocklink' => 'ارفع المنع',
 'change-blocklink' => 'تغيير المنع',
-'contribslink' => 'مساهمات',
+'contribslink' => 'Mousehmet',
 'blocklogpage' => 'سجل المنع',
 'blocklogentry' => 'منع "[[$1]]" لفترة زمنية مدتها $2 $3',
 'block-log-flags-nocreate' => 'إنشاء الحسابات ممنوع',
@@ -1209,7 +1209,7 @@ $1",
 'allmessagesdefault' => 'النص الافتراضي',
 
 # Thumbnails
-'thumbnail-more' => 'كبّر',
+'thumbnail-more' => 'Kabber',
 'thumbnail_error' => 'خطأ في إنشاء صورة مصغرة: $1',
 
 # Tooltip help for the actions
@@ -1218,41 +1218,40 @@ $1",
 'tooltip-pt-preferences' => 'تفضيلاتي',
 'tooltip-pt-watchlist' => 'قائمة الصفحات التي تراقب التغييرات التي تحدث بها',
 'tooltip-pt-mycontris' => 'قائمة مساهماتك',
-'tooltip-pt-login' => 'يفضل أن تسجل الدخول، لكنه ليس إلزاميا.',
+'tooltip-pt-login' => 'Madhabina ken tconnecti, ama mouch bessif',
 'tooltip-pt-logout' => 'خروج',
-'tooltip-ca-talk' => 'نقاش عن صفحة المحتوى',
-'tooltip-ca-edit' => 'يمكنك تعديل هذه الصفحة.
-من فضلك استخدم زر العرض المسبق قبل الحفظ.',
+'tooltip-ca-talk' => 'Discussion εal contenu mtaε essafħa',
+'tooltip-ca-edit' => 'Tannjem tbaddel essafħa hedhi. Aman enzel εal bouton mtaε elvue el msabqa qbal matsajjel.',
 'tooltip-ca-addsection' => 'ابدأ قسما جديدا',
-'tooltip-ca-viewsource' => 'هذه الصفحة محمية.
-يمكنك رؤية مصدرها.',
-'tooltip-ca-history' => 'النسخ السابقة لهذه الصفحة',
+'tooltip-ca-viewsource' => 'El safħa protégée.
+Tnajjem tchouf essource mteεha.',
+'tooltip-ca-history' => 'Copiet qdom mtaε essafħa hedhi',
 'tooltip-ca-protect' => 'احم هذه الصفحة',
 'tooltip-ca-delete' => 'احذف هذه الصفحة',
 'tooltip-ca-move' => 'علم هذه الصفحة',
 'tooltip-ca-watch' => 'أضف هذه الصفحة إلى قائمة مراقبتك',
 'tooltip-ca-unwatch' => 'أزل هذه الصفحة من قائمة مراقبتك',
-'tooltip-search' => 'lawwej fi {{SITENAME}}',
+'tooltip-search' => 'Lawwej fi {{SITENAME}}',
 'tooltip-search-go' => 'اذهب إلى صفحة بالاسم نفسه إن وجدت',
-'tooltip-search-fulltext' => 'ابحث في الصفحات عن هذا النص',
-'tooltip-p-logo' => "ara ess'af7a elraïssia",
-'tooltip-n-mainpage' => "ara ess'af7a elraïssia",
-'tooltip-n-mainpage-description' => "ara ess'af7a elraïssia",
-'tooltip-n-portal' => 'حول المشروع، ماذا يمكن أن تفعل، أين يمكن أن تجد ما تحتاجه',
-'tooltip-n-currentevents' => 'مطالعة سريعة لأهم الأحداث الجارية',
-'tooltip-n-recentchanges' => 'قائمة أحدث التغييرات في الويكي.',
-'tooltip-n-randompage' => 'حمل صفحة عشوائية',
-'tooltip-n-help' => 'المكان للمساعدة',
-'tooltip-t-whatlinkshere' => 'قائمة بكل صفحات الويكي التي تصل هنا',
-'tooltip-t-recentchangeslinked' => 'أحدث التغييرات في الصفحات الموصولة من هذه الصفحة',
+'tooltip-search-fulltext' => "Farkes f'essafħat εattexte hedha",
+'tooltip-p-logo' => "Emchi l'elpage principale",
+'tooltip-n-mainpage' => "Emchi l'elpage principale",
+'tooltip-n-mainpage-description' => "Emchi l'elpage principale",
+'tooltip-n-portal' => "Ɛ'almachrouε, chnowa tnajem taεmel, win talqa elli ħajtek bih",
+'tooltip-n-currentevents' => ' Alqa information εla aham laħdeth mtaε tawa',
+'tooltip-n-recentchanges' => "Lista mtaε ajad ettabdilat f'elwiki",
+'tooltip-n-randompage' => 'Ħell safħa elli tji',
+'tooltip-n-help' => 'Mouεawna',
+'tooltip-t-whatlinkshere' => 'Lista mtaε safħat elwiki elkol elli twassel elhouni',
+'tooltip-t-recentchangeslinked' => "Aham ettabldilet f'essafħat elli ywaslou l'essafħa hedhi",
 'tooltip-feed-atom' => 'تلقيم أتوم لهذه الصفحة',
 'tooltip-t-contributions' => 'رؤية قائمة مساهمات هذا المستخدم',
 'tooltip-t-emailuser' => 'أرسل رسالة لهذا المستخدم',
-'tooltip-t-upload' => 'ارفع ملفات',
-'tooltip-t-specialpages' => 'قائمة بكل الصفحات الخاصة',
-'tooltip-t-print' => 'نسخة للطباعة لهذه الصفحة',
-'tooltip-t-permalink' => 'وصلة دائمة لهذه النسخة من الصفحة',
-'tooltip-ca-nstab-main' => 'رؤية صفحة المحتوى',
+'tooltip-t-upload' => "Abεeth des fichiers l'esserveur",
+'tooltip-t-specialpages' => 'Lista mtaε essafħat esspéciales elkol',
+'tooltip-t-print' => "Version l'ettabεan mtaε essafħa hedhi.",
+'tooltip-t-permalink' => "Lien dayem l'elversion hedhi mtaε essafħa",
+'tooltip-ca-nstab-main' => 'Chouf elcontenu mtaε essafħa',
 'tooltip-ca-nstab-user' => 'اعرض صفحة المستخدم',
 'tooltip-ca-nstab-special' => 'هذه صفحة خاصة، لا تستطيع أن تعدل الصفحة نفسها',
 'tooltip-ca-nstab-project' => 'رؤية صفحة المحتوى',
@@ -1265,8 +1264,9 @@ $1",
 'tooltip-diff' => 'اعرض التغييرات التي قمت بها للنص.',
 'tooltip-compareselectedversions' => 'شاهد الفروق بين النسختين المختارتين من هذه الصفحة.',
 'tooltip-watch' => 'أضف هذه الصفحة إلى قائمة مراقبتك',
-'tooltip-rollback' => '"استرجاع" تسترجع التعديل (التعديلات)  في هذه الصفحة للمساهم الأخير بضغطة واحدة.',
-'tooltip-undo' => '"رجوع" تسترجع هذا التعديل وتفتح نافذة التعديل في نمط العرض المسبق. تسمح بإضافة سبب في الملخص.',
+'tooltip-rollback' => '"Rajjaε" yrajjeε ettabdilet f\'hassafħa el\'ekher weħed baddel fi nazla waħda.',
+'tooltip-undo' => '"رجوع" تسترجع هذا التعديل وتفتح نافذة التعديل في نمط العرض المسبق. تسمح بإضافة سبب في الملخص.
+"Annuler" trajjeε eltabdila lekhra w tħel fenêtre mtaε  el tabdil mtaε elvue el msabqa. Tnajjem tqoul εlech f\'ettalkhis.',
 'tooltip-summary' => 'أدخل ملخصا قصيرا',
 
 # Browsing diffs
@@ -1280,11 +1280,10 @@ $1",
 'show-big-image' => 'دقة كاملة',
 
 # Bad image list
-'bad_image_list' => 'الصيغة كالتالي:
-
-فقط عناصر القائمة (السطور التي تبدأ ب *) تؤخذ في الاعتبار.
-يجب أن تكون أول وصلة في السطر وصلة لملف سيىء.
-أي وصلات تالية في السطر نفسه تعتبر استثناءات، أي صفحات قد يكون الملف فيها سطريا.',
+'bad_image_list' => "Elformat kima hakka:
+Les élements mtaε lista (lostra elli yabdew b' *) yetħesbou.
+Ellien lowel fi star yelzmou ykoun lien el fichier khayeb.
+Ay lien ekher fi nafs estar yetħseb exception, maħneha des pages win elfichier ynajem ykoun fi star.",
 
 # Metadata
 'metadata' => 'بيانات ميتا',
@@ -1320,7 +1319,7 @@ $1",
 'duplicate-defaultsort' => '\'\'\'تحذير:\'\'\' مفتاح الترتيب الافتراضي "$2" يتجاوز مفتاح الترتيب الافتراضي السابق "$1".',
 
 # Special:SpecialPages
-'specialpages' => 'الصفحات الخاصة',
+'specialpages' => 'Safħat spéciales',
 
 # External image whitelist
 'external_image_whitelist' => ' #<pre>اترك هذا السطر تماما كما هو
index c6cfd54..cfc52a6 100644 (file)
@@ -33,6 +33,7 @@
  * @author Hakeem
  * @author Histolo2
  * @author Houcinee1
+ * @author Ibrahim.ID
  * @author Jak
  * @author Khaledhosny
  * @author Lord Anubis
@@ -62,6 +63,7 @@
  * @author Zack wadghiri
  * @author Zanatos
  * @author أحمد
+ * @author الهميان
  * @author ترجمان05
  * @author خالد حسني
  * @author روخو
@@ -1333,6 +1335,8 @@ $2
 'content-not-allowed-here' => '"$1" المحتوى غير مسموح على صفحة [[$2]]',
 'editwarning-warning' => 'قد تتسبب مغادرة هذه الصفحة بخسارتك لأي تغييرات أجريتها.
 يمكنك تعطيل هذا التحذير إذا كنت والجًا في قسم "التحرير" في تفضيلاتك.',
+'editpage-notsupportedcontentformat-title' => 'تنسيق المحتوى غير مدعوم',
+'editpage-notsupportedcontentformat-text' => 'تنسيق المحتوى $1 غير مدعوم بواسطة نموذج المحتوى $2.',
 
 # Content models
 'content-model-wikitext' => 'نص ويكي',
@@ -1375,6 +1379,9 @@ $2
 'cantcreateaccount-text' => "إنشاء الحسابات من عنوان الأيبي هذا ('''$1''') تم منعه بواسطة [[User:$3|$3]].
 
 السبب المعطى بواسطة $3 هو ''$2''",
+'cantcreateaccount-range-text' => "إنشاء الحسابات من عناوين الآيبي في النطاق '''$1'''، التي تحتوي على الآيبي الخاص بك ('''$4''')، قد حظرها [[مستخدم:$3|$3]].
+
+سبب الحظر الذي قاله $3 هو ''$2''",
 
 # History pages
 'viewpagelogs' => 'اعرض سجلات هذه الصفحة',
@@ -1794,7 +1801,7 @@ $1",
 'right-reupload-shared' => 'الرفع على الملفات في مستودع الملفات المشترك محليا',
 'right-upload_by_url' => 'رفع ملف من عنوان مسار',
 'right-purge' => 'تحديث كاش الموقع لصفحة بدون تأكيد',
-'right-autoconfirmed' => 'تعدÙ\8aÙ\84 Ø§Ù\84صÙ\81حات Ù\86صÙ\81 Ø§Ù\84Ù\85Ø­Ù\85Ù\8aØ©',
+'right-autoconfirmed' => 'غÙ\8aر Ù\85تأثر Ø¨Ø­Ø¯Ù\88د Ø§Ù\84Ù\85عدÙ\84',
 'right-bot' => 'تعامل كعملية أوتوماتيكية',
 'right-nominornewtalk' => 'عدم جعل التعديلات الطفيفة لصفحات النقاش تظهر برواز الرسائل الجديدة',
 'right-apihighlimits' => 'استخدام حدود أعلى في استعلامات API',
@@ -1825,6 +1832,7 @@ $1",
 'right-editmyusercss' => 'تعديل ملفات CSS للمستخدم نفسه',
 'right-editmyuserjs' => 'تعديل ملفات جافاسكربت للمستخدم نفسه',
 'right-viewmywatchlist' => 'عرض قائمة مراقبتك',
+'right-editmywatchlist' => 'حرر قائمة مراقبتك. لاحظ أن بعض الإجراءات لا تزال تضيف الصفحات حتى بدون هذا الحق.',
 'right-viewmyprivateinfo' => 'إستعرض بياناتك الشخصية (مثل البريد الإلكتروني والإسم الحقيقي)',
 'right-editmyprivateinfo' => 'حرر بياناتك الشخصية (مثل البريد الإلكتروني والإسم الحقيقي)',
 'right-editmyoptions' => 'تعديل تفضيلاتك',
@@ -1914,7 +1922,7 @@ $1",
 'rclistfrom' => 'أظهر التغييرات بدءا من $1',
 'rcshowhideminor' => '$1 التعديلات الطفيفة',
 'rcshowhidebots' => '$1 البوتات',
-'rcshowhideliu' => '$1 المستخدمين المسجلين',
+'rcshowhideliu' => '$1 {{GENDER:$1|مستخدمين مسجلين|مستخدمات مسجلات|مستخدمون مسجلون}}',
 'rcshowhideanons' => '$1 المستخدمين المجهولين',
 'rcshowhidepatr' => '$1 التعديلات المراجعة',
 'rcshowhidemine' => '$1 تعديلاتي',
@@ -2034,6 +2042,8 @@ $1",
 [[File:$1|thumb|center|$1]]',
 'file-exists-duplicate' => 'هذا الملف مكرر  {{PLURAL:$1|للملف|للملفات}} التالية:',
 'file-deleted-duplicate' => 'ملف مطابق لهذه الملف ([[:$1]]) تم حذفه من قبل. ينبغي أن تتحقق من تاريخ الحذف لهذا الملف قبل المتابعة بإعادة رفعه.',
+'file-deleted-duplicate-notitle' => 'سابقا تم حذف ملف مطابق لهذا الملف، وقد تم منع العنوان.
+ينبغي أن تسأل شخص ما لديه القدرة على عرض بيانات الملف الممنوع لاستعراض الوضع قبل الشروع في إعادة تحميله.',
 'uploadwarning' => 'تحذير الرفع',
 'uploadwarning-text' => 'من فضلك عدل وصف الملف أدناه وحاول مرة أخرى.',
 'savefile' => 'احفظ الملف',
@@ -2354,6 +2364,8 @@ $1',
 'pageswithprop-text' => 'تسرد هذه الصفحة الصفحات التي تستخدم خاصية صفحة معينة.',
 'pageswithprop-prop' => 'اسم الخاصية:',
 'pageswithprop-submit' => 'اذهب',
+'pageswithprop-prophidden-long' => 'قيمة خاصية النص الطويل المخفية ($1)',
+'pageswithprop-prophidden-binary' => 'قيمة الخاصية الثنائية المخفية ($1)',
 
 'doubleredirects' => 'تحويلات مزدوجة',
 'doubleredirectstext' => 'هذه الصفحة تعرض الصفحات التي تحول إلى صفحات تحويل أخرى.
@@ -2381,6 +2393,7 @@ $1',
 'ninterwikis' => '$1 {{PLURAL:$1|interwiki|interwikis}}',
 'nlinks' => '{{PLURAL:$1|لا وصلات|وصلة واحدة|وصلتان|$1 وصلات|$1 وصلة}}',
 'nmembers' => '{{PLURAL:$1|لا أعضاء|عضو واحد|عضوان|$1 أعضاء|$1 عضوا|$1 عضو}}',
+'nmemberschanged' => '$1 → $2 {{PLURAL:$2|عضو|أعضاء}}',
 'nrevisions' => '{{PLURAL:$1|لا مراجعات|مراجعة واحدة|مراجعتان|$1 مراجعات|$1 مراجعة}}',
 'nviews' => '{{PLURAL:$1|مشاهدة واحدة|مشاهدتان|$1 مشاهدات|$1 مشاهدة}}',
 'nimagelinks' => 'مستخدم في {{PLURAL:$1||صفحة واحدة|صفحتين|$1 صفحات|$1 صفحة}}',
@@ -2419,6 +2432,7 @@ $1',
 'protectedpages' => 'صفحات محمية',
 'protectedpages-indef' => 'عمليات الحماية غير المحددة فقط',
 'protectedpages-cascade' => 'الحماية المضمنة فقط',
+'protectedpages-noredirect' => 'أخفِ التحويلات',
 'protectedpagesempty' => 'لا توجد صفحات محمية حاليا بهذه المحددات.',
 'protectedtitles' => 'عناوين محمية',
 'protectedtitlesempty' => 'لا توجد عناوين محمية حاليا بهذه المحددات.',
@@ -2529,7 +2543,8 @@ $1',
 'listgrouprights' => 'صلاحيات مجموعات المستخدمين',
 'listgrouprights-summary' => 'التالي قائمة بمجموعات المستخدمين المعرفة في هذا الويكي، بصلاحياتهم المصاحبة.
 ربما تكون هناك [[{{MediaWiki:Listgrouprights-helppage}}|معلومات إضافية]] حول الصلاحيات المنفردة.',
-'listgrouprights-key' => '* <span class="listgrouprights-granted">صلاحية ممنوحة</span>
+'listgrouprights-key' => 'عنوان:
+* <span class="listgrouprights-granted">صلاحية ممنوحة</span>
 * <span class="listgrouprights-revoked">صلاحية مسحوبة</span>',
 'listgrouprights-group' => 'المجموعة',
 'listgrouprights-rights' => 'الصلاحيات',
@@ -2686,15 +2701,18 @@ $UNWATCHURL
 'deleteotherreason' => 'سبب آخر/إضافي:',
 'deletereasonotherlist' => 'سبب آخر',
 'deletereason-dropdown' => '*أسباب الحذف الشائعة
-** طلب المؤلف
+** سخام
+** تخريب
 ** خرق لحقوق التأليف والنشر
-** تخريب',
+** طلب المؤلف
+** تحويلة مكسورة',
 'delete-edit-reasonlist' => 'عدل أسباب الحذف',
 'delete-toobig' => 'لهذه الصفحة تاريخ تعديل طويل، أكثر من {{PLURAL:$1||مراجعة واحدة|مراجعتين|$1 مراجعات|$1 مراجعة}}.
 قُيّد محذف مثل هذه الصفحات لمنع الاضطراب المفاجئة في {{SITENAME}}.',
 'delete-warning-toobig' => 'لهذه الصفحة تاريخ تعديل طويل، أكثر من {{PLURAL:$1||مراجعة واحدة|مراجعتين|$1 مراجعات|$1 مراجعة}}.
 قد يؤدي حذفها إلى اضطراب عمليات قاعدة البيانات في {{SITENAME}}؛
 استمر مع الحذر.',
+'deleting-backlinks-warning' => "'''تحذير:''' ترتبط صفحات أخرى بالصفحة التي أنت على وشك حذفها.",
 
 # Rollback
 'rollback' => 'استرجاع التعديلات',
@@ -2935,6 +2953,7 @@ $1',
 أنظر [[Special:BlockList|قائمة منع الآيبي]] لمراجعة حالات المنع.',
 'ipb-blockingself' => 'أنت على وشك منع نفسك! أمتأكد من رغبتك في القيام بذلك؟',
 'ipb-confirmhideuser' => 'أنت على وشك منع مستخدم مع تفعيل خيار "أخف المستخدم". سوف يخفي هذا الخيار اسم المستخدم من جميل القوائم ومدخلات السجلات. أمتأكد من رغبتك في القيام بذلك؟',
+'ipb-confirmaction' => 'إن كنت متأكدًا أنك تريد القيام بذلك حقًا، فالرجاء التحقق من حقل "{{int:ipb-confirm}}" في الأسفل.',
 'ipb-edit-dropdown' => 'عدل أسباب المنع',
 'ipb-unblock-addr' => 'رفع منع $1',
 'ipb-unblock' => 'رفع المنع عن مستخدم أو عنوان أيبي',
@@ -3394,6 +3413,7 @@ $2',
 'pageinfo-length' => 'حجم الصفحة (بالبايت)',
 'pageinfo-article-id' => 'معرف الصفحة (ID)',
 'pageinfo-language' => 'لغة محتوى الصفحة',
+'pageinfo-content-model' => 'نموذج محتوى الصفحة',
 'pageinfo-robot-policy' => 'فهرسة الروبوتات',
 'pageinfo-robot-index' => 'مسموحة',
 'pageinfo-robot-noindex' => 'غير مسموحة',
@@ -4092,6 +4112,7 @@ $5
 'imgmultigoto' => 'اذهب إلى صفحة $1',
 
 # Language selector for translatable SVGs
+'img-lang-default' => '(اللغة الافتراضية)',
 'img-lang-go' => 'اذهب',
 
 # Table pager
@@ -4255,7 +4276,7 @@ $5
 'version-hook-name' => 'اسم الخطاف',
 'version-hook-subscribedby' => 'يستخدم بواسطة',
 'version-version' => '(نسخة $1)',
-'version-svn-revision' => '(r$2)',
+'version-svn-revision' => 'ن$1',
 'version-license' => 'الرخصة',
 'version-poweredby-credits' => "تدار هذه الويكي بواسطة '''[https://www.mediawiki.org/ ميدياويكي]'''، حقوق النشر © 2001-$1 $2.",
 'version-poweredby-others' => 'آخرون',
index e822d2e..9476383 100644 (file)
@@ -2897,6 +2897,10 @@ Variants for Chinese language
 'version-hook-subscribedby' => 'Abunə olan',
 'version-version' => '(Versiya $1)',
 'version-license' => 'Lisenziya',
+'version-ext-license' => 'Lisenziya',
+'version-ext-colheader-version' => 'Versiya',
+'version-ext-colheader-license' => 'Lisenziya',
+'version-ext-colheader-credits' => 'Müəlliflər',
 'version-poweredby-credits' => "Bu wiki '''[https://www.mediawiki.org/ MediaWiki]''' proqramı istifadə edilərək yaradılmışdır, müəlliflik © 2001-$1 $2.",
 'version-poweredby-others' => 'digərləri',
 'version-software-product' => 'Məhsul',
index 5dc7d8d..1282609 100644 (file)
@@ -3679,7 +3679,15 @@ Pwede mo man [[Special:EditWatchlist|gamiton an standard editor]].',
 'version-hook-name' => 'Ngaran kan pangawil',
 'version-hook-subscribedby' => 'Pinaghaguhot ni',
 'version-version' => '(Bersyon na $1)',
-'version-license' => 'Lisensiya',
+'version-license' => 'Lisensiya kan MediaWiki',
+'version-ext-license' => 'Lisensiya',
+'version-ext-colheader-name' => 'Ekstensyon',
+'version-ext-colheader-version' => 'Bersyon',
+'version-ext-colheader-license' => 'Lisensiya',
+'version-ext-colheader-description' => 'Deskripsyon',
+'version-ext-colheader-credits' => 'Mga Kagsurat',
+'version-license-title' => 'Lisensiya para sa $1',
+'version-license-not-found' => 'Mayong detalyadong impormasyon sa lisensiya an nanumpungan para sa ekstensyon na ini.',
 'version-poweredby-credits' => "An wiking ini pinagpagana kan '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'mga iba pa',
 'version-poweredby-translators' => 'translatewiki.net na mga paradakit-taramon',
@@ -3898,6 +3906,7 @@ Kun bako man, ika makakagamit nin sayon na porma sa ibaba. An saimong komento id
 'api-error-overwrite' => 'An salambawan na sarong eksistido nang sagunson dae pinagtutugutan.',
 'api-error-stashfailed' => 'Panlaog na kasalaan: An serbidor nagpalya sa pagsaray kan temporaryong sagunson.',
 'api-error-publishfailed' => 'Panlaog na kasalaan: An serbidor nagpalya na ipublikar an temporaryong sagunson.',
+'api-error-stasherror' => 'Nagkaigwa nin kasalaan mantang ikinakarga an sagunson sa sarayan.',
 'api-error-timeout' => 'An serbidor dae nakapagsimbag sa laog kan pinaghunang panahon.',
 'api-error-unclassified' => 'May dae midbid na kasalaan an nangyari.',
 'api-error-unknown-code' => 'Dae midbid na kasalaan: "$1".',
index 24f4df1..d8af896 100644 (file)
@@ -264,7 +264,7 @@ $messages = array(
 # User preference toggles
 'tog-underline' => 'Падкрэсьліваць спасылкі:',
 'tog-justify' => 'Выраўноўваць тэкст па шырыні старонкі',
-'tog-hideminor' => 'ХаваÑ\86Ñ\8c Ð´Ñ\80обнÑ\8bÑ\8f Ð·Ñ\8cменÑ\8b ў сьпісе апошніх зьменаў',
+'tog-hideminor' => 'ХаваÑ\86Ñ\8c Ð´Ñ\80обнÑ\8bÑ\8f Ð¿Ñ\80аÑ\9eкÑ\96 ў сьпісе апошніх зьменаў',
 'tog-hidepatrolled' => 'Хаваць патруляваныя зьмены ў сьпісе апошніх зьменаў',
 'tog-newpageshidepatrolled' => 'Хаваць патруляваныя старонкі ў сьпісе новых старонак',
 'tog-extendwatchlist' => 'Пашырыць сьпіс назіраньня, каб ён паказваў усе зьмены, а ня толькі апошнія',
@@ -631,8 +631,8 @@ $1',
 'no-null-revision' => 'Немагчыма стварыць нулявую вэрсію для старонкі «$1»',
 'badtitle' => 'Няслушная назва',
 'badtitletext' => 'Запытаная назва старонкі няслушная ці пустая, альбо няслушна ўказаная міжмоўная ці інтэрвікі-назва. Яна можа ўтрымліваць сымбалі, якія нельга ўжываць у назвах.',
-'perfcached' => 'Наступныя зьвесткі кэшаваныя і могуць быць састарэлымі. У кэшы {{PLURAL:$1|1=даступны|даступныя}} ня больш за $1 {{PLURAL:$1|вынік|вынікі|вынікаў}}.',
-'perfcachedts' => 'Наступныя зьвесткі кэшаваныя і апошні раз былі абноўленыя $1. У кэшы {{PLURAL:$4|1=даступны|даступныя}} ня больш за $4 {{PLURAL:$4|вынік|вынікі|вынікаў}}.',
+'perfcached' => 'Наступныя зьвесткі кэшаваныя і могуць быць састарэлымі. У кэшы {{PLURAL:$1|даступны|даступныя}} ня больш за $1 {{PLURAL:$1|вынік|вынікаў|вынікі}}.',
+'perfcachedts' => 'Наступныя зьвесткі кэшаваныя і апошні раз былі абноўленыя $1. У кэшы {{PLURAL:$4|даступны|даступныя}} ня больш за $4 {{PLURAL:$4|вынік|вынікаў|вынікі}}.',
 'querypage-no-updates' => 'Абнаўленьні гэтай старонкі цяпер адключаныя. Зьвесткі ня будуць абнаўляцца.',
 'viewsource' => 'Паказаць крыніцу',
 'viewsource-title' => 'Прагляд крыніцы для $1',
@@ -765,7 +765,7 @@ $2',
 'passwordtooshort' => 'Паролі павінны ўтрымліваць ня менш за $1 {{PLURAL:$1|сымбаль|сымбалі|сымбаляў}}.',
 'password-name-match' => 'Ваш пароль павінен адрозьнівацца ад Вашага імя ўдзельніка.',
 'password-login-forbidden' => 'Выкарыстаньне гэтага імя ўдзельніка і пароля было забароненае.',
-'mailmypassword' => 'Ð\94аÑ\81лаÑ\86Ñ\8c Ð½Ð¾Ð²Ñ\8b Ð¿Ð°Ñ\80олÑ\8c Ð¿Ð° Ñ\8dлекÑ\82Ñ\80оннай Ð¿Ð¾Ñ\88Ñ\86е',
+'mailmypassword' => 'СкÑ\96нÑ\83Ñ\86Ñ\8c Ð¿Ð°Ñ\80олÑ\8c',
 'passwordremindertitle' => 'Новы часовы пароль для {{GRAMMAR:родны|{{SITENAME}}}}',
 'passwordremindertext' => 'Нехта (магчыма Вы, з IP-адрасу $1) запытаў нас даслаць новы пароль для {{GRAMMAR:родны|{{SITENAME}}}} ($4). Для ўдзельніка «$2» быў створаны часовы пароль і ён цяпер «$3». Калі гэта была Вашая ініцыятыва, Вам трэба ўвайсьці ў сыстэму і адразу зьмяніць пароль. Тэрмін дзеяньня Вашага часовага паролю — $5 {{PLURAL:$5|дзень|дні|дзён}}.
 
@@ -784,7 +784,7 @@ $2',
 У выніку, наведвальнікі, якія карыстаюцца гэтым ІР-адрасам, ня могуць стварыць зараз болей рахункаў.',
 'emailauthenticated' => 'Ваш адрас электроннай пошты быў пацьверджаны $2 у $3.',
 'emailnotauthenticated' => 'Ваш адрас электроннай пошты яшчэ не пацьверджаны.
­Ð»ÐµÐºÑ\82Ñ\80оннаÑ\8f Ð¿Ð¾Ñ\88Ñ\82а Ð´Ð»Ñ\8f Ð½Ð°Ñ\81Ñ\82Ñ\83пнÑ\8bÑ\85 Ð¼Ð°Ð³Ñ\87Ñ\8bмаÑ\81Ñ\8cÑ\86Ñ\8fÑ\9e Ð´Ð°Ñ\81Ñ\8bлаÑ\86Ñ\86а Ð½Ñ\8f Ð±Ñ\83дзе.',
\9bÑ\96Ñ\81Ñ\82Ñ\8b Ñ\8dлекÑ\82Ñ\80оннай Ð¿Ð¾Ñ\88Ñ\82ай Ð´Ð»Ñ\8f Ð½Ð°Ñ\81Ñ\82Ñ\83пнÑ\8bÑ\85 Ð¼Ð°Ð³Ñ\87Ñ\8bмаÑ\81Ñ\8cÑ\86Ñ\8fÑ\9e Ð´Ð°Ñ\81Ñ\8bлаÑ\86Ñ\86а Ð½Ñ\8f Ð±Ñ\83дÑ\83Ñ\86Ñ\8c.',
 'noemailprefs' => 'Пазначце адрас электроннай пошты ў Вашых наладах, каб актывізаваць гэтыя магчымасьці.',
 'emailconfirmlink' => 'Пацьвердзіць Ваш адрас электроннай пошты',
 'invalidemailaddress' => 'Уведзены адрас электроннай пошты не адпавядае фармату адрасоў электроннай пошты.
@@ -833,7 +833,7 @@ $2',
 # Special:PasswordReset
 'passwordreset' => 'Ачыстка паролю',
 'passwordreset-text-one' => 'Запоўніце гэтую форму, каб скінуць пароль.',
-'passwordreset-text-many' => '{{PLURAL:$1|Ð\97апоÑ\9eнÑ\96Ñ\86е Ð°Ð´Ð½Ð¾ Ð· Ð³Ñ\8dÑ\82Ñ\8bÑ\85 Ð¿Ð°Ð»Ñ\91Ñ\9e, ÐºÐ°Ð± Ñ\81кÑ\96нÑ\83Ñ\86Ñ\8c Ð¿Ð°Ñ\80олÑ\8c.}}',
+'passwordreset-text-many' => '{{PLURAL:$1|Ð\97апоÑ\9eнÑ\96Ñ\86е Ð°Ð´Ð½Ð¾ Ð· Ð¿Ð°Ð»Ñ\91Ñ\9e, ÐºÐ°Ð± Ð°Ñ\82Ñ\80Ñ\8bмаÑ\86Ñ\8c Ñ\87аÑ\81овÑ\8b Ð¿Ð°Ñ\80олÑ\8c Ð¿Ñ\80аз Ñ\8dлекÑ\82Ñ\80оннÑ\83Ñ\8e Ð¿Ð¾Ñ\88Ñ\82Ñ\83.}}',
 'passwordreset-legend' => 'Ачысьціць пароль',
 'passwordreset-disabled' => 'Магчымасьць ачысткі паролю была забароненая ў {{GRAMMAR:месны|{{SITENAME}}}}.',
 'passwordreset-emaildisabled' => 'Функцыі e-mail у гэтай вікі былі адключаныя.',
@@ -2430,6 +2430,7 @@ $UNWATCHURL
 Выдаленьне такіх старонак было забароненае, каб пазьбегнуць праблемаў у працы {{GRAMMAR:родны|{{SITENAME}}}}.',
 'delete-warning-toobig' => 'Гэтая старонка мае доўгую гісторыю рэдагаваньняў, больш за $1 {{PLURAL:$1|вэрсію|вэрсіі|вэрсіяў}}.
 Яе выдаленьне можа выклікаць праблемы ў працы базы зьвестак {{GRAMMAR:родны|{{SITENAME}}}}; будзьце асьцярожны.',
+'deleting-backlinks-warning' => "'''Увага:''' іншыя старонкі спасылаюцца на старонку, якую вы зьбіраецеся выдаліць.",
 
 # Rollback
 'rollback' => 'Адкаціць рэдагаваньні',
index 9a1dfe4..2fee72c 100644 (file)
@@ -1944,7 +1944,7 @@ Maybe you want to edit the description on its [$2 file description page] there.'
 'mostinterwikis' => 'সবচেয়ে বেশী ইন্টারউইকি লিংক-সমৃদ্ধ নিবন্ধসমূহ',
 'mostrevisions' => 'সবচেয়ে বেশী বার সম্পাদিত নিবন্ধসমূহ',
 'prefixindex' => 'উপসর্গ সহ সমস্ত পাতা',
-'prefixindex-namespace' => 'পà§\8dরিফিà¦\95à§\8dস à¦¸à¦®à§\8dপবলিত সকল পাতা ($1 নামস্থান)',
+'prefixindex-namespace' => 'à¦\89পসরà§\8dà¦\97 à¦¸à¦¹ সকল পাতা ($1 নামস্থান)',
 'prefixindex-strip' => 'তালিকা থেকে প্রিফিক্স সরাও',
 'shortpages' => 'সংক্ষিপ্ত পাতাসমূহ',
 'longpages' => 'দীর্ঘ পাতাসমূহ',
index 3b2bffb..6f096ca 100644 (file)
@@ -579,6 +579,7 @@ Setu amañ perak ''$2''.",
 'invalidtitle-unknownnamespace' => 'Titl direizh gant an niverenn esaouenn anv $1 hag an destenn "$2" dianav',
 'exception-nologin' => "N'oc'h ket kevreet",
 'exception-nologin-text' => "Ar bajenn-mañ pe an ober-mañ a c'houlenn e vefec'h kevreet er wiki-mañ.",
+'exception-nologin-text-manual' => "$1, mar plij, evit gallout mont d'ar bajenn-mañ pe ober an dra-mañ",
 
 # Virus scanner
 'virus-badscanner' => "Kefluniadur fall : skanner viruzoù dianav : ''$1''",
@@ -635,7 +636,7 @@ Na zisoñjit ket resisaat ho [[Special:Preferences|penndibaboù evit {{SITENAME}
 'createacct-emailoptional' => "Chomlec'h postel (direizh)",
 'createacct-email-ph' => "Skrivit ho chomlec'h postel",
 'createacct-another-email-ph' => "Ebarzhiñ ur chomlec'h postel",
-'createaccountmail' => 'Dre bostel',
+'createaccountmail' => "Implijout ur ger-tremen dibad ha kas anezhañ d'ar chomlec'h postel diferetDre bostel",
 'createacct-realname' => 'Anv gwir (diret)',
 'createaccountreason' => 'Abeg :',
 'createacct-reason' => 'Abeg',
@@ -672,7 +673,7 @@ Gwiriit eo bet skrivet mat an anv ganeoc\'h pe [[Special:UserLogin/signup|krouit
 'passwordtooshort' => '{{PLURAL:$1|1 arouezenn|$1 arouezenn}} hir a rank bezañ ar gerioù-tremen da nebeutañ.',
 'password-name-match' => "Rankout a ra ho ker-tremen bezañ disheñvel diouzh hoc'h anv implijer.",
 'password-login-forbidden' => 'Berzet eo ober gant an anv-implijer hag ar ger-tremen-mañ.',
-'mailmypassword' => 'Kasit din ur ger-tremen nevez',
+'mailmypassword' => 'Adderaouekaat ar ger-tremen',
 'passwordremindertitle' => 'Ho ker-tremen berrbad nevez evit {{SITENAME}}',
 'passwordremindertext' => "Unan bennak (c'hwi moarvat gant ar chomlec'h IP \$1)
 en deus goulennet ma vo kaset dezhañ ur ger-tremen nevez evit {{SITENAME}} (\$4).
@@ -1554,7 +1555,8 @@ Ma skrivit anezhañ e vo implijet evit lakaat war wel ar pezh a vo bet degaset g
 'recentchanges-label-bot' => "Gant ur bot eo bet degaset ar c'hemm-mañ.",
 'recentchanges-label-unpatrolled' => "N'eo ket bet gwiriet ar c'hemm-mañ evit c'hoazh.",
 'recentchanges-label-plusminus' => 'Kemmet eo ment ar bajenn eus an niver-mañ a oktedoù',
-'recentchanges-legend-newpage' => '(gwelet ivez [[Dibar:PajennoùNevez|roll ar pajennoù nevez krouet]])',
+'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ñ).",
 'rclistfrom' => "Diskouez ar c'hemmoù diwezhañ abaoe an $1.",
 'rcshowhideminor' => "$1 ar c'hemmoù dister",
@@ -2012,6 +2014,7 @@ $1 {{PLURAL:$1|rummad|rummad}}',
 'ninterwikis' => ' {{PLURAL:$1|interwiki|interwikis}}',
 'nlinks' => '$1 {{PLURAL:$1|liamm|liamm}}',
 'nmembers' => '$1 {{PLURAL:$1|elfenn|elfenn}}',
+'nmemberschanged' => '$1 → $2 {{PLURAL:$2|ezel}}',
 'nrevisions' => '$1 {{PLURAL:$1|stumm|stumm}}',
 'nviews' => '$1 {{PLURAL:$1|selladenn|selladenn}}',
 'nimagelinks' => 'Implijet e $1 {{PLURAL:$1|pajenn|pajenn}}',
@@ -2050,6 +2053,7 @@ $1 {{PLURAL:$1|rummad|rummad}}',
 'protectedpages' => 'Pajennoù gwarezet',
 'protectedpages-indef' => 'Gwarezoù da badout hepken',
 'protectedpages-cascade' => 'Gwarez dre skalierad hepken',
+'protectedpages-noredirect' => 'Kuzhat an adkasoù',
 'protectedpagesempty' => "N'eus pajenn gwarezet ebet gant an arventennoù-mañ evit poent.",
 'protectedtitles' => 'Titloù gwarezet',
 'protectedtitlesempty' => "N'eus bet gwarezet titl ebet dezhañ an arventennoù-se evit poent.",
@@ -3748,6 +3752,14 @@ Gallout a rit [[Special:EditWatchlist|implijout an aozer boutin ivez]].',
 'version-hook-subscribedby' => 'Termenet gant',
 'version-version' => '($1)',
 'version-license' => 'Aotre-implijout MediaWiki',
+'version-ext-license' => 'Aotre-implijout',
+'version-ext-colheader-name' => 'Astenn',
+'version-ext-colheader-version' => 'Stumm',
+'version-ext-colheader-license' => 'Aotre-implijout',
+'version-ext-colheader-description' => 'Deskrivadur',
+'version-ext-colheader-credits' => 'Aozerien',
+'version-license-title' => 'Aotre-implijout evit $1',
+'version-credits-title' => 'Kredoù evit $1',
 'version-poweredby-credits' => "Mont a ra ar wiki-mañ en-dro a-drugarez da '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
 'version-poweredby-others' => 're all',
 'version-poweredby-translators' => 'troerien translatewiki.net',
@@ -3770,6 +3782,7 @@ Sañset oc'h bezañ resevet [{{SERVER}}{{SCRIPTPATH}}/COPYING un eilskrid eus ar
 'redirect-lookup' => 'Klask :',
 'redirect-value' => 'Talvoud :',
 'redirect-user' => 'ID an implijer',
+'redirect-page' => 'ID ar bajenn',
 'redirect-revision' => 'Adwel ar bajenn',
 'redirect-file' => 'Anv ar restr',
 'redirect-not-exists' => "Talvoud n'eo ket bet kavet",
@@ -3981,6 +3994,9 @@ A-hend-all e c'hallit ober gant ar furmskrid eeunaet dindan. Ouzhpennet e vo hoc
 'duration-centuries' => "$1 {{PLURAL:$1|c'hantved|kantved}}",
 'duration-millennia' => '$1 {{PLURAL:$1|milvloaz|milvoaz}}',
 
+# Image rotation
+'rotate-comment' => 'Skeudenn troet eus $1 {{PLURAL:$1|derez}} a-du gant an heol',
+
 # Limit report
 'limitreport-cputime' => 'Amzer implij ar CPU',
 'limitreport-cputime-value' => '$1 {{PLURAL:$1|eiladenn}}',
@@ -3989,6 +4005,7 @@ A-hend-all e c'hallit ober gant ar furmskrid eeunaet dindan. Ouzhpennet e vo hoc
 '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ñ',
 
 # Special:ExpandTemplates
 'expandtemplates' => 'Emled ar patromoù',
@@ -4005,6 +4022,7 @@ Ober a ra kement-mañ dre c'hervel ar bazenn a zegouezh digant parser MediaWiki
 'expand_templates_remove_comments' => 'Lemel an notennoù kuit',
 'expand_templates_remove_nowiki' => "Diverkañ a ra ar balizennoù <nowiki> en disoc'h",
 'expand_templates_generate_xml' => 'Gwelet ar gwezennadur XML',
+'expand_templates_generate_rawhtml' => 'Diskouez an HTML kriz',
 'expand_templates_preview' => 'Rakwelet',
 
 );
index a49465e..3bbbbdc 100644 (file)
@@ -1669,7 +1669,7 @@ Ako izaberete da date ime, biće korišteno za pripisivanje za vaš rad.',
 'rclistfrom' => 'Prikaži nove izmjene počev od $1',
 'rcshowhideminor' => '$1 male izmjene',
 'rcshowhidebots' => '$1 botove',
-'rcshowhideliu' => '$1 prijavljene korisnike',
+'rcshowhideliu' => '$1 registrovanih korisnika',
 'rcshowhideanons' => '$1 anonimne korisnike',
 'rcshowhidepatr' => '$1 patrolirane izmjene',
 'rcshowhidemine' => '$1 moje izmjene',
@@ -3186,7 +3186,7 @@ $1',
 'svg-long-desc' => 'SVG fajl, dozvoljeno $1 × $2 piksela, veličina fajla: $3',
 'svg-long-desc-animated' => 'Animirana SVG datoteka, nominalno: $1 × $2 piksela, veličina datoteke: $3',
 'svg-long-error' => 'Nevaljana SVG datoteka: $1',
-'show-big-image' => 'Vidi sliku u punoj veličini (rezoluciji)',
+'show-big-image' => 'Izvorna datoteka',
 'show-big-image-preview' => 'Veličina ovog prikaza: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Druga rezolucija|Ostale rezolucije}}: $1.',
 'show-big-image-size' => '$1 × $2 piksela',
index 02c11b1..88878a7 100644 (file)
@@ -736,7 +736,7 @@ URL язъеш гӀалат даьлла хила мега.
 'userlogin-yourpassword-ph' => 'Язъе хьай пароль',
 'createacct-yourpassword-ph' => 'Язъе пароль',
 'yourpasswordagain' => 'Юха язъе пароль:',
-'createacct-yourpasswordagain' => 'Бакъе пароль',
+'createacct-yourpasswordagain' => 'Бакъ йе пароль',
 'createacct-yourpasswordagain-ph' => 'Кхин цкъа язъе пароль',
 'remembermypassword' => 'Даглаца сан дӀаяздар хӀокху компьютеран тӀехь (цхьан $1 {{PLURAL:$1|динахь}})',
 'userlogin-remembermypassword' => 'Дагахь латт ве/е со',
@@ -767,10 +767,10 @@ URL язъеш гӀалат даьлла хила мега.
 'userlogin-createanother' => 'Кхолла декъашхочун кхин дӀаяздар',
 'createacct-join' => 'ДӀаязбе лахахь хай хаам.',
 'createacct-another-join' => 'Язбе лахахь керлачу декъашхочун дӀаяздаран хаам.',
-'createacct-emailrequired' => 'ЭлекÑ\82Ñ\80онни почтан адрес',
-'createacct-emailoptional' => 'ЭлекÑ\82Ñ\80онни почтан адрес (ца яздича мега)',
-'createacct-email-ph' => 'Ð\94Ó\80аÑ\8fзде Ñ\8dлекÑ\82Ñ\80онни почтан адрес',
-'createacct-another-email-ph' => 'Ð\94Ó\80аÑ\8fзде Ñ\8dлекÑ\82Ñ\80онни почтан адрес',
+'createacct-emailrequired' => 'ЭлекÑ\82Ñ\80онан почтан адрес',
+'createacct-emailoptional' => 'ЭлекÑ\82Ñ\80онан почтан адрес (ца яздича мега)',
+'createacct-email-ph' => 'Ð\94Ó\80аÑ\8fзде Ñ\8dлекÑ\82Ñ\80онан почтан адрес',
+'createacct-another-email-ph' => 'Ð\94Ó\80аÑ\8fзде Ñ\8dлекÑ\82Ñ\80онан почтан адрес',
 'createaccountmail' => 'хааман зӀене хула',
 'createacct-realname' => 'Хьан цӀе (ца язйича мега)',
 'createaccountreason' => 'Бахьан:',
@@ -807,9 +807,9 @@ URL язъеш гӀалат даьлла хила мега.
 'password-login-forbidden' => 'Иштта декъашхочун цӀе а пароль а лелаян цамаго.',
 'mailmypassword' => 'Пароль кхоссар',
 'passwordremindertitle' => 'Декъашхочун {{grammar:genitive|{{SITENAME}}}}  пароль дагайаийтар',
-'noemail' => 'ЦÓ\80е $1 Ð¹Ð¾Ð»Ñ\83 Ð´ÐµÐºÑ\8aаÑ\88Ñ\85оÑ\87Ñ\83н Ñ\8dлекÑ\82Ñ\80онни адрес яздина дац.',
-'noemailcreate' => 'Ð\90Ñ\85Ñ\8cа Ð½Ð¸Ð¹Ñ\81а Ñ\8dлекÑ\82Ñ\80онни почтан адрес дӀаяздан деза',
-'passwordsent' => 'Ð\9aеÑ\80ла Ð¿Ð°Ñ\80олÑ\8c Ð´ÐµÐºÑ\8aаÑ\88Ñ\85оÑ\87Ñ\83н $1 Ñ\8dлекÑ\82Ñ\80онни адрес тӀе дӀахьажина. Дехар до, керла пароль еъча юху системин чугӀо.',
+'noemail' => 'ЦÓ\80е $1 Ð¹Ð¾Ð»Ñ\83 Ð´ÐµÐºÑ\8aаÑ\88Ñ\85оÑ\87Ñ\83н Ñ\8dлекÑ\82Ñ\80онан адрес яздина дац.',
+'noemailcreate' => 'Ð\90Ñ\85Ñ\8cа Ð½Ð¸Ð¹Ñ\81а Ñ\8dлекÑ\82Ñ\80онан почтан адрес дӀаяздан деза',
+'passwordsent' => 'Ð\9aеÑ\80ла Ð¿Ð°Ñ\80олÑ\8c Ð´ÐµÐºÑ\8aаÑ\88Ñ\85оÑ\87Ñ\83н $1 Ñ\8dлекÑ\82Ñ\80онан адрес тӀе дӀахьажина. Дехар до, керла пароль еъча юху системин чугӀо.',
 'blocked-mailpassword' => 'Хьан IP-адрес ца тадарш дан магийна дац, цуьндела пароль меттахӀотош йолу функци блоктоьхна ю.',
 'eauthentsent' => 'ДӀаяздинчу электронан адрес тӀе хаам баийтина.
 Даиман хаамаш баийта хааман чохь де бохург дан деза адрес хьай хилар бакъдеш.',
@@ -853,7 +853,7 @@ URL язъеш гӀалат даьлла хила мега.
 'passwordreset-username' => 'Декъашхочун цӀе:',
 'passwordreset-domain' => 'Домен:',
 'passwordreset-capture' => 'Хьажа беанчу хааме?',
-'passwordreset-email' => 'ЭлекÑ\82Ñ\80онни почтан адрес:',
+'passwordreset-email' => 'ЭлекÑ\82Ñ\80онан почтан адрес:',
 'passwordreset-emailtitle' => '{{SITENAME}}: декъашхочун дӀаяздарх лаьцна хаам',
 'passwordreset-emailelement' => 'Декъашхочун цӀе: $1
 Ханна йолу пароль: $2',
@@ -863,11 +863,11 @@ URL язъеш гӀалат даьлла хила мега.
 
 # Special:ChangeEmail
 'changeemail' => 'Хийца электрони почт',
-'changeemail-header' => 'ЭлекÑ\82Ñ\80они почтан адрес хийцар',
-'changeemail-text' => 'Юза Ñ\85Ó\80аÑ\80а Ñ\84оÑ\80ма Ñ\85Ñ\8cайн Ñ\8dлекÑ\82Ñ\80они почтан адрес хуьйцуш. Ахьа хийцар бакъдан язъян еза пароль.',
+'changeemail-header' => 'ЭлекÑ\82Ñ\80онан почтан адрес хийцар',
+'changeemail-text' => 'Юза Ñ\85Ó\80аÑ\80а Ñ\84оÑ\80ма Ñ\85Ñ\8cайн Ñ\8dлекÑ\82Ñ\80онан почтан адрес хуьйцуш. Ахьа хийцар бакъдан язъян еза пароль.',
 'changeemail-no-info' => 'ХӀара агӀо лело системин чугӀо.',
-'changeemail-oldemail' => 'Ð\9aаÑ\80аÑ\80а Ñ\8dлекÑ\82Ñ\80онни почтан адрес:',
-'changeemail-newemail' => 'ЭлекÑ\82Ñ\80они почтан керла адрес:',
+'changeemail-oldemail' => 'Ð\9aаÑ\80аÑ\80а Ñ\8dлекÑ\82Ñ\80онан почтан адрес:',
+'changeemail-newemail' => 'ЭлекÑ\82Ñ\80онан почтан керла адрес:',
 'changeemail-none' => '(яц)',
 'changeemail-password' => 'Хьан пароль «{{SITENAME}}» проектан:',
 'changeemail-submit' => 'Хийца email',
@@ -1287,7 +1287,7 @@ $1",
 'prefs-help-gender' => 'ТӀехь доцург: и хаам лелош бу цхьайолу хаамаш чохь декъашхочун пол гучуйоккхуш.
 И хаам массарна гуш хир бу.',
 'email' => 'Email',
-'prefs-help-email' => 'ЭлекÑ\82Ñ\80они Ð¿Ð¾Ñ\87Ñ\82ан Ð°Ð´Ñ\80еÑ\81 Ñ\86аÑ\85lоÑ\82Ñ\82ийÑ\87а Ð°Ñ\8a Ñ\85lумма дац, амма иза оьшар ю, нагахь хьуна хьай пароль йицлахь.',
+'prefs-help-email' => 'ЭлекÑ\82Ñ\80онан Ð¿Ð¾Ñ\87Ñ\82ан Ð°Ð´Ñ\80еÑ\81 Ñ\86аÑ\85Ó\80оÑ\82Ñ\82ийÑ\87а Ð° Ñ\85Ó\80умма дац, амма иза оьшар ю, нагахь хьуна хьай пароль йицлахь.',
 'prefs-help-email-others' => 'Кхин дӀа цо кхечу декъашхошна йиш хуьлуьйту хьога электронан кехат даийта хьан агӀона чохь йолу хьажориган гӀоьнца.',
 'prefs-info' => 'Коьрта хаам',
 'prefs-i18n' => 'Юкъардекъа мотт',
@@ -1497,6 +1497,13 @@ $1",
 'upload-recreate-warning' => "'''Тегам бе: иштта цӀе йолу файл дӀаяьккхина я цӀе хийцина.'''
 
 Лахахьа гойтуш ю хӀокху агӀона тептар:",
+'uploadtext' => "Лелайе хӀара агӀо сервер чу файлаш йохуш.
+Хьалхо чуйаьхна файлаш хьажа,  [[Special:FileList|кхузахь]]. Кхин чуйаьхна файлаш дӀаязло [[Special:Log/upload|чуяхаран тептар чохь]], дӀаяьхна файлаш каро йиш ю [[Special:Log/delete|кхузахь]].
+
+Файл агӀона чуйилла лелабе лахара могӀанаш:
+* '''<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>''' файлан тӀе хьажораг хӀотайо файл агӀонгахь ца гуш.",
 'upload-permitted' => 'Магийна файлийн тайпанаш: $1.',
 'uploadlogpage' => 'Чуяхаран тéптар',
 'uploadlogpagetext' => 'Лахахьа гойтуш бу тӀаьххьара чуяхна файлийн могӀам.
@@ -1953,7 +1960,7 @@ PICT # тайп тайпан
 'protect-expiring-local' => 'чекхйолу $1',
 'protect-expiry-indefinite' => 'хан чаккхе йоцуш',
 'protect-cascade' => 'Гlаролла йé агlонаш, хlокху агlонца хlоттайелларш (чахчарé гlаролла)',
-'protect-cantedit' => 'Хьéга хийцам цабало хlокху агlон гlаролли локхалан, хlуд аьлча хьан бакъо яц оцун рéдаккха.',
+'protect-cantedit' => 'Хьéга хийцам цабало хӀокху агӀон гlаролли локхалан, хӀуд аьлча хьан бакъо яц оцунна тадар дан.',
 'protect-othertime' => 'Кхин хан:',
 'protect-othertime-op' => 'кхин хан',
 'protect-otherreason' => 'Кхин бахьна/тӀетохар:',
@@ -2492,6 +2499,7 @@ PICT # тайп тайпан
 'exif-originaltransmissionref' => 'ДӀадолалун меттиган код',
 'exif-label' => 'Билгало',
 'exif-datetimemetadata' => 'ТӀехьара метахаамаш хийцина терахь',
+'exif-copyrightowner' => 'Авторийн бакъонаш ерг',
 'exif-usageterms' => 'Лелоран хьал',
 'exif-pngfilecomment' => 'PNG-файлан билгалдаккхар',
 'exif-giffilecomment' => 'GIF-файлан билгалдаккхар',
@@ -2629,7 +2637,7 @@ MediaWiki яржош ю и шуна пайдане хир яц те аьлла,
 'fileduplicatesearch-legend' => 'Цхьатера ерш лахар',
 'fileduplicatesearch-filename' => 'Файлан цӀе:',
 'fileduplicatesearch-submit' => 'Лаха',
-'fileduplicatesearch-info' => '$1 × $2 {{PLURAL:$2|пиксель|пикселш|пикселш}}<br />Файлан барам: $3<br />MIME-тайп: $4',
+'fileduplicatesearch-info' => '$1 × $2 пиксель<br />Файлан барам: $3<br />MIME-тайп: $4',
 
 # Special:SpecialPages
 'specialpages' => 'Леррина агlонаш',
@@ -2723,6 +2731,7 @@ MediaWiki яржош ю и шуна пайдане хир яц те аьлла,
 
 # Feedback
 'feedback-cancel' => 'Цаоьшу',
+'feedback-close' => 'Кийчча ю',
 
 # Search suggestions
 'searchsuggest-search' => 'Лаха',
@@ -2738,7 +2747,9 @@ MediaWiki яржош ю и шуна пайдане хир яц те аьлла,
 # Limit report
 'limitreport-title' => 'АгӀона хӀоттам къасторан хаамаш:',
 'limitreport-cputime' => 'Процессоран хан лелор',
+'limitreport-cputime-value' => '$1 {{PLURAL:$1|секунд}}',
 'limitreport-walltime' => 'Йодуш йолу хенахь лелор',
+'limitreport-walltime-value' => '$1 {{PLURAL:$1|секунд}}',
 'limitreport-ppvisitednodes' => 'Препроцессор хьаьжна шадин дукхалла',
 'limitreport-ppgeneratednodes' => 'Препроцессорс сгенерировать бина шадин дукхалла',
 'limitreport-postexpandincludesize' => 'Схьаяьстина юккъерчаран барам',
index a4d902a..3271db1 100644 (file)
@@ -614,7 +614,7 @@ $2',
 'userlogout' => 'بچۆ دەرەوە',
 'notloggedin' => 'لە ژوورەوە نیت',
 'userlogin-noaccount' => 'ھەژمارت نییە؟',
-'userlogin-joinproject' => 'ڕەگەڵ {{SITENAME}} کەوە',
+'userlogin-joinproject' => 'وێڕای {{SITENAME}} کەوە',
 'nologin' => 'ھەژمارت نییە؟  $1.',
 'nologinlink' => 'ھەژمارێک دروست بکە',
 'createaccount' => 'ھەژمار دروست بکە',
@@ -2174,6 +2174,7 @@ $UNWATCHURL
 'delete-warning-toobig' => 'ئەم لاپەڕە مێژوویەکی دەستکاری زۆر گەورەی هەیە، زیاتر لە $1 {{PLURAL:$1|پێداچوونەوە|پێداچوونەوە}}.
 سڕینەوی ئەوە لە وانەیە کارەکانی بنکەدراوی {{SITENAME}} تووشی کێشە بکات؛
 دوورنواڕانە جێ‌بەجێی بکە.',
+'deleting-backlinks-warning' => "'''ھۆشدار:''' پەڕەی تر بەم پەڕەیەی دەتەوێ بیسڕییەوە بەستەر دراوە.",
 
 # Rollback
 'rollback' => 'گەڕاندنەوەی دەستکارییەکان',
index 5495c45..70e5219 100644 (file)
@@ -2765,6 +2765,7 @@ Udejte přesný důvod níže (například ocitujte, které stránky byly poško
 Můžete si prohlédnout [[Special:BlockList|seznam zablokovaných uživatelů]].',
 'ipb-blockingself' => 'Chystáte se zablokovat {{gender:|sám|sama|sami}} sebe! Jste si {{gender:|jist|jista|jisti}}, že to chcete udělat?',
 'ipb-confirmhideuser' => 'Chystáte se zablokovat uživatele se zapnutou volbou „skrýt uživatelské jméno“. To způsobí, že jméno uživatele zmizí ze všech seznamů a protokolovacích záznamů. Jste si {{gender:|jist|jista|jisti}}, že to chcete udělat?',
+'ipb-confirmaction' => 'Pokud jste si {{GENDER:|jist|jista|jisti}}, že to chcete udělat, zaškrtněte pole „{{int:ipb-confirm}}“ dole.',
 'ipb-edit-dropdown' => 'Editace seznamu důvodů zablokování',
 'ipb-unblock-addr' => 'Odblokovat uživatele nebo IP $1',
 'ipb-unblock' => 'Odblokovat uživatele nebo IP adresu',
@@ -4288,4 +4289,6 @@ V podstatě rozbalí prakticky všechno v dvojitých složených závorkách.',
 'expand_templates_generate_rawhtml' => 'Zobrazit surové HTML',
 'expand_templates_preview' => 'Náhled',
 
+# Unknown messages
+'uploadinvalidxml' => 'XML v načteném souboru nelze zpracovat.',
 );
index 03a0a57..afef71c 100644 (file)
@@ -2600,9 +2600,7 @@ Angiv en konkret begrundelse herunder (for eksempel med angivelse af sider der h
 'badipaddress' => 'IP-adressen/brugernavnet er udformet forkert eller eksistere ikke.',
 'blockipsuccesssub' => 'Blokeringen er gennemført.',
 'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] er blevet blokeret.<br />
-Se [[Special:BlockList|blokeringslisten]] for alle blokeringer.
-
-[[User:$1|$1]] ([[User talk:$1|diskussion]] | [[Special:Contributions/$1|bidrag]]) er blevet blokeret. <br />Se [[Special:BlockList|blokeringslisten]] for alle blokeringer.',
+Se [[Special:BlockList|blokeringslisten]] for alle blokeringer.',
 'ipb-blockingself' => 'Du er ved at blokere dig selv! Er du sikker på, du vil gøre det?',
 'ipb-confirmhideuser' => 'Du er ved at blokere en bruger med "skjul bruger" aktiveret. Dette vil skjule brugerens navn på alle lister og logposter. Er du sikker på du vil gøre det?',
 'ipb-edit-dropdown' => 'Rediger blokeringsbegrundelser',
index 31cc8a2..7a6c6a3 100644 (file)
@@ -4037,7 +4037,7 @@ Du kannst auch die [[Special:EditWatchlist|Standardseite]] zum Bearbeiten benutz
 'version-svn-revision' => '(Version $2)',
 'version-license' => 'MediaWiki-Lizenz',
 'version-ext-license' => 'Lizenz',
-'version-ext-colheader-name' => 'Erweiterung',
+'version-ext-colheader-name' => 'Bezeichnung',
 'version-ext-colheader-version' => 'Version',
 'version-ext-colheader-license' => 'Lizenz',
 'version-ext-colheader-description' => 'Beschreibung',
@@ -4329,4 +4329,6 @@ faktisch alles was in doppelten geschweiften Klammern enthalten ist.',
 'expand_templates_generate_rawhtml' => 'Rohes HTML anzeigen',
 'expand_templates_preview' => 'Vorschau',
 
+# Unknown messages
+'uploadinvalidxml' => 'Das XML in der hochgeladenen Datei konnte nicht geparst werden.',
 );
index 26eda35..b60fd18 100644 (file)
@@ -352,9 +352,9 @@ $messages = array(
 'tog-minordefault' => "Vurnayışanê xo pêrune ''vurnayışo qıckek'' nışan bıde",
 'tog-previewontop' => 'Verqayti pela nuştışi ser de bımocne',
 'tog-previewonfirst' => 'Vurnayışo verên de verqayti tım bımocne',
-'tog-enotifwatchlistpages' => 'Yew pele ya zi dosyaya ke lista mına seyrkerdışi de vurnayê mı rê e-poste bırışe',
+'tog-enotifwatchlistpages' => 'Jû pele ya ki dosyawa ke lista mına seyrkerdışi de vurnae, mı rê e-mail bırışe',
 'tog-enotifusertalkpages' => 'Pela mına werênayışi ke vurnayê mı rê e-poste bırışe',
-'tog-enotifminoredits' => 'Vurnayışanê qıckekanê pelan u dosyeyan de zi mı rê e-poste bırışe',
+'tog-enotifminoredits' => 'Pelan de vurnayışanê qıckekan u dosyan de ki mı rê e-mail bırışe',
 'tog-enotifrevealaddr' => 'Adresa e-posteyê mı posteyê xeberan de bımocne',
 'tog-shownumberswatching' => 'Amarê karberanê seyrkerdoğan bımocne',
 'tog-oldsig' => 'İmzaya mewcude:',
@@ -383,43 +383,43 @@ $messages = array(
 'editfont-style' => 'Cayê vurnayışi de terzê nuştışi:',
 'editfont-default' => 'Cıgeyrayoğo hesabiyaye',
 'editfont-monospace' => 'Terzê nusteyê sabıtcagırewtoği',
-'editfont-sansserif' => 'Babetê Sans-serifi',
-'editfont-serif' => 'Babetê serifi',
+'editfont-sansserif' => 'Fontê Sans-serifi',
+'editfont-serif' => 'Font (çêşıdê nuştey) Serif',
 
 # Dates
-'sunday' => 'Bazar',
-'monday' => 'Berarek',
-'tuesday' => 'Telete',
+'sunday' => 'Kırê (Bazar)',
+'monday' => 'Dışeme',
+'tuesday' => 'Sêşeme',
 'wednesday' => 'Çarşeme',
-'thursday' => 'Panşeme',
-'friday' => 'Éne',
-'saturday' => 'Bahdé éni',
-'sun' => 'Baz',
-'mon' => 'Bbz',
-'tue' => 'Tlt',
+'thursday' => 'Pancşeme',
+'friday' => 'Yene',
+'saturday' => 'Şeme',
+'sun' => 'Krê',
+'mon' => 'Dış',
+'tue' => 'Sêş',
 'wed' => 'Çrş',
 'thu' => 'Pşm',
-'fri' => 'Êne',
-'sat' => 'Bdé',
+'fri' => 'Yen',
+'sat' => 'Şem',
 'january' => 'Çele',
-'february' => 'Zemherı',
-'march' => 'Adar',
+'february' => 'Sıbate',
+'march' => 'Adar (Mart)',
 'april' => 'Nisane',
-'may_long' => 'Gúlan',
+'may_long' => 'Gulane',
 'june' => 'Heziran',
-'july' => 'Temuz',
+'july' => 'Temuze',
 'august' => 'Tebaxe',
 'september' => 'Keşkelun',
 'october' => 'Tışrino Verên',
 'november' => 'Tışrino Peyên',
 'december' => 'Kanun',
 'january-gen' => 'Çele',
-'february-gen' => 'Zemherı',
-'march-gen' => 'Mert',
+'february-gen' => 'Sıbate',
+'march-gen' => 'Adar',
 'april-gen' => 'Nisane',
-'may-gen' => 'Gúlan',
-'june-gen' => 'Heziran',
-'july-gen' => 'Temuz',
+'may-gen' => 'Gulane',
+'june-gen' => 'Hezirane',
+'july-gen' => 'Temuze',
 'august-gen' => 'Tebaxe',
 'september-gen' => 'Keşkelun',
 'october-gen' => 'Tışrino Verên',
@@ -438,7 +438,7 @@ $messages = array(
 'nov' => 'Tşp',
 'dec' => 'Kan',
 'january-date' => 'Çele  $1',
-'february-date' => 'Şıbate $1',
+'february-date' => 'Sıbate $1',
 'march-date' => 'Adar $1',
 'april-date' => 'Nisane $1',
 'may-date' => 'Gulane $1',
@@ -446,12 +446,12 @@ $messages = array(
 'july-date' => 'Temuze $1',
 'august-date' => 'Tebaxe $1',
 'september-date' => 'Keşkelun $1',
-'october-date' => 'Cıtan $1',
-'november-date' => 'Qasım $1',
-'december-date' => '$1 Kanun',
+'october-date' => 'Tışrino Verên $1',
+'november-date' => 'Tışrino Peyên $1',
+'december-date' => 'Kanun $1',
 
 # Categories related messages
-'pagecategories' => '{{PLURAL:$1|Kategori|Kategoriy}}',
+'pagecategories' => '{{PLURAL:$1|Kategoriye|Kategoriy}}',
 'category_header' => 'Pelê ke kategoriya "$1" derê',
 'subcategories' => 'Kategoriyê bınêni',
 'category-media-header' => 'Dosyeyê ke kategoriya "$1" derê',
@@ -650,7 +650,7 @@ $1',
 'nstab-mediawiki' => 'Mesac',
 'nstab-template' => 'Şablon',
 'nstab-help' => 'Pela peşti',
-'nstab-category' => 'Kategori',
+'nstab-category' => 'Kategoriye',
 
 # Main script and global functions
 'nosuchaction' => 'Fealiyeto wınasi çıniyo',
@@ -935,44 +935,44 @@ Parola vêrdiye: $2',
 # Special:ChangeEmail
 'changeemail' => 'E-posta adresa xo bıvurnê',
 'changeemail-header' => 'E-posya adresta hesabdê xo bıvurnê',
-'changeemail-text' => 'Şıma qayılê ke e-postay xo bıvurnê se enê formi pırkerê. Qandê araşt kerdışi zi parolay xo şıma de bınusnê',
-'changeemail-no-info' => 'Resayışê ena pela rê Dekewtış icab keno.',
-'changeemail-oldemail' => 'E-postay şımaya newki:',
-'changeemail-newemail' => 'E-posta adresiyo newe:',
-'changeemail-none' => '(Çıno)',
-'changeemail-password' => 'Parolaya şımaya {{SITENAME}}i:',
-'changeemail-submit' => 'E-postay xo bıvurne',
+'changeemail-text' => 'Şıma ke qailê  e-postay xo bıvırnê, enê formi pırr kerê. Raştkerdışi rê ki şıma gani parolay xo bınusnê',
+'changeemail-no-info' => 'Şıma gani bıkewê pele ke derdest bıresê na pele.',
+'changeemail-oldemail' => 'E-postay şımawa nıkaêne:',
+'changeemail-newemail' => 'E-postay şımawa newiye:',
+'changeemail-none' => '(Çıniyo)',
+'changeemail-password' => 'Parolay şımawa {{SITENAME}}i:',
+'changeemail-submit' => 'E-postay xo bıvırnên',
 'changeemail-cancel' => 'Bıtexelne',
 
 # Special:ResetTokens
-'resettokens' => 'Reset fi ye',
-'resettokens-no-tokens' => 'Ena reset nefina',
-'resettokens-legend' => 'Reset fi ye',
-'resettokens-tokens' => 'Beli kerdeni:',
-'resettokens-token-label' => '$1 (weziyeta newki: $2)',
-'resettokens-watchlist-token' => 'Qandé [[Special:Watchlist|Per vırnayışa lista da temaşan]]  web wari kerdeni (Atom/RSS)',
-'resettokens-done' => 'Reset fi',
-'resettokens-resetbutton' => 'Reset fiyayış weçin',
+'resettokens' => 'Nışanan reset ke',
+'resettokens-no-tokens' => 'Nışanê reseti çıniyê',
+'resettokens-legend' => 'Nışanan reset ke',
+'resettokens-tokens' => 'Nışani:',
+'resettokens-token-label' => '$1 (weziyeto nıkaên: $2)',
+'resettokens-watchlist-token' => 'Web Feed rê nışan (Atom/RSS)ê [[Special:Watchlist|vêreno perranê lista şımawa seyrkerdışi]]',
+'resettokens-done' => 'Nışanan reset ke',
+'resettokens-resetbutton' => 'Nışananê weçıniteyan reset ke',
 
 # Edit page toolbar
 'bold_sample' => 'Metno qalın',
 'bold_tip' => 'Metno qalın',
-'italic_sample' => 'Metno vırandere',
-'italic_tip' => 'Metno vırandere',
-'link_sample' => 'Namey gırê',
-'link_tip' => 'Gıreyê miyani',
-'extlink_sample' => 'http://www.example.com şınasiya adresi',
-'extlink_tip' => 'Greyê teberi (adresi vero http:// dekerê de)',
-'headline_sample' => 'nuştey xeta seri',
-'headline_tip' => '2.ki sewiye sername',
-'nowiki_sample' => 'Non-format nuşte itiya ra bıerz',
-'nowiki_tip' => 'Format kerdışê wiki bıterknê',
+'italic_sample' => 'Metno çewt',
+'italic_tip' => 'Metno çewt',
+'link_sample' => 'Namey gırey',
+'link_tip' => 'Gırey miyani',
+'extlink_sample' => 'http://www.misal.com sernamey gırey',
+'extlink_tip' => 'Gırey teberi (xo vira mekerên http:// prefix)',
+'headline_sample' => 'metnê sernamey',
+'headline_tip' => 'Sewiya 2ıne sername',
+'nowiki_sample' => 'metnê formatkerdey berze etıya',
+'nowiki_tip' => 'Goş formatê Wiki ra mekûwe',
 'image_sample' => 'Misal resim.jpg',
-'image_tip' => 'Dosyaya gumın',
+'image_tip' => 'Dosya tewrkerdiye',
 'media_sample' => 'misal.jpg',
-'media_tip' => 'Gıreyê dosya',
-'sig_tip' => 'İmza u wext',
-'hr_tip' => 'Çıxiza dimdayi (hend akar mefiye)',
+'media_tip' => 'Gırey dosya',
+'sig_tip' => 'İmzay şıma be morê zemani',
+'hr_tip' => 'Xeta verardiye (teserrufın bıgureyne/bıxebetne)',
 
 # Edit pages
 'summary' => "<font style=\"color:Blue\">'''Xulasa:'''</font>",
@@ -982,30 +982,32 @@ Parola vêrdiye: $2',
 'savearticle' => 'Pele qeyd ke',
 'preview' => 'Verqayt',
 'showpreview' => 'Verqayti bımocne',
-'showlivepreview' => 'Verqayto cıwın',
+'showlivepreview' => 'Verqayto cınde (giyane)',
 'showdiff' => 'Vurnayışan bımocne',
-'anoneditwarning' => 'Teme!: Şıma bı hesabê xo nıkewtê cı. Hurêndiya namey şıma dı IP-adresa şıma qeyd bena u asena.',
-'anonpreviewwarning' => "''Ti hama nicikewte. Qeyd kerdiş zerre tarixê pele de adresê IP yê tu keyd keno.''",
-'missingsummary' => "'''DİQET:''' Şıma kılmnuşte nıkerd.
-Eke şıma reyna butonê qaydker ser a ne pel bê kılmnuşte qayd beno.",
-'missingcommenttext' => 'Cêr de yew xulasa binuse.',
-'missingcommentheader' => "Vir ardoğ:''' Şıma qey na mesela sername nuşte nênuşt.
-Eke şıma reyna \"{{int:savearticle}}\" qayd ker bıtıkni pel bê sername qayd beno.",
-'summary-preview' => 'Verqeydê qıssa:',
-'subject-preview' => 'Mesela/Sername  verqayd seyr kerdış:',
-'blockedtitle' => 'Karber (eza) blok biyo',
-'blockedtext' => '\'\'\'No name ya zi na IP adresê şıma ri musade çino.\'\'\'
-
-Oyo ke musade nêkeno: $1.<br />
-Sebebê musade nêdayiş: \'\'$2\'\'.
-
-* Dest pê kerdışê musade nêdayiş: $8
-* Qedyayişê musade nêdayiş: $6
-* Oyo ke cı rê musade nêdeyêno: $7
-
-Eke şıma sebebê musade nêdayiş ri itiraz keni, $1 de ya zi yewna [[{{MediaWiki:Grouppage-sysop}}|xızmetkar]] de şıma eşkeni na mesela de qıse bıkeri. [[Special:Preferences|Tercihê]] eke şıma na qısme de pey yew e-postayo raşt nêkewte cı, şıma xususiyetê "Karber ri e-posta bırışê" ra nêeşkeni istifade bıkeri, eke şıma tercihanê xo bıerz zerreyê e-postayê xo şıma hıni şenê ep-posta bırışê.
-<br />IP adresê şıma yo nıkayın $3, numreya musade nêdayiş #$5.
-<br />Eke şıma qayile yew xızmkar çiko bıpers, no malumatan not bıkere ney şıma rê lazım beni.',
+'anoneditwarning' => 'İqaz!: Şıma be hesabê xo nêkewtê cı. 
+Adresê şımaê IP tarixê vırnayışê na pele de do qeyd bo.',
+'anonpreviewwarning' => '"Şıma be hesabê xo nêkewtê cı. Eke qeyd kerê, adresê şımaê IP tarixê vırnayışê na pele de do qeyd bo."',
+'missingsummary' => "'''DİQET:''' Şıma jû xulasa nênuşte.
+Eke şıma \"{{int:savearticle}}\" reyna bıtıknê, vırnayışê şıma bê xulasa qeyd beno.",
+'missingcommenttext' => 'Cêr de jû fıkır bınusên, şıma rê zehmet.',
+'missingcommentheader' => "'''Diqet:''' Şıma seba nê fıkrvaci yew mewzu/sernuşte nênuşt.
+Eke şıma reyna \"{{int:savearticle}}\" bıtıknê, vırnayışê şıa bê mewzu/sernuşte do qeyd bo.",
+'summary-preview' => 'Verqaytê xulasa:',
+'subject-preview' => 'Verqaytê mewzu/sernuştey:',
+'blockedtitle' => 'Karber blokekerdeo',
+'blockedtext' => '\'\'\'No namey karberi ya ki no adresê IP blokekerdeo.\'\'\'
+
+Vıraştoğê blokey: $1
+Sebebê blokey: \'\'$2\'\'.
+
+* Sıftekerdena blokey: $8
+* Qediyayışê blokey: $6
+* Blokebiyae: $7
+
+Şıma şenê  $1 de ya ki  yewna [[{{MediaWiki:Grouppage-sysop}}|administrator]]i de irtıbat kewê ke na mesela sero werênê, cemaet vırazê. 
+Şıma nêşenê xısusiyetê "karberi rê e-posta bırışe" bıgureynê/bıxebetnê heta ke [[Special:Preferences|Tercihanê hesabi]] de jû e-postawa ke vêrena, beli biye u şıam gureynayışê cı ra mehrum nêbiyê.
+IP adresê şımao nıkaên $3o u numrey bloki #$5.
+Şıma rê zehmet, eke kewnê ra dıme, teferruatanê corênan not kerên.',
 'autoblockedtext' => 'IP adresê şıma otomotikmen kerda kılit, çıkı $1 verniya nê hesabi grota.
 Sebebê cı zi:
 
@@ -2121,13 +2123,13 @@ listeya ke ha ver a têna na {{PLURAL:$1|dosyaya ewwili|dosyaya $1 ewwili}} mocn
 
 # Random page in category
 'randomincategory' => 'Ğoseri pera kategoriya',
-'randomincategory-invalidcategory' => '"$1" namedı kategori çıniya',
+'randomincategory-invalidcategory' => '"$1" yew nameyê kategoriya vêrdiye niyo.',
 'randomincategory-nopages' => 'Kategori da [[:Category:$1|$1]] de qet  per çıniya.',
 'randomincategory-selectcategory' => 'Pera ke cıra raşt ameye kategori do bıgéri yo: $1 $2.',
 'randomincategory-selectcategory-submit' => 'Şo',
 
 # Random redirect
-'randomredirect' => 'Xoseri hetenayış',
+'randomredirect' => 'Serçarnayışo rastameye',
 'randomredirect-nopages' => 'Ena cayênameyê "$1"î de redereksiyonî çin o.',
 
 # Statistics
@@ -2181,7 +2183,7 @@ gıreyê her satıri de gıreyi; raş motışê yewın u dıyıni esto.
 
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|bayt|bayti}}',
-'ncategories' => '$1 {{PLURAL:$1|Kategori|Kategoriy}}',
+'ncategories' => '$1 {{PLURAL:$1|Kategoriye|Kategoriy}}',
 'ninterwikis' => '$1 {{PLURAL:$1|interwiki|interwikiy}}',
 'nlinks' => '$1 {{PLURAL:$1|link|linkî}}',
 'nmembers' => '$1 {{PLURAL:$1|eza|ezayan}}',
@@ -2291,10 +2293,10 @@ tipa rocaneyi, nameyê karberi (herfa pil u qıci re hessas a), ya zi peli (reyn
 
 # Special:Categories
 'categories' => 'Kategoriy',
-'categoriespagetext' => '{{PLURAL:$1|kategoriyê|kategoriyê}} cêrıni de pel u media esto.
-[[Special:UnusedCategories|kategoriyê ke nê xebtênê]] tiya de nêmociyeni.
-hem zi bıewnê [[Special:WantedCategories|kategori yê ke waziyeni]].',
-'categoriesfrom' => 'kategori yê ke pê ninan destpêkeno ramocın:',
+'categoriespagetext' => '{{PLURAL:$1|Kategoriya cêrene|Kategoriyanê cêrênan}} de peli ya zi medya estê.
+[[Special:UnusedCategories|Kategoriyê ke nêxebetiyenê]] tiya de nêmocniyayê.
+[[Special:WantedCategories|Kategoriyanê waşteyeyan]] de zi bıvêne.',
+'categoriesfrom' => 'Kategoriyê ke be ninan dest pêkenê, bımocne:',
 'special-categories-sort-count' => 'goreyê çendi rêz ker.',
 'special-categories-sort-abc' => 'alfabetik rêz ker',
 
@@ -3111,7 +3113,7 @@ dosyaya emaneti vindbiyo',
 'tooltip-ca-nstab-mediawiki' => 'Mesacané sistemi bıvin',
 'tooltip-ca-nstab-template' => 'Şabloni bıvin',
 'tooltip-ca-nstab-help' => 'Pela peşti bıvêne',
-'tooltip-ca-nstab-category' => 'Pera kategori bıvin',
+'tooltip-ca-nstab-category' => 'Pela kategoriye bıvêne',
 'tooltip-minoredit' => 'Nay vırnayışa werdi nışan bıkeré',
 'tooltip-save' => 'Vurnayışa qeyd ke',
 'tooltip-preview' => 'Vurnayışané ğo çımra ravyarné. Verdé qeyd kerdışi eneri bıkarné!',
@@ -3180,7 +3182,7 @@ Ney '''Mefiyé de'''!",
 'pageinfo-redirects-name' => 'Hetenayışê na perer',
 'pageinfo-redirects-value' => '$1',
 'pageinfo-subpages-name' => 'Bınpelê na pela',
-'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|hetenayış|hetenayışi}}; $3 {{PLURAL:$3|raykerdışt|raykerdışi}})',
+'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|serçarnayış|serçarnayışi}}; $3 {{PLURAL:$3|nêserçarnayış|nêserçarnayışi}})',
 'pageinfo-firstuser' => 'Pela vıraşter',
 'pageinfo-firsttime' => 'Demê pela vıraştışi',
 'pageinfo-lastuser' => 'Vurnayoğo peyên',
@@ -3541,7 +3543,7 @@ Eg ena dosya, kondisyonê orcinali ra bıvuriya, belki detayanê hemi nıeseno.'
 'exif-writer' => 'Nuştekar',
 'exif-languagecode' => 'Zıwan',
 'exif-iimversion' => 'Verqaydê IIM',
-'exif-iimcategory' => 'Kategori',
+'exif-iimcategory' => 'Kategoriye',
 'exif-iimsupplementalcategory' => 'Oleyê Kategoriyan',
 'exif-datetimeexpires' => 'No peyra mekarênê',
 'exif-datetimereleased' => 'Bıroşe',
@@ -4106,6 +4108,7 @@ Ti hem zi eşkeno [[Special:EditWatchlist|use the standard editor]].',
 'version-version' => '(Versiyon $1)',
 'version-svn-revision' => '(r$2)',
 'version-license' => 'Lisans',
+'version-ext-license' => 'Lisans',
 'version-poweredby-credits' => "Ena wiki, dezginda '''[https://www.mediawiki.org/ MediaWiki]''' ya piya vıraziyaya, heqê telifi © 2001-$1 $2.",
 'version-poweredby-others' => 'Zewmi',
 'version-poweredby-translators' => "Açernere translatewiki.net'i",
index 82dcd1b..b5dfcbc 100644 (file)
@@ -3969,4 +3969,6 @@ Hować móžoš slědujucy jadnory formular wužywaś. Twój komentar pśidajo s
 'expand_templates_generate_rawhtml' => 'Gropny HTML pokazaś',
 'expand_templates_preview' => 'Pśeglěd',
 
+# Unknown messages
+'uploadinvalidxml' => 'XML w nagratej dataji njedajo se parsowaś.',
 );
index a5ee108..9537d79 100644 (file)
@@ -16,6 +16,7 @@ $fallback = 'it';
 $messages = array(
 # User preference toggles
 'tog-underline' => "Tîra 'na rîga sòta i colegamèint.",
+'tog-justify' => 'Mésa in ōrdin di carâter di peréiod.',
 'tog-hideminor' => "Lōga 'l mudéfichi pió céchi int al j ûltmi mudéfichi.",
 'tog-hidepatrolled' => "Lōga 'l mudéfichi verifichêdi int al j ûltmi mudéfichi",
 'tog-newpageshidepatrolled' => "Lōga al pàgini verifichêdi da l'elèinch dal pàgini pió nōvi.",
@@ -63,6 +64,7 @@ $messages = array(
 
 # Font style option in Special:Preferences
 'editfont-style' => "Stîl dal carâter int la caşèla 'd mudéfica:",
+'editfont-default' => 'Pre-stabilî dal navigadōr',
 'editfont-monospace' => 'Carâter a larghésa fésa',
 'editfont-sansserif' => 'Carâter sans-serif',
 'editfont-serif' => 'Carâter serif',
@@ -146,6 +148,8 @@ $messages = array(
 'category-file-count' => "{{PLURAL:$2|In cla categoréia ché a gh'é sōl un file, sgnê ché.|In cla categoréia ché gh'é{{PLURAL:$1|un file sgnê ché| i file $1, sgnê}} ed sègvit, in un totêl ed $2.}}",
 'category-file-count-limited' => "In cla categoréia ché a gh'é {{PLURAL:$1|al file nutê|i $1 file nutê}} ché 'd sègvit.",
 'listingcontinuesabbrev' => 'cunt.',
+'index-category' => 'Pàgini gancêdi',
+'noindex-category' => 'Pàgini mìa gancêdi',
 'broken-file-category' => "Pàgini cun dèinter di file ch' an gh'în mìa.",
 
 'about' => 'Infumasiòun',
@@ -339,20 +343,26 @@ L'elèinch dal pàgini specêli vâlidi a 's câta in [[Special:SpecialPages|El
 'databaseerror-text' => 'È sucès un erōr de dmânda insém al databêş.
 A pré ânch èser un bug int al prugrâma.',
 'databaseerror-textcl' => 'È sucès un erōr de dmânda insém al databêş.',
+'databaseerror-query' => 'Istrusiòun SQL: $1',
 'databaseerror-function' => 'Funsiòun: $1',
 'databaseerror-error' => 'Erōr: $1',
 'laggedslavemode' => "'''Atèinti:''' la pàgina la pré avèir mìa al revisiòun pió nōv.",
 'readonly' => "'Database' bluchê",
 'enterlockreason' => "Scréver al mutîv dal blôch, precişêr quând a 's pèinsa che 'l vègna tôt via.",
+'readonlytext' => "In cól mumèint ché al databêş l'é bluchê e an 's pōlen fêr né zûnti né mudéfichi. Al blôch ed sôlit l'é lighê a 'na revişiòun normêla e quând la srà finîda al gnirà sbluchê. 
+
+L'aminitradōr dal sistēma ch' al l'à bluchê l'à dê cla spiegasiòun ché: $1",
 'missing-article' => "Al datebêş an n'à mìa catê al tèst ed 'na pàgina ch' l' aré duvû catêres sòt' al nòm \"\$1\" \$2. Ed sôlit còst a sucēd quând a vîn arciamê, a partîr da la stòria dal mudéfichi o dal cunfrûnt tra versiòun, un colegamèint a 'na pàgina scanşlêda, a un cunfrûnt tra versiòun che gh'în mìa o a un cunfrûnt tra versiòun cun la stòria dal mudéfichi scanşlêda. In chês cuntrâri, a s'é pubabilmèint catê un erōr int al prugrâma ed Media Wiki. A se dmânda al piaşèir ed comunichêr còl ch'é sucès a un [[Special:ListUsers/sysop|amministadōr]] e comunichêregh l'indirés (URL) in quistiòun.",
 'missingarticle-rev' => '(nómer ed la versiòun: $1)',
 'missingarticle-diff' => '(Diff: $1, $2)',
+'readonly_lag' => "Al databêş l'é stê bluchê in avtomàtich per permèter a i terminêl cun al databêş schiêv ed mètres in pâs cun al master",
 'internalerror' => 'Erōr intêren',
 'internalerror_info' => 'Erōr intêren: $1',
 'fileappenderrorread' => 'An n\'é mìa stê pusébil lēşer "$1" mèinter es fêva la zûnta.',
 'fileappenderror' => 'An n\'é mìa pusébil zuntêr "$1" a "$2".',
 'filecopyerror' => 'An n\'é mìa pusébil cupiêr al file "$1" in "$2".',
 'filerenameerror' => 'An n\'é mìa pusébil cambiêr al nòm ed "$1" in "$2".',
+'filedeleteerror' => 'An n\'é mìa pusébil scanşlêr al file "$1".',
 'directorycreateerror' => 'An n\'é mìa pusébil fêr la directory "$1".',
 'filenotfound' => 'An n\'é mìa pusébil catêr al file "$1".',
 'fileexistserror' => 'An n\'é mìa pusébil scréver al file "$1": al file al gh\'é bèle.',
@@ -362,10 +372,43 @@ A pré ânch èser un bug int al prugrâma.',
 'cannotdelete' => 'An n\'é mìa stê pusébil scanşlêr la pàgina o al file "$1".
 Al pré èser bèle stê scanşlê da quelchidûn êter.',
 'cannotdelete-title' => 'Impusébil scanşlêr la pàgina "$1".',
+'delete-hook-aborted' => "L' hook an n'à mia permés la scanşladûra.
+An n'é mìa stê dê la spiegasiòun.",
+'no-null-revision' => 'An pōl èser fât \'na versiòun mìa vâlida per la pàgina "$1"',
 'badtitle' => 'Tétol mìa curèt.',
 'badtitletext' => "Al tétol ed la pàgina serchêda l'é vōd, şbaliê opór al deşvîn da 'n erōr int i colegamèint di côdis o int i colegamèint druvê in wiki. In pió al pré avèir ûn o pió carâter ch'an pōlen mìa èser druvê int i tétol.",
+'perfcached' => 'Al j infurmasiòun ché sòta vînen registrêdi int la "cache" dal databêş e an pōlen mìa èser arnuvê. Int la "cache" a gh\'é  un mâsim ed {{PLURAL:$1|un rişultêt |$1 rişultêt}} ch\' es pōl/en druvêr.',
+'perfcachedts' => 'Al j infurmasiòun ché sòta vînen registrêdi int la "cache" dal databêş e l\'ûltma vôlta l\' è stê arnuvê al  $ 1. Int la "cache" a gh\'é  un mâsim ed {{PLURAL:$4|un rişultêt |$4 rişultêt}} ch\' es pōl/en druvêr.',
+'querypage-no-updates' => "J arnuvamèint ed la pàgina în p'r al mumèint fērom. Al j infurmasiòun dèinter a la pàgina a gnirân mia arnuvêdi.",
 'viewsource' => 'Guêrda la surzéia',
 'viewsource-title' => "Guêrda la surzéia 'd $1",
+'actionthrottled' => "L'asiòun la vîn tardêda.",
+'actionthrottledtext' => "Cme mişûra 'd sicurèsa cûnt'r al spam soquânti operasiòun a vînen limitêdi a 'n nómer mâsim ed vôlti in un precîş peréiod ed tèimp, in cól chêş ché a s'é bèle andê d'ed là 'd cól lémit. A se dmânda ed turnêr a pruvêr tra soquânt minût.",
+'protectedpagetext' => "Cla pàgina ché l'é stêda prutèta per impidîr la mudéfica o êtri operasiòun.",
+'viewsourcetext' => "L'é pusébil vèder e cupiêr al côdis surzéia ed cla pàgina ché.",
+'viewyourtext' => 'L\'é pusébil vèder e cupiêr al côdis surzéia dal "tō mudéfichi" ed cla pàgina ché:',
+'protectedinterface' => "Cla pàgina ché la gh'à 'n elemèint ch' al fa pêrt dal colegamèint tra utèint e al progrâma 'd cól sît ché e l'é prutèta per schivşêr pusébil abûş. Per zuntêr o mudufichêr tradusiòun per tót i sistēma wiki druvêr [//translatewiki.net/ translatewiki.net], al prugèt 'd adatamèint a ògni léngva 'd MediaWiki.",
+'editinginterface' => "'''Atèinti:'' Al tèst ed cla pàgina ché 'l fa pêrt dal colegamèint tra utèint e 'l progrâma dal sît.  Tót' al modéfichi fâti a cla pàgina ché a gnîran spustêdi insém a i mesâg vést da tót j utèint ed cól wiki ché. Per zuntêr o mudufichêr tradusiòun vâlidi per tót i wiki, cunsîdra la pusibilitê 'd druvêr [/ / translatewiki.net / translatewiki.net], al prugèt 'd adatamèint a ògni léngva 'd MediaWiki.",
+'cascadeprotected' => "Insém a cla pàgina ché an n'é mìa pusébil fêr dal mudéfichi perchè l'é dèinter {{PLURAL:$1|int la pàgina sgnêda ché  'd sègvit, ch' l'é stêda prutèta|int al pàgini sgnêdi ché  'd sègvit, ch' în stêdi prutèti}} cun la prutesiòun ch' la 's arfà in cuntinvasiòun:
+$2",
+'namespaceprotected' => "An 's gh'à mìa i permès necesâri per mudifichêr al pàgini dal spâsi di nòm '''$1'''.",
+'customcssprotected' => "An 's gh'à mìa i permès necesâri per mudifichêr cla pàgina CSS ché, perchè la gh'à dèinter al j impustasiòun personêli 'd n' êter utèint.",
+'customjsprotected' => "An 's gh'à mìa i permès necesâri per mudifichêr cla pàgina JavaScript ché, perchè la gh'à dèinter al j impustasiòun personêli 'd n' êter utèint.",
+'mycustomcssprotected' => "An 's gh'à mìa i permès necesâri per mudifichêr cla pàgina CSS ché.",
+'mycustomjsprotected' => "An 's gh'à mìa i permès necesâri per mudifichêr cla pàgina JavaScript ché .",
+'myprivateinfoprotected' => "An 's gh'à mìa i permès necesâri per cambiê 'l j infurmasiòun personêli.",
+'mypreferencesprotected' => "An 's gh'à mìa i permès necesâri per cambiêr al preferèinsi personêli.",
+'ns-specialprotected' => "An n'é mìa pusébil mudifichêr al pàgini specêli.",
+'titleprotected' => 'Al tétol ed cla pagina ché l\'é stê bluchê da [[User:$1|$1]].
+Còst l\'é al mutîv:"$2".',
+'filereadonlyerror' => 'An n\'é mìa stê pusébil mudifichêr al file "$1" perchè al depôsit di file "$2" a \'s pōl sōl lēzer.
+
+L\'aministradōr ch\' al l\'à bluchê l\'à dê cla spiegasiòun ché:"$3".',
+'invalidtitle-knownnamespace' => 'Tétol mìa vâlid cme spâsi di nòm "$2" e tèst "$3"',
+'invalidtitle-unknownnamespace' => 'Tétol mìa vâlid cun spâsi di nòm mìa cgnusû "$1" e tèst "$2"',
+'exception-nologin' => "An t'é mìa gnû dèinter",
+'exception-nologin-text' => "Per andêr dèinter a cla pàgina ché o fêr còl ch'ét pèins ét gh'ê da [[Special:Userlogin|fêr l'ingrès]].",
+'exception-nologin-text-manual' => 'Per prèir andêr dèinter a cla pàgina ché o fêr còl ch\'ét peins ét gh\'ê da "$1".',
 
 # Login and logout pages
 'yourname' => 'Nòm utèint:',
index 7171d50..b7b39b7 100644 (file)
@@ -1737,7 +1737,9 @@ $1",
 'recentchanges-label-minor' => 'Αυτή είναι μια μικροαλλαγή',
 'recentchanges-label-bot' => 'Αυτή η επεξεργασία έγινε από ένα ρομπότ',
 'recentchanges-label-unpatrolled' => 'Αυτή η επεξεργασία δεν έχει ελεγχθεί ακόμα',
-'recentchanges-legend-newpage' => '$1 - νέα σελίδα',
+'recentchanges-label-plusminus' => 'Μεταβολή του μεγέθους της σελίδας σε bytes',
+'recentchanges-legend-heading' => "'''Υπόμνημα:'''",
+'recentchanges-legend-newpage' => '(δείτε [[Special:NewPages|Νέες σελίδες]])',
 'rcnotefrom' => "Παρακάτω είναι οι αλλαγές από τις '''$2''' (εμφανίζονται μέχρι '''$1''').",
 'rclistfrom' => 'Εμφάνιση νέων αλλαγών αρχίζοντας από $1',
 'rcshowhideminor' => '$1 μικροεπεξεργασιών',
index 0cbeacc..d7b300c 100644 (file)
@@ -1839,6 +1839,7 @@ Details can be found in the [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENA
 'search-result-score'              => 'Relevance: $1%',
 'search-redirect'                  => '(redirect $1)',
 'search-section'                   => '(section $1)',
+'search-file-match'                => '(matches file content)',
 'search-suggest'                   => 'Did you mean: $1',
 'search-interwiki-caption'         => 'Sister projects',
 'search-interwiki-default'         => '$1 results:',
@@ -2343,6 +2344,7 @@ You should ask someone with the ability to view suppressed file data to review t
 'php-uploaddisabledtext'      => 'File uploads are disabled in PHP.
 Please check the file_uploads setting.',
 'uploadscripted'              => 'This file contains HTML or script code that may be erroneously interpreted by a web browser.',
+'uploadinvalidxml'            => 'The XML in the uploaded file could not be parsed.',
 'uploadvirus'                 => 'The file contains a virus!
 Details: $1',
 'uploadjava'                  => 'The file is a ZIP file that contains a Java .class file.
@@ -4850,6 +4852,13 @@ You should have received [{{SERVER}}{{SCRIPTPATH}}/COPYING a copy of the GNU Gen
 'version-software'                      => 'Installed software',
 'version-software-product'              => 'Product',
 'version-software-version'              => 'Version',
+'version-db-mysql-url'                  => 'http://www.mysql.com/', # do not translate or duplicate this message to other languages
+'version-db-mariadb-url'                => 'http://mariadb.org/', # do not translate or duplicate this message to other languages
+'version-db-percona-url'                => 'http://www.percona.com/software/percona-server', # do not translate or duplicate this message to other languages
+'version-db-postgres-url'               => 'http://www.postgresql.org/', # do not translate or duplicate this message to other languages
+'version-db-oracle-url'                 => 'http://www.oracle.com/database/', # do not translate or duplicate this message to other languages
+'version-db-sqlite-url'                 => 'http://www.sqlite.org/', # do not translate or duplicate this message to other languages
+'version-db-mssql-url'                  => 'http://www.microsoft.com/sql/', # do not translate or duplicate this message to other languages
 'version-entrypoints'                   => 'Entry point URLs',
 'version-entrypoints-header-entrypoint' => 'Entry point',
 'version-entrypoints-header-url'        => 'URL',
index aacbf86..a36e5e0 100644 (file)
@@ -424,7 +424,7 @@ $messages = array(
 'tog-diffonly' => "No mostrar bajo las ''diferencias'' el contenido de la página",
 'tog-showhiddencats' => 'Mostrar las categorías escondidas',
 'tog-noconvertlink' => 'Desactivar la conversión de título de enlace',
-'tog-norollbackdiff' => "Omitir la ''diferencia'' después de revertir",
+'tog-norollbackdiff' => 'Omitir la diferencia después de revertir',
 'tog-useeditwarning' => 'Advertirme cuando abandone una página editada con cambios sin grabar',
 'tog-prefershttps' => 'Utiliza una conexión segura siempre que haya iniciado una sesión',
 
@@ -453,7 +453,7 @@ $messages = array(
 'wed' => 'mié',
 'thu' => 'jue',
 'fri' => 'vie',
-'sat' => 'sab',
+'sat' => 'sáb',
 'january' => 'enero',
 'february' => 'febrero',
 'march' => 'marzo',
@@ -612,7 +612,7 @@ $messages = array(
 'redirectedfrom' => '(Redirigido desde «$1»)',
 'redirectpagesub' => 'Página de redirección',
 'lastmodifiedat' => 'Esta página fue modificada por última vez el $1, a las $2.',
-'viewcount' => 'Esta página ha sido visitada {{PLURAL:$1|una vez|$1 veces}}.',
+'viewcount' => 'Esta página se ha visitado {{PLURAL:$1|una vez|$1 veces}}.',
 'protectedpage' => 'Página protegida',
 'jumpto' => 'Saltar a:',
 'jumptonavigation' => 'navegación',
@@ -748,7 +748,7 @@ Por favor, avisa a un [[Special:ListUsers/sysop|administrador]], tomando nota de
 Puede que ya haya sido borrado por alguien más.',
 'cannotdelete-title' => 'No se puede borrar la página «$1»',
 'delete-hook-aborted' => 'La modificación que intentaste hacer fue cancelada por un gancho de extensión. No hay explicación disponible.',
-'no-null-revision' => 'No se pudo crear la nueva revisión nula para la página "$1"',
+'no-null-revision' => 'No se pudo crear la revisión nula para la página «$1»',
 'badtitle' => 'Título incorrecto',
 'badtitletext' => 'El título de la página solicitada está vacío, no es válido, o es un enlace interidioma o interwiki incorrecto.
 Puede que contenga uno o más caracteres que no se pueden usar en los títulos.',
@@ -789,7 +789,7 @@ El administrador que lo ha bloqueado ofrece esta explicación: "$3".',
 
 # Virus scanner
 'virus-badscanner' => "Error de configuración: Antivirus desconocido: ''$1''",
-'virus-scanfailed' => 'Escaneo fallido (código $1)',
+'virus-scanfailed' => 'falló el análisis (código $1)',
 'virus-unknownscanner' => 'antivirus desconocido:',
 
 # Login and logout pages
@@ -801,7 +801,7 @@ No olvides personalizar tus [[Special:Preferences|preferencias de {{SITENAME}}]]
 'yourname' => 'Nombre de usuario:',
 'userlogin-yourname' => 'Usuario',
 'userlogin-yourname-ph' => 'Escribe tu nombre de usuario',
-'createacct-another-username-ph' => 'Ingrese el nombre de usuario',
+'createacct-another-username-ph' => 'Escribe el nombre de usuario',
 'yourpassword' => 'Contraseña:',
 'userlogin-yourpassword' => 'Contraseña',
 'userlogin-yourpassword-ph' => 'Escribe tu contraseña',
@@ -925,8 +925,8 @@ Puedes ignorar este mensaje si esta cuenta fue creada por error.',
 'login-abort-generic' => 'Tu inicio de sesión no fue exitoso - Cancelado',
 'loginlanguagelabel' => 'Idioma: $1',
 'suspicious-userlogout' => 'Tu solicitud de desconexión ha sido denegada, pues parece haber sido enviada desde un navegador defectuoso o un proxy caché.',
-'createacct-another-realname-tip' => 'El nombre Real es opcional.
-Si elige proporcionarlo, se usará para dar al usuario la atribución de su trabajo.',
+'createacct-another-realname-tip' => 'El nombre real es opcional.
+Si se proporciona, se usará para dar al usuario la atribución de su trabajo.',
 
 # Email sending
 'php-mail-error-unknown' => 'Error desconocido en la función mail() de PHP.',
@@ -936,7 +936,7 @@ Si elige proporcionarlo, se usará para dar al usuario la atribución de su trab
 # Change password dialog
 'changepassword' => 'Cambiar contraseña',
 'resetpass_announce' => 'Has iniciado sesión con una contraseña temporal que fue enviada por correo electrónico.
-Por favor, introduce una nueva contraseña aquí:',
+Establece una contraseña nueva aquí:',
 'resetpass_text' => '<!-- Añada texto aquí -->',
 'resetpass_header' => 'Cambiar la contraseña de la cuenta',
 'oldpassword' => 'Contraseña antigua:',
@@ -995,8 +995,8 @@ Contraseña temporal: $2',
 'changeemail-header' => 'Cambiar la dirección de correo de la cuenta',
 'changeemail-text' => 'Rellena este formulario para cambiar tu dirección de correo electrónico. Debes introducir la contraseña para confirmar este cambio.',
 'changeemail-no-info' => 'Debes iniciar sesión para acceder directamente a esta página.',
-'changeemail-oldemail' => 'Dirección de correo electrónico actual:',
-'changeemail-newemail' => 'Nueva dirección de correo electrónico:',
+'changeemail-oldemail' => 'Dirección electrónica actual:',
+'changeemail-newemail' => 'Dirección electrónica nueva:',
 'changeemail-none' => '(ninguna)',
 'changeemail-password' => 'Tu contraseña en {{SITENAME}}:',
 'changeemail-submit' => 'Cambiar correo electrónico',
@@ -2472,7 +2472,7 @@ La dirección de correo electrónico que indicaste en [[Special:Preferences|tus
 'addwatch' => 'Añadir a la lista de seguimiento',
 'addedwatchtext' => 'La página «[[:$1]]» ha sido añadida a tu [[Special:Watchlist|lista de seguimiento]]. Los cambios futuros en esta página y en su página de discusión asociada se indicarán ahí.',
 'removewatch' => 'Quitar de la lista de seguimiento',
-'removedwatchtext' => 'La página «[[:$1]]» ha sido eliminada de tu [[Special:Watchlist|lista de seguimiento]].',
+'removedwatchtext' => 'Se ha eliminado la página «[[:$1]]» de tu [[Special:Watchlist|lista de seguimiento]].',
 'watch' => 'Vigilar',
 'watchthispage' => 'Vigilar esta página',
 'unwatch' => 'Dejar de vigilar',
index 4fd5ebe..6161972 100644 (file)
@@ -1825,6 +1825,8 @@ Kui soovid siiski oma faili üles laadida, siis palun mine tagasi ja kasuta teis
 'file-exists-duplicate' => 'See fail on {{PLURAL:$1|järgneva faili|järgnevate failide}} duplikaat:',
 'file-deleted-duplicate' => 'Selle failiga ([[:$1]]) identne fail on hiljuti kustutatud.
 Vaata selle faili kustutamise ajalugu enne jätkamist.',
+'file-deleted-duplicate-notitle' => 'Selle failiga identne fail on varem kustutatud ja pealkiri on varjatud.
+Enne kui jätkad uuesti üleslaadimisega, peaksid paluma olukorda hinnata kellelgi, kes saab vaadata varjatud andmeid.',
 'uploadwarning' => 'Üleslaadimise hoiatus',
 'uploadwarning-text' => 'Muuda allpool olevat faili kirjeldust ning proovi uuesti.',
 'savefile' => 'Salvesta fail',
@@ -2178,6 +2180,7 @@ Igal real on ära toodud esimene ja teine ümbersuunamisleht ning samuti teise 
 'protectedpages' => 'Kaitstud leheküljed',
 'protectedpages-indef' => 'Ainult määramata ajani kaitstud',
 'protectedpages-cascade' => 'Ainult kaskaadkaitsega',
+'protectedpages-noredirect' => 'Peida ümbersuunamised',
 'protectedpagesempty' => 'Selliste parameetritega ei ole praegu ühtegi lehekülge kaitstud.',
 'protectedtitles' => 'Kaitstud pealkirjad',
 'protectedtitlesempty' => 'Hetkel pole ükski pealkiri kaitstud.',
@@ -2452,6 +2455,7 @@ Palun kinnita, et tahad seda tõepoolest teha, et sa mõistad tagajärgi ja et s
 Selle kustutamine on keelatud, et ära hoida ekslikku {{GRAMMAR:genitive|{{SITENAME}}}} töö häirimist.',
 'delete-warning-toobig' => 'See lehekülg on pika redigeerimislooga – üle {{PLURAL:$1|ühe muudatuse|$1 muudatuse}}.
 Ettevaatust, selle kustutamine võib esile kutsuda häireid {{GRAMMAR:genitive|{{SITENAME}}}} andmebaasi töös.',
+'deleting-backlinks-warning' => "'''Hoiatus:''' Teised leheküljed viitavad leheküljele, mida oled kustutamas.",
 
 # Rollback
 'rollback' => 'Tühista muudatused',
@@ -3849,12 +3853,22 @@ Sa võid [[Special:EditWatchlist|kasutada ka harilikku tekstiredaktorit]].',
 'version-other' => 'Muu',
 'version-mediahandlers' => 'Meediatöötlejad',
 'version-hooks' => 'Haagid',
-'version-parser-extensiontags' => 'Parseri lisamärgendid',
+'version-parser-extensiontags' => 'Parseri lisasildid',
 'version-parser-function-hooks' => 'Parserifunktsioonid',
 'version-hook-name' => 'Haagi nimi',
 'version-hook-subscribedby' => 'Tellijad',
 'version-version' => '(Versioon $1)',
-'version-license' => 'Litsents',
+'version-license' => 'MediaWiki litsents',
+'version-ext-license' => 'Litsents',
+'version-ext-colheader-name' => 'Lisa',
+'version-ext-colheader-version' => 'Versioon',
+'version-ext-colheader-license' => 'Litsents',
+'version-ext-colheader-description' => 'Kirjeldus',
+'version-ext-colheader-credits' => 'Autorid',
+'version-license-title' => 'Tarkvaralisa $1 litsents',
+'version-license-not-found' => 'Selle lisa kohta ei leitud üksikasjalikku litsentsiteavet.',
+'version-credits-title' => 'Tarkvaralisa $1 tegijad',
+'version-credits-not-found' => 'Selle lisa tegijate kohta ei leitud üksikasjalikku teavet.',
 'version-poweredby-credits' => "See viki kasutab '''[https://www.mediawiki.org/ MediaWiki]''' tarkvara. Autoriõigus © 2001–$1 $2.",
 'version-poweredby-others' => 'teised',
 'version-poweredby-translators' => 'translatewiki.net-i tõlkijad',
@@ -4072,6 +4086,7 @@ Kui ei, kasuta allolevat lihtsat vormi. Sinu kommentaar lisatakse koos kasutajan
 'api-error-overwrite' => 'Olemasolevate failide ülekirjutamine pole lubatud.',
 'api-error-stashfailed' => 'Sisetõrge: Serveril ei õnnestunud ajutist faili talletada.',
 'api-error-publishfailed' => 'Sisetõrge: Serveril ebaõnnestus ajutise faili avaldamine.',
+'api-error-stasherror' => 'Selle faili hoidlasse üleslaadimisel ilmnes tõrge.',
 'api-error-timeout' => 'Server ei vastanud oodatud aja sees.',
 'api-error-unclassified' => 'Ilmnes teadmata tõrge.',
 'api-error-unknown-code' => 'Teadmata tõrge: "$1"',
index dd75860..04c40df 100644 (file)
@@ -9,6 +9,7 @@
  *
  * @author An13sa
  * @author Bengoa
+ * @author Fitoschido
  * @author Helix84
  * @author Kaganer
  * @author Kaustubh
@@ -1131,10 +1132,10 @@ Kontura zaitez nabigazio loturek, zutabea ezabatu dezakela.',
 'mergelogpagetext' => 'Jarraian dagoen zerrendak orrialde baten historiatik beste batera egindako azken bateratzeak erakusten ditu.',
 
 # Diffs
-'history-title' => '"$1" orrialdearen historia berrikuspena',
+'history-title' => '«$1» orrialdearen historia berrikuspena',
 'difference-title' => '«$1»: berrikuspenen arteko aldeak',
 'difference-title-multipage' => '"$1" eta "$2" orrialdeen arteko ezberditasunak',
-'difference-multipage' => '(Orrialdeen arteko ezberdintasunak)',
+'difference-multipage' => '(Orrien arteko aldeak)',
 'lineno' => '$1. lerroa:',
 'compareselectedversions' => 'Hautatutako bertsioak alderatu',
 'showhideselectedversions' => 'Erakutsi/ezkutatu aukeratutako berrikuspenak',
@@ -2702,7 +2703,7 @@ Fitxategiaren atal bat baino ez zen igo.',
 'import-error-invalid' => '"$1" orrialdea ez da inportatu izena ez delako baliagarria.',
 'import-options-wrong' => 'Aukera {{PLURAL:$2|ez-egokia|ez-egokiak}}:<nowiki>$1</nowiki>',
 'import-rootpage-invalid' => 'Emandako jatorri orrialdea izenburu ez-baliagarria da.',
-'import-rootpage-nosubpage' => 'Jatorri orrialdearen "$1" izen-tarteak ez du baimentzen azpi-orrialderik.',
+'import-rootpage-nosubpage' => 'Jatorri orrialdearen «$1» izen-tarteak ez du baimentzen azpi-orrialderik.',
 
 # Import log
 'importlogpage' => 'Inportazio erregistroa',
@@ -2780,7 +2781,7 @@ Fitxategiaren atal bat baino ez zen igo.',
 'tooltip-save' => 'Zure aldaketak gorde',
 'tooltip-preview' => 'Zure aldaketak aurreikusi, mesedez gorde aurretik erabili!',
 'tooltip-diff' => 'Testuari egindako aldaketak erakutsi.',
-'tooltip-compareselectedversions' => 'Orrialde honen bi hautatutako bertsioen arteko ezberdintasunak ikusi.',
+'tooltip-compareselectedversions' => 'Ikusi orri honen bi bertsio hautatuen arteko aldeak.',
 'tooltip-watch' => 'Orrialde hau zure segimendu zerrendan gehitu',
 'tooltip-watchlistedit-normal-submit' => 'Izenburuak kendu',
 'tooltip-watchlistedit-raw-submit' => 'Jarraipen zerrenda gaurkotu',
index 5584a9c..3c20048 100644 (file)
@@ -4438,4 +4438,6 @@ $5
 'expand_templates_generate_rawhtml' => 'نمایش اچ‌تی‌ام‌ال خام',
 'expand_templates_preview' => 'پیش‌نمایش',
 
+# Unknown messages
+'uploadinvalidxml' => 'XML در پروندهٔ بارگذاری‌شده نمی‌تواند تجزیه شود.',
 );
index e0fa8d5..8b43b2c 100644 (file)
@@ -1134,6 +1134,7 @@ Se on jo olemassa.',
 'content-not-allowed-here' => 'Sivun [[$2]] sisältö ei voi olla tyyppiä $1.',
 'editwarning-warning' => 'Tältä sivulta poistuminen saattaa aiheuttaa kaikkien tekemiesi muutosten katoamisen.
 Jos olet kirjautuneena sisään, voit poistaa tämän varoituksen käytöstä asetuksissa osiossa "Muokkaus".',
+'editpage-notsupportedcontentformat-title' => 'Sisällön muotoa ei tueta',
 
 # Content models
 'content-model-wikitext' => 'wikiteksti',
index 5ab6bbf..bd5eca6 100644 (file)
@@ -4391,4 +4391,6 @@ En fait, elle réalise l'expansion de pratiquement tout ce qui est encadré par
 'expand_templates_generate_rawhtml' => 'Afficher le HTML brut',
 'expand_templates_preview' => 'Aperçu du rendu',
 
+# Unknown messages
+'uploadinvalidxml' => 'Le XML dans le fichier importé n’a pas pu être analysé.',
 );
index 567ef4e..425f046 100644 (file)
@@ -1370,10 +1370,10 @@ Arken koon det lees.',
 'action-createtalk' => 'diskusjuunssidjen maage',
 'action-createaccount' => 'jüdeer brükerkonto mååge',
 'action-minoredit' => 'detdiar feranrang üs letj kääntiakne',
-'action-move' => 'jüdeer sid ferschüwe',
-'action-move-subpages' => 'jüdeer sid än unerside ferschüwe',
+'action-move' => 'an fersküüw det diar sidj',
+'action-move-subpages' => 'an fersküüw detdiar sidj mä hör onersidjen',
 'action-move-rootuserpages' => 'hood-brükersidj fersküüw',
-'action-movefile' => 'jüdeer sid ferschüwe',
+'action-movefile' => 'an fersküüw detdiar datei',
 'action-upload' => 'Datein huuchschüür',
 'action-reupload' => 'det datei auerskriiw',
 'action-reupload-shared' => 'det datei auerskriiw, diar uun en gemiansoom archiif leit',
@@ -2502,7 +2502,7 @@ Fertel det dan ISP of dan süsteemsiinst. Eeben proxys stel det seekerhaid uun f
 
 # Move page
 'move-page' => 'Fersküüw $1',
-'move-page-legend' => 'Sid ferschüwe',
+'move-page-legend' => 'Sidj fersküüw',
 'movepagetext' => "Mä detdiar formulaar könst dü en sidj mä aal sin werjuunen amnääm.
 Di ual tiitel woort üüb di nei widjerfeerd.
 Dü könst widjerfeerangen, diar üüb di ual tiitel wise, automaatisk üüb di nei tiitel widjerfeer läät.
index 4230691..80b66a9 100644 (file)
@@ -1136,6 +1136,8 @@ Esta xa existe.',
 'content-not-allowed-here' => 'O contido "$1" non está permitido na páxina "[[$2]]"',
 'editwarning-warning' => 'Deixar esta páxina pode causar a perda de calquera cambio feito.
 Se accedeu ao sistema, pode desactivar esta mensaxe de advertencia na sección "Edición" das súas preferencias.',
+'editpage-notsupportedcontentformat-title' => 'Formato de contido non admitido',
+'editpage-notsupportedcontentformat-text' => 'O formato de contido $1 non é compatible co modelo de contido  $2.',
 
 # Content models
 'content-model-wikitext' => 'texto wiki',
@@ -1178,9 +1180,9 @@ Comprobe a comparación que aparece a continuación para confirmar que isto é o
 'cantcreateaccount-text' => "A creación de contas desde este enderezo IP ('''$1''') foi bloqueada por [[User:$3|$3]].
 
 A razón dada por $3 foi ''$2''",
-'cantcreateaccount-range-text' => "A creación de contas dende direccións IP no rango '''$1''', e que inclúe á súa dirección IP ('''$4'''), foi bloqueada polo usuario [[User:$3|$3]].
+'cantcreateaccount-range-text' => "O usuario [[User:$3|$3]] bloqueou a creación de contas desde enderezos IP no rango '''$1''', no que se inclúe o seu enderezo IP ('''$4''').
 
-A razón dada por $3 foi ''$2''.",
+A razón que deu $3 foi ''$2''.",
 
 # History pages
 'viewpagelogs' => 'Ver os rexistros desta páxina',
@@ -1841,6 +1843,7 @@ Se aínda quere cargar o seu ficheiro, volva atrás e use outro nome.
 [[File:$1|thumb|center|$1]]',
 'file-exists-duplicate' => 'Este ficheiro é un duplicado {{PLURAL:$1|do seguinte|dos seguintes}}:',
 'file-deleted-duplicate' => 'Un ficheiro idéntico a este ("[[:$1]]") foi borrado previamente. Debería comprobar o historial de borrados do ficheiro antes de proceder a cargalo de novo.',
+'file-deleted-duplicate-notitle' => 'Un ficheiro idéntico a este foi borrado con anterioridade, e o título foi suprimido. Debería contactar con alguén capaz de ver os datos de ficheiros borrados para que revise esta situación antes de voltar a subilo de novo.',
 'uploadwarning' => 'Advertencia ao cargar o ficheiro',
 'uploadwarning-text' => 'Por favor, modifique a descrición do ficheiro e inténteo de novo.',
 'savefile' => 'Gardar o ficheiro',
@@ -2744,6 +2747,7 @@ Explique a razón específica do bloqueo (por exemplo, citando as páxinas concr
 Olle a [[Special:BlockList|lista de bloqueos]] para revisalo.',
 'ipb-blockingself' => 'Está a piques de se bloquear! Está seguro de querer facelo?',
 'ipb-confirmhideuser' => 'Está a piques de bloquear un usuario coa opción "agochar o usuario" activada. Isto suprime o nome de usuario de todas as listas e entradas de rexistro. Está seguro de querer facelo?',
+'ipb-confirmaction' => 'Se está seguro de que quere facelo realmente, por favor marque o campo "{{int:ipb-confirm}}" abaixo.',
 'ipb-edit-dropdown' => 'Editar os motivos de bloqueo',
 'ipb-unblock-addr' => 'Desbloquear a $1',
 'ipb-unblock' => 'Desbloquear un usuario ou enderezo IP',
@@ -3938,8 +3942,18 @@ Tamén pode [[Special:EditWatchlist|empregar o editor normal]].',
 'version-parser-function-hooks' => 'Asociadores da función do analizador',
 'version-hook-name' => 'Nome do asociador',
 'version-hook-subscribedby' => 'Subscrito por',
-'version-version' => '(Versión $1)',
-'version-license' => 'Licenza',
+'version-version' => '($1)',
+'version-license' => 'Licenza de MediaWiki',
+'version-ext-license' => 'Licenza',
+'version-ext-colheader-name' => 'Extensión',
+'version-ext-colheader-version' => 'Versión',
+'version-ext-colheader-license' => 'Licenza',
+'version-ext-colheader-description' => 'Descrición',
+'version-ext-colheader-credits' => 'Autores',
+'version-license-title' => 'Licenza para $1',
+'version-license-not-found' => 'Non se atopou información detallada de licenza para esta extensión.',
+'version-credits-title' => 'Receñecemento para $1',
+'version-credits-not-found' => 'Non se atopou información detallada de recoñecemento para esta extensión.',
 'version-poweredby-credits' => "Este wiki está desenvolvido por '''[https://www.mediawiki.org/wiki/MediaWiki/gl MediaWiki]''', dereitos de autoría © 2001-$1 $2.",
 'version-poweredby-others' => 'outros',
 'version-poweredby-translators' => 'os tradutores de translatewiki.net',
@@ -4218,4 +4232,6 @@ De feito, expande case calquera cousa entre dúas chaves.',
 'expand_templates_generate_rawhtml' => 'Mostrar o HTML en bruto',
 'expand_templates_preview' => 'Vista previa',
 
+# Unknown messages
+'uploadinvalidxml' => 'O XML do ficheiro cargado non pode ser interpretado.',
 );
index 57cb3f4..c70efba 100644 (file)
@@ -744,7 +744,7 @@ $1',
 'actionthrottled' => 'הפעולה הוגבלה',
 'actionthrottledtext' => 'כאמצעי נגד ספאם, אינכם מורשים לבצע פעולה זו פעמים רבות מדי בזמן קצר. אנא נסו שוב בעוד מספר דקות.',
 'protectedpagetext' => 'דף זה מוגן כדי למנוע עריכה ופעולות אחרות.',
-'viewsourcetext' => '×\91×\90פשר×\95ת×\9b×\9d לצפות בטקסט המקור של הדף ולהעתיקו:',
+'viewsourcetext' => '×\91×\90פשר×\95ת×\9a לצפות בטקסט המקור של הדף ולהעתיקו:',
 'viewyourtext' => "באפשרותכם לצפות בטקסט המקור של '''העריכות שלכם''' של הדף ולהעתיקו:",
 'protectedinterface' => 'דף זה הוא אחד מסדרת דפים המספקים הודעות מערכת לתוכנה באתר ויקי זה, ומוגן כדי למנוע השחתות.
 כדי להוסיף או לשנות תרגומים בכל אתרי הוויקי, אנא השתמשו ב־[//translatewiki.net/ translatewiki.net], פרויקט התרגום של מדיה־ויקי.',
@@ -4369,4 +4369,6 @@ $5
 'expand_templates_generate_rawhtml' => 'הצגת HTML גולמי',
 'expand_templates_preview' => 'תצוגה מקדימה',
 
+# Unknown messages
+'uploadinvalidxml' => 'לא ניתן לפרש את ה־XML בקובץ שהועלה.',
 );
index e006c39..57344e1 100644 (file)
@@ -1978,7 +1978,7 @@ Sljedeći popis prikazuje {{PLURAL:$1|stranice koje|prvih $1 stranica koje}} vod
 'linkstoimage-redirect' => '$1 (preusmjeravanje datoteke) $2',
 'duplicatesoffile' => '{{PLURAL:$1|Sljedeća datoteka je kopija|$1 sljedeće datoteke su kopije|$1 sljedećih datoteka su kopije}} ove datoteke ([[Special:FileDuplicateSearch/$2|više detalja]]):',
 'sharedupload' => 'Ova je datoteka postavljena na $1 i mogu je koristiti ostali projekti.',
-'sharedupload-desc-there' => 'Ova datoteka je s $1 i mogu je koristiti drugi projekti. Pogledajte [$2 stranicu s opisom datoteke] za dodatne informacije.',
+'sharedupload-desc-there' => 'Ova datoteka je s projekta $1 i mogu je koristiti drugi projekti. Pogledajte [$2 stranicu s opisom datoteke] za dodatne informacije.',
 'sharedupload-desc-here' => 'Ova datoteka je sa $1 i mogu je koristiti drugi projekti. Opis s njezine [$2 stranice s opisom datoteke] prikazan je ispod.',
 'sharedupload-desc-edit' => 'Ova datoteka nalazi se na $1 i može se rabiti na drugim projektima.
 Njen opis možete urediti na [$2 stranici opisa datoteke].',
index 0acda6e..f51cb94 100644 (file)
@@ -3959,4 +3959,6 @@ Hewak móžeš slědowacy jednory formular wužiwać. Twój komentar přida so s
 'expand_templates_generate_rawhtml' => 'Hruby HTML pokazać',
 'expand_templates_preview' => 'Přehlad',
 
+# Unknown messages
+'uploadinvalidxml' => 'XML w nahratej dataji njeda so parsować.',
 );
index 5393820..df0ba42 100644 (file)
@@ -1005,6 +1005,8 @@ Illo existe ja.',
 'content-not-allowed-here' => 'Le contento "$1" non es permittite in le pagina [[$2]]',
 'editwarning-warning' => 'Quitar iste pagina pote causar le perdita de omne modificationes que tu ha facite.
 Si tu ha aperite un session, tu pote disactivar iste aviso in le section "Modification" de tu preferentias.',
+'editpage-notsupportedcontentformat-title' => 'Formato de contento non supportate',
+'editpage-notsupportedcontentformat-text' => 'Le formato de contento $1 non es supportate per le modello de contento $2.',
 
 # Content models
 'content-model-wikitext' => 'wikitexto',
@@ -4110,4 +4112,6 @@ De facto, illo expande quasi toto inter accolladas duple.',
 'expand_templates_generate_rawhtml' => 'Monstrar HTML brute',
 'expand_templates_preview' => 'Previsualisation',
 
+# Unknown messages
+'uploadinvalidxml' => 'Le codice XML in le file incargate non pote esser interpretate.',
 );
index 2431bed..bbc3d70 100644 (file)
@@ -34,6 +34,7 @@
  * @author Remember the dot
  * @author Rex
  * @author Rv77ax
+ * @author StefanusRA
  * @author Urhixidur
  * @author William Surya Permana
  * @author לערי ריינהארט
@@ -1755,7 +1756,7 @@ Jika Anda memberikannya, nama asli Anda akan digunakan untuk memberi pengenalan
 'rclistfrom' => 'Perlihatkan perubahan terbaru sejak $1',
 'rcshowhideminor' => '$1 suntingan kecil',
 'rcshowhidebots' => '$1 bot',
-'rcshowhideliu' => '$1 pengguna masuk log',
+'rcshowhideliu' => '$1 pengguna-pengguna terdaftar',
 'rcshowhideanons' => '$1 pengguna anon',
 'rcshowhidepatr' => '$1 suntingan terpatroli',
 'rcshowhidemine' => '$1 suntingan saya',
index 4f3c2a3..64b0e80 100644 (file)
@@ -505,7 +505,7 @@ Sjá [[Special:Version|útgáfusíðuna]].',
 'youhavenewmessages' => 'Þú hefur fengið $1 ($2).',
 'youhavenewmessagesfromusers' => 'Þú hefur $1 frá {{PLURAL:$3|öðrum notanda|$3 notendum}} ($2)',
 'youhavenewmessagesmanyusers' => 'Þú hefur $1 frá mörgum notendum ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1|ein|}} ný skilaboð',
+'newmessageslinkplural' => '{{PLURAL:$1|ný}} skilaboð',
 'newmessagesdifflinkplural' => '{{PLURAL:$1|síðasta breyting|síðustu breytingar}} spjallsíðunnar',
 'youhavenewmessagesmulti' => 'Þín bíða ný skilaboð á $1',
 'editsection' => 'breyta',
@@ -593,8 +593,8 @@ Líklegt er að einhver annar hafi gert það.',
 Engin skýring gefin.',
 'badtitle' => 'Slæmur titill',
 'badtitletext' => 'Umbeðin síðutitill er ógildur.',
-'perfcached' => 'Eftirfarandi er afrit af umbeðinni síðu og gæti því ekki verið nýjasta útgáfa hennar. Allt að {{PLURAL:$1|ein niðurstaða er aðgengileg|$1 niðurstöður eru aðgengilegar}} í skyndiminninu.',
-'perfcachedts' => 'Eftirfarandi gögn eru í skyndiminninu, og voru síðast uppfærð $1. Allt að {{PLURAL:$4|ein niðurstaða er aðgengileg|$4 niðurstöður eru aðgengilegar}} í skyndiminninu.',
+'perfcached' => 'Eftirfarandi er afrit af umbeðinni síðu og gæti því ekki verið nýjasta útgáfa hennar. Allt að $1 {{PLURAL:$1|niðurstaða er aðgengileg|niðurstöður eru aðgengilegar}} í skyndiminninu.',
+'perfcachedts' => 'Eftirfarandi gögn eru í skyndiminninu, og voru síðast uppfærð $1. Allt að $4 {{PLURAL:$4|niðurstaða er aðgengileg|niðurstöður eru aðgengilegar}} í skyndiminninu.',
 'querypage-no-updates' => 'Lokað er fyrir uppfærslur af þessari síðu. Gögn sett hér munu ekki vistast.',
 'viewsource' => 'Skoða efni',
 'viewsource-title' => 'Skoða efni $1',
@@ -720,7 +720,7 @@ Athugaðu hvort um innsláttavillu er að ræða eða [[Special:UserLogin/signup
 'login-userblocked' => 'Þessi notandi hefur verið settur í bann.  Innskráning ekki leyfð.',
 'wrongpassword' => 'Uppgefið lykilorð er rangt. Vinsamlegast reyndu aftur.',
 'wrongpasswordempty' => 'Lykilorðsreiturinn var auður. Vinsamlegast reyndu aftur.',
-'passwordtooshort' => 'Lykilorð skal vera að minnsta kosti {{PLURAL:$1 |einn stafur|$1 stafir}}.',
+'passwordtooshort' => 'Lykilorð skal vera að minnsta kosti $1 {{PLURAL:$1|stafur|stafir}}.',
 'password-name-match' => 'Þarf að lykilorð þitt sé öðruvísi notandanafni þínu',
 'password-login-forbidden' => 'Notkun þessa notendanafns og lykilorðs er ekki leyfileg.',
 'mailmypassword' => 'Endurstilla lykilorð',
@@ -728,10 +728,10 @@ Athugaðu hvort um innsláttavillu er að ræða eða [[Special:UserLogin/signup
 'passwordremindertext' => 'Einhver (líklegast þú, á vistfanginu $1) hefur beðið um að fá nýtt
 lykilorð fyrir {{SITENAME}} ($4). Tímabundið lykilorð fyrir notandann „$2“
 hefur verið búið til og er núna „$3“. Ef þetta er það sem þú vildir, þarfu að skrá
-þig inn og velja nýtt lykilorð.  Þetta tímabundna lykilorð rennur út eftir {{PLURAL:$5|einn dag|$5 daga}}.
+þig inn og velja nýtt lykilorð.  Þetta tímabundna lykilorð rennur út eftir $5 {{PLURAL:$5|dag|daga}}.
 
 Ef það var ekki þú sem fórst fram á þetta, eða ef þú mannst lykilorðið þitt,
-og vilt ekki lengur breyta því, skaltu hunsa þetta skilaboð og
+og vilt ekki lengur breyta því, skaltu hunsa þessi skilaboð og
 halda áfram að nota gamla lykilorðið.',
 'noemail' => 'Það er ekkert netfang skráð fyrir notandan "$1".',
 'noemailcreate' => 'Þú verður að skrá gilt netfang',
@@ -809,14 +809,14 @@ endursetningu lykilorðsins þíns fyrir {{SITENAME}} ($4). Aðgangur eftirfaran
 
 $2
 
-Ef þetta er það sem þú vildir, þarftu að skrá þig inn og velja nýtt lykilorð. {{PLURAL:$3|Tímabundna lykilorð|Tímabundnu lykilorðin}} renna út eftir {{PLURAL:$5|einn dag|$5 daga}}.
+Ef þetta er það sem þú vildir, þarftu að skrá þig inn og velja nýtt lykilorð. {{PLURAL:$3|Tímabundna lykilorðið rennur|Tímabundnu lykilorðin renna}} út eftir $5 {{PLURAL:$5|dag|daga}}.
 
 Ef það varst ekki þú sem fórst fram á þetta, eða ef þú mannst lykilorðið þitt, og villt ekki lengur breyta því, skaltu hunsa þessi skilaboð og halda áfram að nota gamla lykilorðið.',
 'passwordreset-emailtext-user' => 'Notandinn $1 á {{SITENAME}} hefur beðið um endursetningu lykilorðsins þíns fyrir {{SITENAME}} ($4). Aðgangur eftirfarandi {{PLURAL:$3|notanda er|notendum eru}} tengd þessu netfangi:
 
 $2
 
-Ef þetta er það sem þú vildir, þarftu að skrá þig inn og velja nýtt lykilorð. {{PLURAL:$3|Tímabundna lykilorð|Tímabundnu lykilorðin}} renna út eftir {{PLURAL:$5|einn dag|$5 daga}}.
+Ef þetta er það sem þú vildir, þarftu að skrá þig inn og velja nýtt lykilorð. {{PLURAL:$3|Tímabundna lykilorðið rennur|Tímabundnu lykilorðin renna}} út eftir $5 {{PLURAL:$5|dag|daga}}.
 
 Ef það varst ekki þú sem fórst fram á þetta, eða ef þú mannst lykilorðið þitt, og villt ekki lengur breyta því, skaltu hunsa þessi skilaboð og halda áfram að nota gamla lykilorðið.',
 'passwordreset-emailelement' => 'Notendanafn: $1
@@ -1005,7 +1005,7 @@ Lausn er í gildi sem leyfir þér að breyta síðum: Stafatákn sem eru ekki 
 Ef þú vilt ekki að textanum verði breytt skaltu ekki senda hann inn hér.<br />
 Þú lofar okkur einnig að þú hafir skrifað þetta sjálfur, að efnið sé í almannaeigu eða að það heyri undir frjálst leyfi. (sjá $1).
 '''EKKI SENDA INN HÖFUNDARRÉTTARVARIРEFNI ÁN LEYFIS RÉTTHAFA!'''",
-'longpageerror' => "'''VILLA: Textinn sem þú sendir inn er {{PLURAL:$1|eitt kílóbæti|$1 kílóbæti}} að lengd, en hámarkið er {{PLURAL:$2|eitt kílóbæti|$2 kílóbæti}}. Ekki er hægt að vista textann.'''",
+'longpageerror' => "'''VILLA: Textinn sem þú sendir inn er $1 {{PLURAL:$1|kílóbæti|kílóbæti}} að lengd, en hámarkið er $2 {{PLURAL:$2|kílóbæti|kílóbæti}}. Ekki er hægt að vista textann.'''",
 'readonlywarning' => "'''AÐVÖRUN: Gagnagrunninum hefur verið læst til að unnt sé að framkvæma viðhaldsaðgerðir, svo þú getur ekki vistað breytingar þínar núna.'''
 Þú ættir að klippa og líma textann yfir í textaskjal til þess að geyma hann til seinni tíma.
 
@@ -1063,7 +1063,7 @@ Ef þú ert skráður inn, þá getur þú óvirkjað þessi skilaboð í „Bre
 # Parser/template warnings
 'expensive-parserfunction-warning' => "'''Viðvörun:''' Þessi síða inniheldur of mörg vinnslufrek aðgerðar þáttunar köll.
 
-Hún ætti að innihalda minna en $2 {{PLURAL:$2|kall|köll}}, en {{PLURAL:$1|er nú eitt kall|eru nú $1 köll}}.",
+Hún ætti að innihalda minna en $2 {{PLURAL:$2|kall|köll}}, en {{PLURAL:$1|er nú $1 kall|eru nú $1 köll}}.",
 'expensive-parserfunction-category' => 'Síður með of mörg vinnslufrek aðgerðar þáttunar köll',
 'post-expand-template-inclusion-warning' => "'''Viðvörun:''' Sniðið tekur of mikið pláss.
 Hluti sniðsins verður ekki með.",
@@ -1265,9 +1265,9 @@ Athugaðu að með því að nota flakktenglana er þessi dálkur endurstilltur.
 'showhideselectedversions' => 'Sýna/fela valdar breytingar',
 'editundo' => 'Taka aftur þessa breytingu',
 'diff-empty' => '(Enginn munur)',
-'diff-multi' => '({{PLURAL:$1|Ein millibreyting ekki sýnd|$1 millibreytingar ekki sýndar}} frá {{PLURAL:$2|notanda|$2 notendum}}.)',
-'diff-multi-manyusers' => '({{PLURAL:$1|Ein millibreyting ekki sýnd|$1 millibreytingar ekki sýndar}} frá fleiri en {{PLURAL:$2|einum notanda|$2 notendum}}.)',
-'difference-missing-revision' => '{{PLURAL:$2|Ein útgáfa|$2 útgáfur}} samanburðarins ($1) {{PLURAL:$2|fannst|fundust}} ekki.
+'diff-multi' => '$1 ({{PLURAL:$1|millibreyting ekki sýnd|millibreytingar ekki sýndar}} frá $2 {{PLURAL:$2|notanda|notendum}}.)',
+'diff-multi-manyusers' => '($1 {{PLURAL:$1|millibreyting ekki sýnd|millibreytingar ekki sýndar}} frá fleiri en $2 {{PLURAL:$2|notanda|notendum}}.)',
+'difference-missing-revision' => '$2 {{PLURAL:$2|útgáfa|útgáfur}} samanburðarins ($1) {{PLURAL:$2|fannst|fundust}} ekki.
 
 Þetta gerist oftast þegar úreldur samanburðartengill tengir á síðu sem hefur verið eytt.
 Frekari upplýsingar eru í [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} eyðingarskránni].',
@@ -1813,7 +1813,7 @@ Ef vandamálið lagast ekki, hafðu samband við [[Special:ListUsers/sysop|stjó
 'backend-fail-closetemp' => 'Mistókst að loka tímabundinni skrá.',
 'backend-fail-read' => 'Mistókst að lesa skrá $1.',
 'backend-fail-create' => 'Mistókst að skrifa skrá $1.',
-'backend-fail-maxsize' => 'Mistókst að skrifa skránna $1 því hún er stærri en {{PLURAL:$2|eitt bæti|$2 bæti}}.',
+'backend-fail-maxsize' => 'Mistókst að skrifa skránna „$1” því hún er stærri en $2 {{PLURAL:$2|bæti}}.',
 'backend-fail-readonly' => 'Gagnabankann "$1" er engöngu hægt að lesa í augnablikinu. Ástæðan sem var gefin er: "\'\'$2\'\'"',
 'backend-fail-synced' => 'Skráin $1 er í ósamkvæmu ástandi innan innri geymslubakenda',
 'backend-fail-connect' => 'Mistókst að tengjast gagnabankanum "$1".',
@@ -2513,7 +2513,7 @@ Innihald greinarinnar er einungis aðgengilegt möppudýrum.',
 'undeletecomment' => 'Ástæða:',
 'undeletedrevisions' => '$1 {{PLURAL:$1|breyting endurvakin|breytingar endurvaktar}}',
 'undeletedrevisions-files' => '$1 {{PLURAL:$1|breyting|breytingar}} og $2 {{PLURAL:$2|skrá|skrár}} endurvaktar',
-'undeletedfiles' => '{{PLURAL:$1|Ein skrá endurvakin|$1 skrár endurvaktar}}',
+'undeletedfiles' => '$1 {{PLURAL:$1|skrá endurvakin|skrár endurvaktar}}',
 'cannotundelete' => 'Ekki var hægt að afturkalla eyðingu.
 $1',
 'undeletedpage' => "'''$1 var endurvakin'''
@@ -3704,7 +3704,7 @@ Vinsamlegast staðfestu að þú viljir endurvekja hana.',
 'watchlistedit-normal-explain' => 'Titlarnir á vaktlistanum þínum er sýndir fyrir neðan.
 Til að fjarlægja titil hakaðu í kassann við hliðina á honum og smelltu á „{{int:Watchlistedit-normal-submit}}“. Þú getur einnig [[Special:EditWatchlist/raw|breytt honum opnum]].',
 'watchlistedit-normal-submit' => 'Fjarlægja titla',
-'watchlistedit-normal-done' => '{{PLURAL:$1|Ein síða var fjarlægð|$1 síður voru fjarlægðar}} af vaktlistanum þínum:',
+'watchlistedit-normal-done' => '$1 {{PLURAL:$1|síða var fjarlægð|síður voru fjarlægðar}} af vaktlistanum þínum:',
 'watchlistedit-raw-title' => 'Breyta opnum vaktlistanum',
 'watchlistedit-raw-legend' => 'Breyta opnum vaktlistanum',
 'watchlistedit-raw-explain' => 'Titlarnir á vaktlistanum þínum eru sýndir hér fyrir neðan og þeim er hægt að breyta með því að bæta við og taka út af honum;
index 0e8aab7..947000e 100644 (file)
@@ -4144,4 +4144,6 @@ vale a dire praticamente tutto ciò che si trova tra doppie parentesi graffe.',
 'expand_templates_generate_rawhtml' => 'Mostra HTML',
 'expand_templates_preview' => 'Anteprima',
 
+# Unknown messages
+'uploadinvalidxml' => 'Il codice XML nel file caricato non può essere elaborato.',
 );
index c61e33d..47c488f 100644 (file)
@@ -4505,4 +4505,6 @@ MediaWikiは、有用であることを期待して配布されていますが
 'expand_templates_generate_rawhtml' => 'HTML ソースを表示',
 'expand_templates_preview' => 'プレビュー',
 
+# Unknown messages
+'uploadinvalidxml' => 'アップロードされたファイルに含まれる XML が構文解析できませんでした。',
 );
index 08fdcc6..9379f8e 100644 (file)
@@ -357,7 +357,7 @@ $1',
 'nstab-main' => 'Artikel',
 'nstab-user' => 'Panganggo',
 'nstab-media' => 'Media',
-'nstab-special' => 'Istiméwa',
+'nstab-special' => 'Astamiwa',
 'nstab-project' => 'Proyek',
 'nstab-image' => 'Gambar',
 'nstab-mediawiki' => 'Pariwara',
@@ -1456,9 +1456,9 @@ Alamat layang èlèktronik Sampéyan ora dituduhaké nalika wong liya ngubungi S
 'rc-old-title' => 'wigatiné digawé minangka "$1"',
 
 # Recent changes linked
-'recentchangeslinked' => 'Pranala Pilihan',
-'recentchangeslinked-feed' => 'Pranala Pilihan',
-'recentchangeslinked-toolbox' => 'Pranala Pilihan',
+'recentchangeslinked' => 'Pangowahan sing terkait',
+'recentchangeslinked-feed' => 'Pangowahan sing terkait',
+'recentchangeslinked-toolbox' => 'Pangowahan sing terkait',
 'recentchangeslinked-title' => 'Owah-owahan sing ana gandhèngané karo "$1"',
 'recentchangeslinked-summary' => "Kaca astaméwa (kaca kusus) iki mènèhi daftar owah-owahan pungkasan ing kaca-kaca sing kagandhèng (utawa anggota sawijining kateogri). Kaca sing [[Special:Watchlist|panjenengan awasi]] ditandhani '''kandel'''.",
 'recentchangeslinked-page' => 'Jeneng kaca:',
@@ -3611,7 +3611,7 @@ Anda seharusnya telah menerima [{{SERVER}}{{SCRIPTPATH}}/COPYING salinan Lisensi
 'fileduplicatesearch-noresults' => 'Ora ana berkas mawa jeneng "$1" ditemokaké.',
 
 # Special:SpecialPages
-'specialpages' => 'Kaca istiméwa',
+'specialpages' => 'Kaca astamiwa',
 'specialpages-note-top' => 'Katrangan',
 'specialpages-note' => '* Kaca astamiwa biasa.
 * <span class="mw-specialpagerestricted">Kaca astamiwa kawatesan.</span>',
index 8e35e75..41d40a0 100644 (file)
@@ -2324,6 +2324,7 @@ $UNWATCHURL
 'delete-warning-toobig' => 'ამ გვერდს ძალიან გრძელი ისტორია გააჩნია,  $1 {{PLURAL:$1|ვერსიაზე|ვერსიიებზე|ვერსიებზე}} მეტი.
 მისმა წაშლამ შესაძლოა გამოიწვიოს საიტის მონაცემთა ბაზის  {{SITENAME}} არაკორექტული მუშაობა;
 იმოქმედეთ სიფრთხილით.',
+'deleting-backlinks-warning' => "'''გაფრთხილება:''' რამდენიმე სხვა გვერდი დაკავშირებულია ამ წასაშლელ გვერდთან.",
 
 # Rollback
 'rollback' => 'ცვლილებების გაუქმება',
index 488ea1e..598854d 100644 (file)
@@ -71,7 +71,7 @@ $messages = array(
 'tog-enotifrevealaddr' => 'Ssken e-mail inu asmi yettwazen email n talɣut',
 'tog-shownumberswatching' => 'Ssken geddac yellan n yimseqdacen iɛessasen',
 'tog-oldsig' => 'Azmul yellan :',
-'tog-fancysig' => 'ǧǧ azmul am yettili (war azday awurman)',
+'tog-fancysig' => 'Eǧǧ azmul am yettili (war azday awurman)',
 'tog-uselivepreview' => 'Sseqdec askan arurad (Experimental)',
 'tog-forceeditsummary' => 'Ini-iyi-d mi sskecmeɣ agzul amecluc',
 'tog-watchlisthideown' => 'Ffer ibeddlen inu seg wumuɣ n uɛessi inu',
@@ -547,31 +547,34 @@ G leɛnaya-k, kcem tikelt nniḍen yis-s.',
 ur tezmireḍ ara ad tesɛuḍ awal n tbaḍnit i tettuḍ.',
 'eauthentsent' => 'Yiwen email yetweceggeε ar tansa id efkeḍ.
 Uqbel ad n-ceggeε email nniḍen, ilaq ad ḍfereḍ ayen yellan deg email dɣa ad sergegeḍ amiḍan agi d win inek(m).',
-'throttled-mailpassword' => 'Asmekti n wawal n uɛaddi yettwazen yagi deg {{PLURAL:$1|asrag agi aneggaru| $1 isragen agi ineggura}}. Asmekti n wawal n uɛaddi yettwazen tikelt kan mkul $1 swayeɛ. deg {{PLURAL:$1|asrag|azilal n $1 isragen}}.',
+'throttled-mailpassword' => 'Neceggɛed yakan tirawt n uwennez i awal-ik/im n uɛaddi deg {{PLURAL:$1|asrag agi aneggaru|$1 isragen agi ineggura}}. Awennez n uwal n uɛaddi yettwaceggaɛ tikelt kan deg {{PLURAL:$1|asrag|$1 isragen}}.',
 'mailerror' => 'Agul asmi yettwazen e-mail: $1',
 'acct_creation_throttle_hit' => 'Amdan i seqdacen tansa IP inek/inem yesnulfud {{PLURAL:$1|yiwen amiḍan|$1 imiḍanen}} deg 24 izragen agi ineggura, negweḍ ar talast n turagt deg azilal agi n wakud.',
-'emailauthenticated' => 'Tansa e-mail inek/inem tesesteb ass n $2 af $3.',
-'emailnotauthenticated' => 'Tansa e-mail inek mazal ur tettuɛqel. Ḥedd e-mail ur ttwazen i ulaḥedd n iḍaɣaren-agi.',
+'emailauthenticated' => 'Tansa e-mail inek/inem tesergeg ass n $2 af $3.',
+'emailnotauthenticated' => 'Tansa email inek mazal ur tettuɛqel. Ur d netceggaɛ ara email i yal tiseɣnin agi.',
 'noemailprefs' => 'Efk tansa e-mail iwakken ad leḥḥun iḍaɣaren-nni.',
 'emailconfirmlink' => 'Sentem tansa e-mail inek',
 'invalidemailaddress' => 'Tansa e-mail-agi ur telhi, ur tesɛi ara taseddast n lɛali. Ssekcem tansa e-mail s taseddast n lɛali neɣ ur tefkiḍ acemma.',
 'cannotchangeemail' => 'Ur t-zemreḍ ara ad beddeleḍ tansa e-mail deg uwiki agi.',
 'emaildisabled' => 'Asmel agi ur yezmer ara ad i cegaɛ e-mail.',
 'accountcreated' => 'Isem n wemseqdac yettwaxleq',
-'accountcreatedtext' => 'Isem n wemseqdac i $1 yettwaxleq.',
+'accountcreatedtext' => 'Amiḍan n umseqdac i [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|amyannan]]) yexelqed.',
 'createaccount-title' => 'Asnulfu n umiḍan i {{SITENAME}}',
 'createaccount-text' => 'Albeɛḍ yesnulfu-d amiḍan i tansa e-amil inek/inem ɣef {{SITENAME}} ($4) s-isem n-useqdac « $2 », s awal n uɛaddi « $3 ».
 Ilaq tura ad lldiḍ taɣimit dɣa ad beddeleḍ awal ik/im n uɛaddi.',
 'usernamehasherror' => 'Isem n useqdac ur yezmer ara ad i sɛu  isekkilen n ugeddeḥ',
 'login-throttled' => 'Tɛerdeḍ ad qqeneḍ aṭas tiqwal deg dqiqat agi iɛddan.
-Ilaq ad rǧuḍ ciṭaḥ uqbel ad ɛerdeḍ tikkelt nniḍen.',
+Ilaq ad rǧuḍ $1 uqbel ad ɛerdeḍ tikkelt nniḍen.',
 'login-abort-generic' => 'Taremt ik/im n tuqqna tebrir',
 'loginlanguagelabel' => 'Tutlayt: $1',
 'suspicious-userlogout' => 'Asuter n usenser yugwi acku yella ugur s iminig naɣ s tazarkatut n uqeddac proxy.',
+'createacct-another-realname-tip' => '* Isem n ṣṣeḥ d-axeṭran.
+Ma teɛzemeḍ a t-tefkeḍ, ad yettuseqdac iwakken ad snen medden anwa yuran tikkin inek.',
 
 # Email sending
 'php-mail-error-unknown' => 'anezri warisem deg tawuri mail() n PHP',
 'user-mail-no-addy' => 'Ɛred ad icegaɛ e-mail war tansa e-mail',
+'user-mail-no-body' => 'Arram n uceggaɛ email s tafekka tilemt neɣ d-awezlan aṭas.',
 
 # Change password dialog
 'changepassword' => 'Beddel awal n tbaḍnit',
@@ -582,7 +585,7 @@ Ilaq ad rǧuḍ ciṭaḥ uqbel ad ɛerdeḍ tikkelt nniḍen.',
 'newpassword' => 'Awal n tbaḍnit amaynut:',
 'retypenew' => 'Ɛiwed ssekcem n tbaḍnit amaynut:',
 'resetpass_submit' => 'Eg awal n tbaḍnit u kcem',
-'changepassword-success' => 'Awal n tbaḍnit yettubeddel! Qrib ad tkecmeḍ...',
+'changepassword-success' => 'Awal n uɛaddi yettubeddel s lerbaḥ !',
 'resetpass_forbidden' => 'Ur zemreḍ ara ad beddeleḍ awalen n uɛaddi',
 'resetpass-no-info' => 'Ilaq ad qqeneḍ iwakken ad ẓṛeḍ asebter agi.',
 'resetpass-submit-loggedin' => 'Beddel awal n uɛaddi',
@@ -590,32 +593,36 @@ Ilaq ad rǧuḍ ciṭaḥ uqbel ad ɛerdeḍ tikkelt nniḍen.',
 'resetpass-wrong-oldpass' => 'Awal n uɛaddi ur i seɣbel ara.
 Ahat ilaq ad beddeleḍ awal ik/im n uɛaddi naɣ ad ssutereḍ awal n uɛaddi amaynut.',
 'resetpass-temp-password' => 'Awal n uɛaddi amakud',
+'resetpass-abort-generic' => 'Asiɣzef yesemmewet abeddel n uwal n uɛaddi.',
 
 # Special:PasswordReset
 'passwordreset' => 'Awennez tikkelt nniḍen n awal uɛaddi',
+'passwordreset-text-one' => 'Ččur tiferkit agi iwakken ad wennezeḍ awal-ik/im n uɛaddi.',
+'passwordreset-text-many' => '{{PLURAL:$1|Čcur yiwet n tiɣwezza iwakken ad rmeseḍ awal n uɛaddi uɛḍil deg tirawt.}}',
 'passwordreset-legend' => 'Awennez tikkelt nniḍen n awal uɛaddi',
 'passwordreset-disabled' => 'Awennez n awal uɛaddi yensa deg uwiki agi.',
+'passwordreset-emaildisabled' => 'Tiseɣnin email nsant ɣef wiki agi.',
 'passwordreset-username' => 'Isem n useqdac',
 'passwordreset-domain' => 'Talɣut :',
 'passwordreset-capture' => 'Ẓeṛ tirawt ?',
 'passwordreset-capture-help' => 'Lukan ad tekkiḍ ɣef texxamt agi, tirawt (deg-es awal n uɛaddi akudan) att beqqeḍ dɣa ad tetwetceggaɛ i useqdac.',
 'passwordreset-email' => 'Tansa e-mail :',
 'passwordreset-emailtitle' => 'Tilɣa n umiḍan ɣef {{SITENAME}}',
-'passwordreset-emailtext-ip' => 'Yiwen (Ahat kečč/kem, seg tansa IP $1) yessutered asiwel n tilɣa n umiḍan inek/inem i {{SITENAME}} ($4). {{PLURAL:$3|Amiḍan n useqdac agi yedrew|imiḍanen n iseqdacen agi drewen}} s tansa e-mail agi :
+'passwordreset-emailtext-ip' => 'Yiwen (Ahat kečč/kem, seg tansa IP $1) yessutered awennez n awal n uɛaddi i {{SITENAME}} ($4). {{PLURAL:$3|Amiḍan n useqdac agi yeqqen|imiḍanen n iseqdacen agi qqenen}} s tansa e-mail agi :
 
 $2
 
-{{PLURAL:$3|Awal n uɛaddi agi ad i aff tasewti-s|Awalen n uɛaddi agi ad affen taseweti nsen}} deg {{PLURAL:$5|yiwen ass|$5 ussan}}. Ilaq tura ad qqeneḍ dɣa ad freneḍ awal n uɛaddi amaynut. Lukan mačči d kečč/kem i xedmen asuter agi, naɣ tecfiḍ tura i awal n uɛaddi inek/inem, tzemreḍ ad eǧǧeḍ izen agi.',
-'passwordreset-emailtext-user' => 'Aseqdac $1 ɣef {{SITENAME}} yessutered asiwel n tilɣa n umiḍan inek/inem i {{SITENAME}} ($4). {{PLURAL:$3|Amiḍan n useqdac agi yedrew|imiḍanen n iseqdacen agi drewen}} s tansa e-mail agi :
+{{PLURAL:$3|Awal n uɛaddi uɛḍil agi ad i aff tasewti-s|Awalen n uɛaddi uɛḍilen agi ad affen taseweti nsen}} deg {{PLURAL:$5|yiwen ass|$5 ussan}}. Ilaq tura ad qqeneḍ dɣa ad freneḍ awal n uɛaddi amaynut. Lukan mačči d kečč/kem i xedmen asuter agi, naɣ tecfiḍ tura i awal n uɛaddi inek/inem, tzemreḍ ad eǧǧeḍ izen agi.',
+'passwordreset-emailtext-user' => 'Aseqdac $1 ɣef {{SITENAME}} yessutered awennez n awal n uɛaddi i {{SITENAME}} ($4). {{PLURAL:$3|Amiḍan n useqdac agi yeqqen|imiḍanen n iseqdacen agi qqenen}} s tansa e-mail agi :
 
 $2
 
-{{PLURAL:$3|Awal n uɛaddi agi ad i aff tasewti-s|Awalen n uɛaddi agi ad affen taseweti nsen}} deg {{PLURAL:$5|yiwen ass|$5 ussan}}. Ilaq tura ad qqeneḍ dɣa ad freneḍ awal n uɛaddi amaynut. Lukan mačči d kečč/kem i xedmen asuter agi, naɣ tecfiḍ tura i awal n uɛaddi inek/inem, tzemreḍ ad eǧǧeḍ izen agi.',
+{{PLURAL:$3|Awal n uɛaddi uɛḍil agi ad i aff tasewti-s|Awalen n uɛaddi uɛḍilen agi ad affen taseweti nsen}} deg {{PLURAL:$5|yiwen ass|$5 ussan}}. Ilaq tura ad qqeneḍ dɣa ad freneḍ awal n uɛaddi amaynut. Lukan mačči d kečč/kem i xedmen asuter agi, naɣ tecfiḍ tura i awal n uɛaddi inek/inem, tzemreḍ ad eǧǧeḍ izen agi.',
 'passwordreset-emailelement' => 'Isem n useqdac : $1
 Awal n uɛddi akudan : $2',
-'passwordreset-emailsent' => 'Tirawt n usmekti tetwazen.',
-'passwordreset-emailsent-capture' => 'Tirawt n usmekti tetwazen, ẓeṛ-itt ddaw agi.',
-'passwordreset-emailerror-capture' => 'Tirawt n usmekti t-arewed, ẓeṛ-itt ddaw agi, lamaɛna azen yefkad anezri (tirawt ur tru ara) : $1',
+'passwordreset-emailsent' => 'Tirawt n uwennez n awal n uɛaddi tetwaceggaɛ.',
+'passwordreset-emailsent-capture' => 'Tirawt n uwennez n awal n uɛaddi tetwaceggaɛ, ẓeṛ-itt ddaw agi.',
+'passwordreset-emailerror-capture' => 'Tirawt n uwennez n awal n uɛaddi t-arewed, ẓeṛ-itt ddaw agi, lamaɛna aceggaɛ i {{GENDER:$2|umseqdac}} yefkad anezri : $1',
 
 # Special:ChangeEmail
 'changeemail' => 'Beddel tansa n e-mail',
@@ -625,9 +632,23 @@ Awal n uɛddi akudan : $2',
 'changeemail-oldemail' => 'Tansa e-mail n tura :',
 'changeemail-newemail' => 'Tansa e-mail tamaynut :',
 'changeemail-none' => '(ulac)',
+'changeemail-password' => 'Awal-ik/im n uɛaddi ɣef {{SITENAME}} :',
 'changeemail-submit' => 'Beddel tansa e-mail',
 'changeemail-cancel' => 'Semmewet',
 
+# Special:ResetTokens
+'resettokens' => 'Wennez tiddas',
+'resettokens-text' => 'D-agi tzemreḍ ad twennezeḍ tiddas i ɛemmeden ad kecmeḍ ar isefka usligen i qqenen ar amiḍan inek/inem.
+
+Ilaq ad twennezeḍ tiddas ma tferqeḍ-ten s tuccḍa s umseqdac nniḍen neɣ ma amiḍan inek/inem yexṣer.',
+'resettokens-no-tokens' => 'Ulac tiddas an wennez.',
+'resettokens-legend' => 'Wennez tiddas',
+'resettokens-tokens' => 'Tiddas :',
+'resettokens-token-label' => '$1 (azal amiran : $2)',
+'resettokens-watchlist-token' => 'Tiddest i usuddem (Atom/RSS) web n [[Special:Watchlist|ibeddilen n isebtar n umuɣ inek/inem n uḍfar]]',
+'resettokens-done' => 'Tiddas i wennezen.',
+'resettokens-resetbutton' => 'Wennez tiddas i fernen',
+
 # Edit page toolbar
 'bold_sample' => 'Aḍris aberbuz',
 'bold_tip' => 'Aḍris aberbuz',
@@ -702,8 +723,8 @@ Smekti-ten u fka-ten i unedbal-nni.",
 'loginreqlink' => 'Kcem',
 'loginreqpagetext' => 'Yessefk $1 iwakken ad teẓriḍ isebtar wiyaḍ.',
 'accmailtitle' => 'Awal n tbaḍnit yettwazen.',
-'accmailtext' => "Awal n uɛaddi id yuran s ugacur i [[User talk:$1|$1]] yetwecgaɛ i $2.
-Awal n uɛaddi i umiḍan agi amaynut yezmer ad yetbeddel ɣef usebter n ''[[Special:ChangePassword|ubeddel n awal uɛddi]]'' sakin tuqqna.",
+'accmailtext' => 'Awal n uɛaddi id yuran s ugacur i [[User talk:$1|$1]] yetweceggaɛ i $2.
+Yezmer ad yetbeddel ɣef usebtar [[Special:ChangePassword|Abeddel n awal uɛddi]] sakin tuqqna.',
 'newarticle' => '(Amaynut)',
 'newarticletext' => 'Tḍefreḍ azday ɣer usebter mazal ur yettwaxleq ara.
 Akken ad txelqeḍ asebter-nni, aru deg tenkult i tella deg ukessar
@@ -739,7 +760,7 @@ Asekcem aneggaru n useklas n ikyafen yella ddaw agi :',
 
 '''Cfut, ttagi d azar-timeẓriwt kan.'''
 Ibeddlen mazal ur ttusmektin ara!",
-'continue-editing' => 'Kemmel abeddel',
+'continue-editing' => 'Ṛuḥ ar taɣzut n ubeddel',
 'previewconflict' => 'Pre-timeẓriwt-agi tesskan aḍris i yellan deg usawen lemmer tebɣiḍ a tt-tesmektiḍ.',
 'session_fail_preview' => "'''Suref-aɣ! ur nezmir ara a nesmekti abeddil inek axaṭer yella ugur.
 G leɛnayek ɛreḍ tikelt nniḍen. Lukan mazal yella ugur, ffeɣ umbeɛd kcem.'''",
@@ -799,7 +820,7 @@ Tzemreḍ ad uɣaleḍ ar deffir dɣa ad beddeleḍ asebter yellan yakan, naɣ [
 'nocreate-loggedin' => 'Ur tesɛiḍ ara turagt i usnulfu n isebtar imaynuten.',
 'sectioneditnotsupported-title' => 'Abeddel n tigezmi agi ur yezmer ara',
 'sectioneditnotsupported-text' => 'Abeddel n tigezmi ur yezmer ara deg usebtar agi n ubeddel.',
-'permissionserrors' => 'Anezri n turagt',
+'permissionserrors' => 'Agul n turagt',
 'permissionserrorstext' => 'Ur tesɛiḍ ara turagt iwakken ad xedmeḍ wayagi i {{PLURAL:$1|taɣẓint|tiɣẓinin}} agi :',
 'permissionserrorstext-withaction' => 'Ur sɛiḍ ara ttesriḥ af $2, i {{PLURAL:$1|taɣẓint|tiɣẓinin}} agi :',
 'recreate-moveddeleted-warn' => "'''Ɣur-wet : asebter agi i tebɣam ad snulfum, yetwekkes uqbel.'''
@@ -813,12 +834,18 @@ Tamentilt warisem',
 Ahat yetwemḥa.',
 'edit-conflict' => 'Amgirred n ubeddel.',
 'edit-no-change' => 'Abeddel inek/inem ur yetwexdam ara acku ur di ban ara abeddel deg uḍris.',
+'postedit-confirmation' => 'Abeddel inek/inem yetwakles.',
 'edit-already-exists' => 'Asebter amaynut ur d yesnufu ara.
 Yella yakan.',
 'defaultmessagetext' => 'Izen s lexṣas',
 'content-failed-to-parse' => 'Tasleṭ n ugbur n $2 i talɣa $1 texseṛ : $3',
 'invalid-content-data' => 'Isefka n ugbur ur ɣbelen ara',
 'content-not-allowed-here' => 'Agbur "$1" ur yesɛa ara turagt ɣef usebter [[$2]]',
+'editwarning-warning' => 'Ma ad teffeɣeḍ deg usebtar agi, akkw ibeddilen id xeddemeḍ ad sṛuḥen.
+
+Ma teqqeneḍ, tzemreḍ ad senseḍ alɣu agi deg tigezmi « Abeddel » n ismenyifen inek/inem.',
+'editpage-notsupportedcontentformat-title' => 'Amasal n ugbur ur d-yetwarfed ara',
+'editpage-notsupportedcontentformat-text' => 'Amasal n ugbur $1 ur d-yetwarfed ara sɣur talɣa n ugbur $2.',
 
 # Content models
 'content-model-wikitext' => 'wikiaḍris',
@@ -850,12 +877,16 @@ Ilaq ad i sɛu ddaw n  $2 {{PLURAL:$2|tiɣri|tiɣriwin }}, wannag tura {{PLURAL:
 'undo-failure' => 'Ur yezmir ara ad issefu abeddel axaṭer yella amennuɣ abusari deg ubeddel.',
 'undo-norev' => 'Abeddel ur yezmer ara ad yetwekkes acku ulac-itt naɣ tetwekkes yakan',
 'undo-summary' => 'Ssefsu tasiwelt $1 sɣur [[Special:Contributions/$2|$2]] ([[User talk:$2|Meslay]])',
+'undo-summary-username-hidden' => 'Semmewet tacaggart $1 sɣur amseqdac yeffren',
 
 # Account creation failure
 'cantcreateaccounttitle' => 'Ur yezmir ara ad yexleq isem n wemseqdac',
 'cantcreateaccount-text' => "Asnulfu n umiḍan seg tansa IP (<b>$1</b>) tekyef sɣur [[User:$3|$3]].
 
 Taɣẓint n $3 : ''$2''",
+'cantcreateaccount-range-text' => "Asnulfu n umiḍan seg tansiwin IP deg tagrumma '''$1''', i sseddan tansa inek/inem IP ('''$4'''), twawḥelen sɣur [[User:$3|$3]].
+
+Taɣẓint i-d yefka/tefka $3 : ''$2''",
 
 # History pages
 'viewpagelogs' => 'Ẓer aɣmis n usebter-agi',
@@ -877,8 +908,8 @@ Tabadut: (tura) = amgirred akk d tasiwelt n tura,
 (amgirred) = amgirred akk d tasiwelt ssabeq, M = abeddel afessas.',
 'history-fieldset-title' => 'Inig deg umazray',
 'history-show-deleted' => 'Ekkes kan',
-'histfirst' => 'Tikkin timezwura',
-'histlast' => 'Tikkin tineggura',
+'histfirst' => 'tiqdimin',
+'histlast' => 'timaynutin',
 'historysize' => '({{PLURAL:$1|1 atamḍan|$1 itamḍanen}})',
 'historyempty' => '(amecluc)',
 
@@ -933,19 +964,20 @@ Tzemreḍ att ẓṛeḍ ; tilɣa llant deg [{{fullurl:{{#Special:Log}}/delete|p
 'revdelete-text' => 'Ileqman d tidyanin yettumḥan ad qqimen deg umezruy n usebter dɣa deg iɣmisen, maca agbur nsen ur i sɛu ara tuffart i uzayez."
 Inedbalen wiyaḍ deg {{SITENAME}} zemren ad ẓṛen imuren i yettwafren u zemren a ten-mḥan, ḥaca ma llan icekkilen.',
 'revdelete-confirm' => 'Sergeg ma tebɣiḍ ad xedmeḍ tigawt agi, fehmeḍ inalkamen, dɣa temtawiḍ s [[{{MediaWiki:Policy-url}}|ilugan]].',
-'revdelete-suppress-text' => "Ilaq tukksa at illi kan deg tijṛa agi :
-* tilɣa n yiwen ur ezgan ara
-*: ''tansa, uṭṭun n tilifun, uṭṭun n taɣellist tamettit, …''",
+'revdelete-suppress-text' => "Ilaq tukksa att illi \"kan\" deg tijṛa agi :
+* Tilɣa ahat tinergamin
+* Tilɣa ur sɛant ara amkan d-agi
+*: ''tansa, uḍḍun n tilifun, uḍḍun n taɣellist tamettit, …''",
 'revdelete-legend' => 'Sbebd akref n tamuɣli',
-'revdelete-hide-text' => 'Ffer aḍris n tsiwelt',
+'revdelete-hide-text' => 'Aḍris n tacaggart',
 'revdelete-hide-image' => 'Ffer ayen yellan deg ufaylu',
 'revdelete-hide-name' => 'Ffer tigawt d nnican',
-'revdelete-hide-comment' => 'Ffer abeddel n uwennit',
-'revdelete-hide-user' => 'Ffer Isem n wemseqdac/IP n umeskar',
+'revdelete-hide-comment' => 'Beddel agzul',
+'revdelete-hide-user' => 'Isem n umseqdac/Tansa IP n umaẓrag',
 'revdelete-hide-restricted' => 'Mḥu isefka agi i inedbalen d yimdanen wiyaḍ',
 'revdelete-radio-same' => '(ur beddel ara)',
-'revdelete-radio-set' => 'Ih',
-'revdelete-radio-unset' => 'Ala',
+'revdelete-radio-set' => 'Udrig',
+'revdelete-radio-unset' => 'Yeban',
 'revdelete-suppress' => 'Kkes talɣut seg inedbalen d yimdanen wiyaḍ',
 'revdelete-unsuppress' => 'Kkes icekkilen ɣef tisiwal i yuɣalen-d',
 'revdelete-log' => 'Ayɣer',
@@ -1022,6 +1054,7 @@ Senked d akken tamhelt agi ad eǧǧ amezruy n usebtar ad ikemmel.',
 'compareselectedversions' => 'Ẓer imgerraden ger tisiwal i textareḍ',
 'showhideselectedversions' => 'Ssken/Ffer ileqman i xtiṛen',
 'editundo' => 'ssefsu',
+'diff-empty' => '(Ulac amgerrad)',
 'diff-multi' => '({{PLURAL:$1|Yiwet tasiwelt tabusarit|$1 n tisiwal tibusarin}} af {{PLURAL:$2|amseqdac|$2 imseqdacen}} {{PLURAL:$1|ur ttumlal ara|ur ttumlalent ara}})',
 'diff-multi-manyusers' => '({{PLURAL:$1|Yiwen lqem agrawan|$1 ileqman igrawanen}} af {{PLURAL:$2|aseqdac|$2 iseqdacen}} {{PLURAL:$1|yeffer|ffren}})',
 'difference-missing-revision' => '{{PLURAL:$1|Yiwet tacaggart|$1 ticaggartin}} n tameẓla agi ($1) {{PLURAL:$2|ur tella ara (ulac)|ur llant ara (ulac)}}.
@@ -1079,11 +1112,13 @@ Tzemreḍ ad affeḍ tilɣa deg [{{fullurl:{{#Special:Log}}/delete|page={{FULLPA
 'powersearch-togglenone' => 'Ulac',
 'search-external' => 'Anadi yeffɣen',
 'searchdisabled' => 'Anadi deg {{SITENAME}} yettwakkes. Tzemreḍ ad tnadiḍ s Google. Meɛna ur tettuḍ ara, tasmult n google taqdimt.',
+'search-error' => 'Tella tuccḍa deg unadi n : $1',
 
 # Preferences page
 'preferences' => 'Isemyifiyen',
-'mypreferences' => 'Isemyifiyen inu',
+'mypreferences' => 'Isemyifiyen',
 'prefs-edits' => 'Amḍan n ibeddlilen :',
+'prefsnologintext2' => 'Ilaq ad $1 iwakken ad sbaduḍ ismenyifen inek/inem.',
 'prefs-skin' => 'Aglim',
 'skin-preview' => 'Pre-timeẓriwt',
 'datedefault' => 'Ur sɛiɣ ara asemyifi',
@@ -1106,18 +1141,20 @@ Tzemreḍ ad affeḍ tilɣa deg [{{fullurl:{{#Special:Log}}/delete|page={{FULLPA
 'prefs-email' => 'Tixtiṛiyin n tira',
 'prefs-rendering' => 'Tummant',
 'saveprefs' => 'Smekti',
-'restoreprefs' => 'Err akkw azalen s lexṣas',
+'restoreprefs' => 'Err akkw iɣewwaren s lexṣas (deg akkw tigezmiwin)',
 'prefs-editing' => 'Abedddil',
 'rows' => 'Ijerriḍen:',
 'columns' => 'Tigejda:',
 'searchresultshead' => 'Anadi',
-'resultsperpage' => 'Geddac n tiririyin i mkul asebter:',
 'stub-threshold' => 'Talast timinegt i <a href="#" class="stub">izdayen ɣer ibegzan</a> (itamḍanen) :',
 'stub-threshold-disabled' => 'Yensa',
 'recentchangesdays' => 'Amḍan n ussan an beqqeḍ deg ibeddilen ineggura.',
 'recentchangesdays-max' => 'Afellay $1 {{PLURAL:$1|ass|ussan}}',
 'recentchangescount' => 'Amḍan n ibeddilen i ubeqqeḍ s lexṣas :',
 'prefs-help-recentchangescount' => 'Wagi yesɛa deg-es ibeddilen ineggura, isebtar n umezruy d iɣmisen.',
+'prefs-help-watchlist-token2' => 'Hattan tasarut tufurt n usuddem Web n umuɣ inek/inem n uḍfar.
+Akkw amḍan yesɛan tasarut agi, ad yezmer ad i ɣer umuɣ inek/inem n uḍfar, ur d-sselɣu ara tasarut agi ihi.
+[[Special:ResetTokens|Nqer d-agi ma tebɣiḍ ad wennezeḍ tasarut agi]].',
 'savedprefs' => 'Isemyifiyen inek yettusmektan.',
 'timezonelegend' => 'Iẓḍi n ukud :',
 'localtime' => 'Asrag adigan :',
@@ -1148,9 +1185,9 @@ Tzemreḍ ad affeḍ tilɣa deg [{{fullurl:{{#Special:Log}}/delete|page={{FULLPA
 Wagi ur yezmer ara ad yetwekkes.',
 'prefs-emailconfirm-label' => 'Aragag n tirawt :',
 'youremail' => 'E-mail *:',
-'username' => 'Isem n wemseqdac:',
-'uid' => 'Amseqdac ID:',
-'prefs-memberingroups' => 'Aεeggal n {{PLURAL:$1|ugraw|igrawen}} :',
+'username' => '{{GENDER:$1|Isem n umseqdac|Isem n tamseqdact}} :',
+'uid' => 'Uḍḍun n {{GENDER:$1|umseqdac|tamseqdact}}:',
+'prefs-memberingroups' => '{{GENDER:$2|Aεeggal|Taɛggalt}} n {{PLURAL:$1|ugraw|igrawen}} :',
 'prefs-registration' => 'Azmez n tiggezt :',
 'yourrealname' => 'Isem n ṣṣeḥ *:',
 'yourlanguage' => 'Tutlayt:',
@@ -1161,11 +1198,13 @@ Wagi ur yezmer ara ad yetwekkes.',
 'badsig' => 'Azmul mačči d ṣaḥiḥ; Ssenqed tags n HTML.',
 'badsiglength' => 'Azmul inek/inem, teɣwzi-s tameqqṛant aṭas.
 Ur ilaq ara ad i sɛu ugar n $1 {{PLURAL:$1|asekkil|isekkilen}}.',
-'yourgender' => 'Tawsit :',
-'gender-unknown' => 'Ulac tumlin',
-'gender-male' => 'Amalay',
-'gender-female' => 'Untay',
-'prefs-help-gender' => 'Axetṛan : yetseqdec iwakken ad yefk tawsit i inzan n ugrudem. Talɣut agi at illi tazayert.',
+'yourgender' => 'Amek i tebɣiḍ ad n-ini fellak(m) ?',
+'gender-unknown' => 'Ur bɣiɣ ara ad iniɣ',
+'gender-male' => 'Yebeddel isebtar n wiki',
+'gender-female' => 'Tebeddel isebtar n wiki',
+'prefs-help-gender' => 'Sbadu asmenyif agi d-afrayan.
+Aseɣẓan agi yetseqdac azal-is iwakken ad yemeslay s kečč/kem dɣa ad yefk isem-ik/im i wiyaḍ nniḍen s useqdac n tawsit tajeṛṛumant.
+Talɣut agi attili d-tazayezt.',
 'email' => 'E-mail',
 'prefs-help-realname' => '* Isem n ṣṣeḥ (am tebɣiḍ): ma textareḍ a t-tefkeḍ, ad yettuseqdac iwakken ad snen medden anwa yura tikkin inek.',
 'prefs-help-email' => '* E-mail (am tebɣiḍ): Teǧǧi imseqdacen wiyaḍ a k-aznen email mebla ma ẓren tansa email inek.',
@@ -1176,7 +1215,9 @@ Ur ilaq ara ad i sɛu ugar n $1 {{PLURAL:$1|asekkil|isekkilen}}.',
 'prefs-signature' => 'Azmul',
 'prefs-dateformat' => 'Amasal n izemzan',
 'prefs-timeoffset' => 'Asekḥer n usrag',
-'prefs-advancedediting' => 'Tixtiṛiyin timahlanin',
+'prefs-advancedediting' => 'Tixtiṛiyin timuta',
+'prefs-editor' => 'Amaẓrag',
+'prefs-preview' => 'Azarskan',
 'prefs-advancedrc' => 'Tixtiṛiyin timahlanin',
 'prefs-advancedrendering' => 'Tixtiṛiyin timahlanin',
 'prefs-advancedsearchoptions' => 'Tixtiṛiyin timahlanin',
@@ -1184,7 +1225,10 @@ Ur ilaq ara ad i sɛu ugar n $1 {{PLURAL:$1|asekkil|isekkilen}}.',
 'prefs-displayrc' => 'Tixtiṛiyin n ubeqqeḍ',
 'prefs-displaysearchoptions' => 'Tixtiṛiyin n ubeqqeḍ',
 'prefs-displaywatchlist' => 'Tixtiṛiyin n ubeqqeḍ',
+'prefs-tokenwatchlist' => 'Tiddest',
 'prefs-diffs' => 'Timeẓliwin',
+'prefs-help-prefershttps' => 'Asmenyif agi, ad yelḥu ar tuqqna ay d-yetteddun.',
+'prefs-tabs-navigation-hint' => 'Taxbalut : Tzemreḍ ad seqdeceḍ tineccabin n uzelmaḍ d uyeffus iwakken ad ssileleḍ gar iccaren.',
 
 # User preference: email validation using jQuery
 'email-address-validity-valid' => 'E-mail agi teɣbel',
@@ -1208,9 +1252,11 @@ Ur ilaq ara ad i sɛu ugar n $1 {{PLURAL:$1|asekkil|isekkilen}}.',
 'userrights-no-interwiki' => 'Ur tesɛiḍ ara turagt iwakken ad beddeleḍ izerfan n iseqdacen ɣef wiki nniḍen.',
 'userrights-nodatabase' => 'Taffa n isefka « $1 » ulac itt naɣ mačči d tadigant.',
 'userrights-nologin' => 'Ilaq ad [[Special:UserLogin|qqeneḍ]] s yiwen umiḍan anedbal iwakken ad beddeleḍ izerfan n useqdac.',
-'userrights-notallowed' => 'Amiḍan inek/inem ur yesɛa ara turagt iwakken ad beddeleḍ izerfan n useqdac.',
+'userrights-notallowed' => 'Ur tesɛiḍ ara turagt ad rnuḍ neɣ ad ekkeseḍ izerfan n umseqdac.',
 'userrights-changeable-col' => 'Igrawen i tzemreḍ ad beddeleḍ',
 'userrights-unchangeable-col' => 'Igrawen ur tzemreḍ ara ad beddeleḍ',
+'userrights-conflict' => 'Ccwal n ubeddel n izerfan n umseqdac ! Ilaq ad ɛzemeḍ tikelt nniḍen dɣa ad sergegeḍ ibeddilen.',
+'userrights-removed-self' => 'Tekkeseḍ s lerbaḥ izerfan inek/inem. Tura ur tzemreḍ ara ad kecmeḍ ar usebtar agi.',
 
 # Groups
 'group' => 'Adrum:',
@@ -1254,7 +1300,7 @@ Ur ilaq ara ad i sɛu ugar n $1 {{PLURAL:$1|asekkil|isekkilen}}.',
 'right-reupload-shared' => 'Ɛefes deg udigan afaylu yellan ɣef azadur azduklan',
 'right-upload_by_url' => 'Kter afaylu seg tansa URL',
 'right-purge' => 'Senger tazarkatut n isebtar war asuter n uragag',
-'right-autoconfirmed' => 'Beddel isebtar azinsegdelen',
+'right-autoconfirmed' => 'Ur i tilli ara yeswaɣ sɣur tilisa n uktum yeqqenen ar tansiwin IP',
 'right-bot' => 'Ad yilli yesniret am ukala yeswurmen',
 'right-nominornewtalk' => 'Ur ndeḥ ara tazmilt n inzan imaynuten ma neseqdac abeddel amectuḥ ɣef usebtar n umeslay n yiwen useqdac',
 'right-apihighlimits' => 'Seqdec tilisa tid ɛlayen deg tuttriwin API',
@@ -1274,13 +1320,21 @@ Ur ilaq ara ad i sɛu ugar n $1 {{PLURAL:$1|asekkil|isekkilen}}.',
 'right-hideuser' => 'Kyef aseqdac s tuffra n isem-is ar udem n uzayez',
 'right-ipblock-exempt' => 'Zizdew tansiwin IP yekyefen, ikyafen iwurmanen d ikyafen n tagrummiwin IP',
 'right-proxyunbannable' => 'Zizdew ikyafen iwurmanen n iqeddacen proxy',
-'right-unblockself' => 'Ad ekkesen akyaf imanen nsen',
-'right-protect' => 'Beddel aswir n umesten n isebtar dɣa beddel isebtar i gdelen',
-'right-editprotected' => 'Beddel isebtar i gdelen (war asegdel s uceṛcuṛ)',
+'right-unblockself' => 'Ad yekkes akyaf iman-is',
+'right-protect' => 'Beddel iswiren n umesten dɣa beddel isebtar i gdelen s uceṛcuṛ',
+'right-editprotected' => 'Beddel isebtar i gdelen s « {{int:protect-level-sysop}} »',
+'right-editsemiprotected' => 'Beddel isebtar i gdelen s « {{int:protect-level-autoconfirmed}} »',
 'right-editinterface' => 'Beddel agrudem n useqdac',
 'right-editusercssjs' => 'Beddel ifuyla CSS d JavaScript n iseqdacen nniḍen',
 'right-editusercss' => 'Beddel ifuyla CSS n iseqdacen nniḍen',
 'right-edituserjs' => 'Beddel ifuyla JavaScript n iseqdacen nniḍen',
+'right-editmyusercss' => 'Beddel ifuyla CSS n umseqdac inek/inem',
+'right-editmyuserjs' => 'Beddel ifuyla Javascript n umseqdac inek/inem',
+'right-viewmywatchlist' => 'Zeṛ umuɣ inek/inem n uḍfar',
+'right-editmywatchlist' => 'Beddel umuɣ inek/inem n uḍfar. Ger tamawt af kra n tigawin ad rnunt isebtar nniḍen war azref agi.',
+'right-viewmyprivateinfo' => 'Zeṛ isefka udmawanen inek/inem (amedya : tansa email, isem n tiddet)',
+'right-editmyprivateinfo' => 'Beddel isefka udmawanen inek/inem (amedya : tansa email, isem n tiddet)',
+'right-editmyoptions' => 'Beddel ismenyifen inek/inem',
 'right-rollback' => 'Ekkes s urured ibeddilen n umedraw aneggaru deg yiwen asebter',
 'right-markbotedits' => 'Creḍ ibeddilen yetwekkesen am aken d aṛubut i tni beddelen.',
 'right-noratelimit' => 'Ur i tilli ara yeswaɣ sɣur tilisa n utug',
@@ -1332,8 +1386,8 @@ Ur ilaq ara ad i sɛu ugar n $1 {{PLURAL:$1|asekkil|isekkilen}}.',
 'action-block' => 'Kyef deg tira aseqdac agi',
 'action-protect' => 'beddel iswiren n umesten i usebter agi',
 'action-rollback' => 'ekkes s urured ibeddilen n umedraw aneggaru yebeddelen yiwen usebter',
-'action-import' => 'Kter asebter agi seg wiki nniḍen',
-'action-importupload' => 'Kter asebter agi seg ufaylu n wezdam (upload)',
+'action-import' => 'kter isebtar agi seg wiki nniḍen',
+'action-importupload' => 'kter isebtar agi seg ufaylu n wezdam',
 'action-patrol' => 'Creḍ abeddel n wiyaḍ nniḍen am aken tesɛa tacaggart',
 'action-autopatrol' => 'ad sɛuḍ tacaggart i ubeddil ik',
 'action-unwatchedpages' => 'Sken-d tabdart n isebtaren ur yettwalan ara.',
@@ -1342,23 +1396,33 @@ Ur ilaq ara ad i sɛu ugar n $1 {{PLURAL:$1|asekkil|isekkilen}}.',
 'action-userrights-interwiki' => 'Ẓreg izerfan n umseqdac deg wikis wiyaḍ',
 'action-siteadmin' => 'sekkweṛ naɣ kkes aseḍru i taffa n isefka',
 'action-sendemail' => 'Ceggaɛ tira',
+'action-editmywatchlist' => 'beddel umuɣ inek uḍfar',
+'action-viewmywatchlist' => 'zeṛ umuɣ inek/inem n uḍfar',
+'action-viewmyprivateinfo' => 'zeṛ tilɣa inek tusligin',
+'action-editmyprivateinfo' => 'beddel tilɣa inek tusligin',
 
 # Recent changes
 'nchanges' => '$1 {{PLURAL:$1|Abeddel|Ibeddlen}}',
+'enhancedrc-since-last-visit' => '$1 {{PLURAL:$1|seg tarzaft taneggarut}}',
+'enhancedrc-history' => 'amezruy',
 'recentchanges' => 'Ibeddilen imaynuten',
 'recentchanges-legend' => 'Tifranin n ibeddilen imaynuten',
 'recentchanges-summary' => 'Ḍfer ibeddilen imaynuten n {{SITENAME}}.',
+'recentchanges-noresult' => 'Ulac abeddel yecban ayen i ttnadiḍ ɣef tallit id efkeḍ.',
 'recentchanges-feed-description' => 'Ḍfer ibeddilen imaynuten n wiki-yagi deg usuddem-agi.',
 'recentchanges-label-newpage' => 'Abeddel agi ad yesnulfu asebter amaynut',
 'recentchanges-label-minor' => 'Wagi d-abeddel amectuḥ',
 'recentchanges-label-bot' => 'D-arubut id yeseqdacen abeddel agi',
 'recentchanges-label-unpatrolled' => 'Abeddel agi mazal yesɛa aselken.',
+'recentchanges-label-plusminus' => 'Tiddi n usebtar tetwebeddel s umḍan agi n itamḍanen.',
+'recentchanges-legend-heading' => "'''Aglam :'''",
+'recentchanges-legend-newpage' => '(zeṛ daɣen [[Special:NewPages|umuɣ n isebtar imaynuten]]).',
 'recentchanges-legend-plusminus' => "(''± 123'')",
 'rcnotefrom' => "Deg ukessar llan ibeddlen seg wasmi '''$2''' (ar '''$1''').",
 'rclistfrom' => 'Ssken ibeddlen imaynuten seg $1',
 'rcshowhideminor' => '$1 ibeddlen ifessasen',
 'rcshowhidebots' => '$1 irubuten',
-'rcshowhideliu' => '$1 n yimseqdacen i ikecmen',
+'rcshowhideliu' => '$1 imseqdacen imseklesen',
 'rcshowhideanons' => '$1 n yimseqdacen udrigen',
 'rcshowhidepatr' => '$1 n yibeddlen yettwassenqden',
 'rcshowhidemine' => '$1 ibeddlen inu',
@@ -1375,7 +1439,7 @@ Ur ilaq ara ad i sɛu ugar n $1 {{PLURAL:$1|asekkil|isekkilen}}.',
 'rc_categories_any' => 'Ulayɣer',
 'rc-change-size-new' => '$1 {{PLURAL:$1|atamḍan|itamḍanen}} sakin abeddel',
 'newsectionsummary' => '/* $1 */ tigezmi tamaynut',
-'rc-enhanced-expand' => 'Ẓeṛ tilɣa (yeḥwaǧ JavaScript)',
+'rc-enhanced-expand' => 'Ẓeṛ ttfaṣil',
 'rc-enhanced-hide' => 'Ffer tilɣa',
 'rc-old-title' => 'yesnulfad s uzwel « $1 »',
 
@@ -1394,8 +1458,7 @@ Ur ilaq ara ad i sɛu ugar n $1 {{PLURAL:$1|asekkil|isekkilen}}.',
 'reuploaddesc' => 'Semmewet dɣa uɣaled ar tiferkit n tuznin.',
 'upload-tryagain' => 'Ceggaɛ aglam n ufaylu ibeddelen',
 'uploadnologin' => 'Ur tekcimeḍ ara',
-'uploadnologintext' => 'Yessefk [[Special:UserLogin|ad tkecmeḍ]]
-iwakken ad tazneḍ afaylu.',
+'uploadnologintext' => 'Ilaq ad $1 iwakken ad ketreḍ ifuyla.',
 'upload_directory_missing' => 'Akaram n taktert n ufaylu ($1) ulac-it dɣa ur d-yesnulfa ara sɣur aqeddac web.',
 'upload_directory_read_only' => 'Weserver/serveur Web ur yezmir ara ad yaru deg ($1).',
 'uploaderror' => 'Agul deg usekcam',
@@ -1474,6 +1537,8 @@ Ma tebɣiḍ ad azeneḍ afaylu inek/inem, ilaq ad uɣaleḍ ar deffir dɣa ad a
 [[File:$1|thumb|center|$1]]',
 'file-exists-duplicate' => 'Afaylu agi d-asleg n {{PLURAL:$1|ufaylu agi|ifuyla agi}} :',
 'file-deleted-duplicate' => 'Afaylu am wagi ([[:$1]]) yetwekkes yakan. Ilaq ad selkeneḍ aɣmis n tukksiwin n ufaylu agi uqbel atid ktereḍ tikkelt nniḍen.',
+'file-deleted-duplicate-notitle' => 'Afaylu yesɛan isem am wagi yetwumḥa, ula d-azwel ines.
+Ilaq ad ssutereḍ i yiwen aterras ma yezmer ad yessenqed aɣmis n ufaylu agi yetwumḥan iwakken ad yessekyed addad uqbel at-id ktereḍ tikelt nniḍen.',
 'uploadwarning' => 'Aɣtal deg wazan n ufayluwen',
 'uploadwarning-text' => 'Beddel aglam n ufaylu dɣa ɛreḍ tikkelt nniḍen',
 'savefile' => 'Smekti afaylu',
@@ -1529,6 +1594,7 @@ Ma yella daɣen anezri, ilaq ad meslaye ḍ s  [[Special:ListUsers/sysop|unedbal
 'backend-fail-notsame' => 'Afaylu imeẓli yella yakan i $1.',
 'backend-fail-invalidpath' => '$1 mačči d abrid n uḥraz iɣbelen.',
 'backend-fail-delete' => 'Ulamek an mḥu afaylu "$1".',
+'backend-fail-describe' => 'Ulamek an beddel adferisefka n ufaylu "$1".',
 'backend-fail-alreadyexists' => 'Afaylu $1 yella yakan.',
 'backend-fail-store' => 'Ulamek an ḥrez afaylu $1 deg $2.',
 'backend-fail-copy' => 'Ulamek an nɣel afaylu $1 deg $2.',
@@ -1623,8 +1689,7 @@ I taɣellist tameqqṛant, img_auth.php yensa.',
 'upload_source_file' => ' (afaylu deg uselkim inek)',
 
 # Special:ListFiles
-'listfiles-summary' => 'Asebter agi uslig i εemmed ad yefk umu n akkw ifuyla i kteren.
-Ma aseqdac as yernu tastayt, ala ifuyla s lqem taneggarut id yekter aseqdac nni ad beqqeḍen.',
+'listfiles-summary' => 'Asebter agi uslig i εemmed ad yefk umu n akkw ifuyla i kteren.',
 'listfiles_search_for' => 'Nadi ɣef yisem n tugna:',
 'imgfile' => 'afaylu',
 'listfiles' => 'Umuɣ n tugniwin',
@@ -1635,6 +1700,8 @@ Ma aseqdac as yernu tastayt, ala ifuyla s lqem taneggarut id yekter aseqdac nni
 'listfiles_size' => 'Tiddi (bytes/octets)',
 'listfiles_description' => 'Aglam',
 'listfiles_count' => 'Ileqman',
+'listfiles-show-all' => 'Sseddu ileqman iqdimen n tugniwin',
+'listfiles-latestversion' => 'Lqem amiran',
 'listfiles-latestversion-yes' => 'Ih',
 'listfiles-latestversion-no' => 'Ala',
 
@@ -1733,6 +1800,10 @@ Ur tettuḍ ara ad selkeneḍ ma ur llan ara izdayen nniḍen ɣer tilɣatin uqb
 'randompage-nopages' => 'Ulac isebtar deg {{PLURAL:$2|tallunt n isemawen|tallunin n isemawen}} : $1.',
 
 # Random page in category
+'randomincategory' => 'Asebtar s ugacur deg taggayt',
+'randomincategory-invalidcategory' => '« $1 » mačči d-isem n taggayt yeɣblen.',
+'randomincategory-nopages' => 'Ulac asebtar deg [[:Category:$1]].',
+'randomincategory-selectcategory' => 'Ddem asebtar s ugacur deg taggayt : $1 $2.',
 'randomincategory-selectcategory-submit' => 'Ruḥ',
 
 # Random redirect
@@ -1760,7 +1831,13 @@ Ur tettuḍ ara ad selkeneḍ ma ur llan ara izdayen nniḍen ɣer tilɣatin uqb
 'statistics-users-active-desc' => 'Iseqdacen yesɛan xersum yiwet tigawt seg {{PLURAL:$1|ass agi aneggaru|$1 ussan agi ineggura}}',
 'statistics-mostpopular' => 'isebtar mmeẓren aṭṭas',
 
+'pageswithprop' => 'Isebtar s ayla n usebtar',
+'pageswithprop-legend' => 'Isebtar s ayla n usebtar',
+'pageswithprop-text' => 'Asebtar agi, yefked umuɣ n isebtar yeseqdacen ayla n usebtar amaẓlay',
+'pageswithprop-prop' => 'Isem n ayla :',
 'pageswithprop-submit' => 'Ruḥ',
+'pageswithprop-prophidden-long' => 'azal n ayla n uḍris aɣezfan yeffren ($1)',
+'pageswithprop-prophidden-binary' => 'azal n ayla imisin yeffren ($1)',
 
 'doubleredirects' => 'Asemmimeḍ yeḍra snat tikwal',
 'doubleredirectstext' => 'Mkull ajerriḍ yesɛa azday ɣer asmimeḍ amezwaru akk d wis sin, ajerriḍ amezwaru n uḍris n usebter wis sin daɣen, iwumi yefkan asmimeḍ ṣaḥiḥ i yessefk ad sɛan isebtar azday ɣur-s.',
@@ -1825,12 +1902,14 @@ Ur tettuḍ ara ad selkeneḍ ma ur llan ara izdayen nniḍen ɣer tilɣatin uqb
 'protectedpages' => 'isebtar yettwaḥerzen',
 'protectedpages-indef' => 'Imestenen imeɣlalen kan',
 'protectedpages-cascade' => 'Imestenen s uceṛcuṛ kan',
+'protectedpages-noredirect' => 'Ffer isemmimḍen',
 'protectedpagesempty' => 'isebtar-agi ttwaḥerzen s imsektayen -agi.',
 'protectedtitles' => 'Izwal ugdilen',
 'protectedtitlesempty' => 'Ulac azwel yesɛan asegdel s iɣewwaren agi.',
 'listusers' => 'Umuɣ n yimseqdacen',
 'listusers-editsonly' => 'Sekned kan iseqdacen yesɛan asekcem naɣ ugar',
 'listusers-creationsort' => 'Fren s azmez n usnulfu',
+'listusers-desc' => 'Fren deg amizzwer amadar',
 'usereditcount' => '$1 {{PLURAL:$1|abeddel|ibeddilen}}',
 'usercreated' => '{{GENDER:$3|Yesnulfu-d}} ass n $1 ar $2',
 'newpages' => 'isebtar imaynuten',
@@ -1907,9 +1986,9 @@ Tzemreḍ ad sageneḍ abeqqeḍ s tixtiṛit n tawsit n uɣmis, isem n useqdac
 'linksearch-pat' => 'Anadi n tanfalit :',
 'linksearch-ns' => 'Talluntin n isemawen :',
 'linksearch-ok' => 'Nadi',
-'linksearch-text' => 'Tzemreḍ ad seqdeceḍ isekkilen imeẓliyen am « *.wikipedia.org ».
+'linksearch-text' => 'Isekkilen imeẓliyen am « *.wikipedia.org » zemren ad wetseqdecen.
 Ilaq-asen deg udday taɣult n uswir imineg, am amedya « *.org ».<br />
-Ineggafen imazdayen : <code>$1</code> (ur d-renu acemma deg unadi inek/inem)',
+{{PLURAL:$2|Aneggaf yettwaɛqelen|Ineggafen yettwaɛqelen}}: <code>$1</code> (http:// s lexṣas ma ulac aneggaf).',
 'linksearch-line' => '$1 yeqqen seg $2',
 'linksearch-error' => 'Tzemreḍ ad seqdeceḍ isekkilen usligen ala deg tazzwara n taɣult uselkim.',
 
@@ -1922,7 +2001,7 @@ Ineggafen imazdayen : <code>$1</code> (ur d-renu acemma deg unadi inek/inem)',
 # Special:ActiveUsers
 'activeusers' => 'Umuɣ n iseqdacen urmiden',
 'activeusers-intro' => 'Wagi d umuɣ n iseqdacen yexedmen armud deg {{PLURAL:$1|ass agi aneggaru|$1 ussan agi ineggura}}.',
-'activeusers-count' => '$1 {{PLURAL:$1|abeddel n ussan agi ineggura|ibeddilen n ussan agi ineggura}} deg {{PLURAL:$3|ass aneggaru|$3 ussan ineggura}}',
+'activeusers-count' => '$1 {{PLURAL:$1|tigawt|tigawin}} deg {{PLURAL:$3|ass aneggaru|$3 ussan ineggura}}',
 'activeusers-from' => 'Ssken iseqdacen seg :',
 'activeusers-hidebots' => 'Ffer iṛubuten',
 'activeusers-hidesysops' => 'Ffer inedbalen',
@@ -1956,7 +2035,7 @@ iwakken ad tazneḍ email i imseqdacen wiyaḍ.',
 'emailuser-title-target' => 'Ceggaɛ tirawt i {{GENDER:$1|aseqdac agi|taseqdact agi}}',
 'emailuser-title-notarget' => 'Ceggaɛ tirawt i useqdac',
 'emailpage' => 'Ceggaɛ tirawt i useqdac',
-'emailpagetext' => 'Tzemreḍ ad seqdeceḍ tiferkit ddaw agi iwakken ad ceggɛeḍ tirawt i useqdac agi.
+'emailpagetext' => 'Tzemreḍ ad seqdeceḍ tiferkit ddaw agi iwakken ad ceggɛeḍ tirawt i {{GENDER:$1|umseqdac|tamseqdact}} agi.
 Tansa e-mail id ekfeḍ deg [[Special:Preferences|iɣewwaren inek/inem]] ad tban deg urti "Amceggaɛ" n izen ; akka, anermas ad yezmer ak/akem yefk tiririt.',
 'usermailererror' => 'Yella ugul deg uzwel n email:',
 'defemailsubject' => '{{SITENAME}} tirawt n useqdac « $1 »',
@@ -1995,11 +2074,8 @@ Tansa e-mail id ekfeḍ deg [[Special:Preferences|iɣewwaren inek/inem]] ad tban
 'watchnologin' => 'Ur tekcimeḍ ara',
 'watchnologintext' => 'Yessefk ad [[Special:UserLogin|tkecmeḍ]] iwakken ad tbeddleḍ umuɣ n uɛessi inek.',
 'addwatch' => 'Rnu i umuɣ n uɛassi',
-'addedwatchtext' => "Asebter \"[[:\$1]]\" yettwarnu deg [[Special:Watchlist|wumuɣ n uɛessi]] inek.
-Ma llan ibeddlen deg usebter-nni neɣ deg usbtar umyennan ines, ad banen dagi,
-Deg [[Special:RecentChanges|wumuɣ n yibeddlen imaynuten]] ad banen s '''yisekkilen ibberbuzen''' (akken ad teẓriḍ).
-
-Ma tebɣiḍ ad tekkseḍ asebter seg wumuɣ n uɛessi inek, wekki ɣef \"Fakk aɛessi\".",
+'addedwatchtext' => 'Asebter "[[:$1]]" yettwarnu deg [[Special:Watchlist|wumuɣ n uḍfar]] inek/inem.
+Ibeddlen id-yetteddun deg usebter-agi neɣ deg usbtar umyennan ines, ad banen dagi.',
 'removewatch' => 'Ekkes seg umuɣ n uɛassi',
 'removedwatchtext' => '!!Asebter "[[:$1]]" yettwakkes seg [[Special:Watchlist|umuɣ n uɛessi]] inek.',
 'watch' => 'Ɛass',
@@ -2009,8 +2085,8 @@ Ma tebɣiḍ ad tekkseḍ asebter seg wumuɣ n uɛessi inek, wekki ɣef \"Fakk a
 'notanarticle' => 'Mačči d amagrad',
 'notvisiblerev' => 'Lqem tetwemḥa',
 'watchlist-details' => 'ttɛassaɣ {{PLURAL:$1|$1 usebter|$1 n isebtaren}} mebla isebtaren "amyannan".',
-'wlheader-enotif' => 'Yeǧǧa Email n talɣut.',
-'wlheader-showupdated' => "Isebtar ttubeddlen segwasmi tkecmeḍ tikelt taneggarut ttbanen-d s '''uḍris aberbuz'''",
+'wlheader-enotif' => 'Talɣut s email yessermed.',
+'wlheader-showupdated' => "Isebtar ttubeddlen segwasmi tkecmeḍ tikelt taneggarut ttbanen-d s uḍris '''aberbuz'''.",
 'watchmethod-recent' => 'yessenqed ibeddlen imaynuten n isebtar i ttɛasseɣ',
 'watchmethod-list' => 'yessenqed isebtar i ttɛassaɣ i ibeddlen imaynuten',
 'watchlistcontains' => 'Umuɣ n uɛessi inek ɣur-s $1 n {{PLURAL:$1|usebter|isebtar}}.',
@@ -2027,34 +2103,41 @@ Ma tebɣiḍ ad tekkseḍ asebter seg wumuɣ n uɛessi inek, wekki ɣef \"Fakk a
 'enotif_mailer' => 'Email n talɣut n {{SITENAME}}',
 'enotif_reset' => 'Rcem akk isebtar mmeẓren',
 'enotif_impersonal_salutation' => 'Amseqdac n {{SITENAME}}',
+'enotif_subject_deleted' => 'Asebtar $1 ɣef {{SITENAME}} yetwakkes sɣur {{GENDER:$2|$2}}',
+'enotif_subject_created' => 'Asebtar $1 ɣef {{SITENAME}} yetwaxleq sɣur {{GENDER:$2|$2}}',
+'enotif_subject_moved' => 'Asebtar $1 ɣef {{SITENAME}} yetwabeddel isem sɣur {{GENDER:$2|$2}}',
+'enotif_subject_restored' => 'Asebtar $1 ɣef {{SITENAME}} yetwerr sɣur {{GENDER:$2|$2}}',
+'enotif_subject_changed' => 'Asebtar $1 ɣef {{SITENAME}} yetwabeddel sɣur {{GENDER:$2|$2}}',
+'enotif_body_intro_deleted' => 'Asebtar $1 ɣef {{SITENAME}} yetwasfeḍ ass n $PAGEEDITDATE sɣur {{GENDER:$2|$2}}, zeṛ $3 i lqem amiran',
+'enotif_body_intro_created' => 'Asebtar $1 ɣef {{SITENAME}} yetwaxleq ass n $PAGEEDITDATE sɣur {{GENDER:$2|$2}}, zeṛ $3 i lqem amiran.',
+'enotif_body_intro_moved' => 'Asebtar $1 ɣef {{SITENAME}} yetwabeddel isem ass n $PAGEEDITDATE sɣur {{GENDER:$2|$2}}, zeṛ $3 i lqem amiran.',
+'enotif_body_intro_restored' => 'Asebtar $1 ɣef {{SITENAME}} yetwerr ass n $PAGEEDITDATE sɣur {{GENDER:$2|$2}}, zeṛ $3 i lqem amiran.',
+'enotif_body_intro_changed' => 'Asebtar $1 ɣef {{SITENAME}} yetwabeddel ass n $PAGEEDITDATE sɣur {{GENDER:$2|$2}}, zeṛ $3 i lqem amiran.',
 'enotif_lastvisited' => 'Ẓer $1 i akk ibeddlen segwasmi tkecmeḍ tikelt taneggarut.',
 'enotif_lastdiff' => 'Ẓer $1 akken ad tmuqleḍ abeddel.',
 'enotif_anon_editor' => 'aseqdac ur i siggezen ara $1',
 'enotif_body' => 'Ay $WATCHINGUSERNAME,
 
-Asebter « $PAGETITLE » n {{SITENAME}} $CHANGEDORCREATED ass n $PAGEEDITDATE sɣur « $PAGEEDITOR », ẓeṛ $PAGETITLE_URL iwakken ad ẓṛeḍ lqem n tura.
+$PAGEINTRO $NEWPAGE
 
-$NEWPAGE
+Agzul n umttekki  : $PAGESUMMARY $PAGEMINOREDIT
 
-Abeddel n wegzul: $PAGESUMMARY $PAGEMINOREDIT
+Meslay s umttekki :
+e-mail : $PAGEEDITOR_EMAIL
+wiki : $PAGEEDITOR_WIKI
 
-Meslay s umbeddel:
-e-mail: $PAGEEDITOR_EMAIL
-wiki: $PAGEEDITOR_WIKI
+Ur yelli ara email n talɣut asmi ad illin ibeddlen deg usebter ala lukan tekcmeḍ deg usebtar-agi sakin teqqneḍ. Tzemreḍ ad wennezeḍ tikbabin n talɣut i akkw isebtar yellan deg umuɣ inek/inem n uḍfar.
 
-Ur yelli ara email n talɣut asmi llan ibeddlen deg usebter ala lukan teẓreḍ asebter-nni.
-Tzemreḍ ad awennezeḍ akkw isenǧaqen n talɣut i akkw isebtar yellan deg umuɣ inek/inem n uɛassi.
-
-             Anagraw inek/inem n talɣut n {{SITENAME}}
+Anagraw inek/inem n talɣut n {{SITENAME}}
 
 --
 Iwakken ad beddeleḍ iɣewwaren n talɣut deg tirawt, ẓeṛ
 {{canonicalurl:{{#special:Preferences}}}}
 
-Iwakken ad beddeleḍ iɣewwaren n umuɣ inek/inem n uɛassi, ẓeṛ
+Iwakken ad beddeleḍ iɣewwaren n umuɣ inek/inem n uḍfar, ẓeṛ
 {{canonicalurl:{{#special:EditWatchlist}}}}
 
-Iwakken ad mḥuḍ asebter deg umuɣ inek/inem n uɛassi, ẓeṛ
+Iwakken ad mḥuḍ asebtar deg umuɣ inek/inem n uḍfar, ẓeṛ
 $UNWATCHURL
 
 Tuɣalin d tadhelt :
@@ -2093,6 +2176,10 @@ Tuɣalin d tadhelt :
 'delete-edit-reasonlist' => 'Beddel tiɣẓinin n umḥu n usebter',
 'delete-toobig' => 'Asebter agi yesɛa amezruy ameqqṛan aṭas n ibeddilen, yugar $1 {{PLURAL:$1|lqem|ileqman}}.
 Amḥu n isebtar am wagi yesɛa akref iwakken {{SITENAME}} ur yesɛu ara arway.',
+'delete-warning-toobig' => 'Asebtar agi yesɛa amezruy axatar n ibeddilen, ugaren $1 {{PLURAL:$1|lqem|ileqman}}.
+Tukksa-s tezmer ad terwi tiddit n taffa n isefka n {{SITENAME}} ;
+ilaq ad seqdeceḍ s-leɛqel.',
+'deleting-backlinks-warning' => "'''Ɣur-wet :''' Isebtar nniḍen sɛant azday ɣer asebtar i tebɣiḍ ad kkeseḍ.",
 
 # Rollback
 'rollback' => 'Semmet ibeddilen',
@@ -2102,8 +2189,15 @@ Amḥu n isebtar am wagi yesɛa akref iwakken {{SITENAME}} ur yesɛu ara arway.'
 'rollbacklinkcount-morethan' => 'semmet ugar n $1 {{PLURAL:$1|abeddel|ibeddilen}}',
 'rollbackfailed' => 'Asemmet yexseṛ',
 'cantrollback' => 'Ur yezmir ara ad yessuɣal; yella yiwen kan amseqdac iwumi ibeddel/yexleq asebter-agi.',
+'alreadyrolled' => 'Ulamek an semmet abeddel aneggaru n usebtar « [[:$1]] » yetwaxeddemen sɣur [[User:$2|$2]] ([[User talk:$2|Mmeslay]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) ;
+wayeḍ nniḍen yebeddel yakan neɣ yesemmet asebtar nni.
+
+Abeddel aneggaru n usebtar yetwaxeddemen sɣur [[User:$3|$3]] ([[User talk:$3|Discuter]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).',
 'editcomment' => "Agzul n ubeddel yella: \"''\$1''\".",
 'revertpage' => 'Yessuɣal ibeddlen n [[Special:Contributions/$2|$2]] ([[User talk:$2|Meslay]]); yettubeddel ɣer tasiwelt taneggarut n [[User:$1|$1]]',
+'revertpage-nouser' => 'Tiririt n ibeddilen sur amseqdac yeffren ar lqem aneggaru sɣur {{GENDER:$1|[[User:$1|$1]]}}',
+'rollback-success' => 'Asemmet n ibeddilen yetwaxeddemen sɣur $1 ;
+tuqqla ar lqem aneggaru sɣur $2.',
 
 # Edit tokens
 'sessionfailure-title' => 'Anezri n tɣimit',
@@ -2113,6 +2207,8 @@ G leɛnayek wekki ɣef taqeffalt "Back/Précédent" n browser/explorateur inek,
 
 # Protect
 'protectlogpage' => 'Aɣmis n wemḥay',
+'protectlogtext' => 'Atan umuɣ n ibeddilen n immestan n isebtar.
+Zeṛ [[Special:ProtectedPages|umuɣ n isebtar yettwaḥerzen]] i umuɣ n immestan timiranin.',
 'protectedarticle' => '"[[$1]]" yettwaḥrez',
 'modifiedarticleprotection' => 'yebeddel aswir n usegdel n « [[$1]] »',
 'unprotectedarticle' => 'yekkes asegdel n « [[$1]] »',
@@ -2122,24 +2218,42 @@ G leɛnayek wekki ɣef taqeffalt "Back/Précédent" n browser/explorateur inek,
 'prot_1movedto2' => '[[$1]] yettusmimeḍ ar [[$2]]',
 'protect-badnamespace-title' => 'Tallunt n isemawen ur nezmer ara an segdel',
 'protect-badnamespace-text' => 'Isebtar deg tallunt agi n isemawen ur zemren ara ad sɛun asegdel.',
+'protect-norestrictiontypes-text' => 'Asebtar agi ur yezmer ara ad yettwaḥerzen acku ulac tawsit n usewḥel yestufan.',
+'protect-norestrictiontypes-title' => 'Asebtar ur yettwaḥerzen ara',
 'protect-legend' => 'Sentem tiḥḥerzi',
 'protectcomment' => 'Taɣẓint :',
 'protectexpiry' => 'Azmez n tasewti :',
 'protect_expiry_invalid' => 'Azmez n tasewti ur yeɣbel ara.',
 'protect_expiry_old' => 'Azmez n tasewti i ɛedda.',
 'protect-unchain-permissions' => 'Kkes aseḍru i aṭas n tixtiṛiyin n usegdel',
+'protect-text' => "Tzemreḍ ad zṛeḍ dɣa ad beddeleḍ aswir n ummesten n usebtar '''$1'''.",
+'protect-locked-blocked' => "Ur tzemreḍ ara ad beddeleḍ iswiren n ummesten skud tewḥeleḍ.
+Zeṛ iɣewwaren imiranen n usebtar '''$1''' :",
+'protect-locked-dblock' => "Aswir n ummesten ur yezmer ara ad yetbeddel acku taffa n isefka tesekkweṛ.
+Zeṛ iɣewwaren imiranen n usebtar '''$1''' :",
+'protect-locked-access' => "Ur tesɛiḍ ara izerfan iḍulliyen iwakken ad beddeleḍ iswiren n ummesten n isebtar.
+Zeṛ iɣewwaren imiranen n usebtar '''$1''' :",
+'protect-cascadeon' => 'Asebtar agi yettwaḥerz acku yessedda-d deg {{PLURAL:$1|usebtar uḍfiṛ, yettwaḥerzen|isebtar uḍfiṛ, yettwaḥerzen}} s taxtiṛit « ammesten s uceṛcuṛ » yessermeden. Tzemreḍ ad beddeleḍ aswir n ummesten n usebtar agi war ad yebeddel ammesten s uceṛcuṛ.',
 'protect-default' => '(ameslugen)',
-'protect-fallback' => 'Yeḥweǧ atrug « $1 »',
+'protect-fallback' => 'Ssireg kan imseqdacen s uzref « $1 »',
+'protect-level-autoconfirmed' => 'Ssireg kan imseqdacen i sergegen iman-nsen',
 'protect-level-sysop' => 'Ssireg inedbalen kan',
 'protect-summary-cascade' => 'acercur',
 'protect-expiring' => 'yemmut deg $1 (UTC)',
 'protect-expiring-local' => 'ad i neffeṛ ass n $1',
 'protect-expiry-indefinite' => 'ifeḍ',
+'protect-cascade' => 'Mmesten isebtar i sseddan deg ttagi (ammesten s uceṛcuṛ)',
+'protect-cantedit' => 'Ur tzemreḍ ara ad beddeleḍ iswiren n ummesten n usebtar agi acku ur tesɛiḍ ara turagt att beddeleḍ.',
 'protect-othertime' => 'Azmez nniḍen n tasewti :',
 'protect-othertime-op' => 'azmez nniḍen n tasewti',
 'protect-existing-expiry' => 'Yella azmez n tasewti : $2 af $3',
 'protect-otherreason' => 'Taɣẓint nniḍen / taɣzint tamarnant :',
 'protect-otherreason-op' => 'Taɣẓint nniḍen',
+'protect-dropdown' => '* Tiɣẓinin n ummesten tunnimin
+** Axṣar s uzerray
+** Emails yerkan
+** Ccwal n ibeddilen yellan mgal-tiffursa
+** Asebtar s uɛeddi ameqran',
 'protect-edit-reasonlist' => 'Beddel tiɣẓinin n usegdel',
 'protect-expiry-options' => '1 asrag:1 hour,1 ass:1 day,1 imalas:1 week,2 imalasen:2 weeks,1 aggur:1 month,3 agguren:3 months,6 agguren:6 months,1 assegwas:1 year,adfi:infinite',
 'restriction-type' => 'Turagt',
@@ -2164,39 +2278,77 @@ G leɛnayek wekki ɣef taqeffalt "Back/Précédent" n browser/explorateur inek,
 'undeletepage' => 'Ẓeṛ dɣa erred isebtar yetwekkesen',
 'undeletepagetitle' => "'''Umuɣ agi yesɛa ileqman yetwekkesen n [[:$1|$1]]'''.",
 'viewdeletedpage' => 'Ẓer isebtar yettumḥan',
+'undeletepagetext' => '{{PLURAL:$1|Asebtar agi uḍfiṛ yetwekkes, tura atan|Isebtar agi uḍfiṛen tetwekkesen, tura aten-id}} deg taffa n isefka n
+weɣbaṛ, anda {{PLURAL:$1|yezmer ad yesɛu tiririt|zemren ad sɛun tiririt}}.
+Aɣbaṛ yezmer ad yetssizedig s tallit.',
 'undelete-fieldset-title' => 'Erred ileqman',
+'undeleteextrahelp' => "Iwakken ad erreḍ amezruy ummid n usebtar agi, ilaq ad eǧǧeḍ akkw tinkulin war amidag dɣa senned ɣef '''''Tiririt'''''.
+Iwakken ad xeddemeḍ tiririt i yiwen aḥric kan, rnud amidag deg tinkulin n ileqman i tebɣiḍ ad erreḍ, dɣa senned ɣef '''''Tiririt'''''.",
 'undeleterevisions' => '$1 {{PLURAL:$1|lqem i ɣbeṛen|ileqman i ɣbeṛen}}',
+'undeletehistory' => 'Ma tebɣiḍ ad erreḍ asebtar, akkw ileqman ad erren deg umezruy.
+Ma asebtar amaynut yexelqed s isem am winna seg tukksa, ileqman yetwerran ad illin beqqeḍen deg umezruy uzwir dɣa lqem amiran ur d yetbeddel ara s uwurman.',
+'undeleterevdel' => 'Tiririt ur tezmer ara att illi ma, Deg tagara, lqem aneggaru n usebtar neɣ n ufaylu ad yeqqim yetwakkes s uzgen.
+Deg tajṛut am ttagi, ilaq ad ekkseḍ amidag deg tankult neɣ ad ekkseḍ tagelmust ileqman ineggura yetumḥan (deg uqerru n umuɣ).',
+'undeletehistorynoadmin' => 'Asebtar agi yetwekkes.
+Taɣzint n tukksa att affeḍ deg ugzul ddaw-agi, s ttfaṣil n imseqdacen i tbeddelen uqbel ad yetwekkes.
+Agbur n ileqman yetwekksen ad wettwadaf kan i inedbalen.',
+'undelete-revision' => 'Lqem yetwekksen n $1 (lqem n $4 af $5) sɣur $3 :',
+'undeleterevision-missing' => 'Lqem arameɣtu neɣ ulac-it.
+Ahat tesɛiḍ azday arameɣtu, neɣ lqem yetwerr neɣ yetwekkes seg aɣbaṛ.',
+'undelete-nodiff' => 'Ur d-n-uffa ara lqem aneggaru.',
 'undeletebtn' => 'Err-it',
 'undeletelink' => 'ẓeṛ/uɣaled',
 'undeleteviewlink' => 'ẓeṛ',
 'undeleteinvert' => 'Snegdam ayen textareḍ',
 'undeletecomment' => 'Taɣẓint :',
+'undeletedrevisions' => '$1 {{PLURAL:$1|lqem yetwerren|ileqman yetwerren}}',
+'undeletedrevisions-files' => '$1 {{PLURAL:$1|lqem|ileqman}} d $2 {{PLURAL:$2|afaylu|ifuyla}} {{PLURAL:$2|yetwerr|twerren}}',
+'undeletedfiles' => '$1 {{PLURAL:$1|afaylu yetwerr|ifuyla twerren}}',
+'cannotundelete' => 'Abrir n tiririt :
+$1',
+'undeletedpage' => "'''Asebtar $1 yetwerr.'''
+
+Zeṛ [[Special:Log/delete|aɣmis n tukksiwin]] iwakken ad zṛeḍ umuɣ n tukksiwin d tiririyin timaynutin.",
 'undelete-header' => 'Ẓer [[Special:Log/delete|aɣmis n umḥay]] i isebtar ttumḥan tura.',
 'undelete-search-title' => 'Nadi ɣef isebtar yettumḥan',
 'undelete-search-box' => 'Nadi ɣef isebtar yettumḥan',
 'undelete-search-prefix' => 'Ssken isebtar i yebdan s:',
 'undelete-search-submit' => 'Nadi',
 'undelete-no-results' => 'Ur yufi ara ulaḥedd n wawalen i tnadiḍ ɣef isebtar deg iɣbaren.',
+'undelete-filename-mismatch' => 'Ulamek an err lqem n ufaylu n wass n $1 : isem n ufaylu ur yezga ara.',
+'undelete-bad-store-key' => 'Ulamek an err lqem n ufaylu n wass n $1 : afaylu ulac-it uqbel tukksa.',
+'undelete-cleanup-error' => 'Tuccḍa deg tukksa n ufaylu n weɣbaṛ ur yetseqdacen ara « $1 ».',
+'undelete-missing-filearchive' => 'Ulamek an err afaylu n weɣbaṛ s tamagit $1 acku ulac it deg taffa n isefka.
+Ahat yetwerr yakan.',
+'undelete-error' => 'Asebtar n tuccḍa n usemmet',
+'undelete-error-short' => 'Tuccḍa deg tiririt n ufaylu : $1',
+'undelete-error-long' => 'LLant tuccḍiwin deg tiririt n ufaylu:
+
+$1',
 'undelete-show-file-confirm' => 'Tebɣriḍ ad ẓṛeḍ lqem yemḥan n ufaylu « <nowiki>$1</nowiki> » n $2 af $3 ?',
 'undelete-show-file-submit' => 'Ih',
 
 # Namespace form on various pages
 'namespace' => 'Talluntin n isemawen :',
 'invert' => 'Snegdam ayen textareḍ',
+'tooltip-invert' => 'Sekcem amidag deg tankult agi iwakken ad ffereḍ ibeddilen n isebtar deg tallunt n isemawen yettwafren (dɣa tallunt n isemawen yeqqnen ma yella amidag deg tankult)',
+'namespace_association' => 'Tallunt n isemawen yeqqenen',
+'tooltip-namespace_association' => 'Sekcem amidag deg tankult agi iwakken ad rnuḍ daɣen tallunt n isemawen n umyannan yeqqnen ar tallunt n  isemawen yettwafren',
 'blanknamespace' => '(Amenzawi)',
 
 # Contributions
-'contributions' => 'Tikkin n wemseqdac',
+'contributions' => 'Ittekkiyen n {{GENDER:$1|umseqdac|tamseqdact}}',
 'contributions-title' => 'Umuɣ n tikkin n umseqdac $1',
-'mycontris' => 'Tikkin inu',
-'contribsub2' => 'n $1 ($2)',
+'mycontris' => 'Ittekkiyen',
+'contribsub2' => 'I {{GENDER:$3|$1}} ($2)',
 'nocontribs' => 'Ur yufi ara abddel i tebɣiḍ.',
-'uctop' => '(taneggarut)',
+'uctop' => '(amiran)',
 'month' => 'Seg uggur (d wid uqbel) :',
 'year' => 'Seg useggwas (d wid uqbel) :',
 
 'sp-contributions-newbies' => 'Ssken tikkin n yimseqdacen imaynuten kan',
 'sp-contributions-newbies-sub' => 'I yisem yimseqdacen imaynuten',
+'sp-contributions-newbies-title' => 'Ittekkiyen n imseqdacen gar imiḍanen imaynuten',
 'sp-contributions-blocklog' => 'Aɣmis n uɛeṭṭil',
 'sp-contributions-deleted' => 'isekcam yemḥan',
 'sp-contributions-uploads' => 'izdamen',
@@ -2228,21 +2380,55 @@ Asekcem aneggaru n useklas n ikyafen yella ddaw agi :',
 'whatlinkshere-hideredirs' => '$1 aceggeε ɣer',
 'whatlinkshere-hidetrans' => '$1 aseddu',
 'whatlinkshere-hidelinks' => '$1 izdayen',
-'whatlinkshere-hideimages' => '$1 tugniwin i qqenen',
+'whatlinkshere-hideimages' => '$1 ifuyla iqqenen',
 'whatlinkshere-filters' => 'Tistaytin',
 
 # Block/unblock
+'autoblockid' => 'Asewḥel awurman #$1',
 'block' => 'Ɛekkel aseqdac',
+'unblock' => 'Aksasewḥel n umseqdac',
 'blockip' => 'Ɛekkel aseqdac',
 'blockip-legend' => 'Ɛekkel aseqdac',
+'blockiptext' => 'Seqdec tiferkit ddaw-agi iwakken ad  sewḥeleḍ ineɛruḍen n ubeddel seg yiwet tansa IP tulmist neɣ n yiwen isem umseqdac.
+Asket am wagi, ur ilaq ad yetwexddem kan iwakken ad yeεeggen axeṣṣar dɣa ilaq ad yemtawi s [[{{MediaWiki:Policy-url}}|ilugan igensanen]].
+Efked ddaw-agi taɣẓint tusdidt (amedya : efked isebtar yetwaxeṣṣren).',
 'ipadressorusername' => 'Tansa IP neɣ isem n wemseqdac',
+'ipbexpiry' => 'Tanzagt uqbel aneffeṛ :',
 'ipbreason' => 'Ayɣer',
+'ipbreason-dropdown' => '* Tiɣẓinin n ukyaf id ttuɣalen aṭas tikwal
+** Taguri n tilɣa n ukellax
+** Tukksa war assefhem n ugbur n isebtar
+** Taguri s uɛiwed n izdayen uffiɣen ɣer idellilen (abluleɣ)
+** Taguri n ugbur war anamek d tursaḍ deg isebtar
+** Aneɛruḍ n umsiged neɣ ubbezbax
+** Tafuli n useqdac n aṭas imiḍanen
+** Isem n umseqdac ur nezmer ara an qbel, d-anergam neɣ d-abucemmat',
+'ipb-hardblock' => 'Qareɛ imseqdacen yeqqnen ad beddelen s tansa IP agi',
+'ipbcreateaccount' => 'Qareɛ asnulfu n umiḍan',
+'ipbemailban' => 'Qareɛ amseqdac ad yecggaɛ e-mails',
+'ipbenableautoblock' => 'Sewḥel s-uwurman tansa IP taneggarut yetseqdacen sɣur amseqdac d akk IP ines nniḍen ay d-yetteddun',
 'ipbsubmit' => 'Ɛekkel amseqdac-agi',
 'ipbother' => 'Tanzagt  nniḍen :',
 'ipboptions' => '2 isragen:2 hours,1 ass:1 day,3 ussan:3 days,1 imalas:1 week,2  imalasen:2 weeks,1 aggur:1 month,3 agguren:3 months,6 agguren:6 months,1 aseggwas:1 year,afdi:infinite',
 'ipbhidename' => 'Ffer isem n useqdac deg ibeddilen d umuγen',
 'ipbwatchuser' => 'Ḍfer isebtar n iseqdacen d idiwenniyen n useqdac agi',
+'ipb-disableusertalk' => 'Qareɛ amseqdac ad yebeddel asebtar-is n umyannan mi yella asewḥel',
+'ipb-change-block' => 'Sewḥel tikkelt nniḍen amseqdac agi s iɣewwaren agi',
+'ipb-confirm' => 'Sergeg asewḥel',
 'badipaddress' => 'Tansa IP mačči d ṣaḥiḥ',
+'blockipsuccesssub' => 'Asewḥel yetwexddem',
+'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] {{GENDER:$1|yetsewḥel|tetsewḥel|}}.<br />
+Zeṛ [[Special:BlockList|umuɣ n isewḥal]] iwakken ad zṛeḍ isewḥal.',
+'ipb-blockingself' => '{{GENDER:|Aqlak|Aqlakem}}-id ad sewḥeleḍ iman-{{GENDER:|ik|im}}',
+'ipb-confirmhideuser' => '{{GENDER:|Aqlak|Aqlakem}}-id ad sewḥeleḍ amseqdac s « ffer amseqdac » yessermed. Waya ad yekkes isem n umseqdac deg akkw umuɣen d isekcam n uɣmis. Tebɣiḍ ad xeddemeḍ aya ?',
+'ipb-confirmaction' => 'Ma teḥsiḍ tebɣiḍ at xeddemeḍ, ilaq ad rnuḍ amidag deg tankult « {{int:ipb-confirm}} » ddaw-agi.',
+'ipb-edit-dropdown' => 'Beddel tiɣẓinin n usewḥel s lexṣas',
+'ipb-unblock-addr' => 'Aksasewḥel $1',
+'ipb-unblock' => 'Aksasewḥel amiḍan n umseqdac neɣ tansa IP',
+'ipb-blocklist' => 'Zeṛ isewḥelen yellan',
+'ipb-blocklist-contribs' => 'Ittekkiyen i $1',
+'unblockip' => 'Ekkes asewḥel n umseqdac',
+'unblockiptext' => 'Seqdec tiferkit ddaw-agi iwakken ad erreḍ addaf i ibeddilen seg yiwet tansa IP neɣ yiwen isem n umseqdac.',
 'ipusubmit' => 'Ekkes akyaf agi',
 'unblocked' => 'Yetwekkes akyaf n [[User:$1|$1]]',
 'unblocked-range' => 'Yetwekkes akyaf n $1',
@@ -2277,17 +2463,57 @@ Asekcem aneggaru n useklas n ikyafen yella ddaw agi :',
 'change-blocklink' => 'beddel asewḥel',
 'contribslink' => 'tikkin',
 'emaillink' => 'Ceggaɛ e-mail',
+'autoblocker' => 'Tetsewḥeleḍ s uwurman acku tansa IP inek/inem yeseqdac-itt « [[User:$1|$1]] ». Taɣzint id efkan i usewḥel agi d : « $2 ».',
 'blocklogpage' => 'Aɣmis n isewḥelen',
+'blocklog-showlog' => 'Amseqdac agi, yetseweḥel uqbel. Ad affeḍ aɣmis n isewḥal ddaw-agi :',
+'blocklog-showsuppresslog' => 'Amseqdac agi, yetseweḥel dɣa yeweffer uqbel. Ad affeḍ aɣmis n tukksiwin ddaw-agi :',
 'blocklogentry' => 'yesewḥel [[$1]] ; alama : $2 $3',
+'reblock-logentry' => 'yebeddel iɣewwaren n usewḥel n [[$1]] s tasewtit ar $2 $3',
+'unblocklogentry' => 'yekkes asewḥel n $1',
 'block-log-flags-anononly' => 'Imseqdacen udrigen kan',
 'block-log-flags-nocreate' => 'asnulfu n umiḍan yessegdel',
+'block-log-flags-noautoblock' => 'akyaf awurman yensa',
+'block-log-flags-noemail' => 'e-mail yekyef',
+'block-log-flags-nousertalk' => 'ur yezmer ara ad yebeddel asebter-is n umeslay',
+'block-log-flags-angry-autoblock' => 'manasewḥel yesselhan yesermed',
+'block-log-flags-hiddenname' => 'isem n umseqdac yeffer',
+'range_block_disabled' => 'Azref n unedbal i usnulfu n isewḥal n tagrummiwin IP yensa.',
+'ipb_expiry_invalid' => 'Tanzagt n tasewti ur teɣbel ara.',
+'ipb_expiry_temp' => 'Isewḥal n isemawen n imseqdacen yeffren ilaq ad illin d-imeɣlalen.',
+'ipb_hide_invalid' => 'Ulamek an ekkes amiḍan agi ; yesɛa aṭas ibeddilen.',
+'ipb_already_blocked' => '« $1 » yesewḥel yakan',
+'ipb-needreblock' => '« $1 » yesewḥel yakan. Tebɣiḍ ad beddeleḍ iɣewwaren ?',
+'ipb-otherblocks-header' => '{{PLURAL:$1|Asewḥel nniḍen|Isewḥelen nniḍen}}',
+'unblock-hideuser' => 'Ur tzemreḍ ara ad sewḥeleḍ amseqdac agi, acku isem-is n umseqdac yetweffer.',
+'ipb_cant_unblock' => 'Tuccḍa : ID n usewḥel $1 ulac-it.
+Ahat asewḥel yetwekkes yakan.',
+'ipb_blocked_as_range' => 'Tuccḍa : tansa IP $1 ur t-uwḥel ara srid dɣa ulamek an ekkes asewḥel.
+Lamaɛna tezga deg tagrumma $2 i nezmer an ekkes asewḥel.',
+'ip_range_invalid' => 'Tagrumma IP artameɣtut',
 'proxyblockreason' => 'Tansa n IP inek teɛkel axaṭer nettat "open proxy". G leɛnayek, meslay akk d provider inek.',
 'sorbsreason' => 'Tansa IP inek/inem tella deg yiwen umuɣ am "open proxy" deg DNSBL yettuseqdac deg {{SITENAME}}.',
 'sorbs_create_account_reason' => 'Tansa IP inek/inem tella deg yiwen umuɣ am "open proxy" deg DNSBL yettuseqdac deg {{SITENAME}}.
 Ur tezmireḍ ara ad snulfuḍ amiḍan.',
+'xffblockreason' => 'Yiwet tansa IP deg tasenṭit X-Forwarded-For header, tin inek/inem neɣ tin n uqeddac proxy i tseqeddeceḍ ,tesewḥel. Taɣzint n usewḥel amezrwaru : $1',
 
 # Developer tools
 'lockdb' => 'Sekker database',
+'unlockdb' => 'Kkes aseḍru n taffa n isefka',
+'lockdbtext' => 'Askaṛ n taffa n isefka ad yeqareɛ akkw imseqdacen ad beddelen isebtar, ad ḥerzen ismenyifen nsen, ad beddelen umuɣ nsen n uḍfar dɣa ad xeddmen akkw tigawin nniḍen yeḥwaǧen ibeddilen deg taffa n isefka.
+Ilaq ad sergegeḍ d-ayen yebɣiḍ ad xeddemeḍ dɣa ad ekkseḍ azekṛun deg taffa sakin tigawt inek/inem n ibeddi att fak.',
+'unlockdbtext' => 'Aksaskaṛ n taffa n isefka ad yeɛemmed i akkw imseqdacen ad beddelen isebtar, ad beddelen ismenyifen nsen, ad beddelen umuɣ nsen n uḍfar dɣa ad xeddmen akkw tigawin nniḍen yeḥwaǧen ibeddilen deg taffa n isefka.
+
+Ilaq ad sergegeḍ d-ayen yebɣiḍ ad xeddemeḍ.',
+'lockconfirm' => 'Ih, bɣiɣ ad sekṛeɣ taffa n isefka.',
+'unlockconfirm' => 'Ih, bɣiɣ ad ekkeseɣ aksskeṛeɣ taffa n isefka.',
+'lockbtn' => 'Sekker taffa n isefka',
+'unlockbtn' => 'Kkes aseḍru n taffa n isefka',
+'lockdbsuccesssub' => 'Askaṛ n taffa n isefka yetwexddem',
+'unlockdbsuccesssub' => 'Asewḥel n taffa n isefka yetwekkes',
+'unlockdbsuccesstext' => 'Askaṛ n taffa n isefka yetwekkes.',
+'lockfilenotwritable' => 'Ur tzemreḍ ara ad aruḍ deg ufaylu n uskaṛ n taffa n isefka.
+Ma tebɣiḍ ad sewḥeleḍ neɣ ad ekkseḍ asewḥel ɣef taffa n isefka, ilaq aqeddac web ad yezmer ad yaru deg ufaylu agi.',
+'lockedbyandtime' => '(sɣur $1 ass n $2 af $3)',
 
 # Move page
 'move-page' => 'Beddel isem n $1',
@@ -2306,6 +2532,8 @@ Lukan akka, yessefk a t-tedmeḍ weḥdek.",
 'movearticle' => 'Smimeḍ asebter',
 'movenologintext' => 'Yessefk ad tesɛuḍ isem n wemseqdac u [[Special:UserLogin|tkecmeḍ]]
 iwakken ad tesmimḍeḍ asebter.',
+'movenotallowed' => 'Ur tesɛiḍ ara turagt ad beddeleḍ isem n isebtar.',
+'cant-move-user-page' => 'Ur tesɛiḍ ara turagt ad beddeleḍ isem n isebtar igejdanen n imseqdacen',
 'newtitle' => 'Ar azwel amaynut',
 'move-watch' => 'Ɛass asebter-agi',
 'movepagebtn' => 'Smimeḍ asebter',
@@ -2314,8 +2542,13 @@ iwakken ad tesmimḍeḍ asebter.',
 isem ayen textareḍ mačči d ṣaḥiḥ.
 Xtar yiwen nniḍen.',
 'movetalk' => 'Smimeḍ asebter n umyannan (n umagrad-nni)',
+'move-subpages' => 'Beddel isem n adu-isebtar (alma d $1 {{PLURAL:$1|asebtar|isebtar}})',
+'move-talk-subpages' => 'Beddel adu-isebtar n usebtar n amyannan (alma d $1 isebtar)',
 'movelogpage' => 'Aɣmis n usemmimeḍ',
 'movelogpagetext' => 'Akessar yella wumuɣ n isebtar yettusmimeḍen.',
+'movesubpage' => '{{PLURAL:$1|Adu-asebtar|Adu-isebtar}}',
+'movesubpagetext' => 'Asebtar agi yesɛa $1 {{PLURAL:$1|adu-asebtar yebeqqeḍen|adu-isebtar yebeqqeḍen}} ddaw-agi.',
+'movenosubpage' => 'Asebtar agi ur yesɛ ara adu-asebtar',
 'movereason' => 'Ayɣer',
 'revertmove' => 'Uɣal ar tasiwelt ssabeq',
 'delete_and_move' => 'Mḥu u smimeḍ',
@@ -2325,6 +2558,7 @@ Anda tebɣiḍ tesmimeḍ "[[:$1]]" yella yagi. tebɣiḍ ad temḥuḍ iwakken
 'delete_and_move_confirm' => 'Ih, mḥu asebter',
 'delete_and_move_reason' => 'Asebter yemḥa iwakken yeqqim-d wemkan i usmimeḍ seg "[[$1]]"',
 'selfmove' => 'Izwal amezwaru d uneggaru kif-kif; ur yezmir ara ad yesmimeḍ asebter ɣur iman-is.',
+'immobile-target-namespace-iw' => 'Izdayen interwiki mačči d iswi ameɣtu i imussa.',
 
 # Export
 'export' => 'Ssufeɣ isebtar',
@@ -2357,11 +2591,14 @@ Anda tebɣiḍ tesmimeḍ "[[:$1]]" yella yagi. tebɣiḍ ad temḥuḍ iwakken
 'thumbnail-more' => 'Ssemɣer',
 'filemissing' => 'Afaylu ulac-it',
 'thumbnail_error' => 'Agul asmi yexleq tugna tamecṭuḥt: $1',
+'thumbnail_error_remote' => 'Izen n tuccḍa n $1 :
+$2',
 'djvu_page_error' => 'Asebter DjVu yeffeɣ seg tilisa',
 
 # Special:Import
 'import' => 'Ssekcem isebtar',
 'importinterwiki' => 'Assekcem n transwiki',
+'import-interwiki-source' => 'Wiki d usebtar n taɣbalut',
 'import-interwiki-history' => 'Xdem alsaru n akk tisiwal umezruy n usebter-agi',
 'import-interwiki-submit' => 'Ssekcem',
 'import-interwiki-namespace' => 'Azen isebtar ar isem n taɣult:',
@@ -2379,6 +2616,8 @@ Anda tebɣiḍ tesmimeḍ "[[:$1]]" yella yagi. tebɣiḍ ad temḥuḍ iwakken
 'importhistoryconflict' => 'Amennuɣ ger tisiwal n umezruy (ahat asebter-agi yettwazen yagi)',
 'importnosources' => 'Asekcam n transwiki ur yexdim ara u amezruy n usekcam yettwakkes.',
 'importnofile' => 'ulaḥedd afaylu usekcam ur yettwazen.',
+'import-rootpage-invalid' => 'Asebtar aẓar id efkeḍ d-azwel ur ɣblen ara.',
+'import-rootpage-nosubpage' => 'Tallunt n isemawen « $1 » n usebtar aẓar ur yeqbel ara adu-isebtar.',
 
 # Import log
 'importlogpage' => 'Aɣmis n usekcam',
@@ -2388,6 +2627,16 @@ Anda tebɣiḍ tesmimeḍ "[[:$1]]" yella yagi. tebɣiḍ ad temḥuḍ iwakken
 'import-logentry-interwiki' => '$1 s transwiki',
 'import-logentry-interwiki-detail' => '$1 {{PLURAL:$1|lqem|ileqman}} seg $2',
 
+# JavaScriptTest
+'javascripttest' => 'Tarmit n JavaScript',
+'javascripttest-title' => 'Asselkem n tirmitin $1',
+'javascripttest-pagetext-noframework' => 'Asebtar agi yeḥeṛṛ i usselkem n tirmitin JavaScript.',
+'javascripttest-pagetext-unknownframework' => 'Tamṣuka « $1 » warisem.',
+'javascripttest-pagetext-frameworks' => 'Ilaq ad xetreḍ yiwet n timṣukyin n tarmit agi : $1',
+'javascripttest-pagetext-skins' => 'Xter agwlim s anwa ad xeddemeḍ tarmit :',
+'javascripttest-qunit-intro' => 'Zeṛ [$1 tumlin n tarmit] ɣef mediawiki.org.',
+'javascripttest-qunit-heading' => 'Azrar n tarmit QUnit n JavaScript ɣef MediaWiki',
+
 # Tooltip help for the actions
 'tooltip-pt-userpage' => 'Asebter n umseqdac inu',
 'tooltip-pt-anonuserpage' => 'Asebter n wemseqdac n IP wukud tekkiḍ',
@@ -2405,6 +2654,7 @@ Anda tebɣiḍ tesmimeḍ "[[:$1]]" yella yagi. tebɣiḍ ad temḥuḍ iwakken
 'tooltip-ca-viewsource' => 'Asebter-agi yettwaḥrez. Tzemreḍ ad twaliḍ aɣbalu-ines.',
 'tooltip-ca-history' => 'Tisiwal ssabeq n usebter-agi.',
 'tooltip-ca-protect' => 'Ḥrez asebter-agi',
+'tooltip-ca-unprotect' => 'Beddel amesten n usebtar-agi',
 'tooltip-ca-delete' => 'Mḥu asebter-agi',
 'tooltip-ca-undelete' => 'Err akk ibeddlen n usebter-agi i yellan uqbel ad yettwamḥu usebter',
 'tooltip-ca-move' => 'Smimeḍ asebter-agi',
@@ -2447,18 +2697,28 @@ Anda tebɣiḍ tesmimeḍ "[[:$1]]" yella yagi. tebɣiḍ ad temḥuḍ iwakken
 'tooltip-diff' => 'Ssken ayen tbeddleḍ deg uḍris.',
 'tooltip-compareselectedversions' => 'Ẓer amgirred ger snat tisiwlini (i textareḍ) n usebter-agi.',
 'tooltip-watch' => 'Rnu asebter-agi i wumuɣ n uɛessi inu',
+'tooltip-watchlistedit-normal-submit' => 'Kkes izwal',
+'tooltip-watchlistedit-raw-submit' => 'Amucceḍ n umuɣ n uḍfar',
 'tooltip-recreate' => 'Ɛiwed xleq asebter ɣas akken yettumḥu',
+'tooltip-upload' => 'Beddu taktert',
 'tooltip-rollback' => '« Semmet » yesemmet s-yiwen asenned akk d-acu amseqdac aneggaru yebeddel deg usebter',
 'tooltip-undo' => '« Ssefsu » yesemmet abeddel agi dɣa i ldi asfaylu n ubeddel deg uskar n azaraskan. I ɛemmed an uɣal ar lqem n uqbel dɣa an rnu taɣẓint deg tanaka n ugzul.',
+'tooltip-preferences-save' => 'Ḥrez isemyifiyen',
 'tooltip-summary' => 'Sekcem agzul awezzlan',
+'interlanguage-link-title' => '$1 — $2',
+
+# Metadata
+'notacceptable' => 'Aqeddac wiki agi ur yezmer ara ad yefk isefka deg amasal ur yezmer ara ad yeɣar amsaɣ inek/inem.',
 
 # Attribution
 'anonymous' => '{{PLURAL:$1|Aseqdac udrig|Iseqdacen udrigen}} ɣef {{SITENAME}}',
 'siteuser' => '{{SITENAME}} amseqdac $1',
+'anonuser' => 'amseqdac abnabak $1 n {{SITENAME}}',
 'lastmodifiedatby' => 'Tikkelt taneggarut asmi yettubeddel asebter-agi $2, $1 sɣur $3.',
 'othercontribs' => 'Tikkin ɣef umahil n $1.',
 'others' => 'wiyaḍ',
 'siteusers' => '{{PLURAL:$2|aseqdac|iseqdacen}} $1 n {{SITENAME}}',
+'anonusers' => '{{PLURAL:$2|amseqdac abnabak|imseqdacen amseqdac abnabak}} $1 n {{SITENAME}}',
 'creditspage' => 'Win ixedmen asebter',
 'nocredits' => 'Ulac talɣut ɣef wayen ixedmen asebter-agi.',
 
@@ -2469,9 +2729,13 @@ Anda tebɣiḍ tesmimeḍ "[[:$1]]" yella yagi. tebɣiḍ ad temḥuḍ iwakken
 'spambot_username' => 'Assizdeg n spam sɣur MediaWiki',
 'spam_reverting' => 'Asuɣal i tasiwel taneggarut i ur tesɛi ara izdayen ɣer $1',
 'spam_blanking' => 'Akk tisiwal sɛan izdayen ɣer $1, ad yemḥu',
+'spam_deleting' => 'Akkw ileqman yesɛan izdayen ɣer $1, tukksa',
+'simpleantispam-label' => "Assefqed mgal e-mail yerkan.
+Ur-d t-aru '''ACEMMA''' d-agi !",
 
 # Info page
 'pageinfo-title' => 'Tilɣa i « $1 »',
+'pageinfo-not-current' => 'Ssurfet-aɣ, ulamek ad n-efk talɣut i ileqman iqdimen.',
 'pageinfo-header-basic' => 'Tilɣa n udasil',
 'pageinfo-header-edits' => 'Amezruy n ibeddilen',
 'pageinfo-header-restrictions' => 'Amesten n usebter',
@@ -2480,6 +2744,7 @@ Anda tebɣiḍ tesmimeḍ "[[:$1]]" yella yagi. tebɣiḍ ad temḥuḍ iwakken
 'pageinfo-default-sort' => 'Tasarut n ufran s lexṣas',
 'pageinfo-length' => 'Tiddi n usebter (s itamḍanen)',
 'pageinfo-article-id' => 'Uṭṭun n usebter',
+'pageinfo-language' => 'Tutlayt n ugbur n usebtar',
 'pageinfo-content-model' => 'Talɣa n ugbur n usebtar',
 'pageinfo-robot-policy' => 'Asbeddi sɣur iṛubuten',
 'pageinfo-robot-index' => 'Tessireg',
@@ -2497,10 +2762,13 @@ Anda tebɣiḍ tesmimeḍ "[[:$1]]" yella yagi. tebɣiḍ ad temḥuḍ iwakken
 'pageinfo-authors' => 'Amḍan aɣrud n imeskaren iwḥiden',
 'pageinfo-recent-edits' => 'Amḍan n ibeddilen imaynuten (deg $1 ineggura)',
 'pageinfo-recent-authors' => 'Amḍan n imeskaren iwḥiden imaynuten',
+'pageinfo-magic-words' => '{{PLURAL:$1|Awal n tiḥḥerga|Awalen n tiḥḥerga}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Taggayt yeffren|Taggayin yeffren}} ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|Talɣa i seddan|Talɣiwin i seddan}} ($1)',
 'pageinfo-toolboxlink' => 'Tilɣa ɣef usebtar',
+'pageinfo-redirectsto' => 'Ceggaɛ ɣer',
 'pageinfo-redirectsto-info' => 'tiɣa',
+'pageinfo-contentpage' => 'Yetweḥseb am asebtar n ugbur',
 'pageinfo-contentpage-yes' => 'Ih',
 'pageinfo-protect-cascading-yes' => 'Ih',
 'pageinfo-category-info' => 'Tilɣa ɣef taggayt',
@@ -2524,6 +2792,13 @@ Anda tebɣiḍ tesmimeḍ "[[:$1]]" yella yagi. tebɣiḍ ad temḥuḍ iwakken
 
 # Image deletion
 'deletedrevision' => 'Tasiwelt taqdimt $1 tettumḥa.',
+'filedeleteerror-short' => 'Tuccḍ deg tukksa n ufaylu : $1',
+'filedeleteerror-long' => 'Llant tuccḍiwin deg tukksa n ufaylu :
+
+$1',
+'filedelete-missing' => 'Afaylu « $1 » ur yezmer ara ad yetwekkes acku ulac-it.',
+'filedelete-old-unregistered' => 'Lqem n ufaylu « $1 » ulac-it deg taffa n isefka.',
+'filedelete-current-unregistered' => 'Afaylu « $1 » ulac-it deg taffa n isefka.',
 
 # Browsing diffs
 'previousdiff' => '← Amgirred ssabeq',
@@ -2534,11 +2809,14 @@ Anda tebɣiḍ tesmimeḍ "[[:$1]]" yella yagi. tebɣiḍ ad temḥuḍ iwakken
 Lukan a t-tesseqdceḍ yezmer ad yexsser aselkim inek/inem.",
 'imagemaxsize' => "Tiddi tafellayt n tugniwin :<br />''(i isebtar n weglam ufaylu)''",
 'thumbsize' => 'Tiddi n tugna tamecṭuḥt:',
+'widthheightpage' => '$1 × $2, $3 {{PLURAL:$3|asebtar|isebtar}}',
 'file-info' => 'tiddi n ufaylu: $1, anaw n MIME: $2',
 'file-info-size' => '$1 × $2 pixel, tiddi n ufaylu: $3, anaw n MIME: $4',
 'file-nohires' => 'Ulac resolution i tameqqrant fell-as.',
 'svg-long-desc' => 'Afaylu SVG, tabadut n $1 × $2 pixel, lqedd : $3',
-'show-big-image' => 'Resolution tameqqrant',
+'show-big-image' => 'Afaylu aneṣli',
+'file-info-gif-looped' => 'deg taglult',
+'file-info-gif-frames' => '$1 {{PLURAL:$1|tugna|tugniwin}}',
 'file-info-png-looped' => 'deg taglult',
 'file-info-png-repeat' => 'yetwurar {{PLURAL:$1|tikelt|tikwal}}',
 'file-info-png-frames' => '$1 {{PLURAL:$1|tugna|tugniwin}}',
@@ -2676,6 +2954,37 @@ Izdayen nniḍen ɣef yiwen ajerriḍ llan d tisuraf, am isebtar ɣef anta tugna
 'exif-filesource' => 'Aɣbal n ufaylu',
 'exif-scenetype' => 'Tawsit n usayes',
 'exif-customrendered' => 'Agmuḍ asagan',
+'exif-exposuremode' => 'askar n timzikent',
+'exif-whitebalance' => 'Tisistelt n imellalen',
+'exif-digitalzoomratio' => 'Afmiḍi n zoom umḍin',
+'exif-focallengthin35mmfilm' => 'Teɣzef n usaḍas i usaru 35 mm',
+'exif-scenecapturetype' => 'Tawsit n tuddma n usayes',
+'exif-gaincontrol' => 'Aḥkam n urrbeḥ',
+'exif-contrast' => 'Amyeẓli',
+'exif-devicesettingdescription' => 'Aglam n tawila n allal',
+'exif-subjectdistancerange' => 'Ameccaq n tamsalt',
+'exif-imageuniqueid' => 'Asulay asuf n tugna',
+'exif-gpsversionid' => 'Lqem n ticṛeṭ GPS',
+'exif-gpslatituderef' => 'Tamselɣut i tafeltirit',
+'exif-gpslatitude' => 'Tafeltirit',
+'exif-gpslongituderef' => 'Tamselɣut i tazegrart',
+'exif-gpslongitude' => 'Tazegrart',
+'exif-gpsaltituderef' => 'Tamselɣut n usawen (0=asawen, 1=talqayt)',
+'exif-gpsaltitude' => 'Talqayt',
+'exif-gpstimestamp' => 'Asrag GPS (tamasragt tabelkamit)',
+'exif-gpssatellites' => 'Igensaten yetseqdacen i akat',
+'exif-gpsstatus' => 'Addad n unermas',
+'exif-gpsmeasuremode' => 'askar n akat',
+'exif-gpsdop' => 'Tiseddi n akat',
+'exif-gpsspeedref' => 'Aferdis n tazzla n unermas GPS',
+'exif-gpsspeed' => 'Tazzla n unermas GPS',
+'exif-gpstrack' => 'Tanila n uwliwel',
+'exif-gpsimgdirection' => 'Tanila n tugna',
+'exif-gpsdestlatitude' => 'Turrut n userken',
+'exif-gpsdestlongitude' => 'Tazegrart n userken',
+'exif-gpsdestdistance' => 'Ameccaq ar userken',
+'exif-gpsareainformation' => 'Isem n taɣzut GPS',
+'exif-gpsdatestamp' => 'Azmez GPS',
 'exif-worldregiondest' => 'Timnaḍin n umaḍal yebeqqeḍen',
 'exif-countrydest' => 'Timura yebeqqeḍen',
 'exif-countrycodedest' => 'Tangalt n tamurt yebeqqeḍen',
@@ -2702,9 +3011,10 @@ Izdayen nniḍen ɣef yiwen ajerriḍ llan d tisuraf, am isebtar ɣef anta tugna
 'exif-datetimereleased' => 'Tuffɣa ass n',
 'exif-originaltransmissionref' => 'Tangalt n usideg n tuzzna tamezwarut',
 'exif-identifier' => 'Asulay',
+'exif-label' => 'Aglam',
 
 'exif-copyrighted-true' => 'Ddaw azref n umeskar',
-'exif-copyrighted-false' => 'Taɣuly tazayezt',
+'exif-copyrighted-false' => 'Addad n izerfan n umeskar ur yesbadu ara',
 
 'exif-unknowndate' => 'Azmez warisem',
 
@@ -3009,6 +3319,7 @@ G leɛnaya-k sentem belli ṣaḥḥ tebɣiḍ ad tɛiwedeḍ axlaq n usebter-ag
 'watchlisttools-raw' => 'Beddel umuɣ n uɛessi (raw)',
 
 # Core parser functions
+'unknown_extension_tag' => 'Ticṛeṭ n usiɣzef « $1 » warisem',
 'duplicate-defaultsort' => 'Ɣur-wet : tasarut n ufran m-ulac « $2 » atsefεej tasarut n uqbel « $1 ».',
 
 # Special:Version
@@ -3021,8 +3332,43 @@ G leɛnaya-k sentem belli ṣaḥḥ tebɣiḍ ad tɛiwedeḍ axlaq n usebter-ag
 'version-entrypoints-header-entrypoint' => 'Ired n wekcam',
 'version-entrypoints-header-url' => 'Tansa URL',
 
+# Special:Redirect
+'redirect-submit' => 'Ruḥ',
+'redirect-lookup' => 'Anadi :',
+'redirect-value' => 'Azal :',
+'redirect-user' => 'ID n umseqdac',
+'redirect-revision' => 'Tacaggart n usebtar',
+'redirect-file' => 'Isem n ufaylu',
+'redirect-not-exists' => 'Azal ulac-it',
+
+# Special:FileDuplicateSearch
+'fileduplicatesearch' => 'Anadi n allusen',
+'fileduplicatesearch-legend' => 'Nadi allus',
+'fileduplicatesearch-filename' => 'Isem n ufaylu :',
+'fileduplicatesearch-submit' => 'Nadi',
+'fileduplicatesearch-info' => '$1 × $2 pixel<br />Tiddi n ufaylu : $3<br />Anaw MIME : $4',
+'fileduplicatesearch-result-1' => 'Afaylu « $1 » ur yesɛa ara allus.',
+'fileduplicatesearch-result-n' => 'Afaylu « $1 » yesɛa {{PLURAL:$2|1 allus|$2 allusen}}.',
+'fileduplicatesearch-noresults' => 'Ulac afaylu s isem « $1 ».',
+
 # Special:SpecialPages
 'specialpages' => 'isebtar usligen',
+'specialpages-group-maintenance' => 'Iṛabulen n ibeddi',
+'specialpages-group-other' => 'Isebtar usligen nniḍen',
+'specialpages-group-login' => 'Asulu / assiggez',
+'specialpages-group-changes' => 'Ibeddilen imaynuten d iɣmisen',
+'specialpages-group-media' => 'Iṛabulen d taktert n ifuyla media',
+'specialpages-group-users' => 'Imseqdacen d izerfan yeqqnen',
+'specialpages-group-highuse' => 'Isebtar n usseqdec n waṭas',
+'specialpages-group-pages' => 'Umuɣen n isebtar',
+'specialpages-group-pagetools' => 'Ifecka i isebtar',
+'specialpages-group-wiki' => 'Isefka d ifecka',
+'specialpages-group-redirects' => 'Isebtar usligen yetsiwzelen',
+'specialpages-group-spam' => 'Ifecka mgal e-mail yerkan',
+
+# Special:BlankPage
+'blankpage' => 'Asebtar ilem',
+'intentionallyblankpage' => 'Asebtar agi, yetweǧǧ (qrib) d-ilem s lebɣi.',
 
 # External image whitelist
 'external_image_whitelist' => ' #Eǧǧ ajeṛṛiḍ agi aken yella.<pre>
@@ -3035,9 +3381,68 @@ G leɛnaya-k sentem belli ṣaḥḥ tebɣiḍ ad tɛiwedeḍ axlaq n usebter-ag
 #Ger akk tifersa n tinfaliyin timeɣẓanin nnig ajeṛṛiḍ  agi. Eǧǧ ajeṛṛiḍ agi aken yella.</pre>',
 
 # Special:Tags
+'tags' => 'Ticṛaḍ n ibeddilen sɣeblent',
 'tag-filter' => 'Astay n [[Special:Tags|ticraḍ]] :',
+'tag-filter-submit' => 'Sti',
+'tag-list-wrapper' => '([[Special:Tags|{{PLURAL:$1|Ticṛeṭ|Ticraḍ}}]] : $2)',
+'tags-title' => 'Ticraḍ',
+'tags-intro' => 'Asebtar agi yettaked umuɣ n ticraḍ ay aseɣẓan yezmer ad yeseqdec iwakken ad yecreḍ abeddel d anamek i yal abeddel.',
+'tags-tag' => 'Isem n ticṛeṭ',
+'tags-display-header' => 'Tummant deg umuɣen n ibeddilen',
+'tags-description-header' => 'Aglam ummid n ticṛeṭ',
+'tags-active-header' => 'Urmid ?',
+'tags-hitcount-header' => 'Ibeddilen yesɛan ticraḍ',
+'tags-active-yes' => 'Ih',
+'tags-active-no' => 'Ala',
+'tags-edit' => 'beddel',
+'tags-hitcount' => '$1 {{PLURAL:$1|abeddel|ibeddlen}}',
+
+# Special:ComparePages
+'comparepages' => 'Qaren isebtar',
+'compare-page1' => 'Asebtar 1',
+'compare-page2' => 'Asebtar 2',
+'compare-rev1' => 'Lqem 1',
+'compare-rev2' => 'Lqem 2',
+'compare-submit' => 'Qaren',
+'compare-invalid-title' => 'Azwel id efkiḍ ur yeɣbel ara.',
+'compare-title-not-exists' => 'Azwel id efkiḍ ulac-it.',
+'compare-revision-not-exists' => 'Lqem id efkiḍ ulac-it.',
+
+# Database error messages
+'dberr-header' => 'Wiki agi yesɛa ugur',
+'dberr-problems' => 'Ssurfet-aɣ ! Asmel agi yemliled ilɣiten itikniten.',
+'dberr-again' => 'Ɛreḍ ad arǧuḍ kra n tisdidin dɣa sismeḍ.',
+'dberr-info' => '(Ulamek an qqen ar uqeddac n taffa n isefka : $1)',
+'dberr-info-hidden' => '(Ulamek an qqen ar uqeddac n taffa n isefka)',
+
+# HTML forms
+'htmlform-submit' => 'Ssumer',
+'htmlform-reset' => 'Ekkes ibeddilen',
+'htmlform-selectorother-other' => 'Nniḍen',
+'htmlform-no' => 'Ala',
+'htmlform-yes' => 'Ih',
+'htmlform-chosen-placeholder' => 'Fren taxtiṛit',
 
 # New logging system
+'logentry-delete-delete' => '$1 {{GENDER:$2|yemḥa}} asebtar $3',
+'logentry-delete-restore' => '$1 {{GENDER:$2|yerred|terred}} asebtar $3',
+'logentry-delete-event' => '$1 {{GENDER:$2|yebeddel|tebeddel}} tabanit {{PLURAL:$5|n tadyant n uɣmis|n $5 tidyanin n uɣmis}} ɣef $3: $4',
+'logentry-delete-revision' => '$1 {{GENDER:$2|yebeddel|tebeddel}} tabani {{PLURAL:$5|n lqem|n $5 ileqman}} ɣef usebtar $3: $4',
+'logentry-delete-event-legacy' => '$1 {{GENDER:$2|yebeddel|tebeddel}} tabanit n tidyanin n uɣmis ɣef $3',
+'logentry-delete-revision-legacy' => '$1 {{GENDER:$2|yebeddel|tebeddel}} tabanit n ileqman ɣef usebtar $3',
+'logentry-suppress-delete' => '$1 {{GENDER:$2|yemḥa|temḥa}} asebtar $3',
+'logentry-suppress-event' => '$1 {{GENDER:$2|yebeddel s lbaḍna|tebeddel s lbaḍna}} tabanit {{PLURAL:$5|n tadyant n uɣmis|n $5 tidyanin n uɣmis}} ɣef $3: $4',
+'logentry-suppress-revision' => '$1 {{GENDER:$2|yebeddel s lbaḍna|tebeddel s lbaḍna}} tabani {{PLURAL:$5|n lqem|n $5 ileqman}} ɣef usebtar $3: $4',
+'logentry-suppress-event-legacy' => '$1 {{GENDER:$2|yebeddel s lbaḍna|tebeddel s lbaḍna}} tabanit n tidyanin n uɣmis ɣef $3',
+'logentry-suppress-revision-legacy' => '$1 {{GENDER:$2|yebeddel s lbaḍna|tebeddel s lbaḍna}} tabanit n ileqman ɣef usebtar $3',
+'revdelete-content-hid' => 'agbur yeffren',
+'revdelete-summary-hid' => 'agzul n ubeddil yeffren',
+'revdelete-uname-hid' => 'isem n umseqdac yeffren',
+'revdelete-content-unhid' => 'agbur yebeqqeḍen',
+'revdelete-summary-unhid' => 'agzul n ubeddil yebeqqeḍen',
+'revdelete-uname-unhid' => 'isem n umseqdac yebeqqeḍen',
+'logentry-move-move' => '$1 {{GENDER:$2|yebeddel isem|tebeddel isem}} n usebtar seg $3 ar $4',
+'logentry-move-move-noredirect' => '$1 {{GENDER:$2|yebeddel isem|tebeddel isem}} n usebtar seg $3 ar $4 war anegzum',
 'rightsnone' => '(ulaḥedd)',
 
 # Feedback
@@ -3046,6 +3451,19 @@ G leɛnaya-k sentem belli ṣaḥḥ tebɣiḍ ad tɛiwedeḍ axlaq n usebter-ag
 'feedback-cancel' => 'Semmewet',
 'feedback-submit' => 'Ceggaɛ iwenniten',
 'feedback-adding' => 'Rnud iwenniten inek/inem ar usebter...',
+'feedback-error1' => 'Tuccḍa : Agmuḍ n API ur yetwaɛqel ara',
+'feedback-error3' => 'Tuccḍa : Ulac tamrarut n API',
+
+# API errors
+'api-error-badtoken' => 'Tuccḍa tagensit : yir « tiddest ».',
+'api-error-fetchfileerror' => 'Tuccḍa tagensit : Yella kra ur yaɛeddan ara s luwqem deg tiririt n ufaylu.',
+'api-error-http' => 'Tuccḍa tagensit : ur yezmer ara ad yeqqen ar uqeddac.',
+'api-error-ok-but-empty' => 'Tuccḍa tagensit : Ulac tamrarut seg uqeddac.',
+'api-error-stashfailed' => 'Tuccḍa tagensit : aqeddac ur yezmer ara ad yekles afaylu uɛḍil.',
+'api-error-unclassified' => 'Yefkad anezri warisem.',
+'api-error-unknown-code' => 'Tuccḍa warisem : « $1 »',
+'api-error-unknown-warning' => 'Alɣu warisem : "$1".',
+'api-error-unknownerror' => 'Tuccḍa warisem : « $1 »',
 
 # Durations
 'duration-seconds' => '$1 {{PLURAL:$1|tasint|tisinin}}',
@@ -3058,4 +3476,6 @@ G leɛnaya-k sentem belli ṣaḥḥ tebɣiḍ ad tɛiwedeḍ axlaq n usebter-ag
 'duration-centuries' => '$1 {{PLURAL:$1|timiḍi|timiḍa}}',
 'duration-millennia' => '$1 {{PLURAL:$1|agimseggwas|agimseggwasen}}',
 
+# Unknown messages
+'uploadinvalidxml' => 'XML deg ufaylu yekteren ur d-yetwesleḍ ara.',
 );
index 5e525d7..31f4bd2 100644 (file)
@@ -852,7 +852,7 @@ $2',
 # Special:PasswordReset
 'passwordreset' => 'កំណត់​ពាក្យសម្ងាត់​សាឡើងវិញ',
 'passwordreset-text-one' => 'បំពេញសំណុំបែបបទនេះដើម្បីស្ដារពាក្យសម្ងាត់របស់អ្នក។',
-'passwordreset-text-many' => '{{PLURAL:$1|á\9e\9fá\9e¼á\9e\98á\9e\94á\9f\86á\9e\96á\9f\81á\9e\89á\9e\80á\9f\92á\9e\93á\9e»á\9e\84á\9e\94á\9f\92á\9e\9aá\9e¢á\9e\94á\9f\8bá\9e\98á\9e½á\9e\99á\9e\80á\9f\92á\9e\93á\9e»á\9e\84á\9e\85á\9f\86á\9e\8eá\9f\84á\9e\98á\9e\94á\9f\92á\9e\9aá\9e¢á\9e\94á\9f\8bá\9e\81á\9e¶á\9e\84á\9e\80á\9f\92á\9e\9aá\9f\84á\9e\98á\9e\8aá\9e¾á\9e\98á\9f\92á\9e\94á\9e¸á\9e\80á\9f\86á\9e\8eá\9e\8fá\9f\8bá\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9e\98á\9f\92á\9e\84á\9e¶á\9e\8fá\9f\8bá\9e\9aá\9e\94á\9e\9fá\9f\8bá\9e¢á\9f\92á\9e\93á\9e\80á\9e¡á\9e¾á\9e\84á\9e\9cá\9e·á\9e\89។}}',
+'passwordreset-text-many' => '{{PLURAL:$1|á\9e\9fá\9e¼á\9e\98á\9e\94á\9f\86á\9e\96á\9f\81á\9e\89á\9e\80á\9f\92á\9e\93á\9e»á\9e\84á\9e\94á\9f\92á\9e\9aá\9e¢á\9e\94á\9f\8bá\9e\98á\9e½á\9e\99á\9e\80á\9f\92á\9e\93á\9e»á\9e\84á\9e\85á\9f\86á\9e\8eá\9f\84á\9e\98á\9e\94á\9f\92á\9e\9aá\9e¢á\9e\94á\9f\8bá\9e\81á\9e¶á\9e\84á\9e\80á\9f\92á\9e\9aá\9f\84á\9e\98á\9e\8aá\9e¾á\9e\98á\9f\92á\9e\94á\9e¸á\9e\91á\9e\91á\9e½á\9e\9bá\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9e\98á\9f\92á\9e\84á\9e¶á\9e\8fá\9f\8bá\9e\94á\9e\8eá\9f\92á\9e\8aá\9f\84á\9f\87á\9e¢á\9e¶á\9e\9fá\9e\93á\9f\92á\9e\93á\9e\98á\9e½á\9e\99á\9e\8fá\9e¶á\9e\98á\9e\9aá\9e\99á\9f\88á\9e¢á\9f\8aá\9e¸á\9e\98á\9f\82á\9e\9b។}}',
 'passwordreset-legend' => 'កំណត់​ពាក្យសម្ងាត់​សាឡើងវិញ',
 'passwordreset-disabled' => 'មុខងារប្ដូរទៅពាក្យសម្ងាត់ដើមត្រូវបានបិទមិនអោយប្រើនៅលើវិគីនេះ។',
 'passwordreset-emaildisabled' => 'មុខងារអ៊ីមែលត្រូវបានបិទមិនអោយប្រើនៅលើវិគីនេះ។',
@@ -1221,8 +1221,9 @@ $2
 'revdelete-selected' => "'''{{PLURAL:$2|កំណែប្រែ​ដែលបាន​ជ្រើសយក}}របស់​[[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|ព្រឹត្តិការណ៍​កំណត់​ហេតុ​ដែលបាន​ជ្រើសយក}}:'''",
 'revdelete-suppress-text' => "ការ​ហាមឃាត់​គួរ​ត្រូវ​បាន​អនុវត្តិ​លើ​ករណី​ដូច​ខាង​ក្រោម​នេះ​ប៉ុណ្ណោះ​៖
-* ព័ត៌មាន​ផ្ទាល់​ខ្លួន​ ឯកជន​មិន​សមរម្យ​
-*: ''អាសយដ្ឋាននៃ​គេហដ្ឋាន​​ ​លេខ​ទូរស័ព្ទ និងលេខ​សន្តិសុខ​សង្គម​ជាដើម​''",
+* ព័ត៌មានបង្ខូចកេរ្ដិ៍ឈ្មោះធ្ងន់ធ្ងរ
+* ព័ត៌មាន​ផ្ទាល់​ខ្លួន​មិន​សមរម្យ​
+*: ''អាសយដ្ឋាននៃ​គេហដ្ឋាន​​ ​លេខ​ទូរស័ព្ទ និងលេខ​អត្តសញ្ញាណប័ណ្ឌជាដើម​''",
 'revdelete-legend' => 'ដាក់កំហិតគំហើញ',
 'revdelete-hide-text' => 'បិទបាំងអត្ថបទកំណែប្រែ',
 'revdelete-hide-image' => 'បិទបាំងខ្លឹមសារនៃឯកសារ',
@@ -1552,7 +1553,7 @@ $1",
 'right-reupload-own' => 'សរសេរលុបពីលើឯកសារមានស្រាប់ដែលត្រូវបានផ្ទុកឡើងដោយម្ចាស់ដើម',
 'right-reupload-shared' => 'សរសេរលុបពីលើឯកសារនៅក្នុងថតមេឌារួមរបស់វិគីនេះ',
 'right-upload_by_url' => 'ផ្ទុកឡើងឯកសារមួយពីអាសយដ្ឋាន URL មួយ',
-'right-autoconfirmed' => 'á\9e\80á\9f\82á\9e\94á\9f\92á\9e\9aá\9f\82á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\96á\9e¶á\9e\80á\9f\8bá\9e\80á\9e\8eá\9f\92á\9e\8aá\9e¶á\9e\9bá\9e\80á\9e¶á\9e\9aá\9e\96á\9e¶á\9e\9aá\9e\93á\9e¶á\9e\93á\9e',
+'right-autoconfirmed' => 'á\9e\98á\9e·á\9e\93á\9e\91á\9e\91á\9e½á\9e\9bá\9e\9aá\9e\84á\9e¥á\9e\91á\9f\92á\9e\92á\9e·á\9e\96á\9e\9bá\9e\96á\9e¸á\9e\80á\9e¶á\9e\9aá\9e\8aá\9e¶á\9e\80á\9f\8bá\9e\80á\9f\86á\9e á\9e·á\9e\8fá\9e\9bá\9f\92á\9e\94á\9e¿á\9e\93á\9e\8fá\9e¶á\9e\98IP',
 'right-bot' => 'ទុកជាដំណើរការស្វ័យប្រវត្តិមួយ',
 'right-nominornewtalk' => 'មិនបង្ហាញសាររំលឹក ពេលធ្វើកំនែតិចតួចនៅលើទំព័រពិភាក្សានានា',
 'right-writeapi' => 'ការប្រើប្រាស់ API សម្រាប់​សរសេរ',
@@ -1663,6 +1664,8 @@ $1",
 'recentchanges-label-minor' => 'នេះជាការកែប្រែតិចតួចមួយប៉ុណ្ណោះ',
 'recentchanges-label-bot' => 'ការកែប្រែនេះត្រូវបានធ្វើឡើងដោយរូបយន្ត',
 'recentchanges-label-unpatrolled' => 'ការកែប្រែនេះមិនទាន់ត្រូវបានល្បាតទេ',
+'recentchanges-label-plusminus' => 'ទំហំទំព័រត្រូវបានផ្លាស់ប្ដូរគិតជាចំនួនបៃ',
+'recentchanges-legend-heading' => "''កំណត់សម្គាល់៖'''",
 'recentchanges-legend-newpage' => '(មើលផងដែរនូវ [[Special:NewPages|បញ្ជីទំព័រថ្មី]])',
 'rcnotefrom' => "ខាងក្រោមនេះជាបន្លាស់ប្ដូរនានាគិតចាប់តាំងពី '''$2''' (បង្ហាញអតិបរមាចំនួន '''$1''')។",
 'rclistfrom' => 'បង្ហាញបន្លាស់ប្ដូរថ្មីៗចាប់តាំងពី $1',
@@ -2342,7 +2345,7 @@ $PAGEINTRO $NEWPAGE
 អ៊ីមែល៖ $PAGEEDITOR_EMAIL
 វិគី៖ $PAGEEDITOR_WIKI
 
-នឹងមិនមាន​ការផ្ដល់ដំណឹង​ជាលាយលក្សណ៍អក្សរ​ផ្សេងទៀតពេលមានសកម្មភាពលើសពីនេះទេ លើកលែងតែ​អ្នកចូលមើល​ទំព័រនេះរួចសិន។ អ្នកក៏អាចកំណត់ឡើងវិញអំពីការផ្ដល់ដំណឹងសម្រាប់​ទំព័រដែលអ្នកកំពុងតាមដានផងដែរ។
\9e\93á\9e¹á\9e\84á\9e\98á\9e·á\9e\93á\9e\98á\9e¶á\9e\93â\80\8bá\9e\80á\9e¶á\9e\9aá\9e\95á\9f\92á\9e\8aá\9e\9bá\9f\8bá\9e\8aá\9f\86á\9e\8eá\9e¹á\9e\84â\80\8bá\9e\87á\9e¶á\9e\9bá\9e¶á\9e\99á\9e\9bá\9e\80á\9f\92á\9e\9fá\9e\8eá\9f\8dá\9e¢á\9e\80á\9f\92á\9e\9fá\9e\9aâ\80\8bá\9e\95á\9f\92á\9e\9fá\9f\81á\9e\84á\9e\91á\9f\80á\9e\8fá\9e\96á\9f\81á\9e\9bá\9e\98á\9e¶á\9e\93á\9e\9fá\9e\80á\9e\98á\9f\92á\9e\98á\9e\97á\9e¶á\9e\96á\9e\9bá\9e¾á\9e\9fá\9e\96á\9e¸á\9e\93á\9f\81á\9f\87á\9e\91á\9f\81 á\9e\9bá\9e¾á\9e\80á\9e\9bá\9f\82á\9e\84á\9e\8fá\9f\82â\80\8bá\9e¢á\9f\92á\9e\93á\9e\80á\9e\85á\9e¼á\9e\9bá\9e\98á\9e¾á\9e\9bâ\80\8bá\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\93á\9f\81á\9f\87á\9e\8aá\9f\84á\9e\99á\9e\80á\9e\8fá\9f\8bá\9e\88á\9f\92á\9e\98á\9f\84á\9f\87á\9e\85á\9e¼á\9e\9bá\9e\9aá\9e½á\9e\85á\9e\9fá\9e·á\9e\93á\9f\94 á\9e¢á\9f\92á\9e\93á\9e\80á\9e\80á\9f\8fá\9e¢á\9e¶á\9e\85á\9e\80á\9f\86á\9e\8eá\9e\8fá\9f\8bá\9e¡á\9e¾á\9e\84á\9e\9cá\9e·á\9e\89á\9e¢á\9f\86á\9e\96á\9e¸á\9e\80á\9e¶á\9e\9aá\9e\95á\9f\92á\9e\8aá\9e\9bá\9f\8bá\9e\8aá\9f\86á\9e\8eá\9e¹á\9e\84á\9e\9fá\9e\98á\9f\92á\9e\9aá\9e¶á\9e\94á\9f\8bâ\80\8bá\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\8aá\9f\82á\9e\9bá\9e¢á\9f\92á\9e\93á\9e\80á\9e\80á\9f\86á\9e\96á\9e»á\9e\84á\9e\8fá\9e¶á\9e\98á\9e\8aá\9e¶á\9e\93á\9e\95á\9e\84á\9e\8aá\9f\82á\9e\9aá\9f\94
 
 ពីប្រព័ន្ធផ្តល់ដំណឹង {{SITENAME}}
 
@@ -2387,10 +2390,12 @@ $UNWATCHURL
 'deletecomment' => 'មូលហេតុ៖',
 'deleteotherreason' => 'មូលហេតុបន្ថែមផ្សេងទៀត៖',
 'deletereasonotherlist' => 'មូលហេតុផ្សេងទៀត',
-'deletereason-dropdown' => '*ហេតុផលទូទៅ
-** សំណើរបស់អ្នកនិពន្ធ
+'deletereason-dropdown' => '* មូលហេតុលុបចោលទូទៅ
+** ស្ប៉ាម
+** អំពើបំផ្លាញទ្រព្យសម្បត្តិឯកជនឬសាធារណៈ
 ** បំពានកម្មសិទ្ធិបញ្ញា
-** អំពើបំផ្លាញទ្រព្យសម្បត្តិឯកជនឬសាធារណៈ',
+** សំណើរបស់អ្នកនិពន្ធ
+** ការបញ្ជូនបន្តដែលខូច',
 'delete-edit-reasonlist' => 'ពិនិត្យផ្ទៀងផ្ទាត់ហេតុផលនៃការលុប',
 'delete-toobig' => 'ទំព័រនេះមានប្រវត្តិកែប្រែធំលើសពី $1 {{PLURAL:$1|កំណែ|កំណែ}}។
 
@@ -2726,15 +2731,15 @@ $1',
 # Move page
 'move-page' => 'ប្តូរទីតាំង $1',
 'move-page-legend' => 'ប្តូរទីតាំងទំព័រ',
-'movepagetext' => "ការប្រើប្រាស់​ទម្រង់​ខាងក្រោម​នឹង​ប្តូរ​ឈ្មោះ​ទំព័រ ប្តូរទីតាំង​គ្រប់​ប្រវត្តិ​របស់​វា​ទៅ​ឈ្មោះថ្មី​
\9e\85á\9f\86á\9e\8eá\9e\84á\9e\87á\9e¾á\9e\84â\80\8bá\9e\85á\9e¶á\9e\9fá\9f\8bâ\80\8bá\9e\93á\9e¹á\9e\84â\80\8bá\9e\80á\9f\92á\9e\9bá\9e¶á\9e\99á\9e\87á\9e¶â\80\8bá\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aâ\80\8bá\9e\94á\9f\92á\9e\8fá\9e¼á\9e\9aá\9e\91á\9e·á\9e\9fទៅ​ចំណងជើងថ្មី​។
\9e\8fá\9f\86á\9e\8eá\9e\97á\9f\92á\9e\87á\9e¶á\9e\94á\9f\8bâ\80\8bá\9e\91á\9f\85â\80\8bá\9e\85á\9f\86á\9e\8eá\9e\84á\9e\87á\9e¾á\9e\84 á\9e\93á\9f\83â\80\8bá\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\85á\9e¶á\9e\9fá\9f\8bâ\80\8bá\9e\93á\9e¹á\9e\84â\80\8bá\9e\98á\9e·á\9e\93â\80\8bá\9e\94á\9e¶á\9e\93â\80\8bá\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9câ\80\8bá\9e\95á\9f\92á\9e\9bá\9e¶á\9e\9fá\9f\8bá\9e\94á\9f\92á\9e\8fá\9e¼á\9e\9a; á\9e\9fá\9e¼á\9e\98â\80\8bá\9e\96á\9e·á\9e\93á\9e·á\9e\8fá\9f\92á\9e\99á\9e\98á\9e¾á\9e\9b á\9e\80á\9e¶á\9e\9aá\9e\94á\9f\92á\9e\8fá\9e¼á\9e\9aá\9e\91á\9e·á\9e\9f á\9e\98á\9e·á\9e\93á\9e\94á\9e¶á\9e\93á\9e\94á\9e\84á\9f\92á\9e\80á\9e¾á\9e\8f á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\94á\9f\92á\9e\8fá\9e¼á\9e\9aá\9e\91á\9e·á\9e\9fá\9e\91á\9f\92á\9e\9cá\9f\81 á\9e¬ á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\94á\9f\92á\9e\8fá\9e¼á\9e\9aá\9e\91á\9e·á\9e\9fá\9e\94á\9e¶á\9e\80á\9f\8b á\9f\94
\9e¢á\9f\92á\9e\93á\9e\80á\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\8fá\9f\82á\9e\92á\9e¶á\9e\93á\9e¶á\9e\94á\9f\92á\9e\9aá\9e¶á\9e\80á\9e\8a á\9e\90á\9e¶â\80\8bá\9e\8fá\9f\86á\9e\8eá\9e\97á\9f\92á\9e\87á\9e¶á\9e\94á\9f\8bá\9e\91á\9e¶á\9f\86á\9e\84á\9e\93á\9f\84á\9f\87 á\9e\94á\9e\93á\9f\92á\9e\8fá\9e\9fá\9f\86á\9e\8aá\9f\85â\80\8bá\9e\91á\9f\85â\80\8bá\9e\82á\9f\84á\9e\9bá\9e\8aá\9f\85á\9e\94á\9e¶á\9e\93á\9e\9fá\9e\93á\9f\92á\9e\98á\9e\8f​។
+'movepagetext' => "ការប្រើប្រាស់សំណុំបែបបទខាងក្រោម​នឹង​ប្តូរ​ឈ្មោះ​ទំព័រ និងប្តូរទីតាំង​ប្រវត្តិទាំងអស់​របស់​វា​ទៅ​ឈ្មោះថ្មី​នោះ
\9e\85á\9f\86á\9e\8eá\9e\84á\9e\87á\9e¾á\9e\84â\80\8bá\9e\85á\9e¶á\9e\9fá\9f\8bâ\80\8bá\9e\93á\9e¹á\9e\84â\80\8bá\9e\80á\9f\92á\9e\9bá\9e¶á\9e\99á\9e\87á\9e¶â\80\8bá\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aâ\80\8bá\9e\94á\9e\89á\9f\92á\9e\87á\9e¼á\9e\93á\9e\94á\9e\93á\9f\92á\9e\8fទៅ​ចំណងជើងថ្មី​។
\9e¢á\9f\92á\9e\93á\9e\80á\9e¢á\9e¶á\9e\85á\9e\94á\9e\93á\9f\92á\9e\91á\9e¶á\9e\93á\9f\8bá\9e\9fá\9e\98á\9f\90á\9e\99á\9e\80á\9e¶á\9e\9aá\9e\94á\9e\89á\9f\92á\9e\87á\9e¼á\9e\93á\9e\94á\9e\93á\9f\92á\9e\8fá\9e\8aá\9f\82á\9e\9bá\9e\9fá\9f\86á\9e\8aá\9f\85á\9e\91á\9f\85á\9e\9aá\9e\80á\9e\85á\9f\86á\9e\8eá\9e\84á\9e\87á\9e¾á\9e\84á\9e\85á\9e¶á\9e\9fá\9f\8bá\9e\8aá\9f\84á\9e\99á\9e\9fá\9f\92á\9e\9cá\9f\90á\9e\99á\9e\94á\9f\92á\9e\9aá\9e\9cá\9e\8fá\9f\92á\9e\8fá\9e·á\9f\94 á\9e\94á\9e¾á\9e\9fá\9e·á\9e\93á\9e\87á\9e¶á\9e¢á\9f\92á\9e\93á\9e\80á\9e\87á\9f\92á\9e\9aá\9e¾á\9e\9fá\9e\9aá\9e¾á\9e\9fá\9e\98á\9e·á\9e\93á\9e\92á\9f\92á\9e\9cá\9e¾á\9e\94á\9f\82á\9e\94á\9e\93á\9f\81á\9f\87 á\9e\9fá\9e¼á\9e\98á\9e\80á\9e»á\9f\86á\9e\97á\9f\92á\9e\9bá\9f\81á\9e\85á\9e\96á\9e·á\9e\93á\9e·á\9e\8fá\9f\92á\9e\99 [[Special:DoubleRedirects|á\9e\80á\9e¶á\9e\9aá\9e\94á\9e\89á\9f\92á\9e\87á\9e¼á\9e\93á\9e\94á\9e\93á\9f\92á\9e\8fá\9e\91á\9f\92á\9e\9cá\9f\81á\9e\8aá\9e\84]] á\9e\93á\9e·á\9e\84[[Special:BrokenRedirects|á\9e\80á\9e¶á\9e\9aá\9e\94á\9e\89á\9f\92á\9e\87á\9e¼á\9e\93á\9e\94á\9e\93á\9f\92á\9e\8fá\9e\8aá\9f\82á\9e\9bá\9e\8aá\9e¶á\9e\85á\9f\8b]]á\9f\94 
\9e¢á\9f\92á\9e\93á\9e\80á\9e\98á\9e¶á\9e\93á\9e\97á\9e¶á\9e\9aá\9f\88á\9e\92á\9f\92á\9e\9cá\9e¾á\9e¢á\9f\84á\9e\99á\9e\94á\9f\92á\9e\9aá\9e¶á\9e\80á\9e\8aá\9e\90á\9e¶á\9e\8fá\9f\86á\9e\8eá\9e\97á\9f\92á\9e\87á\9e¶á\9e\94á\9f\8bá\9e\91á\9e¶á\9f\86á\9e\84á\9e\93á\9f\84á\9f\87á\9e\93á\9f\85á\9e\8fá\9f\82á\9e\94á\9e\93á\9f\92á\9e\8fá\9e\9fá\9f\86á\9e\8aá\9f\85â\80\8bá\9e\91á\9f\85â\80\8bá\9e\80á\9e¶á\9e\93á\9f\8bá\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\82á\9f\84á\9e\9bá\9e\8aá\9f\85á\9e\8fá\9f\92á\9e\9aá\9e¹á\9e\98á\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9c​។
 
-ទំព័រចាស់ នឹង'''មិន'''ត្រូវ បានប្តូរទីតាំង កាលបើ​មានទំព័រ​ក្នុងចំណងជើងថ្មី​។ បើគ្មានទំព័រ​ក្នុងចំណងជើងថ្មី, ទំព័ចាស់​នឹង​ទទេ ឬ ជា​ទំព័រប្តូរទិស និង​គ្មានប្រវត្តិកំណែប្រែ​។ វាមានន័យថា អ្នកអាចប្តូរឈ្មោះទំព័រ​ទៅទីតាំងដើម ករណី​អ្នកបានធ្វើកំហុស, និង ដែលអ្នកមិនអាច សរសេរជាន់ពីលើ ទំព័រមានស្រាប់​។
+ទំព័រចាស់នឹង'''មិន'''ត្រូវ បានប្តូរទីតាំង កាលបើ​មានទំព័រ​ក្នុងចំណងជើងថ្មី​រួចហើយ លើកលែងតែក្នុងករណីទំព័រ​ក្នុងចំណងជើងថ្មីជា​ទំព័របញ្ជូនបន្តហើយ​គ្មានប្រវត្តិកែប្រែពីមុន។ វាមានន័យថា អ្នកអាចប្តូរឈ្មោះទំព័រ​ទៅទីតាំងដើម ករណី​អ្នកបានធ្វើខុសដោយអចេនតនា ហើយអ្នកមិនអាចសរសេរជាន់ពីលើ ទំព័រមានស្រាប់​។
 
 '''ប្រយ័ត្ន!'''
-វាអាចជា បំលាស់ប្តូរដល់ឫសគល់ និង​មិននឹកស្មានជាមុន ចំពោះ​ទំព័រប្រជាប្រិយ​។ អ្នកត្រូវតែ​ដឹងប្រាកដ​អំពី​ផលវិបាកទាំងអស់ មុននឹង​បន្តទង្វើនេះ​។",
+វាអាចជាបន្លស់ប្តូរដល់ឫសគល់និង​មិននឹកស្មានជាមុន សម្រាប់​ទំព័រប្រជាប្រិយ​។ អ្នកត្រូវតែ​ដឹងប្រាកដ​អំពី​ផលវិបាកទាំងអស់ មុននឹង​បន្តទង្វើនេះ​។",
 'movepagetalktext' => "ទំព័រសហពិភាក្សាបើមាន នឹងត្រូវបានប្តូរទៅឈ្មោះ​ថ្មី​ជាមួយគ្នា​ដោយ​ស្វ័យប្រវត្តិ '''លើកលែងតែ៖'''
 *ទំព័រពិភាក្សាមិនទទេនិងមានរួចរាល់ក្រោមឈ្មោះថ្មី ឬ
 *អ្នក​ដោះប្រអប់ធីក​ខាងក្រោម។
@@ -3460,7 +3465,7 @@ $5
 'confirmemail_body_set' => 'នរណាម្នាក់ ប្រហែលជាខ្លួនអ្នកផ្ទាល់ មកពីអាស័យដ្ឋានIP $1,
 បានដាក់ភ្ជាប់អាស័យដ្ឋានអ៊ីមែលរបស់គណនី "$2" ជាមួយនឹងអាស័យដ្ឋានអ៊ីមែលនេះនៅលើ{{SITENAME}}។
 
\9e\8aá\9e¾á\9e\98á\9f\92á\9e\94á\9e¸á\9e\94á\9e\89á\9f\92á\9e\87á\9e¶á\9e\80á\9f\8bá\9e\90á\9e¶á\9e\93á\9f\81á\9f\87á\9e\96á\9e·á\9e\8fá\9e\87á\9e¶á\9e\82á\9e\8eá\9e\93á\9e¸á\9e\95á\9f\92á\9e\91á\9e¶á\9e\9bá\9f\8bá\9e\9aá\9e\94á\9e\9fá\9f\8bá\9e¢á\9f\92á\9e\93á\9e\80á\9e\98á\9f\82á\9e\93 á\9e\93á\9e·á\9e\84á\9e\8aá\9f\86á\9e\8eá\9e¾á\9e\9aá\9e\80á\9e¶á\9e\9aá\9e\98á\9e»á\9e\81á\9e\84á\9e¶á\9e\9aá\9e¢á\9f\8aá\9e¸á\9e\98á\9f\82á\9e\9bá\9e\80á\9f\92á\9e\93á\9e»á\9e\84{{SITENAME}}á\9e¡á\9e¾á\9e\84á\9e\9cá\9e·á\9e\89
\9e\8aá\9e¾á\9e\98á\9f\92á\9e\94á\9e¸á\9e\94á\9e\89á\9f\92á\9e\87á\9e¶á\9e\80á\9f\8bá\9e\90á\9e¶á\9e\93á\9f\81á\9f\87á\9e\96á\9e·á\9e\8fá\9e\87á\9e¶á\9e\82á\9e\8eá\9e\93á\9e¸á\9e\95á\9f\92á\9e\91á\9e¶á\9e\9bá\9f\8bá\9e\9aá\9e\94á\9e\9fá\9f\8bá\9e¢á\9f\92á\9e\93á\9e\80á\9e\98á\9f\82á\9e\93 á\9e\93á\9e·á\9e\84á\9e\94á\9e¾á\9e\80á\9e\8aá\9f\86á\9e\8eá\9e¾á\9e\9aá\9e\80á\9e¶á\9e\9aá\9e\98á\9e»á\9e\81á\9e\84á\9e¶á\9e\9aá\9e¢á\9f\8aá\9e¸á\9e\98á\9f\82á\9e\9bá\9e\80á\9f\92á\9e\93á\9e»á\9e\84{{SITENAME}}
 សូមបើកតំណភ្ជាប់ខាងក្រោមនេះក្នុងកម្មវិធីរាយរកអ៊ីនធើណិតរបស់អ្នក៖
 
 $3
@@ -3627,8 +3632,7 @@ $5
 # Special:SpecialPages
 'specialpages' => 'ទំព័រ​ពិសេស​ៗ',
 'specialpages-note' => '* ទំព័រពិសេសៗធម្មតា។
-* <span class="mw-specialpagerestricted">ទំព័រពិសេសៗដែលមានការដាក់កំហិត។</span>
-* <span class="mw-specialpagecached">ទំព័រពិសេសៗសំរាប់រក្សាទុក។</span>',
+* <span class="mw-specialpagerestricted">ទំព័រពិសេសៗដែលមានការដាក់កំហិត។</span>',
 'specialpages-group-maintenance' => 'របាយការណ៍នានាអំពីតំហែទាំ',
 'specialpages-group-other' => 'ទំព័រពិសេសៗផ្សេងៗទៀត',
 'specialpages-group-login' => 'កត់ឈ្មោះចូល / បង្កើតគណនី',
index 792c0c1..409f006 100644 (file)
@@ -31,6 +31,7 @@
  * @author Klutzy
  * @author Kwj2772
  * @author LFM
+ * @author Leehoy
  * @author Mintz0223
  * @author Pi.C.Noizecehx
  * @author Priviet
@@ -374,7 +375,7 @@ $messages = array(
 'tog-editondblclick' => '더블 클릭으로 문서 편집하기',
 'tog-editsection' => '[편집] 링크로 부분 편집하기',
 'tog-editsectiononrightclick' => '제목을 오른쪽 클릭해서 문단 편집하기 활성화',
-'tog-showtoc' => '문서의 차례 보여주기 (머릿글이 4개 이상인 경우)',
+'tog-showtoc' => '문서의 목차 보여주기 (머릿글이 4개 이상인 경우)',
 'tog-rememberpassword' => '이 브라우저에서 로그인 상태를 저장하기 (최대 $1{{PLURAL:$1|일}})',
 'tog-watchcreations' => '내가 만드는 문서와 내가 올린 파일을 주시문서 목록에 추가',
 'tog-watchdefault' => '내가 편집하는 문서와 파일을 주시문서 목록에 추가',
@@ -1010,7 +1011,7 @@ $2
 'italic_sample' => '기울인 글씨',
 'italic_tip' => '기울인 글씨',
 'link_sample' => '링크 제목',
-'link_tip' => 'ì\95\88쪽 ë§\81í\81¬',
+'link_tip' => 'ë\82´ë¶\80 ê³ ë¦¬',
 'extlink_sample' => 'http://www.example.com 사이트 이름',
 'extlink_tip' => '바깥 링크 (주소 앞에 http://가 있어야 합니다)',
 'headline_sample' => '제목',
@@ -1025,7 +1026,7 @@ $2
 # Edit pages
 'summary' => '요약:',
 'subject' => '주제/제목:',
-'minoredit' => '사소한 편집',
+'minoredit' => '사소한 편집입니다',
 'watchthis' => '이 문서 주시하기',
 'savearticle' => '저장',
 'preview' => '미리 보기',
@@ -1217,6 +1218,8 @@ IP 주소는 여러 사용자가 공유할 수 있습니다.
 'content-not-allowed-here' => '"$1" 내용은 [[$2]] 문서예 허용하지 않습니다',
 'editwarning-warning' => '이 페이지에서 벗어나면 저장하지 않은 바뀜이 모두 사라집니다.
 로그인을 했다면, 환경 설정의 "편집 상자"에서 이 경고를 띄우지 않도록 설정할 수 있습니다.',
+'editpage-notsupportedcontentformat-title' => '지원하지 않는 컨텐츠 형식',
+'editpage-notsupportedcontentformat-text' => '컨텐츠 모델 $2 에서는 컨텐츠형식 $1을 지원하지 않습니다.',
 
 # Content models
 'content-model-wikitext' => '위키텍스트',
@@ -1232,8 +1235,8 @@ $2개 보다 적게 {{PLURAL:$2|써야}} 하지만 {{PLURAL:$1|지금은 $1개
 'post-expand-template-inclusion-warning' => "'''경고:''' 틀 포함 크기가 너무 큽니다.
 일부 틀은 포함되지 않을 수 있습니다.",
 'post-expand-template-inclusion-category' => '사용한 틀의 크기가 지나치게 큰 문서의 목록',
-'post-expand-template-argument-warning' => "'''경고:''' 이 문서는 전개하면 크기가 너무 큰 틀 수가 하나 이상 포함되어 있습니다.
-이 수는 생략했습니다.",
+'post-expand-template-argument-warning' => "'''경고:''' 이 문서는 전개하면 크기가 너무 큰 틀 수가 하나 이상 포함되어 있습니다.
+이 수는 생략했습니다.",
 'post-expand-template-argument-category' => '생략된 틀 변수를 포함한 문서',
 'parser-template-loop-warning' => '재귀적인 틀이 발견되었습니다: [[$1]]',
 'parser-template-recursion-depth-warning' => '틀 반복 횟수 제한을 초과함($1)',
@@ -1462,7 +1465,7 @@ $1",
 'searchprofile-articles-tooltip' => '$1에서 검색',
 'searchprofile-project-tooltip' => '$1에서 검색',
 'searchprofile-images-tooltip' => '파일 검색',
-'searchprofile-everything-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개}}',
@@ -1795,7 +1798,7 @@ HTML 태그를 확인하세요.',
 'recentchanges-label-newpage' => '새 문서',
 'recentchanges-label-minor' => '사소한 편집',
 'recentchanges-label-bot' => '봇의 편집',
-'recentchanges-label-unpatrolled' => '아직 검토하지 않은 편집',
+'recentchanges-label-unpatrolled' => '아직 순찰하지 않은 편집',
 'recentchanges-label-plusminus' => '바이트로 표기된 바뀐 문서 크기',
 'recentchanges-legend-heading' => "'''범례:'''",
 'recentchanges-legend-newpage' => '([[Special:NewPages|새 문서 목록]]도 보세요)',
@@ -1806,7 +1809,7 @@ HTML 태그를 확인하세요.',
 'rcshowhidebots' => '봇을 $1',
 'rcshowhideliu' => '등록된 사용자를 $1',
 'rcshowhideanons' => '익명 사용자를 $1',
-'rcshowhidepatr' => '검토된 편집을 $1',
+'rcshowhidepatr' => '순찰된 편집을 $1',
 'rcshowhidemine' => '내 편집을 $1',
 'rclinks' => '최근 $2일간의 $1개 바뀐 문서 보기<br />$3',
 'diff' => '비교',
@@ -1833,7 +1836,7 @@ HTML 태그를 확인하세요.',
 'recentchangeslinked-summary' => "여기를 가리키는 문서(분류일 경우 이 분류에 포함된 문서)에 대한 최근 바뀜이 나와 있습니다.
 [[Special:Watchlist|주시하는 문서]]는 '''굵은''' 글씨로 나타납니다.",
 'recentchangeslinked-page' => '문서 이름:',
-'recentchangeslinked-to' => '해당 문서를 링크한 문서의 바뀜 보기',
+'recentchangeslinked-to' => '해당 문서를 가리키는 문서의 바뀜 보기',
 
 # Upload
 'upload' => '파일 올리기',
@@ -2124,7 +2127,7 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 'filehist-current' => '현재',
 'filehist-datetime' => '날짜/시간',
 'filehist-thumb' => '섬네일',
-'filehist-thumbtext' => '$1 판의 일',
+'filehist-thumbtext' => '$1 판의 섬네일',
 'filehist-nothumb' => '섬네일 없음',
 'filehist-user' => '사용자',
 'filehist-dimensions' => '크기',
@@ -2791,7 +2794,7 @@ $1',
 'nolinkshere' => "'''[[:$1]]''' 문서를 가리키는 문서가 없습니다.",
 'nolinkshere-ns' => "선택한 이름공간에는 '''[[:$1]]''' 문서를 가리키는 문서가 없습니다.",
 'isredirect' => '넘겨주기 문서',
-'istemplate' => '포함',
+'istemplate' => '끼워넣기',
 'isimage' => '파일 사용 중',
 'whatlinkshere-prev' => '{{PLURAL:$1|이전|이전 $1개}}',
 'whatlinkshere-next' => '{{PLURAL:$1|다음|다음 $1개}}',
@@ -2840,6 +2843,7 @@ $1',
 차단된 사용자 목록은 [[Special:BlockList|여기]]에서 볼 수 있습니다.',
 'ipb-blockingself' => '자기 자신을 차단하려고 합니다! 정말로 실행할까요?',
 'ipb-confirmhideuser' => '사용자를 차단하면서 "사용자 숨기기" 설정을 선택했습니다. 모든 기록에서 이 사용자의 사용자 이름을 숨기게 됩니다. 정말로 계정을 숨기시겠습니까?',
+'ipb-confirmaction' => '그것을 정말로 하기 원한다면 아래에 있는 "{{int:ipb-confirm}}" 부분에 체크하세요',
 'ipb-edit-dropdown' => '차단 이유 목록 편집하기',
 'ipb-unblock-addr' => '$1 차단 해제하기',
 'ipb-unblock' => '사용자 또는 IP 주소 차단 해제하기',
@@ -3197,9 +3201,9 @@ $2',
 'tooltip-n-portal' => '프로젝트에 대해 여러분이 할 수 있고, 정보를 찾을 수 있는 곳',
 'tooltip-n-currentevents' => '최근의 소식 알아 보기',
 'tooltip-n-recentchanges' => '위키의 최근 바뀜 목록',
-'tooltip-n-randompage' => '임의 문서 기',
+'tooltip-n-randompage' => '임의 문서 불러오기',
 'tooltip-n-help' => '도움말',
-'tooltip-t-whatlinkshere' => '여기를 링크한 모든 위키 문서의 목록',
+'tooltip-t-whatlinkshere' => '여기를 가리키는 모든 위키 문서의 목록',
 'tooltip-t-recentchangeslinked' => '이 문서에서 링크한 문서의 최근 바뀜',
 'tooltip-feed-rss' => '이 문서의 RSS 피드',
 'tooltip-feed-atom' => '이 문서의 Atom 피드',
@@ -3223,7 +3227,7 @@ $2',
 'tooltip-save' => '바뀐 내용 저장하기',
 'tooltip-preview' => '바뀜을 미리 봅니다. 저장하기 전에 미리 보기를 해주세요!',
 'tooltip-diff' => '자신이 바꾼 내용 보기',
-'tooltip-compareselectedversions' => '이 문서에서 선택한 두 판간의 차이를 비교',
+'tooltip-compareselectedversions' => '이 문서에서 선택한 두 판 간의 차이를 비교',
 'tooltip-watch' => '이 문서를 주시문서 목록에 추가',
 'tooltip-watchlistedit-normal-submit' => '항목 제거하기',
 'tooltip-watchlistedit-raw-submit' => '주시문서 목록 새로 고침',
@@ -3344,7 +3348,7 @@ $2',
 'markaspatrolleddiff' => '검토한 문서로 표시',
 'markaspatrolledtext' => '이 문서를 검토한 것으로 표시',
 'markedaspatrolled' => '검토한 문서로 표시',
-'markedaspatrolledtext' => '[[:$1]] 문서의 선택한 판을 검토한 것으로 표시하였습니다.',
+'markedaspatrolledtext' => '[[:$1]] 문서의 선택한 판을 순찰한 것으로 표시하였습니다.',
 'rcpatroldisabled' => '최근 바뀜 검토 기능 비활성화됨',
 'rcpatroldisabledtext' => '최근 바뀜 검토 기능은 현재 비활성화되어 있습니다.',
 'markedaspatrollederror' => '검토한 것으로 표시할 수 없습니다.',
@@ -3450,8 +3454,8 @@ Variants for Chinese language
 
 # Metadata
 'metadata' => '메타데이터',
-'metadata-help' => '이 파일은 그 파일을 만들거나 디지털화하는 데 사용되는 카메라나 스캐너에서 기록한 부가 정보를 가지고 있습니다.
\94\84ë¡\9cê·¸ë\9e¨ì\97\90ì\84\9c í\8c\8cì\9d¼ì\9d\84 í\8e¸ì§\91í\95  경우, 새로 저장한 파일에 일부 부가 정보가 빠질 수 있습니다.',
+'metadata-help' => '이 파일은 카메라나 스캐너가 파일을 만들거나 디지털화하는 데 사용하기위해 기록한 부가 정보를 포함하고 있습니다.
\94\84ë¡\9cê·¸ë\9e¨ì\97\90ì\84\9c í\8c\8cì\9d¼ì\9d\84 í\8e¸ì§\91í\95\9c 경우, 새로 저장한 파일에 일부 부가 정보가 빠질 수 있습니다.',
 'metadata-expand' => '자세한 정보 보이기',
 'metadata-collapse' => '자세한 정보 숨기기',
 'metadata-fields' => '파일 메타데이터 표가 접혀 있을 때, 이 메시지에 올라와 있는 다음 속성값만이 기본적으로 보이게 됩니다.
@@ -4063,7 +4067,9 @@ $5
 'version-ext-colheader-license' => '라이선스',
 'version-ext-colheader-description' => '설명',
 'version-ext-colheader-credits' => '저자',
+'version-license-title' => '$1 사용을 위한 라이센스',
 'version-license-not-found' => '이 확장기능에 대한 라이선스 세부 정보가 없습니다.',
+'version-credits-title' => '$1의 작성자',
 'version-credits-not-found' => '이 확장기능에 대한 크레딧 세부 정보가 없습니다.',
 'version-poweredby-credits' => "이 위키는 '''[https://www.mediawiki.org/ MediaWiki]'''(미디어위키)를 기반으로 작동합니다. Copyright © 2001-$1 $2.",
 'version-poweredby-others' => '그 외 다른 개발자',
@@ -4285,6 +4291,7 @@ $5
 'api-error-overwrite' => '이미 있는 파일을 덮어쓸 수 없습니다.',
 'api-error-stashfailed' => '내부 오류: 서버가 임시 파일을 저장하지 못했습니다.',
 'api-error-publishfailed' => '내부 오류: 서버가 임시 파일을 게시하지 못했습니다.',
+'api-error-stasherror' => '파일을 안전한 곳으로 업로드 하는 동안 오류가 발생했습니다.',
 'api-error-timeout' => '서버가 제 시간 내에 응답하지 않았습니다.',
 'api-error-unclassified' => '알 수 없는 오류가 발생했습니다.',
 'api-error-unknown-code' => '알 수 없는 오류: "$1"',
@@ -4341,4 +4348,6 @@ $5
 'expand_templates_generate_rawhtml' => '원본 HTML 보이기',
 'expand_templates_preview' => '미리 보기',
 
+# Unknown messages
+'uploadinvalidxml' => '이 업로드 된 파일의 XML 구문은 분석할 수 없습니다.',
 );
index 8a90e90..d8b6b47 100644 (file)
@@ -1419,7 +1419,8 @@ $1 {{PLURAL:$1|1=символдан|символладан}} кеб болург
 'recentchanges-label-minor' => 'Бу гитче тюрлениудю',
 'recentchanges-label-bot' => 'Бу тюрлендириуню бот этгенди',
 'recentchanges-label-unpatrolled' => 'Бу тюрлендириу алкъын патруль этилинмегенди',
-'recentchanges-legend-newpage' => '$1 — джангы бет',
+'recentchanges-label-plusminus' => 'Бетни ёлчеми быллай бир байтха тюрленнгенди',
+'recentchanges-legend-newpage' => '(къарагъыз: [[Special:NewPages|джангы бетлени тизмеси]])',
 'rcnotefrom' => 'Тюбюрекде <strong>$2</strong> башлаб (<strong>$1</strong> дери) тюрлендириуле кёрюнедиле',
 'rclistfrom' => '$1 башлаб джангы тюрлениулени кёргюз',
 'rcshowhideminor' => 'гитче тюрлендириулени $1',
@@ -1447,9 +1448,9 @@ $1 {{PLURAL:$1|1=символдан|символладан}} кеб болург
 'rc-old-title' => 'биринчи «$1» деб къуралгъан',
 
 # Recent changes linked
-'recentchangeslinked' => 'Байлам тюрлениуле',
+'recentchangeslinked' => 'Байламлы тюрлениуле',
 'recentchangeslinked-feed' => 'Байламлы тюрлениуле',
-'recentchangeslinked-toolbox' => 'Байламлы тюрлендириуле',
+'recentchangeslinked-toolbox' => 'Байлам тюрлениуле',
 'recentchangeslinked-title' => '$1 бет бла байламлы тюрлендириуле',
 'recentchangeslinked-summary' => "Белгиленнген бет (неда белгиленнген категориягъа киргенле) джиберген бетледе джангы тюрлениулени тизмеси.
 [[Special:Watchlist|Кёзде тургъан тизмеге]] кирген бетле '''чертилибдиле'''.",
index c059edf..91c5f07 100644 (file)
@@ -301,12 +301,12 @@ $messages = array(
 'december-date' => 'Disiembre $1',
 
 # Categories related messages
-'pagecategories' => '{{PLURAL:$1|Kateggoría|Kateggorías}}',
-'category_header' => 'Artíkolos en la kateggoría "$1"',
-'subcategories' => 'Sòkategoriyas',
-'category-media-header' => 'Arxivos de multimedya en la kateggoría "$1"',
-'category-empty' => "''Esta katēggoría oy día, no contiene ni artícůlos ni arxivos de multimedya''",
-'hidden-categories' => '{{PLURAL:$1|Kateggoría escondida|Kateggorías escondidas}}',
+'pagecategories' => '{{PLURAL:$1|Kategoría|Kategorías}}',
+'category_header' => 'Artíkolos en la kategoría "$1"',
+'subcategories' => 'Sòkategorías',
+'category-media-header' => 'Dosyas de multimedya en la kategoría "$1"',
+'category-empty' => "''Esta kategoría oy día, no contiene ni hojas ni dosyas de multimedya''",
+'hidden-categories' => '{{PLURAL:$1|Kategoría escondida|Kategorías escondidas}}',
 'hidden-category-category' => 'Katēggorías escondidas',
 'category-subcat-count' => '{{PLURAL:$2|Esta katēggoría contiene sólo una baxo-katēggoría:|Esta katēggoría contiene {{PLURAL:$1|esta baxo-katēggoría aquí abaxo|$1 baxo-katēggorías aquí abaxo}}, de un total de $2 baxo-katēggorías:}}',
 'category-subcat-count-limited' => 'Esta katēggoría contiene {{PLURAL:$1|la baxo-katēggoría venidera|$1 baxo-katēggorías venideras}}.',
@@ -328,7 +328,7 @@ $messages = array(
 'mypage' => 'Hoja',
 'mytalk' => 'Mi diskusyon',
 'anontalk' => 'Diskusyón para este adresso de IP',
-'navigation' => 'Navigasyon',
+'navigation' => 'Navigación',
 'and' => '&#32;i',
 
 # Cologne Blue skin
@@ -344,11 +344,11 @@ $messages = array(
 'vector-action-addsection' => 'Ajustar sujeto',
 'vector-action-delete' => 'Efassar',
 'vector-action-move' => 'Taşirear',
-'vector-action-protect' => 'Guardar',
+'vector-action-protect' => 'Guadrar',
 'vector-action-undelete' => 'Traer atrás',
 'vector-action-unprotect' => 'Trocar proteksyon',
 'vector-simplesearch-preference' => 'Aktivar barra de buskida simplifikada (solamente kon aspekto Vector)',
-'vector-view-create' => 'Krear',
+'vector-view-create' => 'Criar',
 'vector-view-edit' => 'Trocar',
 'vector-view-history' => 'Ver la istoria',
 'vector-view-view' => 'Meldar',
@@ -363,26 +363,26 @@ $messages = array(
 'tagline' => 'De {{SITENAME}}',
 'help' => 'Ayudo',
 'search' => 'Buxcar',
-'searchbutton' => 'Bushkar',
+'searchbutton' => 'Buxcar',
 'go' => 'Ir',
 'searcharticle' => 'Ir',
 'history' => 'La istoria de la hoja',
 'history_short' => 'Istoria',
 'updatedmarker' => 'trocado desde mi visita de alcavo',
-'printableversion' => 'Forma apropiada para imprimir',
+'printableversion' => 'Forma para imprimir',
 'permalink' => 'Atamiento permanente',
 'print' => 'Imprimir',
 'view' => 'Ver',
 'edit' => 'Trocar',
-'create' => 'Krear',
+'create' => 'Criar',
 'editthispage' => 'Trocar esta hoja',
 'create-this-page' => 'Criar esta hoja',
-'delete' => 'Efasar',
+'delete' => 'Efaçar',
 'deletethispage' => 'Efassar esta hoja',
 'undeletethispage' => 'Restorar esta pajina',
 'undelete_short' => 'Traer atrás $1 {{PLURAL:$1|trocamientos|trocamientos}}',
 'viewdeleted_short' => 'Ver {{PLURAL:$1|un trocamiento efassado|$1 trocamientos efassados}}',
-'protect' => 'Guardar',
+'protect' => 'Guadrar',
 'protect_change' => 'trocar el guardadijo',
 'protectthispage' => 'Guardar esta hoja',
 'unprotect' => 'Trocar guardadijo',
@@ -412,8 +412,8 @@ $messages = array(
 'viewcount' => 'Este pajina fue vijitado {{PLURAL:$1|una vez|$1 vezes}}.',
 'protectedpage' => 'Hoja guardada',
 'jumpto' => 'Saltar a:',
-'jumptonavigation' => 'navigasyon',
-'jumptosearch' => 'bushkar',
+'jumptonavigation' => 'navigación',
+'jumptosearch' => 'buxcar',
 'view-pool-error' => 'Diskulpe, los servidores estan sovrekargado en est momento.
 Ay demaziado usuarios estan aprovando a ver esta pajina.
 Aspera un momento antes de aprovar esta pajina de muevo.
@@ -430,8 +430,8 @@ $1',
 'copyrightpage' => '{{ns:project}}:Derechos de autor',
 'currentevents' => 'Novedades',
 'currentevents-url' => 'Project:Novedades',
-'disclaimers' => 'Refuso de responsabilitá',
-'disclaimerpage' => 'Project:Refuso de responsabilitá jeneral',
+'disclaimers' => 'Refuzo de responsabilitá',
+'disclaimerpage' => 'Project:Refuzo de responsabilitá jeneral',
 'edithelp' => '¿Cómo se la troca?',
 'helppage' => 'Help:Contènidos',
 'mainpage' => 'La Primera Hoja',
@@ -439,7 +439,7 @@ $1',
 'policy-url' => 'Project:Politikas',
 'portal' => 'Portal de la komunitá',
 'portal-url' => 'Project:Portal de la komunitá',
-'privacy' => 'Principio de particòlaridad',
+'privacy' => 'Prencipio de partikolaridad',
 'privacypage' => 'Project:Principio de particòlaridad',
 
 'badaccess' => 'Yerro de permissión',
@@ -457,7 +457,7 @@ $1',
 'newmessageslinkplural' => '{{PLURAL:$1|un muevo mesaje|999=mesajes muevos}}',
 'newmessagesdifflinkplural' => '{{PLURAL:$1|ulitmo kambio|999=ultimos kambios}}',
 'youhavenewmessagesmulti' => 'Tienes messajes nuevos en $1',
-'editsection' => 'troca',
+'editsection' => 'trocar',
 'editold' => 'trocar',
 'viewsourceold' => 'Ver su manadero',
 'editlink' => 'trocar',
@@ -484,15 +484,15 @@ $1',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-main' => 'Hoja',
-'nstab-user' => 'Pajina de usuario',
+'nstab-user' => 'Hoja de kullaneador',
 'nstab-media' => 'Hoja de Meddia',
 'nstab-special' => 'Hoja especial',
 'nstab-project' => 'Hoja del proyecto',
-'nstab-image' => 'Archivo',
+'nstab-image' => 'Dosya',
 'nstab-mediawiki' => 'Messaj',
 'nstab-template' => 'Şablón',
 'nstab-help' => 'Ayudo',
-'nstab-category' => 'Kategoriya',
+'nstab-category' => 'Kategoría',
 
 # Main script and global functions
 'nosuchaction' => 'No egziste esa aksyon',
@@ -519,12 +519,12 @@ Esto puede indikar un yerro en la programa.',
 'readonlytext' => 'La base de datos esta blokeada a muevas entradas i otras modifikasyones,probablemente para mantenemento rutinas, Kuando akava se enkontra dispozible.
 
 El administrador ke blokeo dio esta esplikasyon: $1',
-'missing-article' => 'La base de datos no topó el teksto de una pajina ke se debe topar, llamada "$1" $2.
+'missing-article' => 'La basa de dados no topó el teksto de la hoja llamada "$1" $2.
 
-Jeneralmente, esto se cavsa de un "dif" anakróniko o de una enlase de la istoria de una pajina que se efaso.
+En lo mas muncho, esto se cavsa de un "dif" anakróniko u de un atamiento de la istoria de una hoja que se efaçó.
 
-Si esto no es el cavso, puede ser que topates un yerro en la programa.
-Si puede avisar [[Special:ListUsers/sysop|administrador]], anotando la URL.',
+Si esto no es el cavso, puede ser que topates una chincha en el lojikal.
+Alora, avisa un [[Special:ListUsers/sysop|administrador]] si puede ser, también escriviéndolo la URL.',
 'missingarticle-rev' => '(nº. de revisión: $1)',
 'missingarticle-diff' => '(Dif.: $1, $2)',
 'readonly_lag' => 'La base de datos se a blokeado mientres los servidores se sinkronizan',
@@ -572,31 +572,31 @@ Para anyadir o kambiar traduksyones para todos los vikis, uza [//translatewiki.n
 
 # Login and logout pages
 'welcomeuser' => 'Bienvinidos, $1',
-'yourname' => 'Nombre de usuario:',
+'yourname' => 'Nombre de kullaneador:',
 'userlogin-yourname' => 'Nombre de usuario',
 'userlogin-yourname-ph' => 'Eskrive tu nombre de usuario',
 'createacct-another-username-ph' => 'Eskrive el nombre de usuario',
-'yourpassword' => 'Kontrasenya:',
+'yourpassword' => 'Kóddiche:',
 'userlogin-yourpassword' => 'Kontrasenya',
 'userlogin-yourpassword-ph' => 'Eskriva tu kontrasenya',
 'createacct-yourpassword-ph' => 'Eskriva una kontrasenya',
-'yourpasswordagain' => 'Entra de muevo la kontrasenya',
+'yourpasswordagain' => 'Entra de muevo el kóddiche:',
 'createacct-yourpasswordagain' => 'Konfirme contrasenya',
 'createacct-yourpasswordagain-ph' => 'Eskrive la kontrasenya de muevo',
-'remembermypassword' => 'Acórdate de mi entrada de usador en este bilgisayar/orddênador (por un maksimum de {{PLURAL:$1|día|días}})',
+'remembermypassword' => 'Acódrate de mi entrada de kullaneador en este navigador (por un maksimum de {{PLURAL:$1|día|días}})',
 'yourdomainname' => 'Tu dominyo:',
 'password-change-forbidden' => 'No se puede kambiar contrasenyas en este viki.',
 'login' => 'Entrar',
-'nav-login-createaccount' => 'Entrar / krear un kuento',
+'nav-login-createaccount' => 'Entrar / criar un kuento',
 'loginprompt' => 'Kale tener "cookies" aktivadas enel navegador para enrejistrarse en {{SITENAME}}',
-'userlogin' => 'Entrar / Registrarse',
+'userlogin' => 'Entrar / Criar cuento',
 'logout' => 'Salir',
 'userlogout' => 'Salir',
 'userlogin-noaccount' => 'No tiene un kuento?',
 'userlogin-joinproject' => 'Abonar {{SITENAME}}',
 'nologin' => "¿No tienes un cuento? '''$1'''.",
-'nologinlink' => 'Krear un kuento',
-'createaccount' => 'Krear un kuento',
+'nologinlink' => 'Criar un kuento',
+'createaccount' => 'Criar un cuento',
 'gotaccount' => "¿Ya tienes un cuento? '''$1'''.",
 'gotaccountlink' => 'Entrar',
 'userlogin-resetlink' => 'Olvidates tus detalyos de akseso?',
@@ -621,7 +621,7 @@ Eskoje un nombre diferente.',
 'createacct-error' => 'Yerro de kreasyon de kuento',
 'createaccounterror' => 'No se pudo crear el cuento: $1',
 'password-name-match' => 'Tu contrasenya kale ser diferente de tu usuario.',
-'mailmypassword' => 'Restableser kontrasenya',
+'mailmypassword' => 'Restableser kóddiche',
 'mailerror' => 'Falta al embiar korreo: $1',
 'emailconfirmlink' => 'Confirma su adderesso de letra electrónica',
 'accountcreated' => 'Cuento creado',
@@ -665,7 +665,7 @@ Kontrasenya temporal: $2',
 'bold_tip' => 'Teksto reforçado',
 'italic_sample' => 'Teksto aladado',
 'italic_tip' => 'Teksto aladado',
-'link_sample' => 'Título del enlase',
+'link_sample' => 'Títolo del atamiento',
 'link_tip' => 'Link interno',
 'extlink_sample' => 'http://www.example.com Títolo del atamiento',
 'extlink_tip' => 'Link eksterno (acόrdate de ajustar el prefiks http://)',
@@ -674,7 +674,7 @@ Kontrasenya temporal: $2',
 'nowiki_sample' => 'Escribid aquí texto sin formato',
 'nowiki_tip' => 'Iñorar el formato wiki',
 'image_tip' => 'Imagen incorporada',
-'media_tip' => 'Enlase de archivo',
+'media_tip' => 'Atamiento de la dosya',
 'sig_tip' => 'Firma, data i ora',
 'hr_tip' => 'Liña orizontala (úsala de vez en cuando)',
 
@@ -725,8 +725,8 @@ Los tus trokamientos no se tienen guadrados!",
 'templatesused' => '{{PLURAL:$1|El şablón usado|Los şablones usados}} en esta hoja:',
 'templatesusedpreview' => '{{PLURAL:$1|El xabblón usado|Los xabblones usados}} en esta vista:',
 'template-protected' => '(guadrada)',
-'template-semiprotected' => '(media guardada)',
-'hiddencategories' => 'Esta hoja es un miembro de {{PLURAL:$1|1 kateggoría escondida|$1 kateggorías escondidas}}:',
+'template-semiprotected' => '(media guadrada)',
+'hiddencategories' => 'Esta hoja es un miembro de {{PLURAL:$1|1 kategoría escondida|$1 kategorías escondidas}}:',
 'nocreate-loggedin' => 'No tienes el permisso de creas hojas nuevas.',
 'permissionserrorstext-withaction' => 'No tienes el permiso para $2, por las {{PLURAL:$1|razón|razones}} venideras:',
 'recreate-moveddeleted-warn' => "'''Aviso: Estas kriando una oja la kuala fue efassada antes.'''
@@ -762,7 +762,7 @@ Este o estos kampos no van ser amostrados",
 'revisionasof' => 'Enderechamiento a las $1',
 'revision-info' => 'Revision en data $1 por $2',
 'previousrevision' => '← Enderechamiento de antes',
-'nextrevision' => 'Rêvisión venidera →',
+'nextrevision' => 'Revizión venidera →',
 'currentrevisionlink' => 'Revisión actual',
 'cur' => 'act',
 'next' => 'venidero',
@@ -774,7 +774,7 @@ Leyenda: (act) = diferencias con la versión actual,
 (prev) = diferencias con la versión previa, M = edición menor",
 'history-fieldset-title' => 'Navegar en la istoria',
 'history-show-deleted' => 'Sólamente efassado',
-'histfirst' => 'Lo mas antiko',
+'histfirst' => 'Lo mas viejo',
 'histlast' => 'Lo mas muevo',
 'historysize' => '({{PLURAL:$1|1 byte|$1 bytes}})',
 'historyempty' => '(vazío)',
@@ -794,7 +794,7 @@ Leyenda: (act) = diferencias con la versión actual,
 'revdelete-radio-set' => 'Eskondido',
 'revdelete-radio-unset' => 'Visible',
 'revdelete-log' => 'Razon:',
-'revdel-restore' => 'troca la visibilitá',
+'revdel-restore' => 'troca la vizibilitá',
 'pagehist' => 'La storia de la hoja',
 'revdelete-otherreason' => 'Otro razon/razon adisiyonal',
 'revdelete-reasonotherlist' => 'Otra razón',
@@ -809,13 +809,13 @@ Leyenda: (act) = diferencias con la versión actual,
 # Diffs
 'history-title' => 'Istorya de trokamientos para «$1»',
 'lineno' => 'Liña $1:',
-'compareselectedversions' => 'Comparar versiones escogidas',
+'compareselectedversions' => 'Comparar versiones escojidas',
 'editundo' => 'des-hazer',
 'diff-multi' => '(No {{PLURAL:$1|es amostrado un trokamiento intermedio echo|son amostrados $1 trokamientos intermedios echos}} por {{PLURAL:$2|un usador|$2 usadores}})',
 
 # Search results
-'searchresults' => 'Resultados de la bushkida',
-'searchresults-title' => 'Resultados de la bushkida de «$1»',
+'searchresults' => 'Resultados de la búxquida',
+'searchresults-title' => 'Resultados de la búxquida de «$1»',
 'notextmatches' => 'No se pudo topar en dinguna hoja.',
 'prevn' => '{{PLURAL:$1|$1}} de antes',
 'nextn' => '{{PLURAL:$1|$1}} venideras',
@@ -824,17 +824,17 @@ Leyenda: (act) = diferencias con la versión actual,
 'shown-title' => 'Amostrar $1 {{PLURAL:$1|resultado|resultados}} por hoja',
 'viewprevnext' => 'Ver ($1 {{int:pipe-separator}} $2) ($3).',
 'searchmenu-exists' => 'Egziste una oja yamada "[[:$1]]" en esta viki',
-'searchmenu-new' => "'''Krear la pajina «[[:$1]]» en esta viki!'''{{PLURAL:$2|0=|Tambien ver la pajina topado kon tu bushkida.|Tambier ver la resulta de tu bushkida.}}",
-'searchprofile-articles' => 'Pajinas de kontenido',
+'searchmenu-new' => "'''Criar la hoja «[[:$1]]» en esta viki!'''{{PLURAL:$2|0=|También ver la hoja topado kon tu búxquida.|Tambier ver la resulta de tu búxquida.}}",
+'searchprofile-articles' => 'Hojas de contènido',
 'searchprofile-project' => 'Hojas de ayudo y hojas de projeto',
 'searchprofile-images' => 'Multimedya',
 'searchprofile-everything' => 'Todo',
 'searchprofile-advanced' => 'Adelantado',
-'searchprofile-articles-tooltip' => 'Bushkar en $1',
-'searchprofile-project-tooltip' => 'Bushkar en $1',
-'searchprofile-images-tooltip' => 'Bushkar archivos',
+'searchprofile-articles-tooltip' => 'Buxcar en $1',
+'searchprofile-project-tooltip' => 'Buxcar en $1',
+'searchprofile-images-tooltip' => 'Buxcar dosyas',
 'searchprofile-everything-tooltip' => 'Bushkar en todo el kontenido (i mismo en las hojas de diskusyón)',
-'searchprofile-advanced-tooltip' => 'Buscar en espacios de nombres particůlares',
+'searchprofile-advanced-tooltip' => 'Buxcar en espacios de nombres particòlares',
 'search-result-size' => '$1 ({{PLURAL:$2|1 biervo|$2 biervos}})',
 'search-result-category-size' => '{{PLURAL:$1|1 miembro|$1 miembros}} ({{PLURAL:$2|1 basho-kateggoria|$2 basho-kateggoria}}, {{PLURAL:$3|1 dossia|$3 dossias}})',
 'search-redirect' => '(direksión desde $1)',
@@ -846,7 +846,7 @@ Leyenda: (act) = diferencias con la versión actual,
 'searchrelated' => 'lisionado',
 'searchall' => 'todos',
 'showingresultsheader' => "{{PLURAL:$5|Resultado '''$1''' de '''$3'''|Resultados '''$1-$2''' de '''$3'''}} para '''$4'''",
-'search-nonefound' => 'No ay resultados que acumplan los criterios de la búsqueda.',
+'search-nonefound' => 'No ay resultados que acumplan los criterios de la búxquida.',
 'powersearch-legend' => 'Búsqueda adelantada',
 'powersearch-ns' => 'Busca en los espacios de nombres:',
 'powersearch-redir' => 'Mostra las redirecciones',
@@ -856,7 +856,7 @@ Leyenda: (act) = diferencias con la versión actual,
 
 # Preferences page
 'preferences' => 'Preferencias',
-'mypreferences' => 'Las mis preferensias',
+'mypreferences' => 'Preferencias',
 'prefs-edits' => 'Numero de edisyones:',
 'prefs-skin' => 'Vista',
 'skin-preview' => 'Previstear',
@@ -884,7 +884,7 @@ Leyenda: (act) = diferencias con la versión actual,
 'timezoneregion-pacific' => 'Oseano Pasifiko',
 'prefs-searchoptions' => 'Bushkar',
 'prefs-files' => 'Dosyas',
-'youremail' => 'Korreo elektroniko:',
+'youremail' => 'Letral:',
 'username' => '{{GENDER:$1|Nombre de usuario}}:',
 'yourrealname' => 'Nombre verdadero:',
 'yourlanguage' => 'Lengua:',
@@ -957,7 +957,7 @@ Leyenda: (act) = diferencias con la versión actual,
 'recentchanges-legend' => 'Opciones encima de los trocamientos frescos',
 'recentchanges-summary' => 'Perseguid en esta hoja, los trocamientos de alcabo realizados en la Viki.',
 'recentchanges-feed-description' => 'Perseguir los trocamientos más nuevos en el viki en este feed.',
-'recentchanges-label-newpage' => 'Este trokamiento krio una mueva ója',
+'recentchanges-label-newpage' => 'Este trocamiento crió una mueva hoja',
 'recentchanges-label-minor' => 'Esta es un trocamiento chiquitico',
 'recentchanges-label-bot' => 'Este trokamiento fue echo por un bot',
 'recentchanges-label-unpatrolled' => 'Este trocamiento no está akavidado',
@@ -968,12 +968,12 @@ Leyenda: (act) = diferencias con la versión actual,
 'rcshowhidebots' => '$1 bots',
 'rcshowhideliu' => '$1 kullaneadores enrezhistrados',
 'rcshowhideanons' => '$1 kullaneadores anonimes',
-'rcshowhidepatr' => '$1 trokamientos akavidados',
+'rcshowhidepatr' => '$1 trocamientos akavidados',
 'rcshowhidemine' => '$1 mis ediciones',
 'rclinks' => 'Ver los dal cavo $1 trocamientos en los dal cavo $2 días.<br />$3',
 'diff' => 'dif',
 'hist' => 'ist',
-'hide' => 'Eskonder',
+'hide' => 'Esconder',
 'show' => 'Amostrar',
 'minoreditletter' => 'ch',
 'newpageletter' => 'N',
@@ -987,13 +987,13 @@ Leyenda: (act) = diferencias con la versión actual,
 'recentchangeslinked-feed' => 'Trocamientos conectados',
 'recentchangeslinked-toolbox' => 'Trocamientos relatados',
 'recentchangeslinked-title' => 'Los trocamientos relacionados con "$1"',
-'recentchangeslinked-summary' => "Esto es la lista de los trocamientos de alcavo de las hojas que relatan a una hoja particòlar (o de los miembros de la kategoriya particòlar).
+'recentchangeslinked-summary' => "Esto es la lista de los trocamientos dalcavo de las hojas que relatan a una hoja particòlar (o de los miembros de la kategoría particòlar).
 Las hojas en tu [[Special:Watchlist|lista de akavidamiento]] son '''reforçadas'''.",
 'recentchangeslinked-page' => 'Nombre de la hoja',
 'recentchangeslinked-to' => 'Amostra los trocamientos freskos en lugar de la hoja indicada',
 
 # Upload
-'upload' => 'Suvir un archivo',
+'upload' => 'Suvir una dosya',
 'uploadlogpage' => 'Subidas de arxivos',
 'filename' => 'Nombre de archivo',
 'filedesc' => 'Somario',
@@ -1001,7 +1001,7 @@ Las hojas en tu [[Special:Watchlist|lista de akavidamiento]] son '''reforçadas'
 'filesource' => 'Fuente:',
 'filename-tooshort' => 'El nombre del archivo es muy kurto.',
 'savefile' => 'Guardar archivo',
-'uploadedimage' => 'subió «[[$1]]»',
+'uploadedimage' => 'suvió «[[$1]]»',
 
 # File backend
 'backend-fail-notexists' => 'El archivo $1 no egziste.',
@@ -1010,7 +1010,7 @@ Las hojas en tu [[Special:Watchlist|lista de akavidamiento]] son '''reforçadas'
 # img_auth script messages
 'img-auth-nofile' => 'El archivo "$1" no egziste.',
 
-'license' => 'Lesensia:',
+'license' => 'Lecencia:',
 'license-header' => 'Lesensiamyénto',
 
 # Special:ListFiles
@@ -1025,7 +1025,7 @@ Las hojas en tu [[Special:Watchlist|lista de akavidamiento]] son '''reforçadas'
 'listfiles-latestversion-no' => 'No',
 
 # File description page
-'file-anchor-link' => 'Archivo',
+'file-anchor-link' => 'Dosya',
 'filehist' => 'La istoria de la dosya',
 'filehist-help' => 'Klika encima de una data/ora para vel la dosya desta data.',
 'filehist-revert' => 'aboltar',
@@ -1034,7 +1034,7 @@ Las hojas en tu [[Special:Watchlist|lista de akavidamiento]] son '''reforçadas'
 'filehist-thumb' => 'Minyatura',
 'filehist-thumbtext' => 'Minyatura de la versión á las $1',
 'filehist-nothumb' => 'Sin minyatura',
-'filehist-user' => 'Usuario',
+'filehist-user' => 'Kullaneador',
 'filehist-dimensions' => 'Dimensiones',
 'filehist-filesize' => 'El boy de la dosya',
 'filehist-comment' => 'Comentario',
@@ -1135,7 +1135,7 @@ La descripción en su [$2 hoja de descripción del arxivo] está amostrada debax
 # Special:LinkSearch
 'linksearch' => 'Bushkida de enlases eksternos',
 'linksearch-ok' => 'Bushkar',
-'linksearch-line' => 'Atamiento para $1 en la ója $2',
+'linksearch-line' => 'Atamiento para $1 en la hoja $2',
 
 # Special:ListUsers
 'listusers-submit' => 'Amostrar',
@@ -1196,7 +1196,7 @@ en forma turable, ansí como todo su istoria.
 Si puede ser, confirma que de verdad queres hazer esto, que estás entendiendo las
 resultados, i que lo estás haziendo de acorddo con las [[{{MediaWiki:Policy-url}}|Políticas]].',
 'actioncomplete' => 'Aksion kompleta',
-'actionfailed' => 'Aksiyon sin reushitá',
+'actionfailed' => 'Aksión sin reuşitá',
 'deletedtext' => '"$1" fue efassado.
 Mira $2 para un registro de los efassados nuevos.',
 'dellogpage' => 'Registro de efassados',
@@ -1256,9 +1256,9 @@ A continuación se mostran las opciones actuales de la hoja '''$1''':",
 'blanknamespace' => '(Principal)',
 
 # Contributions
-'contributions' => 'Ajustamientos {{GENDER:$1|del usador|de la usadora}}',
+'contributions' => 'Ajustamientos {{GENDER:$1|del kullaneador|de la kullaneadera}}',
 'contributions-title' => 'Ajustamientos {{GENDER:$1|del usuario|de la usuaria}} $1',
-'mycontris' => 'Mis dados',
+'mycontris' => 'Mis donos',
 'contribsub2' => 'Para {{GENDER:$3|$1}}($2)',
 'uctop' => '(korriente)',
 'month' => 'Desde el mes (i antes):',
@@ -1269,34 +1269,34 @@ A continuación se mostran las opciones actuales de la hoja '''$1''':",
 'sp-contributions-uploads' => 'suvidas',
 'sp-contributions-logs' => 'enrejistros',
 'sp-contributions-talk' => 'Diskusyón',
-'sp-contributions-search' => 'Buscar ajustamientos',
+'sp-contributions-search' => 'Buxcar ajustamientos',
 'sp-contributions-username' => 'Adreso de IP o nombre de usuario:',
 'sp-contributions-toponly' => "Amostrar solo revisiones d'alkavo",
-'sp-contributions-submit' => 'Bushkar',
+'sp-contributions-submit' => 'Buxcar',
 
 # What links here
-'whatlinkshere' => 'Atamientos a esta hoja',
+'whatlinkshere' => 'Hojas atadas',
 'whatlinkshere-title' => 'Hojas que dan link a "$1"',
 'whatlinkshere-page' => 'Hoja:',
 'linkshere' => "Las hojas venideras dan link a '''[[:$1]]''':",
 'nolinkshere' => "Dinguna ója tiene atamientos kon '''[[:$1]]'''",
 'isredirect' => 'Hoja redirigida',
 'istemplate' => 'inclusión',
-'isimage' => 'enlase de archivo',
+'isimage' => 'atamiento de la dosya',
 'whatlinkshere-prev' => '{{PLURAL:$1|de antes|de antes $1}}',
 'whatlinkshere-next' => '{{PLURAL:$1|venidera|venideras $1}}',
-'whatlinkshere-links' => '← enlases',
+'whatlinkshere-links' => '← atamientos',
 'whatlinkshere-hideredirs' => '$1 redirecciones',
 'whatlinkshere-hidetrans' => '$1 inclusiones',
-'whatlinkshere-hidelinks' => '$1 enlases',
-'whatlinkshere-hideimages' => '$1 atamientos a imejes',
+'whatlinkshere-hidelinks' => '$1 atamientos',
+'whatlinkshere-hideimages' => '$1 atamientos a dosyas',
 'whatlinkshere-filters' => 'Filtres',
 
 # Block/unblock
 'blockip' => 'Bloquear usuario',
 'ipadressorusername' => 'Adreso de IP o nombre de usuario:',
 'ipbreason' => 'Razon:',
-'ipboptions' => '2 oras:2 hours,1 día:1 day,3 días:3 days,1 semana:1 week,2 semanas:2 weeks,1 mes:1 month,3 meses:3 months,6 meses:6 months,1 anyo:1 year,para siempre:infinite',
+'ipboptions' => '2 oras:2 hours,1 día:1 day,3 días:3 days,1 semana:1 week,2 semanas:2 weeks,1 mes:1 month,3 meses:3 months,6 meses:6 months,1 año:1 year,para siempre:infinite',
 'badipaddress' => 'Adreso de IP invalido',
 'ipblocklist' => 'Usuarios blokeados',
 'blocklist-reason' => 'Razon',
@@ -1305,10 +1305,10 @@ A continuación se mostran las opciones actuales de la hoja '''$1''':",
 'blocklink' => 'blokar',
 'unblocklink' => 'quitar el bloko',
 'change-blocklink' => 'trocar el bloko',
-'contribslink' => 'donos',
+'contribslink' => 'kontribüsyones',
 'emaillink' => 'embiar korreo elektroniko',
-'blocklogpage' => 'Bloqueos de usuarios',
-'blocklogentry' => 'bloqueó a [[$1]] $3 durante un tiempo de $2',
+'blocklogpage' => 'Blokos de kullaneadores',
+'blocklogentry' => 'blokó a [[$1]] $3 durante un tiempo de $2',
 'unblocklogentry' => 'desbloqueó a "$1"',
 'block-log-flags-nocreate' => 'desactivada la kreasyon de kuentos',
 'block-log-flags-hiddenname' => 'nombre de usuario eskondido',
@@ -1373,46 +1373,46 @@ Si puede ser, escoge otro nombre.',
 'importnopages' => 'No ay pajinas para importar.',
 
 # Tooltip help for the actions
-'tooltip-pt-userpage' => 'Tu pajina de usuario',
+'tooltip-pt-userpage' => 'Tu hoja de kullaneador',
 'tooltip-pt-mytalk' => 'Tu hoja de diskusyón',
 'tooltip-pt-preferences' => 'Mis preferencias',
 'tooltip-pt-watchlist' => 'La lista de los trocamientos acontècidos en las hojas akavidadas.',
-'tooltip-pt-mycontris' => 'La lista de tus àjustamientos',
+'tooltip-pt-mycontris' => 'La lista de tus donos',
 'tooltip-pt-login' => 'Te encorajamos de entrar ma no estás obligado',
-'tooltip-pt-logout' => 'Sal de tu cuento.',
+'tooltip-pt-logout' => 'Sal de tu cuento',
 'tooltip-ca-talk' => 'Diskusyón encima del artíkolo',
-'tooltip-ca-edit' => 'Puedes trocar esta hoja. Te rogamos, antes de enrejistrarla, echa una ojada en kullaneando el botón de previsteo',
-'tooltip-ca-addsection' => 'Empeça una nueva sección',
-'tooltip-ca-viewsource' => 'Esta hoja está guardada.
+'tooltip-ca-edit' => 'Puedes trocar esta hoja. Ma te rogamos para que eches una ojada (previsteo) antes de enrezhistrarla.',
+'tooltip-ca-addsection' => 'Empeça a un muevo kapítolo',
+'tooltip-ca-viewsource' => 'Esta hoja está guadrada.
 Puedes ver su manadero',
-'tooltip-ca-history' => 'Enderechamientos passados de esta hoja',
+'tooltip-ca-history' => 'Enderechamientos passados desta hoja',
 'tooltip-ca-protect' => 'Guardar esta hoja',
 'tooltip-ca-delete' => 'Efassar esta hoja',
 'tooltip-ca-move' => 'Taxirea (renombra) esta hoja',
 'tooltip-ca-watch' => 'Ajustar esta hoja a tu lista de akavidamientos',
-'tooltip-ca-unwatch' => 'Kita esta pajina de tu lista de escogidos',
-'tooltip-search' => 'Bushka en {{SITENAME}}',
-'tooltip-search-go' => 'Ir a la pajina con este nombre egzakto, si egziste.',
+'tooltip-ca-unwatch' => 'Quita esta hoja de tu lista de escojidos',
+'tooltip-search' => 'Buxca en {{SITENAME}}',
+'tooltip-search-go' => 'Ir a la hoja con este nombre egzakto, si egziste.',
 'tooltip-search-fulltext' => 'Buxca este teksto en las hojas',
-'tooltip-p-logo' => 'Vate a la primera hoja',
-'tooltip-n-mainpage' => 'Vijitar la primera hoja',
-'tooltip-n-mainpage-description' => 'Vijitar a la primera hoja',
-'tooltip-n-portal' => 'Encima del projeto, lo que puedes hazer y ánde topar todo',
-'tooltip-n-currentevents' => 'Jhaberes y acontècimientos de oy día',
-'tooltip-n-recentchanges' => 'Lista de los trocamientos muevos en el viki',
+'tooltip-p-logo' => 'Vijita la primera hoja',
+'tooltip-n-mainpage' => 'Vijitar la primera hoja',
+'tooltip-n-mainpage-description' => 'Vijita la primera hoja',
+'tooltip-n-portal' => 'Encima del projeto, lo que puedes hazer y ande topar todo',
+'tooltip-n-currentevents' => 'Jhaberes de oy día en ancho',
+'tooltip-n-recentchanges' => 'Lista de los trocamientos dalcavo en el viki',
 'tooltip-n-randompage' => 'Carga una hoja por azardo',
-'tooltip-n-help' => 'Para saver mas',
-'tooltip-t-whatlinkshere' => 'La lista de todas las hojas del viki que se atan con esta hoja',
+'tooltip-n-help' => 'Ambézate y topa ayudo',
+'tooltip-t-whatlinkshere' => 'Una lista de todas las hojas del viki que tienen atamientos a esta hoja',
 'tooltip-t-recentchangeslinked' => 'Los trocamientos muevos en las hojas atadas con esta hoja',
 'tooltip-feed-rss' => 'Sindicación RSS de esta hoja',
 'tooltip-feed-atom' => "Fuente de Atom d'esta hoja",
 'tooltip-t-contributions' => 'Ver la lista de ajustamientos de este usuario',
 'tooltip-t-emailuser' => 'A este usuario, mándale una letra electrόnica (ímey)',
-'tooltip-t-upload' => 'Suvir un archivo',
+'tooltip-t-upload' => 'Suve dosyas',
 'tooltip-t-specialpages' => 'Lista de todas las hojas especiales',
 'tooltip-t-print' => 'Forma apropiada para imprimir esta hoja',
 'tooltip-t-permalink' => 'Atamiento permanente a este enderechamiento de la hoja',
-'tooltip-ca-nstab-main' => 'Ve el artíkolo de contènido',
+'tooltip-ca-nstab-main' => 'Ve el artíkolo',
 'tooltip-ca-nstab-user' => 'Ver la pajina de usuario',
 'tooltip-ca-nstab-special' => 'Esta es una hoja especial, la hoja ya no se puede trocar',
 'tooltip-ca-nstab-project' => 'Ver la hoja del prodjekto',
@@ -1420,12 +1420,12 @@ Puedes ver su manadero',
 'tooltip-ca-nstab-template' => 'Ve el şablón',
 'tooltip-ca-nstab-category' => 'Ve la hoja de categoría',
 'tooltip-minoredit' => 'Márcalo como un trocamiento chiquitico',
-'tooltip-save' => 'Guardar los trocamientos',
+'tooltip-save' => 'Guadrar los trocamientos',
 'tooltip-preview' => 'Que previzualize sus trocamientos, ¡si puede ser, que use esto antes de enregistrar!',
 'tooltip-diff' => 'Mostra los trocamientos que él/ella hizo en el texhto.',
 'tooltip-compareselectedversions' => 'Ve las diferencias entre las dos versiones escogidas de esta hoja.',
-'tooltip-watch' => 'Ajusta esta hoja a tu lista de escogidas',
-'tooltip-rollback' => '«Abolta» abolta todas los trocamientos del usador de alcavo, sólo en klikando una vez.',
+'tooltip-watch' => 'Ajusta esta hoja a tu lista de escojidas',
+'tooltip-rollback' => '«Abolta» abolta todos los trocamientos del kullaneador dalcavo, sólo en klikando una vez.',
 'tooltip-undo' => '«Des-hazer» abolta este trocamiento y la avre en el modo de previsteo. Permete ajustar una razón en el somario.',
 'tooltip-summary' => 'Entrar un somaryo kurto',
 
@@ -1479,8 +1479,8 @@ Puedes ver su manadero',
 'bad_image_list' => 'El formato es ansina:
 
 Sólo elementos de lista (liñas empeçando con *) se toman en konsidherasyón.
-El primer atamiento de cada liña deve de atarse con una dosya negra (la dosya que se quere blokar).
-Los atamientos venideros que están en la misma liña se konsidheran como eksepsiones (yaani hojas ande la dosya puede aparecer encaxada en la liña)',
+El primer atamiento de cada liña se deve de atar a una dosya negra (la dosya que se quere blokar).
+Los atamientos venideros que están en la misma liña se konsidheran como eksepsiones (hojas, ande la dosya puede aparecer en la liña, ande se puede kullânear la dosya).',
 
 # Metadata
 'metadata' => 'Metadatos',
index 19c4b9e..540d1b0 100644 (file)
@@ -3753,6 +3753,7 @@ Dir kënnt och [[Special:EditWatchlist|de Standard Editeur benotzen]].",
 'version-ext-colheader-description' => 'Beschreiwung',
 'version-ext-colheader-credits' => 'Auteuren',
 'version-license-title' => 'Lizenz fir $1',
+'version-credits-title' => 'E spezielle Merci fir $1',
 'version-poweredby-credits' => "Dës Wiki funktionéiert mat '''[https://www.mediawiki.org/ MediaWiki]''', Copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'anerer',
 'version-poweredby-translators' => 'translatewiki.net Iwwersetzer',
index 503787f..6198405 100644 (file)
@@ -910,7 +910,7 @@ $messages = array(
 'categories' => 'Категорияр',
 
 # Special:LinkSearch
-'linksearch' => 'КЪецепатан элячIунар жугъурун',
+'linksearch' => 'Къецепатан элячӀунар жугъурун',
 'linksearch-ns' => 'Тlварарин генгвал:',
 'linksearch-ok' => 'Ахтармишун',
 'linksearch-line' => '$2-ай $1-аз элячlун',
index d57ec4a..3d38cf9 100644 (file)
@@ -376,6 +376,7 @@ $1',
 'viewsource' => 'سرچشمه نه بوينيت',
 'viewsource-title' => 'سرچشمه $1 بوينيت',
 'actionthrottled' => 'عمل جلوگئری بیه',
+'protectedpagetext' => 'دای بلگه نبوئه ویرایشت یا کاریا هنی بکید',
 'viewsourcetext' => 'شما تونیت سرچشمه ای بلگه نه بوینیت و دش ورداریت:',
 'viewyourtext' => 'شما تونیت سرچشمه ویرایشتیا تونه ای د بلگه بوینیت و دشو ورداریت',
 'mycustomcssprotected' => 'شما حق ناریت ای بلگه سی اس اس نه ویرایشت بکید',
@@ -434,6 +435,7 @@ $1',
 'createacct-emailoptional' => 'نشونی ايميل',
 'createacct-email-ph' => 'نوم نشون ايميلتونه وارد بكيت',
 'createacct-another-email-ph' => 'يه گل ايميل وارد بكيت',
+'createaccountmail' => 'د یه گل پاسورد موقتیه بختکی استفاده بکید و ونه سی یه گل نشونی ایمیل ویجه بفرسنیت',
 'createacct-realname' => 'نوم راستكی(مژبوری نيئ)',
 'createaccountreason' => 'دليل',
 'createacct-reason' => 'دليل',
@@ -455,9 +457,14 @@ $1',
 'nocookiesnew' => 'حساو کاروری راس بی،اما شما وامئن نیامایئته.{{نوم مالگه}} د کوکیا سی اومائن د سیستم کاروریا استفاده می که.کوکیا شما د کار افتائه.لطفن وا کارشو بونیت، اوسه وا نوم کاروری تازه و پسورد هنی بیایت وا مئن.',
 'nocookieslogin' => '{{نوم مالگه}} د کوکیا سی وامئن اومائن کاروریا استفاده می که. کوکیا شما د کار افتائه.
 لطف بکید د کارشو بونیت و دوواره تلاش بکید.',
+'nocookiesfornew' => 'حساو کاروری راس نبیه، سی یه ایما نتونیم سرچشمه ونه مئکم بکیم.
+مطمئن بوئیت که کوکیا فعال بینه، ای بلگه نه د نو سوار بکید و د نو تلاش بکید.',
 'noname' => 'شما یه گل نوم کاروری خو ناریت',
 'loginsuccesstitle' => 'اومائن د سيستم موفق بی',
 'loginsuccess' => 'شما ایسه وارد بیته {{SITENAME}} د دعنوان "$1".\'',
+'nosuchuser' => 'چنی کاروری و نوم  "$1" نئیش.
+نوم کاروری وه حرفیا حساس هئ.
+روشت نیسنن تونه وارسی بکید،یا [[ویجه:وامین اومائن کارور/ثوت نام کردن|یه گل حساو تازه راس بکید]].',
 'nosuchusershort' => 'چنو کاروری وا ای نوم $1 نی ئیش.
 نیسنن تونه دوواره نئری بکیتو',
 'nouserspecified' => 'شما باید یه نوم کارور اختصاص بئیتو',
@@ -480,6 +487,8 @@ $1',
 'accountcreated' => 'حساو راس بی',
 'createaccount-title' => 'حساو راس کرده سی  {{SITENAME}}',
 'usernamehasherror' => 'نوم کاربری نتونه شومل نیسه یا هش بوئه',
+'login-throttled' => 'شما ایسنی فره سی وامین اومائن تلاش کردیته.
+$1 لطفن سی تلاش هنی صبر بکید',
 'login-abort-generic' => 'اومائن وامین تو شکست حرد-شکست حرده',
 'loginlanguagelabel' => 'زون:$1',
 
@@ -634,6 +643,9 @@ $1',
 وه هئیش.',
 'defaultmessagetext' => 'متن پیغوم پیش فرض',
 'content-failed-to-parse' => 'د یک تیچیسن چیا مئن $2 د مدل $1:$3',
+'invalid-content-data' => 'دنسمنی مینونه نامعتور',
+'content-not-allowed-here' => ' مینونه"$1" سی بلگه [[$2]] اجازه نه دئه بیه',
+'editpage-notsupportedcontentformat-title' => 'شلک مینونه دماگری نبیه',
 
 # Content models
 'content-model-wikitext' => 'ويكی متن',
@@ -691,7 +703,9 @@ $2',
 'rev-deleted-user-contribs' => '[نوم کاروری یا نشونی آی پی جا وه جا بیه - چیا قام بیه د ور هوم یاریانه ویرایشت بکید]',
 'rev-delundel' => 'آلشت وضئيت ديئن',
 'rev-showdeleted' => 'نشو دائن',
+'revdelete-no-file' => 'فایل مشقص بیه وجود ناره.',
 'revdelete-show-file-submit' => 'هری',
+'revdelete-selected' => "'''{{جمی:$2|وانیری انتخاو بیه|وانیریا انتخاو بیه}} د[[:$1]]:'''",
 'revdelete-hide-text' => 'متن دوواره دیئن',
 'revdelete-hide-image' => 'چی یا مئن فایل قام کو',
 'revdelete-hide-name' => 'آرمون و انجوم گر نه قام بکید',
@@ -700,34 +714,57 @@ $2',
 'revdelete-radio-same' => 'آلشت نکید',
 'revdelete-radio-set' => 'قام بیه',
 'revdelete-radio-unset' => 'دیینی',
+'revdelete-unsuppress' => 'محدودیتیانه د وانیریا امباربیه جا وه جا بکید',
 'revdelete-log' => 'دلیل:',
+'revdelete-submit' => 'سی {{جمی:$1|وانیری|وانیریا}} انتخاو بیه وه کار بوریتو',
+'revdelete-success' => "'''دیئن وانیری وه خوئی وه هنگوم بی.'''",
+'revdelete-failure' => "'''دیئن وانیری وه خوئی وه هنگوم نبی:'''$1",
 'revdel-restore' => 'آلشت وضئيت ديئن',
 'pagehist' => 'ويرگار بلگه',
 'deletedhist' => 'ویرگار پاک بیه',
 'revdelete-otherreason' => 'دلیل هنی:',
 'revdelete-reasonotherlist' => 'دلیل هنی',
 'revdelete-edit-reasonlist' => 'دلیلیا پاک کردنه نه ویرایشت بکید',
+'revdelete-offender' => 'نیسنه وانیری:',
 
 # History merging
 'mergehistory' => 'ویرگاریا بلگه نه یکی بکید',
+'mergehistory-header' => 'ای بلگه وه شما اجازه می ئه که وانیریانه ویرگار سرچشمه بلگه نه د یه گل بلگه تازه سریک سازی بکید.
+مطمئن بویت که ای آلشت د لحاظ ویرگاری د مین بلگه موندگار هئ.',
+'mergehistory-box' => 'دوواره دیئن دوبلگه ای نه سر یک سازی کو:',
 'mergehistory-from' => 'بلگه سرچشمه:',
 'mergehistory-into' => 'بلگه مقصد:',
+'mergehistory-list' => 'ویرگار ویرایشت سر یک سازی بیئنی',
+'mergehistory-go' => 'ویرایشتیایی که سریک سازی بوئن نشو بیئه',
+'mergehistory-submit' => 'سر یک سازی دوواره دیئنیا',
+'mergehistory-empty' => 'هیپ دوواره دیئنی نبوئه یکی سازی بوئه.',
+'mergehistory-success' => '$3 {{جمی:$3|وانیری|وانیریا}} د [[:$1]] وه خوئی د [[:$2]] سریک سازی بی.',
+'mergehistory-fail' => 'سریک سازی ویرگار انجوم نبوئه، لطفن پینیاریا زمون و بلگه نه د نو وارسی بکید.',
 'mergehistory-no-source' => 'سرچشمه بلگه $1 وجود ناره.',
+'mergehistory-no-destination' => 'بلگه مقصد $1 وجود ناره.',
+'mergehistory-invalid-source' => 'نوم ون بلگه سرچشمه با معتور بوئه.',
+'mergehistory-invalid-destination' => 'نوم ون بلگه سرچشمه با معتور بوئه.',
 'mergehistory-autocomment' => ' [[:$1]]وا[[:$2]] یکی بیه',
 'mergehistory-comment' => ' [[:$1]]وا[[:$2]] یکی بیه:$3',
+'mergehistory-same-destination' => 'سرچشمه و بلگه یا مقصد نبوئه یکی بوئن',
 'mergehistory-reason' => 'دليل:',
 
 # Merge log
+'pagemerge-logentry' => ' [[$1]] وا [[$2]] سریک سازی بی (وانیریا که د $3 فره تر هئن)',
 'revertmerge' => 'بی لوئه',
 
 # Diffs
 'history-title' => 'دوواره دیئن ویرگار$1',
+'difference-title' => 'فرخ مینجا وانیریا "$1"',
+'difference-title-multipage' => 'فرخ مینجا بلگه یا "$1" و "$2"',
 'difference-multipage' => '(فرخ مینجا بلگه یا)',
 'lineno' => 'خط $1:',
 'compareselectedversions' => 'دوبار دیئنیایی که انتخاو بینه مقایسه بکیتو',
+'showhideselectedversions' => 'شلک دیئن وانیریا انتخاو بیه نه آلشت بکید',
 'editundo' => 'رد كردن',
 'diff-empty' => '(بی فرق)',
 'diff-multi' => '({{جمی:$1|یه گل دوواره دیئن مینجایی|$1مینجا دوواره دیئنیا}} وا {{جمی:$2|یه کارور|$2 کاروریا}} نشو دئه نی)',
+'diff-multi-manyusers' => '({{جمی:$1|یه گل وانیری مینجاگرته|$1وانیریا مینجا گرته}} بیشتر د $2 {{جمی:$2|کارور|کاروریا}} نشو دئه نبیه)',
 
 # Search results
 'searchresults' => 'نتيجه يا پی جوری',
@@ -865,6 +902,7 @@ $2',
 'saveusergroups' => 'ذخیره کرد گرویا کاروری',
 'userrights-groupsmember' => 'اندوم:',
 'userrights-reason' => 'دليل:',
+'userrights-nodatabase' => 'پاگا دونسمنی $1 یا نیئش یا د ولاتنشین نئ.',
 'userrights-changeable-col' => 'گرویایی که شما تونیت ویرایشت بکید',
 'userrights-unchangeable-col' => 'گرویایی که شما نتونیت ویرایشت بکید',
 
@@ -890,9 +928,12 @@ $2',
 'right-move-rootuserpages' => 'بلگه یا ریشه ای کارور نه جا وه جا کو',
 'right-movefile' => 'فایلیا نه جا وه جا کو',
 'right-upload' => 'سوار کردن فايلا',
+'right-upload_by_url' => 'سوار کرد فایلیا د یو آر ال',
+'right-writeapi' => 'د نیسنن ای پی آی استفاده بکید',
 'right-delete' => 'بلگیا نه پاک کو',
 'right-browsearchive' => 'بلگه یا پاک بیه نه پی جوری کو',
 'right-undelete' => 'ای بلگه نه حذف نكيد',
+'right-unblockself' => 'خوشه قلف نکید',
 'right-editinterface' => 'راوط کارور نه ویرایشت کو',
 'right-editusercssjs' => 'فایلیا جاوا اسکریپت و سی اس اس کاروریا هنی نه ویرایشت کو',
 'right-editusercss' => 'فایلیا سی اس اس کاروریا هنی نه ویرایشت کو',
@@ -995,21 +1036,36 @@ $2',
 'filename' => 'نوم فایل',
 'filedesc' => 'چكسته',
 'fileuploadsummary' => 'چکسه',
+'filereuploadsummary' => 'آلشتیا فایل:',
 'filesource' => 'سرچشمه:',
 'uploadedfiles' => 'فایلیا سواربیه',
+'empty-file' => 'فایلی که دئی ته حالی بیه.',
+'file-too-large' => 'فایلی که دئی ته فره گپ بی.',
+'filename-tooshort' => 'نوم فایل فره کؤچکه.',
+'illegal-filename' => 'نوم فایل اجاره ندئه بیه.',
 'unknown-error' => 'یه گل خطا ناشناس ری ون کرده.',
 'savefile' => 'فایل نه ذخیره کو',
 'uploadedimage' => 'سوارکرد"[[$1]]"',
+'uploaddisabled' => 'سوار کردن د کار نئ.',
+'copyuploaddisabled' => 'سوار کردن وا یو آر ال د کار نئ.',
+'uploadfromurl-queued' => 'سوارکرد تو ها د گئ.',
+'uploaddisabledtext' => 'سوار کرد فایلیا د کار نئ.',
 'upload-source' => 'سرچشمه فایل',
 'sourcefilename' => 'سرچشمه نوم فایل:',
 'sourceurl' => 'سرچشمه يو آر ال:',
+'destfilename' => 'نوم فایل مقصد:',
 'watchthisupload' => 'ای فایل بوینیت',
 'upload-success-subj' => 'سوار کرد خوش سرانجوم',
 'upload-failure-subj' => 'مشگل د سوارکردن',
 
+'upload-proto-error' => 'پروتکل نادروس',
 'upload-file-error' => 'خطا داخلی',
+'upload-misc-error' => 'خطا سوار کرد ناشناخته',
 'upload-unknown-size' => 'انازه نادیار',
 
+# File backend
+'backend-fail-notexists' => 'فایل $1 وجود ناره.',
+
 # img_auth script messages
 'img-auth-accessdenied' => 'دسرسی منع بی',
 'img-auth-nofile' => 'فایل $1 وجود ناره.',
@@ -1020,9 +1076,14 @@ $2',
 
 'license' => 'ليانس دار بيئن',
 'license-header' => 'د شكل ليسانس دار بيئن',
+'nolicense' => 'هیچی انتخاو نبیه',
+'license-nopreview' => '(پیش سیل د دسرس نئ)',
+'upload_source_file' => '(یه گل فایل د انجومیار تو)',
 
 # Special:ListFiles
+'listfiles_search_for' => 'پی جوری سی نوم رسانه:',
 'imgfile' => 'فايل',
+'listfiles' => 'نوم گه فایل',
 'listfiles_thumb' => 'بن کلکی',
 'listfiles_date' => 'تاريخ',
 'listfiles_name' => 'نوم',
@@ -1044,6 +1105,7 @@ $2',
 'filehist-datetime' => 'ويرگار/وخت',
 'filehist-thumb' => 'عسگ كؤچك بيه',
 'filehist-thumbtext' => 'كؤچك كردن سی  نسقه چی $1',
+'filehist-nothumb' => 'هیچ بن کلیکی نئ',
 'filehist-user' => 'كارور',
 'filehist-dimensions' => 'بعديا',
 'filehist-filesize' => 'انازه فایل',
@@ -1051,8 +1113,10 @@ $2',
 'imagelinks' => 'استفاده د فايل',
 'linkstoimage' => 'دمال بيه {{PLURAL:$1|ديس ونيا بلگه|$1 ديس ون بلگيا}} دای فایل:',
 'nolinkstoimage' => 'ایچه هیژ بلگه ای سی هوم پیوند بیئن وا ای فایل نی',
+'morelinkstoimage' => ' [[ویجه:چه هوم پیوندی ها ایچه/$1|هوم پیوندیا هنی]]سی ای فایل بونیت.',
 'sharedupload-desc-here' => 'فایلی که د $1 شایت د مئن پروجیا هنی استفاده بیه.
 توضی دباره[$2 file description page] د هار نشو دئئه بیه',
+'filepage-nofile' => 'چنو فایلی وا ای نوم نئ.',
 'shared-repo-from' => 'د $1',
 
 # File reversion
@@ -1060,22 +1124,35 @@ $2',
 'filerevert-submit' => 'ورگنین',
 
 # File deletion
+'filedelete' => '$1 پاک کو',
+'filedelete-legend' => 'فایل نه پاک کو',
 'filedelete-comment' => 'دليل:',
 'filedelete-submit' => 'پاك كردن',
+'filedelete-success' => '$1 پاک بیه.',
 'filedelete-nofile' => "'''$1''' وجود ناره.",
+'filedelete-otherreason' => 'دلیل هنی:',
 'filedelete-reason-otherlist' => 'دليل هنی',
 'filedelete-edit-reasonlist' => 'دلیلیا پاک کردنه نه ویرایشت بکید',
+'filedelete-maintenance-title' => 'نبوئه ای فایل پاک بوئه',
 
 # MIME search
+'mimesearch' => 'پی جوری ام آی ام ای',
 'download' => 'گرتن',
 
+# Unwatched pages
+'unwatchedpages' => 'بلگه یا ندئیه بیه',
+
 # Unused templates
+'unusedtemplates' => 'قالویا وه کار نبرده بیه.',
 'unusedtemplateswlh' => 'هوم پیوندیا هنی',
 
 # Random page
 'randompage' => 'بلگه بختكی',
 
 # Random page in category
+'randomincategory' => 'بلگه بختی د ای دسه',
+'randomincategory-invalidcategory' => '"$1"  نوم دسه معتوری نئ.',
+'randomincategory-nopages' => 'هیچ بلگه ای د ای  [[:دسه نئ:$1|$1]] دسه.',
 'randomincategory-selectcategory-submit' => 'رو',
 
 # Statistics
@@ -1083,22 +1160,55 @@ $2',
 'statistics-header-pages' => 'بلگه آماریا',
 'statistics-header-edits' => 'آماریا نه ویرایشت بکید',
 'statistics-header-views' => 'آماریا نه بوینیت',
+'statistics-header-users' => 'آماریا کارور',
+'statistics-header-hooks' => 'آماریا هنی',
+'statistics-articles' => 'بلگه یا مینونه',
 'statistics-pages' => 'بلگیا',
+'statistics-views-total' => 'همه نه بوینیت',
+'statistics-views-peredit' => 'هر ویرایشت نه بوینیت',
 'statistics-users-active' => 'کاروریا کارکو',
+'statistics-mostpopular' => 'بلگه یایی که بیشتر دیئه بینه',
 
 'pageswithprop-submit' => 'رو',
 
 'brokenredirects-edit' => 'ویرایشت',
 'brokenredirects-delete' => 'پاك كردن',
 
+'withoutinterwiki' => 'بلگه یایی که هوم پیوند زون نارن',
 'withoutinterwiki-legend' => 'پیشون',
 'withoutinterwiki-submit' => 'نشون دائن',
 
 # Miscellaneous special pages
 'nbytes' => '$1{{جمی:$1|كلی|بايت|بايت}}',
+'ncategories' => '{{جمی:$1|دسه|دسه يا}}',
+'ninterwikis' => '$1 {{جمی:$1|مئن ویکی|مئن ویکیا}}',
 'nlinks' => '$1 {{جمی:$1|هوم پیوند|هوم پیوندیا}}',
 'nmembers' => '$1 {{PLURAL:$1|اندوم|اندوميا}}',
+'nmemberschanged' => '$1 → $2 {{جمی:$2|اندوم|اندومیا}}',
+'nviews' => '$1 {{جمی:$1|دیئن|دیئنیا}}',
+'nimagelinks' => '$1 {{جمی:$1|بلگه|بلگيا}} استفاده بیه',
+'ntransclusions' => '$1 {{جمی:$1|بلگه|بلگيا}} استفاده بیه',
+'lonelypages' => 'بلگه یا تک منه',
+'uncategorizedpages' => 'بلگه یا دسه بنی نبیه',
+'uncategorizedcategories' => 'دسه یا دسه بنی نبیه',
+'uncategorizedimages' => 'فایلیا دسه بنی نبیه',
+'uncategorizedtemplates' => 'قالویا دسه بنی نبیه',
+'unusedcategories' => 'دسه یا استفاده نبیه',
+'unusedimages' => 'فایلیا استفاده نبیه',
+'popularpages' => 'بلگه یا حاستنی',
+'wantedcategories' => 'بلگه یا حاستنی',
+'wantedpages' => 'بلگه یا حاستنی',
+'wantedfiles' => 'فایلیا حاستنی',
+'wantedtemplates' => 'قالویا حاستنی',
+'mostlinked' => 'بلگه یا که بیشتر هوم پیوند بینه',
+'mostlinkedcategories' => 'دسه یایی که بیشتر هوم پیوند بیه',
+'mostlinkedtemplates' => 'قالویایی که بیشتر هوم پیوند بینه',
+'mostcategories' => 'بلگه یا که بیشتر دسه بنی بینه',
+'mostimages' => 'فایلیایی که بیشتر هوم پیوند بینه',
 'prefixindex' => 'همه بلگيا وا پيشون',
+'shortpages' => 'بلگه یا کؤچک',
+'longpages' => 'بلگه یا گپ',
+'protectedpages' => 'بلگه یا حفاظت بيه',
 'usercreated' => '{{جنسیت:$3|راس بیه}}د $1 at $2',
 'newpages' => 'بلگيا نو',
 'move' => 'جاوه جا بوئيت',
index f253b25..0aa5a71 100644 (file)
@@ -801,6 +801,7 @@ Tā jau eksistē.',
 'content-not-allowed-here' => '"$1" saturs nav atļauts lapā [[$2]]',
 'editwarning-warning' => 'Atstājot šo lapu tu zaudēsi izdarītās izmaiņas. 
 Ja esi pieteicies, jūs vari atspējot šo brīdinājumu savās izvēlēs sadaļā "rediģēšana"',
+'editpage-notsupportedcontentformat-title' => 'Satura formāts nav atbalstīts',
 
 # Content models
 'content-model-wikitext' => 'vikiteksts',
@@ -1938,6 +1939,7 @@ Papildinformācija:
 'delete-edit-reasonlist' => 'Izmainīt dzēšanas iemeslus',
 'delete-toobig' => 'Šai lapai ir liela izmaiņu hronoloģija, vairāk nekā $1 {{PLURAL:$1|versija|versijas}}.
 Šādu lapu dzēšana ir atslēgta, lai novērstu nejaušus traucējumus {{grammar:lokatīvs|{{SITENAME}}}}.',
+'deleting-backlinks-warning' => "'''Brīdinājums:''' uz lapu, ko grasies izdzēst, ved saites no citām lapām.",
 
 # Rollback
 'rollback' => 'Novērst labojumus',
index e45a247..108ac26 100644 (file)
@@ -481,8 +481,8 @@ Aja kelalen ngowaih [[Special:Preferences|preferensi {{SITENAME}}]] Rika.',
 'createacct-another-submit' => 'Gawe akun liyane',
 'createacct-benefit-heading' => '{{SITENAME}} kuwe digawe nang wong kaya Rika.',
 'createacct-benefit-body1' => '{{PLURAL:$1|suntingan|suntingan}}',
-'createacct-benefit-body2' => '{{PLURAL:$1|kaca|kaca}}',
-'createacct-benefit-body3' => '{{PLURAL:$1|kontributor|kontributor}} anyaran',
+'createacct-benefit-body2' => '{{PLURAL:$1|kaca}}',
+'createacct-benefit-body3' => '{{PLURAL:$1|kontributor}} anyaran',
 'badretype' => 'Tembung sandhi sing Rika lebokna ora gathuk.',
 'userexists' => 'Jeneng panganggo sing dilebokna uwis ana sing nganggo.
 Monggo pilih jeneng liyane.',
@@ -515,7 +515,7 @@ Monggo dijajal sepisan maning.',
 'passwordtooshort' => 'Tembung sandhi kuwe paling ora cacahe {{PLURAL:$1|1 karakter|$1 karakter}}.',
 'password-name-match' => 'Tembung sandhi Rika kudu sejen karo jeneng panganggone Rika.',
 'password-login-forbidden' => 'Jeneng panganggo lan tembung sandhi kiye ora olih dienggo.',
-'mailmypassword' => 'Imelna tembung sandhi anyar',
+'mailmypassword' => 'Tembung sandhi di-reset',
 'passwordremindertitle' => 'Tembung sandi anyar temporer kanggo {{SITENAME}}',
 'passwordremindertext' => 'Ana wong (ndeyane Rika dhewek, sekang alamat IP $1) sing njaluk
 tembung sandhi anyar kanggo {{SITENAME}} ($4). Tembung sandhi sawetara nggo panganggo 
@@ -532,7 +532,7 @@ terusna baen nggunakna tembung sandhine Rika sing lawas.',
 Monggoo mlebu log maning seuwise Rika nampa imel kuwe.',
 'blocked-mailpassword' => "Alamat IP-ne Rika diblokir sekang panyuntingan, mulane kuwe Rika ora olih nganggo fungsi pèngetan tembung sandhi kanggo ''mencegah penyalahgunaan''.",
 'eauthentsent' => 'Pesen imel konfirmasi wis dikirim maring alamat imele Rika.
-Rika kudu ngetutna instruksi nang imel kuwe mau nggo mastekna nek alamat kuwe pancen imele Rika dhewek. {{SITENAME}} ora bakal ngaktifna fitur imel angger langkah kiye durung dilakokna.',
+Sedurunge imel liyane teyeng dikirim maring akun kuwe, Rika kudu ngetutna instruksi nang imel kuwe, nggo mastekna nek alamat kuwe pancen imele Rika dhewek.',
 'throttled-mailpassword' => 'Sawijining imel kanggo mbalekna tembung sandhi wis dikirim, jroning {{PLURAL:$1|jam|$1 jam}} pungkasan kiye.
 Kanggo nyegah salah-guna, mung siji imel tembung sandi thok sing teyeng dikirim saben {{PLURAL:$1|jam|$1 jam}}.',
 'mailerror' => 'Kasalahan dong ngirim imel: $1',
@@ -677,7 +677,7 @@ Kiye ndeyan anu uwis dipindah utawa dibusek dong Rika lagi ndeleng kaca kiye.',
 'accmailtitle' => 'Tembung sandhi wis dikirim.',
 'accmailtext' => "Tembung sandhi acak kanggo [[User talk:$1|$1]] wis digawe lan dikirim maring $2.
 
-Tembung sandhi kanggo akun anyarkiye teyeng diganti nang kaca ''[[Special:ChangePassword|ganti tembung sandhi]]'' seuwise mlebu log.",
+Tembung sandhi kanggo akun anyar kiye teyeng diganti nang kaca ''[[Special:ChangePassword|ganti tembung sandhi]]'' seuwise mlebu log.",
 'newarticle' => '(Anyar)',
 'newarticletext' => "Rika ngetutna pranala maring kaca sing durung ana.
 Kanggo nggawe kaca kuwe,molai baen ngetik nang kotak nang ngisor kiye (deleng [[{{MediaWiki:Helppage}}|kaca pitulung]] kanggo informasi lewih detil).
@@ -834,18 +834,18 @@ Rinciane teyeng ditemokna nang [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAG
 'revdelete-no-file' => 'Berkas sing dituju ora ana.',
 'revdelete-show-file-confirm' => 'Apa rika wis mantep arep ndeleng revisi sing wis dibusek nggone berkas "<nowiki>$1</nowiki>" sekang tanggal $2 jam $3?',
 'revdelete-show-file-submit' => 'Ya',
-'revdelete-selected' => "'''{{PLURAL:$2|Revisi kepilih|Revisi kepilih}} sekang '''$1''''''",
+'revdelete-selected' => "'''{{PLURAL:$2|Revisi kepilih}} sekang [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Log kepilih|Log kepilih}} kanggo:'''",
 'revdelete-legend' => 'Atur watesan',
-'revdelete-hide-text' => 'Umpetna tèks revisi',
+'revdelete-hide-text' => 'Tèks revisi',
 'revdelete-hide-image' => 'Umpetna isi berkas',
 'revdelete-hide-name' => 'Umpetna tindakan lan target',
-'revdelete-hide-comment' => 'Umpetna ringkesan suntingan',
-'revdelete-hide-user' => 'Umpetna jeneng panganggo/alamat IP penyunting',
+'revdelete-hide-comment' => 'ringkesan suntingan',
+'revdelete-hide-user' => 'Jeneng panganggo/alamat IP penyunting',
 'revdelete-hide-restricted' => 'Uga umpetna data sekang pangurus lan panganggo liyané',
 'revdelete-radio-same' => '(aja diowahi)',
-'revdelete-radio-set' => 'Ya',
-'revdelete-radio-unset' => 'Ora',
+'revdelete-radio-set' => 'Umpetna',
+'revdelete-radio-unset' => 'Keton',
 'revdelete-suppress' => 'Uga umpetna data sekang pangurus lan panganggo liyané',
 'revdelete-unsuppress' => 'Busak watesan nang revisi sing dibalèkna',
 'revdelete-log' => 'Alesan:',
@@ -975,11 +975,10 @@ Ningen Rika kudu eling nek indeks Google kanggo {{SITENAME}} bisa baen isine anu
 'prefs-email' => 'Opsi imel',
 'prefs-rendering' => 'Tampilan',
 'saveprefs' => 'Simpen',
-'restoreprefs' => 'Balekna kabeh setelan gawane',
+'restoreprefs' => 'Balekna kabeh setelan gawane (nang kabeh bagiyan)',
 'prefs-editing' => 'Panyuntingan',
 'rows' => 'Baris:',
 'searchresultshead' => 'Goleti',
-'resultsperpage' => 'Hasil saben kaca:',
 'stub-threshold' => 'Ambang wates kanggo format <a href="#" class="stub">pranala rintisan</a> (bita):',
 'stub-threshold-disabled' => 'Dinonaktifna',
 'recentchangesdays' => 'Jumlah dina sing ditidokna nang Owahan anyar:',
@@ -1004,7 +1003,7 @@ Ningen Rika kudu eling nek indeks Google kanggo {{SITENAME}} bisa baen isine anu
 'timezoneregion-indian' => 'Samodra Hindia',
 'timezoneregion-pacific' => 'Samodra Pasifik',
 'allowemail' => 'Aktifna fitur nggo nampa imel sekang pangganggo liyane',
-'prefs-searchoptions' => 'Pilihan panggoletan',
+'prefs-searchoptions' => 'Goleti',
 'prefs-namespaces' => 'Bilik jeneng',
 'defaultns' => 'Utawa goleti nang bilik jeneng kiye:',
 'default' => 'baku',
@@ -1016,9 +1015,10 @@ Ningen Rika kudu eling nek indeks Google kanggo {{SITENAME}} bisa baen isine anu
 Pambalikan kiye ora teyeng dibatalna.',
 'prefs-emailconfirm-label' => 'Konfirmasi imel:',
 'youremail' => 'Imel:',
-'username' => 'Jeneng panganggo:',
-'uid' => 'ID panganggo:',
-'prefs-memberingroups' => 'Anggota {{PLURAL:$1|klompok|klompok-klompok}}:',
+'username' => '{{GENDER:$1|Jeneng panganggo}}:',
+'uid' => '{{GENDER:$1|ID panganggo}}:',
+'prefs-memberingroups' => '{{GENDER:$2|Anggota}} 
+{{PLURAL:$1|klompok|klompok-klompok}}:',
 'prefs-registration' => 'Wektu régistrasi:',
 'yourrealname' => 'Jeneng asli:',
 'yourlanguage' => 'Basa:',
index ce2d03f..8d3ec55 100644 (file)
@@ -221,11 +221,11 @@ $messages = array(
 # User preference toggles
 'tog-underline' => 'Hanipika ny rohy:',
 'tog-justify' => 'Hanitsy ny andiany',
-'tog-hideminor' => "Hanitsika ny fanovana madinika ao amin'ny fanovana farany",
-'tog-hidepatrolled' => "Hanitrika ny fanovana voaara-maso ao amin'ny fanovana farany",
+'tog-hideminor' => "Hanitsika ny fiovana madinika ao amin'ny fiovana farany",
+'tog-hidepatrolled' => "Hanitrika ny fiovana voaara-maso ao amin'ny fiovana farany",
 'tog-newpageshidepatrolled' => "Hanitsika ny pejy voaara-maso ao amin'ny pejy vaovao",
 'tog-extendwatchlist' => 'Hanitatra ny lisitra fanaraham-pejy mba haneho ny fanovana rehetra fa tsy ny vaovao indrindra fotsiny',
-'tog-usenewrc' => "Hamondrona ny fanovana araky ny pejy ao amin'ny fanovana farany ary ao amin'ny lisitry ny pejy arahana",
+'tog-usenewrc' => "Hampivondrona ny fiovana araky ny pejy ao amin'ny fiovana farany ary ao amin'ny lisitry ny pejy arahana",
 'tog-numberheadings' => 'Asio laharany ny lohateny',
 'tog-showtoolbar' => 'Haneho ny toolbar fanovana',
 'tog-editondblclick' => "Hanova pejy amin'ny alalan'ny tsindrim-boalavo roa misesy",
@@ -494,7 +494,7 @@ Mitaky version $1-n'i MediaWiki",
 'youhavenewmessagesfromusers' => "Manana $1 avy amin'ny mpikambana {{PLURAL:$3|hafa|$3}} ($2).",
 'youhavenewmessagesmanyusers' => "Manana $1 avy amin'ny mpikambana maro ($2).",
 'newmessageslinkplural' => '{{PLURAL:$1|hafatra iray|hafatra maro}}',
-'newmessagesdifflinkplural' => 'fanovana farany{{PLURAL:$1}}',
+'newmessagesdifflinkplural' => 'fiovana {{PLURAL:$1|farany|999=farany}}',
 'youhavenewmessagesmulti' => "Manana hafatra vaovao ianao eo amin'ny $1.",
 'editsection' => 'hanova',
 'editold' => 'hanova',
@@ -1105,10 +1105,9 @@ Ao aorian'ny fivelarana, mety namoaka valy lava loatra angamba izy, ary tsy namp
 'last' => 'farany',
 'page_first' => 'voalohany',
 'page_last' => 'farany',
-'histlegend' => "
-Fifidianana ny votoatiny hampitahaina: mariho eo anilan'ny versions hampitahaina dia tsindrio ny bokotra Entrée na ny bokotra etsy ambany.<br />
-Tadidio: (ank) = fampitahana amin'ny votoatin'ny pejy ankehitriny,
-(farany) = fampitahana amin'ny version talohan'ity, M = fanovana madinika",
+'histlegend' => "Fisafidianana ny votoatiny hohampitahaina: Mario ny bokotra radiôn'ny fiovana hampitahazay ary tsintrio ny bokotra fanekena amin'ny faram-pejy<br />
+Maribolana: '''(ank)''' = fampitahana amin'ny votoatin'ny pejy ankehitriny,
+'''(farany)''' = fampitahana amin'ny version talohan'ity, M = fanovana madinika",
 'history-fieldset-title' => 'Karohy ny tantara',
 'history-show-deleted' => 'Voafafa ihany',
 'histfirst' => 'antitra indrindra',
@@ -1350,7 +1349,7 @@ $3 santiôna{{PLURAL:}} natsonika tamin'ny [[:$2]]",
 'recentchangesdays' => "Isa ny andro ho ampiseho eo amin'ny fanovàna farany",
 'recentchangesdays-max' => '($1 andro{{PLURAL:$1||}} fara-faha betsany)',
 'recentchangescount' => "Isan'ny fanovana haseho (tsipalotra) :",
-'prefs-help-recentchangescount' => 'Misy ny fanovana farany, ny tantaram-pejy ary ny laogy',
+'prefs-help-recentchangescount' => 'Misy ny fiovana farany, ny tantaram-pejy ary ny laogy',
 'savedprefs' => 'Voatahiry ny mombamomba anao.',
 'timezonelegend' => "Faritr'ora :",
 'localtime' => 'Ora an-toerana',
@@ -1536,7 +1535,7 @@ Tsy haseho ny adiresy imailakao rehefa manoratra any aminao ny mpikambana hafa."
 'right-importupload' => 'mampiditra na manafatra pejy avy amina rakitra iray',
 'right-patrol' => "Manamarina ny fanovan'ny hafa",
 'right-autopatrol' => 'Manamarika ny fanovany efa nomarihana',
-'right-patrolmarks' => "Mijery ny mariky ny fanamarihana any amin'ny fanovana farany",
+'right-patrolmarks' => "Mijery ny mariky ny fanamarihana any amin'ny fiovana farany",
 'right-unwatchedpages' => 'Mijery ny lisitry ny pejy tsy arahina',
 'right-mergehistory' => 'Manatsonika ny tantaram-pejy',
 'right-userrights' => "Manova ny fahefan'ny mpikambana",
@@ -1599,7 +1598,7 @@ Tsy haseho ny adiresy imailakao rehefa manoratra any aminao ny mpikambana hafa."
 'nchanges' => '{{PLURAL:$1|fanovana|fanovana}} $1',
 'enhancedrc-since-last-visit' => '$1 ({{PLURAL:$1|hatry ny famangiana farany}})',
 'enhancedrc-history' => 'tantara',
-'recentchanges' => 'Fanovana farany',
+'recentchanges' => 'Fiovana farany',
 'recentchanges-legend' => 'Safidy ny fanovàna farany',
 'recentchanges-summary' => "Jereo eto amin'ity pejy ity izay vao niova vao haingana teto amin'ity wiki ity.",
 'recentchanges-noresult' => "Tsy misy fanovana miady amin'ny fepe-potoana napetraka.",
@@ -2252,11 +2251,11 @@ na tsy maniry handray imailaka avy amin'ny mpikambana hafa izy.",
 'watchlist-details' => "Pejy $1{{PLURAL:}} ao amin'ny lisitry ny pejy arahanao, tsy isaina ny pejin-dresaka.",
 'wlheader-enotif' => "Alefa ny fampilazana amin'ny mailaka.",
 'wlheader-showupdated' => "Aseho '''sorabaventy''' ny pejy niova taorian'ny famangianao azy farany.",
-'watchmethod-recent' => 'fanamarinana ny fanovana farany hahitana pejy arahana',
-'watchmethod-list' => 'fanamarinana ny pejy arahana ahitana fanovana farany',
+'watchmethod-recent' => 'fanamarinana ny fiovana farany hahitana pejy arahana',
+'watchmethod-list' => 'fanamarinana ny pejy arahana hahitana fiovana vao haingana',
 'watchlistcontains' => "Ao amin'ny pejy arahanao dia ahitana pejy $1{{PLURAL:}}.",
 'iteminvalidname' => "Olana amin'ny zavatra « $1 » : tsy ara-dalàna ny anarana...",
-'wlnote' => "Eo ambany dia ahitana ny  {{PLURAL:$1|fanovana farany indrindra|ny fanovana ''$1'' farany}} natao tanatin'ny adin'ny {{PLURAL:$2|iray|'''$2'''}}, nanomboka ny $3, $4.",
+'wlnote' => "Eo ambany dia ahitana ny {{PLURAL:$1|fiovana farany indrindra|ny fiovana ''$1'' farany}} natao tanatin'ny adin'ny {{PLURAL:$2|iray|'''$2'''}}, nanomboka ny $3, $4.",
 'wlshowlast' => 'Haneho ny $1 ora farany, ny $2 andro farany na $3',
 'watchlist-options' => 'Safidy ny lisitry ny pejy arahana',
 
@@ -2343,15 +2342,15 @@ ataovy am-pitandremana ity tao ity.",
 'rollbacklink' => 'foano',
 'rollbacklinkcount' => 'hamoana fanovana{{PLURAL:$1}} $1',
 'rollbackfailed' => "Tsy voaverina amin'ny teo aloha",
-'cantrollback' => "Tsy afaka iverenana ny fanovana; ny mpanova farany ihany no tompon'ny pejy.",
-'alreadyrolled' => "Tsy afaka foanana ny fanovana ny pejy « [[:$1]] » nataon'i [[User:$2|$2]] ([[User talk:$2|Dinika]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]])
+'cantrollback' => "Tsy afaka iverenana ny fiovana; ny mpanova farany ihany no tompon'ny pejy.",
+'alreadyrolled' => "Tsy afaka foanana ny fiovan'ny pejy « [[:$1]] » nataon'i [[User:$2|$2]] ([[User talk:$2|Dinika]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]])
 
-Efa nataon'i [[User:$3|$3]] ([[User talk:$3|dinika]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]) ny fanovana farany.",
+Efa nataon'i [[User:$3|$3]] ([[User talk:$3|dinika]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]) ny fiovana farany.",
 'editcomment' => "Toy izao no fanamarihana momba io fanovana io: \"''\$1''\".",
 'revertpage' => "Voafafa ny fanovana ny [[Special:Contributions/$2|$2]] ([[User talk:$2|Dinika]]); voaverina amin'ny votoatiny teo aloha nataon'i [[User:$1|$1]]",
 'revertpage-nouser' => "Manala ny fanovana (nataom-pikambana voaafina), miverina any amin'ny filaza faran'i  [[User:$1|$1]]",
-'rollback-success' => "Fanalàna ny fanovana nataon'i $1 ;
-miverina any amin'ny santiôna farany nataon'i $2.",
+'rollback-success' => "Fanesorana ny fiovana nataon'i $1 ;
+fiverenana amin'ny fiovana farany nataon'i $2.",
 
 # Edit tokens
 'sessionfailure-title' => 'Tsi-fetezaka mikasika ny kaonty idirana',
@@ -2509,7 +2508,7 @@ Aseho eo ambany ny laogim-panakanana mba hampahalala anao :",
 Aseho eo ambany ny iditra farany ao amin'ny laogim-panakanana  mba hampahalala :",
 'sp-contributions-search' => "Hikaroka fandraisan'anjara",
 'sp-contributions-username' => 'Adiresy IP na anaram-pikambana :',
-'sp-contributions-toponly' => 'Fanovana izay farany eo ihany no aseho',
+'sp-contributions-toponly' => 'Fiovana izay farany ihany no aseho',
 'sp-contributions-submit' => 'Hikaroka',
 
 # What links here
@@ -2750,15 +2749,12 @@ Anarana hafa omena.",
 
 # Export
 'export' => 'Hamoaka pejy',
-'exporttext' => "Afaka manondrana ny lahatsoratra miaraka amin'ny tantaram-panovana ny pejy na vondrom-pejy maromaro ianao.
-Aoriana dia mety hafaran'ny wiki iray mandeha amin'ny rindrankajy MediaWiki izany, na dia mbola tsy afaka
-atao aza izany amin'izao fotoana izao.
+'exporttext' => "Afaka mamoaka lahatsoratra ary tantaram-piovana amin'ny pejy tokana, na vondrom-pejy mifonona anaty XML ianao.
+Azo ampidirina amy wiki hafa izany amin'ny alalan'ny [[Special:Import|pejy fanafarana]].
 
-Ny fomba fanondranana pejy dia, manomeza lohateny izay na maromaro eto amin'ny boaty ety ambany eto, lohateny iray isaky ny andalana,
-ary safidio na ny votoatiny ankehitriny ihany no ilainao na miaraka amin'ny endriky ny pejy rehetra taloha, sy hoe ny votoatiny ankehitriny
-miampy fampahalalana momba ny fanovana farany fotsiny ve sa miaraka amin'ny tantaran'ny fanovana rehetra.
+Raha hamoaka pejy iray dia atso tsohy eo amin'ny boaty eo ambany ny lohatenin'ny pejinao, andalana iray isaky ny pejy, ary ataovy ny safidy: maka ny tantaram-piovany, na ny fiovana farany ihany.
 
-Etsy amin'ny toerana farany dia afaka mampiasa rohy ihany koa ianao, ohatra [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] ho an'ny [[{{MediaWiki:Mainpage}}]].",
+Ho an'ny tranga voalaza farany, dia azonao ampaisaina ny rohy, ohatra [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] ho an'ny pejy \"[[{{MediaWiki:Mainpage}}]]\".",
 'exportall' => 'Hamoaka ny pejy rehetra',
 'exportcuronly' => "Ny votoatiny ankehitriny ihany no haondrana fa tsy miaraka amin'ny tantarany iray manontolo",
 'exportnohistory' => "
@@ -2982,7 +2978,7 @@ Mamerina ny version taloha io asa io ary afaka manometraka ny antony anatin'ny a
 'pageinfo-firstuser' => 'Mpamorona ilay pejy',
 'pageinfo-firsttime' => 'Daty namoronana ilay pejy',
 'pageinfo-lastuser' => 'Mpanova farany',
-'pageinfo-lasttime' => "Datin'ny fanovana farany",
+'pageinfo-lasttime' => 'Daty niovàna farany',
 'pageinfo-edits' => "Isa manontolon'ny fanovana",
 'pageinfo-authors' => "Isa manontolon'ny mpandray anjara",
 'pageinfo-recent-edits' => "Fanovana vao haingana (natao tanatin'ny $1)",
@@ -3008,7 +3004,7 @@ Mamerina ny version taloha io asa io ary afaka manometraka ny antony anatin'ny a
 'markaspatrolledtext' => 'Marihana ho hita sy voatsara',
 'markedaspatrolled' => 'Voamarina',
 'markedaspatrolledtext' => "Ny santiôna voafidy an'ny [[:$1]] dia voamarika ho voamarina.",
-'rcpatroldisabled' => "Tsy nalefa ny fanamarinana ao amin'ny fanovana farany.",
+'rcpatroldisabled' => "Tsy nalefa ny fanamarinana ao amin'ny fiovana farany.",
 'rcpatroldisabledtext' => 'Tsy atao ankehitriny ny fanamarinana ny pejy novaina farany.',
 'markedaspatrollederror' => 'Tsy afaka marihana ho voamarina',
 'markedaspatrollederrortext' => 'Tsy maintsy misafidy santiôna iray ianao mba hahafahanao manamarika azy ho voamarina.',
@@ -3473,7 +3469,7 @@ Azonao atao ihany koa ny [[Special:EditWatchlist/raw|manova ilay lisitra amin'ny
 'specialpages-group-maintenance' => 'laogy hikojakojana',
 'specialpages-group-other' => 'Pejy manokana hafa',
 'specialpages-group-login' => 'Hiditra / hisoratra anarana',
-'specialpages-group-changes' => 'Fanovana farany sy laogy',
+'specialpages-group-changes' => 'Fiovana farany sy laogy',
 'specialpages-group-media' => 'Laogy sy fampidirana rakitra media.',
 'specialpages-group-users' => 'Mpikambana sy satany',
 'specialpages-group-highuse' => 'Pejy ampiasaina mafy',
index 9920f8c..2154358 100644 (file)
@@ -4167,7 +4167,7 @@ $5
 
 # Special:Version
 'version' => 'Верзија',
-'version-extensions' => 'Ð\98нÑ\81Ñ\82алиÑ\80ани додатоци',
+'version-extensions' => 'Ð\92оÑ\81поÑ\81Ñ\82авени додатоци',
 'version-specialpages' => 'Специјални страници',
 'version-parserhooks' => 'Парсерски куки',
 'version-variables' => 'Променливи',
@@ -4202,7 +4202,7 @@ $5
 МедијаВики се нуди со надеж дека ќе биде од корист, но БЕЗ БИЛО КАКВА ГАРАНЦИЈА; дури и без подразбраната гаранција за ПРОДАЖНА ВРЕДНОСТ или ПОГОДНОСТ ЗА ДАДЕНА ЦЕЛ. За повеќе информации, погледајте ја ГНУ-овата општа јавна лиценца.
 
 Заедно со програмов треба да имате добиено [{{SERVER}}{{SCRIPTPATH}}/COPYING примерок од ГНУ-овата општа јавна лиценца]; ако немате добиено примерок, пишете на Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA или [//www.gnu.org/licenses/old-licenses/gpl-2.0.html прочитајте ја тука].',
-'version-software' => 'Ð\98нÑ\81Ñ\82алиÑ\80ана програмска опрема',
+'version-software' => 'Ð\92оÑ\81поÑ\81Ñ\82авена програмска опрема',
 'version-software-product' => 'Производ',
 'version-software-version' => 'Верзија',
 'version-entrypoints' => 'URL-а на влезните точки',
@@ -4470,4 +4470,6 @@ $5
 'expand_templates_generate_rawhtml' => 'Прикажувај сиров HTML',
 'expand_templates_preview' => 'Преглед',
 
+# Unknown messages
+'uploadinvalidxml' => 'Не можев да го парсирам XML-от што се наоѓа во подигнатата податотека.',
 );
index 39ed0b3..a27a2b0 100644 (file)
@@ -968,7 +968,7 @@ $2',
 'showdiff' => 'बदल दाखवा',
 'anoneditwarning' => "'''इशारा:''' तुम्ही विकिपीडियाचे सदस्य म्हणून सनोंद-प्रवेश (लॉग-इन) केलेला नाही. या पानाच्या संपादन इतिहासात तुमचा अंकपत्ता (आयपी) नोंदला जाईल.",
 'anonpreviewwarning' => "\"'''सावधान:''' तुम्ही विकिपीडियाचे सदस्य म्हणून सनोंद-प्रवेश (लॉग-इन) केलेला नाही. या पानाच्या संपादन इतिहासात तुमचा अंकपत्ता (आय.पी. ॲड्रेस) नोंदला जाईल.\"",
-'missingsummary' => "'''à¤\86ठवण:''' à¤¤à¥\81मà¥\8dहà¥\80 à¤¸à¤\82पादन à¤¸à¤¾à¤°à¤¾à¤\82श à¤ªà¥\81रवलà¥\87ला à¤¨à¤¾à¤¹à¥\80.à¤\86पण 'à¤\9cतन à¤\95रा' à¤µà¤° à¤ªà¥\81नà¥\8dहा à¤\9fिà¤\9aà¤\95à¥\80 à¤®à¤¾à¤°à¤²à¥\80 à¤¤à¤° à¤¤à¥\87 à¤¤à¥\8dयाशिवाय जतन होईल.",
+'missingsummary' => "'''à¤\86ठवण:''' à¤\86पण à¤¸à¤\82पादन à¤¸à¤¾à¤°à¤¾à¤\82श à¤ªà¥\81रवलà¥\87ला à¤¨à¤¾à¤¹à¥\80.à¤\86पण 'à¤\9cतन à¤\95रा' à¤µà¤° à¤ªà¥\81नà¥\8dहा à¤\9fिà¤\9aà¤\95à¥\80 à¤®à¤¾à¤°à¤²à¥\80 à¤¤à¤°, à¤¤à¥\87 à¤¤à¥\8dयाशिवायà¤\9a जतन होईल.",
 'missingcommenttext' => 'कृपया खाली प्रतिक्रिया भरा.',
 'missingcommentheader' => "'''आठवण:''' आपण या लेखनाकरिता विषय किंवा मथळा दिलेला नाही. आपण पुन्हा \"{{int:savearticle}}\" वर टिचकले तर, तुमचे संपादन त्याशिवायच जतन होईल.",
 'summary-preview' => 'आढाव्याची झलक:',
@@ -1393,6 +1393,7 @@ $1",
 'preferences' => 'पसंतीक्रम',
 'mypreferences' => 'पसंतीक्रम',
 'prefs-edits' => 'संपादनांची संख्या:',
+'prefsnologintext2' => 'आपला पसंतीक्रम बदलण्यास $1 करा',
 'prefs-skin' => 'त्वचा',
 'skin-preview' => 'झलक',
 'datedefault' => 'प्राथमिकता नाही',
@@ -1723,7 +1724,7 @@ $1",
 
 # Upload
 'upload' => 'संचिका चढवा',
-'uploadbtn' => 'सà¤\82à¤\9aिà¤\95ा à¤\9aढवा',
+'uploadbtn' => 'सà¤\82à¤\9aिà¤\95à¥\87à¤\9aà¥\87 à¤\85पभारण à¤\95रा',
 'reuploaddesc' => 'अपभारण रद्द करुन ,अपभारणाच्या अर्जाकडे परत जा',
 'upload-tryagain' => 'बदललेले संचिका वर्णन पाठवा',
 'uploadnologin' => 'सनोंद-प्रवेशित नाही',
@@ -1770,14 +1771,14 @@ $1",
 'filename-tooshort' => 'संचिकानाम खूपच छोटे आहे',
 'filetype-banned' => 'याप्रकारची संचिका प्रतिबंधित आहे.',
 'verification-error' => 'संचिका पडताळणीत ही संचिका अनुत्तीर्ण झाली.',
-'hookaborted' => 'तà¥\81मà¥\8dहà¥\80 à¤\95रà¥\82 à¤\87à¤\9aà¥\8dà¤\9bिणारà¥\87 à¤¸à¤\82पादन à¤¬à¤¾à¤¹à¥\8dय à¤¹à¥\81à¤\95 à¤¦à¥\8dवारà¥\87 à¤¥ंबवण्यात आले.',
+'hookaborted' => 'तà¥\81मà¥\8dहà¥\80 à¤\95रà¥\82 à¤\87à¤\9aà¥\8dà¤\9bिणारà¥\87 à¤¬à¤¦à¤² à¤µà¤¿à¤¸à¥\8dतारà¤\95ादà¥\8dवारà¥\87 à¤¥à¤¾ंबवण्यात आले.',
 'illegal-filename' => 'या संचिकानामास परवानगी नाही.',
 'overwrite' => 'अस्तित्वात असलेल्या संचिकेवर पुनर्लेखन प्रतिबंधित आहे.',
 'unknown-error' => 'एक अज्ञात चूक उद्भवली.',
 'tmp-create-error' => 'तात्पुरती संचिका बनवता आली नाही.',
 'tmp-write-error' => 'तात्पुरती संचिका लिहीतांना चूकी',
 'large-file' => 'संचिका $1 पेक्षा कमी आकाराची असण्याची अपेक्षा आहे, ही संचिका $2 एवढी आहे.',
-'largefileserver' => 'सेवा संगणकावर (सर्वर) निर्धारित केलेल्या आकारापेक्षा या संचिकेचा आकार मोठा आहे.',
+'largefileserver' => 'सà¥\87वा à¤¸à¤\82à¤\97णà¤\95ावर (सरà¥\8dवà¥\8dहर) à¤¨à¤¿à¤°à¥\8dधारित à¤\95à¥\87लà¥\87लà¥\8dया à¤\86à¤\95ारापà¥\87à¤\95à¥\8dषा à¤¯à¤¾ à¤¸à¤\82à¤\9aिà¤\95à¥\87à¤\9aा à¤\86à¤\95ार à¤®à¥\8bठा à¤\86हà¥\87.',
 'emptyfile' => 'चढवलेली संचिका रिकामी आहे.असे संचिकानाम चुकीचे लिहिल्याने होउ शकते. कृपया तुम्हाला हीच संचिका चढवायची आहे का ते तपासा.',
 'windows-nonascii-filename' => 'या विकिवर विशेष वर्ण असलेल्या संचिकानामाचा आधार घेता येणार नाही.',
 'fileexists' => 'या नावाची संचिका आधीच अस्तित्वात आहे, कृपया ही संचिका बदलण्याबद्दल तुम्ही साशंक असाल तर <strong>[[:$1]]</strong> तपासा.
@@ -1792,8 +1793,8 @@ $1",
 कृपया <strong>[[:$1]]</strong> ही संचिका तपासा.
 जर तपासलेली संचिका ही याच आकाराची असेल तर नवीन प्रतिकृती चढविण्याची गरज नाही.",
 'file-thumbnail-no' => 'या संचिकेचे नाव <strong>$1</strong> पासून सुरू होत आहे. ही कदाचित झलक असू शकते.
-जर तुमच्या कडे पूर्ण रिझोल्यूशनची संचिका असेल तर चढवा अथवा संचिकेचे नाव बदला.',
-'fileexists-forbidden' => 'या à¤¨à¤¾à¤µà¤¾à¤\9aà¥\80 à¤¸à¤\82à¤\9aिà¤\95ा à¤\85à¤\97à¥\8bदरà¤\9a à¤\85सà¥\8dतितà¥\8dतà¥\8dवात à¤\86हà¥\87; à¤\95à¥\83पया à¤ªà¥\81नà¥\8dहा à¤®à¤¾à¤\97à¥\87 जाऊन ही संचिका नवीन नावाने चढवा.
+जर तुमच्याकडे पूर्ण रिझोल्यूशनची संचिका असेल तर चढवा अथवा संचिकेचे नाव बदला.',
+'fileexists-forbidden' => 'या à¤¨à¤¾à¤µà¤¾à¤\9aà¥\80 à¤¸à¤\82à¤\9aिà¤\95ा à¤\85à¤\97à¥\8bदरà¤\9a à¤\85सà¥\8dतितà¥\8dतà¥\8dवात à¤\86हà¥\87; à¤\95à¥\83पया à¤ªà¥\81नà¥\8dहा à¤ªà¤°à¤¤ जाऊन ही संचिका नवीन नावाने चढवा.
 [[File:$1|thumb|center|$1]]',
 'fileexists-shared-forbidden' => 'हे नाव असलेली एक संचिका शेअर्ड संचिका कोशात आधी पासून आहे; कृपया परत मागे जा आणि नवीन, वेगळ्या नावाने ही संचिका पुन्हा चढवा. [[File:$1|thumb|center|$1]]',
 'file-exists-duplicate' => 'ही संचिका खालील {{PLURAL:$1|संचिकेची|संचिकांची}} प्रत आहे:',
@@ -1823,8 +1824,8 @@ $1",
 'watchthisupload' => 'या पानावर बदलांसाठी लक्ष ठेवा.',
 'filewasdeleted' => 'या नावाची संचिका या पूर्वी एकदा चढवून नंतर वगळली होती.तुम्ही ती पुन्हा चढवण्या अगोदर $1 तपासा.',
 'filename-bad-prefix' => "तुम्ही चढवत असलेल्या संचिकेचे नाव '''\"\$1\"''' पासून सुरू होते, जे की अंकीय छाउ (कॅमेरा) ने दिलेले अवर्णनात्मक नाव आहे.कृपया तुमच्या संचिकेकरिता अधिक वर्णनात्मक नाव निवडा.",
-'upload-success-subj' => 'यशसà¥\8dवà¥\80रà¥\80तà¥\8dया à¤\9aढवले',
-'upload-success-msg' => 'तुमचे [$2] येथून्ब चढवणे यशस्वी ठरले. ते येथे उपलब्ध आहे: [[:{{ns:file}}:$1]]',
+'upload-success-subj' => 'यशसà¥\8dवà¥\80रà¥\80तà¥\8dया à¤\85पभारित à¤\95à¥\87ले',
+'upload-success-msg' => 'तुमचे [$2] येथून अपभारण यशस्वी ठरले. ते येथे उपलब्ध आहे: [[:{{ns:file}}:$1]]',
 'upload-failure-subj' => 'चढवण्यातील त्रूटि:',
 'upload-failure-msg' => '[$2] येथून तुमच्या चढवण्यात चूक झाली:
 
@@ -1847,7 +1848,7 @@ $1',
 'backend-fail-stream' => '$1 या संचिकेचा स्त्रोत शोधता आला नाही.',
 'backend-fail-backup' => '$1 या संचिकेची आधारप्रत बनविता आली नाही.',
 'backend-fail-notexists' => '$1 ही संचिका अस्तित्वात नाही.',
-'backend-fail-hashes' => 'तà¥\81लना à¤\95रणà¥\8dयासाठà¥\80 à¤«à¤¾à¤\87ल à¤¹à¤¾शेस मिळाले नाही',
+'backend-fail-hashes' => 'तà¥\81लना à¤\95रणà¥\8dयासाठà¥\80 à¤«à¤¾à¤\87ल à¤¹à¥\85शेस मिळाले नाही',
 'backend-fail-notsame' => ' $1 येथे यापेक्षा विभिन्न असलेली संचिका पूर्वीच विद्यमान आहे',
 'backend-fail-invalidpath' => '$1 हा वैध संग्राहक-पथ नाही.',
 'backend-fail-delete' => '$1 ही संचिका (फाईल) बनवता आली नाही.',
@@ -1861,13 +1862,13 @@ $1',
 'backend-fail-closetemp' => 'तात्पुरती संचिका बंद करणे जमले नाही.',
 'backend-fail-read' => '$1 ही संचिका वाचता आली नाही.',
 'backend-fail-create' => '$1 ही संचिका लिहिता आली नाही.',
-'backend-fail-maxsize' => '$1 ही संचिका लिहिता आली नाही कारण ती {{PLURAL:$2|one byte|$2 bytes}} पेक्षा मोठी आहे.',
+'backend-fail-maxsize' => '$1 ही संचिका लिहिता आली नाही कारण ती {{PLURAL:$2|एक बाइट|$2 बाइट्स}} पेक्षा मोठी आहे.',
 'backend-fail-readonly' => 'पार्श्वभौमीक साठवण "$1" “फक्त वाचा” असे आहे. दिलेले कारण "$2" आहे.',
 'backend-fail-synced' => 'अंतर्गत पार्श्वभौमीक साठवणीतील फाईल "$1" विसंगत आहे.',
 'backend-fail-connect' => 'पार्श्वभौमीक साठा "$1"शी संबंध जोडू शकत नाही.',
 'backend-fail-internal' => 'पार्श्वभौमीक साठा "$1" यात अज्ञात चूक झाली आहे.',
 'backend-fail-contenttype' => '"$1" मध्ये ठेवलेल्या फाईलचा महितीचा प्रकार कळत नाही',
-'backend-fail-batchsize' => 'पार्श्वभौमीक साठयातील बॅच $1 फाईल{{PLURAL:$1|operation|operations}}; मधे मर्यादित कस्त $२ {{PLURAL:$2|operation|operations}} असू शकते',
+'backend-fail-batchsize' => 'पार्श्वभौमीक साठयातील बॅच $1 फाईल{{PLURAL:$1|क्रियेत|क्रियांमध्ये}}; मर्यादित कस्त $२ {{PLURAL:$2|क्रिया}} असू शकते',
 'backend-fail-usable' => 'अपुऱ्या परवानगीमुळे किंवा निर्देशिकेच्या/धारिकेच्या(डिरेक्टरीज/कंटेनर्स) अभावामुळे "$1" संचिका वाचु अथवा लिहू शकत नाही.',
 
 # File journal errors
@@ -1881,7 +1882,7 @@ $1',
 'lockmanager-fail-acquirelock' => '"$1" साठी लॉक फाइल मिळवू शकत नाही',
 'lockmanager-fail-openlock' => '"$1" साठी लॉक फाइल उघडू शकत नाही',
 'lockmanager-fail-releaselock' => '"$1" साठी लॉक उघडू शकत नाही',
-'lockmanager-fail-db-bucket' => '$1 à¤¬à¤¾à¤¸à¥\8dà¤\95à¥\87à¤\9f à¤®à¤§à¥\80ल à¤\95à¥\81लà¥\82प à¤¬à¤\82द à¤¡à¥\87à¤\9fाबà¥\87सशà¥\80 à¤ªà¥\81रà¥\87सा à¤¸à¤\82परà¥\8dà¤\95 à¤¹à¥\8bवà¥\82 à¤¶à¤\95त à¤¨à¤¾à¤¹à¥\80',
+'lockmanager-fail-db-bucket' => '$1 à¤¬à¤\95à¥\87à¤\9f à¤®à¤§à¥\80ल à¤\95à¥\81लà¥\82प à¤¬à¤\82द à¤¡à¥\87à¤\9fाबà¥\87सशà¥\80 à¤ªà¥\81रà¥\87सा à¤¸à¤\82परà¥\8dà¤\95 à¤¹à¥\8bवà¥\82 à¤¶à¤\95त à¤¨à¤¾à¤¹à¥\80.',
 'lockmanager-fail-db-release' => '"$1" डाटाबेस वरील लॉक उघडू शकत नाही',
 'lockmanager-fail-svr-acquire' => 'सर्व्हर "$1" वरील कुलूप उघडू शकत नाही',
 'lockmanager-fail-svr-release' => 'सर्व्हर "$1" वरील् लॉक उघडू शकत नाही',
@@ -1891,21 +1892,21 @@ $1',
 'zip-wrong-format' => 'ही संचिका "झिप" प्रकारची नाही.',
 'zip-bad' => 'ही संचिका दूषित किंवा न वाचता येणारी झिप संचिका आहे.
 ती सुरक्षिततेसाठी नीट तपासता आली नाही.',
-'zip-unsupported' => 'हि à¤¸à¤\82à¤\9aिà¤\95ा à¤\8fà¤\95 ZIP à¤¸à¤\82à¤\9aिà¤\95ा à¤\86हà¥\87 à¤\9cà¥\80 à¤®à¤¿à¤¡à¥\80याविà¤\95à¥\80 à¤¦à¥\8dवरे  (support) न केलेले ZIP वैशिष्ट्ये (features) वापरते.
-या संचिकेची सुरक्षा पडताळणीसाठी व्यवस्थितरीत्या होऊ शकत नाही.',
+'zip-unsupported' => 'हà¥\80 à¤¸à¤\82à¤\9aिà¤\95ा à¤\8fà¤\95 ZIP à¤¸à¤\82à¤\9aिà¤\95ा à¤\86हà¥\87 à¤\9cà¥\80 à¤®à¤¿à¤¡à¥\80याविà¤\95à¥\80 à¤¦à¥\8dवारे  (support) न केलेले ZIP वैशिष्ट्ये (features) वापरते.
+या संचिकेची सुरक्षा पडताळणी व्यवस्थितरीत्या होऊ शकत नाही.',
 
 # Special:UploadStash
 'uploadstash' => 'चढवणे लपवा',
 'uploadstash-summary' => 'या पानावर अश्या संचिका पहावयास् मिळतात ज्या चढवल्या आहेत (अथवा चढवल्या जात आहेत) परंतु अजून विकी वर प्रकाशित केल्या नाहित. या संचिका फक्त त्या सदस्यास् दिसतील ज्याने त्या चढवल्या आहेत, इतर सदस्यांस् त्या दिसणार नाहीत.',
 'uploadstash-clear' => 'लपवलेल्या संचिका काढा',
 'uploadstash-nofiles' => 'तुमच्याकडे लपवलेल्या संचिका नाहीत.',
-'uploadstash-badtoken' => 'हि कृती अयशस्वी होती. कदाचित आपल्या संपादन अधिकारपत्राची (editing credentials) मुदत संपली.',
+'uploadstash-badtoken' => 'हà¥\80 कृती अयशस्वी होती. कदाचित आपल्या संपादन अधिकारपत्राची (editing credentials) मुदत संपली.',
 'uploadstash-errclear' => 'संचिका स्वच्छ करणे अयशस्वी.',
 'uploadstash-refresh' => 'संचिकांची यादी ताजीतवानी करा',
 'invalid-chunk-offset' => 'अग्राह्य चंक ऑफसेट',
 
 # img_auth script messages
-'img-auth-accessdenied' => 'परवानà¤\97à¥\80 à¤¨à¤¾à¤¹à¥\80',
+'img-auth-accessdenied' => 'पà¥\8bहà¥\8bà¤\9a à¤¨à¤¾à¤\95ारलà¥\8dया à¤\97à¥\87लà¥\80.',
 'img-auth-nopathinfo' => 'मार्ग माहिती आढळली नाही.
 आपला सर्व्हर ही माहिती पोचवू शकत नाही.
 तो सीजीआय-आधारित व इमेज_ऑथला समर्थन न देऊ शकणारा असू शकतो.
@@ -1918,8 +1919,8 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization कृपया हे
 फक्त संचिका वापरण्याची परवानगी आहे.',
 'img-auth-streaming' => 'स्ट्रीमिंग "$1".',
 'img-auth-public' => 'img_auth.php हे  वैयक्तिक विकीमधून  माहिती प्रदान करण्याचे कार्य करते.
-हा विकि सार्वजनिक विकि म्हणून सब्चित करण्यात आला आ.े.
-à¤\89à¤\9aित à¤¸à¥\81रà¤\95à¥\8dषा à¤\95à¥\87 à¤²à¤¿à¤\8f img_auth.php à¤\95à¥\8b à¤¨à¤¿à¤·à¥\8dà¤\95à¥\83य à¤\95िया à¤¹à¥\81à¤\86 à¤¹à¥\88।',
+हा विकि सार्वजनिक विकि म्हणून सब्चित करण्यात आला आे.
+à¤\95िमान à¤¸à¥\81रà¤\95à¥\8dषà¥\87साठà¥\80 img_auth.php à¤²à¤¾ à¤\85à¤\95à¥\8dषम à¤\95à¥\87लà¥\87 à¤\86हà¥\87.',
 'img-auth-noread' => 'तुम्हाला "$1" वाचण्याची परवानगी नाही',
 'img-auth-bad-query-string' => 'या दुव्यामध्ये (URL) अवैध query string आहे.',
 
@@ -1950,7 +1951,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization कृपया हे
 'listfiles_search_for' => 'चित्र नावाने शोध:',
 'imgfile' => 'संचिका',
 'listfiles' => 'चित्र यादी',
-'listfiles_thumb' => 'पà¥\8dरारà¥\81प',
+'listfiles_thumb' => 'नà¤\96à¥\81लà¥\87',
 'listfiles_date' => 'दिनांक',
 'listfiles_name' => 'नाव',
 'listfiles_user' => 'सदस्य',
@@ -1973,7 +1974,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization कृपया हे
 'filehist-datetime' => 'दिनांक/वेळ',
 'filehist-thumb' => 'नखुले',
 'filehist-thumbtext' => '$1 च्या आवृत्तीचे नखुले',
-'filehist-nothumb' => 'पà¥\8dरारà¥\81प नाही',
+'filehist-nothumb' => 'नà¤\96à¥\81लà¥\87à¤\9aितà¥\8dर नाही',
 'filehist-user' => 'सदस्य',
 'filehist-dimensions' => 'आकार',
 'filehist-filesize' => 'संचिकेचा आकार (बाईट्स)',
@@ -1996,7 +1997,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization कृपया हे
 'sharedupload-desc-edit' => "संचिका $1 मधील आहे व ती इतर प्रकल्पांमध्ये वापरली जाऊ शकते.आपणास हवे असल्यास,या पानाच्या[$2 'संचिका वर्णन पान'] येथे,त्याची माहिती संपादु शकता.",
 'sharedupload-desc-create' => "संचिका $1 मधील आहे व ती इतर प्रकल्पांमध्ये वापरली जात असल्याची शक्यता आहे.आपणास हवे असल्यास,या पानाच्या[$2 'संचिका वर्णन पान'] येथे,त्याची माहिती संपादु शकता",
 'filepage-nofile' => 'या नावाची संचिका अस्तित्वात नाही.',
-'filepage-nofile-link' => 'या à¤¨à¤¾à¤µà¤¾à¤\9aà¥\80 à¤¸à¤\82à¤\9aिà¤\95ा à¤\85सà¥\8dतितà¥\8dयà¥\8dवात à¤¨à¤¾à¤¹à¥\80, à¤ªà¤£ à¤¤à¥\81मà¥\8dहà¥\80 à¤¤à¥\80 [$1 à¤\9aढवà¥\82 à¤¶à¤\95ता].',
+'filepage-nofile-link' => 'या नावाची संचिका अस्तित्वात नाही, पण तुम्ही ती [$1 चढवू शकता].',
 'uploadnewversion-linktext' => 'या संचिकेची नवीन आवृत्ती चढवा',
 'shared-repo-from' => '$1 पासून',
 'shared-repo' => 'एक मुक्त कोश',
@@ -2023,13 +2024,13 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization कृपया हे
 'filedelete-success-old' => '<span class="plainlinks">$3, $2 वेळी \'\'\'[[Media:$1|$1]]\'\'\' चे आवर्तन वगळण्यात आले आहे .</span>',
 'filedelete-nofile' => "'''$1''' अस्तित्वात नाही.",
 'filedelete-nofile-old' => "सांगितलेल्या गुणधर्मानुसार  '''$1'''चे कोणतेही विदा आवर्तन संचित नाही.",
-'filedelete-otherreason' => 'à¤\87तर/शिवाय à¤\85धिà¤\95 कारण:',
+'filedelete-otherreason' => 'दà¥\81सरà¥\87/à¤\85तिरिà¤\95à¥\8dत कारण:',
 'filedelete-reason-otherlist' => 'इतर कारण',
 'filedelete-reason-dropdown' => '*वगळण्याची सामान्य कारणे
 ** प्रताधिकार उल्लंघन
 ** जुळी संचिका',
 'filedelete-edit-reasonlist' => 'वगळण्याची कारणे संपादित करा',
-'filedelete-maintenance' => 'फाà¤\88ल à¤µà¤\97ळनà¥\87 à¤\86णि à¤ªà¥\81नà¥\8d:सà¥\8dथापित à¤\95रणà¥\8d',
+'filedelete-maintenance' => 'दà¥\87à¤\96भालà¥\80दरमà¥\8dयान, à¤¸à¤\82à¤\9aिà¤\95ा à¤µà¤\97ळणà¥\87 à¤µ à¤ªà¥\81नरà¥\8dसà¥\8dथापित à¤\95रणà¥\87 à¤¤à¤¾à¤¤à¥\8dपà¥\81रतà¥\87 à¤\85à¤\95à¥\8dषम à¤\95à¥\87लà¥\8dया à¤\97à¥\87लà¥\87 à¤\86हà¥\87.',
 'filedelete-maintenance-title' => 'संचिका (फाईल) वगळू शकत नाही.',
 
 # MIME search
@@ -2037,13 +2038,13 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization कृपया हे
 'mimesearch-summary' => 'हे पान विविधामाप (माईम)-प्रकारांकरिता संचिकांची चाळणी करण्याची सुविधा पुरवते:
 Input:contenttype/subtype, e.g. <code>image/jpeg</code>.',
 'mimetype' => 'विविधामाप (माईम) प्रकार:',
-'download' => 'à¤\89तरवा',
+'download' => 'à¤\85धिभारण à¤\95रा',
 
 # Unwatched pages
-'unwatchedpages' => 'लà¤\95à¥\8dष नसलेली पाने',
+'unwatchedpages' => 'दà¥\87à¤\96रà¥\87à¤\96 नसलेली पाने',
 
 # List redirects
-'listredirects' => 'पà¥\81नरà¥\8dनिरà¥\8dदà¥\87शनà¥\87 à¤¦à¤¾à¤\96वा',
+'listredirects' => 'पà¥\81नरà¥\8dनिरà¥\8dदà¥\87शनाà¤\82à¤\9aà¥\80 à¤¯à¤¾à¤¦à¥\80',
 
 # Unused templates
 'unusedtemplates' => 'न वापरलेले साचे',
@@ -2072,14 +2073,14 @@ Input:contenttype/subtype, e.g. <code>image/jpeg</code>.',
 'statistics-header-views' => 'सांख्यिकी पहा',
 'statistics-header-users' => 'सदस्य सांख्यिकी',
 'statistics-header-hooks' => 'इतर सांख्यिकी',
-'statistics-articles' => 'सà¤\82बà¤\82धित पाने',
+'statistics-articles' => 'à¤\86शय पाने',
 'statistics-pages' => 'पाने',
 'statistics-pages-desc' => 'विकीमधील सर्व पाने, पुनर्निर्देशने, चर्चापानांसहित.',
-'statistics-files' => 'à¤\9aढवलà¥\87लà¥\8dया संचिका',
+'statistics-files' => 'à¤\85पभारà¥\80त संचिका',
 'statistics-edits' => '{{SITENAME}} च्या सुरुवातीपासूनची पानांची संपादने',
 'statistics-edits-average' => 'प्रतिपान सरासरी संपादने',
 'statistics-views-total' => 'सर्व दाखवते',
-'statistics-views-total-desc' => 'à¤\9cà¥\87 à¤ªà¤¾à¤¨à¥\87 à¤¯à¤¾à¤®à¤§à¥\8dदà¥\87 à¤¨à¤¾à¤¹à¥\80त à¤¤à¥\87 à¤ªà¤¾à¤¹à¤¾ à¤\86नि à¤\96ास à¤ªà¤¾à¤¨à¥\87 à¤¸à¤¾à¤®à¤¿à¤²à¤¾ à¤\95रà¥\82 à¤¨à¤\95ा.',
+'statistics-views-total-desc' => 'à¤\85सà¥\8dतितà¥\8dवात à¤¨à¤¸à¤²à¥\87लà¥\80 à¤ªà¤¾à¤¨à¥\87 à¤µ à¤µà¤¿à¤¶à¥\87ष à¤ªà¤¾à¤¨à¥\87 à¤¯à¤¾à¤\82à¤\9aà¥\80 à¤¦à¥\83षà¥\8dयता à¤¯à¤¾à¤¤ à¤\85à¤\82तरà¥\8dभà¥\82त à¤¨à¤¾à¤¹à¥\80',
 'statistics-views-peredit' => 'प्रति संपादनामागे पाहणे',
 'statistics-users' => 'नोंदणीकृत [[Special:ListUsers|सदस्य]]',
 'statistics-users-active' => 'कार्यरत सदस्य',
@@ -2095,13 +2096,16 @@ Input:contenttype/subtype, e.g. <code>image/jpeg</code>.',
 'pageswithprop-prophidden-binary' => 'बायनरी गुणधर्माची किंमत लपविलेली आहे ($1)',
 
 'doubleredirects' => 'दुहेरी-पुनर्निर्देशने',
-'doubleredirectstext' => 'हे पान अशा पानांची सूची पुरवते की जी पुर्ननिर्देशीत पाने दुसऱ्या पुर्ननिर्देशीत पानाकडे निर्देशित झाली आहेत.प्रत्येक ओळीत पहिल्या आणि दुसऱ्या पुर्ननिर्देशनास दुवा दिला आहे सोबतच दुसरे पुर्ननिर्देशन ज्या पानाकडे पोहचते ते पण दिले आहे, जे की बरोबर असण्याची शक्यता आहे ,ते वस्तुतः पहिल्या पानापासूनचेही पुर्ननिर्देशन असावयास हवे.',
+'doubleredirectstext' => 'हे पान, अशा पानांची यादी पुरवते की जी पाने, दुसऱ्या पुर्ननिर्देशीत पानाकडे पुर्ननिर्देशीत झाली आहेत.प्रत्येक ओळीत पहिल्या आणि दुसऱ्या पुर्ननिर्देशनाचा दुवा दिला आहे,तसेच, दुसऱ्या  पुर्ननिर्देशनाचे लक्ष्य पान पण दिले आहे,जे मुळात ते 
+लक्ष्यपान आहे ज्याकडे, पहिले पुनर्निर्देशन असावयास हवे.
+
+<del>खोडलेल्या प्रविष्टी</del>समायोजित करण्यात आलेल्या आहेत.',
 'double-redirect-fixed-move' => '[[$1]] हलवले गेले आहे.
-ते [[$2]] येथे निर्देशित होते.',
-'double-redirect-fixed-maintenance' => '[[$1]] à¤¤à¥\87 [[$2]] à¤¹à¥\87 à¤\9aà¥\81à¤\95à¥\80à¤\9aà¥\87 à¤ªà¥\81नरà¥\8dनिरà¥\8dदà¥\87शन à¤¨à¥\80à¤\9f केले.',
-'double-redirect-fixer' => 'पà¥\81नरà¥\8dनिरà¥\8dदà¥\87शन à¤¨à¥\80à¤\9f करणारा',
+ते आता [[$2]] येथे निर्देशित होते.',
+'double-redirect-fixed-maintenance' => '[[$1]] à¤¤à¥\87 [[$2]] à¤¹à¥\87 à¤\9aà¥\81à¤\95à¥\80à¤\9aà¥\87 à¤ªà¥\81नरà¥\8dनिरà¥\8dदà¥\87शन à¤ à¤¿à¤\95ठाà¤\95 केले.',
+'double-redirect-fixer' => 'पà¥\81नरà¥\8dनिरà¥\8dदà¥\87शन à¤ à¤¿à¤\95ठाà¤\95 करणारा',
 
-'brokenredirects' => 'मà¥\8bडà¤\95à¥\87 à¤ªà¥\81नरà¥\8dनिरà¥\8dदà¥\87शन',
+'brokenredirects' => 'मà¥\8bडà¤\95à¥\80 à¤ªà¥\81नरà¥\8dनिरà¥\8dदà¥\87शनà¥\87',
 'brokenredirectstext' => 'खालील पुनर्निर्देशने अस्तित्वात नसलेली पाने जोडतात:',
 'brokenredirects-edit' => 'संपादन',
 'brokenredirects-delete' => 'वगळा',
@@ -2119,6 +2123,7 @@ Input:contenttype/subtype, e.g. <code>image/jpeg</code>.',
 'ninterwikis' => '$1 {{PLURAL:$1|आंतरविकि|आंतरविकि दुवे}}',
 'nlinks' => '$1 {{PLURAL:$1|दुवा|दुवे}}',
 'nmembers' => '$1 {{PLURAL:$1|सदस्य}}',
+'nmemberschanged' => '$1 → $2 {{PLURAL:$2|सदस्य}}',
 'nrevisions' => '$1 {{PLURAL:$1|आवर्तन|आवर्तने}}',
 'nviews' => '$1 {{PLURAL:$1|दृषीपथ|दृषीपथ}}',
 'nimagelinks' => '$1{{PLURAL:$1|पानावर|पानांवर}}',
@@ -2157,6 +2162,7 @@ Input:contenttype/subtype, e.g. <code>image/jpeg</code>.',
 'protectedpages' => 'सुरक्षित पाने',
 'protectedpages-indef' => 'फक्त अनंत काळासाठी सुरक्षित केलेले',
 'protectedpages-cascade' => 'केवळ एकामेकांवर अवलंबून कास्केडींग सुरक्षा (सुरक्षा शिडी)',
+'protectedpages-noredirect' => 'पुनर्निर्देशने लपवा',
 'protectedpagesempty' => 'सध्या या नियमावलीने कोणतीही पाने सुरक्षित केलेली नाहीत.',
 'protectedtitles' => 'सुरक्षीत शीर्षके',
 'protectedtitlesempty' => 'या नियमावलीने सध्या कोणतीही शीर्षके सुरक्षित केलेली नाहीत.',
@@ -2270,14 +2276,14 @@ Input:contenttype/subtype, e.g. <code>image/jpeg</code>.',
 'listgrouprights-rights' => 'अधिकार',
 'listgrouprights-helppage' => 'Help:गट अधिकार',
 'listgrouprights-members' => '(सदस्यांची यादी)',
-'listgrouprights-addgroup' => '{{PLURAL:$2|गट|गट}} वाढवा: $1',
-'listgrouprights-removegroup' => '{{PLURAL:$2|गट|गट}} वगळा: $1',
+'listgrouprights-addgroup' => '{{PLURAL:$2|गट}} वाढवा: $1',
+'listgrouprights-removegroup' => '{{PLURAL:$2|गट}} वगळा: $1',
 'listgrouprights-addgroup-all' => 'सर्व गट वाढवा',
-'listgrouprights-removegroup-all' => 'सरà¥\8dव à¤¸à¤®à¥\82ह काढून टाका',
-'listgrouprights-addgroup-self' => 'स्वतःच्या खात्यात हे {{PLURAL:$2|गट|गट}} मिळवा: $1',
-'listgrouprights-removegroup-self' => 'स्वतःच्या खात्यातून हे {{PLURAL:$2|गट|गट}} वगळा: $1',
-'listgrouprights-addgroup-self-all' => 'सरà¥\8dव à¤¸à¤®à¥\82ह à¤¸à¥\8dवतà¤\83à¤\9aà¥\8dया à¤\96ातà¥\8dयात à¤®à¤¿à¤³à¤µा',
-'listgrouprights-removegroup-self-all' => 'सरà¥\8dव à¤¸à¤®à¥\82ह स्वतःच्या खात्यातून काढून टाका',
+'listgrouprights-removegroup-all' => 'सरà¥\8dव à¤\97à¤\9f काढून टाका',
+'listgrouprights-addgroup-self' => 'स्वतःच्या खात्यात हे {{PLURAL:$2|गट}} मिळवा: $1',
+'listgrouprights-removegroup-self' => 'स्वतःच्या खात्यातून हे {{PLURAL:$2|गट}} वगळा: $1',
+'listgrouprights-addgroup-self-all' => 'सरà¥\8dव à¤\97à¤\9f à¤¸à¥\8dवतà¤\83à¤\9aà¥\8dया à¤\96ातà¥\8dयात à¤\9cà¥\8bडा',
+'listgrouprights-removegroup-self-all' => 'सरà¥\8dव à¤\97à¤\9f स्वतःच्या खात्यातून काढून टाका',
 
 # Email user
 'mailnologin' => 'पाठविण्याचा पत्ता नाही',
@@ -2296,22 +2302,22 @@ Input:contenttype/subtype, e.g. <code>image/jpeg</code>.',
 'noemailtitle' => 'विपत्र पत्ता नाही',
 'noemailtext' => 'या सदस्याने वैध विपत्र पत्ता नमूद केलेला नाही.',
 'nowikiemailtitle' => 'विपत्र प्रतिबंधित',
-'nowikiemailtext' => 'हा à¤ªà¥\8dरयà¥\8bà¤\95à¥\8dता à¤\85नà¥\8dय à¤ªà¥\8dरयà¥\8bà¤\95à¥\8dता à¤\95डà¥\82न  à¤\88-मà¥\87ल à¤\98à¥\87à¤\8a à¤\87à¤\9aà¥\8dà¤\9bित à¤¨à¤¾à¤¹à¥\80.',
-'emailnotarget' => 'पà¥\8dरापà¥\8dतà¤\95रà¥\8dता à¤\95रà¥\80ता à¤\85सà¥\8dतितà¥\8dवात à¤¨à¤¸à¤²à¥\87लà¥\87  à¤\95िà¤\82वा à¤\85वà¥\88ध à¤¸à¤¦à¤¸à¥\8dय',
-'emailtarget' => 'पà¥\8dरापà¥\8dतà¤\95रà¥\8dता à¤ªà¥\8dरयà¥\8bà¤\95à¥\8dताà¤\9aà¥\87 à¤¨à¤¾à¤\82व à¤\9fाà¤\95ा.',
+'nowikiemailtext' => 'या à¤¸à¤¦à¤¸à¥\8dयानà¥\87 à¤\85नà¥\8dय à¤¸à¤¦à¤¸à¥\8dयाà¤\82à¤\95डà¥\82न  à¤\88-मà¥\87ल à¤¯à¥\87à¤\8a à¤¨ à¤¦à¥\87णà¥\8dयाà¤\9aà¥\87 (à¤\90à¤\9aà¥\8dà¤\9bिà¤\95) à¤¨à¤¿à¤µà¤¡à¤²à¥\87 à¤\86हà¥\87.',
+'emailnotarget' => 'पà¥\8dरापà¥\8dतà¤\95रà¥\8dतà¥\8dयाà¤\9aà¥\87 à¤\85सà¥\8dतितà¥\8dवात à¤¨à¤¸à¤²à¥\87लà¥\87  à¤\95िà¤\82वा à¤\85वà¥\88ध à¤¸à¤¦à¤¸à¥\8dयनाम.',
+'emailtarget' => 'पà¥\8dरापà¥\8dतà¤\95रà¥\8dतà¥\8dयाà¤\9aà¥\87 à¤¸à¤¦à¤¸à¥\8dयनाम à¤\9fाà¤\95ा',
 'emailusername' => 'सदस्यनाम:',
 'emailusernamesubmit' => 'पाठवा',
-'email-legend' => 'à¤\88मà¥\87ल à¤\85नà¥\8dय à¤¸à¤¦à¤¸à¥\8dयाला पाठवा',
-'emailfrom' => 'प्रेषक',
+'email-legend' => 'à¤\85नà¥\8dय {{SITENAME}} à¤µà¤°à¥\80ल à¤¸à¤¦à¤¸à¥\8dयाला à¤\88मà¥\87ल पाठवा',
+'emailfrom' => 'प्रेषक:',
 'emailto' => 'प्रति:',
 'emailsubject' => 'विषय:',
 'emailmessage' => 'संदेश:',
 'emailsend' => 'पाठवा',
-'emailccme' => 'माà¤\9dà¥\8dया à¤¸à¤\82दà¥\87शाà¤\9aà¥\80 à¤®à¤²à¤¾ à¤µà¤¿à¤ªà¤¤à¥\8dर à¤ªà¥\8dरत पाठवा.',
-'emailccsubject' => 'तुमच्या विपत्राची प्रत कडे $1: $2',
+'emailccme' => 'माà¤\9dà¥\8dया à¤¸à¤\82दà¥\87शाà¤\9aà¥\80 à¤ªà¥\8dरत à¤®à¤²à¤¾ à¤µà¤¿à¤ªà¤¤à¥\8dरादà¥\8dवारà¥\87 पाठवा.',
+'emailccsubject' => '$1 ला पाठविलेल्या आपल्या विपत्राची प्रत: $2',
 'emailsent' => 'विपत्र पाठवले',
 'emailsenttext' => 'तुमचा विपत्र संदेश पाठवण्यात आला आहे.',
-'emailuserfooter' => 'हे विपत्र $1 ने $2 ला {{SITENAME}} वरील "सदस्यास विपत्र पाठवा" वापरुन पाठवले आहे.',
+'emailuserfooter' => '$1 ने $2 ला हे विपत्र, {{SITENAME}} वरील, "सदस्यास विपत्र पाठवा" ही प्रक्रिया वापरुन पाठवले आहे.',
 
 # User Messenger
 'usermessage-summary' => 'प्रणाली संदेश देत आहे.',
@@ -2323,8 +2329,8 @@ Input:contenttype/subtype, e.g. <code>image/jpeg</code>.',
 'watchlistfor2' => '$1 $2 साठी',
 'nowatchlist' => 'तुमची पहाऱ्याची सूची रिकामी आहे.',
 'watchlistanontext' => 'तुमच्या पहाऱ्याच्या सूचीमधील बाबी पाहण्याकरता किंवा संपादित करण्याकरता, कृपया $1.',
-'watchnologin' => 'पà¥\8dरवà¥\87श à¤\95à¥\87लà¥\87ला नाही',
-'watchnologintext' => 'तà¥\81मà¤\9aà¥\80 à¤ªà¤¹à¤¾à¤±à¥\8dयाà¤\9aà¥\80 à¤¸à¥\82à¤\9aà¥\80 à¤¬à¤¦à¤²à¤¾à¤¯à¤\9aà¥\80 à¤\85सà¥\87ल à¤¤à¤° à¤¤à¥\81मà¥\8dहà¥\80 [[Special:UserLogin|पà¥\8dरवà¥\87श à¤\95à¥\87लà¥\87ला]] à¤\85सलाà¤\9a à¤ªà¤¾à¤¹à¥\80à¤\9cà¥\87.',
+'watchnologin' => 'सनà¥\8bà¤\82द-पà¥\8dरवà¥\87शित नाही',
+'watchnologintext' => 'à¤\86पलà¥\80 à¤ªà¤¹à¤¾à¤±à¥\8dयाà¤\9aà¥\80 à¤¸à¥\82à¤\9aà¥\80 à¤¬à¤¦à¤²à¤µà¤¾à¤¯à¤\9aà¥\80 à¤\85सà¥\87ल à¤¤à¤° à¤\86पणास [[Special:UserLogin|सनà¥\8bà¤\82द-पà¥\8dरवà¥\87शित]] à¤\85सावà¥\87 à¤²à¤¾à¤\97à¥\87ल.',
 'addwatch' => 'पहाऱ्याच्या सूचीमध्ये टाका',
 'addedwatchtext' => '"[[:$1]]"  हे पान तुमच्या  [[Special:Watchlist|\'माझी निरीक्षणसूची\']]मध्ये टाकले आहे. या पानावरील तसेच त्याच्या चर्चा पानावरील भविष्यातील बदल तेथे दाखवले जातील',
 'removewatch' => 'पहाऱ्याच्या सूचीतून वगळा',
@@ -2333,7 +2339,7 @@ Input:contenttype/subtype, e.g. <code>image/jpeg</code>.',
 'watchthispage' => 'या पानावर बदलांसाठी लक्ष ठेवा.',
 'unwatch' => 'पहारा काढा',
 'unwatchthispage' => 'पहारा काढून टाका',
-'notanarticle' => 'मà¤\9cà¤\95à¥\81र à¤µà¤¿à¤°à¤¹à¤¿à¤¤ à¤ªà¤¾à¤¨',
+'notanarticle' => 'हà¥\87 à¤\86शयपान à¤¨à¤¾à¤¹à¥\80',
 'notvisiblerev' => 'आवृत्ती वगळण्यात आलेली आहे',
 'watchlist-details' => 'पहाऱ्याच्या सूचीमधील {{PLURAL:$1|$1 पान|$1 पाने}}, यात चर्चा पाने मोजलेली नाहीत.',
 'wlheader-enotif' => 'विपत्र अधिसूचना सुविधा शक्य केली.',
@@ -2341,17 +2347,17 @@ Input:contenttype/subtype, e.g. <code>image/jpeg</code>.',
 'watchmethod-recent' => 'पहाऱ्यातील पानांकरिता अलीकडील बदलांचा तपास',
 'watchmethod-list' => 'अलीकडील बदलांकरिता पहाऱ्यातील पानांचा तपास',
 'watchlistcontains' => 'तुमचा $1 {{PLURAL:$1|पानावर|पानांवर}} पहारा आहे.',
-'iteminvalidname' => "'$1'बाबà¥\80स à¤¸à¤®à¤¸à¥\8dया, à¤\85मानà¥\8dय नाव...",
+'iteminvalidname' => "'$1'या à¤¬à¤¾à¤¬à¥\80साठà¥\80 à¤¸à¤®à¤¸à¥\8dया, à¤\85वà¥\88ध नाव...",
 'wlnote' => "खाली $3, $4 पर्यंतचे गेल्या {{PLURAL:$2| '''१''' तासातील|'''$2''' तासातील}} {{PLURAL:$1|शेवटचा बदल दिला आहे|शेवटाचे '''$1'''बदल दिले आहेत}}.",
 'wlshowlast' => 'मागील $1 तास $2 दिवस $3 पहा',
 'watchlist-options' => 'पहाऱ्याच्या सूचीचे पर्याय',
 
 # Displayed when you click the "watch" button and it is in the process of watching
-'watching' => 'पाहताहे...',
+'watching' => 'पहारा à¤¦à¥\87त à¤\86हे...',
 'unwatching' => 'पहारा काढत आहे...',
 'watcherrortext' => '$1 साठीच्या तुमच्या पहाऱ्याच्या सूचीमधील मांडणीत (watchlist settings) बदल करताना त्रुटी आली.',
 
-'enotif_mailer' => '{{SITENAME}} सूचना विपत्र',
+'enotif_mailer' => '{{SITENAME}} à¤\85धिसà¥\82à¤\9aना à¤µà¤¿à¤ªà¤¤à¥\8dर',
 'enotif_reset' => 'सर्व पानास भेट दिल्याचे नमूद करा',
 'enotif_impersonal_salutation' => '{{SITENAME}} सदस्य',
 'enotif_subject_deleted' => '{{SITENAME}} पानाला $1 {{gender:$2|$2}} ने वगळले',
@@ -2364,9 +2370,9 @@ Input:contenttype/subtype, e.g. <code>image/jpeg</code>.',
 'enotif_body_intro_moved' => '{{SITENAME}} हे $1 या लेखनामाचे पान या $PAGEEDITDATE (या संपादनाच्या तारखेस)$2 ने {{GENDER:$2|हलविले.}} अद्यतन आवृत्तीसाठी कृपया $3 बघा.',
 'enotif_body_intro_restored' => '{{SITENAME}} हे $1 या लेखनामाचे पान या $PAGEEDITDATE (या संपादनाच्या तारखेस)$2 ने {{GENDER:$2|पुनर्स्थापित केले.}}अद्यतन आवृत्तीसाठी कृपया $3 बघा.',
 'enotif_body_intro_changed' => '{{SITENAME}} हे $1 या लेखनामाचे पान या $PAGEEDITDATE (या संपादनाच्या तारखेस)$2 ने {{GENDER:$2|बदलविले.}} अद्यतन आवृत्तीसाठी कृपया $3 बघा.',
-'enotif_lastvisited' => 'तà¥\81मà¤\9aà¥\8dया à¤¶à¥\87वà¤\9fà¤\9aà¥\8dया à¤­à¥\87à¤\9fà¥\80नà¤\82तरà¤\9aà¥\87 à¤¬à¤¦à¤² à¤¬à¤\98णयासाठà¥\80 à¤ªà¤¹à¤¾ - $1.',
+'enotif_lastvisited' => 'तà¥\81मà¤\9aà¥\8dया à¤¶à¥\87वà¤\9fà¤\9aà¥\8dया à¤­à¥\87à¤\9fà¥\80नà¤\82तरà¤\9aà¥\87 à¤¬à¤¦à¤² à¤¬à¤\98णà¥\8dयासाठà¥\80 $1 à¤ªà¤¹à¤¾.',
 'enotif_lastdiff' => 'हा बदल पहाण्याकरिता $1 पहा.',
-'enotif_anon_editor' => 'à¤\85नामिà¤\95 à¤\89पयà¥\8bà¤\97à¤\95रà¥\8dता $1',
+'enotif_anon_editor' => 'à¤\85नामिà¤\95 à¤¸à¤¦à¤¸à¥\8dय $1',
 'enotif_body' => 'प्रिय $WATCHINGUSERNAME,
 
 {{SITENAME}}या लेखनावाचे $PAGETITLE (या मथळ्याचे) पान $PAGEEDITOR ने $PAGEEDITDATE ( या तारखेस) $CHANGEDORCREATED तयार केले किंवा बदलले आहे. सध्याची आवृत्ती पाहण्यासाठी खालील दुव्यावर टिचकी मारा.
@@ -2406,8 +2412,8 @@ $UNWATCHURL
 'delete-confirm' => '"$1" वगळा',
 'delete-legend' => 'वगळा',
 'historywarning' => 'सूचना: तुम्ही वगळत असलेल्या पानाला $1 {{PLURAL:$1|आवर्तनाचा|आवर्तनांचा}} इतिहास आहे:',
-'confirmdeletetext' => 'तुम्ही एक लेख त्याच्या सर्व इतिहासासोबत वगळण्याच्या तयारीत आहात.
-कृपया तुम्ही करत असलेली कृती ही मीडियाविकीच्या [[{{MediaWiki:Policy-url}}|नीतीनुसार]] आहे ह्याची खात्री करा. तसेच तुम्ही करित असलेल्या कृतीचे परिणाम कृती करण्यापूर्वी जाणून घ्या.',
+'confirmdeletetext' => 'तुम्ही एक लेखपान त्याच्या सर्व इतिहासासोबत वगळण्याच्या तयारीत आहात.
+कृपया, तुम्ही करीत असलेली कृती ही मीडियाविकीच्या [[{{MediaWiki:Policy-url}}|नीतीनुसार]] आहे ह्याची खात्री करा. तसेच, तुम्ही करीत असलेल्या कृतीचे परिणाम, कृती करण्यापूर्वी जाणून घ्या.',
 'actioncomplete' => 'काम पूर्ण',
 'actionfailed' => 'कृती अयशस्वी झाली',
 'deletedtext' => '"$1" हा लेख वगळला. अलीकडे वगळलेले लेख पाहण्यासाठी $2 पहा.',
@@ -2425,17 +2431,16 @@ $UNWATCHURL
 ** लेखकाची(लेखिकेची) विनंती
 ** तुटकी पुनर्निर्देशने',
 'delete-edit-reasonlist' => 'वगळण्याची कारणे संपादित करा',
-'delete-toobig' => 'या पानाला खूप मोठी इतिहास यादी आहे, तसेच हे पान $1 {{PLURAL:$1|पेक्षा|पेक्षा}}पेक्षा जास्त वेळा बदलण्यात आलेले आहे. अशी पाने वगळणे हे {{SITENAME}} ला धोकादायक ठरू नये म्हणून शक्य केलेले नाही.',
-'delete-warning-toobig' => 'या पानाला खूप मोठी इतिहास यादी आहे, तसेच हे पान $1 {{PLURAL:$1|पेक्षा|पेक्षा}} पेक्षा जास्त वेळा बदलण्यात आलेले आहे.
-अशी पाने वगळणे हे {{SITENAME}} ला धोकादायक ठरू शकते;
-कृपया काळजीपूर्वक हे पान वगळा.',
+'delete-toobig' => 'या पानाला, $1 {{PLURAL:$1|आवृत्ती|आवृत्त्यां}}मुळे तयार झालेला खूप मोठा संपादन इतिहास आहे. {{SITENAME}} वर आकस्मिक होणारी उलथापालथ वाचविण्यासाठी, अश्या पानांचे वगळणे प्रतिबंधित केल्या गेले आहे.',
+'delete-warning-toobig' => 'या पानाला, $1 {{PLURAL:$1|आवृत्ती|आवृत्त्यां}}मुळे तयार झालेला खूप मोठा संपादन इतिहास आहे.त्याचे वगळण्याने {{SITENAME}} वर डाटाबेसच्या क्रियांची उलथापालथ होऊ शकते; सावधगिरीने पुढे जा.',
+'deleting-backlinks-warning' => "'''ईशारा:'''आपण वगळत असणाऱ्या पानास इतर पानांचे दुवे आहेत.",
 
 # Rollback
 'rollback' => 'बदल वेगात माघारी न्या',
 'rollback_short' => 'द्रुतमाघार',
 'rollbacklink' => 'द्रुतमाघार',
 'rollbacklinkcount' => 'उलटवा $1 {{PLURAL:$1|संपादन|संपादने}}',
-'rollbacklinkcount-morethan' => '$1 पेक्षा अधिक उलटवा {{PLURAL:$1|संपादन|संपादने}}',
+'rollbacklinkcount-morethan' => '$1 पेक्षा अधिक {{PLURAL:$1|संपादन|संपादने}} उलटवा',
 'rollbackfailed' => 'द्रूतमाघार फसली',
 'cantrollback' => 'जुन्या आवृत्तीकडे परतवता येत नाही; शेवटचा संपादक या पानाचा एकमात्र लेखक आहे.',
 'alreadyrolled' => '[[User:$2|$2]] ([[User talk:$2|Talk]] [[Special:Contributions/$2|{{int:contribslink}}]])चे शेवटाचे [[:$1]]वे संपादन माघारी परतवता येत नाही; पान आधीच कुणी माघारी परतवले आहे किंवा संपादित केले आहे.
@@ -2448,7 +2453,8 @@ $UNWATCHURL
 
 # Edit tokens
 'sessionfailure-title' => 'सत्र त्रुटी',
-'sessionfailure' => 'तुमच्या दाखल सत्रात काही समस्या दिसते;सत्र अपहारणा पासून काळजी घेण्याच्या दृष्टीने ही कृती रद्द केली गेली आहे.कपया आपल्या विचरकाच्या "back" कळीवर टिचकी मारा आणि तुम्ही ज्या पानावरून आला ते पुन्हा चढवा,आणि प्रत प्रयत्न करा.',
+'sessionfailure' => 'तुमच्या दाखल सत्रात काही समस्या दिसते;सत्र अपहारणापासून 
+वाचविण्याचे दृष्टीने ही कृती रद्द केल्या गेली आहे.कृपया आपल्या विचरकाच्या "back" कळीवर टिचकी मारा आणि तुम्ही ज्या पानावरून आला ते पुन्हा चढवा,आणि परत प्रयत्न करा.',
 
 # Protect
 'protectlogpage' => 'सुरक्षा नोंदी',
@@ -2482,7 +2488,7 @@ $UNWATCHURL
 'protect-level-sysop' => 'केवळ प्रचालकांना परवानगी आहे',
 'protect-summary-cascade' => 'शिडी',
 'protect-expiring' => '$1 (UTC) ला संपेल',
-'protect-expiring-local' => '$1 à¤²à¤¾ à¤¸à¤®à¥\8dपते',
+'protect-expiring-local' => '$1 à¤²à¤¾ à¤¸à¤\82पते',
 'protect-expiry-indefinite' => 'अनंत',
 'protect-cascade' => 'या पानात असलेली पाने सुरक्षित करा (सुरक्षा शिडी)',
 'protect-cantedit' => 'तुम्ही या पानाची सुरक्षा पातळी बदलू शकत नाही कारण तुम्हाला तसे करण्याची परवानगी नाही.',
@@ -2520,17 +2526,18 @@ $UNWATCHURL
 'undeletepage' => 'वगळलेली पाने पहा आणि पुनर्स्थापित करा',
 'undeletepagetitle' => "'''खाली [[:$1]] च्या वगळलेल्या आवृत्त्या समाविष्ट केलेल्या आहेत'''.",
 'viewdeletedpage' => 'काढून टाकलेले लेख पहा',
-'undeletepagetext' => 'à¤\96ालà¥\80ल {{PLURAL:$1|पान à¤µà¤\97ळलà¥\87 à¤\86हà¥\87 à¤¤à¤°à¥\80सà¥\81दà¥\8dधा à¤µà¤¿à¤¦à¤¾à¤\97ारात à¤\9cतन à¤\86हà¥\87 à¤\86णि à¤ªà¥\81रà¥\8dनà¥\8dसà¥\8dथापित à¤\95रणà¥\87 à¤¶à¤\95à¥\8dय à¤\86हà¥\87|$1 à¤ªà¤¾à¤¨à¥\87 à¤µà¤\97ळलà¥\80 à¤\86हà¥\87त à¤¤à¤°à¥\80 à¤¸à¥\81दà¥\8dधा à¤µà¤¿à¤¦à¤¾à¤\97ारात à¤\9cतन à¤\86हà¥\87त à¤\86णि à¤ªà¥\81रà¥\8dन्स्थापित करणे शक्य आहेत}}. विदागारातील साठवण ठरावीक कालावधीने स्वच्छ करता येते.',
+'undeletepagetext' => 'à¤\96ालà¥\80ल {{PLURAL:$1|पान à¤µà¤\97ळलà¥\87 à¤\86हà¥\87 à¤¤à¤°à¥\80सà¥\81दà¥\8dधा à¤µà¤¿à¤¦à¤¾à¤\97ारात à¤\9cतन à¤\86हà¥\87 à¤\86णि à¤ªà¥\81नरà¥\8dसà¥\8dथापित à¤\95रणà¥\87 à¤¶à¤\95à¥\8dय à¤\86हà¥\87|$1 à¤ªà¤¾à¤¨à¥\87 à¤µà¤\97ळलà¥\80 à¤\86हà¥\87त à¤¤à¤°à¥\80 à¤¸à¥\81दà¥\8dधा à¤µà¤¿à¤¦à¤¾à¤\97ारात à¤\9cतन à¤\86हà¥\87त à¤\86णि à¤ªà¥\81नर्स्थापित करणे शक्य आहेत}}. विदागारातील साठवण ठरावीक कालावधीने स्वच्छ करता येते.',
 'undelete-fieldset-title' => 'आवर्तने पुनर्स्थापित करा',
-'undeleteextrahelp' => "संपूर्ण पान पुनर्स्थापित करण्याकरिता,सारे रकाने रिकामे ठेवा आणि '''''पुनर्स्थापन'''''वर टिचकी मारा. निवडक पुनर्स्थापन करण्याकरिता, ज्या आवर्तनांचे पुनर्स्थापन करावयाचे त्यांचे रकाने निवडा , आणि '''''पुनर्स्थापन'''''वर टिचकी मारा. '''''पुनर्योजन ''''' वर टिचकी मारल्यास सारे रकाने आणि प्रतिक्रिया खिडकी रिकामी होईल.",
+'undeleteextrahelp' => "पानाचा संपूर्ण इतिहास पुनर्स्थापित करण्यासाठी,साऱ्या चौकटपेट्या (चेकबॉक्सेस) रिकाम्या ठेवा
+आणि  '''''{{int:undeletebtn}}''''' वर टिचकी मारा. निवडक पुनर्स्थापन करण्याकरिता, ज्या आवर्तनांचे पुनर्स्थापन करावयाचे त्यांचेशी सुसंगत चौकटपेट्या (चेकबॉक्सेस) निवडा , आणि '''''{{int:undeletebtn}}''''' वर टिचकी मारा.",
 'undeleterevisions' => '$1 {{PLURAL:$1|आवर्तन|आवर्तने}}विदागारात संचीत',
 'undeletehistory' => 'जर तुम्ही पान पुनर्स्थापित केले तर ,सारी आवर्तने इतिहासात पुनर्स्थापित होतील.
 वगळल्या पासून त्याच नावाचे नवे पान तयार केले गेले असेले तर, पुनर्स्थापित आवर्तने पाठीमागील इतिहासात दिसतील. पुनर्स्थापना नंतर संचिकांच्या आवर्तनांवरील बंधने गळून पडतील याची नोंद घ्या.',
 'undeleterevdel' => 'पृष्ठ पानाचे आवर्तन अर्धवट वगळले जाणार असेल तर पुनर्स्थापनाची कृती केली जाणार नाही.
 अशा प्रसंगी, तुम्ही अगदी अलीकडील वगळलेली आवर्तने अनचेक किंवा अनहाईड केलीच पाहिजे.',
-'undeletehistorynoadmin' => 'हà¥\87 à¤ªà¤¾à¤¨ à¤µà¤\97ळलà¥\87 à¤\97à¥\87लà¥\87 à¤\86हà¥\87.वà¤\97ळणà¥\8dयाà¤\9aà¥\87 à¤\95ारण à¤\96ालà¥\80ल à¤\86ढावà¥\8dयात,वà¤\97ळणà¥\8dयापà¥\82रà¥\8dवà¥\80 à¤¸à¤\82पादित à¤\95रणाऱà¥\8dया à¤¸à¤\82पादà¤\95ाà¤\82à¤\9aà¥\8dया à¤®à¤¾à¤¹à¤¿à¤¤à¥\80 à¤¸à¥\8bबत,दाà¤\96वलà¥\87 à¤\86हà¥\87. à¤µà¤\97ळलà¥\87लà¥\8dया à¤\86वरà¥\8dतà¥\8dनाà¤\82à¤\9aा à¤¨à¥\87मà¤\95ा à¤®à¤\9cà¤\95à¥\82र à¤\95à¥\87वळ à¤ªà¥\8dरà¤\9aालà¤\95ाà¤\82ना à¤\89पलबà¥\8dध à¤\85सà¥\87ल.',
+'undeletehistorynoadmin' => 'हे पान वगळले गेले आहे.वगळण्याचे कारण खालील आढाव्यात,वगळण्यापूर्वी संपादित करणाऱ्या संपादकांच्या माहिती सोबत,दाखवले आहे. वगळलेल्या आवर्तनांचा नेमका मजकूर केवळ प्रचालकांना उपलब्ध असेल.',
 'undelete-revision' => '$1चे($4चे, $5 येथील) आवर्तन $3 ने वगळले:',
-'undeleterevision-missing' => 'अयोग्य अथवा नसापडणारे आवर्तन. तुमचा दुवा कदाचित चुकीचा असेल, किंवा आवर्तन पुनर्स्थापित केले गेले असेल किंवा विदागारातून वगळले असेल.',
+'undeleterevision-missing' => 'अयोग्य अथवा न सापडणारे आवर्तन. तुमचा दुवा कदाचित चुकीचा असेल, किंवा आवर्तन पुनर्स्थापित केले गेले असेल किंवा विदागारातून वगळले गेले असेल.',
 'undelete-nodiff' => 'पूर्वीचे कोणतेही आवर्तन आढळले नाही.',
 'undeletebtn' => 'वगळण्याची क्रिया रद्द करा',
 'undeletelink' => 'पहा/पुनर्स्थापित करा',
@@ -2554,7 +2561,7 @@ $UNWATCHURL
 'undelete-bad-store-key' => '$1 वेळ दिलेली संचिका आवर्तन पुनर्स्थापित करता येत नाही:संचिका वगळण्यापूर्वी पासून मिळाली नव्हती.',
 'undelete-cleanup-error' => 'न वापरलेली विदा संचिका "$1" वगळताना त्रुटी दाखवते.',
 'undelete-missing-filearchive' => 'संचिका विदास्मृती ID $1 पुनर्स्थापित करू शकत नाही कारण ती विदागारात उपलब्ध नाही. ती आधीच पुनर्स्थापित केली असण्याची शक्यता सुद्धा असू शकते.',
-'undelete-error' => 'à¤\9cर à¤ªà¤¾à¤¨à¤¾ à¤\95ाढà¥\82न à¤¨à¤¾à¤¹à¥\80 à¤\9fाà¤\95लà¥\87 à¤¤à¤° à¤ªà¤¾à¤¨ à¤¶à¥\80रà¥\8dषà¤\95',
+'undelete-error' => 'पान à¤ªà¥\81नरà¥\8dसà¥\8dथापनात à¤¤à¥\8dरà¥\82à¤\9fà¥\80',
 'undelete-error-short' => 'संचिकेचे वगळणे उलटवताना त्रूटी: $1',
 'undelete-error-long' => 'संचिकेचे वगळणे उलटवताना त्रुटींचा अडथळा आला:
 
@@ -2565,7 +2572,7 @@ $1',
 # Namespace form on various pages
 'namespace' => 'नामविश्व:',
 'invert' => 'निवडीचा क्रम उलटा करा',
-'tooltip-invert' => 'निवडलेल्या नामविश्वातील (आणि तसे निवडल्यास संबंधित नामविश्वातील)  पानांचे बदल  अदृष्य करण्या साटी टिचकी मारा',
+'tooltip-invert' => 'निवडलेल्या नामविश्वातील (आणि तसे निवडल्यास संबंधित नामविश्वातील)  पानांचे बदल  अदृष्य करण्यासाठी टिचकी मारा',
 'namespace_association' => 'सहभागी नामविश्वे',
 'tooltip-namespace_association' => 'निवडलेल्या नामविश्वासंबधीत विषय अथवा चर्चा नामविश्वसुद्धा आंतर्भूत करण्याकरिता हा बॉक्स टिचकवून चिह्नित करा',
 'blanknamespace' => '(मुख्य)',
@@ -2618,9 +2625,9 @@ $1',
 'whatlinkshere-filters' => 'गाळण्या',
 
 # Block/unblock
-'autoblockid' => '#$1ला स्वयंचलितपणे प्रतिबंधित करा',
+'autoblockid' => 'स्वयंचलितपणे #$1ला प्रतिबंधित करा',
 'block' => 'सदस्यास प्रतिबंध करा',
-'unblock' => 'सदस्य सोडवा',
+'unblock' => 'सदस्यप्रतिबंध काढा',
 'blockip' => 'हा अंकपत्ता अडवा',
 'blockip-legend' => 'सदस्यास प्रतिबंध करा',
 'blockiptext' => 'एखाद्या विशिष्ट अंकपत्त्याची किंवा सदस्याची लिहिण्याची क्षमता प्रतिबंधित  करण्याकरिता खालील सारणी वापरा.
@@ -2648,7 +2655,7 @@ $1',
 'ipbwatchuser' => 'या सदस्याच्या सदस्य तसेच चर्चा पानावर पहारा ठेवा',
 'ipb-disableusertalk' => 'सदस्यास स्वत:चे चर्चापान संपादण्यापासून प्रतिबंधित करा',
 'ipb-change-block' => 'या सेटींग्जसह सदस्यास पुन्हा प्रतिबंधित करा.',
-'ipb-confirm' => 'à¤\85डथाळा सुनिश्चित करा.',
+'ipb-confirm' => 'पà¥\8dरतिबà¤\82ध सुनिश्चित करा.',
 'badipaddress' => 'अंकपत्ता बरोबर नाही.',
 'blockipsuccesssub' => 'अडवणूक यशस्वी झाली',
 'blockipsuccesstext' => '[[Special:Contributions/$1|$1]]ला प्रतिबंधित केले.<br />
@@ -2696,7 +2703,7 @@ $1',
 'change-blocklink' => 'रोध बदला',
 'contribslink' => 'योगदान',
 'emaillink' => 'ई-मेल पाठवा.',
-'autoblocker' => 'स्वयंचलितप्रतिबंधन केले गेले कारण तुमचा अंकपत्ता अलीकडे "[[User:$1|$1]]"ने वापरला होता. $1 च्या प्रतिबंधनाकरिता दिलेले कारण: "$2" आहे.',
+'autoblocker' => 'स्वयंचलित प्रतिबंधन केले गेले कारण तुमचा अंकपत्ता अलीकडे "[[User:$1|$1]]"ने वापरला होता. $1 च्या प्रतिबंधनाकरिता दिलेले कारण: "$2" आहे.',
 'blocklogpage' => 'रोध नोंदी',
 'blocklog-showlog' => 'हा सदस्य पूर्वी प्रतिबंधित अथवा लपविल्या गेला होता.
 लपविलेल्या नोंदी  संदर्भाकरिता खाली उपलब्ध आहेत.',
@@ -2718,7 +2725,7 @@ $1',
 'range_block_disabled' => 'प्रचालकांची पल्ला बंधने घालण्याची क्षमता अनुपलब्ध केली आहे.',
 'ipb_expiry_invalid' => 'अयोग्य समाप्ती काळ.',
 'ipb_expiry_temp' => 'लपविलेले सदस्यनाम प्रतिबंधन कायमस्वरूपी असले पाहिजे.',
-'ipb_hide_invalid' => 'हà¥\87 à¤\96ात à¤¦à¤¾à¤¬à¤¨à¥\8dयासाथि à¤\85समरà¥\8dथ: à¤¤à¥\87 à¤¸à¥\81धà¥\8dदा à¤¬à¤¦à¤² à¤\95रनà¥\8dयाà¤\9aि à¤¸कतात.',
+'ipb_hide_invalid' => 'हà¥\87 à¤\96ात à¤¦à¤¾à¤¬à¤£à¥\8dयासाठà¥\80 à¤\85समरà¥\8dथ; à¤¤à¥\8dयानà¥\87 à¤\85नà¥\87à¤\95 à¤¸à¤\82पादनà¥\87 à¤\95à¥\87लà¥\87लà¥\80 à¤\85सà¥\82 à¤¶कतात.',
 'ipb_already_blocked' => '"$1" आधीच अवरूद्ध केलेले आहे.',
 'ipb-needreblock' => '$1 आधीच प्रतिबंधित आहे . तुम्हाला त्याची सेटींग्स बदलण्याची इच्छा आहे का ?',
 'ipb-otherblocks-header' => '{{PLURAL:$1|दुसरे प्रतिबंधन|इतर प्रतिबंधने}}',
@@ -2726,25 +2733,25 @@ $1',
 'ipb_cant_unblock' => 'त्रूटी: प्रतिबंधन क्र.$1 मिळाला नाही. त्यावरील प्रतिबंधन कदाचित आधीच उठवले असेल.',
 'ipb_blocked_as_range' => 'त्रूटी:अंकपत्ता IP $1 हा प्रत्यक्षपणे प्रतिबंधित केलेला नाही आणि अप्रतिबंधीत करता येत नाही.तो,अर्थात,$2पल्ल्याचा भाग म्हाणून तो प्रतिबंधित केलेला आहे,जो की अप्रतिबंधीत करता येत नाही.',
 'ip_range_invalid' => 'अंकपत्ता अयोग्य टप्प्यात.',
-'ip_range_toolarge' => '/$1 पेक्षा मोठ्या Range प्रतिबंधनाची परवानगी नाह् are not allowed.',
-'proxyblocker' => 'प्रातिनिधी(प्रॉक्झी)प्रतिबंधक',
-'proxyblockreason' => 'तुमचा अंकपत्ता प्रतिबंधित केला आहे कारण तो उघड-उघड प्रतिनिधी आहे.कृपया तुमच्या आंतरजाल सेवा दात्यास किंवा तंत्रज्ञास पाचारण संपर्क करा आणि त्यांचे या गंभीर सुरक्षाप्रश्ना कडे लक्ष वेधा.',
+'ip_range_toolarge' => '/$1 पेक्षा मोठ्या रेंज प्रतिबंधनाची परवानगी नाही.',
+'proxyblocker' => 'प्रातिनिधी(प्रॉक्झी)प्रतिबंधक',
+'proxyblockreason' => 'तुमचा अंकपत्ता प्रतिबंधित केला आहे कारण तो उघड-उघड प्रतिनिधी आहे.कृपया तुमच्या आंतरजाल सेवा दात्यास किंवा तंत्रज्ञास पाचारण संपर्क करा आणि त्यांचे या गंभीर सुरक्षाप्रश्नाकडे लक्ष वेधा.',
 'sorbsreason' => '{{SITENAME}}ने वापरलेल्या DNSBL मध्ये तुमच्या अंकपत्त्याची नोंद उघड-उघड प्रतिनिधी म्हणून सूचित केली आहे.',
 'sorbs_create_account_reason' => '{{SITENAME}}च्या DNSBLने तुमचा अंकपत्ता उघड-उघड प्रतिनिधी म्हणून सूचित केला आहे.तुम्ही खाते उघडू शकत नाही',
 'xffblockreason' => '(X-Forwarded-For header) मधील अंकपत्ता,आपला किंवा आपण वापरत असलेल्या सर्व्हरचा,प्रतिबंधित केल्या गेला आहे.प्रतिबंधित करण्याचे मुळ कारण होते:$1',
-'cant-see-hidden-user' => 'तà¥\81मà¥\8dहà¥\80 à¤ªà¥\8dरतिबà¥\8dà¤\82धकरण्याचा प्रयत्न करत असलेले सदस्य खाते आधीपासूनच प्रतिबंधित आणि लपविले गेले आहे.
-तुमच्याकडे सदस्य लपविण्याचे अधिकार नसल्यामुळे , तुम्ही सदस्य प्रतिबंधन  पाहू अथवा संपादित करू शकत नाही',
+'cant-see-hidden-user' => 'तà¥\81मà¥\8dहà¥\80 à¤ªà¥\8dरतिबà¤\82ध करण्याचा प्रयत्न करत असलेले सदस्य खाते आधीपासूनच प्रतिबंधित आणि लपविले गेले आहे.
+तुमच्याकडे सदस्य लपविण्याचे अधिकार नसल्यामुळे , तुम्ही सदस्य प्रतिबंधन  पाहू अथवा संपादित करू शकत नाही.',
 'ipbblocked' => 'तुमचे स्वत:चेच खाते प्रतिबंधित असल्यामुळे तुम्ही इतर सदस्यांना प्रतिबंधित किंवा अप्रतिबंधीत करू शकत नाही',
-'ipbnounblockself' => 'तुम्ही स्वतः अप्रतिबंधित करू शकत नाही',
+'ipbnounblockself' => 'तुम्ही स्वतः अप्रतिबंधित करू शकत नाही',
 
 # Developer tools
 'lockdb' => 'विदागारास ताळे ठोका',
 'unlockdb' => 'विदागाराचे ताळे उघडा',
 'lockdbtext' => 'विदागारास ताळे ठोकल्याने सर्व सदस्यांची संपादन क्षमता, त्यांच्या सदस्य पसंती बदलणे,त्यांच्या पहाऱ्याच्या सूची संपादित करणे,आणि विदेत बदल घडवणाऱ्या इतर गोष्टी संस्थगित होतील.
-à¤\95à¥\83पया à¤¤à¥\81मà¥\8dहाला à¤¹à¥\87à¤\9a à¤\95रावयाà¤\9aà¥\87 à¤\86हà¥\87 à¤\86णि à¤­à¤°à¤£-पà¥\8bषणा à¤¨à¤\82तर विदागाराचे ताळे उघडावयाचे आहे हे निश्चित करा.',
+à¤\95à¥\83पया à¤¤à¥\81मà¥\8dहाला à¤¹à¥\87à¤\9a à¤\95रावयाà¤\9aà¥\87 à¤\86हà¥\87 à¤\86णि à¤\85नà¥\81रà¤\95à¥\8dषणानà¤\82तर (मà¥\87à¤\82à¤\9fà¥\87ननà¥\8dस)विदागाराचे ताळे उघडावयाचे आहे हे निश्चित करा.',
 'unlockdbtext' => 'विदागाराचे ताळे उघडल्याने सर्व सदस्यांची संपादन क्षमता, त्यांच्या सदस्य पसंती बदलणे,त्यांच्या पहाऱ्याच्या सूची संपादित करणे,आणि विदेत बदल घडवणाऱ्या इतर गोष्टीची क्षमता पुन्हा उपलब्ध होईल.
 कृपया तुम्हाला हेच करावयाचे आहे हे निश्चित करा.',
-'lockconfirm' => 'होय,मला खरेच विदागारास ताळे ठोकायच आहे.',
+'lockconfirm' => 'होय,मला खरेच विदागारास ताळे ठोकायच आहे.',
 'unlockconfirm' => 'होय,मला खरेच विदागाराचे ताळे उघडवयाचे आहे.',
 'lockbtn' => 'विदागारास ताळे ठोका',
 'unlockbtn' => 'विदागारचे ताळे काढा',
@@ -2752,7 +2759,7 @@ $1',
 'lockdbsuccesssub' => 'विदागरास ताळे यशस्वी',
 'unlockdbsuccesssub' => 'विदागाराचे ताळे काढले',
 'lockdbsuccesstext' => 'विदागारास ताळे ठोकण्यात आले आहे.<br />
-तà¥\81मà¤\9aà¥\8dयाà¤\95डà¥\82न à¤­à¤°à¤£-पà¥\8bषण à¤ªà¥\82रà¥\8dण à¤\9dालà¥\8dया नंतर [[Special:UnlockDB|ताळे उघडण्याचे]] लक्षात ठेवा.',
+तà¥\81मà¤\9aà¥\8dयाà¤\95डà¥\82न à¤\85नà¥\81रà¤\95à¥\8dषण à¤ªà¥\82रà¥\8dण à¤\9dालà¥\8dयानंतर [[Special:UnlockDB|ताळे उघडण्याचे]] लक्षात ठेवा.',
 'unlockdbsuccesstext' => 'विदागाराचे ताळे उघडण्यात आले आहे.',
 'lockfilenotwritable' => 'विदा ताळे संचिका लेखनीय नाही.विदेस ताळे लावण्याकरिता किंवा उघडण्याकरिता, ती आंतरजाल विदादात्याकडून लेखनीय असावयास हवी.',
 'databasenotlocked' => 'विदागारास ताळे नही',
@@ -2788,15 +2795,15 @@ $1',
 'movepagetalktext' => "संबंधित चर्चा पृष्ठ याबरोबर स्थानांतरीत होणार नाही '''जर:'''
 * तुम्ही पृष्ठ दुसऱ्या नामविश्वात स्थानांतरीत करत असाल
 * या नावाचे चर्चा पान अगोदरच अस्तित्वात असेल तर, किंवा
-* à¤\96ालà¥\80ल à¤\9aà¥\87à¤\95बà¥\89à¤\95à¥\8dस à¤¤à¥\81मà¥\8dहà¥\80 à¤\95ाढà¥\82न à¤\9fाà¤\95ला तर.
+* à¤\96ालà¥\80ल à¤\9aà¥\8cà¤\95à¤\9fपà¥\87à¤\9fà¥\80 (à¤\9aà¥\87à¤\95बà¥\89à¤\95à¥\8dस) à¤°à¤¿à¤\95ामà¥\80 à¤ à¥\87वलà¥\80 तर.
 
 या बाबतीत तुम्हाला स्वतःला ही पाने एकत्र करावी लागतील.",
 'movearticle' => 'पृष्ठाचे स्थानांतरण',
-'moveuserpage-warning' => "'''सावधान:''' आपण एक सदस्य पान स्थलांतरित करत आहात. कृपया लक्षात घ्या की, फक्त हे पान स्थलांतरित होइल, सदस्य नाम बदलले जणार नाही.",
-'movenologintext' => 'पान à¤¸à¥\8dथानाà¤\82तरित à¤\95रणà¥\8dयासाठà¥\80 à¤¤à¥\81मà¥\8dहाला [[Special:UserLogin|प्रवेश]] करावा लागेल.',
-'movenotallowed' => '{{SITENAME}}वरà¥\80ल à¤ªà¤¾à¤¨à¥\87 à¤¸à¥\8dथानाà¤\82तरà¥\80त à¤\95रणà¥\8dयाà¤\9aà¥\80 à¤\86पलà¥\8dयापाशà¥\80 परवानगी नाही.',
-'movenotallowedfile' => 'तà¥\81मà¥\8dहाला à¤¦à¤¸à¥\8dतावà¥\88à¤\9c स्थानांतरीत करण्याची परवानगी नाही.',
-'cant-move-user-page' => 'तà¥\81मà¥\8dहाला à¤¸à¤¦à¤¸à¥\8dयाà¤\9aà¥\87 à¤¦à¤¸à¥\8dतावà¥\88à¤\9c à¤¸à¥\8dथानाà¤\82तरà¥\80त à¤\95रणà¥\8dयाà¤\9aà¥\80 à¤ªà¤°à¤µà¤¾à¤¨à¤\97à¥\80 à¤¨à¤¾à¤¹à¥\80.',
+'moveuserpage-warning' => "'''सावधान:''' à¤\86पण à¤\8fà¤\95 à¤¸à¤¦à¤¸à¥\8dय à¤ªà¤¾à¤¨ à¤¸à¥\8dथलाà¤\82तरित à¤\95रत à¤\86हात. à¤\95à¥\83पया à¤²à¤\95à¥\8dषात à¤\98à¥\8dया à¤\95à¥\80, à¤«à¤\95à¥\8dत à¤¹à¥\87 à¤ªà¤¾à¤¨ à¤¸à¥\8dथलाà¤\82तरित à¤¹à¥\8bà¤\87ल, à¤¸à¤¦à¤¸à¥\8dय à¤¨à¤¾à¤® à¤¬à¤¦à¤²à¤²à¥\87 à¤\9cाणार à¤¨à¤¾à¤¹à¥\80.",
+'movenologintext' => 'पान à¤¸à¥\8dथानाà¤\82तरित à¤\95रणà¥\8dयासाठà¥\80 à¤¤à¥\81मà¥\8dहà¥\80 à¤¨à¥\8bà¤\82दà¥\80à¤\95à¥\83त à¤¸à¤¦à¤¸à¥\8dय à¤¹à¤µà¥\87 à¤µ à¤¤à¥\81मà¥\8dहाला [[Special:UserLogin|सनà¥\8bà¤\82द-प्रवेश]] करावा लागेल.',
+'movenotallowed' => '{{SITENAME}}वरà¥\80ल à¤ªà¤¾à¤¨à¥\87 à¤¸à¥\8dथानाà¤\82तरà¥\80त à¤\95रणà¥\8dयाà¤\9aà¥\80 à¤\86पलà¥\8dयास परवानगी नाही.',
+'movenotallowedfile' => 'तà¥\81मà¥\8dहाला à¤¸à¤\82à¤\9aिà¤\95ा स्थानांतरीत करण्याची परवानगी नाही.',
+'cant-move-user-page' => 'तà¥\81मà¥\8dहाला à¤¸à¤¦à¤¸à¥\8dयपान à¤¸à¥\8dथानाà¤\82तरà¥\80त à¤\95रणà¥\8dयाà¤\9aà¥\80 à¤ªà¤°à¤µà¤¾à¤¨à¤\97à¥\80 à¤¨à¤¾à¤¹à¥\80.(à¤\89पपानावà¥\8dयतिरिà¤\95à¥\8dत)',
 'cant-move-to-user-page' => 'तुम्हाला एखाद्या पानास सदस्य पानांवर (सदस्य उप-पाने सोडून) घेऊन जाण्यास परवानगी नाही.',
 'newtitle' => 'नवीन शीर्षकाकडे:',
 'move-watch' => 'स्रोत पान व लक्ष  पानांवर निगराणी ठेवा',
@@ -2804,12 +2811,12 @@ $1',
 'pagemovedsub' => 'स्थानांतरण यशस्वी',
 'movepage-moved' => '\'\'\'"$1" ला "$2" मथळ्याखाली स्थानांतरीत केले\'\'\'',
 'movepage-moved-redirect' => 'एक पुनर्निर्देशन तयार केले आहे.',
-'movepage-moved-noredirect' => 'पà¥\81नà¤\83निरà¥\8dदà¥\87शà¥\80त à¤ªà¤¾à¤¨ à¤¤à¤¯à¤¾à¤° à¤\95à¥\87लà¥\87लà¥\87 à¤¨à¤¾à¤¹à¥\80',
-'articleexists' => 'त्या नावाचे पृष्ठ अगोदरच अस्तित्वात आहे, किंवा तुम्ही निवडलेले
-नाव योग्य नाही आहे.
+'movepage-moved-noredirect' => 'पà¥\81नरà¥\8dनिरà¥\8dदà¥\87शन à¤¤à¤¯à¤¾à¤° à¤\95रणà¥\87 à¤¦à¤¡à¤ªà¤£à¥\8dयात à¤\86लà¥\87 à¤\86हà¥\87.',
+'articleexists' => 'त्या नावाचे पृष्ठ अगोदरच अस्तित्वात आहे, किंवा तुम्ही निवडलेले नाव योग्य नाही.
+
 कृपया दुसरे नाव शोधा.',
 'cantmove-titleprotected' => 'नवे शीर्षक निर्मित करण्या पासून सुरक्षित केलेले असल्यामुळे,तुम्ही या जागी एखादे पान स्थानांतरीत करू शकत नाही.',
-'movetalk' => 'शà¤\95à¥\8dय à¤\85सलà¥\8dयास "à¤\9aरà¥\8dà¤\9aा à¤ªà¥\83षà¥\8dठ" स्थानांतरीत करा',
+'movetalk' => 'सà¤\82लà¤\97à¥\8dन "à¤\9aरà¥\8dà¤\9aा à¤ªà¤¾à¤¨" स्थानांतरीत करा',
 'move-subpages' => 'उपपाने स्थानांतरीत करा (जास्तीतजास्त $1)',
 'move-talk-subpages' => 'चर्चा पानाची सर्व उपपाने स्थानांतरीत करा (जास्तीतजास्त $1)',
 'movepage-page-exists' => '$1 पान अगोदरच अस्तित्त्वात आहे व त्याच्यावर आपोआप पुनर्लेखन करता येणार नाही.',
@@ -2824,15 +2831,15 @@ $1',
 'movereason' => 'कारण:',
 'revertmove' => 'पूर्वपदास न्या',
 'delete_and_move' => 'वगळा आणि स्थानांतरित करा',
-'delete_and_move_text' => '==वगळण्याची आवशकता==
+'delete_and_move_text' => '==वà¤\97ळणà¥\8dयाà¤\9aà¥\80 à¤\86वशà¥\8dयà¤\95ता==
 
-लक्ष्यपान  "[[:$1]]" आधीच अस्तित्वात आहे.स्थानांतराचा मार्ग मोकळाकरण्या करिता तुम्हाला ते वगळावयाचे आहे काय?',
+लक्ष्यपान  "[[:$1]]" आधीच अस्तित्वात आहे.स्थानांतराचा मार्ग मोकळा करण्याकरिता तुम्हाला ते वगळावयाचे आहे काय?',
 'delete_and_move_confirm' => 'होय, पान वगळा',
 'delete_and_move_reason' => '"[[$1]]" पासून वगळून स्थानांतर केले.',
 'selfmove' => 'स्रोत आणि लक्ष्य पाने समान आहेत; एखादे पान स्वत:च्याच जागी स्थानांतरीत करता येत नाही.',
 'immobile-source-namespace' => 'नामविश्व "$1" मधील पाने हलवता आली नाहीत.',
 'immobile-target-namespace' => 'नामविश्व "$1" मध्ये पाने हलवता आली नाहीत.',
-'immobile-target-namespace-iw' => 'पà¥\81ढà¥\87 à¤\9aाल à¤\95रणà¥\8dयासाठà¥\80 à¤¹à¤¾ à¤µà¤¿à¤\95िà¤\85à¤\82तरà¥\8dà¤\97त à¤¦à¥\81वा à¤¯à¥\8bà¤\97à¥\8dय à¤²à¤\95à¥\8dष à¤¨à¤¾à¤¹à¥\80',
+'immobile-target-namespace-iw' => 'पान à¤¸à¥\8dथानाà¤\82तरासाठà¥\80, à¤¹à¤¾ à¤µà¤¿à¤\95िà¤\9aा à¤\85à¤\82तरà¥\8dà¤\97त à¤¦à¥\81वा à¤¯à¥\8bà¤\97à¥\8dय à¤²à¤\95à¥\8dषà¥\8dय à¤¨à¤¾à¤¹à¥\80.',
 'immobile-source-page' => 'हे पान हलवता येत नाही',
 'immobile-target-page' => 'लक्ष्य मथळा हलवता येत नाही.',
 'bad-target-model' => 'तुमचे ईच्छित स्थानक हे वेगळे आशय नमुना (कंटेंट मॉडेल) वापरते.  $1 चे $2 मध्ये रुपांतर करु शकत नाही.',
@@ -3487,8 +3494,7 @@ $1',
 'exif-lightsource-255' => 'इतर प्रकाश स्रोत',
 
 # Flash modes
-'exif-flash-fired-0' => 'Flash did not fire
-फ्लॅशदिवा प्रज्ज्वलित झाला नाही',
+'exif-flash-fired-0' => 'फ्लॅशदिवा प्रज्ज्वलित झाला नाही',
 'exif-flash-fired-1' => 'क्षणदीप(फ्लेशदिवा)प्रज्ज्वलित झाला',
 'exif-flash-return-0' => 'लखलखाट (फ्लॅश) - प्रकाश परावर्तन नोंदणीची सुविधा अनुपलब्ध',
 'exif-flash-return-2' => 'लखलखाटाच्या (फ्लॅश)   परावर्तन प्रकाशाची नोंद झाली नाही',
@@ -3511,19 +3517,19 @@ $1',
 
 'exif-filesource-3' => 'स्थिरचित्र  अंकीय छाउ (डिजीटल स्टील कॅमेरा)',
 
-'exif-scenetype-1' => 'डायरà¥\87à¤\95à¥\8dà¤\9fलà¥\80 छायाचित्रीत चित्र',
+'exif-scenetype-1' => 'थà¥\87à¤\9f छायाचित्रीत चित्र',
 
 'exif-customrendered-0' => 'नियमीत प्रक्रीया',
-'exif-customrendered-1' => 'à¤\86वडà¥\80नà¥\81सार प्रक्रीया',
+'exif-customrendered-1' => 'पारà¤\82पारिà¤\95 प्रक्रीया',
 
-'exif-exposuremode-0' => 'सà¥\8dवयà¤\82à¤\9aलित à¤\9bायाà¤\82à¤\95न',
+'exif-exposuremode-0' => 'सà¥\8dवयà¤\82à¤\9aलित à¤\85नावरण',
 'exif-exposuremode-1' => 'अस्वयंचलित छायांकन',
 'exif-exposuremode-2' => 'स्वयंसिद्ध कंस',
 
 'exif-whitebalance-0' => 'ऍटो व्हाईट बॅलेन्स',
 'exif-whitebalance-1' => 'मॅन्यूअल व्हाईट बॅलेन्स',
 
-'exif-scenecapturetype-0' => 'दरà¥\8dà¤\9cा',
+'exif-scenecapturetype-0' => 'दरà¥\8dà¤\9cà¥\87दार',
 'exif-scenecapturetype-1' => 'आडवे',
 'exif-scenecapturetype-2' => 'उभे',
 'exif-scenecapturetype-3' => 'रात्रीचे दृश्य',
@@ -3539,8 +3545,8 @@ $1',
 'exif-contrast-2' => 'कठीण',
 
 'exif-saturation-0' => 'सर्व साधारण',
-'exif-saturation-1' => 'à¤\95मà¥\80 à¤¸à¥\85à¤\9aà¥\82रà¥\87शन',
-'exif-saturation-2' => 'à¤\9cासà¥\8dत à¤¸à¥\85à¤\9aà¥\82रà¥\87शन',
+'exif-saturation-1' => 'निमà¥\8dन à¤¸à¤\82तà¥\83पà¥\8dति',
+'exif-saturation-2' => 'à¤\89à¤\9aà¥\8dà¤\9a à¤¸à¤\82तà¥\83पà¥\8dति',
 
 'exif-sharpness-0' => 'सर्वसाधारण',
 'exif-sharpness-1' => 'मृदू',
@@ -3560,7 +3566,7 @@ $1',
 'exif-gpslongitude-w' => 'पश्चिम रेखांश',
 
 # Pseudotags used for GPSAltitudeRef
-'exif-gpsaltitude-above-sealevel' => 'समुद्रपातळीच्यावर $1 {{PLURAL:$1|मीटर|मीटर}}',
+'exif-gpsaltitude-above-sealevel' => 'समुद्रपातळीच्यावर $1 {{PLURAL:$1|मीटर}}',
 'exif-gpsaltitude-below-sealevel' => 'समुद्रपातळीच्याखाली $1 {{PLURAL:$1|मीटर|मीटर}}',
 
 'exif-gpsstatus-a' => 'मोजणी काम चालू आहे',
@@ -3713,7 +3719,7 @@ $5
 # action=watch/unwatch
 'confirm-watch-button' => 'ठीक आहे',
 'confirm-watch-top' => 'हे पान तुमच्या पहारा सूचीमध्ये टाकायचे?',
-'confirm-unwatch-button' => 'ठà¥\80à¤\95',
+'confirm-unwatch-button' => 'ठिà¤\95 à¤\86हà¥\87',
 'confirm-unwatch-top' => 'हे पान तुमच्या नित्य पहाण्याच्या सूचीतून काढायचे?',
 
 # Multipage image navigation
@@ -3722,6 +3728,10 @@ $5
 'imgmultigo' => 'चला!',
 'imgmultigoto' => '$1 पानावर जा',
 
+# Language selector for translatable SVGs
+'img-lang-default' => '(अविचल भाषा)',
+'img-lang-go' => 'जा',
+
 # Table pager
 'ascending_abbrev' => 'चढ',
 'descending_abbrev' => 'उतर',
@@ -3804,6 +3814,14 @@ $5
 'version-hook-subscribedby' => 'वर्गणीदार',
 'version-version' => '($1)',
 'version-license' => 'मिडियाविकि परवाना',
+'version-ext-license' => 'परवाना',
+'version-ext-colheader-name' => 'विस्तारक',
+'version-ext-colheader-version' => 'आवृत्ती',
+'version-ext-colheader-license' => 'परवाना',
+'version-ext-colheader-description' => 'वर्णन',
+'version-ext-colheader-credits' => 'लेखक',
+'version-license-title' => '$1 साठी परवाना',
+'version-license-not-found' => 'या विस्तारकासाठी विस्तृत परवाना माहिती सापडली नाही.',
 'version-poweredby-credits' => "हा विकी '''[https://www.mediawiki.org/ मीडियाविकी]'''द्वारे संचालित आहे, प्रताधिकारित © २००१-$1 $2.",
 'version-poweredby-others' => 'इतर',
 'version-poweredby-translators' => 'ट्रांसलेटविकि.नेट वरील भाषांतरकार',
@@ -3829,6 +3847,7 @@ $5
 'redirect-lookup' => 'बघा:',
 'redirect-value' => 'मुल्य:',
 'redirect-user' => 'सदस्यनाम',
+'redirect-page' => 'पृष्ठ-परिचय',
 'redirect-revision' => 'पानाची आवृत्ती',
 'redirect-file' => 'संचिकानाम',
 'redirect-not-exists' => '(योग्य)मुल्य (व्हॅल्यु) सापडले नाही',
@@ -4019,6 +4038,7 @@ $5
 'api-error-overwrite' => 'अस्तित्वात असलेल्या संचिकेवर पुनर्लेखन प्रतिबंधित आहे.',
 'api-error-stashfailed' => 'इन्तरिक त्रुटी : विदादाता तात्पुरत्या स्वरूपाच्या संचिका जमा करण्यात अयशस्वी',
 'api-error-publishfailed' => 'अंतर्गत त्रूटी:विदादात्यास, या तात्पुरत्या संचिकेच्या प्रकाशनास अपयश आले.',
+'api-error-stasherror' => 'स्टॅचला ही संचिका अपभारणात त्रूटी आली.',
 'api-error-timeout' => 'अपेक्षित वेळेत विदागार (server)ने प्रतिसाद दिला नाही.',
 'api-error-unclassified' => 'एक अज्ञात चूक उद्भवली.',
 'api-error-unknown-code' => 'अज्ञात त्रुटी: "$1"',
@@ -4047,6 +4067,7 @@ $5
 'limitreport-cputime-value' => '$1 {{PLURAL:$1|सेकंद}}',
 'limitreport-walltime-value' => '$1 {{PLURAL:$1|सेकंद}}',
 'limitreport-postexpandincludesize-value' => '$1/$2 {{PLURAL:$2|बाइट|बाइट्स}}',
+'limitreport-templateargumentsize' => 'साचा विधानाचा आकार',
 'limitreport-templateargumentsize-value' => '$1/$2 {{PLURAL:$2|बाइट|बाइट्स}}',
 
 # Special:ExpandTemplates
@@ -4064,4 +4085,6 @@ $5
 'expand_templates_generate_xml' => 'XML चा पार्स (parse) वृक्ष दाखवा',
 'expand_templates_preview' => 'झलक',
 
+# Unknown messages
+'uploadinvalidxml' => 'अपभारीत संचिकेतील XML पार्स करता आले नाही.',
 );
index 13f6bd9..7ac970f 100644 (file)
@@ -85,9 +85,9 @@ $messages = array(
 'tog-hidepatrolled' => 'Motlàtìs tlapîpialli tlayèktlàlilistli ìpan welok tlapảtlalistli',
 'tog-newpageshidepatrolled' => 'Mokintlàtis tlapîpialtlaìxtlapaltìn ìwikpa ìtlapòpòwaltekpànal in yâyankuik tlaìxtlapaltìn',
 'tog-extendwatchlist' => 'Mìxmảnas in tlapòpòwaltekpàntlachialli ìka mỏtas nochi in tlapảtlalistli, âmò in san okachi yankuik.',
-'tog-usenewrc' => 'Quimolōloāz in tlapatlaliztli yancuīc tlapatlaliztli āmapan īhuān in tlachiyaliztli tlapōhualāmapan (monequi JavaScript)',
+'tog-usenewrc' => 'Molōloāzqueh in tlapatlaliztli in yancuīc tlapatlaliztli āmapan īhuān in tlachiyaliztli tlapōhualāmapan (monequi JavaScript)',
 'tog-showtoolbar' => 'Motlaīxtlatīz in tlachihchīhualōni pāntli',
-'tog-editondblclick' => 'Tiquimpatlāz in zāzaniltin intlā ōme tiquimpachoa',
+'tog-editondblclick' => 'Tiquimpatlāz in zāzanilli intlā ōme tiquimpachoa',
 'tog-showtoc' => 'Tiquittāz in tlein cah zāzotlahcuilōlco',
 'tog-rememberpassword' => 'Ticpiyāz moMotlatequitiltilīltōca īhuān motlahtōlichtacāyo inīn chīuhpōhualhuazco (īxquich {{PLURAL:$1|tōnalli}})',
 'tog-watchcreations' => 'Moaquiāz in āmatl mā niquinyōcoya īhuān in tlahcuilōlli mā niquinquetza īpan notlachiyaliz',
@@ -390,7 +390,7 @@ Hueliz quimpiya tlahtōl tlein ahmo mohuelītih motequitiltia tōcāpan.',
 'createaccount' => 'Ticchīhuāz cē cuentah',
 'gotaccount' => "¿Ye ticpiya cē cuentah? '''$1'''.",
 'gotaccountlink' => 'Ximocalaqui',
-'createaccountmail' => 'Ticnemītīz ahmo cemihcac zāzoichtacātlahtōlli nō in tiquēhualtīz in maltzinteyōtl nonetitlanizyeyān',
+'createaccountmail' => 'Ticnemītīz ahmo cemihcac zāzoichtacātlahtōlli nō in tiquēhualtīz in maltzinteyōtl monetitlanizyeyān',
 'createaccountreason' => 'Tlèka:',
 'badretype' => 'Ahneneuhqui motlahtōlichtacāyo.',
 'userexists' => 'In tlatequitiltilīltōcāitl in ōquipehpen ye ia.
@@ -427,7 +427,7 @@ Occeppa xicalaqui niman ticmatīz.',
 'newpassword' => 'Yancuīc motlahtōlichtacayo:',
 'retypenew' => 'Occeppa xiquihcuiloa yancuīc motlahtōlichtacayo:',
 'resetpass_submit' => 'Xicpatlāz motlahtōlichtacāyo auh xicalaquīz',
-'changepassword-success' => 'In ichtacātlahtōlli cualli ōtlapatlalo',
+'changepassword-success' => 'Mochtacātlahtōl cualli ōtlapatlalo.',
 'resetpass_forbidden' => 'Tlahtōlichtacayōtl ahmo mohuelītih mopatlah',
 'resetpass-submit-loggedin' => 'Ticpatlāz motlahtōlichtacāyo',
 'resetpass-submit-cancel' => 'Ticcuepāz',
@@ -1097,7 +1097,7 @@ Xiquitta $2 ic yancuīc tlapololiztli.',
 'contributions-title' => 'Tlatequitiltilīlli $1 ītlahcuilōl',
 'mycontris' => 'Notlahcuilōl',
 'contribsub2' => '$1 ($2)',
-'uctop' => '(ahco)',
+'uctop' => '(āxcān tlapatlaliztli)',
 'month' => 'Īhuīcpa mētztli (auh achtopa):',
 'year' => 'Xiuhhuīcpa (auh achtopa):',
 
@@ -1435,7 +1435,7 @@ Niman tihuelīti [[Special:UserLogin|timocalaqui]] auh ticpactiāz huiquitica.',
 'version' => 'Machiyōtzin',
 'version-specialpages' => 'Nònkuâkìskàtlaìxtlapaltìn',
 'version-other' => 'Occē',
-'version-version' => '(Machiyōtzin $1)',
+'version-version' => '($1)',
 'version-software-version' => 'Machiyōtzin',
 
 # Special:FileDuplicateSearch
index 71311f1..081ec4d 100644 (file)
@@ -332,6 +332,9 @@ Che mā khó-lêng sī {{SITENAME}} só͘ sú-iōng ê nńg-thé chhut būn-tê.
 # General errors
 'error' => 'Chhò-gō·',
 'databaseerror' => 'Chu-liāu-khò· chhò-gō·',
+'databaseerror-query' => '揣:',
+'databaseerror-function' => '功能:',
+'laggedslavemode' => "'''提醒:'''頁內容可能毋是上新的。",
 'readonly' => 'Chu-liāu-khò· só tiâu leh',
 'enterlockreason' => 'Phah beh hong-só ê lí-iû, pau-koah ko͘-kè siáⁿ-mi̍h sî-chūn ē kái-tû hong-só.',
 'readonlytext' => 'Chu-liāu-khò· hiān-chú-sî só tiâu leh, bô khai-hòng hō· lâng siu-kái. Che tāi-khài sī in-ūi teh pān î-siu khang-khòe, oân-sêng liáu-āu èng-tong tō ē hôe-ho̍k chèng-siông. Hū-chek ê hêng-chèng jîn-oân lâu chit-ê soat-bêng: $1',
@@ -340,6 +343,9 @@ Che mā khó-lêng sī {{SITENAME}} só͘ sú-iōng ê nńg-thé chhut būn-tê.
 Che it-poaⁿ sī in-ūi koè-sî ê cheng-chha ia̍h sī le̍k-sú liân-kiat ê ia̍h í-keng hông thâi tiàu.
 
 Nā m̄-sī hit chióng chêng-hêng, lí khó-lêng tú tio̍h nńg-thé ê chhò-ngō͘. Chhiáⁿ pò hō͘ chi̍t ūi [[Special:ListUsers/sysop|koán-lí-goân]], ūi liân-kiat hiâ khì lâu thong-ti .',
+'missingarticle-rev' => '(修訂版本#:$1)',
+'missingarticle-diff' => '(精差:$1,$2)',
+'readonly_lag' => '佇附屬的資料庫更新到主要資料庫資料的時陣,資料庫會自動鎖定。',
 'internalerror' => 'Loē-pō͘ ê chhò-ngō͘',
 'internalerror_info' => 'Loē-pō͘ ê chhò-ngō͘: $1',
 'fileappenderrorread' => 'Ka-ji̍p(append) ê sî bô-hoat-tō͘ thak "$1".',
@@ -353,7 +359,8 @@ Nā m̄-sī hit chióng chêng-hêng, lí khó-lêng tú tio̍h nńg-thé ê chh
 'unexpected' => 'Koài-koài ê pió-tat: "$1"="$2"。',
 'formerror' => 'Chhò-gō·: bô-hoat-tō· kā pió sàng chhut khì.',
 'badarticleerror' => 'Bē-tàng tiàm chit ia̍h chip-hêng chit ê tōng-chok.',
-'cannotdelete' => 'Bô-hoat-tō· kā hit ê ia̍h a̍h-sī iáⁿ-siōng thâi tiāu. (Khó-lêng pa̍t-lâng í-keng kā thâi tiāu ah.)',
+'cannotdelete' => 'Bô-hoat-tō· kā hit ê ia̍h a̍h-sī iáⁿ-siōng 「$1」 thâi tiāu. (Khó-lêng pa̍t-lâng í-keng kā thâi tiāu ah.)',
+'cannotdelete-title' => '無法度共"$1"這頁刣掉。',
 'badtitle' => 'M̄-chiâⁿ piau-tê',
 'badtitletext' => 'Iau-kiû ê piau-tê sī bô-hāu ê, khang ê, a̍h-sī liân-kiat chhò-gō· ê inter-language/inter-wiki piau-tê.',
 'perfcached' => 'Ē-kha ê chu-liāu tùi lâi--ê, só·-í bī-pit oân-choân hoán-èng siōng sin ê chōng-hóng. A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.',
@@ -607,7 +614,6 @@ Lí ê kái-piàn tī ē-kha ê bûn-jī-keh. Lí su-iàu chiōng lí chò ê k
 'rows' => 'Chōa:',
 'columns' => 'Nôa',
 'searchresultshead' => 'Chhiau-chhōe kiat-kó ê siat-tēng',
-'resultsperpage' => '1 ia̍h hián-sī kúi kiāⁿ:',
 'recentchangesdays' => 'Hián-sī kúi ji̍t chòe-kīn ê kái-piàn:',
 'recentchangesdays-max' => 'siōng-choē $1 {{PLURAL:$1|kang|kang}}',
 'recentchangescount' => 'Hián-sī kúi tiâu chòe-kīn ê kái-piàn:',
index d05c097..795aef5 100644 (file)
@@ -1728,6 +1728,7 @@ Informasjonen vil være offentlig.',
 'recentchanges-label-plusminus' => 'Sidestørrelsen kan endres med dette antallet bytes',
 'recentchanges-legend-heading' => "'''Tegnforklaring:'''",
 'recentchanges-legend-newpage' => '(se også [[Special:NewPages|liste av nye sider]])',
+'recentchanges-legend-plusminus' => '«(±123)»',
 'rcnotefrom' => "Nedenfor er endringene siden '''$2''' (opp til '''$1''' vises).",
 'rclistfrom' => 'Vis nye endringer med start fra $1',
 'rcshowhideminor' => '$1 mindre endringer',
@@ -4212,4 +4213,6 @@ Faktisk utvider den det meste innkapslet i doble krøllparenteser.',
 'expand_templates_generate_rawhtml' => 'Vis ubehandlet HTML',
 'expand_templates_preview' => 'Forhåndsvisning',
 
+# Unknown messages
+'uploadinvalidxml' => 'XML-en i den opplastede filen kunne ikke tolkes.',
 );
index 257a8e7..506e97e 100644 (file)
@@ -13,6 +13,7 @@
  * @author Ganesh Paudel
  * @author Indiver
  * @author Kaganer
+ * @author Krish Dulal
  * @author Lkhatiwada
  * @author RajeshPandey
  * @author Reedy
@@ -58,7 +59,7 @@ $messages = array(
 'tog-justify' => 'अनुच्छेद जस्टिफाइ(justify) गर्ने',
 'tog-hideminor' => 'भर्खरका मामूली सम्पादनहरुलाई लुकाउने',
 'tog-hidepatrolled' => 'गस्ती(patrolled)सम्पादनहरु हालका परिवर्तनहरुमा लुकाउने',
-'tog-newpageshidepatrolled' => 'गस्ती(patrolled) पृष्ठहरु नयाँ पृष्ठ सूचीबाट लुकाउने',
+'tog-newpageshidepatrolled' => 'गस्ती गरिएका पृष्ठहरू नयाँ पृष्ठ सूचीबाट लुकाउने',
 'tog-extendwatchlist' => 'निगरानी सूचीलाई सबै परिवर्तनहरू देखाउने गरी बढाउने , हालैको  बाहेक',
 'tog-usenewrc' => 'पृष्ठका भर्खरका परिवर्तन र अवलोकन सूचीको आधारमा सामूहिक परिवर्तनहरु ( जाभास्क्रिप्ट चाहिन्छ)',
 'tog-numberheadings' => 'शीर्षकहरुलाई स्वत:अङ्कित गर्नुहोस्',
@@ -70,14 +71,14 @@ $messages = array(
 'tog-rememberpassword' => 'यस ब्राउजरमा मेरो प्रवेशलाई सम्झनुहोस् (अधिकतम $1 {{PLURAL:$1|दिन|दिनहरु}} सम्म)',
 'tog-watchcreations' => 'मेरो निगरानी सूचीमा मैले सृजना गरेको पृष्ठ र अपलोड जोड्ने',
 'tog-watchdefault' => 'मैले सम्पादन गरेको पृष्ठ र फाइल निगरानी सूचीमा थप्ने',
-'tog-watchmoves' => 'मà¥\88लà¥\87 à¤¸à¤¾à¤°à¥\87à¤\95à¥\8b à¤ªà¥\83षà¥\8dठहरà¥\81 à¤° à¤«à¤¾à¤\87लहरà¥\81लाई निगरानी सूचीमा थप्ने',
-'tog-watchdeletion' => 'मà¥\88लà¥\87 à¤¹à¤\9fाà¤\8fà¤\95à¥\8b à¤ªà¥\83षà¥\8dठहरà¥\81 à¤° à¤«à¤¾à¤\87लहरà¥\81लाई निगरानी सूचीमा थप्ने',
+'tog-watchmoves' => 'मà¥\88लà¥\87 à¤¸à¤¾à¤°à¥\87à¤\95ा à¤ªà¥\83षà¥\8dठहरà¥\82 à¤° à¤«à¤¾à¤\87लहरà¥\82लाई निगरानी सूचीमा थप्ने',
+'tog-watchdeletion' => 'मà¥\88लà¥\87 à¤¹à¤\9fाà¤\8fà¤\95ा à¤ªà¥\83षà¥\8dठहरà¥\82 à¤° à¤«à¤¾à¤\87लहरà¥\82लाई निगरानी सूचीमा थप्ने',
 'tog-minordefault' => 'सबै सम्पादनहरुलाई पूर्वनिर्धारित रुपमा सामान्य चिनो लगाउने',
 'tog-previewontop' => 'सम्पादन सन्दुक अगि पूर्वरुप देखाउने',
 'tog-previewonfirst' => 'पहिलो सम्पादनमा पूर्वरुप देखाउने',
 'tog-enotifwatchlistpages' => 'मेरो निगरानी सूचीमा रहेका पृष्ठ अथवा फाइलहरु परिवर्तन गरिए मलाई ई-मेल गरियोस्',
 'tog-enotifusertalkpages' => 'मेरो प्रयोगकर्ता वार्ता पृष्ठ परिवर्तन गरिए मलाई ई-मेल गर्ने',
-'tog-enotifminoredits' => 'पà¥\83षà¥\8dठहरà¥\81 à¤° à¤«à¤¾à¤\87लहरà¥\81à¤\95à¥\8b सामान्य सम्पादन भएमा पनि मलाई ई-मेल गरियोस्',
+'tog-enotifminoredits' => 'पà¥\83षà¥\8dठहरà¥\82 à¤° à¤«à¤¾à¤\87लहरà¥\82मा सामान्य सम्पादन भएमा पनि मलाई ई-मेल गरियोस्',
 'tog-enotifrevealaddr' => 'जानकारी इ-मेलहरुमा मेरो इ-मेल खुलाउने',
 'tog-shownumberswatching' => 'निगरानी गरिरहेका प्रयोगकर्ताहरुको संख्या देखाउने',
 'tog-oldsig' => 'वर्तमान हस्ताक्षर:',
@@ -174,17 +175,17 @@ $messages = array(
 'december-date' => 'डिसेम्बर $1',
 
 # Categories related messages
-'pagecategories' => '{{PLURAL:$1|शà¥\8dरà¥\87णà¥\80|शà¥\8dरà¥\87णà¥\80हरà¥\81}}',
+'pagecategories' => '{{PLURAL:$1|शà¥\8dरà¥\87णà¥\80|शà¥\8dरà¥\87णà¥\80हरà¥\82}}',
 'category_header' => '"$1" श्रेणीमा भएका लेखहरू',
 'subcategories' => 'उपश्रेणीहरु',
 'category-media-header' => '"$1" श्रेणीमा रहेका मिडियाहरू',
 'category-empty' => "''यो श्रेणीमा हाल कुनै पृष्ठ या मिडियाहरु रहेका छैनन् ।''",
-'hidden-categories' => '{{PLURAL:$1|लà¥\81à¤\95ाà¤\87à¤\8fà¤\95à¥\8b à¤¶à¥\8dरà¥\87णà¥\80|लà¥\81à¤\95ाà¤\87à¤\8fà¤\95ा à¤¶à¥\8dरà¥\87णà¥\80हरà¥\81}}',
-'hidden-category-category' => 'लà¥\81à¤\95ाà¤\87à¤\8fà¤\95ा à¤¶à¥\8dरà¥\87णà¥\80हरà¥\81',
-'category-subcat-count' => '{{PLURAL:$2|यà¥\8b à¤¶à¥\8dरà¥\87णà¥\80मा à¤¨à¤¿à¤®à¥\8dन à¤\89पशà¥\8dरà¥\87णà¥\80हरà¥\81 à¤®à¤¾à¤¤à¥\8dर à¤\9bनà¥\8d।|यà¥\8b à¤¶à¥\8dरà¥\87णà¥\80à¤\95à¥\8b à¤¨à¤¿à¤®à¥\8dन {{PLURAL:$1|à¤\89पशà¥\8dरà¥\87णà¥\80|$1 à¤\89पशà¥\8dरà¥\87णà¥\80हरà¥\81}},  $2 à¤\95à¥\81ल à¤®à¤§à¥\8dयà¥\87 à¤¶à¥\8dरà¥\87णà¥\80हरà¥\81 छन् ।}}',
+'hidden-categories' => '{{PLURAL:$1|लà¥\81à¤\95ाà¤\87à¤\8fà¤\95à¥\8b à¤¶à¥\8dरà¥\87णà¥\80|लà¥\81à¤\95ाà¤\87à¤\8fà¤\95ा à¤¶à¥\8dरà¥\87णà¥\80हरà¥\82}}',
+'hidden-category-category' => 'लà¥\81à¤\95ाà¤\87à¤\8fà¤\95ा à¤¶à¥\8dरà¥\87णà¥\80हरà¥\82',
+'category-subcat-count' => '{{PLURAL:$2|यà¥\8b à¤¶à¥\8dरà¥\87णà¥\80मा à¤¨à¤¿à¤®à¥\8dन à¤\89पशà¥\8dरà¥\87णà¥\80हरà¥\82 à¤®à¤¾à¤¤à¥\8dर à¤\9bनà¥\8d।|यà¥\8b à¤¶à¥\8dरà¥\87णà¥\80à¤\95à¥\8b à¤¨à¤¿à¤®à¥\8dन {{PLURAL:$1|à¤\89पशà¥\8dरà¥\87णà¥\80|$1 à¤\89पशà¥\8dरà¥\87णà¥\80हरà¥\82}},  $2 à¤\95à¥\81ल à¤®à¤§à¥\8dयà¥\87 à¤¶à¥\8dरà¥\87णà¥\80हरà¥\82 छन् ।}}',
 'category-subcat-count-limited' => 'यो श्रेणीको निम्न {{PLURAL:$1|उपश्रेणी|$1 उपश्रेणीहरु}} छ।',
-'category-article-count' => '{{PLURAL:$2|यà¥\8b à¤¶à¥\8dरà¥\87णà¥\80मा à¤\8fà¤\95 à¤®à¤¾à¤¤à¥\8dर à¤ªà¥\83षà¥\8dठरहà¥\87à¤\95à¥\8b à¤\9b।|à¤\95à¥\81ल $2 à¤®à¤§à¥\8dयà¥\87 à¤¯à¥\8b à¤¶à¥\8dरà¥\87णà¥\80मा {{PLURAL:$1|पà¥\83षà¥\8dठ|$1 à¤ªà¥\83षà¥\8dठहरà¥\81}} रहेका छन् । }}',
-'category-article-count-limited' => 'निमà¥\8dन {{PLURAL:$1|पà¥\83षà¥\8dठ|$1 à¤ªà¥\83षà¥\8dठहरà¥\81}} यस श्रेणीमा रहेको ।',
+'category-article-count' => '{{PLURAL:$2|यà¥\8b à¤¶à¥\8dरà¥\87णà¥\80मा à¤\8fà¤\95 à¤®à¤¾à¤¤à¥\8dर à¤ªà¥\83षà¥\8dठरहà¥\87à¤\95à¥\8b à¤\9b।|à¤\95à¥\81ल $2 à¤®à¤§à¥\8dयà¥\87 à¤¯à¥\8b à¤¶à¥\8dरà¥\87णà¥\80मा {{PLURAL:$1|पà¥\83षà¥\8dठ|$1 à¤ªà¥\83षà¥\8dठहरà¥\82}} रहेका छन् । }}',
+'category-article-count-limited' => 'निमà¥\8dन {{PLURAL:$1|पà¥\83षà¥\8dठ|$1 à¤ªà¥\83षà¥\8dठहरà¥\82}} यस श्रेणीमा रहेको ।',
 'category-file-count' => '{{PLURAL:$2|यो श्रेणीमा निम्न फाइल मात्र छ ।|निम्न श्रेणीमा {{PLURAL:$1|फाइल|$1 फाइलहरु}} , कुल  $2 मध्ये रहेको ।}}',
 'category-file-count-limited' => 'निम्न  {{PLURAL:$1|फाइल|$1 फाइलहरु}} यस श्रेणीमा रहेको ।',
 'listingcontinuesabbrev' => 'निरन्तरता...',
@@ -301,8 +302,8 @@ $1',
 'aboutpage' => 'Project:बारेमा',
 'copyright' => 'सामाग्री $1 अनुसार उपलब्ध छ, खुलाइएको अवस्था बाहेकको हकमा ।',
 'copyrightpage' => '{{ns:project}}:प्रतिलिपी अधिकारहरु',
-'currentevents' => 'हालà¥\88à¤\95ा à¤\98à¤\9fनाहरà¥\81',
-'currentevents-url' => 'Project:हालà¥\88à¤\95ा à¤\98à¤\9fनाहरà¥\81',
+'currentevents' => 'हालà¥\88à¤\95ा à¤\98à¤\9fनाहरà¥\82',
+'currentevents-url' => 'Project:हालà¥\88à¤\95ा à¤\98à¤\9fनाहरà¥\82',
 'disclaimers' => 'अस्विकारोक्तिहरु',
 'disclaimerpage' => 'Project:सामान्य अस्वीकारोक्ति',
 'edithelp' => 'सम्पादन सहायता',
@@ -331,7 +332,7 @@ $1',
 'youhavenewmessages' => 'तपाईंको लागि ($2) मा  $1 छ ।',
 'youhavenewmessagesfromusers' => 'तपाईंको लागि  {{PLURAL:$3|प्रयोगकर्ता|$3 प्रयोगकर्ताहरु}} ($2) बाट $1',
 'youhavenewmessagesmanyusers' => 'तपाईँलाई धेरै प्रयोगकर्ताहरू($2) बाट $1 छ ।',
-'newmessageslinkplural' => '{{PLURAL:$1|नयाà¤\81 à¤¸à¤¨à¥\8dदà¥\87श|नयाँ सन्देशहरू}}',
+'newmessageslinkplural' => '{{PLURAL:$1|à¤\8fà¤\89à¤\9fा à¤¨à¤¯à¤¾à¤\81 à¤¸à¤¨à¥\8dदà¥\87श|999=नयाँ सन्देशहरू}}',
 'newmessagesdifflinkplural' => 'अन्तिम {{PLURAL:$1|सम्पादन|सम्पादनहरू}}',
 'youhavenewmessagesmulti' => 'तपाईंको लागि $1 मा  नयाँ सन्देशहरू छन्',
 'editsection' => 'सम्पादन',
@@ -491,7 +492,7 @@ $2',
 'userlogin' => 'प्रवेश गर्ने / नयाँ खाता बनाउने',
 'userloginnocreate' => 'लग इन',
 'logout' => 'निर्गमन',
-'userlogout' => 'निरà¥\8dà¤\97मन (लà¤\97 à¤\86à¤\89à¤\89)',
+'userlogout' => 'निरà¥\8dà¤\97मन (लà¤\97 à¤\86à¤\89à¤\9f)',
 'notloggedin' => 'प्रवेश (लग ईन) नगरिएको',
 'userlogin-noaccount' => 'के खाता छैन ?',
 'userlogin-joinproject' => '{{SITENAME}} मा खाता खोल्नुहोस् ।',
@@ -805,8 +806,8 @@ $2
 'editingold' => "''चेतावनी: तपाईं यस पृष्ठको अति पुरनो अप्रचलित संशोधनको सम्पादन गर्नुहुँदैछ।'''
 यदि तपाईंले यस परिवर्तनलाई संग्रह गर्नु भयो भनें यस पछिका संशोधनहरु नष्ट हुनेछन्।",
 'yourdiff' => 'भिन्नताहरु',
-'copyrightwarning' => "à¤\95à¥\83पया à¤§à¥\8dयान à¤¦à¤¿à¤¨à¥\81हà¥\8bसà¥\8d à¤¯à¤¸ {{SITENAME}}मा à¤¦à¤¿à¤\87à¤\8fà¤\95ा à¤¯à¥\8bà¤\97दानहरà¥\81 $2à¤\95à¥\8b à¤¤à¤¹à¤¤ à¤¸à¤®à¥\8dपादन à¤° à¤ªà¥\81नरà¥\8dवितरणà¤\95à¥\8bलाà¤\97ि à¤®à¥\81à¤\95à¥\8dत à¤®à¤¾à¤¨à¤¿à¤¨à¥\87à¤\9b (विवरणà¤\95à¥\8bलाà¤\97ि $1 à¤¹à¥\87रà¥\8dनà¥\81हà¥\8bसà¥\8d) à¥¤ à¤¯à¤¦à¤¿  à¤¤à¤ªà¤¾à¤\88à¤\82à¤\95à¥\8b à¤²à¥\87à¤\96लाà¤\88 à¤¸à¤®à¥\8dपादन à¤\85थवा à¤ªà¥\81नà¤\83 à¤µà¤¿à¤¤à¤°à¤£ à¤\97राà¤\89न à¤\9aाहनà¥\81 à¤¹à¥\81नà¥\8dन à¤­à¤¨à¥\87à¤\82  à¤\95à¥\83पया à¤¯à¤¹à¤¾à¤\81  तपाईंको लेख प्रस्तुत नगर्नुहोस् ।<br />       
-यदि à¤¤à¤ªà¤¾à¤\88à¤\82 à¤\95िà¤\9fानसाथ à¤­à¤¨à¥\8dनà¥\81हà¥\81नà¥\8dà¤\9b à¤\95ि à¤\95à¥\81नà¥\88 à¤²à¥\87à¤\96 à¤®à¥\88लà¥\87 à¤²à¥\87à¤\96à¥\87à¤\95à¥\8b à¤¹à¥\8b à¤\85थवा à¤¸à¤¾à¤°à¥\8dवà¤\9cनिà¤\95 à¤\9cà¥\8dà¤\9eानà¤\95à¥\8dषà¥\87तà¥\8dर à¤\85थवा à¤®à¥\81à¤\95à¥\8dत à¤¸à¤\82साधनबाà¤\9f à¤²à¤¿à¤\87à¤\8fà¤\95à¥\8b à¤¹à¥\8b, '''यसà¥\8dतà¥\8b à¤²à¥\87à¤\96 à¤¬à¤¿à¤¨à¤¾ à¤\95पà¥\80राà¤\87à¤\9f à¤¯à¤¹à¤¾à¤\81 à¤¨à¤¦à¤¿नुहोस्!'''",
+'copyrightwarning' => "à¤\95à¥\83पया à¤§à¥\8dयान à¤¦à¤¿à¤¨à¥\81हà¥\8bसà¥\8d à¤¯à¤¸ {{SITENAME}}मा à¤¦à¤¿à¤\87à¤\8fà¤\95ा à¤¯à¥\8bà¤\97दानहरà¥\82 $2à¤\95à¥\8b à¤\85नà¥\81सार à¤¸à¤®à¥\8dपादन à¤° à¤ªà¥\81नरà¥\8dवितरणà¤\95à¥\8bलाà¤\97ि à¤\96à¥\81ला à¤®à¤¾à¤¨à¤¿à¤¨à¥\87à¤\9b (विवरणà¤\95à¥\8bलाà¤\97ि $1 à¤¹à¥\87रà¥\8dनà¥\81हà¥\8bसà¥\8d) à¥¤ à¤¯à¤¦à¤¿ à¤¤à¤ªà¤¾à¤\88à¤\82à¤\95à¥\8b à¤²à¥\87à¤\96लाà¤\88 à¤¸à¤®à¥\8dपादन à¤\85थवा à¤ªà¥\81नà¤\83 à¤µà¤¿à¤¤à¤°à¤£ à¤\97राà¤\89न à¤\9aाहनà¥\81हà¥\81नà¥\8dन à¤­à¤¨à¥\87 à¤\95à¥\83पया à¤¯à¤¹à¤¾à¤\81 तपाईंको लेख प्रस्तुत नगर्नुहोस् ।<br />       
+यदि à¤¤à¤ªà¤¾à¤\88à¤\82 à¤\95िà¤\9fानसाथ à¤­à¤¨à¥\8dनà¥\81हà¥\81नà¥\8dà¤\9b à¤\95ि à¤\95à¥\81नà¥\88 à¤²à¥\87à¤\96 à¤®à¥\88लà¥\87 à¤²à¥\87à¤\96à¥\87à¤\95à¥\8b à¤¹à¥\8b à¤\85थवा à¤¸à¤¾à¤°à¥\8dवà¤\9cनिà¤\95 à¤\9cà¥\8dà¤\9eानà¤\95à¥\8dषà¥\87तà¥\8dर à¤\85थवा à¤®à¥\81à¤\95à¥\8dत à¤¸à¤\82साधनबाà¤\9f à¤²à¤¿à¤\87à¤\8fà¤\95à¥\8b à¤¹à¥\8b, '''यसà¥\8dतà¥\8b à¤²à¥\87à¤\96 à¤\95पिराà¤\87à¤\9fबिना à¤¯à¤¹à¤¾à¤\81 à¤¨à¤°à¤¾à¤\96à¥\8dनुहोस्!'''",
 'copyrightwarning2' => "कृपया ध्यान दिनुहोस् यस {{SITENAME}}मा दिइएका योगदानहरुलाई अन्य योगदाताहरुद्वारा सम्पादन गरिनेछ, परिवर्तन गरिनेछ अथवा हटाइनेछ। यदि  तपाईंको लेखलाई निर्दयता पूर्वक सम्पादन गरेको चाहनुहुन्न भनें त्यो यहाँ नदिनुहोस्।<br />
 यदि तपाईं किटानसाथ भन्नुहुन्छ कि यो लेख तपाईं आफै लेखेको हो अथवा सार्वजनिक ज्ञानक्षेत्र अथवा मुक्त संसाधनबाट लिइएको हो (विवरणकोलागि हेर्नुहोस् $1 ). 
 '''कपीराइट भएको रचना अनुमति बिना  यहाँ नदिनुहोस्!'''",
@@ -821,12 +822,12 @@ $2
 'semiprotectedpagewarning' => "'''सूचना:''' यो पृष्ठलाई सुरक्षित गरिएको हुँदा दर्ता भएका प्रयोगकर्ताहरुले मात्र यसलाई सम्पादन गर्न सक्छन्। संदर्भको लागि नविनतम लग प्रविष्टि  तल दिइएको छ:",
 'cascadeprotectedwarning' => "'''चेतावनी:''' यस पृष्ठलाई सुरक्षित गरिएको छ यसकारण संशोधन प्रबन्धनको विशेषाधिकार प्राप्त प्रयोगकर्ताले मात्र सम्पादन गर्न सक्नेछन् किन भनें यो {{PLURAL:$1|पृष्ठ|पृष्ठहरु}}को सुरक्षित निम्न सुचिमा सुरक्षित छ :",
 'titleprotectedwarning' => "'''चेतावनी:''' यो पृष्ठलाई सुरक्षित गरिएकोछ र यसलाई सृजना गर्न  [[Special:ListGroupRights|विशेषाधिकार]] चाहिन्छ । संदर्भको लागि नवीनतम लग प्रविष्टि  तल दिइएको छ:",
-'templatesused' => 'यस à¤ªà¥\83षà¥\8dठमा à¤ªà¥\8dरयà¥\8bà¤\97 à¤­à¤\8fà¤\95ा {{PLURAL:$1|Template|à¤\9fà¥\87मà¥\8dपà¥\8dलà¥\87à¤\9f(नमà¥\82ना)हरà¥\81}} :',
-'templatesusedpreview' => 'यस à¤ªà¥\83षà¥\8dठमा à¤ªà¥\8dरयà¥\8bà¤\97 à¤­à¤\8fà¤\95ा {{PLURAL:$1|Template|à¤\9fà¥\87मà¥\8dपà¥\8dलà¥\87à¤\9f(नमà¥\82ना)हरà¥\81}} :',
+'templatesused' => 'यस à¤ªà¥\83षà¥\8dठमा à¤ªà¥\8dरयà¥\8bà¤\97 à¤­à¤\8fà¤\95ा {{PLURAL:$1|Template|à¤\9fà¥\87मà¥\8dपà¥\8dलà¥\87à¤\9f(ढाà¤\81à¤\9aा)हरà¥\82}} :',
+'templatesusedpreview' => 'यस à¤ªà¥\83षà¥\8dठमा à¤ªà¥\8dरयà¥\8bà¤\97 à¤­à¤\8fà¤\95ा {{PLURAL:$1|Template|à¤\9fà¥\87मà¥\8dपà¥\8dलà¥\87à¤\9f(ढाà¤\81à¤\9aा)हरà¥\82}} :',
 'templatesusedsection' => '{{PLURAL:$1|ढाँचा प्रयोग गरिएकोछ|ढाँचाहरु प्रयोग गरिएकाछन्}} यस खण्डमा:',
 'template-protected' => '(सुरक्षित)',
 'template-semiprotected' => '(अर्ध-सुरक्षित)',
-'hiddencategories' => 'यà¥\8b à¤ªà¥\83षà¥\8dठ à¤¨à¤¿à¤®à¥\8dन {{PLURAL:$1|1 à¤²à¥\81à¤\95ाà¤\87à¤\8fà¤\95à¥\8b à¤¶à¥\8dरà¥\87णà¥\80|$1 à¤²à¥\81à¤\95ाà¤\87à¤\8fà¤\95ा à¤¶à¥\8dरà¥\87णà¥\80हरà¥\81}}को सदस्य हो :',
+'hiddencategories' => 'यà¥\8b à¤ªà¥\83षà¥\8dठ à¤¨à¤¿à¤®à¥\8dन {{PLURAL:$1|1 à¤²à¥\81à¤\95ाà¤\87à¤\8fà¤\95à¥\8b à¤¶à¥\8dरà¥\87णà¥\80|$1 à¤²à¥\81à¤\95ाà¤\87à¤\8fà¤\95ा à¤¶à¥\8dरà¥\87णà¥\80हरà¥\82}}को सदस्य हो :',
 'edittools' => '<!-- Text here will be shown below edit and upload forms. -->',
 'edittools-upload' => '-',
 'nocreatetext' => '{{SITENAME}} ले नयाँ पृष्ठ सृजना गर्न सक्ने क्षमतामा रोक लगाएको छ।
@@ -864,7 +865,7 @@ $2
 # Parser/template warnings
 'expensive-parserfunction-warning' => "'''चेतावनी:''' यस पृष्टका अति धेरै संख्याका महँगा पार्सर फंक्सन कल्स (expensive parser function calls)  छन्।
 यसमा $2 भन्दा कम {{PLURAL:$2|कल|कल्स}} हुनुपर्छ,  यहाँ {{PLURAL:$1|अहिले $1 कल छ|अहिले $1 कल्स छ्न्}}.",
-'expensive-parserfunction-category' => "à¤\85ति à¤§à¥\87रà¥\87 à¤®à¥\87हनत à¤ªà¤°à¥\8dनà¥\87 '''पारà¥\8dसर à¤«à¤\99à¥\8dसन à¤\95ल'''हरà¥\81 à¤­à¤\8fà¤\95ा à¤ªà¥\83षà¥\8dठहरà¥\81",
+'expensive-parserfunction-category' => "à¤\85ति à¤§à¥\87रà¥\88 à¤®à¥\87हनत à¤ªà¤°à¥\8dनà¥\87 '''पारà¥\8dसर à¤«à¤\99à¥\8dसन à¤\95ल'''हरà¥\82 à¤­à¤\8fà¤\95ा à¤ªà¥\83षà¥\8dठहरà¥\82",
 'post-expand-template-inclusion-warning' => "'''चेतावनी:''' समेट्नुपर्ने टेम्प्लेट(नमुना) आकार अति ठूलो छ।
 केही टेम्प्लेटहरु(नमुनाहरु) समेटिने छैनन् ।",
 'post-expand-template-inclusion-category' => 'पृष्ठहरु जहाँ  समेटिएको टेम्पलेट आकार हुनुपर्ने भन्दा बढि छ ।',
@@ -1059,7 +1060,7 @@ $1",
 'viewprevnext' => 'हेर्नुहोस् ($1 {{int:pipe-separator}} $2) ($3)',
 'searchmenu-exists' => "''' \"[[:\$1]]\" नाम गरेको पृष्ठ  यो विकीमा रहेको छ'''",
 'searchmenu-new' => "'''यस विकिमा  \"[[:\$1]]\" शीर्षक भएको पृष्ठ बनाउनुहोस् !'''",
-'searchprofile-articles' => 'सामà¤\97à¥\8dरà¥\80 à¤ªà¥\83षà¥\8dठहरà¥\81',
+'searchprofile-articles' => 'सामà¤\97à¥\8dरà¥\80 à¤ªà¥\83षà¥\8dठहरà¥\82',
 'searchprofile-project' => 'सहायता र आयोजना पृष्ठहरु',
 'searchprofile-images' => 'मल्टिमिडिया(श्रव्य दृश्य)',
 'searchprofile-everything' => 'सब थोक',
@@ -1109,7 +1110,7 @@ $1",
 'prefs-labs' => 'प्रयोगशाला गुणहरु',
 'prefs-user-pages' => 'प्रयोगकर्ता पृष्ठहरू',
 'prefs-personal' => 'प्रयोगकर्ताको विवरण',
-'prefs-rc' => 'नयाà¤\81 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनहरà¥\81',
+'prefs-rc' => 'नयाà¤\81 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनहरà¥\82',
 'prefs-watchlist' => 'अवलोकन पृष्ठ',
 'prefs-watchlist-days' => 'निगरानी सूचीमा देखाउन दिनहरु:',
 'prefs-watchlist-days-max' => 'धेरैमा $1 {{PLURAL:$1|दिन|दिन}}',
@@ -1366,7 +1367,7 @@ HTML ट्यागहरु जाँच्नुहोस् ।',
 # Recent changes
 'nchanges' => '$1 {{PLURAL:$1|परिवर्तन|परिवर्तनहरु}}',
 'enhancedrc-history' => 'इतिहास',
-'recentchanges' => 'नयाà¤\81 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनहरà¥\81',
+'recentchanges' => 'नयाà¤\81 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनहरà¥\82',
 'recentchanges-legend' => 'हालैको परिवर्तन विकल्पहरु',
 'recentchanges-summary' => 'विकिका भर्खरका परिवर्तनहरुलाई यस पृष्ठमा पहिल्याउने',
 'recentchanges-feed-description' => 'यो फिडमा रहेको विकीको सवैभन्दा अन्तिम परिवर्तनहरुको जानकारी राख्नुहोस्',
@@ -1404,9 +1405,9 @@ HTML ट्यागहरु जाँच्नुहोस् ।',
 'rc-old-title' => 'मौलिक तौरमा "$1" रुपमा बनाइएको',
 
 # Recent changes linked
-'recentchangeslinked' => 'सà¤\82बनà¥\8dधित à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनहरà¥\81',
-'recentchangeslinked-feed' => 'सà¤\82बनà¥\8dधित à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनहरà¥\81',
-'recentchangeslinked-toolbox' => 'सà¤\82बनà¥\8dधित à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनहरà¥\81',
+'recentchangeslinked' => 'समà¥\8dबनà¥\8dधित à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनहरà¥\82',
+'recentchangeslinked-feed' => 'समà¥\8dबनà¥\8dधित à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनहरà¥\82',
+'recentchangeslinked-toolbox' => 'समà¥\8dबनà¥\8dधित à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनहरà¥\82',
 'recentchangeslinked-title' => '"$1"सम्वन्धित परिवर्तनसँग',
 'recentchangeslinked-summary' => "यो सूची निर्दिष्ट पृष्ठ (वा निर्दिष्ट श्रेणी)सित जोड़िएका  भर्खरै परिवर्तन भएका पृष्ठको  हो। [[Special:Watchlist|तपाईँको निगरानी सूची]]का पृष्ठहरु '''गाढा अक्षरमा''' छन्।",
 'recentchangeslinked-page' => 'पृष्ठ नाम:',
@@ -1671,7 +1672,7 @@ $1',
 'statistics-header-views' => 'तथ्याङ्क देखाउनुहोस्',
 'statistics-header-users' => 'प्रयोगकर्ता तथ्याङ्कहरु',
 'statistics-header-hooks' => 'अन्य तथ्याङ्कहरु',
-'statistics-articles' => 'सामà¤\97à¥\8dरà¥\80 à¤ªà¥\83षà¥\8dठहरà¥\81',
+'statistics-articles' => 'सामà¤\97à¥\8dरà¥\80 à¤ªà¥\83षà¥\8dठहरà¥\82',
 'statistics-pages' => 'पृष्ठहरु',
 'statistics-pages-desc' => 'विकिका सबै पृष्ठहरु , वार्तापका पृष्ठहरु समेत , रिडाइरेक्ट , इत्यादि ।',
 'statistics-files' => 'उर्ध्वभरण गरिएका फाइलहरु',
@@ -1712,31 +1713,31 @@ $1',
 'nimagelinks' => '$1 {{PLURAL:$1|पृष्ठ|पृष्ठहरु}}माथि प्रयोग गरिएको',
 'ntransclusions' => '$1 {{PLURAL:$1पृष्ठमा प्रयोग गरिएको|पृष्ठहरुमा प्रयोग गरिएका}}',
 'specialpage-empty' => 'यो पृष्ठ खाली छ।',
-'lonelypages' => 'à¤\85नाथ à¤ªà¥\83षà¥\8dठहरà¥\81',
+'lonelypages' => 'à¤\85नाथ à¤ªà¥\83षà¥\8dठहरà¥\82',
 'uncategorizedpages' => 'श्रेणीकरण नभएका पृष्ठहरु',
-'uncategorizedcategories' => 'शà¥\8dरà¥\87णà¥\80à¤\95रण à¤¨à¤­à¤\8fà¤\95ा à¤¶à¥\8dरà¥\87णà¥\80हरà¥\81',
+'uncategorizedcategories' => 'शà¥\8dरà¥\87णà¥\80à¤\95रण à¤¨à¤­à¤\8fà¤\95ा à¤¶à¥\8dरà¥\87णà¥\80हरà¥\82',
 'uncategorizedimages' => 'श्रेणीकरण नभएका फाइलहरु',
 'uncategorizedtemplates' => 'श्रेणीकरण नभएका टेम्प्लेटहरु',
-'unusedcategories' => 'पà¥\8dरयà¥\8bà¤\97 à¤¨à¤­à¤\8fà¤\95ा à¤¶à¥\8dरà¥\87णà¥\80हरà¥\81',
+'unusedcategories' => 'पà¥\8dरयà¥\8bà¤\97 à¤¨à¤­à¤\8fà¤\95ा à¤¶à¥\8dरà¥\87णà¥\80हरà¥\82',
 'unusedimages' => 'प्रयोग नभएका फाइलहरु',
 'popularpages' => 'धेरै रूचाईएका पृष्ठहरू',
-'wantedcategories' => 'माà¤\97 à¤­à¤\8fà¤\95ा à¤¶à¥\8dरà¥\87णà¥\80हरà¥\81',
-'wantedpages' => 'à¤\96à¥\8bà¤\9cिà¤\8fà¤\95ा à¤ªà¥\83षà¥\8dठहरà¥\81',
+'wantedcategories' => 'माà¤\97 à¤­à¤\8fà¤\95ा à¤¶à¥\8dरà¥\87णà¥\80हरà¥\82',
+'wantedpages' => 'à¤\96à¥\8bà¤\9cिà¤\8fà¤\95ा à¤ªà¥\83षà¥\8dठहरà¥\82',
 'wantedpages-badtitle' => 'नतिजा सूचीमा अमान्य शीर्षक:$1',
 'wantedfiles' => 'माग भएका फाइलहरु',
 'wantedtemplates' => 'माग भएका टेम्प्लेटहरु',
 'mostlinked' => 'सबैभन्दा बढि लिंक भएको पृष्ठ',
-'mostlinkedcategories' => 'सबै भन्दा बढी जोडिएको श्रेणीहरु',
+'mostlinkedcategories' => 'सबैभन्दा बढी लिंक भएका श्रेणीहरू',
 'mostlinkedtemplates' => 'ढाँचाहरुसित सबैभन्दा बढि लिंक भएको',
 'mostcategories' => 'सबैभन्दा धेरै श्रेणीहरू भएका लेखहरू',
 'mostimages' => 'सबैभन्दा बढि लिंक भएको चित्र',
 'mostrevisions' => 'सबैभन्दा बढी संशोधित लेखहरू',
 'prefixindex' => 'प्रिफिक्स सहितका पृष्ठहरु',
-'shortpages' => 'à¤\9bà¥\8bà¤\9fा à¤ªà¥\83षà¥\8dठहरà¥\81',
+'shortpages' => 'à¤\9bà¥\8bà¤\9fा à¤ªà¥\83षà¥\8dठहरà¥\82',
 'longpages' => 'लामो पृष्ठहरु',
 'deadendpages' => 'हदै-अन्तकि पृष्ठहरु',
 'deadendpagestext' => 'निम्न पृष्ठहरु {{SITENAME}}मा रहेका अरु पृष्ठहरुसँग जोडिदैनन् ।',
-'protectedpages' => 'सà¤\82रà¤\95à¥\8dषित à¤ªà¥\83षà¥\8dठहरà¥\81',
+'protectedpages' => 'सà¤\82रà¤\95à¥\8dषित à¤ªà¥\83षà¥\8dठहरà¥\82',
 'protectedpages-indef' => 'नखुलेको सुरक्षा मात्र',
 'protectedpages-cascade' => 'लामबद्ध सुरक्षाहरु मात्रा',
 'protectedpagesempty' => 'दिइएको प्यारामिटर प्रयोग गरि सुरक्षा गरिएका पृष्ठहरु छैनन् ।',
@@ -1749,7 +1750,7 @@ $1',
 'usercreated' => ' $1को $2 मा {{GENDER:$3|सृजना}} गरिएको',
 'newpages' => 'नयाँ पृष्ठहरू',
 'newpages-username' => 'प्रयोगकर्ता नाम:',
-'ancientpages' => 'सबà¥\88भनà¥\8dदा à¤ªà¥\81राना à¤ªà¥\83षà¥\8dठहरà¥\81',
+'ancientpages' => 'सबà¥\88भनà¥\8dदा à¤ªà¥\81राना à¤ªà¥\83षà¥\8dठहरà¥\82',
 'move' => 'सार्ने',
 'movethispage' => 'यो पृष्ठ सार्नुहोस्',
 'notargettitle' => 'कुनैपनि निसाना(टारगेट) छैन',
@@ -1773,13 +1774,13 @@ $1',
 'log-title-wildcard' => 'पाठबाट सुरुहुने शीर्षकहरु खोज्नुहोस्',
 
 # Special:AllPages
-'allpages' => 'सबà¥\88 à¤ªà¥\83षà¥\8dठहरà¥\81',
+'allpages' => 'सबà¥\88 à¤ªà¥\83षà¥\8dठहरà¥\82',
 'alphaindexline' => '$1 लाई $2 मा',
 'nextpage' => 'अर्को पृष्ठ ($1)',
 'prevpage' => 'पहिलो पृष्ठ ($1)',
-'allpagesfrom' => 'यहाà¤\81दà¥\87à¤\96ि à¤¶à¥\81रà¥\81 à¤¹à¥\81नà¥\87 à¤ªà¥\83षà¥\8dठहरà¥\81 देखाउनुहोस्:',
+'allpagesfrom' => 'यहाà¤\81दà¥\87à¤\96ि à¤¶à¥\81रà¥\81 à¤¹à¥\81नà¥\87 à¤ªà¥\83षà¥\8dठहरà¥\82 देखाउनुहोस्:',
 'allpagesto' => 'निम्नमा अन्तहुने पृष्ठहरु देखाउने:',
-'allarticles' => 'सबà¥\88 à¤²à¥\87à¤\96हरà¥\81',
+'allarticles' => 'सबà¥\88 à¤²à¥\87à¤\96हरà¥\82',
 'allinnamespace' => 'सबै पृष्ठहरु ($1 नेमस्पेस)',
 'allpagessubmit' => 'जाने',
 'allpagesprefix' => 'यी सुरुका अक्षरसहितका पृष्ठहरु हेर्ने:',
@@ -1790,14 +1791,14 @@ $1',
 
 # Special:Categories
 'categories' => 'श्रेणीहरू',
-'categoriesfrom' => 'शà¥\8dरà¥\87णà¥\80हरà¥\81 देखाउन शुरु हुने यहाँ:',
+'categoriesfrom' => 'शà¥\8dरà¥\87णà¥\80हरà¥\82 देखाउन शुरु हुने यहाँ:',
 'special-categories-sort-count' => 'गणना क्रममा राख्नुहोस्',
 'special-categories-sort-abc' => 'वर्णानुक्रम अनुसार मिलाउने',
 
 # Special:DeletedContributions
-'deletedcontributions' => 'पà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताà¤\95ा à¤®à¥\87à¤\9fिà¤\8fà¤\95ा à¤¯à¥\8bà¤\97दानहरà¥\81',
-'deletedcontributions-title' => 'पà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताà¤\95ा à¤®à¥\87à¤\9fाà¤\87à¤\8fà¤\95ा à¤¯à¥\8bà¤\97दानहरà¥\81',
-'sp-deletedcontributions-contribs' => 'यà¥\8bà¤\97दानहरà¥\81',
+'deletedcontributions' => 'पà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताà¤\95ा à¤®à¥\87à¤\9fिà¤\8fà¤\95ा à¤¯à¥\8bà¤\97दानहरà¥\82',
+'deletedcontributions-title' => 'पà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताà¤\95ा à¤®à¥\87à¤\9fाà¤\87à¤\8fà¤\95ा à¤¯à¥\8bà¤\97दानहरà¥\82',
+'sp-deletedcontributions-contribs' => 'यà¥\8bà¤\97दानहरà¥\82',
 
 # Special:LinkSearch
 'linksearch' => 'बाह्य लिंक खोज',
@@ -1886,7 +1887,7 @@ $1',
 'watchnologintext' => 'आफ्नो अवलोकनलाइ परिवर्तन गर्नको लागि त तपाइ यसमा [[Special:UserLogin|प्रवेश(लगइन)]] गर्नुपर्छ।',
 'addwatch' => 'निगरानी सुचीमा थप्ने',
 'addedwatchtext' => '"[[:$1]]" पृष्ठ [[Special:Watchlist|अवलोकनसूची]]मा थपियो
-यो पृष्ठ र यससित सम्बद्ध वार्तालाप पृष्ठमा भविष्यमा हुने परिवर्तन  सूचिबद्ध गरिनेछ र यो पृष्ठ [[Special:RecentChanges|नयाँ परिवर्तनहरु]]मा छान्न सजिलोकोलागि गाढा अक्षरमा देखा पर्नेछ।',
+यो पृष्ठ र यससित सम्बद्ध वार्तालाप पृष्ठमा भविष्यमा हुने परिवर्तन सूचिबद्ध गरिनेछ र यो पृष्ठ [[Special:RecentChanges|नयाँ परिवर्तनहरू]]मा छान्न सजिलोकोलागि गाढा अक्षरमा देखा पर्नेछ।',
 'removewatch' => 'निगरानी सुचीबाट हटाउने',
 'removedwatchtext' => 'पृष्ठ "[[:$1]]" [[Special:Watchlist|तपाईको निगरानी सूची]]बाट हटाइएको छ।',
 'watch' => 'अवलोकन',
@@ -2115,19 +2116,19 @@ $3द्वारा $1को ($4को  समय $5 मा) मेटाइए
 
 # Contributions
 'contributions' => '{{GENDER:$1|प्रयोगकर्ता}}का योगदानहरू',
-'contributions-title' => '$1à¤\95à¥\8b à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dता à¤¯à¥\8bà¤\97दानहरà¥\81',
-'mycontris' => 'यà¥\8bà¤\97दानहरà¥\81',
+'contributions-title' => '$1à¤\95à¥\8b à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dता à¤¯à¥\8bà¤\97दानहरà¥\82',
+'mycontris' => 'यà¥\8bà¤\97दानहरà¥\82',
 'contribsub2' => ' {{GENDER:$3|$1}} ($2)को लागि',
 'nocontribs' => 'यस मापदण्ड अनुसार परिवर्त पाइएन।',
 'uctop' => '(वर्तमान)',
 'month' => 'महिना देखि (र पहिले):',
 'year' => 'वर्ष देखि( र पहिले):',
 
-'sp-contributions-newbies' => 'नयाà¤\81 à¤\96ाताà¤\95à¥\8b à¤²à¤¾à¤\97ि à¤®à¤¾à¤¤à¥\8dर à¤¯à¥\8bà¤\97दानहरà¥\81 देखाउने',
+'sp-contributions-newbies' => 'नयाà¤\81 à¤\96ाताà¤\95à¥\8b à¤¯à¥\8bà¤\97दानहरà¥\82 à¤®à¤¾à¤¤à¥\8dर देखाउने',
 'sp-contributions-newbies-sub' => 'नयाँ खाताहरुको लागि',
-'sp-contributions-newbies-title' => 'नयाà¤\81 à¤\96ाताहरà¥\81à¤\95à¥\8b à¤²à¤¾à¤\97ि à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताà¤\95ा à¤¯à¥\8bà¤\97दानहरà¥\81',
+'sp-contributions-newbies-title' => 'नयाà¤\81 à¤\96ाताहरà¥\82à¤\95à¥\8b à¤²à¤¾à¤\97ि à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताà¤\95ा à¤¯à¥\8bà¤\97दानहरà¥\82',
 'sp-contributions-blocklog' => 'रोकावट लग',
-'sp-contributions-deleted' => 'पà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताà¤\95ा à¤¯à¥\8bà¤\97दानहरà¥\81 मेटाइयो',
+'sp-contributions-deleted' => 'पà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताà¤\95ा à¤¯à¥\8bà¤\97दानहरà¥\82 मेटाइयो',
 'sp-contributions-uploads' => 'उर्ध्वभरणहरु',
 'sp-contributions-logs' => 'लगहरु',
 'sp-contributions-talk' => 'वार्ता',
@@ -2136,7 +2137,7 @@ $3द्वारा $1को ($4को  समय $5 मा) मेटाइए
 नवीनतम रोकाइ गरेको लग प्रविष्टि सन्दर्भको निम्ति तल दिएकोछ:',
 'sp-contributions-blocked-notice-anon' => 'यो IP ठेगानालाई अहिले रोक लगाइएको छ।
 नवीनतम रोकाइ गरेको लग प्रविष्टि सन्दर्भको निम्ति तल दिएकोछ:',
-'sp-contributions-search' => 'यà¥\8bà¤\97दानहरà¥\81 खोज्नुहोस्',
+'sp-contributions-search' => 'यà¥\8bà¤\97दानहरà¥\82 खोज्नुहोस्',
 'sp-contributions-username' => 'IP ठेगाना वा प्रयोगकर्ता नाम :',
 'sp-contributions-toponly' => 'नवीनतम संशोधनका सम्पादनहरु देखाउनुहोस्',
 'sp-contributions-submit' => 'खोज',
@@ -2237,7 +2238,7 @@ $3द्वारा $1को ($4को  समय $5 मा) मेटाइए
 'blocklink' => 'रोक्ने',
 'unblocklink' => 'रोक फुकुवा गर्ने',
 'change-blocklink' => 'रोकमा परिवर्तन गर्ने',
-'contribslink' => 'यà¥\8bà¤\97दानहरà¥\81',
+'contribslink' => 'यà¥\8bà¤\97दानहरà¥\82',
 'emaillink' => 'इमेल पठाउने',
 'autoblocker' => 'तपाईंको आई पी ठेगाना  "[[User:$1|$1]]" द्वारा  भर्खरै प्रयोग गरिएकोले स्वत: बन्देज गरिएको।
 $1को बन्देजको कारण : "$2" हो',
@@ -2345,7 +2346,7 @@ $1को बन्देजको कारण : "$2" हो',
 'movepage-max-pages' => 'अधिकतम $1 {{PLURAL:$1|पृष्ठ|पृष्ठहरु}} सारिसकिएको छ र अरु स्वत: सारिने छैन ।',
 'movelogpage' => 'लग सार्ने',
 'movelogpagetext' => 'सबै सारिएका पृष्ठहरुको सूची तल दिइएकोछ।',
-'movesubpage' => '{{PLURAL:$1|à¤\89पपà¥\83षà¥\8dठ|à¤\89पपà¥\83षà¥\8dठहरà¥\81}}',
+'movesubpage' => '{{PLURAL:$1|à¤\89पपà¥\83षà¥\8dठ|à¤\89पपà¥\83षà¥\8dठहरà¥\82}}',
 'movesubpagetext' => 'यस पृष्ठको $1 {{PLURAL:$1|सह-पृष्ठ|सह-पृष्ठहरु}} तल देखाइएको :',
 'movenosubpage' => 'यस पृष्ठका उप पृष्ठहरु छैनन्।',
 'movereason' => 'कारण :',
@@ -2406,7 +2407,7 @@ $1को बन्देजको कारण : "$2" हो',
 'thumbnail_image-missing' => 'फाइल हराएको भान भइरहेछ: $1',
 
 # Special:Import
-'import' => 'पà¥\83षà¥\8dठहरà¥\81 आयात गर्नुहोस्',
+'import' => 'पà¥\83षà¥\8dठहरà¥\82 आयात गर्नुहोस्',
 'importinterwiki' => 'Transwiki आयात',
 'import-interwiki-source' => 'स्रोत विकि/ पृष्ठ :',
 'import-interwiki-history' => 'यो पृष्ठकोलागि सबै इतिहास संशोधनहरु प्रतिलिपि गर्ने',
@@ -2473,7 +2474,7 @@ $1को बन्देजको कारण : "$2" हो',
 'tooltip-ca-unwatch' => 'यो पृष्ठलाई तपाईँको अवलोकनसूचीबाट हटाउनुहोस्',
 'tooltip-search' => '{{SITENAME}} मा खोज्नुहोस्',
 'tooltip-search-go' => 'यदि यो नामको पृष्ठ रहेको छ भने त्यसमा जाने',
-'tooltip-search-fulltext' => 'यà¥\8b à¤ªà¤¾à¤ à¤\95à¥\8b à¤²à¤¾à¤\97ि à¤ªà¥\83षà¥\8dठहरà¥\81 खोज्नुहोस्',
+'tooltip-search-fulltext' => 'यà¥\8b à¤ªà¤¾à¤ à¤\95à¥\8b à¤²à¤¾à¤\97ि à¤ªà¥\83षà¥\8dठहरà¥\82 खोज्नुहोस्',
 'tooltip-p-logo' => 'मुख्य पृष्ठ',
 'tooltip-n-mainpage' => 'मुख्य पृष्ठमा जाने',
 'tooltip-n-mainpage-description' => 'मुख्य पृष्ठमा जानुहो्स्',
@@ -2512,7 +2513,7 @@ $1को बन्देजको कारण : "$2" हो',
 'tooltip-watchlistedit-raw-submit' => 'निगरानी सूची अध्यावधि गर्ने',
 'tooltip-recreate' => 'मेटिएको भए ता पनि यो पृष्ट पुन:निर्माण गर्नुहोस् ।',
 'tooltip-upload' => 'उर्ध्वभरण(upload) सुरुगर्ने',
-'tooltip-rollback' => '"पà¥\82रà¥\8dवरà¥\81प" à¤²à¥\87 à¤¯à¥\8b à¤ªà¥\83षà¥\8dठà¤\95à¥\8b à¤¸à¤®à¥\8dपादन(हरà¥\81) à¤\96ारà¥\87à¤\9c à¤\97रà¥\80 à¤ªà¥\83षà¥\8dठलाà¤\88 à¤ªà¤\9bिलà¥\8dलà¥\8b à¤¸à¤®à¥\8dपादनमा à¤\8fà¤\95 à¤\95à¥\8dलिà¤\95मा à¤ªà¥\81रà¥\8dâ\80\8dयाà¤\87 दिन्छ',
+'tooltip-rollback' => '"पà¥\82रà¥\8dवरà¥\81प" à¤²à¥\87 à¤¯à¥\8b à¤ªà¥\83षà¥\8dठà¤\95à¥\8b à¤¸à¤®à¥\8dपादन(हरà¥\82) à¤\96ारà¥\87à¤\9c à¤\97रà¥\80 à¤ªà¥\83षà¥\8dठलाà¤\88 à¤\8fà¤\95 à¤\95à¥\8dलिà¤\95मा à¤ªà¤\9bिलà¥\8dलà¥\8b à¤¸à¤®à¥\8dपादनमा à¤ªà¥\81रà¥\8dâ\80\8dयाà¤\87दिन्छ',
 'tooltip-undo' => '"रद्द"ले पछिल्लो सम्पादन खारेज गरी पूर्वावलोकनमा देखाउँछ ।
 यसले सारांशमा कारण राख्न दिनेछ।',
 'tooltip-preferences-save' => 'अभिरुचिहरु संग्रह गर्नुहोस्',
@@ -2897,7 +2898,7 @@ $8',
 'exif-exposureprogram-1' => 'स्वयं',
 'exif-exposureprogram-2' => 'साधारण कार्यक्रम',
 'exif-exposureprogram-3' => 'एपर्चर प्राथमिकता',
-'exif-exposureprogram-4' => 'à¤टर प्राथमिकता',
+'exif-exposureprogram-4' => 'सटर प्राथमिकता',
 'exif-exposureprogram-5' => 'शृजनात्मक कार्यक्रम(गहिराइसँग बाझिएको)',
 'exif-exposureprogram-6' => 'क्रिया कार्यक्रम (तेज शटर गतितर्फ झु्केको)',
 
@@ -3394,7 +3395,7 @@ $5
 'dberr-again' => 'केही समय पर्खिएर पुन: लोड हुन दिनुहोस् ।',
 'dberr-info' => '(डेटाबेस सर्वर $1सित सम्पर्क साध्न सकिंदैन)',
 'dberr-usegoogle' => 'तपाईले अहिले गुगलबाट खोज गर्न प्रयास गर्न सक्नुहुन्छ।',
-'dberr-outofdate' => 'कृपय स्मरणमा राख्नुहोस हाम्रा लेखहरुको सुची जुन उनीहरुले राखेका छन् त्यो अद्यावधिक नहुन सक्छ ।',
+'dberr-outofdate' => 'कृपया स्मरणमा राख्नुहोस् हाम्रा लेखहरूको सूची जुन उनीहरूले राखेका छन् त्यो अद्यावधिक नहुन सक्छ ।',
 'dberr-cachederror' => 'यो अनुरोध गरिएको पृष्ठको क्याशमा रहेका प्रतिलिपी हो , र अद्यावधिक नहुन सक्छ ।',
 
 # HTML forms
index 5f29658..deb2b3b 100644 (file)
@@ -37,6 +37,7 @@
  * @author Mwpnl
  * @author Naudefj
  * @author Niels
+ * @author Niknetniko
  * @author Paul B
  * @author Romaine
  * @author SPQRobin
@@ -1236,6 +1237,8 @@ Deze bestaat al.',
 'content-not-allowed-here' => 'De inhoud "$1" is niet toegestaan op pagina [[$2]].',
 'editwarning-warning' => 'Als u deze pagina verlaat verliest u mogelijk wijzigingen die u hebt gemaakt.
 Als u bent aangemeld, kunt u deze waarschuwing uitschakelen in het tabblad "{{int:prefs-editing}}" in uw voorkeuren.',
+'editpage-notsupportedcontentformat-title' => 'Inhoudsformaat niet ondersteund',
+'editpage-notsupportedcontentformat-text' => 'Het inhoudsformaat $1 wordt niet ondersteund door het inhoudsmodel $2.',
 
 # Content models
 'content-model-wikitext' => 'wikitekst',
index e630693..601896c 100644 (file)
@@ -1858,6 +1858,7 @@ Cofnij się i załaduj plik pod inną nazwą. [[File:$1|thumb|center|$1]]',
 'file-exists-duplicate' => 'Ten plik jest kopią {{PLURAL:$1|pliku|następujących plików:}}',
 'file-deleted-duplicate' => 'Identyczny do tego plik ([[:$1]]) został wcześniej usunięty.
 Sprawdź historię usunięć tamtego pliku zanim prześlesz go ponownie.',
+'file-deleted-duplicate-notitle' => 'Plik jest identyczny z plikiem, który został wcześniej usunięty, a jego nazwa została ukryta. Należy poprosić kogoś z możliwością przeglądania ukrytych danych, aby przeanalizował sytuację przed przystąpieniem do jego ponownego przesłania.',
 'uploadwarning' => 'Ostrzeżenie o przesyłaniu',
 'uploadwarning-text' => 'Zmień poniższy opis pliku i spróbuj ponownie.',
 'savefile' => 'Zapisz plik',
@@ -2203,7 +2204,7 @@ Każdy wiersz zawiera linki do pierwszego i drugiego przekierowania oraz link, d
 'ninterwikis' => '$1 {{PLURAL:$1|interwiki|interwiki|interwiki}}',
 'nlinks' => '$1 {{PLURAL:$1|link|linki|linków}}',
 'nmembers' => '$1 {{PLURAL:$1|element|elementy|elementów}}',
-'nmemberschanged' => '$1 → $2 {{PLURAL:$1|element|elementy|elementów}}',
+'nmemberschanged' => '$1 → $2 {{PLURAL:$2|element|elementy|elementów}}',
 'nrevisions' => '$1 {{PLURAL:$1|wersja|wersje|wersji}}',
 'nviews' => 'odwiedzono $1 {{PLURAL:$1|raz|razy}}',
 'nimagelinks' => 'Używane na $1 {{PLURAL:$1|stronie|stronach}}',
index 4aae495..4862297 100644 (file)
@@ -871,6 +871,8 @@ A esist già.",
 'content-not-allowed-here' => "Ël contnù «$1» a l'é nen autorisà an sla pàgina [[$2]]",
 'editwarning-warning' => "Chité sta pàgina-sì a peul feje perde tute le modìfiche ch'a l'ha fàit.
 S'a l'é rintrà ant ël sistema, a peul disabilité st'avis ant la session «Modìfica» dij sò gust.",
+'editpage-notsupportedcontentformat-title' => 'Formà ëd contnù nen mantnù',
+'editpage-notsupportedcontentformat-text' => "Ël formà ëd contnù $1 a l'é nen mantnù dal model Ëd contnù $2.",
 
 # Content models
 'content-model-wikitext' => 'test wiki',
@@ -3960,4 +3962,6 @@ An efet, a espand praticament tut lòn ch'a-i é antrames dle grafe dobie.",
 'expand_templates_generate_rawhtml' => "Smon-e l'HTML sempi",
 'expand_templates_preview' => 'Preuva',
 
+# Unknown messages
+'uploadinvalidxml' => "L'XML ant l'archivi carià a l'ha nen podù esse analisà.",
 );
index 38398f1..865ee9b 100644 (file)
@@ -1168,6 +1168,8 @@ Ela já existia.',
 'content-not-allowed-here' => 'Conteúdo do tipo "$1" não é permitido na página [[$2]]',
 'editwarning-warning' => 'Abandonar esta página pode fazer com que você perca todas as alterações que fez.
 Se você estiver autenticado, você pode desabilitar este aviso na seção "Edição" de suas preferências.',
+'editpage-notsupportedcontentformat-title' => 'Formato do conteúdo não suportado',
+'editpage-notsupportedcontentformat-text' => 'O formato de conteúdo $1 não é suportando pelo modelo de conteúdo $2.',
 
 # Content models
 'content-model-wikitext' => 'wikitexto',
@@ -1552,6 +1554,7 @@ Caso decida fornecê-lo, este será utilizado para dar-lhe crédito pelo seu tra
 'prefs-tokenwatchlist' => 'Senha',
 'prefs-diffs' => 'Diferenças',
 'prefs-help-prefershttps' => 'Esta preferência terá efeito no seu próximo início de sessão.',
+'prefs-tabs-navigation-hint' => 'Dica: Você pode usar as teclas de seta esquerda e direita para navegar entre as abas da lista de abas.',
 
 # User preference: email validation using jQuery
 'email-address-validity-valid' => 'Parece válido',
@@ -2206,7 +2209,7 @@ Entradas <del>riscadas</del> foram resolvidas.',
 'withoutinterwiki-legend' => 'Prefixo',
 'withoutinterwiki-submit' => 'Exibir',
 
-'fewestrevisions' => 'Páginas de conteúdo com menos edições',
+'fewestrevisions' => 'Páginas com menos edições',
 
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|byte|bytes}}',
@@ -2214,7 +2217,7 @@ Entradas <del>riscadas</del> foram resolvidas.',
 'ninterwikis' => '$1 {{PLURAL:$1|interwiki|Interwikis}}',
 'nlinks' => '$1 {{PLURAL:$1|link|links}}',
 'nmembers' => '$1 {{PLURAL:$1|membro|membros}}',
-'nmemberschanged' => '$2{{PLURAL:$2|membro|membros}}',
+'nmemberschanged' => '$1 → $2 {{PLURAL:$2|membro|membros}}',
 'nrevisions' => '$1 {{PLURAL:$1|revisão|revisões}}',
 'nviews' => '$1 {{PLURAL:$1|visita|visitas}}',
 'nimagelinks' => 'Utilizada em $1 {{PLURAL:$1|página|páginas}}',
@@ -2253,6 +2256,7 @@ Entradas <del>riscadas</del> foram resolvidas.',
 'protectedpages' => 'Páginas protegidas',
 'protectedpages-indef' => 'Proteções infinitas apenas',
 'protectedpages-cascade' => 'Apenas proteções progressivas',
+'protectedpages-noredirect' => 'Ocultar redirecionamentos',
 'protectedpagesempty' => 'Neste momento, nenhuma das páginas está protegida com estes parâmetros.',
 'protectedtitles' => 'Títulos protegidos',
 'protectedtitlesempty' => 'Neste momento, nenhum dos títulos está protegido com estes parâmetros.',
@@ -2530,6 +2534,7 @@ A eliminação de tais páginas foi restrita, a fim de se evitarem problemas aci
 'delete-warning-toobig' => 'Esta página possui um longo histórico de edições, com mais de $1 {{PLURAL:$1|edição|edições}}.
 Eliminá-la poderá causar problemas na base de dados de {{SITENAME}};
 prossiga com cuidado.',
+'deleting-backlinks-warning' => "'''Cuidado:''' Outras páginas redirecionam para a página que você está prestes a deletar.",
 
 # Rollback
 'rollback' => 'Reverter edições',
@@ -2762,6 +2767,7 @@ Isto só deve ser feito para prevenir vandalismo, e de acordo com a [[{{MediaWik
 Consulte a [[Special:BlockList|lista de bloqueios]].',
 'ipb-blockingself' => 'Você está prestes a bloquear-se a si próprio. Você tem a certeza de que pretende fazê-lo?',
 'ipb-confirmhideuser' => 'Você está prestes a bloquear um utilizador com "Ocultar nome de utilizador/IP" ativado. Isto irá suprimir o nome do usuário de todas as listas e entradas dos registos. Tem a certeza de que pretende fazê-lo?',
+'ipb-confirmaction' => 'Se você tem certeza que realmente quer fazer isto, por favor verifique o campo "{{int:ipb-confirm}}" no final.',
 'ipb-edit-dropdown' => 'Editar motivos de bloqueio',
 'ipb-unblock-addr' => 'Desbloquear $1',
 'ipb-unblock' => 'Desbloquear um usuário ou endereço de IP',
@@ -3857,7 +3863,7 @@ Por favor, confirme que realmente deseja recriar esta página.",
 
 # Language selector for translatable SVGs
 'img-lang-default' => '(Idioma padrão)',
-'img-lang-info' => 'Renderizar essa imagem em $1 $2',
+'img-lang-info' => 'Renderizar essa imagem em $1. $2',
 'img-lang-go' => 'Ir',
 
 # Table pager
@@ -3939,7 +3945,17 @@ Você também pode [[Special:EditWatchlist|editar a lista da maneira convenciona
 'version-hook-name' => 'Nome do hook',
 'version-hook-subscribedby' => 'Subscrito por',
 'version-version' => '(Versão $1)',
-'version-license' => 'Licença',
+'version-license' => 'Licença do MediaWiki',
+'version-ext-license' => 'Licença',
+'version-ext-colheader-name' => 'Extensão',
+'version-ext-colheader-version' => 'Versão',
+'version-ext-colheader-license' => 'Licença',
+'version-ext-colheader-description' => 'Descrição',
+'version-ext-colheader-credits' => 'Autores',
+'version-license-title' => 'Licença para $1',
+'version-license-not-found' => 'Nenhuma informação detalhada dessa licença foi encontrada para esta extensão.',
+'version-credits-title' => 'Créditos para $1',
+'version-credits-not-found' => 'Nenhuma informação detalhada de crédito foi encontrada para esta extensão.',
 'version-poweredby-credits' => "Este é um wiki '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'outros',
 'version-poweredby-translators' => 'tradutores da translatewiki.net',
@@ -3959,11 +3975,12 @@ Em conjunto com este programa deve ter recebido [{{SERVER}}{{SCRIPTPATH}}/COPYIN
 # Special:Redirect
 'redirect' => 'Redirecionar por arquivo, usuário ou ID de revisão',
 'redirect-legend' => 'Redirecionar para um arquivo ou página',
-'redirect-summary' => 'Esta página especial redireciona a um arquivo (dado o nome do arquivo), a uma página (dado um ID de revisão) ou a uma página de usuário (dado o ID do usuário). Uso: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/revision/328429]], ou [[{{#Special:Redirect}}/user/101]].',
+'redirect-summary' => 'Esta página especial redireciona a um arquivo (dado o nome do arquivo), a uma página (dado um ID de revisão ou ID da página) ou a uma página de usuário (dado o ID do usuário). Uso: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], or [[{{#Special:Redirect}}/user/101]].',
 'redirect-submit' => 'Ir',
 'redirect-lookup' => 'Buscar',
 'redirect-value' => 'Valor:',
 'redirect-user' => 'ID do usuário',
+'redirect-page' => 'ID da página',
 'redirect-revision' => 'Revisão da página',
 'redirect-file' => 'Nome do arquivo',
 'redirect-not-exists' => 'Valor não encontrado',
@@ -4157,6 +4174,7 @@ Caso contrário, você poderá usar o formulário simplificado a seguir. Seu com
 'api-error-overwrite' => 'Não é permitido sobrescrever um arquivo já existente.',
 'api-error-stashfailed' => 'Erro interno: o servidor não conseguiu armazenar o arquivo temporário.',
 'api-error-publishfailed' => 'Erro interno: O servidor falhou ao publicar o arquivo temporário.',
+'api-error-stasherror' => 'Houve um erro durante o upload do arquivo para a pilha.',
 'api-error-timeout' => 'O servidor não respondeu dentro do tempo esperado.',
 'api-error-unclassified' => 'Ocorreu um erro desconhecido',
 'api-error-unknown-code' => 'Erro desconhecido: "$1"',
@@ -4206,10 +4224,14 @@ Na verdade, expande tudo que está entre chaves duplas.',
 'expand_templates_input' => 'Texto de entrada:',
 'expand_templates_output' => 'Resultado',
 'expand_templates_xml_output' => 'Resultado XML',
+'expand_templates_html_output' => 'Saída HTML puro',
 'expand_templates_ok' => 'Expandir',
 'expand_templates_remove_comments' => 'Remover comentários',
 'expand_templates_remove_nowiki' => 'Suprima marcações <nowiki> no resultado',
 'expand_templates_generate_xml' => 'Mostrar árvore de análise (parse) do XML',
+'expand_templates_generate_rawhtml' => 'Mostrar HTML puro',
 'expand_templates_preview' => 'Pré-visualização',
 
+# Unknown messages
+'uploadinvalidxml' => 'O XML no arquivo enviado não pôde ser analisado.',
 );
index 15a3ff3..64214d2 100644 (file)
@@ -2914,6 +2914,7 @@ Parameters:
 * \$1 - a link to the redirect to the page (so, \$1 is the page that the search result is redirected '''from''')",
 'search-section' => 'This text will be shown on the search result listing after the page title of a result if the search algorithm thinks that section is more relevant than the rest of the page. $1 is a section title.
 {{Identical|Section}}',
+'search-file-match' => 'This text will be shown on the search result listing after the page title of a result if the search engine got search results from the contents of files, rather than the pages.',
 'search-suggest' => 'Used for "Did you mean" suggestions:
 * $1 - suggested link',
 'search-interwiki-caption' => 'Used in [[Special:Search]], when showing search results from other wikis.',
@@ -10624,4 +10625,6 @@ test
 'expand_templates_generate_rawhtml' => 'Used as checkbox label.',
 'expand_templates_preview' => '{{Identical|Preview}}',
 
+# Unknown messages
+'uploadinvalidxml' => 'Error message displayed when the uploaded file contains XML that cannot be properly parsed and checked.',
 );
index 63fce52..a8347e0 100644 (file)
@@ -4184,4 +4184,6 @@ MediaWiki este distribuit în speranța că va fi folositor, dar FĂRĂ VREO GAR
 'expand_templates_generate_rawhtml' => 'Arată HTML brut',
 'expand_templates_preview' => 'Previzualizare',
 
+# Unknown messages
+'uploadinvalidxml' => 'Nu s-a putut analiza conținutul XML din fișierul încărcat.',
 );
index 9c4f1c3..c24ca8c 100644 (file)
@@ -804,7 +804,7 @@ $1',
 'formerror' => 'Ошибка: невозможно передать данные формы',
 'badarticleerror' => 'Это действие не может быть выполнено на данной странице.',
 'cannotdelete' => 'Невозможно удалить или переименовать страницу или файл «$1».
\92озможно, Ñ\81Ñ\82Ñ\80аниÑ\86а Ñ\83же Ð±Ñ\8bла Ñ\83далена.',
\92озможно, Ñ\83же Ð±Ñ\8bло Ð¿Ñ\80оизведено Ñ\83даление.',
 'cannotdelete-title' => 'Нельзя удалить страницу «$1»',
 'delete-hook-aborted' => 'Правка отменена процедурой-перехватчиком.
 Дополнительных пояснений не приведено.',
@@ -914,7 +914,7 @@ $2',
 'createacct-imgcaptcha-ph' => 'Введите текст, который вы видите выше',
 'createacct-submit' => 'Создать учётную запись',
 'createacct-another-submit' => 'Создать ещё одну учётную запись',
-'createacct-benefit-heading' => '{{SITENAME}} создают такие же люди, как вы.',
+'createacct-benefit-heading' => '{{SITENAME}} — совместный труд таких же людей, как вы.',
 'createacct-benefit-body1' => '{{PLURAL:$1|правка|правок|правки}}',
 'createacct-benefit-body2' => '{{PLURAL:$1|статья|статей|статьи}}',
 'createacct-benefit-body3' => '{{PLURAL:$1|участник|участников|участника}} за последнее время',
@@ -1288,6 +1288,8 @@ $2
 'content-not-allowed-here' => 'Содержимое "$1" недопустимо на странице [[$2]]',
 'editwarning-warning' => 'Переход на другую страницу может привести к потере сделанных вами изменений.
 Если вы зарегистрированы в системе, то вы можете отключить это предупреждение в разделе «Редактирование» ваших настроек.',
+'editpage-notsupportedcontentformat-title' => 'Формат содержимого не поддерживается',
+'editpage-notsupportedcontentformat-text' => 'Формат содержимого $1 не поддерживается моделью содержимого $2.',
 
 # Content models
 'content-model-wikitext' => 'вики-текст',
@@ -1984,6 +1986,8 @@ $1",
 Если вы всё-таки хотите загрузить этот файл, пожалуйста, вернитесь назад и измените имя файла. [[File:$1|thumb|center|$1]]',
 'file-exists-duplicate' => 'Этот файл является дубликатом {{PLURAL:$1|1=следующего файла|следующих файлов}}:',
 'file-deleted-duplicate' => 'Подобный файл ([[:$1]]) уже удалялся. Пожалуйста, ознакомьтесь с историей удаления файла, прежде чем загружать его снова.',
+'file-deleted-duplicate-notitle' => 'Файл, идентичный этому файлу, был ранее удалён, а имя файла было запрещено.
+Вам следует попросить кого-нибудь с правами просмотра данных по запрещённым файлам, чтобы он проанализировал ситуацию перед тем, как загружать файл снова.',
 'uploadwarning' => 'Предупреждение',
 'uploadwarning-text' => 'Пожалуйста, измените представленное ниже описание файла и попробуйте ещё раз.',
 'savefile' => 'Записать файл',
@@ -4442,4 +4446,6 @@ MediaWiki распространяется в надежде, что она бу
 'expand_templates_generate_rawhtml' => 'Показать HTML',
 'expand_templates_preview' => 'Предпросмотр',
 
+# Unknown messages
+'uploadinvalidxml' => 'XML в загруженном файле не может быть проанализирован.',
 );
index c1932d3..aacad49 100644 (file)
@@ -637,12 +637,17 @@ $2',
 'createacct-emailrequired' => 'වි-තැපෑල ලිපිනය',
 'createacct-emailoptional' => 'වි-තැපෑල ලිපිනය (විකල්ප)',
 'createacct-email-ph' => 'ඔබගේ වි-තැපෑල ලිපිනය ඇතුළු කරන්න',
-'createaccountmail' => 'තාවකාලික අහුඹු මුර පදයක් භාවිතා කර එය පහත දක්වා ඇති වි-තැපැල් ලිපිනයට යවන්න',
+'createacct-another-email-ph' => 'ඊ මේල් ලිපිනය ඇතුළත් කරන්න.',
+'createaccountmail' => 'තාවකාලික අහුඹු මුර පදයක් භාවිතා කර එය පහත දක්වා ඇති විද්යුත් තැපැල් ලිපිනයට යවන්න',
 'createacct-realname' => 'නියම නම (වෛකල්පීය)',
 'createaccountreason' => 'හේතුව:',
 'createacct-reason' => 'හේතුව',
 'createacct-reason-ph' => 'ඔබ තවත් ගිණුමක් තනන්නේ කුමක් නිසාද',
 'createacct-captcha' => 'ආරක්ෂක පරික්ෂාව',
+'createacct-imgcaptcha-ph' => 'ඉහතින් දැක්වෙන වචනය ඇතුළත් කරන්න',
+'createacct-submit' => 'ඔබේ ගිණුම තනන්න',
+'createacct-another-submit' => 'තවත් ගිණුමක් ආරම්භ කරන්න',
+'createacct-benefit-heading' => '{{වෙබ් අඩවි නම}} ඔබ වැනි අයෙක් විසින් නිමවා ඇත',
 'createacct-benefit-body1' => '{{PLURAL:$1|සංස්කරණය|සංස්කරණ}}',
 'createacct-benefit-body2' => '{{PLURAL:$1|පිටුව|පිටු}}',
 'createacct-benefit-body3' => 'මෑත{{PLURAL:$1|දායකයා|දායකයෝ}}',
@@ -688,15 +693,15 @@ $2',
 'passwordsent' => ' "$1" වෙනුවෙන් ලේඛනගත කර ඇති විද්‍යුත් තැපැල් ලිපිනයට නව මුර පදයක් යවා ඇත.
 ඔබට එය ලැබුනු පසු නැවත ප්‍රවිෂ්ට වන්න.',
 'blocked-mailpassword' => 'ඔබගේ අන්තර්ජාල ලිපිනය භාවිතා කරමින් සංස්කරණයෙහි යෙදීම වාරණය කොට ඇති අතර, අපයෙදුම වළකනු වස්,  මුර-පදය පුනරුත්ථාන  කෘත්‍යය භාවිත කිරීමට අවසරයද අහිමි කොට ඇත.',
-'eauthentsent' => 'නම් කර ඇති විද්‍යුත්-ලිපි ලිපිනය වෙත, තහවුරු කිරීම් විද්‍යුත්-ලිපියක් යවා ඇත.
-ගිණුම වෙත වෙනත් විද්‍යුත්-ලිපියක්  යැවීමට පෙර, ගිණුම සත්‍ය වශයෙන්ම ඔබගේම බව තහවුරු කරනු වස්, විද්‍යුත්-ලිපියෙහි අඩංගු උපදෙස්  පිළිපදින්න.',
+'eauthentsent' => 'නම් කර ඇති විද්‍යුත් තැපැල් ලිපිනය වෙත තහවුරු කිරීම් විද්‍යුත්-ලිපියක් යවා ඇත.
+ගිණුම වෙත වෙනත් විද්‍යුත් තැපෑලක් යැවීමට පෙර, ගිණුම සත්‍ය වශයෙන්ම ඔබගේම බව තහවුරු කරනු පිණිස විද්‍යුත්-ලිපියෙහි අඩංගු උපදෙස්  පිළිපදින්න.',
 'throttled-mailpassword' => 'අවසන් {{PLURAL:$1|පැය|පැය $1}} තුල, මුරපද යළි සැකසුම් ඊ-ලිපියක් යවාඇත.
 අපයෙදුම වළකනු වස්, {{PLURAL:$1|එක් පැයක|පැය $1 ක}}ට වරක් එක් මුරපද යළි සැකසුම් ඊ-ලිපියක් පමණක් යවනු ලැබේ.',
 'mailerror' => 'තැපෑල යැවීමේදී වූ දෝෂය: $1',
 'acct_creation_throttle_hit' => 'ඔබගේ අන්තර්ජාල ලිපිනය භාවිතා කල මෙම විකියට අමුත්තන් විසින් {{PLURAL:$1|එක් ගිණුමක්|ගිණුම් $1 ක්}} පසුගිය දිනය තුලදී තනා ඇති අතර, එය මෙම කාල පරිච්ඡේදය තුලදී ඉඩ දෙනු ලබන උපරිමය වෙයි.
 මේ හේතුවෙන්, මෙම අන්තර්ජාල ලිපිනය භාවිතා කරන අමුත්තන් විසින් මෙම අවස්ථාවෙහිදී තවත් ගිණුම් තැනීම සිදු කල නොහැකිව ඇත.',
-'emailauthenticated' => '$2 දින $3 වේලාවෙහිදී ඔබගේ විද්‍යුත්-තැපැල් ලිපිනය සත්‍යවත් කරන ලදි.',
-'emailnotauthenticated' => 'ඔබගේ විද්‍යුත්-තැපැල් ලිපිනය තවමත් සත්‍යවත් කර නොමැත.
+'emailauthenticated' => '$2 දින $3 වේලාවෙහිදී ඔබගේ විද්‍යුත්-තැපැල් ලිපිනයෙහි සත්‍යතාව තහවුරු කරන ලදි.',
+'emailnotauthenticated' => 'ඔබගේ විද්‍යුත්-තැපැල් ලිපිනයෙහි නිවැරදිබව තවමත් තගහවුරු කර නොමැත.
 පහත හැකියාවන් කිසිවක් ඉටුකරනු වස් විද්‍යුත්-තැපෑල  යවනු නොලැබේ.',
 'noemailprefs' => 'පහත හැකියාවන් ඉටුකිරීමට ඉඩ සලසනු වස් විද්‍යුත්-තැපැල් ලිපිනයක් හුවා දක්වන්න.',
 'emailconfirmlink' => 'ඔබගේ විද්‍යුත් තැපැල් ලිපිනය තහවුරු කරන්න',
@@ -713,7 +718,7 @@ $2',
 මෙම ගිණුම තැනී ඇත්තේ වැරදීමකින් නම්, මෙම පණිවුඩය නොසලකා හැරිය හැක.',
 'usernamehasherror' => 'පරිශීලක නාමයේ පූරක අනුලකුණු අඩංගු විය නොහැකිය',
 'login-throttled' => 'ඔබ විසින් මෑතදී  පමණට වඩා වාර ගණනක් පිවිසීමෙහි උත්සාහයන් දරා ඇත.
-යළි උත්සාහ කිරීමට පෙර මඳ වේලාවක් රැඳී සිටින්න.',
+යළි උත්සාහ කිරීමට පෙර $1 වේලාවක් රැඳී සිටින්න.',
 'login-abort-generic' => 'ඔබගේ පිවිසීම අසාර්ථකයි - අතහැර දමනලදී',
 'loginlanguagelabel' => 'භාෂාව: $1',
 'suspicious-userlogout' => 'නිෂ්ක්‍රමණය සඳහා ඔබගේ අයැදුම නිෂ්ප්‍රභා කෙරුනේ එය යොමු කොට ඇත්තේ භින්න(කැඩුනු) බ්‍රවුසරයකින් හෝ නිවේෂණය කෙරෙමින් පවතින ප්‍රොක්සියක් වෙතින් යැයි බැලූ බැල්මට පෙනෙන බැවිනි.',
@@ -732,7 +737,7 @@ $2',
 'newpassword' => 'නව මුර-පදය:',
 'retypenew' => 'නව මුර-පදය නැවත ඇතුළු කරන්න:',
 'resetpass_submit' => 'මුර-පදය පූරණය කොට ඉන් පසු ප්‍රවිෂ්ට වන්න',
-'changepassword-success' => 'à¶\94බà¶\9cà·\9a à¶¸à·\94ර-පදය à·\83à·\8fරà·\8aථà¶\9a à¶½à·\99à·\83 à·\80à·\99නà·\83à·\8a à¶\9aරන à¶½à¶¯à·\92! à¶¯à·\90නà·\8a à¶\94බà·\80 à¶´à·\8aâ\80\8dරà·\80à·\92à·\82à·\8aට à¶\9aරà¶\9cනà·\92මà·\92නà·\8a...',
+'changepassword-success' => 'à¶\94බà¶\9cà·\9a à¶¸à·\94ර-පදය à·\83à·\8fරà·\8aථà¶\9a à¶½à·\99à·\83 à·\80à·\99නà·\83à·\8a à¶\9aරන à¶½à¶¯à·\93!',
 'resetpass_forbidden' => 'මුර-පදයන් වෙනස් කිරීම  සිදු කල නොහැක',
 'resetpass-no-info' => 'මෙම පිටුව සෘජු ලෙස පරිශීලනය කෙරුමට ඔබ පළමු ප්‍රවිෂ්ට විය යුතුය.',
 'resetpass-submit-loggedin' => 'මුර-පදය වෙනස්කරන්න',
@@ -743,8 +748,10 @@ $2',
 
 # Special:PasswordReset
 'passwordreset' => 'මුරපදය වෙනස් කරන්න',
+'passwordreset-text-one' => 'තාවකාලික මුර-පදයක් විද්‍යුත් තැපෑළ මගින් ලබා ගැනීම සඳහා මෙම පෝරමය සම්පූර්ණ කරන්න.',
 'passwordreset-legend' => 'මුරපදය යළි පිහිටුවන්න',
 'passwordreset-disabled' => 'මෙම විකියෙහි මුර පද ප්‍රත්‍යාරම්භ කිරීම් අක්‍රීය කොට ඇත.',
+'passwordreset-emaildisabled' => 'විද්‍යුත්  තැපැල් පහසුකම මෙම විකි ය සඳහා අවලංගු කොට ඇත.',
 'passwordreset-username' => 'පරිශීලක නාමය:',
 'passwordreset-domain' => 'වසම:',
 'passwordreset-capture' => 'ප්‍රතිපලදායක විද්‍යුත් තැපෑල නරඹනවාද?',
@@ -760,8 +767,8 @@ $2
 ඔබ දැන් ප්‍රවිෂ්ට වී නව මුරපදයක් තෝරාගත යුතුයි. වෙන යම් අයෙක් මෙම ඉල්ලීම කර ඇත්නම් හෝ, ඔබගේ මුල් මුරපදය ඔබගේ මතකයට පැමිණ ඇති නම් හා, එය වෙනස් කිරීමට ඔබ හට තවදුරටත් අවශ්‍ය නොවේ නම්, ඔබ විසින් මෙම පණිවුඩය නොසලකා හැර පැරණි මුරපදය තවදුරටත් පාවිච්චි කළ හැක.',
 'passwordreset-emailelement' => 'පරිශීලක නාමය: $1
 තාවකාලික මුරපදය: $2',
-'passwordreset-emailsent' => 'à·\80à·\92දà·\8aâ\80\8dයà·\94තà·\8a තà·\90පà·\90ලà·\8a මතà¶\9aà·\8aà¶\9aà·\92රà·\93මක් යවන ලදී.',
-'passwordreset-emailsent-capture' => 'මතà¶\9aà·\8a à¶\9aà·\92රà·\93මà·\9a à·\80à·\92දà·\8aâ\80\8dයà·\94තà·\8a à¶­à·\90පà·\90ලà·\8a à¶´à¶«à·\92à·\80à·\94ඩය යවන ලදී, එය පහත දැක්වේ.',
+'passwordreset-emailsent' => 'මà·\94ර-පදය à¶±à·\90à·\80ත à·\83à¶\9aà·\83à·\8a à¶\9aà·\92රà·\93ම à¶´à·\92à·\85à·\92බඳà·\80 à·\80à·\92දà·\8aâ\80\8dයà·\94තà·\8a තà·\90පà·\91ලක් යවන ලදී.',
+'passwordreset-emailsent-capture' => 'මà·\94ර-පදය à·\80à·\99නà·\83à·\8a à¶\9aà·\92රà·\93ම à¶´à·\92à·\85à·\92බඳà·\80 à·\80à·\92දà·\8aâ\80\8dයà·\94තà·\8a à¶­à·\90පà·\91ලà¶\9aà·\8a යවන ලදී, එය පහත දැක්වේ.',
 'passwordreset-emailerror-capture' => 'සිහිකැඳවුම් ඊ-තැපෑල ජනිත කරනු ලැබූ අතර, එය පහත දැක්වේ, නමුත් එය පරිශීලකයාට යැවීම අසාර්ථක වුනි: $1',
 
 # Special:ChangeEmail
index 8ccaf92..fe139a8 100644 (file)
@@ -515,12 +515,12 @@ $messages = array(
 'december-date' => '$1 децембар',
 
 # Categories related messages
-'pagecategories' => '{{PLURAL:$1|1=Категорија|Категорије}}',
+'pagecategories' => '{{PLURAL:$1|Категорија|Категорије}}',
 'category_header' => 'Странице у категорији „$1“',
 'subcategories' => 'Поткатегорије',
 'category-media-header' => 'Датотеке у категорији „$1“',
 'category-empty' => "<div style=\"margin:2em 1em 0 1em; padding:0.5em; border:1px solid #AAA; text-align:center;\">''Ова категорија тренутно не садржи странице или датотеке.''</div>",
-'hidden-categories' => '{{PLURAL:$1|1=Сакривена категорија|Сакривене категорије}}',
+'hidden-categories' => '{{PLURAL:$1|Сакривена категорија|Сакривене категорије}}',
 'hidden-category-category' => 'Сакривене категорије',
 'category-subcat-count' => '{{PLURAL:$2|Ова категорија садржи само следећу поткатегорију.|Ова категорија има {{PLURAL:$1|следећу поткатегорију|следеће $1 поткатегорије|следећих $1 поткатегорија}}, од укупно $2.}}',
 'category-subcat-count-limited' => 'Ова категорија садржи {{PLURAL:$1|следећу поткатегорију|следеће $1 поткатегорије|следећих $1 поткатегорија}}.',
@@ -658,7 +658,7 @@ $1',
 
 'badaccess' => 'Грешке у овлашћењима',
 'badaccess-group0' => 'Није вам дозвољено да извршите захтевану радњу.',
-'badaccess-groups' => 'Радња је доступна само корисницима у {{PLURAL:$2|1=следећој групи|следећим групама}}:  $1.',
+'badaccess-groups' => 'Радња коју сте захтевали је ограничена само корисницима у {{PLURAL:$2|следећој групи|следећим групама}}: $1.',
 
 'versionrequired' => 'Потребно је издање $1 Медијавикија',
 'versionrequiredtext' => 'Потребно је издање $1 Медијавикија да бисте користили ову страницу.
@@ -672,8 +672,8 @@ $1',
 'youhavenewmessages' => 'Имате $1 ($2).',
 'youhavenewmessagesfromusers' => 'Имате $1 од {{PLURAL:$3|другог корисника|$3 корисника|$3 корисника}} ($2).',
 'youhavenewmessagesmanyusers' => 'Имате $1 од много корисника ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1|1=нову поруку|999=нове поруке}}',
-'newmessagesdifflinkplural' => '{{PLURAL:$1|1=последњу измену|999=последње измене}}',
+'newmessageslinkplural' => '{{PLURAL:$1|нову поруку|999=нове поруке}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|последњу измену|999=последње измене}}',
 'youhavenewmessagesmulti' => 'Имате нових порука на $1',
 'editsection' => 'уреди',
 'editold' => 'уреди',
@@ -766,7 +766,7 @@ $1',
 'badtitletext' => 'Наслов странице је неисправан, празан или је међујезички или међувики наслов погрешно повезан.
 Можда садржи знакове који се не могу користити у насловима.',
 'perfcached' => 'Следећи подаци су кеширани и могу бити застарели. Кеш садржи највише {{PLURAL:$1|један резултат|$1 резултата|$1 резултата}}.',
-'perfcachedts' => 'Следећи подаци су кеширании и последњи пут су ажурирани $2 у $3. Кеш садржи највише {{PLURAL:$4|1=један резултат|$4 резултата}}.',
+'perfcachedts' => 'Следећи подаци су кеширани и последњи пут су ажурирани $2 у $3. У кешу {{PLURAL:$4|је доступан највише један резултат|су доступна највише $4 резултата|је доступно највише $4 резултата}}.',
 'querypage-no-updates' => 'Ажурирање ове странице је тренутно онемогућено.
 Подаци који се овде налазе могу бити застарели.',
 'viewsource' => 'Изворни код',
@@ -781,7 +781,7 @@ $1',
 'editinginterface' => "'''Упозорење:''' уређујете страницу која се користи за приказивање текста корисничког окружења.
 Измене на овој страници ће утицати на све кориснике овог викија.
 Да бисте додали или изменили преводе свих викија, посетите [//translatewiki.net/wiki/Main_Page?setlang=sr_ec Транслејтвики], пројекат за локализацију Медијавикија.",
-'cascadeprotected' => 'Ова страница је закључана јер садржи {{PLURAL:$1|1=следећу страницу која је заштићена|следеће странице које су заштићене}} „преносивом“ заштитом:
+'cascadeprotected' => 'Ова страница је закључана јер садржи {{PLURAL:$1|следећу страницу која је заштићена|следеће странице које су заштићене}} „преносивом“ заштитом:
 $2',
 'namespaceprotected' => "Немате дозволу да уређујете странице у именском простору '''$1'''.",
 'customcssprotected' => 'Немате дозволу да мењате ову CSS страницу јер садржи личне поставке другог корисника.',
@@ -798,7 +798,7 @@ $2',
 'invalidtitle-knownnamespace' => 'Неисправан наслов с именским простором „$2“ и текстом „$3“',
 'invalidtitle-unknownnamespace' => 'Неисправан наслов с именским простором бр. $1 и текстом „$2“',
 'exception-nologin' => 'Нисте пријављени',
-'exception-nologin-text' => 'Ова страница или радња захтева да будете пријављени на вики.',
+'exception-nologin-text' => '[[Special:Userlogin|Пријавите се]] да бисте приступили овој страници или радњи.',
 
 # Virus scanner
 'virus-badscanner' => "Неисправна поставка: непознати скенер за вирусе: ''$1''",
@@ -823,7 +823,7 @@ $2',
 'yourpasswordagain' => 'Потврда лозинке:',
 'createacct-yourpasswordagain' => 'Потврдите лозинку',
 'createacct-yourpasswordagain-ph' => 'Унесите лозинку још једном',
-'remembermypassword' => 'Ð\97апамÑ\82и Ð¼Ð¾Ñ\98Ñ\83 Ð»Ð¾Ð·Ð¸Ð½ÐºÑ\83 Ð½Ð° Ð¾Ð²Ð¾Ð¼ Ð¿Ñ\80егледаÑ\87Ñ\83 (наÑ\98дÑ\83же $1 {{PLURAL:$1|1=дан|дана}})',
+'remembermypassword' => 'Ð\97апамÑ\82и Ð¼Ðµ Ð½Ð° Ð¾Ð²Ð¾Ð¼ Ð¿Ñ\80егледаÑ\87Ñ\83 (наÑ\98дÑ\83же $1 {{PLURAL:$1|дан|дана|дана}})',
 'userlogin-remembermypassword' => 'Остави ме пријављеног/у',
 'userlogin-signwithsecure' => 'Користите сигурну конекцију',
 'yourdomainname' => 'Домен:',
@@ -913,14 +913,14 @@ $2',
 'blocked-mailpassword' => 'Вашој ИП адреси је онемогућено уређивање страница, као и могућност захтевања нове лозинке.',
 'eauthentsent' => 'На наведену е-адресу је послат потврдни код.
 Пре него што пошаљемо даљње поруке, пратите упутства с е-поште да бисте потврдили да сте ви отворили налог.',
-'throttled-mailpassword' => 'Подсетник за лозинку је послат {{PLURAL:$1|пре сат времена|у последња $1 сата|у последњих $1 сати}}.
\94а Ð±Ð¸Ñ\81мо Ñ\81пÑ\80еÑ\87или Ð·Ð»Ð¾Ñ\83поÑ\82Ñ\80ебÑ\83, Ð¿Ð¾Ð´Ñ\81еÑ\82ник Ñ\88аÑ\99емо Ñ\81амо Ñ\98едном Ñ\83 Ñ\80окÑ\83 Ð¾Ð´ {{PLURAL:$1|Ñ\98едног Ñ\81аÑ\82а|$1 сата|$1 сати}}.',
+'throttled-mailpassword' => 'Порука за промену лозинке је послата у {{PLURAL:$1|последњих сат времена|последња $1 сата|последњих $1 сати}}.
\94а Ð±Ð¸Ñ\81мо Ñ\81пÑ\80еÑ\87или Ð·Ð»Ð¾Ñ\83поÑ\82Ñ\80ебÑ\83, Ð¿Ð¾Ð´Ñ\81еÑ\82ник Ñ\88аÑ\99емо Ñ\81амо Ñ\98едном Ñ\83 Ñ\80окÑ\83 Ð¾Ð´ {{PLURAL:$1|Ñ\81аÑ\82 Ð²Ñ\80емена|$1 сата|$1 сати}}.',
 'mailerror' => 'Грешка при слању поруке: $1',
 'acct_creation_throttle_hit' => 'Посетиоци овог викија који користе вашу ИП адресу су већ отворили {{PLURAL:$1|један налог|$1 налога|$1 налога}} претходни дан, што је највећи дозвољени број у том временском периоду.
 Због тога посетиоци с ове ИП адресе тренутно не могу отворити више налога.',
 'emailauthenticated' => 'Ваша е-адреса је потврђена $2 у $3.',
 'emailnotauthenticated' => 'Ваша е-адреса још није потврђена.
-Поруке неће бити послате ни за једну од следећих могућности.',
+Поруке неће бити послате ни у једном од следећих случајева.',
 'noemailprefs' => 'Унесите е-адресу како би ове могућности радиле.',
 'emailconfirmlink' => 'Потврдите своју е-адресу',
 'invalidemailaddress' => 'Е-адреса не може бити прихваћена јер је неисправног облика.
@@ -1868,7 +1868,7 @@ $1",
 'filename-toolong' => 'Називи датотека могу имати највише 240 бајтова.',
 'badfilename' => 'Назив датотеке је промењен у „$1“.',
 'filetype-mime-mismatch' => 'Екстензија „.$1“ не одговара препознатој врсти MIME датотеке ($2).',
-'filetype-badmime' => 'Датотеке MIME врсте „$1“ није дозвољено слати.',
+'filetype-badmime' => 'Датотеке MIME типа „$1“ није дозвољено слати.',
 'filetype-bad-ie-mime' => 'Ова датотека се не може послати зато што би је Интернет експлорер уочио као „$1“, а то је забрањена и опасна врста датотеке.',
 'filetype-unwanted-type' => '„.$1“ је непожељна врста датотеке.
 {{PLURAL:$3|1=Пожељна врста датотеке је|Пожељне врсте датотека су}} $2.',
@@ -3258,7 +3258,7 @@ $1',
 'spamprotectiontitle' => 'Филтер за заштиту од непожељних порука',
 'spamprotectiontext' => 'Страница коју желите да сачувате је блокирана од филтера против непожељних порука.
 Ово је вероватно изазвано везом до спољашњег сајта који се налази на црној листи.',
-'spamprotectionmatch' => 'СледеÑ\9bи Ñ\82екÑ\81Ñ\82 Ñ\98е Ð¸Ð·Ð°Ð·Ð²Ð°Ð¾ Ð½Ð°Ñ\88 Ñ\84илÑ\82еÑ\80 Ð·Ð° Ð½ÐµÐ¿Ð¾Ð¶ÐµÑ\99не поруке: $1',
+'spamprotectionmatch' => 'СледеÑ\9bи Ñ\82екÑ\81Ñ\82 Ñ\98е Ð¸Ð·Ð°Ð·Ð²Ð°Ð¾ Ð½Ð°Ñ\88 Ñ\84илÑ\82еÑ\80 Ð·Ð° Ð½ÐµÐ¶ÐµÑ\99ене поруке: $1',
 'spambot_username' => 'Чишћење непожељних порука у Медијавикији',
 'spam_reverting' => 'Враћам на последњу измену која не садржи везе до $1',
 'spam_blanking' => 'Све измене садрже везе до $1. Чистим',
index 13d6bc6..a96cf6f 100644 (file)
@@ -426,12 +426,12 @@ $messages = array(
 'december-date' => '$1. decembar',
 
 # Categories related messages
-'pagecategories' => '{{PLURAL:$1|1=Kategorija|Kategorije}}',
+'pagecategories' => '{{PLURAL:$1|Kategorija|Kategorije}}',
 'category_header' => 'Stranice u kategoriji „$1“',
 'subcategories' => 'Potkategorije',
 'category-media-header' => 'Datoteke u kategoriji „$1“',
 'category-empty' => "<div style=\"margin:2em 1em 0 1em; padding:0.5em; border:1px solid #AAA; text-align:center;\">''Ova kategorija trenutno ne sadrži stranice ili datoteke.''</div>",
-'hidden-categories' => '{{PLURAL:$1|1=Sakrivena kategorija|Sakrivene kategorije}}',
+'hidden-categories' => '{{PLURAL:$1|Sakrivena kategorija|Sakrivene kategorije}}',
 'hidden-category-category' => 'Sakrivene kategorije',
 'category-subcat-count' => '{{PLURAL:$2|Ova kategorija sadrži samo sledeću potkategoriju.|Ova kategorija ima {{PLURAL:$1|sledeću potkategoriju|sledeće $1 potkategorije|sledećih $1 potkategorija}}, od ukupno $2.}}',
 'category-subcat-count-limited' => 'Ova kategorija sadrži {{PLURAL:$1|sledeću potkategoriju|sledeće $1 potkategorije|sledećih $1 potkategorija}}.',
@@ -567,7 +567,7 @@ $1',
 
 'badaccess' => 'Greške u ovlašćenjima',
 'badaccess-group0' => 'Nije vam dozvoljeno da izvršite zahtevanu radnju.',
-'badaccess-groups' => 'Radnja je dostupna samo korisnicima u {{PLURAL:$2|1=sledećoj grupi|sledećim grupama}}:  $1.',
+'badaccess-groups' => 'Radnja koju ste zahtevali je ograničena samo korisnicima u {{PLURAL:$2|sledećoj grupi|sledećim grupama}}: $1.',
 
 'versionrequired' => 'Potrebno je izdanje $1 Medijavikija',
 'versionrequiredtext' => 'Potrebno je izdanje $1 Medijavikija da biste koristili ovu stranicu.
@@ -581,8 +581,8 @@ Pogledajte stranicu za [[Special:Version|izdanje]].',
 'youhavenewmessages' => 'Imate $1 ($2).',
 'youhavenewmessagesfromusers' => 'Imate $1 od {{PLURAL:$3|drugog korisnika|$3 korisnika|$3 korisnika}} ($2).',
 'youhavenewmessagesmanyusers' => 'Imate $1 od mnogo korisnika ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1|1=novu poruku|999=nove poruke}}',
-'newmessagesdifflinkplural' => '{{PLURAL:$1|1=poslednju izmenu|999=poslednje izmene}}',
+'newmessageslinkplural' => '{{PLURAL:$1|novu poruku|999=nove poruke}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|poslednju izmenu|999=poslednje izmene}}',
 'youhavenewmessagesmulti' => 'Imate novih poruka na $1',
 'editsection' => 'uredi',
 'editold' => 'uredi',
@@ -673,7 +673,7 @@ Nije dato nikakvo obrazloženje.',
 'badtitletext' => 'Naslov stranice je neispravan, prazan ili je međujezički ili međuviki naslov pogrešno povezan.
 Možda sadrži znakove koji se ne mogu koristiti u naslovima.',
 'perfcached' => 'Sledeći podaci su keširani i mogu biti zastareli. Keš sadrži najviše {{PLURAL:$1|jedan rezultat|$1 rezultata|$1 rezultata}}.',
-'perfcachedts' => 'Sledeći podaci su keširani i poslednji put su ažurirani $2 u $3. Keš sadrži najviše {{PLURAL:$4|1=jedan rezultat|$4 rezultata}}.',
+'perfcachedts' => 'Sledeći podaci su keširani i poslednji put su ažurirani $2 u $3. U kešu {{PLURAL:$4|je dostupan najviše jedan rezultat|su dostupna najviše $4 rezultata|je dostupno najviše $4 rezultata}}.',
 'querypage-no-updates' => 'Ažuriranje ove stranice je trenutno onemogućeno.
 Podaci koji se ovde nalaze mogu biti zastareli.',
 'viewsource' => 'Izvorni kod',
@@ -688,7 +688,7 @@ Da biste dodali ili izmenili prevode svih vikija, posetite [//translatewiki.net/
 'editinginterface' => "'''Upozorenje:''' uređujete stranicu koja se koristi za prikazivanje teksta korisničkog okruženja.
 Izmene na ovoj stranici će uticati na sve korisnike ovog vikija.
 Da biste dodali ili izmenili prevode svih vikija, posetite [//translatewiki.net/wiki/Main_Page?setlang=sr_ec Translejtviki], projekat za lokalizaciju Medijavikija.",
-'cascadeprotected' => 'Ova stranica je zaključana jer sadrži {{PLURAL:$1|1=sledeću stranicu koja je zaštićena|sledeće stranice koje su zaštićene}} „prenosivom“ zaštitom:
+'cascadeprotected' => 'Ova stranica je zaključana jer sadrži {{PLURAL:$1|sledeću stranicu koja je zaštićena|sledeće stranice koje su zaštićene}} „prenosivom“ zaštitom:
 $2',
 'namespaceprotected' => "Nemate dozvolu da uređujete stranice u imenskom prostoru '''$1'''.",
 'customcssprotected' => 'Nemate dozvolu da menjate ovu CSS stranicu jer sadrži lične postavke drugog korisnika.',
@@ -701,7 +701,7 @@ Administrator koji ju je zaključao ponudio je sledeće objašnjenje: „$3“.'
 'invalidtitle-knownnamespace' => 'Neispravan naslov s imenskim prostorom „$2“ i tekstom „$3“',
 'invalidtitle-unknownnamespace' => 'Neispravan naslov s imenskim prostorom br. $1 i tekstom „$2“',
 'exception-nologin' => 'Niste prijavljeni',
-'exception-nologin-text' => 'Ova stranica ili radnja zahteva da budete prijavljeni na viki.',
+'exception-nologin-text' => '[[Special:Userlogin|Prijavite se]] da biste pristupili ovoj stranici ili radnji.',
 
 # Virus scanner
 'virus-badscanner' => "Neispravna postavka: nepoznati skener za viruse: ''$1''",
@@ -805,14 +805,14 @@ Prijavite se pošto je primite.',
 'blocked-mailpassword' => 'Vašoj IP adresi je onemogućeno uređivanje stranica, kao i mogućnost zahtevanja nove lozinke.',
 'eauthentsent' => 'Na navedenu e-adresu je poslat potvrdni kod.
 Pre nego što pošaljemo daljnje poruke, pratite uputstva s e-pošte da biste potvrdili da ste vi otvorili nalog.',
-'throttled-mailpassword' => 'Podsetnik za lozinku je poslat {{PLURAL:$1|pre sat vremena|u poslednja $1 sata|u poslednjih $1 sati}}.
-Da bismo sprečili zloupotrebu, posednik šaljemo samo jednom u roku od {{PLURAL:$1|jednog sata|$1 sata|$1 sati}}.',
+'throttled-mailpassword' => 'Poruka za promenu lozinke je poslata u {{PLURAL:$1|poslednjih sat vremena|poslednja $1 sata|poslednjih $1 sati}}.
+Da bismo sprečili zloupotrebu, podsetnik šaljemo samo jednom u roku od {{PLURAL:$1|sat vremena|$1 sata|$1 sati}}.',
 'mailerror' => 'Greška pri slanju poruke: $1',
 'acct_creation_throttle_hit' => 'Posetioci ovog vikija koji koriste vašu IP adresu su već otvorili {{PLURAL:$1|jedan nalog|$1 naloga|$1 naloga}} prethodni dan, što je najveći dozvoljeni broj u tom vremenskom periodu.
 Zbog toga posetioci s ove IP adrese trenutno ne mogu otvoriti više naloga.',
 'emailauthenticated' => 'Vaša e-adresa je potvrđena $2 u $3.',
 'emailnotauthenticated' => 'Vaša e-adresa još nije potvrđena.
-Poruke neće biti poslate ni za jednu od sledećih mogućnosti.',
+Poruke neće biti poslate ni u jednom od sledećih slučajeva.',
 'noemailprefs' => 'Unesite e-adresu kako bi ove mogućnosti radile.',
 'emailconfirmlink' => 'Potvrdite svoju e-adresu',
 'invalidemailaddress' => 'E-adresa ne može biti prihvaćena jer je neispravnog oblika.
@@ -1744,7 +1744,7 @@ Promenite naziv datoteke i ponovo je pošaljite.',
 'filename-toolong' => 'Nazivi datoteka mogu imati najviše 240 bajtova.',
 'badfilename' => 'Naziv datoteke je promenjen u „$1“.',
 'filetype-mime-mismatch' => 'Ekstenzija „.$1“ ne odgovara prepoznatoj vrsti MIME datoteke ($2).',
-'filetype-badmime' => 'Datoteke MIME vrste „$1“ nije dozvoljeno slati.',
+'filetype-badmime' => 'Datoteke MIME tipa „$1“ nije dozvoljeno slati.',
 'filetype-bad-ie-mime' => 'Ova datoteka se ne može poslati zato što bi je Internet eksplorer uočio kao „$1“, a to je zabranjena i opasna vrsta datoteke.',
 'filetype-unwanted-type' => '„.$1“ je nepoželjna vrsta datoteke.
 {{PLURAL:$3|1=Poželjna vrsta datoteke je|Poželjne vrste datoteka su}} $2.',
@@ -3116,7 +3116,7 @@ Pokušajte ponovo.',
 'spamprotectiontitle' => 'Filter za zaštitu od nepoželjnih poruka',
 'spamprotectiontext' => 'Stranica koju želite da sačuvate je blokirana od filtera protiv nepoželjnih poruka.
 Ovo je verovatno izazvano vezom do spoljašnjeg sajta koji se nalazi na crnoj listi.',
-'spamprotectionmatch' => 'Sledeći tekst je izazvao naš filter za nepoželjne poruke: $1',
+'spamprotectionmatch' => 'Sledeći tekst je izazvao naš filter za neželjene poruke: $1',
 'spambot_username' => 'Čišćenje nepoželjnih poruka u Medijavikiji',
 'spam_reverting' => 'Vraćam na poslednju izmenu koja ne sadrži veze do $1',
 'spam_blanking' => 'Sve izmene sadrže veze do $1. Čistim',
index 1d5bc72..844d677 100644 (file)
@@ -438,6 +438,7 @@ $1',
 'site-atom-feed' => '$1 ఆటమ్ ఫీడు',
 'page-rss-feed' => '"$1" ఆరెసెస్సు(RSS) ఫీడు',
 'page-atom-feed' => '"$1" ఆటమ్ ఫీడు',
+'feed-atom' => 'యాటమ్',
 'red-link-title' => '$1 (పుట లేదు)',
 'sort-descending' => 'అవరోహణ క్రమంలో అమర్చు',
 'sort-ascending' => 'ఆరోహణ క్రమంలో అమర్చు',
@@ -1498,6 +1499,8 @@ $1",
 'recentchanges-label-minor' => 'ఇది ఒక చిన్న మార్పు',
 'recentchanges-label-bot' => 'ఈ మార్పును ఒక బాటు చేసింది',
 'recentchanges-label-unpatrolled' => 'ఈ దిద్దుబాటు మీద నిఘా లేదు',
+'recentchanges-label-plusminus' => 'ఈ పేజి పరిమాణంలో  జరిగిన మార్పుల  బైట్ల సంఖ్య',
+'recentchanges-legend-heading' => "'''సూచిక :'''",
 'recentchanges-legend-newpage' => '([[Special:NewPages|కొత్త పేజీల జాబితా]]ను కూడా చూడండి)',
 'rcnotefrom' => '<b>$2</b> నుండి జరిగిన మార్పులు (<b>$1</b> వరకు చూపబడ్డాయి).',
 'rclistfrom' => '$1 నుండి జరిగిన మార్పులను చూపించు',
@@ -2030,7 +2033,8 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization చూడండి.',
 'listgrouprights' => 'వాడుకరి గుంపుల హక్కులు',
 'listgrouprights-summary' => 'కింది జాబితాలో ఈ వికీలో నిర్వచించిన వాడుకరి గుంపులు, వాటికి సంబంధించిన హక్కులు ఉన్నాయి.
 విడివిడిగా హక్కులకు సంబంధించిన మరింత సమాచారం [[{{MediaWiki:Listgrouprights-helppage}}]] వద్ద లభించవచ్చు.',
-'listgrouprights-key' => '* <span class="listgrouprights-granted">ప్రసాదించిన హక్కు</span>
+'listgrouprights-key' => 'సూచిక:
+* <span class="listgrouprights-granted">ప్రసాదించిన హక్కు</span>
 * <span class="listgrouprights-revoked">వెనక్కి తీసుకున్న హక్కు</span>',
 'listgrouprights-group' => 'గుంపు',
 'listgrouprights-rights' => 'హక్కులు',
@@ -3503,6 +3507,7 @@ $5
 
 # Special:SpecialPages
 'specialpages' => 'ప్రత్యేక పేజీలు',
+'specialpages-note-top' => 'సూచిక',
 'specialpages-note' => '* మామూలు ప్రత్యేక పుటలు.
 * <strong class="mw-specialpagerestricted">నియంత్రిత ప్రత్యేక పుటలు.</strong>
 * <span class="mw-specialpagecached">Cached ప్రత్యేక పుటలు (పాతబడి ఉండొచ్చు).</span>',
index 6b6cc4c..e45ef40 100644 (file)
@@ -1180,6 +1180,8 @@ Sayfa zaten mevcut.',
 'content-not-allowed-here' => '"$1" içeriğine, [[$2]] sayfasında izin verilmemekte.',
 'editwarning-warning' => 'Bu sayfadan ayrılmak yaptığınız herhangi bir değişikliği kaybetmenize sebep olabilir.
 Eğer giriş yaptıysanız, bu uyarıyı, tercihlerinizin "Sayfa yazma alanı" bölümünde devre dışı bırakabilirsiniz.',
+'editpage-notsupportedcontentformat-title' => 'İçerik biçimi desteklenmiyor',
+'editpage-notsupportedcontentformat-text' => '$1 içerik biçimi $2 içerik modeli tarafından desteklenmiyor.',
 
 # Content models
 'content-model-wikitext' => 'vikimetin',
@@ -1873,6 +1875,8 @@ Dosyanızı yinede yüklemek istiyorsanız, lütfen geri dönüp yeni bir isim k
 Dosyanızı yinede yüklemek istiyorsanız, lütfen geri gidip yeni bir isim kullanın. [[File:$1|thumb|center|$1]]',
 'file-exists-duplicate' => 'Bu dosya aşağıdaki {{PLURAL:$1|dosyanın|dosyaların}} kopyasıdır:',
 'file-deleted-duplicate' => 'Bu dosyanın özdeşi olan başka bir dosya ([[:$1]]) daha önceden silindi. Bu dosyayı yeniden yüklemeden önce diğer dosyanın silme kayıtlarını kontrol etmelisiniz.',
+'file-deleted-duplicate-notitle' => 'Bu dosyaya eş bir dosya daha önceden silinmiş, ve başlık bastırılmış.
+Dosyayı tekrar yüklemeye devam etmeden önce, bastırılmış dosya verisini görme yetkisine sahip birisine durumu gözden geçirmesini istemelisiniz.',
 'uploadwarning' => 'Yükleme uyarısı',
 'uploadwarning-text' => 'Lütfen aşağıdaki dosya açıklamasını değiştirin ve tekrar deneyin.',
 'savefile' => 'Dosyayı kaydet',
@@ -2768,6 +2772,7 @@ Son engelleme günlüğü girdisi kaynak amacıyla aşağıda verilmiştir:',
 Engellemeleri gözden geçirmek için [[Special:BlockList|engel listesine]] bakınız.',
 'ipb-blockingself' => 'Kendinizi engellemek üzeresiniz! Bunu yapmak istediğinizden emin misiniz?',
 'ipb-confirmhideuser' => '"Kullanıcıyı gizle" seçiliyken bir kullanıcı engellemek üzeresiniz. Bu, kullanıcının adını tüm listeler ile günlük girişlerinde bastıracaktır. Bunu yapmak istediğinizden emin misiniz?',
+'ipb-confirmaction' => 'Bunu gerçekten yapmak istediğinize eminseniz, lütfen en alttaki "{{int:ipb-confirm}}" alanını işaretleyin.',
 'ipb-edit-dropdown' => 'Engelleme nedenleri düzenle',
 'ipb-unblock-addr' => '$1 için engellemeyi kaldır',
 'ipb-unblock' => 'Engellemeyi kaldır',
@@ -3981,6 +3986,8 @@ Ayrıca [[Special:EditWatchlist|standart düzenleme sayfasını]] da kullanabili
 'version-ext-colheader-credits' => 'Yazarlar',
 'version-license-title' => '$1 için Lisans',
 'version-license-not-found' => 'Bu uzantı için detaylı lisans bilgisi bulunamadı.',
+'version-credits-title' => '$1 için Krediler',
+'version-credits-not-found' => 'Bu eklenti için detaylı kredi bilgisi bulunamadı.',
 'version-poweredby-credits' => "Bu wiki '''[https://www.mediawiki.org/ MediaWiki]''' programı kullanılarak oluşturulmuştur, telif © 2001-$1 $2.",
 'version-poweredby-others' => 'diğerleri',
 'version-poweredby-translators' => 'translatewiki.net çevirmenleri',
@@ -4198,6 +4205,7 @@ Bu programla birlikte [{{SERVER}}{{SCRIPTPATH}}/COPYING GNU Genel Kamu Lisansın
 'api-error-overwrite' => 'Varolan dosyanın üzerine yazmaya izin verilmiyor.',
 'api-error-stashfailed' => 'İç hata: Sunucu, geçici dosyaları kaybetti.',
 'api-error-publishfailed' => 'İç hata: Sunucu geçici dosyayı yayınlarken başarısız oldu.',
+'api-error-stasherror' => 'Dosya zulaya yüklenirken hata oluştu.',
 'api-error-timeout' => 'Sunucu beklenen süre içinde yanıt vermedi.',
 'api-error-unclassified' => 'Bilinmeyen bir hata oluştu.',
 'api-error-unknown-code' => 'Bilinmeyen hata: "$1"',
@@ -4253,4 +4261,6 @@ Aslında, çift ayraçlı hemen hemen her şeyi genişletir.',
 'expand_templates_generate_rawhtml' => 'Ham HTML göster',
 'expand_templates_preview' => 'Önizleme',
 
+# Unknown messages
+'uploadinvalidxml' => 'Yüklenen dosyadaki XML işlenemedi.',
 );
index 5c4857b..233145d 100644 (file)
@@ -8,6 +8,7 @@
  * @file
  *
  * @author Ariyo
+ * @author Arjunaraoc
  */
 
 $messages = array(
index 93c4b08..22e6674 100644 (file)
@@ -1573,7 +1573,7 @@ $1",
 Перевірте коректність HTML-тегів.',
 'badsiglength' => 'Ваш підпис дуже довгий.
 Повинно бути не більше $1 {{PLURAL:$1|символу|символів|символів}}.',
-'yourgender' => 'Як Ð²Ð¸ Ð²Ð¾Ð»Ñ\96Ñ\94Ñ\82е Ð±Ñ\83Ñ\82и Ð¾Ð¿Ð¸Ñ\81аним?',
+'yourgender' => 'СÑ\82аÑ\82Ñ\8c:',
 'gender-unknown' => 'Не визначена',
 'gender-male' => 'Чоловіча',
 'gender-female' => 'Жіноча',
@@ -4465,4 +4465,6 @@ MediaWiki поширюється в надії, що вона буде кори
 'expand_templates_generate_rawhtml' => 'Показати сирий HTML',
 'expand_templates_preview' => 'Попередній перегляд',
 
+# Unknown messages
+'uploadinvalidxml' => 'Не вдалося проаналізувати XML у завантаженому файлі.',
 );
index 8a7e1cf..d24d5d9 100644 (file)
@@ -453,13 +453,14 @@ Shuni e'tiborga olingki, ayrim sahifalar siz brauzeringiz keshini tozalamaguning
 'userlogin-yourname' => 'Foydalanuvchi nomi',
 'userlogin-yourname-ph' => 'Foydalanuvchi nomingizni kiriting',
 'yourpassword' => 'Maxfiy soʻz:',
+'userlogin-yourpassword' => 'Maxfiy soʻz',
 'userlogin-yourpassword-ph' => 'Maxfiy soʻzni kiriting',
 'createacct-yourpassword-ph' => 'Maxfiy soʻzni kiriting',
 'yourpasswordagain' => 'Maxfiy so‘zni qayta kiriting:',
 'createacct-yourpasswordagain' => 'Maxfiy soʻzni tasdiqlang',
 'createacct-yourpasswordagain-ph' => 'Maxfiy soʻzni yana bir bor kiriting',
 'remembermypassword' => 'Hisob ma’lumotlarim ushbu brauzerda eslab qolinsin (ko‘pi bilan $1 {{PLURAL:$1|kunga|kunga}})',
-'userlogin-remembermypassword' => 'Esda saqla',
+'userlogin-remembermypassword' => 'Kirgan deb esda saqla',
 'userlogin-signwithsecure' => 'Himoyalangan holda kirish',
 'yourdomainname' => 'Sizning domeningiz:',
 'password-change-forbidden' => 'Siz bu vikida maxfiy soʻzni oʻzgartira olmaysiz.',
@@ -479,12 +480,12 @@ Shuni e'tiborga olingki, ayrim sahifalar siz brauzeringiz keshini tozalamaguning
 'gotaccount' => "Hisobingiz bormi? '''$1'''.",
 'gotaccountlink' => 'Kirish',
 'userlogin-resetlink' => 'Kirish maʻlumotlaringiz esdan chiqdimi?',
-'userlogin-resetpassword-link' => 'Maxfiy soʻzni yangilash',
+'userlogin-resetpassword-link' => 'Unutib qoʻydingizmi?',
 'userlogin-helplink' => '[[{{MediaWiki:helplogin-url}}|Kirish uchun yordam]]',
 'createacct-join' => 'Maʼlumotlaringizni quyiga yozing',
 'createacct-emailoptional' => 'Elektron pochta manzili (majburiy emas)',
 'createacct-email-ph' => 'Elektron pochtangiz manzilini kiriting',
-'createaccountmail' => "E-mail orqali maxfiy so'zni jo'natish",
+'createaccountmail' => 'Vaqtinchalik maxfiy soʻzni koʻrsatilgan elektron pochta manzilimga joʻnatish',
 'createaccountreason' => 'Sabab:',
 'createacct-captcha' => 'Xavfsizlik tekshiruvi',
 'createacct-imgcaptcha-ph' => 'Yuqoridagi yozuvni bu yerga kiriting',
@@ -520,6 +521,7 @@ Ism yozilishini tekshirib koʻring.',
 'newpassword' => "Yangi mahfiy so'z:",
 'retypenew' => 'Yangi mahfiy soʻzni qayta tering:',
 'resetpass_submit' => "Maxfiy so'zni o'rnatish va kirish",
+'changepassword-success' => 'Maxfiy soʻzni oʻzgartirish muvaffaqiyatli oʻtdi!',
 'resetpass_forbidden' => "Maxfiy so'z o'zgartirilishi mumkin emas",
 'resetpass-submit-loggedin' => 'Maxfiy soʻzni oʻzgartirish',
 'resetpass-submit-cancel' => 'Bekor',
@@ -677,7 +679,7 @@ Ayrim andozalar qo'shilmaydi.",
 'histlegend' => "Farqlarni tanlash: solishtirish uchun kerakli radiobokslarni belgilang va '''{{int:compare-submit}}''' tugmasini bosing.<br />
 Bu yerda: '''({{int:cur}})''' = hozirgi koʻrinish bilan farqi, '''({{int:last}})''' = avvalgi koʻrinish bilan farqi, '''{{int:minoreditletter}}''' = kichkina tahrir.",
 'history-fieldset-title' => 'Tarixni koʻrish',
-'history-show-deleted' => 'Faqat o‘chirilganlari',
+'history-show-deleted' => 'Faqat yoʻqotilganlari',
 'histfirst' => 'Eng avvalgi',
 'histlast' => 'Eng soʻnggi',
 'historysize' => '({{PLURAL:$1|1 bayt|$1 bayt}})',
@@ -773,7 +775,7 @@ Bu yerda: '''({{int:cur}})''' = hozirgi koʻrinish bilan farqi, '''({{int:last}}
 'showingresultsheader' => "$4 uchun {{PLURAL:$5|'''$3'''dan '''$1''' natija|'''$3'''dan '''$1 - $2''' natijalar}}",
 'search-nonefound' => 'Talabga javob beradigan natija topilmadi.',
 'powersearch-legend' => 'Kengaytirilgan qidiruv',
-'powersearch-ns' => 'Bu nom-fazolarda izla:',
+'powersearch-ns' => 'Quyidagi nomfazolardan qidir:',
 'powersearch-redir' => 'Qayta yoʻnaltirishlarni koʻrsatish',
 'powersearch-togglelabel' => 'Belgilash:',
 'powersearch-toggleall' => 'Hammasini',
@@ -922,6 +924,7 @@ Agar keltirsangiz, undan sahifa kim tomonidan tahrirlanganini koʻrsatish uchun
 
 # User rights log
 'rightslog' => 'Foydalanuvchi huquqlari koʻrsatilgan qaydlar',
+'rightslogtext' => 'Foydalanuvchi huquqlarini oʻzgartirish qaydlari.',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-edit' => 'ushbu sahifani tahrirlash',
@@ -940,9 +943,9 @@ Agar keltirsangiz, undan sahifa kim tomonidan tahrirlanganini koʻrsatish uchun
 'recentchanges-label-minor' => 'Bu tahrir kichik deb belgilangan',
 'recentchanges-label-bot' => 'Bu tahrirni bot bajargan',
 'recentchanges-label-unpatrolled' => 'Bu tahrir hali tekshirilmagan',
-'recentchanges-label-plusminus' => 'sahifa vazni baytlarda qanchaga oʻzgargani',
+'recentchanges-label-plusminus' => 'vazni qanchaga oʻzgargani (bayt)',
 'recentchanges-legend-heading' => "'''Izoh:'''",
-'recentchanges-legend-newpage' => '(shuningdek qarang: [[Special:NewPages|yangi sahifalar roʻyxati]])',
+'recentchanges-legend-newpage' => '([[Special:NewPages|alohida roʻyxat]])',
 'rcnotefrom' => "Quyida <strong>$2</strong> dan (<strong>$1</strong> gacha) bo'lgan o'zgarishlar keltirilgan.",
 'rclistfrom' => '$1 dan boshlab yangi oʻzgarishlarni koʻrsat.',
 'rcshowhideminor' => 'Kichik tahrirlarni $1',
@@ -992,6 +995,7 @@ Agar keltirsangiz, undan sahifa kim tomonidan tahrirlanganini koʻrsatish uchun
 'license-header' => 'Litsenziyalash',
 
 # Special:ListFiles
+'listfiles-summary' => 'Ushbu maxsus sahifada barcha yuklangan fayllar koʻrsatilgan.',
 'imgfile' => 'fayl',
 'listfiles' => 'Fayllar roʻyxati',
 'listfiles_thumb' => 'Miniatura',
@@ -1090,10 +1094,14 @@ Uning [$2 fayl tavsifi sahifasidan] olingan tavsifi quyida keltirilgan.',
 
 # Special:Log
 'specialloguserlabel' => 'Ijrochi:',
-'speciallogtitlelabel' => 'Moʻljal (nom yoki foydalanuvchi):',
+'speciallogtitlelabel' => 'Moʻljal (foydalanuvchi yoki sahifa nomi):',
 'log' => 'Qaydlar',
 'all-logs-page' => 'Barcha ochiq qaydlar',
-'logempty' => 'Qaydnomada mos keladigan yozuvlar mavjud emas.',
+'alllogstext' => "{{SITENAME}}dagi barcha jurnallar roʻyxati.
+Natijalarni jurnal nomi, foydalanuvchi nomi (harflar katta-kichikligi inobatga olinadi) yoki sahifa nomi boʻyicha saralashingiz mumkin.
+* Biror foydalanuvchi ''amalga oshirgan qaydni'', uning foydalanuvchi nomini \"Ijrochi\" oynasiga kiritib qidirish mumkin.
+* Biror foydalanuvchi yoki sahifaga ''nisbatan'' amalga oshirilgan qaydni, ularning nomini \"Moʻljal\" oynasiga kiritib qidirish mumkin.",
+'logempty' => 'Talabga mos yozuvlar mavjud emas.',
 'log-title-wildcard' => 'Shu matndan boshlanuvchi sarlavhalarni izlash',
 
 # Special:AllPages
@@ -1349,7 +1357,7 @@ Yaqinda sodir etilgan yoʻqotishlar uchun $2ni koʻring.',
 'contributions-title' => '{{GENDER:$1|Foydalanuvchi}} $1 hissasi',
 'mycontris' => 'Hissam',
 'contribsub2' => '$1 uchun ($2)',
-'nocontribs' => 'Belgilangan shartlarga muvofiq oʻzgarishlar topilmadi',
+'nocontribs' => 'Belgilangan shartlarga muvofiq oʻzgarishlar topilmadi.',
 'uctop' => '(joriy)',
 'month' => 'Oydan (va avvalroq)',
 'year' => 'Yildan (va avvalroq)',
@@ -1358,11 +1366,12 @@ Yaqinda sodir etilgan yoʻqotishlar uchun $2ni koʻring.',
 'sp-contributions-newbies-sub' => 'Yangi hisob yozuvlaridan',
 'sp-contributions-newbies-title' => 'Yangi hisob yozuvlarining hissalari',
 'sp-contributions-blocklog' => 'chetlatishlar',
-'sp-contributions-deleted' => "o'chirilgan tahrirlar",
+'sp-contributions-deleted' => 'yoʻqotilgan tahrirlar',
 'sp-contributions-uploads' => 'yuklamalar',
 'sp-contributions-logs' => 'qaydlar',
 'sp-contributions-talk' => 'munozara',
 'sp-contributions-userrights' => 'foydalanuvchining huquqlarini boshqarish',
+'sp-contributions-blocked-notice' => 'Ushbu foydalanuvchi hozirda tahrirlashdan chetlatilgan. Quyida chetlatish qaydlaridan soʻnggi yozuv keltirilgan:',
 'sp-contributions-search' => 'Hissalarni qidirish',
 'sp-contributions-username' => 'IP-manzil yoki foydalanuvchi nomi:',
 'sp-contributions-toponly' => 'Faqat oxirgi deb hisoblangan tahrirlarni koʻrsat',
@@ -1396,14 +1405,14 @@ Yaqinda sodir etilgan yoʻqotishlar uchun $2ni koʻring.',
 'ipadressorusername' => 'IP-manzil yoki foydalanuvchi nomi:',
 'ipbexpiry' => 'Tugaydi:',
 'ipbreason' => 'Sabab:',
-'ipbreason-dropdown' => "* Chetlashtirishning andazaviy sabablari
-** Yolg'on axborot kiritish
-** Sahifa matnini o'chirish
-** Tashqi saytlarga spam-yo'llanmalar
-** Ma'nosiz matn/axlat qo'shish
-** Tahdid, ishtirokchilarni ta'qib qilish
-** Bir necha hisob yozuvlaridan o'z manfaatlarida foydalanish
-** Ishtirokchining nomaqbul ismi",
+'ipbreason-dropdown' => '* Chetlashtirishning odatiy sabablari
+** Yolgʻon maʼlumot kiritish
+** Sahifa matnini toʻliq oʻchirish
+** Tashqi saytlarga spam-havolalar
+** Maʼnosiz matn/axlat qoʻshish
+** Foydalanuvchilarga tahdid qilish, ularni taʼqib qilish
+** Bir nechta hisob yozuvlaridan oʻz manfaatlarida foydalanish
+** Nomaqbul foydalanuvchi nomi',
 'ipbsubmit' => 'Ushbu foydalanuvchini chetlashtirish',
 'ipbother' => 'Boshqa vaqt:',
 'ipboptions' => '2 soat:2 hours,1 kun:1 day,3 kun:3 days,1 hafta:1 week,2 hafta:2 weeks,1 oy:1 month,3 oy:3 months,6 oy:6 months,1 yil:1 year,cheksiz:infinite',
@@ -1649,6 +1658,7 @@ Umumiy omborda [[:$1]] mavjud. Faylning bu nomga qayta nomlanishi faylning umumi
 'table_pager_prev' => 'Oldingi sahifa',
 'table_pager_first' => 'Birinchi sahifa',
 'table_pager_last' => 'Oxirgi sahifa',
+'table_pager_limit_label' => 'Bir sahifadagi yozuvlar soni:',
 
 # Auto-summaries
 'autosumm-blank' => 'Sahifa tozalandi',
@@ -1692,6 +1702,9 @@ Umumiy omborda [[:$1]] mavjud. Faylning bu nomga qayta nomlanishi faylning umumi
 'logentry-patrol-patrol-auto' => '$1 $3 sahifasining $4 versiyasini avtomatik patrulladi',
 'logentry-newusers-newusers' => '$1 hisob yozuvi yaratildi',
 'logentry-newusers-create' => '$1 hisob yozuvi yaratildi',
+'logentry-newusers-autocreate' => '$1 hisob yozuvi avtomatik ravishda {{GENDER:$2|yaratilgan}}',
+'logentry-rights-rights' => '$1 $3ning guruhlardagi aʼzoligini $4dan $5ga {{GENDER:$2|oʻzgartirdi}}',
+'logentry-rights-rights-legacy' => '$1 $3ning guruhlardagi aʼzoligini oʻzgartirdi',
 
 # Feedback
 'feedback-close' => 'Bajarildi',
index 2eb912a..21c3e90 100644 (file)
@@ -1053,7 +1053,7 @@ Otkat sil'mnägubale üks-se, miše {{SITENAME}}-saitan sädäimišt voib olda v
 'timezoneregion-indian' => 'Indijan valdmeri',
 'timezoneregion-pacific' => "Tün' valdmeri",
 'allowemail' => 'Laskkat toižile kävutajile oigeta teile e-počtad',
-'prefs-searchoptions' => 'Ecindan järgendused',
+'prefs-searchoptions' => 'Ec',
 'prefs-namespaces' => 'Nimiavarused',
 'defaultns' => 'Toižiš statjoiš ectä neniš nimiavarusiš:',
 'default' => 'augotižjärgendusen mödhe',
index f6fd03c..cfc2fe7 100644 (file)
@@ -1157,6 +1157,8 @@ Nó đã tồn tại.',
 'content-not-allowed-here' => 'Không cho phép đưa nội dung “$1” vào trang [[$2]]',
 'editwarning-warning' => 'Rời khỏi trang này sẽ khiến bạn mất các sửa đổi đã thực hiện.
 Nếu đã đăng nhập, bạn có thể tắt cảnh báo này tại mục “Sửa đổi” trong tùy chọn cá nhân.',
+'editpage-notsupportedcontentformat-title' => 'Không hỗ trợ định dạng nội dung',
+'editpage-notsupportedcontentformat-text' => 'Mô hình nội dung $2 không hỗ trợ định dạng nội dung $1.',
 
 # Content models
 'content-model-wikitext' => 'mã wiki',
@@ -4329,4 +4331,6 @@ Nếu không thì bạn có thể điền biểu mẫu đơn giản ở dưới.
 'expand_templates_generate_rawhtml' => 'Hiển thị HTML thô',
 'expand_templates_preview' => 'Xem trước',
 
+# Unknown messages
+'uploadinvalidxml' => 'Không thể phân tích mã XML trong tập tin tải lên.',
 );
index 0db027e..974749f 100644 (file)
@@ -273,7 +273,7 @@ $messages = array(
 'talkpage' => 'Pakighimangraw hiunong hini nga pakli',
 'talkpagelinktext' => 'Hiruhimangraw',
 'specialpage' => 'Ispisyal nga Pakli',
-'personaltools' => 'Kalugaringon nga mga garamiton',
+'personaltools' => 'Mga pankalugaring nga garamiton',
 'postcomment' => 'Bag-o nga bahin',
 'articlepage' => 'Kitaa in may sulod nga pakli',
 'talk' => 'Hiruhimangraw',
index 16f460f..81a1a63 100644 (file)
@@ -1045,6 +1045,8 @@ $2
 'content-not-allowed-here' => '"$1" אינהאלט נישט דערלויבט אויף בלאט [[$2]]',
 'editwarning-warning' => 'איבערלאזן דעם בלאט קען גורם זײַן פֿארלירן אײַערע ענדערונגען.
 אויב איר זענט ארײַנלאגירט, קענט איר מבטל זײַן די דאזיגע ווארענונג אין דער "באארבעטן" אפטיילונג פון אײַערע פרעפערענצן.',
+'editpage-notsupportedcontentformat-title' => 'אינהאלט־פארמאט נישט געשטיצט',
+'editpage-notsupportedcontentformat-text' => 'דער אינהאלט־פארמאט $1 ווערט ניט געשטיצט דורכן אינהאלט־מאדעל $2.',
 
 # Content models
 'content-model-wikitext' => 'וויקיטעקסט',
index b00a1b5..ec9c622 100644 (file)
@@ -517,7 +517,7 @@ $messages = array(
 'category-file-count-limited' => '以下{{PLURAL:$1|文件|$1个文件}}属于当前分类。',
 'listingcontinuesabbrev' => '续',
 'index-category' => '可索引页面',
-'noindex-category' => '不可索引页面',
+'noindex-category' => '禁止索引的页面',
 'broken-file-category' => '有受损文件链接的页面',
 'categoryviewer-pagedlinks' => '($1)($2)',
 
@@ -4154,4 +4154,6 @@ MediaWiki发表时预期有用,但对此'''无任何保证''',亦无隐含
 'expand_templates_generate_rawhtml' => '显示原始HTML',
 'expand_templates_preview' => '预览',
 
+# Unknown messages
+'uploadinvalidxml' => '上传文件中的XML无法解析。',
 );
index 9233619..5e6f7d3 100644 (file)
@@ -4116,4 +4116,6 @@ MediaWiki是基於使用目的而加以發佈,然而不負任何擔保責任
 'expand_templates_generate_rawhtml' => '顯示原始HTML',
 'expand_templates_preview' => '預覽',
 
+# Unknown messages
+'uploadinvalidxml' => '上載檔案中的XML無法解析。',
 );
index 543156d..ebbc22c 100644 (file)
@@ -90,7 +90,6 @@ Edit
 Editor
 Education
 Egrave
-Ehcache
 Elig
 Email
 Empty
@@ -1313,7 +1312,6 @@ editusercssjs
 edituserjs
 edoe
 egrave
-ehcache
 ei
 eich
 eiinvalidparammix
index 83cc088..cde7d3b 100644 (file)
@@ -1,6 +1,8 @@
+# Custom tags for JSDuck 4.x
 # See also:
 # - https://github.com/senchalabs/jsduck/wiki/Tags
 # - https://github.com/senchalabs/jsduck/wiki/Custom-tags
+# - https://github.com/senchalabs/jsduck/wiki/Custom-tags/7f5c32e568eab9edc8e3365e935bcb836cb11f1d
 require 'jsduck/meta_tag'
 
 class SourceTag < JsDuck::MetaTag
@@ -67,3 +69,35 @@ class SeeTag < JsDuck::MetaTag
     end
   end
 end
+
+# As of JSDuck 5 this is in core
+class FiresTag < JsDuck::MetaTag
+  def initialize
+    @name = 'fires'
+    @multiline = true
+  end
+
+  # @param tags All matches of this tag on one class.
+  def to_html(tags)
+    doc = []
+    doc << '<h3 class="pa">Fires</h3>'
+    doc << [
+        '<ul>',
+        tags.map {|tag| render_long_event(tag) },
+        '</ul>',
+      ]
+    doc
+  end
+
+  def render_long_event(tag)
+    if tag =~ /\A(\w+)( .*)?\Z/m
+      name = $1
+      doc = $2 ? ': ' + $2 : ''
+      return [
+        '<li>',
+        format("{@link #event-#{name}} #{doc}"),
+        '</li>'
+      ]
+    end
+  end
+end
index c595980..bbe1860 100644 (file)
@@ -21,6 +21,7 @@
                                "name": "General",
                                "classes": [
                                        "mw.Title",
+                                       "mw.Uri",
                                        "mw.inspect",
                                        "mw.inspect.reports",
                                        "mw.notification",
                        {
                                "name": "API",
                                "classes": ["mw.Api*"]
+                       },
+                       {
+                               "name": "Language",
+                               "classes": [
+                                       "mw.language*",
+                                       "mw.cldr"
+                               ]
                        }
                ]
        },
        {
                "name": "Upstream",
                "groups": [
+                       {
+                               "name": "OOJS",
+                               "classes": ["OO", "OO.*"]
+                       },
                        {
                                "name": "jQuery",
                                "classes": ["jQuery", "jQuery.Event", "jQuery.Callbacks", "jQuery.Promise", "jQuery.Deferred", "jQuery.jqXHR", "QUnit"]
index e6e0f65..d0e2628 100644 (file)
@@ -13,6 +13,7 @@
                "../../resources/mediawiki/mediawiki.log.js",
                "../../resources/mediawiki/mediawiki.util.js",
                "../../resources/mediawiki/mediawiki.Title.js",
+               "../../resources/mediawiki/mediawiki.Uri.js",
                "../../resources/mediawiki/mediawiki.inspect.js",
                "../../resources/mediawiki/mediawiki.notify.js",
                "../../resources/mediawiki/mediawiki.notification.js",
@@ -21,7 +22,9 @@
                "../../resources/mediawiki.action/mediawiki.action.view.postEdit.js",
                "../../resources/mediawiki.page/mediawiki.page.startup.js",
                "../../resources/mediawiki.api",
+               "../../resources/mediawiki.language",
                "../../resources/jquery/jquery.localize.js",
-               "../../resources/jquery/jquery.spinner.js"
+               "../../resources/jquery/jquery.spinner.js",
+               "../../resources/oojs"
        ]
 }
diff --git a/maintenance/language/generateNormalizerData.php b/maintenance/language/generateNormalizerData.php
deleted file mode 100644 (file)
index b638b63..0000000
+++ /dev/null
@@ -1,160 +0,0 @@
-<?php
-/**
- * Generates normalizer data files for Arabic and Malayalam.
- *
- * 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 MaintenanceLanguage
- */
-
-require_once __DIR__ . '/../../includes/normal/UtfNormalUtil.php';
-
-require_once __DIR__ . '/../Maintenance.php';
-
-/**
- * Generates normalizer data files for Arabic and Malayalam.
- * For NFC see includes/normal.
- *
- * @ingroup MaintenanceLanguage
- */
-class GenerateNormalizerData extends Maintenance {
-       public $dataFile;
-
-       public function __construct() {
-               parent::__construct();
-               $this->addOption( 'unicode-data-file', 'The local location of the data file ' .
-                       'from http://unicode.org/Public/UNIDATA/UnicodeData.txt', false, true );
-       }
-
-       public function execute() {
-               if ( !$this->hasOption( 'unicode-data-file' ) ) {
-                       $this->dataFile = 'UnicodeData.txt';
-                       if ( !file_exists( $this->dataFile ) ) {
-                               $this->error( "Unable to find UnicodeData.txt. Please specify " .
-                                       "its location with --unicode-data-file=<FILE>" );
-                               exit( 1 );
-                       }
-               } else {
-                       $this->dataFile = $this->getOption( 'unicode-data-file' );
-                       if ( !file_exists( $this->dataFile ) ) {
-                               $this->error( 'Unable to find the specified data file.' );
-                               exit( 1 );
-                       }
-               }
-
-               $this->generateArabic();
-               $this->generateMalayalam();
-       }
-
-       function generateArabic() {
-               $file = fopen( $this->dataFile, 'r' );
-               if ( !$file ) {
-                       $this->error( 'Unable to open the data file.' );
-                       exit( 1 );
-               }
-
-               // For the file format, see http://www.unicode.org/reports/tr44/
-               $fieldNames = array(
-                       'Code',
-                       'Name',
-                       'General_Category',
-                       'Canonical_Combining_Class',
-                       'Bidi_Class',
-                       'Decomposition_Type_Mapping',
-                       'Numeric_Type_Value',
-                       'Bidi_Mirrored',
-                       'Unicode_1_Name',
-                       'ISO_Comment',
-                       'Simple_Uppercase_Mapping',
-                       'Simple_Lowercase_Mapping',
-                       'Simple_Titlecase_Mapping'
-               );
-
-               $pairs = array();
-
-               $lineNum = 0;
-               while ( false !== ( $line = fgets( $file ) ) ) {
-                       ++$lineNum;
-
-                       # Strip comments
-                       $line = trim( substr( $line, 0, strcspn( $line, '#' ) ) );
-                       if ( $line === '' ) {
-                               continue;
-                       }
-
-                       # Split fields
-                       $numberedData = explode( ';', $line );
-                       $data = array();
-                       foreach ( $fieldNames as $number => $name ) {
-                               $data[$name] = $numberedData[$number];
-                       }
-
-                       $code = base_convert( $data['Code'], 16, 10 );
-                       if ( ( $code >= 0xFB50 && $code <= 0xFDFF ) # Arabic presentation forms A
-                               || ( $code >= 0xFE70 && $code <= 0xFEFF ) # Arabic presentation forms B
-                       ) {
-                               if ( $data['Decomposition_Type_Mapping'] === '' ) {
-                                       // No decomposition
-                                       continue;
-                               }
-                               if ( !preg_match( '/^ *(<\w*>) +([0-9A-F ]*)$/',
-                                       $data['Decomposition_Type_Mapping'], $m )
-                               ) {
-                                       $this->error( "Can't parse Decomposition_Type/Mapping on line $lineNum" );
-                                       $this->error( $line );
-                                       continue;
-                               }
-
-                               $source = hexSequenceToUtf8( $data['Code'] );
-                               $dest = hexSequenceToUtf8( $m[2] );
-                               $pairs[$source] = $dest;
-                       }
-               }
-
-               global $IP;
-               file_put_contents( "$IP/serialized/normalize-ar.ser", serialize( $pairs ) );
-               echo "ar: " . count( $pairs ) . " pairs written.\n";
-       }
-
-       function generateMalayalam() {
-               $hexPairs = array(
-                       # From http://unicode.org/versions/Unicode5.1.0/#Malayalam_Chillu_Characters
-                       '0D23 0D4D 200D' => '0D7A',
-                       '0D28 0D4D 200D' => '0D7B',
-                       '0D30 0D4D 200D' => '0D7C',
-                       '0D32 0D4D 200D' => '0D7D',
-                       '0D33 0D4D 200D' => '0D7E',
-
-                       # From http://permalink.gmane.org/gmane.science.linguistics.wikipedia.technical/46413
-                       '0D15 0D4D 200D' => '0D7F',
-               );
-
-               $pairs = array();
-               foreach ( $hexPairs as $hexSource => $hexDest ) {
-                       $source = hexSequenceToUtf8( $hexSource );
-                       $dest = hexSequenceToUtf8( $hexDest );
-                       $pairs[$source] = $dest;
-               }
-
-               global $IP;
-               file_put_contents( "$IP/serialized/normalize-ml.ser", serialize( $pairs ) );
-               echo "ml: " . count( $pairs ) . " pairs written.\n";
-       }
-}
-
-$maintClass = 'GenerateNormalizerData';
-require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/maintenance/language/generateNormalizerDataAr.php b/maintenance/language/generateNormalizerDataAr.php
new file mode 100644 (file)
index 0000000..ece0450
--- /dev/null
@@ -0,0 +1,133 @@
+<?php
+/**
+ * Generates the normalizer data file for Arabic.
+ *
+ * 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 MaintenanceLanguage
+ */
+
+require_once __DIR__ . '/../Maintenance.php';
+
+/**
+ * Generates the normalizer data file for Arabic.
+ * For NFC see includes/normal.
+ *
+ * @ingroup MaintenanceLanguage
+ */
+class GenerateNormalizerDataAr extends Maintenance {
+       public function __construct() {
+               parent::__construct();
+               $this->mDescription = 'Generate the normalizer data file for Arabic';
+               $this->addOption( 'unicode-data-file', 'The local location of the data file ' .
+                       'from http://unicode.org/Public/UNIDATA/UnicodeData.txt', false, true );
+       }
+
+       public function getDbType() {
+               return Maintenance::DB_NONE;
+       }
+
+       public function execute() {
+               if ( !$this->hasOption( 'unicode-data-file' ) ) {
+                       $dataFile = 'UnicodeData.txt';
+                       if ( !file_exists( $dataFile ) ) {
+                               $this->error( "Unable to find UnicodeData.txt. Please specify " .
+                                       "its location with --unicode-data-file=<FILE>" );
+                               exit( 1 );
+                       }
+               } else {
+                       $dataFile = $this->getOption( 'unicode-data-file' );
+                       if ( !file_exists( $dataFile ) ) {
+                               $this->error( 'Unable to find the specified data file.' );
+                               exit( 1 );
+                       }
+               }
+
+               $file = fopen( $dataFile, 'r' );
+               if ( !$file ) {
+                       $this->error( 'Unable to open the data file.' );
+                       exit( 1 );
+               }
+
+               // For the file format, see http://www.unicode.org/reports/tr44/
+               $fieldNames = array(
+                       'Code',
+                       'Name',
+                       'General_Category',
+                       'Canonical_Combining_Class',
+                       'Bidi_Class',
+                       'Decomposition_Type_Mapping',
+                       'Numeric_Type_Value_6',
+                       'Numeric_Type_Value_7',
+                       'Numeric_Type_Value_8',
+                       'Bidi_Mirrored',
+                       'Unicode_1_Name',
+                       'ISO_Comment',
+                       'Simple_Uppercase_Mapping',
+                       'Simple_Lowercase_Mapping',
+                       'Simple_Titlecase_Mapping'
+               );
+
+               $pairs = array();
+
+               $lineNum = 0;
+               while ( false !== ( $line = fgets( $file ) ) ) {
+                       ++$lineNum;
+
+                       # Strip comments
+                       $line = trim( substr( $line, 0, strcspn( $line, '#' ) ) );
+                       if ( $line === '' ) {
+                               continue;
+                       }
+
+                       # Split fields
+                       $numberedData = explode( ';', $line );
+                       $data = array();
+                       foreach ( $fieldNames as $number => $name ) {
+                               $data[$name] = $numberedData[$number];
+                       }
+
+                       $code = base_convert( $data['Code'], 16, 10 );
+                       if ( ( $code >= 0xFB50 && $code <= 0xFDFF ) # Arabic presentation forms A
+                               || ( $code >= 0xFE70 && $code <= 0xFEFF ) # Arabic presentation forms B
+                       ) {
+                               if ( $data['Decomposition_Type_Mapping'] === '' ) {
+                                       // No decomposition
+                                       continue;
+                               }
+                               if ( !preg_match( '/^ *(<\w*>) +([0-9A-F ]*)$/',
+                                       $data['Decomposition_Type_Mapping'], $m )
+                               ) {
+                                       $this->error( "Can't parse Decomposition_Type/Mapping on line $lineNum" );
+                                       $this->error( $line );
+                                       continue;
+                               }
+
+                               $source = hexSequenceToUtf8( $data['Code'] );
+                               $dest = hexSequenceToUtf8( $m[2] );
+                               $pairs[$source] = $dest;
+                       }
+               }
+
+               global $IP;
+               file_put_contents( "$IP/serialized/normalize-ar.ser", serialize( $pairs ) );
+               echo "ar: " . count( $pairs ) . " pairs written.\n";
+       }
+}
+
+$maintClass = 'GenerateNormalizerDataAr';
+require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/maintenance/language/generateNormalizerDataMl.php b/maintenance/language/generateNormalizerDataMl.php
new file mode 100644 (file)
index 0000000..c7237cf
--- /dev/null
@@ -0,0 +1,69 @@
+<?php
+/**
+ * Generates the normalizer data file for Malayalam.
+ *
+ * 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 MaintenanceLanguage
+ */
+
+require_once __DIR__ . '/../Maintenance.php';
+
+/**
+ * Generates the normalizer data file for Malayalam.
+ * For NFC see includes/normal.
+ *
+ * @ingroup MaintenanceLanguage
+ */
+class GenerateNormalizerDataMl extends Maintenance {
+       public function __construct() {
+               parent::__construct();
+               $this->mDescription = 'Generate the normalizer data file for Malayalam';
+       }
+
+       public function getDbType() {
+               return Maintenance::DB_NONE;
+       }
+
+       public function execute() {
+               $hexPairs = array(
+                       # From http://unicode.org/versions/Unicode5.1.0/#Malayalam_Chillu_Characters
+                       '0D23 0D4D 200D' => '0D7A',
+                       '0D28 0D4D 200D' => '0D7B',
+                       '0D30 0D4D 200D' => '0D7C',
+                       '0D32 0D4D 200D' => '0D7D',
+                       '0D33 0D4D 200D' => '0D7E',
+
+                       # From http://permalink.gmane.org/gmane.science.linguistics.wikipedia.technical/46413
+                       '0D15 0D4D 200D' => '0D7F',
+               );
+
+               $pairs = array();
+               foreach ( $hexPairs as $hexSource => $hexDest ) {
+                       $source = hexSequenceToUtf8( $hexSource );
+                       $dest = hexSequenceToUtf8( $hexDest );
+                       $pairs[$source] = $dest;
+               }
+
+               global $IP;
+               file_put_contents( "$IP/serialized/normalize-ml.ser", serialize( $pairs ) );
+               echo "ml: " . count( $pairs ) . " pairs written.\n";
+       }
+}
+
+$maintClass = 'GenerateNormalizerDataMl';
+require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/maintenance/language/generateUtf8Case.php b/maintenance/language/generateUtf8Case.php
new file mode 100644 (file)
index 0000000..dbb70c1
--- /dev/null
@@ -0,0 +1,129 @@
+<?php
+/**
+ * Generates Utf8Case.ser from the Unicode Character Database and
+ * supplementary files.
+ *
+ * Copyright © 2004, 2008 Brion Vibber <brion@pobox.com>
+ * http://www.mediawiki.org/
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup MaintenanceLanguage
+ */
+
+require_once __DIR__ . '/../Maintenance.php';
+
+/**
+ * Generates Utf8Case.ser from the Unicode Character Database and
+ * supplementary files.
+ *
+ * @ingroup MaintenanceLanguage
+ */
+class GenerateUtf8Case extends Maintenance {
+
+       public function __construct() {
+               parent::__construct();
+               $this->mDescription = 'Generate Utf8Case.ser from the Unicode Character Database ' .
+                       'and supplementary files';
+               $this->addOption( 'unicode-data-file', 'The local location of the data file ' .
+                       'from http://unicode.org/Public/UNIDATA/UnicodeData.txt', false, true );
+       }
+
+       public function getDbType() {
+               return Maintenance::DB_NONE;
+       }
+
+       public function execute() {
+               if ( !$this->hasOption( 'unicode-data-file' ) ) {
+                       $dataFile = 'UnicodeData.txt';
+                       if ( !file_exists( $dataFile ) ) {
+                               $this->error( "Unable to find UnicodeData.txt. Please specify " .
+                                       "its location with --unicode-data-file=<FILE>" );
+                               exit( 1 );
+                       }
+               } else {
+                       $dataFile = $this->getOption( 'unicode-data-file' );
+                       if ( !file_exists( $dataFile ) ) {
+                               $this->error( 'Unable to find the specified data file.' );
+                               exit( 1 );
+                       }
+               }
+
+               $file = fopen( $dataFile, 'r' );
+               if ( !$file ) {
+                       $this->error( 'Unable to open the data file.' );
+                       exit( 1 );
+               }
+
+               // For the file format, see http://www.unicode.org/reports/tr44/
+               $fieldNames = array(
+                       'Code',
+                       'Name',
+                       'General_Category',
+                       'Canonical_Combining_Class',
+                       'Bidi_Class',
+                       'Decomposition_Type_Mapping',
+                       'Numeric_Type_Value_6',
+                       'Numeric_Type_Value_7',
+                       'Numeric_Type_Value_8',
+                       'Bidi_Mirrored',
+                       'Unicode_1_Name',
+                       'ISO_Comment',
+                       'Simple_Uppercase_Mapping',
+                       'Simple_Lowercase_Mapping',
+                       'Simple_Titlecase_Mapping'
+               );
+
+               $upper = array();
+               $lower = array();
+
+               $lineNum = 0;
+               while ( false !== ( $line = fgets( $file ) ) ) {
+                       ++$lineNum;
+
+                       # Strip comments
+                       $line = trim( substr( $line, 0, strcspn( $line, '#' ) ) );
+                       if ( $line === '' ) {
+                               continue;
+                       }
+
+                       # Split fields
+                       $numberedData = explode( ';', $line );
+                       $data = array();
+                       foreach ( $fieldNames as $number => $name ) {
+                               $data[$name] = $numberedData[$number];
+                       }
+
+                       $source = hexSequenceToUtf8( $data['Code'] );
+                       if ( $data['Simple_Uppercase_Mapping'] ) {
+                               $upper[$source] = hexSequenceToUtf8( $data['Simple_Uppercase_Mapping'] );
+                       }
+                       if ( $data['Simple_Lowercase_Mapping'] ) {
+                               $lower[$source] = hexSequenceToUtf8( $data['Simple_Lowercase_Mapping'] );
+                       }
+               }
+
+               global $IP;
+               file_put_contents( "$IP/serialized/Utf8Case.ser", serialize( array(
+                       'wikiUpperChars' => $upper,
+                       'wikiLowerChars' => $lower,
+               ) ) );
+       }
+}
+
+$maintClass = 'GenerateUtf8Case';
+require_once RUN_MAINTENANCE_IF_MAIN;
index d3c70d6..a7d1ceb 100644 (file)
@@ -246,6 +246,13 @@ $wgIgnoredMessages = array(
        'tags-summary',
        'comparepages-summary',
        'resettokens-summary',
+       'version-db-mysql-url',
+       'version-db-mariadb-url',
+       'version-db-percona-url',
+       'version-db-postgres-url',
+       'version-db-oracle-url',
+       'version-db-sqlite-url',
+       'version-db-mssql-url',
        'version-entrypoints-index-php',
        'version-entrypoints-api-php',
        'version-entrypoints-load-php',
index d304425..8b76a6b 100644 (file)
@@ -979,6 +979,7 @@ $wgMessageStructure = array(
                'search-result-score',
                'search-redirect',
                'search-section',
+               'search-file-match',
                'search-suggest',
                'search-interwiki-caption',
                'search-interwiki-default',
@@ -3685,6 +3686,13 @@ $wgMessageStructure = array(
                'version-software',
                'version-software-product',
                'version-software-version',
+               'version-db-mysql-url',
+               'version-db-mariadb-url',
+               'version-db-percona-url',
+               'version-db-postgres-url',
+               'version-db-oracle-url',
+               'version-db-sqlite-url',
+               'version-db-mssql-url',
                'version-entrypoints',
                'version-entrypoints-header-entrypoint',
                'version-entrypoints-header-url',
index b9eb809..2a9bb4f 100644 (file)
@@ -144,6 +144,7 @@ class RebuildRecentchanges extends Maintenance {
                                                'rc_last_oldid' => $lastOldId,
                                                'rc_new' => $new,
                                                'rc_type' => $new,
+                                               'rc_source' => $new === 1 ? RecentChange::SRC_NEW : RecentChange::SRC_EDIT,
                                                'rc_old_len' => $lastSize,
                                                'rc_new_len' => $size,
                                        ), array(
@@ -196,6 +197,7 @@ class RebuildRecentchanges extends Maintenance {
                                'rc_this_oldid' => 0,
                                'rc_last_oldid' => 0,
                                'rc_type'       => RC_LOG,
+                               'rc_source'     => $dbw->addQuotes( RecentChange::SRC_LOG ),
                                'rc_cur_id'     => $dbw->cascadingDeletes() ? 'page_id' : 'COALESCE(page_id, 0)',
                                'rc_log_type'   => 'log_type',
                                'rc_log_action' => 'log_action',
index b2c9c08..69c36cc 100644 (file)
@@ -1,4 +1,4 @@
-/**
+/*!
  * Lower Sorbian (Dolnoserbski) language functions
  */
 
index 61c6c10..2410091 100644 (file)
@@ -1,6 +1,6 @@
-/**
- *  Finnish (Suomi) language functions
- *  @author Santhosh Thottingal
+/*!
+ * Finnish (Suomi) language functions
+ * @author Santhosh Thottingal
  */
 
 mediaWiki.language.convertGrammar = function ( word, form ) {
index 77dca75..2d6b733 100644 (file)
@@ -1,4 +1,4 @@
-/**
+/*!
  * Upper Sorbian (Hornjoserbsce) language functions
  */
 
index 23b0c12..d72a1c0 100644 (file)
@@ -1,6 +1,6 @@
-/**
- *  Hungarian language functions
- *  @author Santhosh Thottingal
+/*!
+ * Hungarian language functions
+ * @author Santhosh Thottingal
  */
 
 mediaWiki.language.convertGrammar = function ( word, form ) {
index 2711024..7fc171d 100644 (file)
@@ -1,4 +1,4 @@
-/**
+/*!
  * Latin (lingua Latina) language functions
  * @author Santhosh Thottingal
  */
index 682b390..4b50834 100644 (file)
@@ -1,9 +1,8 @@
-/**
+/*!
  * Ossetian (Ирон) language functions
  * @author Santhosh Thottingal
  */
 
-
 mediaWiki.language.convertGrammar = function ( word, form ) {
        var grammarForms = mediaWiki.language.getData( 'os', 'grammarForms' ),
                // Ending for allative case
index 5e56b66..9b63382 100644 (file)
@@ -1,4 +1,4 @@
-/**
+/*!
  * Ukrainian (Українська) language functions
  */
 
index c3023cd..f6fb8f1 100644 (file)
@@ -1,15 +1,20 @@
-/**
- *  CLDR related utility methods.
- */
 ( function ( mw ) {
        'use strict';
 
-       var cldr = {
+       /**
+        * Namespace for CLDR-related utility methods.
+        *
+        * @class
+        * @singleton
+        */
+       mw.cldr = {
                /**
-                * For the number, get the plural for index
-                * In case none of the rules passed, we return pluralRules.length
-                * That means it is the "other" form.
-                * @param number
+                * Get the plural form index for the number.
+                *
+                * In case none of the rules passed, we return `pluralRules.length` -
+                * that means it is the "other" form.
+                *
+                * @param {number} number
                 * @param {Array} pluralRules
                 * @return {number} plural form index
                 */
@@ -24,6 +29,4 @@
                }
        };
 
-       mw.cldr = cldr;
-
 }( mediaWiki ) );
index 937b89b..fd77025 100644 (file)
@@ -1,38 +1,57 @@
-/**
- * Base language object with methods for storing and getting
- * language data.
- */
 ( function ( mw ) {
-
-       var language = {
+       /**
+        * Base language object with methods related to language support, attempting to mirror some of the
+        * functionality of the Language class in MediaWiki:
+        *
+        *   - storing and retrieving language data
+        *   - transforming message syntax (`{{PLURAL:}}`, `{{GRAMMAR:}}`, `{{GENDER:}}`)
+        *   - formatting numbers
+        *
+        * @class
+        * @singleton
+        */
+       mw.language = {
                /**
-                * @var data {Object} Language related data (keyed by language,
-                * contains instances of mw.Map).
-                * @example Set data
-                * <code>
+                * Language-related data (keyed by language, contains instances of mw.Map). Loaded dynamically
+                * (see ResourceLoaderLanguageDataModule in PHP docs, aka mediawiki.language.data module).
+                *
+                * To set data:
+                *
                 *     // Override, extend or create the language data object of 'nl'
                 *     mw.language.setData( 'nl', 'myKey', 'My value' );
                 *
                 *     // Set multiple values at once
-                *     mw.language.setData( 'nl', { 'foo': 'X', 'bar': 'Y' } );
-                * </code>
-                * @example Get GrammarForms data for language 'nl':
-                * <code>
+                *     mw.language.setData( 'nl', { foo: 'X', bar: 'Y' } );
+                *
+                * To get GrammarForms data for language 'nl':
+                *
                 *     var grammarForms = mw.language.getData( 'nl', 'grammarForms' );
-                * </code>
+                *
+                * Possible data keys:
+                *
+                *  - `digitTransformTable`
+                *  - `separatorTransformTable`
+                *  - `grammarForms`
+                *  - `pluralRules`
+                *  - `digitGroupingPattern`
+                *
+                * @property
                 */
                data: {},
 
                /**
-                * Convenience method for retreiving language data by language code and data key,
-                * covering for the potential inexistance of a data object for this langiage.
-                * @param langCode {String}
-                * @param dataKey {String}
-                * @return {mixed} Value stored in the mw.Map (or undefined if there is no map for
-                  the specified langCode).
+                * Convenience method for retrieving language data.
+                *
+                * Structured by language code and data key, covering for the potential inexistence of a
+                * data object for this language.
+                *
+                * @param {string} langCode
+                * @param {string} dataKey
+                * @return {Mixed} Value stored in the mw.Map (or `undefined` if there is no map for the specified
+                *  langCode).
                 */
                getData: function ( langCode, dataKey ) {
-                       var langData = language.data;
+                       var langData = mw.language.data;
                        if ( langData && langData[langCode] instanceof mw.Map ) {
                                return langData[langCode].get( dataKey );
                        }
                },
 
                /**
-                * Convenience method for setting language data by language code and data key.
+                * Convenience method for setting language data.
+                *
                 * Creates the data mw.Map if there isn't one for the specified language already.
                 *
-                * @param langCode {String}
-                * @param dataKey {String|Object} Key or object of key/values.
-                * @param value {mixed} Value for dataKey, ignored if dataKey is an object.
+                * @param {string} langCode
+                * @param {string|Object} dataKey Key or object of key/values.
+                * @param {Mixed} value Value for dataKey, ignored if dataKey is an object.
                 */
                setData: function ( langCode, dataKey, value ) {
-                       var langData = language.data;
+                       var langData = mw.language.data;
                        if ( !( langData[langCode] instanceof mw.Map ) ) {
                                langData[langCode] = new mw.Map();
                        }
@@ -56,6 +76,4 @@
                }
        };
 
-       mw.language = language;
-
 }( mediaWiki ) );
index 3927f00..87018f6 100644 (file)
@@ -1,22 +1,21 @@
-/**
- * Localized Language support attempts to mirror some of the functionality of
- * Language.php in MediaWiki.
- * This adds methods for transforming message text.
+/*
+ * Methods for transforming message syntax.
  */
 ( function ( mw, $ ) {
 
-var language = {
+/**
+ * @class mw.language
+ */
+$.extend( mw.language, {
 
        /**
         * Process the PLURAL template substitution
         *
-        * @param {object} template Template object
-        * @format template
-        *  {
-        *      'title': [title of template],
-        *      'parameters': [template parameters]
-        *  }
-        * @example {{Template:title|params}}
+        * @private
+        * @param {Object} template Template object
+        * @param {string} template.title
+        * @param {Array} template.parameters
+        * @return {string}
         */
        procPLURAL: function ( template ) {
                if ( template.title && template.parameters && mw.language.convertPlural ) {
@@ -39,9 +38,9 @@ var language = {
        /**
         * Plural form transformations, needed for some languages.
         *
-        * @param count integer Non-localized quantifier
-        * @param forms array List of plural forms
-        * @return string Correct form for quantifier in this language
+        * @param {number} count Non-localized quantifier
+        * @param {Array} forms List of plural forms
+        * @return {string} Correct form for quantifier in this language
         */
        convertPlural: function ( count, forms ) {
                var pluralRules,
@@ -90,9 +89,10 @@ var language = {
        /**
         * Pads an array to a specific length by copying the last one element.
         *
-        * @param forms array Number of forms given to convertPlural
-        * @param count integer Number of forms required
-        * @return array Padded array of forms
+        * @private
+        * @param {Array} forms Number of forms given to convertPlural
+        * @param {number} count Number of forms required
+        * @return {Array} Padded array of forms
         */
        preConvertPlural: function ( forms, count ) {
                while ( forms.length < count ) {
@@ -103,14 +103,14 @@ var language = {
 
        /**
         * Provides an alternative text depending on specified gender.
-        * Usage {{gender:[gender|user object]|masculine|feminine|neutral}}.
+        *
+        * Usage in message text: `{{gender:[gender|user object]|masculine|feminine|neutral}}`.
         * If second or third parameter are not specified, masculine is used.
         *
         * These details may be overriden per language.
         *
-        * @param gender string male, female, or anything else for neutral.
-        * @param forms array List of gender forms
-        *
+        * @param {string} gender 'male', 'female', or anything else for neutral.
+        * @param {Array} forms List of gender forms
         * @return string
         */
        gender: function ( gender, forms ) {
@@ -129,13 +129,14 @@ var language = {
 
        /**
         * Grammatical transformations, needed for inflected languages.
-        * Invoked by putting {{grammar:form|word}} in a message.
-        * The rules can be defined in $wgGrammarForms global or grammar
-        * forms can be computed dynamically by overriding this method per language
+        * Invoked by putting `{{grammar:form|word}}` in a message.
+        *
+        * The rules can be defined in $wgGrammarForms global or computed
+        * dynamically by overriding this method per language.
         *
-        * @param word {String}
-        * @param form {String}
-        * @return {String}
+        * @param {string} word
+        * @param {string} form
+        * @return {string}
         */
        convertGrammar: function ( word, form ) {
                var grammarForms = mw.language.getData( mw.config.get( 'wgUserLanguage' ), 'grammarForms' );
@@ -145,8 +146,6 @@ var language = {
                return word;
        }
 
-};
-
-$.extend( mw.language, language );
+} );
 
 }( mediaWiki, jQuery ) );
index 3d4b7ee..5a1a5cb 100644 (file)
@@ -1,4 +1,4 @@
-/**
+/*
  * Transfer of month names from messages into mw.language.
  *
  * Loading this module also ensures the availability of appropriate messages via mw.msg.
@@ -31,6 +31,7 @@
         * Information about month names in current UI language.
         *
         * Object keys:
+        *
         * - `names`: array of month names (in nominative case in languages which have the distinction),
         *   zero-indexed
         * - `genitive`: array of month names in genitive case, zero-indexed
@@ -39,6 +40,7 @@
         *   for appropriate messages which can be passed to mw.msg.
         *
         * @property
+        * @member mw.language
         */
        mw.language.months = {
                keys: {
index fada6ce..4282a3d 100644 (file)
@@ -1,23 +1,28 @@
 /*
- * Number related utilities for mediawiki.language
+ * Number-related utilities for mediawiki.language.
  */
 ( function ( mw, $ ) {
+       /**
+        * @class mw.language
+        */
 
        /**
         * Pad a string to guarantee that it is at least `size` length by
         * filling with the character `ch` at either the start or end of the
         * string. Pads at the start, by default.
-        * example:
-        * Fill the string to length 10 with '+' characters on the right. Yields 'blah++++++'.
-        *  pad('blah', 10, '+', true);
         *
+        * Example: Fill the string to length 10 with '+' characters on the right.
+        *
+        *     pad('blah', 10, '+', true); // => 'blah++++++'
+        *
+        * @private
         * @param {string} text The string to pad
-        * @param {Number} size To provide padding
-        * @param {string} ch Character to pad, defaults to '0'
-        * @param {Boolean} end Adds padding at the end if true, otherwise pads at start
+        * @param {number} size The length to pad to
+        * @param {string} [ch='0'] Character to pad with
+        * @param {boolean} [end=false] Adds padding at the end if true, otherwise pads at start
         * @return {string}
         */
-       function pad ( text, size, ch, end ) {
+       function pad( text, size, ch, end ) {
                if ( !ch ) {
                        ch = '0';
                }
        }
 
        /**
-        * Efficiently replicate a string n times.
+        * Efficiently replicate a string `n` times.
         *
+        * @private
         * @param {string} str The string to replicate
-        * @param {Number} num Number of times to replicate the string
+        * @param {number} num Number of times to replicate the string
         * @return {string}
         */
-       function replicate ( str, num ) {
+       function replicate( str, num ) {
                if ( num <= 0 || !str ) {
                        return '';
                }
         * Adapted from dojo/number library with thanks
         * http://dojotoolkit.org/reference-guide/1.8/dojo/number.html
         *
-        * @param {Number} value the number to be formatted, ignores sign
+        * @private
+        * @param {number} value the number to be formatted, ignores sign
         * @param {string} pattern the number portion of a pattern (e.g. `#,##0.00`)
-        * @param {string} options.decimalThe decimal separator
-        * @param {string} options.group The group separator
-        *
+        * @param {Object} [options] If provided, both option keys must be present:
+        * @param {string} options.decimal The decimal separator. Defaults to: `'.'`.
+        * @param {string} options.group The group separator. Defaults to: `','`.
         * @return {string}
         */
        function commafyNumber( value, pattern, options ) {
        $.extend( mw.language, {
 
                /**
-                * Converts a number using digitTransformTable.
+                * Converts a number using #getDigitTransformTable.
                 *
-                * @param {Number} num Value to be converted
-                * @param {boolean} integer Convert the return value to an integer
-                * @return {Number|string} Formatted number
+                * @param {number} num Value to be converted
+                * @param {boolean} [integer=false] Whether to convert the return value to an integer
+                * @return {number|string} Formatted number
                 */
                convertNumber: function ( num, integer ) {
                        var i, tmp, transformTable, numberString, convertedNumber, pattern;
                        return integer ? parseInt( convertedNumber, 10 ) : convertedNumber;
                },
 
+               /**
+                * Get the  digit transform table for current UI language.
+                * @return {Object|Array}
+                */
                getDigitTransformTable: function () {
                        return mw.language.getData( mw.config.get( 'wgUserLanguage' ),
                                'digitTransformTable' ) || [];
                },
 
+               /**
+                * Get the  separator transform table for current UI language.
+                * @return {Object|Array}
+                */
                getSeparatorTransformTable: function () {
                        return mw.language.getData( mw.config.get( 'wgUserLanguage' ),
                                'separatorTransformTable' ) || [];
                },
 
                /**
-                * Apply pattern to format value as a string using as per
-                * unicode.org TR35 - http://www.unicode.org/reports/tr35/#Number_Format_Patterns.
+                * Apply pattern to format value as a string.
+                *
+                * Using patterns from [Unicode TR35](http://www.unicode.org/reports/tr35/#Number_Format_Patterns).
                 *
-                * @param {Number} value
+                * @param {number} value
                 * @param {string} pattern Pattern string as described by Unicode TR35
-                * @throws Error
-                * @returns {String}
+                * @throws {Error} If unable to find a number expression in `pattern`.
+                * @return {string}
                 */
                commafy: function ( value, pattern ) {
                        var numberPattern,
index b1af745..6cb94e7 100644 (file)
 
 .mw-changeslist-legend dt {
        float: left;
+       margin-right: 0.5em;
 }
 
 .mw-changeslist-legend dd {
        margin-left: 1.5em;
        line-height: 1.3em;
 }
-
-.mw-changeslist-legend dd.mw-changeslist-legend-plusminus {
-       margin-left: 3.5em;
-}
index 98d7e82..a1eed48 100644 (file)
@@ -1,16 +1,13 @@
 /**
- * Library for simple URI parsing and manipulation.  Requires jQuery.
+ * Library for simple URI parsing and manipulation. Dependencies: mw, jQuery.
  *
- * Do not expect full RFC 3986 compliance. Intended to be minimal, but featureful.
- * The use cases we have in mind are constructing 'next page' or 'previous page' URLs,
- * detecting whether we need to use cross-domain proxies for an API, constructing
- * simple URL-based API calls, etc.
+ * Intended to be minimal, but featureful; do not expect full RFC 3986 compliance. The use cases we
+ * have in mind are constructing 'next page' or 'previous page' URLs, detecting whether we need to
+ * use cross-domain proxies for an API, constructing simple URL-based API calls, etc. Parsing here
+ * is regex-based, so may not work on all URIs, but is good enough for most.
  *
- * Intended to compress very well if you use a JS-parsing minifier.
- *
- * Dependencies: mw, jQuery
- *
- * Example:
+ * You can modify the properties directly, then use the #toString method to extract the full URI
+ * string again. Example:
  *
  *     var uri = new mw.Uri( 'http://example.com/mysite/mypage.php?quux=2' );
  *
  *         // anchor with id 'id2' now links to http://foo.example.com/mysite/mypage.php?bar=3&quux=2&pif=paf
  *     }
  *
- * Parsing here is regex based, so may not work on all URIs, but is good enough for most.
- *
  * Given a URI like
- * 'http://usr:pwd@www.example.com:81/dir/dir.2/index.htm?q1=0&&test1&test2=&test3=value+%28escaped%29&r=1&r=2#top':
- * The returned object will have the following properties:
+ * `http://usr:pwd@www.example.com:81/dir/dir.2/index.htm?q1=0&&test1&test2=&test3=value+%28escaped%29&r=1&r=2#top`
+ * the returned object will have the following properties:
  *
- *    protocol  'http'
- *    user      'usr'
- *    password  'pwd'
- *    host      'www.example.com'
- *    port      '81'
- *    path      '/dir/dir.2/index.htm'
- *    query     {
- *                  q1: 0,
- *                  test1: null,
- *                  test2: '',
- *                  test3: 'value (escaped)'
- *                  r: [1, 2]
- *              }
- *    fragment  'top'
+ *     protocol  'http'
+ *     user      'usr'
+ *     password  'pwd'
+ *     host      'www.example.com'
+ *     port      '81'
+ *     path      '/dir/dir.2/index.htm'
+ *     query     {
+ *                   q1: '0',
+ *                   test1: null,
+ *                   test2: '',
+ *                   test3: 'value (escaped)'
+ *                   r: ['1', '2']
+ *               }
+ *     fragment  'top'
  *
- * n.b. 'password' is not technically allowed for HTTP URIs, but it is possible with other
- * sorts of URIs.
- * You can modify the properties directly. Then use the toString() method to extract the
- * full URI string again.
+ * (N.b., 'password' is technically not allowed for HTTP URIs, but it is possible with other kinds
+ * of URIs.)
  *
- * Parsing based on parseUri 1.2.2 (c) Steven Levithan <stevenlevithan.com> MIT License
+ * Parsing based on parseUri 1.2.2 (c) Steven Levithan <stevenlevithan.com>, MIT License.
  * http://stevenlevithan.com/demo/parseuri/js/
  *
+ * @class mw.Uri
  */
 
 ( function ( mw, $ ) {
-
        /**
-        * Function that's useful when constructing the URI string -- we frequently encounter the pattern of
-        * having to add something to the URI as we go, but only if it's present, and to include a character before or after if so.
-        * @param {string|undefined} pre To prepend.
-        * @param {string} val To include.
-        * @param {string} post To append.
-        * @param {boolean} raw If true, val will not be encoded.
-        * @return {string} Result.
+        * Function that's useful when constructing the URI string -- we frequently encounter the pattern
+        * of having to add something to the URI as we go, but only if it's present, and to include a
+        * character before or after if so.
+        *
+        * @private
+        * @static
+        * @param {string|undefined} pre To prepend
+        * @param {string} val To include
+        * @param {string} post To append
+        * @param {boolean} raw If true, val will not be encoded
+        * @return {string} Result
         */
        function cat( pre, val, post, raw ) {
                if ( val === undefined || val === null || val === '' ) {
                return pre + ( raw ? val : mw.Uri.encode( val ) ) + post;
        }
 
-       // Regular expressions to parse many common URIs.
+       /**
+        * Regular expressions to parse many common URIs.
+        *
+        * @private
+        * @static
+        * @property {Object} parser
+        */
        var parser = {
                strict: /^(?:([^:\/?#]+):)?(?:\/\/(?:(?:([^:@\/?#]*)(?::([^:@\/?#]*))?)?@)?([^:\/?#]*)(?::(\d*))?)?((?:[^?#\/]*\/)*[^?#]*)(?:\?([^#]*))?(?:#(.*))?/,
                loose:  /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?(?:(?:([^:@\/?#]*)(?::([^:@\/?#]*))?)?@)?([^:\/?#]*)(?::(\d*))?((?:\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?[^?#\/]*)(?:\?([^#]*))?(?:#(.*))?/
        },
 
-       // The order here matches the order of captured matches in the above parser regexes.
+       /**
+        * The order here matches the order of captured matches in the `parser` property regexes.
+        *
+        * @private
+        * @static
+        * @property {Array} properties
+        */
        properties = [
-               'protocol',  // http
-               'user',      // usr
-               'password',  // pwd
-               'host',      // www.example.com
-               'port',      // 81
-               'path',      // /dir/dir.2/index.htm
-               'query',     // q1=0&&test1&test2=value (will become { q1: '0', test1: '', test2: 'value' } )
-               'fragment'   // top
+               'protocol',
+               'user',
+               'password',
+               'host',
+               'port',
+               'path',
+               'query',
+               'fragment'
        ];
 
+       /**
+        * @property {string} protocol For example `http` (always present)
+        */
+       /**
+        * @property {string|undefined} user For example `usr`
+        */
+       /**
+        * @property {string|undefined} password For example `pwd`
+        */
+       /**
+        * @property {string} host For example `www.example.com` (always present)
+        */
+       /**
+        * @property {string|undefined} port For example `81`
+        */
+       /**
+        * @property {string} path For example `/dir/dir.2/index.htm` (always present)
+        */
+       /**
+        * @property {Object} query For example `{ a: '0', b: '', c: 'value' }` (always present)
+        */
+       /**
+        * @property {string|undefined} fragment For example `top`
+        */
 
        /**
-        * We use a factory to inject a document location, for relative URLs, including protocol-relative URLs.
-        * so the library is still testable & purely functional.
+        * A factory method to create a variation of mw.Uri with a different default location (for
+        * relative URLs, including protocol-relative URLs). Used so the library is still testable &
+        * purely functional.
+        *
+        * @method
+        * @member mw
         */
        mw.UriRelative = function ( documentLocation ) {
                var defaultUri;
 
                /**
-                * Constructs URI object. Throws error if arguments are illegal/impossible, or otherwise don't parse.
+                * @class mw.Uri
                 * @constructor
-                * @param {Object|string} uri URI string, or an Object with appropriate properties (especially another URI object to clone).
-                * Object must have non-blank 'protocol', 'host', and 'path' properties.
-                *  This parameter is optional. If omitted (or set to undefined, null or empty string), then an object will be created
-                *  for the default uri of this constructor (e.g. document.location for mw.Uri in MediaWiki core).
-                * @param {Object|boolean} Object with options, or (backwards compatibility) a boolean for strictMode
-                *  - {boolean} strictMode Trigger strict mode parsing of the url. Default: false
-                *  - {boolean} overrideKeys Wether to let duplicate query parameters override eachother (true) or automagically
-                *     convert to an array (false, default).
+                *
+                * Construct a new URI object. Throws error if arguments are illegal/impossible, or
+                * otherwise don't parse.
+                *
+                * @param {Object|string} [uri] URI string, or an Object with appropriate properties (especially
+                *  another URI object to clone). Object must have non-blank `protocol`, `host`, and `path`
+                *  properties. If omitted (or set to `undefined`, `null` or empty string), then an object
+                *  will be created for the default `uri` of this constructor (`document.location` for
+                *  mw.Uri, other values for other instances -- see mw.UriRelative for details).
+                * @param {Object|boolean} [options] Object with options, or (backwards compatibility) a boolean
+                *  for strictMode
+                * @param {boolean} [options.strictMode=false] Trigger strict mode parsing of the url.
+                * @param {boolean} [options.overrideKeys=false] Whether to let duplicate query parameters
+                *  override each other (`true`) or automagically convert them to an array (`false`).
                 */
                function Uri( uri, options ) {
                        options = typeof options === 'object' ? options : { strictMode: !!options };
                }
 
                /**
-                * Standard encodeURIComponent, with extra stuff to make all browsers work similarly and more compliant with RFC 3986
-                * Similar to rawurlencode from PHP and our JS library mw.util.rawurlencode, but we also replace space with a +
-                * @param {string} s String to encode.
-                * @return {string} Encoded string for URI.
+                * Encode a value for inclusion in a url.
+                *
+                * Standard encodeURIComponent, with extra stuff to make all browsers work similarly and more
+                * compliant with RFC 3986. Similar to rawurlencode from PHP and our JS library
+                * mw.util.rawurlencode, except this also replaces spaces with `+`.
+                *
+                * @static
+                * @param {string} s String to encode
+                * @return {string} Encoded string for URI
                 */
                Uri.encode = function ( s ) {
                        return encodeURIComponent( s )
                };
 
                /**
-                * Standard decodeURIComponent, with '+' to space.
-                * @param {string} s String encoded for URI.
-                * @return {string} Decoded string.
+                * Decode a url encoded value.
+                *
+                * Reversed #encode. Standard decodeURIComponent, with addition of replacing
+                * `+` with a space.
+                *
+                * @static
+                * @param {string} s String to decode
+                * @return {string} Decoded string
                 */
                Uri.decode = function ( s ) {
                        return decodeURIComponent( s.replace( /\+/g, '%20' ) );
 
                        /**
                         * Parse a string and set our properties accordingly.
-                        * @param {string} str URI
-                        * @param {Object} options
-                        * @return {boolean} Success.
+                        *
+                        * @private
+                        * @param {string} str URI, see constructor.
+                        * @param {Object} options See constructor.
                         */
                        parse: function ( str, options ) {
-                               var q,
-                                       uri = this,
-                                       matches = parser[ options.strictMode ? 'strict' : 'loose' ].exec( str );
+                               var q, matches,
+                                       uri = this;
+
+                               // Apply parser regex and set all properties based on the result
+                               matches = parser[ options.strictMode ? 'strict' : 'loose' ].exec( str );
                                $.each( properties, function ( i, property ) {
                                        uri[ property ] = matches[ i + 1 ];
                                } );
                                                }
                                        } );
                                }
-                               this.query = q;
+                               uri.query = q;
                        },
 
                        /**
-                        * Returns user and password portion of a URI.
+                        * Get user and password section of a URI.
+                        *
                         * @return {string}
                         */
                        getUserInfo: function () {
                        },
 
                        /**
-                        * Gets host and port portion of a URI.
+                        * Get host and port section of a URI.
+                        *
                         * @return {string}
                         */
                        getHostPort: function () {
                        },
 
                        /**
-                        * Returns the userInfo and host and port portion of the URI.
-                        * In most real-world URLs, this is simply the hostname, but it is more general.
+                        * Get the userInfo, host and port section of the URI.
+                        *
+                        * In most real-world URLs this is simply the hostname, but the definition of 'authority' section is more general.
+                        *
                         * @return {string}
                         */
                        getAuthority: function () {
                        },
 
                        /**
-                        * Returns the query arguments of the URL, encoded into a string
-                        * Does not preserve the order of arguments passed into the URI. Does handle escaping.
+                        * Get the query arguments of the URL, encoded into a string.
+                        *
+                        * Does not preserve the original order of arguments passed in the URI. Does handle escaping.
+                        *
                         * @return {string}
                         */
                        getQueryString: function () {
                        },
 
                        /**
-                        * Returns everything after the authority section of the URI
+                        * Get everything after the authority section of the URI.
+                        *
                         * @return {string}
                         */
                        getRelativePath: function () {
                        },
 
                        /**
-                        * Gets the entire URI string. May not be precisely the same as input due to order of query arguments.
-                        * @return {string} The URI string.
+                        * Get the entire URI string.
+                        *
+                        * May not be precisely the same as input due to order of query arguments.
+                        *
+                        * @return {string} The URI string
                         */
                        toString: function () {
                                return this.protocol + '://' + this.getAuthority() + this.getRelativePath();
 
                        /**
                         * Clone this URI
-                        * @return {Object} new URI object with same properties
+                        *
+                        * @return {Object} New URI object with same properties
                         */
                        clone: function () {
                                return new Uri( this );
                        },
 
                        /**
-                        * Extend the query -- supply query parameters to override or add to ours
-                        * @param {Object} query parameters in key-val form to override or add
-                        * @return {Object} this URI object
+                        * Extend the query section of the URI with new parameters.
+                        *
+                        * @param {Object} parameters Query parameters to add to ours (or to override ours with) as an
+                        *  object
+                        * @return {Object} This URI object
                         */
                        extend: function ( parameters ) {
                                $.extend( this.query, parameters );
                return Uri;
        };
 
-       // if we are running in a browser, inject the current document location, for relative URLs
+       // If we are running in a browser, inject the current document location (for relative URLs).
        if ( document && document.location && document.location.href ) {
                mw.Uri = mw.UriRelative( document.location.href );
        }
index 5623575..f6b5bf3 100644 (file)
@@ -1,6 +1,8 @@
 /**
  * Base library for MediaWiki.
  *
+ * Exposed as globally as `mediaWiki` with `mw` as shortcut.
+ *
  * @class mw
  * @alternateClassName mediaWiki
  * @singleton
@@ -180,6 +182,51 @@ var mw = ( function ( $, undefined ) {
         *
         * Format defaults to 'text'.
         *
+        *     @example
+        *
+        *     var obj, str;
+        *     mw.messages.set( {
+        *         'hello': 'Hello world',
+        *         'hello-user': 'Hello, $1!',
+        *         'welcome-user': 'Welcome back to $2, $1! Last visit by $1: $3'
+        *     } );
+        *
+        *     obj = new mw.Message( mw.messages, 'hello' );
+        *     mw.log( obj.text() );
+        *     // Hello world
+        *
+        *     obj = new mw.Message( mw.messages, 'hello-user', [ 'John Doe' ] );
+        *     mw.log( obj.text() );
+        *     // Hello, John Doe!
+        *
+        *     obj = new mw.Message( mw.messages, 'welcome-user', [ 'John Doe', 'Wikipedia', '2 hours ago' ] );
+        *     mw.log( obj.text() );
+        *     // Welcome back to Wikipedia, John Doe! Last visit by John Doe: 2 hours ago
+        *
+        *     // Using mw.message shortcut
+        *     obj = mw.message( 'hello-user', 'John Doe' );
+        *     mw.log( obj.text() );
+        *     // Hello, John Doe!
+        *
+        *     // Using mw.msg shortcut
+        *     str = mw.msg( 'hello-user', 'John Doe' );
+        *     mw.log( str );
+        *     // Hello, John Doe!
+        *
+        *     // Different formats
+        *     obj = new mw.Message( mw.messages, 'hello-user', [ 'John "Wiki" <3 Doe' ] );
+        *
+        *     obj.format = 'text';
+        *     str = obj.toString();
+        *     // Same as:
+        *     str = obj.text();
+        *
+        *     mw.log( str );
+        *     // Hello, John "Wiki" <3 Doe!
+        *
+        *     mw.log( obj.escaped() );
+        *     // Hello, John &quot;Wiki&quot; &lt;3 Doe!
+        *
         * @class mw.Message
         *
         * @constructor
@@ -414,14 +461,14 @@ var mw = ( function ( $, undefined ) {
                 * Map of configuration values
                 *
                 * Check out [the complete list of configuration values](https://www.mediawiki.org/wiki/Manual:Interface/JavaScript#mw.config)
-                * on MediaWiki.org.
+                * on mediawiki.org.
                 *
-                * If `$wgLegacyJavaScriptGlobals` is true, this Map will put its values in the
-                * global window object.
+                * If `$wgLegacyJavaScriptGlobals` is true, this Map will add its values to the
+                * global `window` object.
                 *
                 * @property {mw.Map} config
                 */
-               // Dummy placeholder. Re-assigned in ResourceLoaderStartupModule with an instance of `mw.Map`.
+               // Dummy placeholder. Re-assigned in ResourceLoaderStartupModule to an instance of `mw.Map`.
                config: null,
 
                /**
@@ -438,7 +485,7 @@ var mw = ( function ( $, undefined ) {
                 * This was reserved for future use but never ended up being used.
                 *
                 * @deprecated since 1.22: Let deprecated identifiers keep their original name
-                * and use mw.log#deprecate to create an access container for tracking.
+                *  and use mw.log#deprecate to create an access container for tracking.
                 * @property
                 */
                legacy: {},
@@ -454,8 +501,9 @@ var mw = ( function ( $, undefined ) {
                /**
                 * Get a message object.
                 *
-                * Similar to wfMessage() in MediaWiki PHP.
+                * Shorcut for `new mw.Message( mw.messages, key, parameters )`.
                 *
+                * @see mw.Message
                 * @param {string} key Key of message to get
                 * @param {Mixed...} parameters Parameters for the $N replacements in messages.
                 * @return {mw.Message}
@@ -467,9 +515,9 @@ var mw = ( function ( $, undefined ) {
                },
 
                /**
-                * Get a message string using 'text' format.
+                * Get a message string using the (default) 'text' format.
                 *
-                * Similar to wfMsg() in MediaWiki PHP.
+                * Shortcut for `mw.message( key, parameters... ).text()`.
                 *
                 * @see mw.Message
                 * @param {string} key Key of message to get
@@ -1445,9 +1493,14 @@ var mw = ( function ( $, undefined ) {
                                /**
                                 * Register a source.
                                 *
-                                * @param {string} id Short lowercase a-Z string representing a source, only used internally.
-                                * @param {Object} props Object containing only the loadScript property which is a url to
-                                *  the load.php location of the source.
+                                * The #work method will use this information to split up requests by source.
+                                *
+                                *     mw.loader.addSource( 'mediawikiwiki', { loadScript: '//www.mediawiki.org/w/load.php' } );
+                                *
+                                * @param {string} id Short string representing a source wiki, used internally for
+                                *  registered modules to indicate where they should be loaded from (usually lowercase a-z).
+                                * @param {Object} props
+                                * @param {string} props.loadScript Url to the load.php entry point of the source wiki.
                                 * @return {boolean}
                                 */
                                addSource: function ( id, props ) {
@@ -1584,6 +1637,12 @@ var mw = ( function ( $, undefined ) {
                                /**
                                 * Execute a function as soon as one or more required modules are ready.
                                 *
+                                * Example of inline dependency on OOjs:
+                                *
+                                *     mw.loader.using( 'oojs', function () {
+                                *         OO.compare( [ 1 ], [ 1 ] );
+                                *     } );
+                                *
                                 * @param {string|Array} dependencies Module name or array of modules names the callback
                                 *  dependends on to be ready before executing
                                 * @param {Function} [ready] callback to execute when all dependencies are ready
@@ -1731,6 +1790,8 @@ var mw = ( function ( $, undefined ) {
                                 * Get the version of a module.
                                 *
                                 * @param {string} module Name of module to get version for
+                                * @return {string|null} The version, or null if the module (or its version) is not
+                                *  in the registry.
                                 */
                                getVersion: function ( module ) {
                                        if ( registry[module] !== undefined && registry[module].version !== undefined ) {
@@ -1760,7 +1821,7 @@ var mw = ( function ( $, undefined ) {
                                },
 
                                /**
-                                * Get names of all registered modules.
+                                * Get the names of all registered modules.
                                 *
                                 * @return {Array}
                                 */
@@ -2040,6 +2101,8 @@ var mw = ( function ( $, undefined ) {
                                         * pages are loaded with different module sets, the possibility exists that
                                         * modules saved by one page will be clobbered by another. But the impact would
                                         * be minor and the problem would be corrected by subsequent page views.
+                                        *
+                                        * @method
                                         */
                                        update: ( function () {
                                                var timer;
@@ -2107,6 +2170,10 @@ var mw = ( function ( $, undefined ) {
                        return {
                                /**
                                 * Escape a string for HTML. Converts special characters to HTML entities.
+                                *
+                                *     mw.html.escape( '< > \' & "' );
+                                *     // Returns &lt; &gt; &#039; &amp; &quot;
+                                *
                                 * @param {string} s The string to escape
                                 */
                                escape: function ( s ) {
index 8fd8496..0713541 100644 (file)
@@ -18,6 +18,8 @@
                map = {
                        // SimpleSearch is broken in Opera < 9.6
                        opera: [['>=', 9.6]],
+                       // Older Konquerors are unable to position the suggestions correctly (bug 50805)
+                       konqueror: [['>=', '4.11']],
                        docomo: false,
                        blackberry: false,
                        ipod: false,
diff --git a/serialized/.gitignore b/serialized/.gitignore
new file mode 100644 (file)
index 0000000..d9d58dd
--- /dev/null
@@ -0,0 +1,4 @@
+/UnicodeData.txt
+/allkeys.txt
+/ucd.all.grouped.xml
+/ucd.all.grouped.zip
index 062155b..c7e7506 100644 (file)
@@ -1,7 +1,7 @@
-
-SPECIAL_TARGETS=Utf8Case.ser
+SPECIAL_TARGETS=Utf8Case.ser normalize-ar.ser normalize-ml.ser first-letters-root.ser
 ALL_TARGETS=$(SPECIAL_TARGETS)
 DIST_TARGETS=$(SPECIAL_TARGETS)
+UNICODE_VERSION=6.0.0
 
 .PHONY: all dist clean
 
@@ -13,6 +13,26 @@ dist: $(DIST_TARGETS)
 clean:
        rm -f $(ALL_TARGETS)
 
-Utf8Case.ser : ../includes/normal/Utf8Case.php
-       php serialize.php -o $@ $<
+Utf8Case.ser: UnicodeData.txt
+       php ../maintenance/language/generateUtf8Case.php
+
+normalize-ar.ser: UnicodeData.txt
+       php ../maintenance/language/generateNormalizerDataAr.php
+
+normalize-ml.ser:
+       php ../maintenance/language/generateNormalizerDataMl.php
+
+first-letters-root.ser: allkeys.txt ucd.all.grouped.xml
+       php ../maintenance/language/generateCollationData.php
+
+UnicodeData.txt:
+       wget http://www.unicode.org/Public/$(UNICODE_VERSION)/ucd/UnicodeData.txt
+
+allkeys.txt:
+       wget http://www.unicode.org/Public/UCA/$(UNICODE_VERSION)/allkeys.txt
+
+ucd.all.grouped.xml: ucd.all.grouped.zip
+       unzip ucd.all.grouped.zip ucd.all.grouped.xml
 
+ucd.all.grouped.zip:
+       wget http://www.unicode.org/Public/$(UNICODE_VERSION)/ucdxml/ucd.all.grouped.zip
diff --git a/serialized/serialize.php b/serialized/serialize.php
deleted file mode 100644 (file)
index 766c1a5..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-<?php
-/**
- * Serialize variables found in input file and store the result in the
- * specified file.
- *
- * 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
- */
-
-if ( !defined( 'MEDIAWIKI' ) ) {
-       $wgNoDBParam = true;
-       $optionsWithArgs = array( 'o' );
-       require_once __DIR__ .'/../maintenance/commandLine.inc';
-
-       $stderr = fopen( 'php://stderr', 'w' );
-       if ( !isset( $args[0] ) ) {
-               fwrite( $stderr, "No input file specified\n" );
-               exit( 1 );
-       }
-       if ( wfIsWindows() ) {
-               $files = array();
-               foreach ( $args as $arg ) {
-                       $files = array_merge( $files, glob( $arg ) );
-               }
-               if ( !$files ) {
-                       fwrite( $stderr, "No files found\n" );
-               }
-       } else {
-               $files = $args;
-       }
-
-       if ( isset( $options['o'] ) ) {
-               $out = fopen( $options['o'], 'wb' );
-               if ( !$out ) {
-                       fwrite( $stderr, "Unable to open file \"{$options['o']}\" for output\n" );
-                       exit( 1 );
-               }
-       } else {
-               $out = fopen( 'php://stdout', 'wb' );
-       }
-
-       $vars = array();
-       foreach ( $files as $inputFile ) {
-               $vars = array_merge( $vars, getVars( $inputFile ) );
-       }
-       fwrite( $out, serialize( $vars ) );
-       fclose( $out );
-       exit( 0 );
-}
-
-//----------------------------------------------------------------------------
-
-function getVars( $_gv_filename ) {
-       require $_gv_filename;
-       $vars = get_defined_vars();
-       unset( $vars['_gv_filename'] );
-
-       # Clean up line endings
-       if ( wfIsWindows() ) {
-               $vars = unixLineEndings( $vars );
-       }
-       return $vars;
-}
-
-function unixLineEndings( $var ) {
-       static $recursionLevel = 0;
-       if ( $recursionLevel > 50 ) {
-               global $stderr;
-               fwrite( $stderr, "Error: Recursion limit exceeded. Possible circular reference in array variable.\n" );
-               exit( 2 );
-       }
-
-       if ( is_array( $var ) ) {
-               ++$recursionLevel;
-               $var = array_map( 'unixLineEndings', $var );
-               --$recursionLevel;
-       } elseif ( is_string( $var ) ) {
-               $var = str_replace( "\r\n", "\n", $var );
-       }
-       return $var;
-}
index ce2c734..a868214 100644 (file)
@@ -12117,7 +12117,7 @@ MSIE CSS safety test: comment in expression
 !! end
 
 !! test
-CSS safety test: vertical tab
+CSS safety test (all browsers): vertical tab (bug 55332 / CVE-2013-4567)
 !! input
 <p style="font-size: 100px; background-image:url\b(https://www.google.com/images/srpr/logo6w.png)">A</p>
 !! result
@@ -12126,7 +12126,7 @@ CSS safety test: vertical tab
 !! end
 
 !! test
-MSIE CSS safety test: Fullwidth
+MSIE 6 CSS safety test: Fullwidth (bug 55332)
 !! input
 <p style="font-size: 100px; color: expression((title='XSSed'),'red')">A</p>
 <div style="top:EXPRESSION(alert())">B</div>
@@ -12137,7 +12137,7 @@ MSIE CSS safety test: Fullwidth
 !! end
 
 !! test
-MSIE CSS safety test: IPA extensions
+MSIE 6 CSS safety test: IPA extensions (bug 55332)
 !! input
 <div style="background-image:uʀʟ(javascript:alert())">A</div>
 <p style="font-size: 100px; color: expʀessɪoɴ((title='XSSed'),'red')">B</p>
@@ -12148,7 +12148,7 @@ MSIE CSS safety test: IPA extensions
 !! end
 
 !! test
-MSIE CSS safety test: sup/sub script
+MSIE 6 CSS safety test: sup/sub script (bug 55332)
 !! input
 <div style="background-image:url⁽javascript:alert())">A</div>
 <div style="background-image:url₍javascript:alert())">B</div>
@@ -12161,7 +12161,18 @@ MSIE CSS safety test: sup/sub script
 !! end
 
 !! test
-MSIE CSS safety test: Repetition markers
+Opera -o-link CSS
+!! input
+<div
+title="&#100;&#97;&#116;&#97;&#58;&#116;&#101;&#120;&#116;&#47;&#104;&#116;&#109;&#108;&#44;&#60;&#105;&#109;&#103;&#32;&#115;&#114;&#99;&#61;&#49;&#32;&#111;&#110;&#101;&#114;&#114;&#111;&#114;&#61;&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;&#62;"
+style="-o-link:attr(title);-o-link-source:current">X</div>
+!! result
+<div title="data:text/html,&lt;img src=1 onerror=alert(1)&gt;" style="/* insecure input */">X</div>
+
+!! end
+
+!! test
+MSIE 6 CSS safety test: Repetition markers (bug 55332)
 !! input
 <p style="font-size: 100px; color: expres〱ion((title='XSSed'),'red')">A</p>
 <p style="font-size: 100px; color: expresゝion((title='XSSed'),'red')">B</p>
@@ -16687,6 +16698,19 @@ language=be-tarask
 </p>
 !! end
 
+!! test
+Wrong option for formatNum (bug 56199)
+!! input
+{{formatnum:1,234.56|Random}}
+{{formatnum:1,234.56|EVERYTHING}}
+{{formatnum:1234.56|any argument that has the string 'NOSEP'}}
+!! result
+<p>1,234.56
+1,234.56
+1,234.56
+</p>
+!! end
+
 !! test
 Strip marker in grammar
 !! options
index 9ebca3f..95b5047 100644 (file)
@@ -966,4 +966,44 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
 
                $this->assertInstanceOf( $expected, $pokemons, $message );
        }
+
+       /**
+        * Asserts that the given string is a valid HTML snippet.
+        * Wraps the given string in the required top level tags and
+        * then calls assertValidHtmlDocument().
+        * The snippet is expected to be HTML 5.
+        *
+        * @note: Will mark the test as skipped if the "tidy" module is not installed.
+        * @note: This ignores $wgUseTidy, so we can check for valid HTML even (and especially)
+        *        when automatic tidying is disabled.
+        *
+        * @param string $html An HTML snippet (treated as the contents of the body tag).
+        */
+       protected function assertValidHtmlSnippet( $html ) {
+               $html = '<!DOCTYPE html><html><head><title>test</title></head><body>' . $html . '</body></html>';
+               $this->assertValidHtmlDocument( $html );
+       }
+
+       /**
+        * Asserts that the given string is valid HTML document.
+        *
+        * @note: Will mark the test as skipped if the "tidy" module is not installed.
+        * @note: This ignores $wgUseTidy, so we can check for valid HTML even (and especially)
+        *        when automatic tidying is disabled.
+        *
+        * @param string $html A complete HTML document
+        */
+       protected function assertValidHtmlDocument( $html ) {
+               // Note: we only validate if the tidy PHP extension is available.
+               // In case wgTidyInternal is false, MWTidy would fall back to the command line version
+               // of tidy. In that case however, we can not reliably detect whether a failing validation
+               // is due to malformed HTML, or caused by tidy not being installed as a command line tool.
+               // That would cause all HTML assertions to fail on a system that has no tidy installed.
+               if ( !$GLOBALS['wgTidyInternal'] ) {
+                       $this->markTestSkipped( 'Tidy extension not installed' );
+               }
+
+               $ok = MWTidy::checkErrors( $html, $errors );
+               $this->assertTrue( $ok, 'HTML validation errors: ' . $errors );
+       }
 }
diff --git a/tests/phpunit/data/autoloader/TestAutoloadedAliasedClassNew.php b/tests/phpunit/data/autoloader/TestAutoloadedAliasedClassNew.php
deleted file mode 100644 (file)
index 5ce8483..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<?php
-
-class TestAutoloadedAliasedClassNew {
-}
index 7ef0b60..99a6efd 100644 (file)
@@ -16,6 +16,8 @@ class HtmlFormatterTest extends MediaWikiTestCase {
                }
                $formatter->filterContent();
                $html = $formatter->getText();
+
+               $this->assertValidHtmlSnippet( $html );
                $this->assertEquals( self::normalize( $expected ), self::normalize( $html ) );
        }
 
index 1dbc74c..cee2da2 100644 (file)
@@ -1324,7 +1324,7 @@ class FileBackendTest extends MediaWikiTestCase {
                $cases[] = array(
                        array( "$base/unittest-cont1/e/a/x.txt", "$base/unittest-cont1/e/a/y.txt",
                                "$base/unittest-cont1/e/a/z.txt" ),
-                       array( "contents xx", "contents xy", "contents xz" )
+                       array( "contents xx $", "contents xy 111", "contents xz" )
                );
 
                return $cases;
@@ -1391,7 +1391,7 @@ class FileBackendTest extends MediaWikiTestCase {
                $cases[] = array(
                        array( "$base/unittest-cont1/e/a/x.txt", "$base/unittest-cont1/e/a/y.txt",
                                "$base/unittest-cont1/e/a/z.txt" ),
-                       array( "contents xx", "contents xy", "contents xz" )
+                       array( "contents xx 1111", "contents xy %", "contents xz $" )
                );
 
                return $cases;
index 24b077a..1267268 100644 (file)
@@ -297,6 +297,8 @@ class IPTest extends MediaWikiTestCase {
                        array( 16909060, '1.2.3.4' ),
                        array( 2130706433, '127.0.0.1' ),
                        array( '2147483648', '128.0.0.0' ),
+                       array( 2130706440, '127.0.0.08' ),
+                       array( 2130706441, '127.0.0.09' ),
                        array( '3735931646', '222.173.202.254' ),
                        array( pow( 2, 32 ) - 1, '255.255.255.255' ),
                        array( false, 'IN.VA.LI.D' ),
index 1ffe811..d8b90d5 100644 (file)
@@ -11,9 +11,6 @@ class AutoLoaderTest extends MediaWikiTestCase {
                        'TestAutoloadedLocalClass' => __DIR__ . '/../data/autoloader/TestAutoloadedLocalClass.php',
                        'TestAutoloadedCamlClass' => __DIR__ . '/../data/autoloader/TestAutoloadedCamlClass.php',
                        'TestAutoloadedSerializedClass' => __DIR__ . '/../data/autoloader/TestAutoloadedSerializedClass.php',
-                       'TestAutoloadedAliasedClass' => 'alias:TestAutoloadedAliasedClassNew',
-                       'TestAutoloadedAliasedClassDeprecated' => 'alias:TestAutoloadedAliasedClassNew?v=1.1',
-                       'TestAutoloadedAliasedClassNew' => __DIR__ . '/../data/autoloader/TestAutoloadedAliasedClassNew.php',
                );
                $this->setMwGlobals( 'wgAutoloadLocalClasses', $this->testLocalClasses + $wgAutoloadLocalClasses );
                AutoLoader::resetAutoloadLocalClassesLower();
@@ -47,23 +44,7 @@ class AutoLoaderTest extends MediaWikiTestCase {
                $expected = $wgAutoloadLocalClasses + $wgAutoloadClasses;
                $actual = array();
 
-               // Check aliases
-               foreach ( $expected as $class => $file ) {
-                       if ( substr( $file, 0, 6 ) !== 'alias:' ) {
-                               // Not an alias, so should be an actual file
-                               $files[] = $file;
-                       } else {
-                               $newClass = substr( $file, 6, strcspn( $file, '?', 6 ) );
-                               if ( isset( $expected[$newClass] ) ) {
-                                       if ( substr( $expected[$newClass], 0, 6 ) !== 'alias:' ) {
-                                               // Alias pointing to an existing MediaWiki class
-                                               $actual[$class] = $file;
-                                       }
-                               }
-                       }
-               }
-
-               $files = array_unique( $files );
+               $files = array_unique( $expected );
 
                foreach ( $files as $file ) {
                        // Only prefix $IP if it doesn't have it already.
@@ -111,16 +92,4 @@ class AutoLoaderTest extends MediaWikiTestCase {
                $this->assertFalse( $uncerealized instanceof __PHP_Incomplete_Class,
                        "unserialize() can load classes case-insensitively." );
        }
-
-       function testAliasedClass() {
-               $this->assertSame( 'TestAutoloadedAliasedClassNew',
-                       get_class( new TestAutoloadedAliasedClass ) );
-       }
-
-       function testAliasedClassDeprecated() {
-               wfSuppressWarnings();
-               $this->assertSame( 'TestAutoloadedAliasedClassNew',
-                       get_class( new TestAutoloadedAliasedClassDeprecated ) );
-               wfRestoreWarnings();
-       }
 }
index 90cd546..6e13e13 100644 (file)
@@ -10,8 +10,7 @@
 
        QUnit.module( 'mediawiki.jqueryMsg', QUnit.newMwEnvironment( {
                setup: function () {
-                       this.orgMwLangauge = mw.language;
-                       mw.language = $.extend( true, {}, this.orgMwLangauge );
+                       this.originalMwLanguage = mw.language;
 
                        // Messages that are reused in multiple tests
                        mw.messages.set( {
@@ -55,7 +54,7 @@
                        } );
                },
                teardown: function () {
-                       mw.language = this.orgMwLangauge;
+                       mw.language = this.originalMwLanguage;
                }
        } ) );