Merge "RELNOTES for Skin::__call unroll & removal"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Fri, 22 Apr 2016 06:54:02 +0000 (06:54 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Fri, 22 Apr 2016 06:54:02 +0000 (06:54 +0000)
59 files changed:
autoload.php
includes/DefaultSettings.php
includes/DummyLinker.php [new file with mode: 0644]
includes/LinkTarget.php
includes/Linker.php
includes/MediaWiki.php
includes/MediaWikiServices.php
includes/ServiceWiring.php
includes/SiteStats.php
includes/Status.php
includes/api/i18n/es.json
includes/api/i18n/fi.json
includes/cache/MessageCache.php
includes/context/ContextSource.php
includes/context/DerivativeContext.php
includes/context/IContextSource.php
includes/context/RequestContext.php
includes/diff/TableDiffFormatter.php
includes/externalstore/ExternalStoreDB.php
includes/jobqueue/JobQueueGroup.php
includes/jobqueue/JobQueueRedis.php
includes/libs/StatusValue.php
includes/libs/eventrelayer/EventRelayer.php
includes/libs/eventrelayer/EventRelayerKafka.php [new file with mode: 0644]
includes/libs/objectcache/WANObjectCache.php
includes/session/SessionBackend.php
includes/session/SessionManager.php
includes/skins/Skin.php
includes/specials/SpecialSearch.php [changed mode: 0644->0755]
includes/specials/SpecialUserlogin.php
includes/title/TitleValue.php
languages/data/Names.php
languages/i18n/be-tarask.json
languages/i18n/ce.json
languages/i18n/eo.json
languages/i18n/gu.json
languages/i18n/he.json
languages/i18n/hy.json
languages/i18n/ja.json
languages/i18n/jv.json
languages/i18n/lb.json
languages/i18n/mai.json
languages/i18n/mt.json
languages/i18n/nan.json
languages/i18n/ru.json
languages/i18n/sv.json
languages/i18n/ta.json
languages/i18n/tcy.json
languages/i18n/wuu.json
languages/i18n/yi.json
languages/i18n/zh-hans.json
languages/messages/MessagesCs.php
resources/lib/oojs-ui/oojs-ui-toolbars-apex.css
resources/lib/oojs-ui/oojs-ui-toolbars-mediawiki.css
resources/src/mediawiki/api/upload.js
tests/phpunit/includes/MediaWikiServicesTest.php
tests/phpunit/includes/WatchedItemIntegrationTest.php
tests/phpunit/includes/session/SessionManagerTest.php
tests/phpunit/includes/title/TitleValueTest.php

index b851e39..d3b7ba7 100644 (file)
@@ -357,7 +357,7 @@ $wgAutoloadLocalClasses = [
        'DoubleRedirectJob' => __DIR__ . '/includes/jobqueue/jobs/DoubleRedirectJob.php',
        'DoubleRedirectsPage' => __DIR__ . '/includes/specials/SpecialDoubleRedirects.php',
        'DoubleReplacer' => __DIR__ . '/includes/libs/replacers/DoubleReplacer.php',
-       'DummyLinker' => __DIR__ . '/includes/Linker.php',
+       'DummyLinker' => __DIR__ . '/includes/DummyLinker.php',
        'DummyTermColorer' => __DIR__ . '/maintenance/term/MWTerm.php',
        'Dump7ZipOutput' => __DIR__ . '/includes/export/Dump7ZipOutput.php',
        'DumpBZip2Output' => __DIR__ . '/includes/export/DumpBZip2Output.php',
@@ -397,6 +397,7 @@ $wgAutoloadLocalClasses = [
        'ErrorPageError' => __DIR__ . '/includes/exception/ErrorPageError.php',
        'EventRelayer' => __DIR__ . '/includes/libs/eventrelayer/EventRelayer.php',
        'EventRelayerGroup' => __DIR__ . '/includes/EventRelayerGroup.php',
+       'EventRelayerKafka' => __DIR__ . '/includes/libs/eventrelayer/EventRelayerKafka.php',
        'EventRelayerNull' => __DIR__ . '/includes/libs/eventrelayer/EventRelayerNull.php',
        'Exif' => __DIR__ . '/includes/media/Exif.php',
        'ExifBitmapHandler' => __DIR__ . '/includes/media/ExifBitmap.php',
index 10e6adb..08084f4 100644 (file)
@@ -2589,6 +2589,13 @@ $wgCdnMaxageLagged = 30;
  */
 $wgCdnReboundPurgeDelay = 0;
 
+/**
+ * Cache timeout for the CDN when a response is known to be wrong or incomplete (due to load)
+ * @see $wgSquidMaxage
+ * @since 1.27
+ */
+$wgCdnMaxageSubstitute = 60;
+
 /**
  * Default maximum age for raw CSS/JS accesses
  *
@@ -5896,7 +5903,7 @@ $wgStatsdServer = false;
 /**
  * Prefix for metric names sent to $wgStatsdServer.
  *
- * @see RequestContext::getStats
+ * @see MediaWikiServices::getStatsdDataFactory
  * @see BufferingStatsdDataFactory
  * @since 1.25
  */
diff --git a/includes/DummyLinker.php b/includes/DummyLinker.php
new file mode 100644 (file)
index 0000000..45535ce
--- /dev/null
@@ -0,0 +1,517 @@
+<?php
+
+/**
+ * @since 1.18
+ */
+class DummyLinker {
+
+       /**
+        * @deprecated since 1.27
+        */
+       public function getInterwikiLinkAttributes( $title, $unused = null, $class = 'external' ) {
+               wfDeprecated( __METHOD__, '1.27' );
+               return Linker::getInterwikiLinkAttributes(
+                       $title,
+                       $unused,
+                       $class
+               );
+       }
+
+       /**
+        * @deprecated since 1.27
+        */
+       public function getInternalLinkAttributes( $title, $unused = null, $class = '' ) {
+               wfDeprecated( __METHOD__, '1.27' );
+               return Linker::getInternalLinkAttributes(
+                       $title,
+                       $unused,
+                       $class
+               );
+       }
+
+       /**
+        * @deprecated since 1.27
+        */
+       public function getInternalLinkAttributesObj(
+               $nt,
+               $unused = null,
+               $class = '',
+               $title = false
+       ) {
+               wfDeprecated( __METHOD__, '1.27' );
+               return Linker::getInternalLinkAttributesObj(
+                       $nt,
+                       $unused,
+                       $class,
+                       $title
+               );
+       }
+
+       public function getLinkColour( $t, $threshold ) {
+               return Linker::getLinkColour( $t, $threshold );
+       }
+
+       public function link(
+               $target,
+               $html = null,
+               $customAttribs = [ ],
+               $query = [ ],
+               $options = [ ]
+       ) {
+               return Linker::link(
+                       $target,
+                       $html,
+                       $customAttribs,
+                       $query,
+                       $options
+               );
+       }
+
+       public function linkKnown(
+               $target,
+               $html = null,
+               $customAttribs = [ ],
+               $query = [ ],
+               $options = [ 'known', 'noclasses' ]
+       ) {
+               return Linker::linkKnown(
+                       $target,
+                       $html,
+                       $customAttribs,
+                       $query,
+                       $options
+               );
+       }
+
+       public function makeSelfLinkObj(
+               $nt,
+               $html = '',
+               $query = '',
+               $trail = '',
+               $prefix = ''
+       ) {
+               return Linker::makeSelfLinkObj(
+                       $nt,
+                       $html,
+                       $query,
+                       $trail,
+                       $prefix
+               );
+       }
+
+       public function getInvalidTitleDescription(
+               IContextSource $context,
+               $namespace,
+               $title
+       ) {
+               return Linker::getInvalidTitleDescription(
+                       $context,
+                       $namespace,
+                       $title
+               );
+       }
+
+       public function normaliseSpecialPage( Title $title ) {
+               return Linker::normaliseSpecialPage( $title );
+       }
+
+       public function makeExternalImage( $url, $alt = '' ) {
+               return Linker::makeExternalImage( $url, $alt );
+       }
+
+       public function makeImageLink(
+               Parser $parser,
+               Title $title,
+               $file,
+               $frameParams = [ ],
+               $handlerParams = [ ],
+               $time = false,
+               $query = "",
+               $widthOption = null
+       ) {
+               return Linker::makeImageLink(
+                       $parser,
+                       $title,
+                       $file,
+                       $frameParams,
+                       $handlerParams,
+                       $time,
+                       $query,
+                       $widthOption
+               );
+       }
+
+       public function makeThumbLinkObj(
+               Title $title,
+               $file,
+               $label = '',
+               $alt,
+               $align = 'right',
+               $params = [ ],
+               $framed = false,
+               $manualthumb = ""
+       ) {
+               return Linker::makeThumbLinkObj(
+                       $title,
+                       $file,
+                       $label,
+                       $alt,
+                       $align,
+                       $params,
+                       $framed,
+                       $manualthumb
+               );
+       }
+
+       public function makeThumbLink2(
+               Title $title,
+               $file,
+               $frameParams = [ ],
+               $handlerParams = [ ],
+               $time = false,
+               $query = ""
+       ) {
+               return Linker::makeThumbLink2(
+                       $title,
+                       $file,
+                       $frameParams,
+                       $handlerParams,
+                       $time,
+                       $query
+               );
+       }
+
+       public function processResponsiveImages( $file, $thumb, $hp ) {
+               Linker::processResponsiveImages(
+                       $file,
+                       $thumb,
+                       $hp
+               );
+       }
+
+       public function makeBrokenImageLinkObj(
+               $title,
+               $label = '',
+               $query = '',
+               $unused1 = '',
+               $unused2 = '',
+               $time = false
+       ) {
+               return Linker::makeBrokenImageLinkObj(
+                       $title,
+                       $label,
+                       $query,
+                       $unused1,
+                       $unused2,
+                       $time
+               );
+       }
+
+       public function makeMediaLinkObj( $title, $html = '', $time = false ) {
+               return Linker::makeMediaLinkObj(
+                       $title,
+                       $html,
+                       $time
+               );
+       }
+
+       public function makeMediaLinkFile( Title $title, $file, $html = '' ) {
+               return Linker::makeMediaLinkFile(
+                       $title,
+                       $file,
+                       $html
+               );
+       }
+
+       public function specialLink( $name, $key = '' ) {
+               return Linker::specialLink( $name, $key );
+       }
+
+       public function makeExternalLink(
+               $url,
+               $text,
+               $escape = true,
+               $linktype = '',
+               $attribs = [ ],
+               $title = null
+       ) {
+               return Linker::makeExternalLink(
+                       $url,
+                       $text,
+                       $escape,
+                       $linktype,
+                       $attribs,
+                       $title
+               );
+       }
+
+       public function userLink( $userId, $userName, $altUserName = false ) {
+               return Linker::userLink(
+                       $userId,
+                       $userName,
+                       $altUserName
+               );
+       }
+
+       public function userToolLinks(
+               $userId,
+               $userText,
+               $redContribsWhenNoEdits = false,
+               $flags = 0,
+               $edits = null
+       ) {
+               return Linker::userToolLinks(
+                       $userId,
+                       $userText,
+                       $redContribsWhenNoEdits,
+                       $flags,
+                       $edits
+               );
+       }
+
+       public function userToolLinksRedContribs( $userId, $userText, $edits = null ) {
+               return Linker::userToolLinksRedContribs(
+                       $userId,
+                       $userText,
+                       $edits
+               );
+       }
+
+       public function userTalkLink( $userId, $userText ) {
+               return Linker::userTalkLink( $userId, $userText );
+       }
+
+       public function blockLink( $userId, $userText ) {
+               return Linker::blockLink( $userId, $userText );
+       }
+
+       public function emailLink( $userId, $userText ) {
+               return Linker::emailLink( $userId, $userText );
+       }
+
+       public function revUserLink( $rev, $isPublic = false ) {
+               return Linker::revUserLink( $rev, $isPublic );
+       }
+
+       public function revUserTools( $rev, $isPublic = false ) {
+               return Linker::revUserTools( $rev, $isPublic );
+       }
+
+       public function formatComment(
+               $comment,
+               $title = null,
+               $local = false,
+               $wikiId = null
+       ) {
+               return Linker::formatComment(
+                       $comment,
+                       $title,
+                       $local,
+                       $wikiId
+               );
+       }
+
+       public function formatLinksInComment(
+               $comment,
+               $title = null,
+               $local = false,
+               $wikiId = null
+       ) {
+               return Linker::formatLinksInComment(
+                       $comment,
+                       $title,
+                       $local,
+                       $wikiId
+               );
+       }
+
+       public function makeCommentLink(
+               Title $title,
+               $text,
+               $wikiId = null,
+               $options = [ ]
+       ) {
+               return Linker::makeCommentLink(
+                       $title,
+                       $text,
+                       $wikiId,
+                       $options
+               );
+       }
+
+       public function normalizeSubpageLink( $contextTitle, $target, &$text ) {
+               return Linker::normalizeSubpageLink(
+                       $contextTitle,
+                       $target,
+                       $text
+               );
+       }
+
+       public function commentBlock(
+               $comment,
+               $title = null,
+               $local = false,
+               $wikiId = null
+       ) {
+               return Linker::commentBlock(
+                       $comment,
+                       $title,
+                       $local,
+                       $wikiId
+               );
+       }
+
+       public function revComment( Revision $rev, $local = false, $isPublic = false ) {
+               return Linker::revComment( $rev, $local, $isPublic );
+       }
+
+       public function formatRevisionSize( $size ) {
+               return Linker::formatRevisionSize( $size );
+       }
+
+       public function tocIndent() {
+               return Linker::tocIndent();
+       }
+
+       public function tocUnindent( $level ) {
+               return Linker::tocUnindent( $level );
+       }
+
+       public function tocLine( $anchor, $tocline, $tocnumber, $level, $sectionIndex = false ) {
+               return Linker::tocLine(
+                       $anchor,
+                       $tocline,
+                       $tocnumber,
+                       $level,
+                       $sectionIndex
+               );
+       }
+
+       public function tocLineEnd() {
+               return Linker::tocLineEnd();
+       }
+
+       public function tocList( $toc, $lang = false ) {
+               return Linker::tocList( $toc, $lang );
+       }
+
+       public function generateTOC( $tree, $lang = false ) {
+               return Linker::generateTOC( $tree, $lang );
+       }
+
+       public function makeHeadline(
+               $level,
+               $attribs,
+               $anchor,
+               $html,
+               $link,
+               $legacyAnchor = false
+       ) {
+               return Linker::makeHeadline(
+                       $level,
+                       $attribs,
+                       $anchor,
+                       $html,
+                       $link,
+                       $legacyAnchor
+               );
+       }
+
+       public function splitTrail( $trail ) {
+               return Linker::splitTrail( $trail );
+       }
+
+       public function generateRollback(
+               $rev,
+               IContextSource $context = null,
+               $options = [ 'verify' ]
+       ) {
+               return Linker::generateRollback(
+                       $rev,
+                       $context,
+                       $options
+               );
+       }
+
+       public function getRollbackEditCount( $rev, $verify ) {
+               return Linker::getRollbackEditCount( $rev, $verify );
+       }
+
+       public function buildRollbackLink(
+               $rev,
+               IContextSource $context = null,
+               $editCount = false
+       ) {
+               return Linker::buildRollbackLink(
+                       $rev,
+                       $context,
+                       $editCount
+               );
+       }
+
+       public function formatTemplates(
+               $templates,
+               $preview = false,
+               $section = false,
+               $more = null
+       ) {
+               return Linker::formatTemplates(
+                       $templates,
+                       $preview,
+                       $section,
+                       $more
+               );
+       }
+
+       public function formatHiddenCategories( $hiddencats ) {
+               return Linker::formatHiddenCategories( $hiddencats );
+       }
+
+       public function formatSize( $size ) {
+               return Linker::formatSize( $size );
+       }
+
+       public function titleAttrib( $name, $options = null, array $msgParams = [ ] ) {
+               return Linker::titleAttrib(
+                       $name,
+                       $options,
+                       $msgParams
+               );
+       }
+
+       public function accesskey( $name ) {
+               return Linker::accesskey( $name );
+       }
+
+       public function getRevDeleteLink( User $user, Revision $rev, Title $title ) {
+               return Linker::getRevDeleteLink(
+                       $user,
+                       $rev,
+                       $title
+               );
+       }
+
+       public function revDeleteLink( $query = [ ], $restricted = false, $delete = true ) {
+               return Linker::revDeleteLink(
+                       $query,
+                       $restricted,
+                       $delete
+               );
+       }
+
+       public function revDeleteLinkDisabled( $delete = true ) {
+               return Linker::revDeleteLinkDisabled( $delete );
+       }
+
+       public function tooltipAndAccesskeyAttribs( $name, array $msgParams = [ ] ) {
+               return Linker::tooltipAndAccesskeyAttribs(
+                       $name,
+                       $msgParams
+               );
+       }
+
+       public function tooltip( $name, $options = null ) {
+               return Linker::tooltip( $name, $options );
+       }
+
+}
index 175a839..8246f7d 100644 (file)
@@ -21,6 +21,13 @@ interface LinkTarget {
         */
        public function getFragment();
 
+       /**
+        * Whether the link target has a fragment
+        *
+        * @return bool
+        */
+       public function hasFragment();
+
        /**
         * Get the main part with underscores.
         *
index 4ba3a75..a5c85a9 100644 (file)
@@ -2360,20 +2360,3 @@ class Linker {
 
 }
 
-/**
- * @since 1.18
- */
-class DummyLinker {
-
-       /**
-        * Use PHP's magic __call handler to transform instance calls to a dummy instance
-        * into static calls to the new Linker for backwards compatibility.
-        *
-        * @param string $fname Name of called method
-        * @param array $args Arguments to the method
-        * @return mixed
-        */
-       public function __call( $fname, $args ) {
-               return call_user_func_array( [ 'Linker', $fname ], $args );
-       }
-}
index ad02e68..3dd7420 100644 (file)
@@ -585,6 +585,13 @@ class MediaWiki {
                        $request->response()->header( "X-Database-Lagged: true" );
                        wfDebugLog( 'replication', "Lagged DB used; CDN cache TTL limited to $maxAge seconds" );
                }
+
+               // Avoid long-term cache pollution due to message cache rebuild timeouts (T133069)
+               if ( MessageCache::singleton()->isDisabled() ) {
+                       $maxAge = $config->get( 'CdnMaxageSubstitute' );
+                       $context->getOutput()->lowerCdnMaxage( $maxAge );
+                       $request->response()->header( "X-Response-Substitute: true" );
+               }
        }
 
        /**
index 7b1def9..3f4d8ed 100644 (file)
@@ -6,6 +6,7 @@ use GlobalVarConfig;
 use Config;
 use Hooks;
 use LBFactory;
+use Liuggio\StatsdClient\Factory\StatsdDataFactory;
 use LoadBalancer;
 use MediaWiki\Services\ServiceContainer;
 use SiteLookup;
@@ -144,6 +145,13 @@ class MediaWikiServices extends ServiceContainer {
                return $this->getService( 'SiteStore' );
        }
 
+       /**
+        * @return StatsdDataFactory
+        */
+       public function getStatsdDataFactory() {
+               return $this->getService( 'StatsdDataFactory' );
+       }
+
        ///////////////////////////////////////////////////////////////////////////
        // NOTE: When adding a service getter here, don't forget to add a test
        // case for it in MediaWikiServicesTest::provideGetters() and in
index d8709b9..7e1d4e3 100644 (file)
@@ -72,6 +72,12 @@ return [
                return $services->getConfigFactory()->makeConfig( 'main' );
        },
 
+       'StatsdDataFactory' => function( MediaWikiServices $services ) {
+               return new BufferingStatsdDataFactory(
+                       rtrim( $services->getMainConfig()->get( 'StatsdMetricPrefix' ), '.' )
+               );
+       },
+
        ///////////////////////////////////////////////////////////////////////////
        // NOTE: When adding a service here, don't forget to add a getter function
        // in the MediaWikiServices class. The convenience getter should just call
index acd5262..215378b 100644 (file)
@@ -202,8 +202,11 @@ class SiteStats {
         */
        static function jobs() {
                if ( !isset( self::$jobs ) ) {
-                       $dbr = wfGetDB( DB_SLAVE );
-                       self::$jobs = array_sum( JobQueueGroup::singleton()->getQueueSizes() );
+                       try{
+                               self::$jobs = array_sum( JobQueueGroup::singleton()->getQueueSizes() );
+                       } catch ( JobQueueError $e ) {
+                               self::$jobs = 0;
+                       }
                        /**
                         * Zero rows still do single row read for row that doesn't exist,
                         * but people are annoyed by that
index cc7abc8..3d2c887 100644 (file)
@@ -420,8 +420,11 @@ class Status {
         * Returns a list of status messages of the given type, with message and
         * params left untouched, like a sane version of getStatusArray
         *
-        * @param string $type
+        * Each entry is a map of:
+        *   - message: string message key or MessageSpecifier
+        *   - params: array list of parameters
         *
+        * @param string $type
         * @return array
         */
        public function getErrorsByType( $type ) {
index c4479a4..9ab2ec2 100644 (file)
@@ -17,7 +17,8 @@
                        "Eloy",
                        "AlvaroMolina",
                        "Ciencia Al Poder",
-                       "Lemondoge"
+                       "Lemondoge",
+                       "Mgpena"
                ]
        },
        "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Documentación]]\n* [[mw:API:FAQ|Preguntas frecuentes]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Lista de correos]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API de anuncios]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Errores y peticiones]\n</div>\n<strong>Estado:</strong> Todas las características que se muestran en esta página debería funcionar, pero la API aún está en desarrollo activo y puede cambiar en cualquier momento. Suscríbete a [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ la lista de correo de mediawiki-api-announce] para estar al día de las actualizaciones.\n\n<strong>Solicitudes erróneas:</strong> Cuando se envían solicitudes erróneas a la API, se envía un encabezado HTTP con la clave \"MediaWiki-API-Error\" y ambos valores, del encabezado y el código de error, se establecerán en el mismo valor. Para más información, véase [[mw:API:Errors_and_warnings|API: Errores y advertencias]].\n\n<strong>Pruebas:</strong> para facilitar las pruebas de solicitudes a la API, consulta [[Special:ApiSandbox]].",
@@ -79,6 +80,7 @@
        "apihelp-delete-param-reason": "Motivo de la eliminación. Si no se especifica, se generará uno automáticamente.",
        "apihelp-delete-param-tags": "Cambio de etiquetas para aplicar a la entrada en la eliminación del registro.",
        "apihelp-delete-param-watch": "Añadir esta página a la lista de seguimiento del usuario actual.",
+       "apihelp-delete-param-watchlist": "Incondicionalmente agregar o remover la página de la actual watchlist del usuario, usar las preferencias o no cambiar watch.",
        "apihelp-delete-param-unwatch": "Quitar la página de la lista de seguimiento del usuario actual.",
        "apihelp-delete-example-simple": "Borrar <kbd>Main Page</kbd>.",
        "apihelp-delete-example-reason": "Eliminar <kbd>Main Page</kbd> con el motivo <kbd>Preparing for move</kbd>.",
        "apihelp-expandtemplates-param-text": "Sintaxis wiki que se convertirá.",
        "apihelp-expandtemplates-param-revid": "Revisión de ID, para <nowiki>{{REVISIONID}}</nowiki> y variables similares.",
        "apihelp-expandtemplates-paramvalue-prop-wikitext": "El wikitexto expandido.",
+       "apihelp-expandtemplates-paramvalue-prop-categories": "Cualquier categoría presente en la entrada que no están representados en el wikitexto resultado.",
        "apihelp-expandtemplates-paramvalue-prop-properties": "Propiedades de página definidas por palabras mágicas en el wikitexto.",
        "apihelp-expandtemplates-paramvalue-prop-ttl": "El tiempo máximo tras el cual deberían invalidarse los resultados en caché.",
        "apihelp-expandtemplates-paramvalue-prop-jsconfigvars": "Da las variables de configuración JavaScript específicas para la página.",
index 4ea465c..8456b61 100644 (file)
@@ -30,6 +30,8 @@
        "apihelp-createaccount-param-name": "Käyttäjätunnus.",
        "apihelp-createaccount-param-email": "Käyttäjän sähköpostiosoite (valinnainen).",
        "apihelp-createaccount-param-realname": "Käyttäjän oikea nimi (valinnainen).",
+       "apihelp-createaccount-example-pass": "Luo käyttäjä <kbd>testuser</kbd> salasanalla <kbd>test123</kbd>.",
+       "apihelp-createaccount-example-mail": "Luo käyttäjä <kbd>testmailuset</kbd> ja lähetä sähköpostilla satunnaisesti luotu salasana.",
        "apihelp-delete-description": "Poista sivu.",
        "apihelp-delete-param-watch": "Lisää sivu nykyisen käyttäjän tarkkailulistalle.",
        "apihelp-delete-param-unwatch": "Poista sivu nykyisen käyttäjän tarkkailulistalta.",
        "apihelp-edit-param-unwatch": "Poista sivu nykyisen käyttäjän tarkkailulistalta.",
        "apihelp-edit-example-edit": "Muokkaa sivua.",
        "apihelp-emailuser-description": "Lähetä sähköpostia käyttäjälle.",
+       "apihelp-emailuser-param-target": "Käyttäjä, jolle lähetetään sähköpostia.",
        "apihelp-emailuser-param-subject": "Otsikko.",
+       "apihelp-emailuser-param-text": "Sähköpostin sisältö.",
        "apihelp-emailuser-param-ccme": "Lähetä kopio tästä viestistä minulle.",
        "apihelp-emailuser-example-email": "Lähetä käyttäjälle <kbd>WikiSysop</kbd> sähköposti, jossa lukee <kbd>Content</kbd>.",
+       "apihelp-expandtemplates-description": "Laajentaa kaikki wikitekstin mallineet.",
        "apihelp-expandtemplates-param-title": "Sivun otsikko.",
+       "apihelp-expandtemplates-param-text": "Muunnettava wikiteksti.",
+       "apihelp-expandtemplates-paramvalue-prop-wikitext": "Laajennettu wikiteksti.",
        "apihelp-feedcontributions-param-year": "Alkaen vuodesta (ja aiemmin).",
        "apihelp-feedcontributions-param-month": "Alkaen kuukaudesta (ja aiemmin).",
        "apihelp-feedcontributions-param-tagfilter": "Suodata muokkaukset, joissa on nämä merkkaukset.",
        "apihelp-feedcontributions-param-newonly": "Näytä vain muokkaukset, joilla on luotu sivu.",
        "apihelp-feedrecentchanges-param-limit": "Kerralla näytettävien tulosten enimmäismäärä.",
        "apihelp-feedrecentchanges-param-hideminor": "Piilota pienet muutokset.",
+       "apihelp-feedrecentchanges-param-hidebots": "Piilota bottien tekemät muutokset.",
        "apihelp-feedrecentchanges-param-hideanons": "Piilota kirjautumattomien käyttäjien tekemät muutokset.",
        "apihelp-feedrecentchanges-param-hideliu": "Piilota rekisteröityneiden käyttäjien tekemät muutokset.",
+       "apihelp-feedrecentchanges-param-hidepatrolled": "Piilota tarkastetut muutokset.",
+       "apihelp-feedrecentchanges-param-hidemyself": "Piilota nykyisen käyttäjän tekemät muutokset.",
+       "apihelp-feedrecentchanges-param-tagfilter": "Suodata merkkauksen mukaan.",
        "apihelp-feedrecentchanges-example-simple": "Näytä tuoreet muutokset.",
        "apihelp-filerevert-param-filename": "Kohteen nimi ilman File:-etuliitettä.",
        "apihelp-filerevert-param-comment": "Tallennuksen kommentti.",
        "apihelp-imagerotate-description": "Käännä kuva tai kuvia.",
+       "apihelp-imagerotate-example-simple": "Käännä kuvaa <kbd>File:Example.png</kbd> <kbd>90</kbd> astetta.",
+       "apihelp-imagerotate-example-generator": "Käännä kaikkia kuvia luokassa <kbd>Category:Flip</kbd> <kbd>180</kbd> astetta.",
+       "apihelp-login-param-name": "Käyttäjänimi.",
+       "apihelp-login-param-password": "Salasana.",
        "apihelp-login-example-login": "Kirjaudu sisään.",
        "apihelp-logout-description": "Kirjaudu ulos ja tyhjennä istunnon tiedot.",
        "apihelp-logout-example-logout": "Kirjaa nykyinen käyttäjä ulos.",
index 0e566ea..62fab5f 100644 (file)
@@ -51,7 +51,7 @@ class MessageCache {
        protected $mCache;
 
        /**
-        * Should  mean that database cannot be used, but check
+        * Should mean that database cannot be used, but check
         * @var bool $mDisable
         */
        protected $mDisable;
@@ -355,6 +355,7 @@ class MessageCache {
                        $where[] = 'loading FAILED - cache is disabled';
                        $this->mDisable = true;
                        $this->mCache = false;
+                       wfDebugLog( 'MessageCacheError', __METHOD__ . ": Failed to load $code\n" );
                        # This used to throw an exception, but that led to nasty side effects like
                        # the whole wiki being instantly down if the memcached server died
                } else {
@@ -1113,6 +1114,22 @@ class MessageCache {
                $this->mDisable = false;
        }
 
+       /**
+        * Whether DB/cache usage is disabled for determining messages
+        *
+        * If so, this typically indicates either:
+        *   - a) load() failed to find a cached copy nor query the DB
+        *   - b) we are in a special context or error mode that cannot use the DB
+        * If the DB is ignored, any derived HTML output or cached objects may be wrong.
+        * To avoid long-term cache pollution, TTLs can be adjusted accordingly.
+        *
+        * @return bool
+        * @since 1.27
+        */
+       public function isDisabled() {
+               return $this->mDisable;
+       }
+
        /**
         * Clear all stored messages. Mainly used after a mass rebuild.
         */
index 911ecdd..b617871 100644 (file)
@@ -18,6 +18,8 @@
  * @author Happy-melon
  * @file
  */
+use Liuggio\StatsdClient\Factory\StatsdDataFactory;
+use MediaWiki\MediaWikiServices;
 
 /**
  * The simplest way of implementing IContextSource is to hold a RequestContext as a
@@ -165,8 +167,10 @@ abstract class ContextSource implements IContextSource {
        /**
         * Get the Stats object
         *
+        * @deprecated since 1.27 use a StatsdDataFactory from MediaWikiServices (preferably injected)
+        *
         * @since 1.25
-        * @return BufferingStatsdDataFactory
+        * @return StatsdDataFactory
         */
        public function getStats() {
                return $this->getContext()->getStats();
index 1b881e4..e77a058 100644 (file)
@@ -18,6 +18,8 @@
  * @author Daniel Friesen
  * @file
  */
+use Liuggio\StatsdClient\Factory\StatsdDataFactory;
+use MediaWiki\MediaWikiServices;
 
 /**
  * An IContextSource implementation which will inherit context from another source
@@ -67,11 +69,6 @@ class DerivativeContext extends ContextSource implements MutableContext {
         */
        private $config;
 
-       /**
-        * @var Stats
-        */
-       private $stats;
-
        /**
         * @var Timing
         */
@@ -110,14 +107,12 @@ class DerivativeContext extends ContextSource implements MutableContext {
        /**
         * Get the stats object
         *
-        * @return BufferingStatsdDataFactory
+        * @deprecated since 1.27 use a StatsdDataFactory from MediaWikiServices (preferably injected)
+        *
+        * @return StatsdDataFactory
         */
        public function getStats() {
-               if ( !is_null( $this->stats ) ) {
-                       return $this->stats;
-               } else {
-                       return $this->getContext()->getStats();
-               }
+               return MediaWikiServices::getInstance()->getStatsdDataFactory();
        }
 
        /**
index 750389d..ccefc72 100644 (file)
@@ -21,6 +21,8 @@
  * @file
  */
 
+use Liuggio\StatsdClient\Factory\StatsdDataFactory;
+
 /**
  * Interface for objects which can provide a MediaWiki context on request
  *
@@ -126,8 +128,10 @@ interface IContextSource {
        /**
         * Get the stats object
         *
+        * @deprecated since 1.27 use a StatsdDataFactory from MediaWikiServices (preferably injected)
+        *
         * @since 1.25
-        * @return BufferingStatsdDataFactory
+        * @return StatsdDataFactory
         */
        public function getStats();
 
index c8b8108..c87798e 100644 (file)
@@ -22,7 +22,9 @@
  * @file
  */
 
+use Liuggio\StatsdClient\Factory\StatsdDataFactory;
 use MediaWiki\Logger\LoggerFactory;
+use MediaWiki\MediaWikiServices;
 
 /**
  * Group all the pieces relevant to the context of a request into one instance
@@ -63,11 +65,6 @@ class RequestContext implements IContextSource, MutableContext {
         */
        private $skin;
 
-       /**
-        * @var \Liuggio\StatsdClient\Factory\StatsdDataFactory
-        */
-       private $stats;
-
        /**
         * @var Timing
         */
@@ -138,14 +135,12 @@ class RequestContext implements IContextSource, MutableContext {
        /**
         * Get the Stats object
         *
-        * @return BufferingStatsdDataFactory
+        * @deprecated since 1.27 use a StatsdDataFactory from MediaWikiServices (preferably injected)
+        *
+        * @return StatsdDataFactory
         */
        public function getStats() {
-               if ( $this->stats === null ) {
-                       $prefix = rtrim( $this->getConfig()->get( 'StatsdMetricPrefix' ), '.' );
-                       $this->stats = new BufferingStatsdDataFactory( $prefix );
-               }
-               return $this->stats;
+               return MediaWikiServices::getInstance()->getStatsdDataFactory();
        }
 
        /**
index f1826ed..bcae746 100644 (file)
@@ -204,16 +204,13 @@ class TableDiffFormatter extends DiffFormatter {
                # Notice that WordLevelDiff returns HTML-escaped output.
                # Hence, we will be calling addedLine/deletedLine without HTML-escaping.
 
-               $line = array_shift( $del );
-               while ( $line ) {
-                       $aline = array_shift( $add );
-                       $this->writeOutput( '<tr>' . $this->deletedLine( $line ) .
-                               $this->addedLine( $aline ) . "</tr>\n" );
-                       $line = array_shift( $del );
-               }
-               foreach ( $add as $line ) { # If any leftovers
-                       $this->writeOutput( '<tr>' . $this->emptyLine() .
-                               $this->addedLine( $line ) . "</tr>\n" );
+               $ndel = count( $del );
+               $nadd = count( $add );
+               $n = max( $ndel, $nadd );
+               for ( $i = 0; $i < $n; $i++ ) {
+                       $delLine = $i < $ndel ? $this->deletedLine( $del[$i] ) : $this->emptyLine();
+                       $addLine = $i < $nadd ? $this->addedLine( $add[$i] ) : $this->emptyLine();
+                       $this->writeOutput( "<tr>{$delLine}{$addLine}</tr>\n" );
                }
        }
 
index a75ed27..b454577 100644 (file)
@@ -33,6 +33,8 @@ class ExternalStoreDB extends ExternalStoreMedium {
         * The provided URL is in the form of DB://cluster/id
         * or DB://cluster/id/itemid for concatened storage.
         *
+        * @param string $url
+        * @return string|bool False if missing
         * @see ExternalStoreMedium::fetchFromURL()
         */
        public function fetchFromURL( $url ) {
@@ -83,11 +85,8 @@ class ExternalStoreDB extends ExternalStoreMedium {
                return $ret;
        }
 
-       /**
-        * @see ExternalStoreMedium::store()
-        */
-       public function store( $cluster, $data ) {
-               $dbw = $this->getMaster( $cluster );
+       public function store( $location, $data ) {
+               $dbw = $this->getMaster( $location );
                $id = $dbw->nextSequenceValue( 'blob_blob_id_seq' );
                $dbw->insert( $this->getTable( $dbw ),
                        [ 'blob_id' => $id, 'blob_text' => $data ],
@@ -97,7 +96,7 @@ class ExternalStoreDB extends ExternalStoreMedium {
                        throw new MWException( __METHOD__ . ': no insert ID' );
                }
 
-               return "DB://$cluster/$id";
+               return "DB://$location/$id";
        }
 
        /**
@@ -175,7 +174,7 @@ class ExternalStoreDB extends ExternalStoreMedium {
         * @param string $cluster
         * @param string $id
         * @param string $itemID
-        * @return mixed
+        * @return HistoryBlob|bool Returns false if missing
         * @private
         */
        function fetchBlob( $cluster, $id, $itemID ) {
index 982a3a0..2dd0615 100644 (file)
@@ -175,8 +175,13 @@ class JobQueueGroup {
         */
        public static function pushLazyJobs() {
                foreach ( self::$instances as $group ) {
-                       $group->push( $group->bufferedJobs );
-                       $group->bufferedJobs = [];
+                       try {
+                               $group->push( $group->bufferedJobs );
+                               $group->bufferedJobs = [];
+                       } catch ( Exception $e ) {
+                               // Get in as many jobs as possible and let other post-send updates happen
+                               MWExceptionHandler::logException( $e );
+                       }
                }
        }
 
index d4a5334..a356e84 100644 (file)
@@ -72,11 +72,6 @@ class JobQueueRedis extends JobQueue {
        /** @var string Compression method to use */
        protected $compression;
 
-       const MAX_AGE_PRUNE = 604800; // integer; seconds a job can live once claimed (7 days)
-
-       /** @var string Key to prefix the queue keys with (used for testing) */
-       protected $key;
-
        /**
         * @param array $params Possible keys:
         *   - redisConfig : An array of parameters to RedisConnectionPool::__construct().
@@ -393,12 +388,17 @@ LUA;
                        static $script =
 <<<LUA
                        local kClaimed, kAttempts, kData = unpack(KEYS)
-                       local uuid = unpack(ARGV)
+                       local id = unpack(ARGV)
                        -- Unmark the job as claimed
-                       redis.call('zRem',kClaimed,uuid)
-                       redis.call('hDel',kAttempts,uuid)
+                       local removed = redis.call('zRem',kClaimed,id)
+                       -- Check if the job was recycled
+                       if removed == 0 then
+                               return 0
+                       end
+                       -- Delete the retry data
+                       redis.call('hDel',kAttempts,id)
                        -- Delete the job data itself
-                       return redis.call('hDel',kData,uuid)
+                       return redis.call('hDel',kData,id)
 LUA;
                        $res = $conn->luaEval( $script,
                                [
index 10d4c71..1d23f9d 100644 (file)
@@ -197,7 +197,9 @@ class StatusValue {
        /**
         * Returns a list of status messages of the given type
         *
-        * Each entry is a map of (message:string or MessageSpecifier,params:array))
+        * Each entry is a map of:
+        *   - message: string message key or MessageSpecifier
+        *   - params: array list of parameters
         *
         * @param string $type
         * @return array
index b61cae7..f28a4c0 100644 (file)
  * @file
  * @author Aaron Schulz
  */
+use Psr\Log\LoggerInterface;
+use Psr\Log\LoggerAwareInterface;
+use Psr\Log\NullLogger;
 
 /**
  * Base class for reliable event relays
  */
-abstract class EventRelayer {
+abstract class EventRelayer implements LoggerAwareInterface {
+       /** @var LoggerInterface */
+       protected $logger;
+
        /**
         * @param array $params
         */
        public function __construct( array $params ) {
+               $this->logger = new NullLogger();
        }
 
        /**
@@ -47,6 +54,14 @@ abstract class EventRelayer {
                return $this->doNotify( $channel, $events );
        }
 
+       /**
+        * Set logger instance.
+        * @param LoggerInterface $logger
+        */
+       public function setLogger( LoggerInterface $logger ) {
+               $this->logger = $logger;
+       }
+
        /**
         * @param string $channel
         * @param array $events List of event data maps
diff --git a/includes/libs/eventrelayer/EventRelayerKafka.php b/includes/libs/eventrelayer/EventRelayerKafka.php
new file mode 100644 (file)
index 0000000..3555a23
--- /dev/null
@@ -0,0 +1,66 @@
+<?php
+use Kafka\Produce;
+
+/**
+ * Event relayer for Apache Kafka.
+ * Configuring for WANCache:
+ * 'relayerConfig' => [ 'class' => 'EventRelayerKafka', 'KafkaEventHost' => 'localhost:9092' ],
+ */
+class EventRelayerKafka extends EventRelayer {
+
+       /**
+        * Configuration.
+        *
+        * @var Config
+        */
+       protected $config;
+
+       /**
+        * Kafka producer.
+        *
+        * @var Produce
+        */
+       protected $producer;
+
+       /**
+        * Create Kafka producer.
+        *
+        * @param Config $config
+        */
+       public function __construct( array $params ) {
+               $this->config = new HashConfig( $params );
+               if ( !$this->config->has( 'KafkaEventHost' ) ) {
+                       throw new InvalidArgumentException( "KafkaEventHost must be configured" );
+               }
+       }
+
+       /**
+        * Get the producer object from kafka-php.
+        * @return Produce
+        */
+       protected function getKafkaProducer() {
+               if ( !$this->producer ) {
+                       $this->producer = Produce::getInstance( null, null, $this->config->get( 'KafkaEventHost' ) );
+               }
+               return $this->producer;
+       }
+
+       /**
+        * (non-PHPdoc)
+        *
+        * @see EventRelayer::doNotify()
+        *
+        */
+       protected function doNotify( $channel, array $events ) {
+               $jsonEvents = array_map( 'json_encode', $events );
+               try {
+                       $producer = $this->getKafkaProducer();
+                       $producer->setMessages( $channel, 0, $jsonEvents );
+                       $producer->send();
+               } catch ( \Kafka\Exception $e ) {
+                       $this->logger->warning( "Sending events failed: $e" );
+                       return false;
+               }
+               return true;
+       }
+}
index b212e97..dd2e0d5 100644 (file)
@@ -149,6 +149,10 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
                $this->setLogger( isset( $params['logger'] ) ? $params['logger'] : new NullLogger() );
        }
 
+       /**
+        * Set logger instance.
+        * @param LoggerInterface $logger
+        */
        public function setLogger( LoggerInterface $logger ) {
                $this->logger = $logger;
        }
index 2626aa8..264e1ae 100644 (file)
@@ -94,6 +94,8 @@ final class SessionBackend {
        private $usePhpSessionHandling = true;
        private $checkPHPSessionRecursionGuard = false;
 
+       private $shutdown = false;
+
        /**
         * @param SessionId $id Session ID object
         * @param SessionInfo $info Session info to populate from
@@ -181,12 +183,21 @@ final class SessionBackend {
         */
        public function deregisterSession( $index ) {
                unset( $this->requests[$index] );
-               if ( !count( $this->requests ) ) {
+               if ( !$this->shutdown && !count( $this->requests ) ) {
                        $this->save( true );
                        $this->provider->getManager()->deregisterSessionBackend( $this );
                }
        }
 
+       /**
+        * Shut down a session
+        * @private For use by \MediaWiki\Session\SessionManager::shutdown() only
+        */
+       public function shutdown() {
+               $this->save( true );
+               $this->shutdown = true;
+       }
+
        /**
         * Returns the session ID.
         * @return string
index 29cd69a..a364045 100644 (file)
@@ -626,7 +626,7 @@ final class SessionManager implements SessionManagerInterface {
                        }
                        // @codeCoverageIgnoreEnd
                        foreach ( $this->allSessionBackends as $backend ) {
-                               $backend->save( true );
+                               $backend->shutdown();
                        }
                }
        }
index cac0815..97fffda 100644 (file)
@@ -1200,7 +1200,9 @@ abstract class Skin extends ContextSource {
                        $cache = ObjectCache::getMainWANInstance();
                        $sidebar = $cache->getWithSetCallback(
                                $cache->makeKey( 'sidebar', $this->getLanguage()->getCode() ),
-                               $wgSidebarCacheExpiry,
+                               MessageCache::singleton()->isDisabled()
+                                       ? $cache::TTL_UNCACHEABLE // bug T133069
+                                       : $wgSidebarCacheExpiry,
                                $callback,
                                [ 'lockTSE' => 30 ]
                        );
old mode 100644 (file)
new mode 100755 (executable)
index 45ef679..2bf8385
@@ -376,6 +376,7 @@ class SpecialSearch extends SpecialPage {
                if ( $textMatches && !$textStatus ) {
                        // output appropriate heading
                        if ( $numTextMatches > 0 && $numTitleMatches > 0 ) {
+                               $out->addHTML( '<div class="visualClear"></div>' );
                                // if no title matches the heading is redundant
                                $out->wrapWikiMsg( "==$1==\n", 'textmatches' );
                        }
index 9901d36..a77c79e 100644 (file)
@@ -1059,7 +1059,6 @@ class LoginForm extends SpecialPage {
        function processLogin() {
                global $wgLang, $wgSecureLogin, $wgInvalidPasswordReset;
 
-               $cache = ObjectCache::getLocalClusterInstance();
                $authRes = $this->authenticateUserData();
                switch ( $authRes ) {
                        case self::SUCCESS:
index c8ebc2a..18a06ea 100644 (file)
@@ -95,6 +95,14 @@ class TitleValue implements LinkTarget {
                return $this->fragment;
        }
 
+       /**
+        * @since 1.27
+        * @return bool
+        */
+       public function hasFragment() {
+               return $this->fragment !== '';
+       }
+
        /**
         * Returns the title's DB key, as supplied to the constructor,
         * without namespace prefix or fragment.
index 6c49aa4..994eb09 100644 (file)
@@ -46,423 +46,423 @@ namespace MediaWiki\Languages\Data;
  */
 class Names {
        public static $names = [
-               'aa' => 'Qafár af',    # Afar
-               'ab' => 'Аҧсшәа', # Abkhaz
-               'ace' => 'Acèh',       # Aceh
-               'ady' => 'адыгабзэ',    # Adyghe
-               'ady-cyrl' => 'адыгабзэ',       # Adyghe
-               'aeb' => 'تونسي/Tûnsî',  # Tunisian Arabic (multiple scripts - defaults to Arabic)
-               'aeb-arab' => 'تونسي',     # Tunisian Arabic (Arabic Script)
-               'aeb-latn' => 'Tûnsî',        # Tunisian Arabic (Latin Script)
-               'af' => 'Afrikaans',    # Afrikaans
-               'ak' => 'Akan',         # Akan
-               'aln' => 'Gegë',       # Gheg Albanian
-               'als' => 'Alemannisch', # Alemannic -- not a valid code, for compatibility. See gsw.
-               'am' => 'አማርኛ', # Amharic
-               'an' => 'aragonés',    # Aragonese
-               'ang' => 'Ænglisc',    # Old English, bug 23283
-               'anp' => 'अङ्गिका',       # Angika
-               'ar' => 'العربية',       # Arabic
-               'arc' => 'ܐܪܡܝܐ',  # Aramaic
-               'arn' => 'mapudungun',  # Mapuche, Mapudungu, Araucanian (Araucano)
+               'aa' => 'Qafár af', # Afar
+               'ab' => 'Аҧсшәа', # Abkhaz
+               'ace' => 'Acèh', # Aceh
+               'ady' => 'адыгабзэ', # Adyghe
+               'ady-cyrl' => 'адыгабзэ', # Adyghe
+               'aeb' => 'تونسي/Tûnsî', # Tunisian Arabic (multiple scripts - defaults to Arabic)
+               'aeb-arab' => 'تونسي', # Tunisian Arabic (Arabic Script)
+               'aeb-latn' => 'Tûnsî', # Tunisian Arabic (Latin Script)
+               'af' => 'Afrikaans', # Afrikaans
+               'ak' => 'Akan', # Akan
+               'aln' => 'Gegë', # Gheg Albanian
+               'als' => 'Alemannisch', # Alemannic -- not a valid code, for compatibility. See gsw.
+               'am' => 'አማርኛ', # Amharic
+               'an' => 'aragonés', # Aragonese
+               'ang' => 'Ænglisc', # Old English, bug 23283
+               'anp' => 'अङ्गिका', # Angika
+               'ar' => 'العربية', # Arabic
+               'arc' => 'ܐܪܡܝܐ', # Aramaic
+               'arn' => 'mapudungun', # Mapuche, Mapudungu, Araucanian (Araucano)
                'arq' => 'جازايرية', # Algerian Spoken Arabic
-               'ary' => 'Maġribi',    # Moroccan Spoken Arabic
-               'arz' => 'مصرى',    # Egyptian Spoken Arabic
-               'as' => 'অসমীয়া',        # Assamese
-               'ase' => 'American sign language',      # American sign language
-               'ast' => 'asturianu',   # Asturian
-               'av' => 'авар',     # Avar
+               'ary' => 'Maġribi', # Moroccan Spoken Arabic
+               'arz' => 'مصرى', # Egyptian Spoken Arabic
+               'as' => 'অসমীয়া', # Assamese
+               'ase' => 'American sign language', # American sign language
+               'ast' => 'asturianu', # Asturian
+               'av' => 'авар', # Avar
                'avk' => 'Kotava', # Kotava
-               'awa' => 'अवधी',        # Awadhi
-               'ay' => 'Aymar aru',    # Aymara
-               'az' => 'azərbaycanca',        # Azerbaijani
-               'azb' => 'تۆرکجه',        # South Azerbaijani
-               'ba' => 'башҡортса',   # Bashkir
-               'bar' => 'Boarisch',    # Bavarian (Austro-Bavarian and South Tyrolean)
+               'awa' => 'अवधी', # Awadhi
+               'ay' => 'Aymar aru', # Aymara
+               'az' => 'azərbaycanca', # Azerbaijani
+               'azb' => 'تۆرکجه', # South Azerbaijani
+               'ba' => 'башҡортса', # Bashkir
+               'bar' => 'Boarisch', # Bavarian (Austro-Bavarian and South Tyrolean)
                'bat-smg' => 'žemaitėška', # Samogitian (deprecated code, 'sgs' in ISO 693-3 since 2010-06-30 )
                'bbc' => 'Batak Toba', # Batak Toba (falls back to bbc-latn)
                'bbc-latn' => 'Batak Toba', # Batak Toba
                'bcc' => 'جهلسری بلوچی', # Southern Balochi
                'bcl' => 'Bikol Central', # Bikol: Central Bicolano language
-               'be' => 'беларуская', #  Belarusian normative
-               'be-tarask' => "беларуская (тарашкевіца)\xE2\x80\x8E",     # Belarusian in Taraskievica orthography
-               'be-x-old' => "беларуская (тарашкевіца)\xE2\x80\x8E",      # (be-tarask compat)
-               'bg' => 'български',   # Bulgarian
+               'be' => 'беларуская', #  Belarusian normative
+               'be-tarask' => "беларуская (тарашкевіца)\xE2\x80\x8E", # Belarusian in Taraskievica orthography
+               'be-x-old' => "беларуская (тарашкевіца)\xE2\x80\x8E", # (be-tarask compat)
+               'bg' => 'български', # Bulgarian
                'bgn' => 'روچ کپتین بلوچی', # Western Balochi
-               'bh' => 'भोजपुरी',        # Bihari macro language. Falls back to Bhojpuri (bho)
-               'bho' => 'भोजपुरी',       # Bhojpuri
-               'bi' => 'Bislama',              # Bislama
-               'bjn' => 'Bahasa Banjar',       # Banjarese
-               'bm' => 'bamanankan',   # Bambara
-               'bn' => 'বাংলা',      # Bengali
-               'bo' => 'བོད་ཡིག',        # Tibetan
-               'bpy' => 'বিষ্ণুপ্রিয়া মণিপুরী',       # Bishnupriya Manipuri
-               'bqi' => 'بختیاری',      # Bakthiari
-               'br' => 'brezhoneg',    # Breton
-               'brh' => 'Bráhuí',    # Brahui
-               'bs' => 'bosanski',             # Bosnian
-               'bto' => 'Iriga Bicolano',      # Rinconada Bikol
-               'bug' => 'ᨅᨔ ᨕᨘᨁᨗ', # Buginese
-               'bxr' => 'буряад',        # Buryat (Russia)
-               'ca' => 'català',      # Catalan
-               'cbk-zam' => 'Chavacano de Zamboanga',  # Zamboanga Chavacano
-               'cdo' => 'Mìng-dĕ̤ng-ngṳ̄',       # Min Dong
-               'ce' => 'нохчийн',       # Chechen
-               'ceb' => 'Cebuano',     # Cebuano
-               'ch' => 'Chamoru',              # Chamorro
-               'cho' => 'Choctaw',             # Choctaw
+               'bh' => 'भोजपुरी', # Bihari macro language. Falls back to Bhojpuri (bho)
+               'bho' => 'भोजपुरी', # Bhojpuri
+               'bi' => 'Bislama', # Bislama
+               'bjn' => 'Bahasa Banjar', # Banjarese
+               'bm' => 'bamanankan', # Bambara
+               'bn' => 'বাংলা', # Bengali
+               'bo' => 'བོད་ཡིག', # Tibetan
+               'bpy' => 'বিষ্ণুপ্রিয়া মণিপুরী', # Bishnupriya Manipuri
+               'bqi' => 'بختیاری', # Bakthiari
+               'br' => 'brezhoneg', # Breton
+               'brh' => 'Bráhuí', # Brahui
+               'bs' => 'bosanski', # Bosnian
+               'bto' => 'Iriga Bicolano', # Rinconada Bikol
+               'bug' => 'ᨅᨔ ᨕᨘᨁᨗ', # Buginese
+               'bxr' => 'буряад', # Buryat (Russia)
+               'ca' => 'català', # Catalan
+               'cbk-zam' => 'Chavacano de Zamboanga', # Zamboanga Chavacano
+               'cdo' => 'Mìng-dĕ̤ng-ngṳ̄', # Min Dong
+               'ce' => 'нохчийн', # Chechen
+               'ceb' => 'Cebuano', # Cebuano
+               'ch' => 'Chamoru', # Chamorro
+               'cho' => 'Choctaw', # Choctaw
                'chr' => 'ᏣᎳᎩ', # Cherokee
-               'chy' => 'Tsetsêhestâhese',   # Cheyenne
-               'ckb' => 'کوردیی ناوەندی', # Central Kurdish
-               'co' => 'corsu',                # Corsican
+               'chy' => 'Tsetsêhestâhese', # Cheyenne
+               'ckb' => 'کوردیی ناوەندی', # Central Kurdish
+               'co' => 'corsu', # Corsican
                'cps' => 'Capiceño', # Capiznon
-               'cr' => 'Nēhiyawēwin / ᓀᐦᐃᔭᐍᐏᐣ',                # Cree
-               'crh' => 'qırımtatarca',   # Crimean Tatar (multiple scripts - defaults to Latin)
-               'crh-latn' => "qırımtatarca (Latin)\xE2\x80\x8E",       # Crimean Tatar (Latin)
-               'crh-cyrl' => "къырымтатарджа (Кирилл)\xE2\x80\x8E",       # Crimean Tatar (Cyrillic)
-               'cs' => 'čeština',    # Czech
-               'csb' => 'kaszëbsczi', # Cassubian
-               'cu' => 'словѣньскъ / ⰔⰎⰑⰂⰡⰐⰠⰔⰍⰟ',        # Old Church Slavonic (ancient language)
-               'cv' => 'Чӑвашла',       # Chuvash
-               'cy' => 'Cymraeg',              # Welsh
-               'da' => 'dansk',                # Danish
-               'de' => 'Deutsch',              # German ("Du")
-               'de-at' => 'Österreichisches Deutsch',         # Austrian German
-               'de-ch' => 'Schweizer Hochdeutsch',             # Swiss Standard German
-               'de-formal' => "Deutsch (Sie-Form)\xE2\x80\x8E",                # German - formal address ("Sie")
-               'diq' => 'Zazaki',              # Zazaki
+               'cr' => 'Nēhiyawēwin / ᓀᐦᐃᔭᐍᐏᐣ', # Cree
+               'crh' => 'qırımtatarca', # Crimean Tatar (multiple scripts - defaults to Latin)
+               'crh-latn' => "qırımtatarca (Latin)\xE2\x80\x8E", # Crimean Tatar (Latin)
+               'crh-cyrl' => "къырымтатарджа (Кирилл)\xE2\x80\x8E", # Crimean Tatar (Cyrillic)
+               'cs' => 'čeština', # Czech
+               'csb' => 'kaszëbsczi', # Cassubian
+               'cu' => 'словѣньскъ / ⰔⰎⰑⰂⰡⰐⰠⰔⰍⰟ', # Old Church Slavonic (ancient language)
+               'cv' => 'Чӑвашла', # Chuvash
+               'cy' => 'Cymraeg', # Welsh
+               'da' => 'dansk', # Danish
+               'de' => 'Deutsch', # German ("Du")
+               'de-at' => 'Österreichisches Deutsch', # Austrian German
+               'de-ch' => 'Schweizer Hochdeutsch', # Swiss Standard German
+               'de-formal' => "Deutsch (Sie-Form)\xE2\x80\x8E", # German - formal address ("Sie")
+               'diq' => 'Zazaki', # Zazaki
                'dsb' => 'dolnoserbski', # Lower Sorbian
                'dtp' => 'Dusun Bundu-liwan', # Central Dusun
                'dty' => 'डोटेली', # Doteli
-               'dv' => 'ދިވެހިބަސް',         # Dhivehi
-               'dz' => 'ཇོང་ཁ',              # Dzongkha (Bhutan)
-               'ee' => 'eʋegbe',      # Éwé
-               'egl' => 'Emiliàn',    # Emilian
-               'el' => 'Ελληνικά',     # Greek
-               'eml' => 'emiliàn e rumagnòl',        # Emiliano-Romagnolo / Sammarinese
-               'en' => 'English',              # English
-               'en-ca' => 'Canadian English',  # Canadian English
-               'en-gb' => 'British English',   # British English
-               'eo' => 'Esperanto',    # Esperanto
-               'es' => 'español',     # Spanish
-               'et' => 'eesti',                # Estonian
-               'eu' => 'euskara',              # Basque
+               'dv' => 'ދިވެހިބަސް', # Dhivehi
+               'dz' => 'ཇོང་ཁ', # Dzongkha (Bhutan)
+               'ee' => 'eʋegbe', # Éwé
+               'egl' => 'Emiliàn', # Emilian
+               'el' => 'Ελληνικά', # Greek
+               'eml' => 'emiliàn e rumagnòl', # Emiliano-Romagnolo / Sammarinese
+               'en' => 'English', # English
+               'en-ca' => 'Canadian English', # Canadian English
+               'en-gb' => 'British English', # British English
+               'eo' => 'Esperanto', # Esperanto
+               'es' => 'español', # Spanish
+               'et' => 'eesti', # Estonian
+               'eu' => 'euskara', # Basque
                'ext' => 'estremeñu', # Extremaduran
-               'fa' => 'فارسی',   # Persian
-               'ff' => 'Fulfulde',             # Fulfulde, Maasina
-               'fi' => 'suomi',                # Finnish
+               'fa' => 'فارسی', # Persian
+               'ff' => 'Fulfulde', # Fulfulde, Maasina
+               'fi' => 'suomi', # Finnish
                'fit' => 'meänkieli', # Tornedalen Finnish
-               'fiu-vro' => 'Võro',    # Võro (deprecated code, 'vro' in ISO 639-3 since 2009-01-16)
-               'fj' => 'Na Vosa Vakaviti',     # Fijian
-               'fo' => 'føroyskt',    # Faroese
-               'fr' => 'français',    # French
+               'fiu-vro' => 'Võro', # Võro (deprecated code, 'vro' in ISO 639-3 since 2009-01-16)
+               'fj' => 'Na Vosa Vakaviti', # Fijian
+               'fo' => 'føroyskt', # Faroese
+               'fr' => 'français', # French
                'frc' => 'français cadien', # Cajun French
-               'frp' => 'arpetan',     # Franco-Provençal/Arpitan
-               'frr' => 'Nordfriisk',  # North Frisian
-               'fur' => 'furlan',              # Friulian
-               'fy' => 'Frysk',                # Frisian
-               'ga' => 'Gaeilge',              # Irish
-               'gag' => 'Gagauz',              # Gagauz
-               'gan' => '贛語',              # Gan (multiple scripts - defaults to Traditional)
-               'gan-hans' => "赣语(简体)\xE2\x80\x8E", # Gan (Simplified Han)
-               'gan-hant' => "贛語(繁體)\xE2\x80\x8E", # Gan (Traditional Han)
-               'gd' => 'Gàidhlig',    # Scots Gaelic
-               'gl' => 'galego',               # Galician
-               'glk' => 'گیلکی',  # Gilaki
-               'gn' => 'Avañe\'ẽ',  # Guaraní, Paraguayan
-               'gom' => 'गोंयची कोंकणी / Gõychi Konknni',     # Goan Konkani
-               'gom-deva' => 'गोंयची कोंकणी',  # Goan Konkani (Devanagari script)
-               'gom-latn' => 'Gõychi Konknni',        # Goan Konkani (Latin script)
-               'got' => '𐌲𐌿𐍄𐌹𐍃𐌺',    # Gothic
+               'frp' => 'arpetan', # Franco-Provençal/Arpitan
+               'frr' => 'Nordfriisk', # North Frisian
+               'fur' => 'furlan', # Friulian
+               'fy' => 'Frysk', # Frisian
+               'ga' => 'Gaeilge', # Irish
+               'gag' => 'Gagauz', # Gagauz
+               'gan' => '贛語', # Gan (multiple scripts - defaults to Traditional)
+               'gan-hans' => "赣语(简体)\xE2\x80\x8E", # Gan (Simplified Han)
+               'gan-hant' => "贛語(繁體)\xE2\x80\x8E", # Gan (Traditional Han)
+               'gd' => 'Gàidhlig', # Scots Gaelic
+               'gl' => 'galego', # Galician
+               'glk' => 'گیلکی', # Gilaki
+               'gn' => 'Avañe\'ẽ', # Guaraní, Paraguayan
+               'gom' => 'गोंयची कोंकणी / Gõychi Konknni', # Goan Konkani
+               'gom-deva' => 'गोंयची कोंकणी', # Goan Konkani (Devanagari script)
+               'gom-latn' => 'Gõychi Konknni', # Goan Konkani (Latin script)
+               'got' => '𐌲𐌿𐍄𐌹𐍃𐌺', # Gothic
                'grc' => 'Ἀρχαία ἑλληνικὴ', # Ancient Greek
-               'gsw' => 'Alemannisch', # Alemannic
-               'gu' => 'ગુજરાતી',        # Gujarati
-               'gv' => 'Gaelg',                # Manx
-               'ha' => 'Hausa',        # Hausa
-               'hak' => '客家語/Hak-kâ-ngî',      # Hakka
-               'haw' => 'Hawaiʻi',            # Hawaiian
-               'he' => 'עברית',   # Hebrew
-               'hi' => 'हिन्दी',   # Hindi
-               'hif' => 'Fiji Hindi',  # Fijian Hindi (multiple scripts - defaults to Latin)
-               'hif-latn' => 'Fiji Hindi',     # Fiji Hindi (latin)
-               'hil' => 'Ilonggo',     # Hiligaynon
-               'ho' => 'Hiri Motu',    # Hiri Motu
-               'hr' => 'hrvatski',             # Croatian
+               'gsw' => 'Alemannisch', # Alemannic
+               'gu' => 'ગુજરાતી', # Gujarati
+               'gv' => 'Gaelg', # Manx
+               'ha' => 'Hausa', # Hausa
+               'hak' => '客家語/Hak-kâ-ngî', # Hakka
+               'haw' => 'Hawaiʻi', # Hawaiian
+               'he' => 'עברית', # Hebrew
+               'hi' => 'हिन्दी', # Hindi
+               'hif' => 'Fiji Hindi', # Fijian Hindi (multiple scripts - defaults to Latin)
+               'hif-latn' => 'Fiji Hindi', # Fiji Hindi (latin)
+               'hil' => 'Ilonggo', # Hiligaynon
+               'ho' => 'Hiri Motu', # Hiri Motu
+               'hr' => 'hrvatski', # Croatian
                'hrx' => 'Hunsrik', # Riograndenser Hunsrückisch
-               'hsb' => 'hornjoserbsce',       # Upper Sorbian
-               'ht' => 'Kreyòl ayisyen',              # Haitian Creole French
-               'hu' => 'magyar',               # Hungarian
-               'hy' => 'Հայերեն',       # Armenian
-               'hz' => 'Otsiherero',   # Herero
-               'ia' => 'interlingua',  # Interlingua (IALA)
-               'id' => 'Bahasa Indonesia',     # Indonesian
-               'ie' => 'Interlingue',  # Interlingue (Occidental)
-               'ig' => 'Igbo',                 # Igbo
-               'ii' => 'ꆇꉙ',       # Sichuan Yi
-               'ik' => 'Iñupiak',     # Inupiak (Inupiatun, Northwest Alaska / Inupiatun, North Alaskan)
-               'ike-cans' => 'ᐃᓄᒃᑎᑐᑦ',     # Inuktitut, Eastern Canadian (Unified Canadian Aboriginal Syllabics)
-               'ike-latn' => 'inuktitut',      # Inuktitut, Eastern Canadian (Latin script)
-               'ilo' => 'Ilokano',     # Ilokano
-               'inh' => 'ГӀалгӀай',    # Ingush
-               'io' => 'Ido',                  # Ido
-               'is' => 'íslenska',    # Icelandic
-               'it' => 'italiano',             # Italian
-               'iu' => 'ᐃᓄᒃᑎᑐᑦ/inuktitut', # Inuktitut (macro language, see ike/ikt, falls back to ike-cans)
-               'ja' => '日本語',    # Japanese
-               'jam' => 'Patois',      # Jamaican Creole English
-               'jbo' => 'la .lojban.',         # Lojban
-               'jut' => 'jysk',        # Jutish / Jutlandic
-               'jv' => 'Basa Jawa',    # Javanese
-               'ka' => 'ქართული',        # Georgian
-               'kaa' => 'Qaraqalpaqsha',       # Karakalpak
-               'kab' => 'Taqbaylit',   # Kabyle
-               'kbd' => 'Адыгэбзэ',    # Kabardian
-               'kbd-cyrl' => 'Адыгэбзэ',       # Kabardian (Cyrillic)
-               'kg' => 'Kongo',        # Kongo, (FIXME!) should probaly be KiKongo or KiKoongo
-               'khw' => 'کھوار',  # Khowar
-               'ki' => 'Gĩkũyũ',    # Gikuyu
-               'kiu' => 'Kırmancki',  # Kirmanjki
-               'kj' => 'Kwanyama',     # Kwanyama
-               'kk' => 'қазақша',       # Kazakh (multiple scripts - defaults to Cyrillic)
-               'kk-arab' => "قازاقشا (تٴوتە)\xE2\x80\x8F", # Kazakh Arabic
-               'kk-cyrl' => "қазақша (кирил)\xE2\x80\x8E", # Kazakh Cyrillic
-               'kk-latn' => "qazaqşa (latın)\xE2\x80\x8E",   # Kazakh Latin
-               'kk-cn' => "قازاقشا (جۇنگو)\xE2\x80\x8F",   # Kazakh (China)
-               'kk-kz' => "қазақша (Қазақстан)\xE2\x80\x8E",   # Kazakh (Kazakhstan)
-               'kk-tr' => "qazaqşa (Türkïya)\xE2\x80\x8E",  # Kazakh (Turkey)
-               'kl' => 'kalaallisut',  # Inuktitut, Greenlandic/Greenlandic/Kalaallisut (kal)
-               'km' => 'ភាសាខ្មែរ',  # Khmer, Central
-               'kn' => 'ಕನ್ನಡ',      # Kannada
-               'ko' => '한국어',    # Korean
-               'ko-kp' => '한국어 (조선)',        # Korean (DPRK)
+               'hsb' => 'hornjoserbsce', # Upper Sorbian
+               'ht' => 'Kreyòl ayisyen', # Haitian Creole French
+               'hu' => 'magyar', # Hungarian
+               'hy' => 'Հայերեն', # Armenian
+               'hz' => 'Otsiherero', # Herero
+               'ia' => 'interlingua', # Interlingua (IALA)
+               'id' => 'Bahasa Indonesia', # Indonesian
+               'ie' => 'Interlingue', # Interlingue (Occidental)
+               'ig' => 'Igbo', # Igbo
+               'ii' => 'ꆇꉙ', # Sichuan Yi
+               'ik' => 'Iñupiak', # Inupiak (Inupiatun, Northwest Alaska / Inupiatun, North Alaskan)
+               'ike-cans' => 'ᐃᓄᒃᑎᑐᑦ', # Inuktitut, Eastern Canadian (Unified Canadian Aboriginal Syllabics)
+               'ike-latn' => 'inuktitut', # Inuktitut, Eastern Canadian (Latin script)
+               'ilo' => 'Ilokano', # Ilokano
+               'inh' => 'ГӀалгӀай', # Ingush
+               'io' => 'Ido', # Ido
+               'is' => 'íslenska', # Icelandic
+               'it' => 'italiano', # Italian
+               'iu' => 'ᐃᓄᒃᑎᑐᑦ/inuktitut', # Inuktitut (macro language, see ike/ikt, falls back to ike-cans)
+               'ja' => '日本語', # Japanese
+               'jam' => 'Patois', # Jamaican Creole English
+               'jbo' => 'la .lojban.', # Lojban
+               'jut' => 'jysk', # Jutish / Jutlandic
+               'jv' => 'Basa Jawa', # Javanese
+               'ka' => 'ქართული', # Georgian
+               'kaa' => 'Qaraqalpaqsha', # Karakalpak
+               'kab' => 'Taqbaylit', # Kabyle
+               'kbd' => 'Адыгэбзэ', # Kabardian
+               'kbd-cyrl' => 'Адыгэбзэ', # Kabardian (Cyrillic)
+               'kg' => 'Kongo', # Kongo, (FIXME!) should probaly be KiKongo or KiKoongo
+               'khw' => 'کھوار', # Khowar
+               'ki' => 'Gĩkũyũ', # Gikuyu
+               'kiu' => 'Kırmancki', # Kirmanjki
+               'kj' => 'Kwanyama', # Kwanyama
+               'kk' => 'қазақша', # Kazakh (multiple scripts - defaults to Cyrillic)
+               'kk-arab' => "قازاقشا (تٴوتە)\xE2\x80\x8F", # Kazakh Arabic
+               'kk-cyrl' => "қазақша (кирил)\xE2\x80\x8E", # Kazakh Cyrillic
+               'kk-latn' => "qazaqşa (latın)\xE2\x80\x8E", # Kazakh Latin
+               'kk-cn' => "قازاقشا (جۇنگو)\xE2\x80\x8F", # Kazakh (China)
+               'kk-kz' => "қазақша (Қазақстан)\xE2\x80\x8E", # Kazakh (Kazakhstan)
+               'kk-tr' => "qazaqşa (Türkïya)\xE2\x80\x8E", # Kazakh (Turkey)
+               'kl' => 'kalaallisut', # Inuktitut, Greenlandic/Greenlandic/Kalaallisut (kal)
+               'km' => 'ភាសាខ្មែរ', # Khmer, Central
+               'kn' => 'ಕನ್ನಡ', # Kannada
+               'ko' => '한국어', # Korean
+               'ko-kp' => '한국어 (조선)', # Korean (DPRK)
                'koi' => 'Перем Коми', # Komi-Permyak
-               'kr' => 'Kanuri',               # Kanuri, Central
+               'kr' => 'Kanuri', # Kanuri, Central
                'krc' => 'къарачай-малкъар', # Karachay-Balkar
                'kri' => 'Krio', # Krio
                'krj' => 'Kinaray-a', # Kinaray-a
-               'ks' => 'कॉशुर / کٲشُر', # Kashmiri (multiple scripts - defaults to Perso-Arabic)
-               'ks-arab' => 'کٲشُر',      # Kashmiri (Perso-Arabic script)
-               'ks-deva' => 'कॉशुर', # Kashmiri (Devanagari script)
-               'ksh' => 'Ripoarisch',  # Ripuarian
-               'ku' => 'Kurdî',       # Kurdish (multiple scripts - defaults to Latin)
-               'ku-latn' => "Kurdî (latînî)\xE2\x80\x8E",   # Northern Kurdish (Latin script)
-               'ku-arab' => "كوردي (عەرەبی)\xE2\x80\x8F",   # Northern Kurdish (Arabic script) (falls back to ckb)
-               'kv' => 'коми',     # Komi-Zyrian (Cyrillic is common script but also written in Latin script)
-               'kw' => 'kernowek',             # Cornish
-               'ky' => 'Кыргызча',     # Kirghiz
-               'la' => 'Latina',               # Latin
-               'lad' => 'Ladino',      # Ladino
-               'lb' => 'Lëtzebuergesch',      # Luxemburguish
-               'lbe' => 'лакку',  # Lak
-               'lez' => 'лезги',  # Lezgi
-               'lfn' => 'Lingua Franca Nova',  # Lingua Franca Nova
-               'lg' => 'Luganda',              # Ganda
-               'li' => 'Limburgs',     # Limburgian
-               'lij' => 'Ligure',      # Ligurian
-               'liv' => 'Līvõ kēļ',        # Livonian
-               'lki' => 'لەکی‎', # Laki
-               'lmo' => 'lumbaart',    # Lombard
-               'ln' => 'lingála',             # Lingala
-               'lo' => 'ລາວ',    # Laotian
-               'lrc' => 'لۊری شومالی',       # Northern Luri
+               'ks' => 'कॉशुर / کٲشُر', # Kashmiri (multiple scripts - defaults to Perso-Arabic)
+               'ks-arab' => 'کٲشُر', # Kashmiri (Perso-Arabic script)
+               'ks-deva' => 'कॉशुर', # Kashmiri (Devanagari script)
+               'ksh' => 'Ripoarisch', # Ripuarian
+               'ku' => 'Kurdî', # Kurdish (multiple scripts - defaults to Latin)
+               'ku-latn' => "Kurdî (latînî)\xE2\x80\x8E", # Northern Kurdish (Latin script)
+               'ku-arab' => "كوردي (عەرەبی)\xE2\x80\x8F", # Northern Kurdish (Arabic script) (falls back to ckb)
+               'kv' => 'коми', # Komi-Zyrian (Cyrillic is common script but also written in Latin script)
+               'kw' => 'kernowek', # Cornish
+               'ky' => 'Кыргызча', # Kirghiz
+               'la' => 'Latina', # Latin
+               'lad' => 'Ladino', # Ladino
+               'lb' => 'Lëtzebuergesch', # Luxemburguish
+               'lbe' => 'лакку', # Lak
+               'lez' => 'лезги', # Lezgi
+               'lfn' => 'Lingua Franca Nova', # Lingua Franca Nova
+               'lg' => 'Luganda', # Ganda
+               'li' => 'Limburgs', # Limburgian
+               'lij' => 'Ligure', # Ligurian
+               'liv' => 'Līvõ kēļ', # Livonian
+               'lki' => 'لەکی‎', # Laki
+               'lmo' => 'lumbaart', # Lombard
+               'ln' => 'lingála', # Lingala
+               'lo' => 'ລາວ', # Laotian
+               'lrc' => 'لۊری شومالی', # Northern Luri
                'loz' => 'Silozi', # Lozi
-               'lt' => 'lietuvių',    # Lithuanian
-               'ltg' => 'latgaļu',    # Latgalian
+               'lt' => 'lietuvių', # Lithuanian
+               'ltg' => 'latgaļu', # Latgalian
                'lus' => 'Mizo ţawng', # Mizo/Lushai
                'luz' => 'لئری دوٙمینی', # Southern Luri
-               'lv' => 'latviešu',    # Latvian
-               'lzh' => '文言',      # Literary Chinese, bug 8217
-               'lzz' => 'Lazuri',      # Laz
+               'lv' => 'latviešu', # Latvian
+               'lzh' => '文言', # Literary Chinese, bug 8217
+               'lzz' => 'Lazuri', # Laz
                'mai' => 'मैथिली', # Maithili
                'map-bms' => 'Basa Banyumasan', # Banyumasan
-               'mdf' => 'мокшень',              # Moksha
-               'mg' => 'Malagasy',             # Malagasy
-               'mh' => 'Ebon',                 # Marshallese
-               'mhr' => 'олык марий', # Eastern Mari
-               'mi' => 'Māori',       # Maori
-               'min' => 'Baso Minangkabau',    # Minangkabau
-               'mk' => 'македонски', # Macedonian
-               'ml' => 'മലയാളം',   # Malayalam
-               'mn' => 'монгол', # Halh Mongolian (Cyrillic) (ISO 639-3: khk)
-               'mo' => 'молдовеняскэ',     # Moldovan, deprecated
-               'mr' => 'मराठी',      # Marathi
-               'mrj' => 'кырык мары', # Hill Mari
-               'ms' => 'Bahasa Melayu',        # Malay
-               'mt' => 'Malti',        # Maltese
-               'mus' => 'Mvskoke',     # Muskogee/Creek
-               'mwl' => 'Mirandés',   # Mirandese
-               'my' => 'မြန်မာဘာသာ',               # Burmese
-               'myv' => 'эрзянь',        # Erzya
-               'mzn' => 'مازِرونی',            # Mazanderani
-               'na' => 'Dorerin Naoero',               # Nauruan
-               'nah' => 'Nāhuatl',            # Nahuatl (not in ISO 639-3)
+               'mdf' => 'мокшень', # Moksha
+               'mg' => 'Malagasy', # Malagasy
+               'mh' => 'Ebon', # Marshallese
+               'mhr' => 'олык марий', # Eastern Mari
+               'mi' => 'Māori', # Maori
+               'min' => 'Baso Minangkabau', # Minangkabau
+               'mk' => 'македонски', # Macedonian
+               'ml' => 'മലയാളം', # Malayalam
+               'mn' => 'монгол', # Halh Mongolian (Cyrillic) (ISO 639-3: khk)
+               'mo' => 'молдовеняскэ', # Moldovan, deprecated
+               'mr' => 'मराठी', # Marathi
+               'mrj' => 'кырык мары', # Hill Mari
+               'ms' => 'Bahasa Melayu', # Malay
+               'mt' => 'Malti', # Maltese
+               'mus' => 'Mvskoke', # Muskogee/Creek
+               'mwl' => 'Mirandés', # Mirandese
+               'my' => 'မြန်မာဘာသာ', # Burmese
+               'myv' => 'эрзянь', # Erzya
+               'mzn' => 'مازِرونی', # Mazanderani
+               'na' => 'Dorerin Naoero', # Nauruan
+               'nah' => 'Nāhuatl', # Nahuatl (not in ISO 639-3)
                'nan' => 'Bân-lâm-gú', # Min-nan, bug 8217
-               'nap' => 'Napulitano',  # Neapolitan, bug 43793
-               'nb' => "norsk bokmål",                # Norwegian (Bokmal)
-               'nds' => 'Plattdüütsch',      # Low German ''or'' Low Saxon
-               'nds-nl' => 'Nedersaksies',     # aka Nedersaksisch: Dutch Low Saxon
-               'ne' => 'नेपाली',   # Nepali
-               'new' => 'नेपाल भाषा',                # Newar / Nepal Bhasha
-               'ng' => 'Oshiwambo',            # Ndonga
-               'niu' => 'Niuē',       # Niuean
-               'nl' => 'Nederlands',   # Dutch
-               'nl-informal' => "Nederlands (informeel)\xE2\x80\x8E",  # Dutch (informal address ("je"))
-               'nn' => "norsk nynorsk",        # Norwegian (Nynorsk)
-               'no' => "norsk bokmål",                # Norwegian (falls back to nb).
-               'nov' => 'Novial',              # Novial
-               'nrm' => 'Nouormand',   # Norman
-               'nso' => 'Sesotho sa Leboa',    # Northern Sotho
-               'nv' => 'Diné bizaad', # Navajo
-               'ny' => 'Chi-Chewa',    # Chichewa
-               'oc' => 'occitan',              # Occitan
-               'olo' => 'Livvinкarjala',              # Livvi-Karelian
-               'om' => 'Oromoo',               # Oromo
-               'or' => 'ଓଡ଼ିଆ',              # Oriya
+               'nap' => 'Napulitano', # Neapolitan, bug 43793
+               'nb' => 'norsk bokmål', # Norwegian (Bokmal)
+               'nds' => 'Plattdüütsch', # Low German ''or'' Low Saxon
+               'nds-nl' => 'Nedersaksies', # aka Nedersaksisch: Dutch Low Saxon
+               'ne' => 'नेपाली', # Nepali
+               'new' => 'नेपाल भाषा', # Newar / Nepal Bhasha
+               'ng' => 'Oshiwambo', # Ndonga
+               'niu' => 'Niuē', # Niuean
+               'nl' => 'Nederlands', # Dutch
+               'nl-informal' => "Nederlands (informeel)\xE2\x80\x8E", # Dutch (informal address ("je"))
+               'nn' => 'norsk nynorsk', # Norwegian (Nynorsk)
+               'no' => 'norsk bokmål', # Norwegian (falls back to nb).
+               'nov' => 'Novial', # Novial
+               'nrm' => 'Nouormand', # Norman
+               'nso' => 'Sesotho sa Leboa', # Northern Sotho
+               'nv' => 'Diné bizaad', # Navajo
+               'ny' => 'Chi-Chewa', # Chichewa
+               'oc' => 'occitan', # Occitan
+               'olo' => 'Livvinкarjala', # Livvi-Karelian
+               'om' => 'Oromoo', # Oromo
+               'or' => 'ଓଡ଼ିଆ', # Oriya
                'os' => 'Ирон', # Ossetic, bug 29091
                'pa' => 'ਪੰਜਾਬੀ', # Eastern Punjabi (Gurmukhi script) (pan)
-               'pag' => 'Pangasinan',  # Pangasinan
-               'pam' => 'Kapampangan',   # Pampanga
-               'pap' => 'Papiamentu',  # Papiamentu
-               'pcd' => 'Picard',      # Picard
-               'pdc' => 'Deitsch',     # Pennsylvania German
-               'pdt' => 'Plautdietsch',        # Plautdietsch/Mennonite Low German
-               'pfl' => 'Pälzisch',   # Palatinate German
-               'pi' => 'पालि', # Pali
+               'pag' => 'Pangasinan', # Pangasinan
+               'pam' => 'Kapampangan', # Pampanga
+               'pap' => 'Papiamentu', # Papiamentu
+               'pcd' => 'Picard', # Picard
+               'pdc' => 'Deitsch', # Pennsylvania German
+               'pdt' => 'Plautdietsch', # Plautdietsch/Mennonite Low German
+               'pfl' => 'Pälzisch', # Palatinate German
+               'pi' => 'पालि', # Pali
                'pih' => 'Norfuk / Pitkern', # Norfuk/Pitcairn/Norfolk
-               'pl' => 'polski',               # Polish
-               'pms' => 'Piemontèis', # Piedmontese
-               'pnb' => 'پنجابی',        # Western Punjabi
-               'pnt' => 'Ποντιακά',    # Pontic/Pontic Greek
-               'prg' => 'Prūsiskan',  # Prussian
-               'ps' => 'پښتو',     # Pashto
-               'pt' => 'português',   # Portuguese
-               'pt-br' => 'português do Brasil',      # Brazilian Portuguese
-               'qu' => 'Runa Simi',    # Southern Quechua
-               'qug' => 'Runa shimi',  # Kichwa/Northern Quechua (temporarily used until Kichwa has its own)
-               'rgn' => 'Rumagnôl',   # Romagnol
-               'rif' => 'Tarifit',     # Tarifit
-               'rm' => 'rumantsch',    # Raeto-Romance
-               'rmy' => 'Romani',      # Vlax Romany
-               'rn' => 'Kirundi',              # Rundi/Kirundi/Urundi
-               'ro' => 'română',     # Romanian
+               'pl' => 'polski', # Polish
+               'pms' => 'Piemontèis', # Piedmontese
+               'pnb' => 'پنجابی', # Western Punjabi
+               'pnt' => 'Ποντιακά', # Pontic/Pontic Greek
+               'prg' => 'Prūsiskan', # Prussian
+               'ps' => 'پښتو', # Pashto
+               'pt' => 'português', # Portuguese
+               'pt-br' => 'português do Brasil', # Brazilian Portuguese
+               'qu' => 'Runa Simi', # Southern Quechua
+               'qug' => 'Runa shimi', # Kichwa/Northern Quechua (temporarily used until Kichwa has its own)
+               'rgn' => 'Rumagnôl', # Romagnol
+               'rif' => 'Tarifit', # Tarifit
+               'rm' => 'rumantsch', # Raeto-Romance
+               'rmy' => 'Romani', # Vlax Romany
+               'rn' => 'Kirundi', # Rundi/Kirundi/Urundi
+               'ro' => 'română', # Romanian
                'roa-rup' => 'armãneashti', # Aromanian (deprecated code, 'rup' exists in ISO 693-3)
-               'roa-tara' => 'tarandíne',     # Tarantino
-               'ru' => 'русский',       # Russian
-               'rue' => 'русиньскый',        # Rusyn
+               'roa-tara' => 'tarandíne', # Tarantino
+               'ru' => 'русский', # Russian
+               'rue' => 'русиньскый', # Rusyn
                'rup' => 'armãneashti', # Aromanian
-               'ruq' => 'Vlăheşte',  # Megleno-Romanian (multiple scripts - defaults to Latin)
-               'ruq-cyrl' => 'Влахесте',       # Megleno-Romanian (Cyrillic script)
-               # 'ruq-grek' => 'Βλαεστε',       # Megleno-Romanian (Greek script)
-               'ruq-latn' => 'Vlăheşte',     # Megleno-Romanian (Latin script)
-               'rw' => 'Kinyarwanda',  # Kinyarwanda, should possibly be Kinyarwandi
-               'sa' => 'संस्कृतम्',  # Sanskrit
+               'ruq' => 'Vlăheşte', # Megleno-Romanian (multiple scripts - defaults to Latin)
+               'ruq-cyrl' => 'Влахесте', # Megleno-Romanian (Cyrillic script)
+               # 'ruq-grek' => 'Βλαεστε', # Megleno-Romanian (Greek script)
+               'ruq-latn' => 'Vlăheşte', # Megleno-Romanian (Latin script)
+               'rw' => 'Kinyarwanda', # Kinyarwanda, should possibly be Kinyarwandi
+               'sa' => 'संस्कृतम्', # Sanskrit
                'sah' => 'саха тыла', # Sakha
-               'sat' => 'Santali',     # Santali
-               'sc' => 'sardu',                # Sardinian
-               'scn' => 'sicilianu',   # Sicilian
-               'sco' => 'Scots',       # Scots
-               'sd' => 'سنڌي',     # Sindhi
-               'sdc' => 'Sassaresu',   # Sassarese
-               'sdh' => 'کوردی خوارگ',       # Southern Kurdish
-               'se' => 'sámegiella',  # Northern Sami
-               'sei' => 'Cmique Itom', # Seri
-               'ses' => 'Koyraboro Senni',     # Koyraboro Senni
-               'sg' => 'Sängö',              # Sango/Sangho
+               'sat' => 'Santali', # Santali
+               'sc' => 'sardu', # Sardinian
+               'scn' => 'sicilianu', # Sicilian
+               'sco' => 'Scots', # Scots
+               'sd' => 'سنڌي', # Sindhi
+               'sdc' => 'Sassaresu', # Sassarese
+               'sdh' => 'کوردی خوارگ', # Southern Kurdish
+               'se' => 'sámegiella', # Northern Sami
+               'sei' => 'Cmique Itom', # Seri
+               'ses' => 'Koyraboro Senni', # Koyraboro Senni
+               'sg' => 'Sängö', # Sango/Sangho
                'sgs' => 'žemaitėška', # Samogitian
                'sh' => 'srpskohrvatski / српскохрватски', # Serbocroatian
-               'shi' => 'Tašlḥiyt/ⵜⴰⵛⵍⵃⵉⵜ',    # Tachelhit (multiple scripts - defaults to Latin)
-               'shi-tfng' => 'ⵜⴰⵛⵍⵃⵉⵜ',    # Tachelhit (Tifinagh script)
-               'shi-latn' => 'Tašlḥiyt',    # Tachelhit (Latin script)
-               'si' => 'සිංහල',      # Sinhalese
-               'simple' => 'Simple English',   # Simple English
-               'sk' => 'slovenčina',  # Slovak
-               'sl' => 'slovenščina',        # Slovenian
-               'sli' => 'Schläsch',   # Lower Selisian
-               'sm' => 'Gagana Samoa', # Samoan
-               'sma' => 'Åarjelsaemien',      # Southern Sami
-               'sn' => 'chiShona',             # Shona
-               'so' => 'Soomaaliga',   # Somali
-               'sq' => 'shqip',                # Albanian
-               'sr' => 'српски / srpski',        # Serbian (multiple scripts - defaults to Cyrillic)
+               'shi' => 'Tašlḥiyt/ⵜⴰⵛⵍⵃⵉⵜ', # Tachelhit (multiple scripts - defaults to Latin)
+               'shi-tfng' => 'ⵜⴰⵛⵍⵃⵉⵜ', # Tachelhit (Tifinagh script)
+               'shi-latn' => 'Tašlḥiyt', # Tachelhit (Latin script)
+               'si' => 'සිංහල', # Sinhalese
+               'simple' => 'Simple English', # Simple English
+               'sk' => 'slovenčina', # Slovak
+               'sl' => 'slovenščina', # Slovenian
+               'sli' => 'Schläsch', # Lower Selisian
+               'sm' => 'Gagana Samoa', # Samoan
+               'sma' => 'Åarjelsaemien', # Southern Sami
+               'sn' => 'chiShona', # Shona
+               'so' => 'Soomaaliga', # Somali
+               'sq' => 'shqip', # Albanian
+               'sr' => 'српски / srpski', # Serbian (multiple scripts - defaults to Cyrillic)
                'sr-ec' => "српски (ћирилица)\xE2\x80\x8E",       # Serbian Cyrillic ekavian
                'sr-el' => "srpski (latinica)\xE2\x80\x8E",     # Serbian Latin ekavian
-               'srn' => 'Sranantongo',         # Sranan Tongo
-               'ss' => 'SiSwati',              # Swati
-               'st' => 'Sesotho',              # Southern Sotho
-               'stq' => 'Seeltersk',           # Saterland Frisian
-               'su' => 'Basa Sunda',   # Sundanese
-               'sv' => 'svenska',              # Swedish
-               'sw' => 'Kiswahili',    # Swahili
-               'szl' => 'ślůnski',   # Silesian
-               'ta' => 'தமிழ்',      # Tamil
+               'srn' => 'Sranantongo', # Sranan Tongo
+               'ss' => 'SiSwati', # Swati
+               'st' => 'Sesotho', # Southern Sotho
+               'stq' => 'Seeltersk', # Saterland Frisian
+               'su' => 'Basa Sunda', # Sundanese
+               'sv' => 'svenska', # Swedish
+               'sw' => 'Kiswahili', # Swahili
+               'szl' => 'ślůnski', # Silesian
+               'ta' => 'தமிழ்', # Tamil
                'tcy' => 'ತುಳು', # Tulu
-               'te' => 'తెలుగు',   # Telugu
-               'tet' => 'tetun',       # Tetun
-               'tg' => 'тоҷикӣ', # Tajiki (falls back to tg-cyrl)
-               'tg-cyrl' => 'тоҷикӣ',    # Tajiki (Cyrllic script) (default)
-               'tg-latn' => 'tojikī', # Tajiki (Latin script)
-               'th' => 'ไทย',    # Thai
-               'ti' => 'ትግርኛ',         # Tigrinya
-               'tk' => 'Türkmençe',  # Turkmen
-               'tl' => 'Tagalog',              # Tagalog
-               'tly' => 'толышә зывон',     # Talysh
-               'tn' => 'Setswana',             # Setswana
-               'to' => 'lea faka-Tonga',               # Tonga (Tonga Islands)
-               'tokipona' => 'Toki Pona',      # Toki Pona
-               'tpi' => 'Tok Pisin',   # Tok Pisin
-               'tr' => 'Türkçe',     # Turkish
+               'te' => 'తెలుగు', # Telugu
+               'tet' => 'tetun', # Tetun
+               'tg' => 'тоҷикӣ', # Tajiki (falls back to tg-cyrl)
+               'tg-cyrl' => 'тоҷикӣ', # Tajiki (Cyrllic script) (default)
+               'tg-latn' => 'tojikī', # Tajiki (Latin script)
+               'th' => 'ไทย', # Thai
+               'ti' => 'ትግርኛ', # Tigrinya
+               'tk' => 'Türkmençe', # Turkmen
+               'tl' => 'Tagalog', # Tagalog
+               'tly' => 'толышә зывон', # Talysh
+               'tn' => 'Setswana', # Setswana
+               'to' => 'lea faka-Tonga', # Tonga (Tonga Islands)
+               'tokipona' => 'Toki Pona', # Toki Pona
+               'tpi' => 'Tok Pisin', # Tok Pisin
+               'tr' => 'Türkçe', # Turkish
                'tru' => 'Ṫuroyo', # Turoyo
-               'ts' => 'Xitsonga',             # Tsonga
-               'tt' => 'татарча/tatarça',      # Tatar (multiple scripts - defaults to Cyrillic)
-               'tt-cyrl' => 'татарча',  # Tatar (Cyrillic script) (default)
-               'tt-latn' => 'tatarça',        # Tatar (Latin script)
-               'tum' => 'chiTumbuka',  # Tumbuka
-               'tw' => 'Twi',                  # Twi, (FIXME!)
-               'ty' => 'reo tahiti',   # Tahitian
-               'tyv' => 'тыва дыл',     # Tyvan
-               'tzm' => 'ⵜⴰⵎⴰⵣⵉⵖⵜ',    # Tamazight
-               'udm' => 'удмурт',        # Udmurt
-               'ug' => 'ئۇيغۇرچە / Uyghurche', # Uyghur (multiple scripts - defaults to Arabic)
+               'ts' => 'Xitsonga', # Tsonga
+               'tt' => 'татарча/tatarça', # Tatar (multiple scripts - defaults to Cyrillic)
+               'tt-cyrl' => 'татарча', # Tatar (Cyrillic script) (default)
+               'tt-latn' => 'tatarça', # Tatar (Latin script)
+               'tum' => 'chiTumbuka', # Tumbuka
+               'tw' => 'Twi', # Twi, (FIXME!)
+               'ty' => 'reo tahiti', # Tahitian
+               'tyv' => 'тыва дыл', # Tyvan
+               'tzm' => 'ⵜⴰⵎⴰⵣⵉⵖⵜ', # Tamazight
+               'udm' => 'удмурт', # Udmurt
+               'ug' => 'ئۇيغۇرچە / Uyghurche', # Uyghur (multiple scripts - defaults to Arabic)
                'ug-arab' => 'ئۇيغۇرچە', # Uyghur (Arabic script) (default)
                'ug-latn' => 'Uyghurche', # Uyghur (Latin script)
-               'uk' => 'українська', # Ukrainian
-               'ur' => 'اردو',     # Urdu
-               'uz' => "oʻzbekcha/ўзбекча",    # Uzbek (multiple scripts - defaults to Latin)
-               'uz-cyrl' => "ўзбекча",  # Uzbek Cyrillic
-               'uz-latn' => "oʻzbekcha",      # Uzbek Latin (default)
-               've' => 'Tshivenda',            # Venda
-               'vec' => 'vèneto',     # Venetian
-               'vep' => 'vepsän kel’',      # Veps
-               'vi' => 'Tiếng Việt',       # Vietnamese
+               'uk' => 'українська', # Ukrainian
+               'ur' => 'اردو', # Urdu
+               'uz' => 'oʻzbekcha/ўзбекча',    # Uzbek (multiple scripts - defaults to Latin)
+               'uz-cyrl' => 'ўзбекча',  # Uzbek Cyrillic
+               'uz-latn' => 'oʻzbekcha',      # Uzbek Latin (default)
+               've' => 'Tshivenda', # Venda
+               'vec' => 'vèneto', # Venetian
+               'vep' => 'vepsän kel’', # Veps
+               'vi' => 'Tiếng Việt', # Vietnamese
                'vls' => 'West-Vlams', # West Flemish
                'vmf' => 'Mainfränkisch', # Upper Franconian, Main-Franconian
-               'vo' => 'Volapük',     # Volapük
-               'vot' => 'Vaďďa',     # Vod/Votian
-               'vro' => 'Võro',    # Võro
-               'wa' => 'walon',                # Walloon
+               'vo' => 'Volapük', # Volapük
+               'vot' => 'Vaďďa', # Vod/Votian
+               'vro' => 'Võro', # Võro
+               'wa' => 'walon', # Walloon
                'war' => 'Winaray', # Waray-Waray
-               'wo' => 'Wolof',                # Wolof
-               'wuu' => '吴语',              # Wu Chinese
-               'xal' => 'хальмг',                # Kalmyk-Oirat
-               'xh' => 'isiXhosa',             # Xhosan
-               'xmf' => 'მარგალური', # Mingrelian
-               'yi' => 'ייִדיש', # Yiddish
-               'yo' => 'Yorùbá',     # Yoruba
-               'yue' => '粵語',      # Cantonese
-               'za' => 'Vahcuengh',    # Zhuang
-               'zea' => 'Zeêuws',     # Zeeuws/Zeaws
-               'zh' => '中文',                                               # (Zhōng Wén) - Chinese
-               'zh-classical' => '文言',                     # Classical Chinese/Literary Chinese -- (see bug 8217)
-               'zh-cn' => "中文(中国大陆)\xE2\x80\x8E",      # Chinese (PRC)
-               'zh-hans' => "中文(简体)\xE2\x80\x8E",  # Mandarin Chinese (Simplified Chinese script) (cmn-hans)
-               'zh-hant' => "中文(繁體)\xE2\x80\x8E",  # Mandarin Chinese (Traditional Chinese script) (cmn-hant)
-               'zh-hk' => "中文(香港)\xE2\x80\x8E",    # Chinese (Hong Kong)
-               'zh-min-nan' => 'Bân-lâm-gú',                                # Min-nan -- (see bug 8217)
-               'zh-mo' => "中文(澳門)\xE2\x80\x8E",    # Chinese (Macau)
-               'zh-my' => "中文(马来西亚)\xE2\x80\x8E",      # Chinese (Malaysia)
-               'zh-sg' => "中文(新加坡)\xE2\x80\x8E", # Chinese (Singapore)
-               'zh-tw' => "中文(台灣)\xE2\x80\x8E",    # Chinese (Taiwan)
-               'zh-yue' => '粵語',                                   # Cantonese -- (see bug 8217)
-               'zu' => 'isiZulu'               # Zulu
+               'wo' => 'Wolof', # Wolof
+               'wuu' => '吴语', # Wu Chinese
+               'xal' => 'хальмг', # Kalmyk-Oirat
+               'xh' => 'isiXhosa', # Xhosan
+               'xmf' => 'მარგალური', # Mingrelian
+               'yi' => 'ייִדיש', # Yiddish
+               'yo' => 'Yorùbá', # Yoruba
+               'yue' => '粵語', # Cantonese
+               'za' => 'Vahcuengh', # Zhuang
+               'zea' => 'Zeêuws', # Zeeuws/Zeaws
+               'zh' => '中文', # (Zhōng Wén) - Chinese
+               'zh-classical' => '文言', # Classical Chinese/Literary Chinese -- (see bug 8217)
+               'zh-cn' => "中文(中国大陆)\xE2\x80\x8E", # Chinese (PRC)
+               'zh-hans' => "中文(简体)\xE2\x80\x8E", # Mandarin Chinese (Simplified Chinese script) (cmn-hans)
+               'zh-hant' => "中文(繁體)\xE2\x80\x8E", # Mandarin Chinese (Traditional Chinese script) (cmn-hant)
+               'zh-hk' => "中文(香港)\xE2\x80\x8E", # Chinese (Hong Kong)
+               'zh-min-nan' => 'Bân-lâm-gú', # Min-nan -- (see bug 8217)
+               'zh-mo' => "中文(澳門)\xE2\x80\x8E", # Chinese (Macau)
+               'zh-my' => "中文(马来西亚)\xE2\x80\x8E", # Chinese (Malaysia)
+               'zh-sg' => "中文(新加坡)\xE2\x80\x8E", # Chinese (Singapore)
+               'zh-tw' => "中文(台灣)\xE2\x80\x8E", # Chinese (Taiwan)
+               'zh-yue' => '粵語', # Cantonese -- (see bug 8217)
+               'zu' => 'isiZulu' # Zulu
        ];
 }
index e5056f2..4216c9d 100644 (file)
        "apisandbox-dynamic-parameters-add-placeholder": "Назва парамэтру",
        "apisandbox-dynamic-error-exists": "Парамэтар з назвай «$1» ужо існуе.",
        "apisandbox-deprecated-parameters": "Састарэлыя парамэтры",
+       "apisandbox-submit-invalid-fields-title": "Некаторыя палі няслушныя",
+       "apisandbox-submit-invalid-fields-message": "Калі ласка, выпраўце пазначаныя палі і паспрабуйце яшчэ раз.",
        "apisandbox-results": "Вынікі",
        "apisandbox-request-url-label": "URL-адрас запыту:",
        "apisandbox-request-time": "Час запыту: {{PLURAL:$1|$1 мс}}",
index e0543f0..e00c4a5 100644 (file)
        "logentry-newusers-create2": "$1 {{GENDER:$2|кхоьллина}} декъашхочун дӀаяздапр $3",
        "logentry-newusers-byemail": "$1 {{GENDER:$2|кхоьллина}} декъашхочун дӀаяздар $3 пароль электронан поште яхьийтина",
        "logentry-newusers-autocreate": "Автоматически кхоьллина {{GENDER:$2|декъашхочун}} $1 дӀаяздар",
+       "logentry-protect-move_prot": "{{GENDER:$2|Декъашхо}} $1 $4 агӀона тӀера ларъяр $3 агӀона тӀе даьккхина",
        "logentry-protect-unprotect": "$1 — $3 тӀера ларъяр {{GENDER:$2|дӀадаьккхина}}",
        "logentry-protect-protect": "$1 {{GENDER:$2|ларйина}} $3 $4",
        "logentry-protect-protect-cascade": "$1 {{GENDER:$2|ларйина}} $3 $4 [каскадан]",
index 46d2669..ddf8744 100644 (file)
@@ -45,7 +45,8 @@
                        "Matma Rex",
                        "Xð",
                        "Robin van der Vliet",
-                       "Zciric"
+                       "Zciric",
+                       "Psychoslave"
                ]
        },
        "tog-underline": "Substreki ligilojn",
@@ -63,6 +64,7 @@
        "tog-watchdefault": "Aldoni al mia atentaro paĝojn kaj dosierojn redaktitajn de mi",
        "tog-watchmoves": "Aldoni paĝojn kaj dosierojn, kiujn mi movas, al mia atentaro",
        "tog-watchdeletion": "Aldoni paĝojn kaj dosierojn, kiujn mi forigas, al mia atentaro",
+       "tog-watchuploads": "Aldonu novajn dosierojn ke mi alŝutas al mia atentaro",
        "tog-watchrollback": "Aldoni paĝojn, kie mi amasmalfaris, al mia atentaro.",
        "tog-minordefault": "Marki defaŭlte ĉiujn redaktojn kiel etajn",
        "tog-previewontop": "Montri antaŭrigardon antaŭ redaktilo",
@@ -80,6 +82,7 @@
        "tog-watchlisthidebots": "Kaŝi robotajn redaktojn de la atentaro",
        "tog-watchlisthideminor": "Kaŝi malgrandajn redaktojn de la atentaro",
        "tog-watchlisthideliu": "Kaŝi redaktojn de ensalutitaj uzantoj de la atentaro",
+       "tog-watchlistreloadautomatically": "Reŝarĝi la atentaron aŭtomate ĉiam filtro estas ŝanĝita (Necesi Ĝavoskripton)",
        "tog-watchlisthideanons": "Kaŝi redaktojn de anonimuloj de la atentaro",
        "tog-watchlisthidepatrolled": "Kaŝi patrolitajn redaktojn de la atentaro",
        "tog-watchlisthidecategorization": "Kaŝu enkategoriigon de paĝoj",
        "databaseerror-query": "Mendo: $1",
        "databaseerror-function": "Funkcio: $1",
        "databaseerror-error": "Eraro: $1",
+       "transaction-duration-limit-exceeded": "Por eviti krei egan atendotempon de replikado, tiu transakcio estis ĉesigita pro la skribdaŭro ($1) superigis la limon da $2 {{plural:$2|sekondo|sekondoj}}.",
        "laggedslavemode": "Avertu: la paĝo eble ne enhavas lastatempajn ĝisdatigojn.",
        "readonly": "Datumbazo ŝlosita, nurlega",
        "enterlockreason": "Bonvolu klarigi, kial oni ŝlosas la datumbazon, kaj\nla estimatan tempon de malŝlosado.",
index 85f17a5..c478e9d 100644 (file)
@@ -28,7 +28,8 @@
                        "NehalDaveND",
                        "Nisargjhaveri",
                        "Matma Rex",
-                       "Bhatakati aatma"
+                       "Bhatakati aatma",
+                       "YmKavishwar"
                ]
        },
        "tog-underline": "કડીઓની નીચે લીટી (અંડરલાઇન):",
        "accmailtitle": "ગુપ્તસંજ્ઞા મોકલવામાં આવી છે.",
        "accmailtext": "[[User talk:$1|$1]] માટે રચેલ ગુપ્તસંજ્ઞા $2 ને મોકલાવી દેવાઇ છે. આ નવા ખાતાનીગુપ્તસંજ્ઞા પ્રવેશ કર્યા બાદ ''[[Special:ChangePassword|ગુપ્તસંજ્ઞા બદલો]]'' વાપરીને બદલી શકાશે.",
        "newarticle": "(નવીન)",
-       "newarticletext": "આપ જે કડીને અનુસરીને અહીં પહોંચ્યા છો તે પાનું અસ્તિત્વમાં નથી.\n<br />નવું પાનું બનાવવા માટે નીચે આપેલા ખાનામાં લખવાનું શરૂ કરો (વધુ માહિતિ માટે [$1 મદદ] જુઓ).\n<br />જો આપ ભુલમાં અહીં આવી ગયા હોવ તો, આપનાં બ્રાઉઝર નાં '''બેક''' બટન પર ક્લિક કરીને પાછા વળો.",
+       "newarticletext": "<div style=\"background: #F9F9F9; margin-top: 1em; padding: 1em; border: 1px solid #ccc; border-right: 2px solid #ccc; border-bottom: 2px solid #ccc\"><center>'''આ વિકિ પ્રકલ્પ પર આ પ્રકારનો લેખ હાલમાં નથી'''</center>\n----\n* [[Image:Searchtool.svg|25px|alt=|link=]] '''[[{{ns:special}}:Search/{{PAGENAME}}|“{{PAGENAME}}”]]''' માટે શોધો.\n* [[Image:Nuvola apps fonts.png|25px|alt=|link=]] જે લેખોનું શીર્ષક આ પ્રત્યય સાથે શરુ થાય છે તેનો  [[{{ns:special}}:Prefixindex/{{FULLPAGENAME}}|ઉપસર્ગ]] જૂઓ.\n* [[Image:Nuvola apps ksig.png|25px|alt=|link=]] <span class=\"plainlinks\">'''[{{SERVER}}{{localurl:{{NAMESPACE}}:{{PAGENAME}}|action=edit}} આ શીર્ષકનું નવું પૃષ્ઠ બનાવો.]'''</span> \n* [[Image:WP-TranslationProject TwoFlags.svg|25px|alt=|link=]] ''વૈશ્વિક લેખ યોજના'' દ્વારા આ લેખને [//vs.aka-online.de/cgi-bin/globalwpsearch.pl?search={{PAGENAMEE}} અન્ય ભાષાઓમાં શોધો.]\n<div style=\"margin: 1em 2em 1em 3em; font-size: 90%;\">\nયોગદાનકર્તાઓ માટે:\n* જો આપ હાલમાં આ લેખ બનાવી રહ્યા છો તો પોતાના બ્રાઉઝરની <span class=\"plainlinks\">[{{SERVER}}{{localurl:{{NAMESPACE}}:{{PAGENAME}}|action=purge}} કૈશ ખાલી]</span> કરો, અથવા થોડી વધુ રાહ જૂઓ, પછી કામ આગળ વધારો.\n* કદાચ આ પાનું દૂર કરાયું છે, આ જોવા માટે કૃપા કરીને <span class=\"plainlinks\">[{{fullurl:Special:Log|type=delete&page={{FULLPAGENAMEE}}}} આ પાનાનો વિલોપન ઇતિહાસ]</span> જૂઓ.\n* આપ આ લેખ બનાવવા માગો છો તો ક્રુપા કરીને નીચે આપેલા ખાનામાં લખવાનું શરુ કરો.\n* જો આપ ભૂલમાં અહીં આવી ગયા છો તો આપના બ્રાઉઝરના બૅક બટન પર ક્લિક કરીને પરત ફરો.</div></div>",
        "anontalkpagetext": "----\n<em>આ એક અજ્ઞાત સભ્યનું ચર્ચા પાનું છે જેમણે ક્યાં તો પોતાનું ખાતું ખોલ્યું નથી અથવા તો તેને વાપરતા નથી.</em>\nઆથી તેમને ઓળખવા માટે અમારે સાંખ્યિક IP સરનામાની મદદ લેવી પડી છે.\nઆવું IP સરનામું ઘણાં અન્ય સભ્યો પણ વાપરતા હોઇ શકે.\nજો તમે અજ્ઞાત સભ્ય હોવ અને માનતા હોવ કે અસંધિત ટિપ્પણીઓ તમારી તરફ વાળવામાં આવી છે, તો કૃપયા  [[Special:UserLogin/signup|create an account]] અથવા [[Special:UserLogin|log in]]નો ઉપયોગ કરશો જેથી તમને કોઈ અજ્ઞાત સભ્ય સમજવાની ભૂલ ભવિષ્યમાં ટાળી શકાય.",
        "noarticletext": "આ પાનામાં હાલમાં કોઇ માહિતિ નથી.\nતમે  [[Special:Search/{{PAGENAME}}|આ શબ્દ]] ધરાવતાં અન્ય લેખો શોધી શકો છો, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} સંલગ્ન માહિતિ પત્રકોમાં શોધી શકો છો],\nઅથવા  [{{fullurl:{{FULLPAGENAME}}|action=edit}} આ પાનામાં ફેરફાર કરી] માહિતિ ઉમેરવાનું શરૂ કરી શકો છો</span>.",
        "noarticletext-nopermission": "આ પાનામાં હાલમાં કોઇ માહિતિ નથી.\nતમે  [[Special:Search/{{PAGENAME}}|આ શબ્દ]] ધરાવતાં અન્ય લેખો શોધી શકો છો, અથવા <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} સંલગ્ન માહિતિ પત્રકોમાં શોધી શકો છો], પરંતુ તમને આ પાનું બનાવવાની મંજૂરી નથી.",
index 32ed7fc..372611e 100644 (file)
@@ -33,7 +33,8 @@
                        "Eraab",
                        "Geagea",
                        "פוילישער",
-                       "DatGuy"
+                       "DatGuy",
+                       "IKhitron"
                ]
        },
        "tog-underline": "סימון קישורים בקו תחתי:",
        "hr_tip": "קו אופקי (השתדלו להימנע משימוש בקו)",
        "summary": "תקציר:",
        "subject": "נושא:",
-       "minoredit": "×\96×\94×\95 ×©×\99× ×\95×\99 ×\9eשנ×\99",
+       "minoredit": "×\96×\95×\94×\99 ×¢×¨×\99×\9b×\94 ×\9eשנ×\99ת",
        "watchthis": "מעקב אחרי דף זה",
        "savearticle": "שמירה",
        "preview": "תצוגה מקדימה",
        "recentchanges-submit": "הצגה",
        "rcnotefrom": "להלן {{PLURAL:$5|השינוי שבוצע|השינויים שבוצעו}} החל מ‏‏֫־<b>$2</b> (עד <b>$1</b> מוצגים).",
        "rclistfrom": "הצגת שינויים חדשים החל מ־$2, $3",
-       "rcshowhideminor": "$1 ×©×\99× ×\95×\99×\99×\9d ×\9eשנ×\99×\99×\9d",
+       "rcshowhideminor": "$1 ×¢×¨×\99×\9b×\95ת ×\9eשנ×\99×\95ת",
        "rcshowhideminor-show": "הצגת",
        "rcshowhideminor-hide": "הסתרת",
        "rcshowhidebots": "$1 בוטים",
        "logentry-contentmodel-change-revert": "שחזור",
        "protectlogpage": "יומן הגנות",
        "protectlogtext": "להלן רשימה של שינויי ההגנה על דפים.\nראו גם את [[Special:ProtectedPages|רשימת הדפים המוגנים]] הנוכחית.",
-       "protectedarticle": "×\94פע×\99×\9c הגנה על הדף \"[[$1]]\"",
-       "modifiedarticleprotection": "ש×\99× ×\94 ×\90ת ×¨×\9eת ×\94×\94×\92× ×\94 ×©×\9c ×\94×\93×£ \"[[$1]]\"",
-       "unprotectedarticle": "×\94ס×\99ר ×\90ת ×\94×\94×\92× ×\94 ×\9e×\94×\93×£ \"[[$1]]\"",
-       "movedarticleprotection": "×\94×¢×\91×\99ר ×\90ת ×\94×\92×\93ר×\95ת ×\94×\94×\92× ×\94 ×\9e\"[[$2]]\" ×\9c\"[[$1]]\"",
+       "protectedarticle": "×\94×\95פע×\9c×\94 הגנה על הדף \"[[$1]]\"",
+       "modifiedarticleprotection": "ר×\9eת ×\94×\94×\92× ×\94 ×©×\9c ×\94×\93×£ \"[[$1]]\" ×©×\95נת×\94",
+       "unprotectedarticle": "×\94×\94×\92× ×\94 ×¢×\9c ×\94×\93×£ \"[[$1]]\" ×\94×\95סר×\94",
+       "movedarticleprotection": "×\94×\92×\93ר×\95ת ×\94×\94×\92× ×\94 ×©×\9c ×\94×\93×£ \"[[$2]]\" ×\94×\95×¢×\91ר×\95 ×\9c×\93×£ \"[[$1]]\"",
        "protect-title": "שינוי רמת ההגנה של הדף \"$1\"",
        "protect-title-notallowed": "הצגת רמת ההגנה של הדף \"$1\"",
        "prot_1movedto2": "[[$1]] הועבר לשם [[$2]]",
        "ipbother": "זמן אחר:",
        "ipboptions": "שעתיים:2 hours,יום:1 day,שלושה ימים:3 days,שבוע:1 week,שבועיים:2 weeks,חודש:1 month,שלושה חודשים:3 months,שישה חודשים:6 months,שנה:1 year,זמן בלתי מוגבל:infinite",
        "ipbhidename": "הסתרת שם המשתמש מהעריכות ומהרשימות",
-       "ipbwatchuser": "מעקב אחר דף המשתמש ודף השיחה של משתמש זה",
+       "ipbwatchuser": "מעקב אחרי דף המשתמש ודף השיחה של משתמש זה",
        "ipb-disableusertalk": "ביטול האפשרות של המשתמש לערוך את דף השיחה של עצמו בעת החסימה",
        "ipb-change-block": "חסימת המשתמש מחדש עם הגדרות אלה",
        "ipb-confirm": "אישור החסימה",
        "tooltip-preview": "תצוגה מקדימה של השינויים שלך. נא להשתמש באפשרות זו לפני השמירה.",
        "tooltip-diff": "צפייה בשינויים שערכתם בטקסט",
        "tooltip-compareselectedversions": "צפייה בהשוואת שתי גרסאות של דף זה",
-       "tooltip-watch": "הוספת דף זה לרשימת המעקב",
+       "tooltip-watch": "הוספת דף זה לרשימת המעקב שלך",
        "tooltip-watchlistedit-normal-submit": "הסרת הדפים",
        "tooltip-watchlistedit-raw-submit": "עדכון רשימת המעקב",
        "tooltip-recreate": "יצירת הדף מחדש למרות שהוא נמחק",
index 39436f8..ed8b068 100644 (file)
        "recentchanges": "Վերջին փոփոխություններ",
        "recentchanges-legend": "Վերջին փոփոխությունների նախընտրություններ",
        "recentchanges-summary": "Հետևեք վիքիում կատարված վերջին փոփոխություններին այս էջում։",
+       "recentchanges-noresult": "Տրված ժամանակահատվածում այս կարգավորումներով փոփոխություն չի եղել։",
        "recentchanges-feed-description": "Հետևեք վիքիում կատարված վերջին փոփոխություններին այս սնուցման մեջ։",
        "recentchanges-label-newpage": "Այս խմբագրմամբ ստեղծվել է նոր էջ",
        "recentchanges-label-minor": "Սա չնչին խմբագրում է",
        "version-poweredby-credits": "Այս վիքին աշխատում է '''[https://www.mediawiki.org/ MediaWiki]'''֊ով, copyright © 2001-$1 $2։",
        "fileduplicatesearch": "Փնտրել կրկնօրինակ պատկերներ",
        "fileduplicatesearch-summary": "Փնտրել կրկնօրինակ պատկերներ՝ հեշ արժեքների հիման վրա",
-       "fileduplicatesearch-legend": "Փնտրել կրկնօրինակներ",
        "fileduplicatesearch-filename": "Նիշքի անուն․",
        "fileduplicatesearch-submit": "Որոնել",
        "fileduplicatesearch-info": "$1 × $2 փիքսել<br />Նիշքի չափը՝ $3<br />MIME-տիպը՝ $4",
index 20682ca..c9fa64a 100644 (file)
@@ -87,6 +87,7 @@
        "tog-watchdefault": "自分が編集したページやファイルをウォッチリストに追加",
        "tog-watchmoves": "自分が移動したページやファイルをウォッチリストに追加",
        "tog-watchdeletion": "自分が削除したページやファイルをウォッチリストに追加",
+       "tog-watchuploads": "自分が新しくアップロードしたファイルをウォッチリストに追加",
        "tog-watchrollback": "自分が巻き戻したページをウォッチリストに追加",
        "tog-minordefault": "編集をすべて既定で細部の編集とする",
        "tog-previewontop": "プレビューを編集ボックスの前に配置",
        "confirmemail_body_set": "誰か (おそらくあなた) が IP アドレス $1 から\n{{SITENAME}} のアカウント「$2」のメールアドレスをこのアドレスに設定しました。\n\nこのアカウントが本当にあなたのものであれば、以下のリンクをブラウザーで開いて、\n{{SITENAME}} のメール機能を有効にしてください。\n\n$3\n\nあなたのアカウントではない場合は、\n以下のリンクをブラウザーで開いて、メールアドレスの確認をキャンセルしてください:\n\n$5\n\nこの確認コードは $4 に期限切れになります。",
        "confirmemail_invalidated": "メールアドレスの確認が中止されました",
        "invalidateemail": "メールアドレスの確認中止",
+       "notificationemail_body_changed": "誰か (おそらくあなた) が、IP アドレス $1 から、\n{{SITENAME}} のアカウント「$2」のメールアドレスを \"$3\" に変更しました。\n\n変更した覚えがない場合、サイトの管理者に直ちに連絡してください。",
        "scarytranscludedisabled": "[ウィキ間の参照読み込みは無効になっています]",
        "scarytranscludefailed": "[$1に対してテンプレートの取得に失敗しました]",
        "scarytranscludefailed-httpstatus": "[$1に対してテンプレートの取得に失敗しました: HTTP $2]",
        "sessionprovider-generic": "$1 セッション",
        "randomrootpage": "おまかせルートページ",
        "log-action-filter-block": "ブロックの種類",
+       "log-action-filter-move": "移動の種類:",
+       "log-action-filter-newusers": "アカウント作成の種類:",
        "log-action-filter-protect": "保護の種類:",
        "log-action-filter-upload": "アップロードの種類",
        "log-action-filter-all": "すべて",
        "log-action-filter-block-unblock": "ブロック解除",
        "log-action-filter-delete-delete": "ページの削除",
        "log-action-filter-delete-restore": "ページの復帰",
+       "log-action-filter-move-move": "転送を上書きしない移動",
+       "log-action-filter-move-move_redir": "転送を上書きする移動",
+       "log-action-filter-newusers-create": "匿名利用者による作成",
+       "log-action-filter-newusers-create2": "登録利用者による作成",
+       "log-action-filter-newusers-autocreate": "自動的な作成",
        "log-action-filter-protect-protect": "保護",
        "log-action-filter-protect-modify": "保護の設定変更",
        "log-action-filter-protect-unprotect": "保護解除",
index 0659075..7982dbb 100644 (file)
        "category-empty": "''Kategori iki saiki ora ngandhut artikel utawa média.''",
        "hidden-categories": "{{PLURAL:$1|Kategori kadhelikaké|Kategori kadhelikaké}}",
        "hidden-category-category": "Kategori kadhelikan",
-       "category-subcat-count": "{{PLURAL:$2|Kategori iki namung nduwé subkategori ing ngisor ikit.|Dituduhaké {{PLURAL:$1|subkategori|$1 subkategori}} sing kalebu ing kategori iki saka total $2.}}",
+       "category-subcat-count": "{{PLURAL:$2|Kategori iki mung ngandhut subkategori ngisor iki.|Kategori iki ngandhut {{PLURAL:$1|subkategori|$1 subkategori}} ngisor iki saka gunggung $2 subkategori.}}",
        "category-subcat-count-limited": "Kategori iki ora duwé {{PLURAL:$1|subkategori|$1 subkategori}} ''berikut''.",
-       "category-article-count": "{{PLURAL:$2|Kategori iki namung ndarbèni kaca iki.|Dituduhaké {{PLURAL:$1|kaca|$1 kaca-kaca}} sing kalebu ing kategori iki saka gunggungé $2.}}",
+       "category-article-count": "{{PLURAL:$2|Kategori iki mung ngandhut kaca ngisor iki.|{{PLURAL:$1|Kaca|$1 kaca}} ngisor iki ana ing kategori iki saka gunggung $2 kaca.}}",
        "category-article-count-limited": "Kategori iki ngandhut {{PLURAL:$1|kaca|$1 kaca-kaca}} sing kapacak ing ngisor iki.",
        "category-file-count": "{{PLURAL:$2|Kategori iki mung isi barkas iki.|{{PLURAL:$1|Barkas|$1 barkas}} iki ana sajeroning kategori iki saka $2 gunggungé.}}",
        "category-file-count-limited": "Kategori iki ndarbèni {{PLURAL:$1|berkas|$1 berkas-berkas}} sing kapacak ing ngisor iki.",
        "link_tip": "Pranala njero",
        "extlink_sample": "http://www.example.com sesirahing pranala",
        "extlink_tip": "Pranala jaba (élinga ater-ater http://)",
-       "headline_sample": "Tèks judhul",
-       "headline_tip": "Subbagian tingkat 1",
+       "headline_sample": "Tulisan sesirah",
+       "headline_tip": "Sesirah tataran 2",
        "nowiki_sample": "Tèks iki ora bakal diformat",
        "nowiki_tip": "Aja nganggo format wiki",
        "image_sample": "Conto.jpg",
        "image_tip": "Mènèhi gambar/berkas",
        "media_sample": "Conto.ogg",
        "media_tip": "Pranala barkas",
-       "sig_tip": "Tapak asta panjenengan mawa tandha wektu",
+       "sig_tip": "Tandha tangan sampéyan mawa tandha wayah",
        "hr_tip": "Garis horisontal",
        "summary": "Tingkesan:",
        "subject": "Subyek/judhul:",
        "nextn": "{{PLURAL:$1|$1}} sabanjuré",
        "prevn-title": "$1 {{PLURAL:$1|asil|asil}} sadurungé",
        "nextn-title": "$1 {{PLURAL:$1|asil|asil}} sabanjuré",
-       "shown-title": "Tampilaké $1 {{PLURAL:$1|asil|asil}} saben kaca",
+       "shown-title": "Tuduhaké $1 {{PLURAL:$1|kasil|kasil}} saben kaca",
        "viewprevnext": "Deleng ($1 {{int:pipe-separator}} $2) ($3)",
        "searchmenu-exists": "'''Ana kaca kanthi jeneng \"[[$1]]\" ing wiki iki'''",
        "searchmenu-new": "<strong>Gawéa kaca \"[[:$1]]\" nyang wiki iki!</strong> {{PLURAL:$2|0=|Uga delenga kaca sing katemu sarana panggolèking sampéyan.|Uga delenga kasiling panggolèk.}}",
        "searchprofile-articles": "Kaca isi",
-       "searchprofile-images": "Multimedia",
+       "searchprofile-images": "Sarwasarana",
        "searchprofile-everything": "Samubarang",
-       "searchprofile-advanced": "Tataran luwih dhuwur/maju",
+       "searchprofile-advanced": "Lungidan",
        "searchprofile-articles-tooltip": "Golèkan ing $1",
        "searchprofile-images-tooltip": "Golèk barkas",
-       "searchprofile-everything-tooltip": "Panggolèkan kabèh isi (klebu kaca-kaca wicara)",
-       "searchprofile-advanced-tooltip": "Panggolèkan ing bilik jeneng biasa (''custom'')",
+       "searchprofile-everything-tooltip": "Golèk kabèh isi (kalebu kaca guneman)",
+       "searchprofile-advanced-tooltip": "Golèk ing lowah jeneng tinamtu",
        "search-result-size": "$1 ({{PLURAL:$2|1 tembung|$2 tembung}})",
        "search-result-category-size": "{{PLURAL:$1|1 anggota|$1 anggota}} ({{PLURAL:$2|1 subkatégori|$2 subkatégori}}, {{PLURAL:$3|1 berkas|$3 berkas}})",
        "search-redirect": "(pangalihan $1)",
        "recentchanges-label-minor": "Iki besutan cilik",
        "recentchanges-label-bot": "Besutan iki diayahi bot",
        "recentchanges-label-unpatrolled": "Besutan iki durung kapatroli",
-       "recentchanges-label-plusminus": "Agengipun kaca sampun dipunowahi samekaten.",
-       "recentchanges-legend-heading": "<strong>Katrangan:</strong>",
-       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (dhelengen uga: [[Special:NewPages|daftar kaca anyar]])",
+       "recentchanges-label-plusminus": "Ukuraning kaca diowah kanthi cacahing bèt samangkéné",
+       "recentchanges-legend-heading": "<strong>Legendha:</strong>",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (uga deleng [[Special:NewPages|pratélaning kaca-kaca anyar]])",
        "recentchanges-legend-plusminus": "(''±123'')",
        "rcnotefrom": "Ing ngisor iki owah-owahan wiwit <strong>$2</strong> (kapacak nganti <strong>$1</strong> owah-owahan).",
        "rclistfrom": "Tuduhaké owah-owahan anyar kawit $2, $3",
        "rcshowhidemine": "$1 besutanku",
        "rcshowhidemine-show": "Tuduhaké",
        "rcshowhidemine-hide": "Dhelikaké",
-       "rclinks": "Tuduhna owah-owahan pungkasan $1 ing $2 dina pungkasan iki.<br />$3",
+       "rclinks": "Tuduhaké $1 owahan kawit $2 dina kapungkur.<br />$3",
        "diff": "béd",
        "hist": "saj",
        "hide": "Dhelikaké",
        "recentchangeslinked": "Owahan magepokan",
        "recentchangeslinked-feed": "Pangowahan sing terkait",
        "recentchangeslinked-toolbox": "Owahan magepokan",
-       "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-title": "Owah-owahan sing magepokan \"$1\"",
+       "recentchangeslinked-summary": "Iki pratélan owah-owahan anyar kaca-kaca sing nggayut kaca tinamtu (utawa péranganing kategori tinamtu).\nKaca-kaca sing ana ing [[Special:Watchlist|pawawanganing sampéyan]] ya iku sing <strong>kandhel</strong>.",
        "recentchangeslinked-page": "Jeneng kaca:",
        "recentchangeslinked-to": "Nuduhaké owah-owahan menyang kaca sing disambung menyang kaca-kaca iki",
        "upload": "Unggah barkas",
        "listfiles-latestversion-no": "Ora",
        "file-anchor-link": "Barkas",
        "filehist": "Babading barkas",
-       "filehist-help": "Klik ing tanggal/wektu kanggo deleng berkas iki ing wektu iku.",
+       "filehist-help": "Klik tanggal/wayah saprelu ndeleng barkasé kaya sing muncul rikala iku.",
        "filehist-deleteall": "busaken kabèh",
        "filehist-deleteone": "busaken iki",
        "filehist-revert": "balèkna",
        "filehist-current": "saiki",
        "filehist-datetime": "Surya/Tabuh",
-       "filehist-thumb": "Miniatur (''thumbnail'')",
-       "filehist-thumbtext": "Miniatur kanggo versi ing $1",
+       "filehist-thumb": "Gambar cilik",
+       "filehist-thumbtext": "Gambar cilik kanggo owahan $1",
        "filehist-nothumb": "Ora ana miniatur",
        "filehist-user": "Panganggo",
-       "filehist-dimensions": "Ukuran",
+       "filehist-dimensions": "Alang ujur",
        "filehist-filesize": "Gedhené berkas",
        "filehist-comment": "Tanggapan",
        "imagelinks": "Panganggoan berkas",
-       "linkstoimage": "Kaca-kaca sing kapacak iki duwé {{PLURAL:$1|pranala|$1 pranala}} menyang berkas iki:",
+       "linkstoimage": "{{PLURAL:$1|Kaca|$1 kaca}} ngisor iki nggayut barkas iki:",
        "linkstoimage-more": "Luwih saka $1 {{PLURAL:$1|kaca|kaca-kaca}} nduwèni pranala menyang berkas iki.\nDhaftar ing ngisor nuduhaké {{PLURAL:$1|kaca pisanan kanthi pranala langsung|$1 kaca kanthi pranala langsung}} menyang berkas iki.\n[[Special:WhatLinksHere/$2|dhaftar pepak]] uga ana.",
        "nolinkstoimage": "Ora ana kaca sing nyambung menyang berkas iki.",
        "morelinkstoimage": "Ndeleng [[Special:WhatLinksHere/$1|luwih akèh pranala]] menyang berkas iki.",
        "duplicatesoffile": "{{PLURAL:$1|berkas ing ngisor arupa duplikat|$1 berkas ing ngisor arupa duplikat}} saka berkas iki ([[Special:FileDuplicateSearch/$2|luwih rinci]]):",
        "sharedupload": "Berkas iki saka $1 lan bisa digunakaké déning proyèk liya.",
        "sharedupload-desc-there": "Berkas iki asal saka $1 lan bisa dipigunakaké déning proyèk liya.\nMangga pirsani [$2 kaca dhèskripsi berkas] kanggo informasi sabanjuré.",
-       "sharedupload-desc-here": "Berkas iki asal saka $1 lan bisa dipigunakaké déning proyèk liya.\nDhèskripsi saka [$2 kaca dhèskripsiné] kapacak ing ngisor iki.",
+       "sharedupload-desc-here": "Barkas iki saka $1 lan kena kanggo proyèk liya.\nPanyandraning [$2 kaca panyandra barkas]é kapacak ing ngisor.",
        "sharedupload-desc-edit": "Berkas iki saka $1 lan mungkin dianggo nèng proyèk liya.\nMungkin Sampéyan pingin nyunting katrangan nèng [$2 kaca katrangan berkasé] nèng kono.",
        "sharedupload-desc-create": "Berkas iki saka $1 lan mungkin dianggo nèng proyèk liya.\nMungkin Sampéyan pingin nyunting katrangan nèng [$2 kaca katrangan berkasé] nèng kono.",
        "filepage-nofile": "Ora ana berkas nganggo jeneng iki.",
        "uploadnewversion-linktext": "Unggahna vèrsi sing luwih anyar tinimbang gambar iki",
        "shared-repo-from": "saka $1",
        "shared-repo": "sawijining panyimpenan kanggo bebarengan",
-       "upload-disallowed-here": "Anda tidak bisa menimpa berkas ini.",
+       "upload-disallowed-here": "Sampéyan ora kena ngeblegi barkas iki.",
        "filerevert": "Balèkna $1",
        "filerevert-legend": "Balèkna berkas",
        "filerevert-intro": "Panjenengan mbalèkaké '''[[Media:$1|$1]]''' menyang [vèrsi $4 ing $3, $2].",
        "undelete-show-file-confirm": "Apa panjenengan yakin arep mirsani révisi berkas \"<nowiki>$1</nowiki>\" sing wis kabusak ing $2 jam $3?",
        "undelete-show-file-submit": "Ya",
        "namespace": "Lowah aran:",
-       "invert": "Balèkna pilihan",
+       "invert": "Balèkaké pilihan",
        "tooltip-invert": "Centhang kothak iki kanggo ndhelikaké owahan saka kaca-kaca nèng njero bilik jeneng kapilih (lan bilik jeneng kakait yèn dicenthang)",
        "namespace_association": "Bilik jeneng kakait",
        "tooltip-namespace_association": "Centhang kothak iki kanggo nglebokaké uga bilik jeneng gumenan utawa subyèk sing kakait karo bilik jeneng kapilih",
        "tooltip-watchlistedit-raw-submit": "Anyari daptar pangawasan",
        "tooltip-recreate": "Gawéa kaca iki manèh senadyan tau dibusak",
        "tooltip-upload": "Miwiti pangunggahan",
-       "tooltip-rollback": "Mbalèkaké suntingan-suntingan ing kaca iki menyang kontributor pungkasan nganggo sak klik.",
+       "tooltip-rollback": "Balèkaké besutan-besutan kaca iki déning sing pungkasan nyumbang sarana saklikan.",
        "tooltip-undo": "Mbalèkaké révisi iki lan mbukak kothak panyuntingan jroning mode pratayang. Wènèhi kasempatan kanggo ngisi alesan ing kothak ringkesan.",
        "tooltip-preferences-save": "Simpen préperensi",
        "tooltip-summary": "Isi tingkesan cendhak",
        "thumbsize": "Ukuran gambar cilik (thumbnail):",
        "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|kaca|kaca}}",
        "file-info": "ukuran berkas: $1, tipe MIME: $2",
-       "file-info-size": "$1 × $2 piksel, ukuran berkas: $3, tipe MIME: $4",
+       "file-info-size": "$1 × $2 piksel, ukuran barkas: $3, jinis MIME: $4",
        "file-info-size-pages": "$1 × $2 piksel, gedhéné berkas: $3, jinisé MIME: $4, $5 {{PLURAL:$5|kaca|kaca}}",
        "file-nohires": "Ora ana résolusi sing luwih dhuwur.",
        "svg-long-desc": "Berkas SVG, nominal $1 × $2 piksel, gedhené berkas: $3",
        "metadata-help": "Berkas iki ngandhut informasi tambahan sing mbokmenawa ditambahaké déning kamera digital utawa ''scanner'' sing dipigunakaké kanggo nggawé utawa olèhé digitalisasi berkas. Yèn berkas iki wis dimodifikasi, detail sing ana mbokmenawa ora sacara kebak nuduhaké informasi saka gambar sing wis dimodifikasi iki.",
        "metadata-expand": "Tuduhna detail tambahan",
        "metadata-collapse": "Delikna detail tambahan",
-       "metadata-fields": "Entri lapangan-lapangan metadata sing kapacak iki bakal dituduhaké ing kaca informasi gambar yèn tabèl metadata didhelikaké. Entri liyané minangka baku bakal didhelikaké.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
+       "metadata-fields": "Babagan-babagan métadhata gambar sing katulis ing nawala iki bakal kapacak nyang jebèran kaca gambar nalika métadhata dinebaké.\nLiyané bakal kadhelikaké kanthi baku.\n* panggawé\n* gagrag\n* tanggalwayahasli\n* wayahpaparan\n* angkaf\n* bijibanteriso\n* dawafocal\n* artis\n* hakcipta\n* pratélangambar\n* latitudgps\n* longitudgps\n* altitudgps",
        "exif-imagewidth": "Jembar",
        "exif-imagelength": "Dhuwur",
        "exif-bitspersample": "Bit per komponèn",
        "intentionallyblankpage": "Kaca iki disengajakaké kosong",
        "external_image_whitelist": " #Umbarna larikan iki apa anané<pre>\n#Pigunakaké fragmèn èksprèsi regular (mung bagéyan ing antara //) ing ngisor\n#Fragmèn ini bakal dicocogaké karo URL saka gambar-gambar èksternal\n#Fragmèn sing cocog bakal ditampilaké minangka gambar, yèn ora mung pranala menyang gambar waé sing ditampilaké\n#Larikan sing diwiwiti nganggo # dianggep minangka komentar\n#Iki ora mbédakaké aksara gedhé/cilik\n#Dèlèhna kabèh fragmèn èksprèsi regular sadhuwuré larikan iki. Umbarna larikan iki apa anané</pre>",
        "tags": "Tag pangowahan sing absah",
-       "tag-filter": "Filter [[Special:Tags|Tag]]:",
+       "tag-filter": "Panyaringan [[Special:Tags|tandha]]:",
        "tag-filter-submit": "Penyaring",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Tag|Tag}}]]: $2)",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Tenger|Tenger}}]]: $2)",
        "tags-title": "Tag",
        "tags-intro": "Kaca iki ndhaptar tag sing bisa ditandhani déning piranti alus tumrap sawijining suntingan lan maknané.",
        "tags-tag": "Jeneng tag",
index 4040aa4..67b6536 100644 (file)
        "watchlistedit-raw-done": "Är Iwwerwaachungslëscht gouf aktualiséiert.",
        "watchlistedit-raw-added": "{{PLURAL:$1|1 Säit gouf|$1 Säite goufen}} derbäigesat:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|1 Säit gouf|$1 Säite goufen}} erausgeholl:",
-       "watchlistedit-clear-title": "Eidelgemaachten Iwwerwaachungslëscht",
+       "watchlistedit-clear-title": "Iwwerwaachungslëscht eidelmaachen",
        "watchlistedit-clear-legend": "Iwwerwaachungslëscht eidelmaachen",
        "watchlistedit-clear-explain": "All D'Säite gi vun Ärer Iwwerwaachungslëscht erofgeholl",
        "watchlistedit-clear-titles": "Säiten:",
        "log-action-filter-protect-modify": "Spär-pÄnnerung",
        "log-action-filter-protect-move_prot": "Geréckelt Spär",
        "log-action-filter-rights-rights": "Manuell Ännerung",
+       "log-action-filter-rights-autopromote": "Automatesch Ännerung",
        "log-action-filter-upload-upload": "Neien Upload",
        "log-action-filter-upload-overwrite": "Nees eroplueden"
 }
index 7ba9c6b..035bcdd 100644 (file)
        "index-category": "क्रम कएल पन्ना सभ",
        "noindex-category": "क्रम नै कएल पन्नासभ",
        "broken-file-category": "पन्नासभ जाइमे फाइल लिङ्कसभ टूटल हुअए",
-       "about": "क विषयमे",
+       "about": "क विषयमे",
        "article": "सामग्री लेख",
        "newwindow": "(नव खिडकीसँ खुजैछ)",
        "cancel": "समाप्त",
        "anontalk": "वार्ता",
        "navigation": "सञ्चार",
        "and": "&#32;आर",
-       "qbfind": "ताà¤\95à¥\82",
-       "qbbrowse": "à¤\97वà¥\87षण à¤\95रà¥\82",
-       "qbedit": "समà¥\8dपादन à¤\95रà¥\82",
+       "qbfind": "ताà¤\95à¥\80",
+       "qbbrowse": "à¤\97वà¥\87षण à¤\95रà¥\80",
+       "qbedit": "समà¥\8dपादन à¤\95रà¥\80",
        "qbpageoptions": "ई पृष्ठ",
        "qbmyoptions": "हमर पृष्ठसभ",
        "faq": "त्वरित प्रश्नोत्तरी",
        "variants": "प्रकारसभ",
        "navigation-heading": "दिक्चालन सूची",
        "errorpagetitle": "गलती",
-       "returnto": "$1 à¤ªà¤° à¤\86à¤\89।",
+       "returnto": "$1 à¤ªà¤° à¤\86बà¥\80।",
        "tagline": "मैथिली {{SITENAME}}सँ",
        "help": "मदति",
        "search": "ताकी",
        "categorypage": "श्रेणी पन्ना देखी",
        "viewtalkpage": "गपशप देखी",
        "otherlanguages": "अन्य भाषासभमे",
-       "redirectedfrom": "($1 सँ पुनर्निर्देशित)",
+       "redirectedfrom": "($1सँ पुनर्निर्देशित)",
        "redirectpagesub": "पृष्ठ पुनर्निर्देशित करी",
        "redirectto": "क अनुप्रेषित:",
        "lastmodifiedat": "ई पृष्ठक पहिनुका बदलाव $1 के $2 बजे भएल छल।",
        "logouttext": "'''अहाँ निष्क्रमण कऽ गेल छी।'''\n\nअहाँ {{अन्तर्जाल}} प्रयोग अनाम भऽ कऽ सकै छी, वा अहाँ <span class='plainlinks'>[$1 log in again]</span> वएह आकि कोनो आन प्रयोक्ताक रूपमे सेहू प्रयोक कऽ सकै छी।\nई मोन राखू जे किछु पन्ना एना देखा पड़ि सकैए जेना अहाँ अखनो सम्प्रवेशित होइ, जावत अहाँ अपन गवेषकक उपस्मृति मेटा नै दै छी।",
        "cannotlogoutnow-title": "अखन प्रस्थान नै भऽ रहल अछि",
        "cannotlogoutnow-text": "$1 क उपयोग समय प्रस्थान नै कएल जा सकएत अछि।",
-       "welcomeuser": "à¤\85हाà¤\95à¥\87 स्वागत अछि, $1!",
+       "welcomeuser": "à¤\85हाà¤\81à¤\95 स्वागत अछि, $1!",
        "welcomecreation-msg": "अहाँक खाता बनाएल गेल अछि।\nअपन [[Special:Preferences|{{SITENAME}} पसन्द]] बदलै लेल नै बिसरब।",
        "yourname": "प्रयोक्ता:",
        "userlogin-yourname": "प्रयोक्ता:",
        "login-abort-generic": "अहाँक सम्प्रवेश सफल नै भेल- रोकल गएल",
        "login-migrated-generic": "अहाँके खाता माइग्रेट कएल गेल अछि, आर अहाँके प्रयोक्ता नाम आब ई विकिमे नै अछि।",
        "loginlanguagelabel": "भाषा : $1",
-       "suspicious-userlogout": "à¤\85हाà¤\81à¤\95 à¤¨à¤¿à¤·à¥\8dà¤\95à¥\8dरमणà¤\95 à¤\85नà¥\81रà¥\8bध à¤¨à¥\88 à¤®à¤¾à¤¨à¤² à¤\97à¥\87ल à¤\95ारण à¤\88 à¤²à¤¾à¤\97ल à¤\9cà¥\87 à¤\88 à¤ªà¥\81रान à¤\97वà¥\87षà¤\95à¤\95 à¤²à¤¾à¤\97ि à¤µà¤¾ à¤¦à¥\8bसराà¤\87त à¤\89पसà¥\8dमà¥\83ति à¤¦à¥\8dवारा à¤ªà¤ à¤¾à¤\93ल à¤\97à¥\87ल à¤\9bल।",
-       "createacct-another-realname-tip": "मूल नाम वैकल्पिक अछि।\nजँ अहाँ एकरा देबा लेल प्रयोग करै छी, ई अहाँकेँ काजक श्रेय देबा लेल एकर प्रयोग कएल जाएत।",
+       "suspicious-userlogout": "अहाँक निष्क्रमणक अनुरोध नै मानल गेल कारण ई लागल जे ई पुरान गवेषकक लागि वा दोसराइत उपस्मृतद्वारा पठाओल गेल छल।",
+       "createacct-another-realname-tip": "मूल नाम वैकल्पिक अछि।\nजँ अहाँ एकरा देबा लेल प्रयोग करै छी, ई अहाँक काजक श्रेय देबा लेल एकर प्रयोग कएल जाएत।",
        "pt-login": "सम्प्रवेश",
        "pt-login-button": "सम्प्रवेश",
        "pt-createaccount": "खाता खोलल जाए",
index ed8281a..2993d36 100644 (file)
@@ -11,7 +11,8 @@
                        "CharlieTheCabbie",
                        "Leli Forte",
                        "Macofe",
-                       "Matma Rex"
+                       "Matma Rex",
+                       "MTSap"
                ]
        },
        "tog-underline": "Ħoloq sottolinjati:",
        "tooltip-ca-delete": "Ħassar din il-paġna",
        "tooltip-ca-undelete": "Irkupra l-modifiki magħmula f'din il-paġna qabel ma ġiet imħassra",
        "tooltip-ca-move": "Mexxi din il-paġna",
-       "tooltip-ca-watch": "Żid din il-paġna mal-lista ta' osservazzjoni tiegħek",
+       "tooltip-ca-watch": "Żid dil-paġna mal-lista ta' dawk li qed isssegwi",
        "tooltip-ca-unwatch": "Neħħi din il-paġna mill-osservazzjonijiet speċjali tiegħek",
        "tooltip-search": "Fittex fis-sit: {{SITENAME}}",
        "tooltip-search-go": "Mur fil-paġna b'dan it-titlu eżatt, jekk teżisti",
        "metadata-help": "Dan il-fajl fih aktar informazzjoni, aktarx ġie miżjud minn kamera diġitali jew skanner li ġew użati sabiex joħolquh jew biex jagħmluh diġitali.\nJekk il-fajl ġie modifikat mill-istat oriġinali, xi dettalji jistgħu ma jikkorispondux mal-verżjoni kurrenti.",
        "metadata-expand": "Uri d-dettalji",
        "metadata-collapse": "Aħbi d-dettalji",
-       "metadata-fields": "Il-metadati tal-istampa mniżżla f'dan il-messaġġ se jiġu inklużi fuq il-paġna tal-sitampa meta t-tabella tal-metadata tkun magħluqa.\nOħrajn jiġu moħbija kif inhu definit oriġinarjament.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
+       "metadata-fields": "Il-lista f'dal-messaġġ tal-metadati tal-istampa  se tiġi inkluża fil-paġna tal-istampa meta t-tabella tal-metadata tingħalaq.\nOħrajn jiġu moħbija skont kif inhu predefinit.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
        "exif-imagewidth": "Wisa'",
        "exif-imagelength": "Għoli",
        "exif-bitspersample": "Bits għal kull komponent",
index 01c2df0..4ac3aa6 100644 (file)
@@ -25,6 +25,8 @@
        "tog-watchdefault": "Kā goá pian-chi̍p kòe ê ia̍h kah tóng-àn ka-ji̍p kàm-sī-toaⁿ lāi-té",
        "tog-watchmoves": "Kā goá soá ê ia̍h kah tóng-àn ka-ji̍p kàm-sī-toaⁿ",
        "tog-watchdeletion": "Kā goá thâi tiāu ê ia̍h kah tóng-àn ka-ji̍p kàm-sī-toaⁿ",
+       "tog-watchuploads": "Chiong góa ap-ló͘ ê tóng-àn ka-ji̍p kam-sī-toaⁿ",
+       "tog-watchrollback": "Chiong góa í-keng ká--tńg-khì ê ia̍h-bīn ka-ji̍p góa-ê kam-sī-toaⁿ",
        "tog-minordefault": "Chiām-tēng bī-lâi ê siu-kái lóng sī sió siu-kái",
        "tog-previewontop": "Sûn-khoàⁿ ê lōe-iông tī pian-chi̍p keh-á thâu-chêng",
        "tog-previewonfirst": "Thâu-pái pian-chi̍p seng khoàⁿ-māi",
@@ -41,6 +43,7 @@
        "tog-watchlisthidebots": "Kàm-sī-toaⁿ bián hián-sī ki-khì pian-chi̍p",
        "tog-watchlisthideminor": "Kàm-sī-toaⁿ bián hián-sī sió siu-kái",
        "tog-watchlisthideliu": "Kàm-sī-toaⁿ bián hián-sī iōng-chiá ū teng-ji̍p ê pian-chi̍p",
+       "tog-watchlistreloadautomatically": "Tong kè-lū-khì kái-tōng sî chū-tōng têng-khui kam-sī-toaⁿ (su-iàu JavaScript)",
        "tog-watchlisthideanons": "Kàm-sī-toaⁿ bián hián-sī bû-bêng-sī ê pian-chi̍p",
        "tog-watchlisthidepatrolled": "Kàm-sī-toaⁿ bián hián-sī khoàⁿ-koè--ê pian-chi̍p",
        "tog-watchlisthidecategorization": "Kā ia̍h ê lūi-pia̍t chhàng--khì-lâi",
        "databaseerror-query": "揣:$1",
        "databaseerror-function": "功能:$1",
        "databaseerror-error": "chhò-gō͘",
+       "transaction-duration-limit-exceeded": "Ūi tio̍h mài sán-seng koân liōng ê têng-hok iân-sî, pún kài choán-sàng in-ūi sia-ji̍p sî-kan ($1) chhiau-kòe $2 bió ê chè-hān, í-keng hong hòng-khì.\nNā chún lí sī beh chi̍t kái kái-tōng kúi--a-ê hāng-bo̍k, chhì ēng chē pái sió chhau-chok khòaⁿ-māi.",
        "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",
+       "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 chéng-pī khang-khòe, goân-sêng liáu-āu èng-tong tō ē hôe-ho̍k chèng-siông. \n\nHū-chek ê hêng-chèng jîn-oân lâu chit-ê soat-bêng: $1",
        "missing-article": "Chu-liāu-khò͘ chhoē bô ia̍h ê luē-iông, ia̍h ê miâ \"$1\" $2 .\n\nChe 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\nNā 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)",
        "headline_sample": "Thâu-tiâu bûn-jī",
        "headline_tip": "Tē-2-chân (level 2) ê phiau-tê",
        "nowiki_sample": "Chia siá bô keh-sek ê bûn-jī",
+       "nowiki_tip": "Mài chhap wiki keh-sek",
        "image_sample": "Iann-siong-e-le.jpg",
        "image_tip": "Giap tī lāi-bīn ê iáⁿ-siōng",
        "media_tip": "Tóng-àn liân-kiat",
        "sig_tip": "Lí ê chhiam-miâ kap sî-kan ìn-á",
+       "hr_tip": "Thán-pîⁿ-chōa (hàn leh ēng)",
        "summary": "Khài-iàu:",
        "subject": "Tê-bo̍k/piau-tê:",
        "minoredit": "Che sī sió siu-kái",
        "tooltip-minoredit": "記這是一个小改",
        "tooltip-save": "Pó-chhûn lí chò ê kái-piàn",
        "tooltip-preview": "Chhiáⁿ tī pó-chûn chìn-chêng,  sian khoàⁿ lí chò ê kái-piàn !",
+       "tooltip-diff": "Hián-sī lí tùi bûn-pún só͘ chò ê kái-tōng",
        "tooltip-watch": "共這頁加入去你的監視單",
        "tooltip-rollback": "Ji̍h \"Hoê-choán\" ē-sái thè tńg-khì téng-chi̍t-ê kái ê lâng ê ia̍h.",
        "tooltip-preferences-save": "保存設定",
        "siteuser": "{{SITENAME}} iōng-chiá $1",
        "othercontribs": "Kin-kù $1 ê kòng-hiàn.",
        "siteusers": "{{SITENAME}} iōng-chiá $1",
+       "simpleantispam-label": "Khòng spam kiám-cha.\n<strong>Mài</strong> thiām chit ūi!",
        "pageinfo-toolboxlink": "Ia̍h ê chu-sìn",
        "markaspatrolleddiff": "Phiau-sī sûn--kòe",
        "markedaspatrolledtext": "Í-keng phiau-sī chit ê siu-tēng-pún ū lâng sûn--kòe.",
index f9316f9..83e123e 100644 (file)
        "confirmemail_invalidated": "Подтверждение адреса электронной почты отменено.",
        "invalidateemail": "Отмена подтверждения адреса электронной почты",
        "notificationemail_subject_changed": "{{SITENAME}} зарегистрированный адрес электронной почты был изменен",
+       "notificationemail_subject_removed": "{{SITENAME}} зарегистрированный адрес электронной почты был удален",
+       "notificationemail_body_changed": "Кто-то, вероятно, вы, с IP-адреса $1,\nизменил адрес электронной почты учетной записи \"$2\" на \"$3\" на {{SITENAME}}.\n\nЕсли это были не вы, обратитесь к администратору сайта немедленно.",
+       "notificationemail_body_removed": "Кто-то, вероятно вы, с IP-адреса $1,\nудалил адрес электронной почты учетной записи \"$2\" на {{SITENAME}}.\n\nЕсли это были не вы, обратитесь к администратору сайта немедленно.",
        "scarytranscludedisabled": "[Интервики-включение отключено]",
        "scarytranscludefailed": "[Ошибка обращения к шаблону $1]",
        "scarytranscludefailed-httpstatus": "[Не удалось загрузить шаблон для $1: HTTP $2]",
        "sessionprovider-nocookies": "Могут быть отключены куки. Убедитесь, что у вас включены куки и начните заново.",
        "randomrootpage": "Случайная корневая страница",
        "log-action-filter-block": "Тип блокировки:",
+       "log-action-filter-contentmodel": "Тип модификации contentmodel:",
        "log-action-filter-delete": "Тип удаления:",
        "log-action-filter-import": "Тип импорта:",
        "log-action-filter-managetags": "Тип тега управленческих действий:",
        "log-action-filter-block-reblock": "Изменение блокировки",
        "log-action-filter-block-unblock": "Разблокировка",
        "log-action-filter-contentmodel-change": "Изменение модели содержимого",
+       "log-action-filter-contentmodel-new": "Создание страницы с нестандартной моделью Contentmodel",
        "log-action-filter-delete-delete": "Удаления страницы",
        "log-action-filter-delete-restore": "Восстановление страницы",
        "log-action-filter-delete-event": "Удаление журнала",
        "log-action-filter-delete-revision": "Удаление версии",
+       "log-action-filter-import-interwiki": "Трансвики импорт",
+       "log-action-filter-import-upload": "Импорт через загрузку XML",
+       "log-action-filter-managetags-create": "Создание тегов",
+       "log-action-filter-managetags-delete": "Удаление тегов",
+       "log-action-filter-managetags-activate": "Активация тегов",
        "log-action-filter-managetags-deactivate": "Отключение тега",
        "log-action-filter-move-move": "Двигаться без перезаписи переадресаций",
        "log-action-filter-move-move_redir": "Переместить с заменой переадресаций",
        "log-action-filter-newusers-create": "Создание анонимным участником",
        "log-action-filter-newusers-create2": "Создание зарегистрированным участником",
        "log-action-filter-newusers-autocreate": "Автоматическое создание",
+       "log-action-filter-newusers-byemail": "Создание с паролем, присланным по электронной почте",
        "log-action-filter-patrol-patrol": "Ручное патрулирование",
        "log-action-filter-patrol-autopatrol": "Автоматическое патрулирование",
        "log-action-filter-protect-protect": "Защита",
        "log-action-filter-protect-modify": "Изменение защиты",
        "log-action-filter-protect-unprotect": "Снятие защиты",
+       "log-action-filter-protect-move_prot": "Перенос защиты",
        "log-action-filter-rights-rights": "Ручное изменение",
        "log-action-filter-rights-autopromote": "Автоматическое изменение",
+       "log-action-filter-suppress-event": "Сокрытие журнала",
        "log-action-filter-suppress-revision": "Сокрытие версии",
        "log-action-filter-suppress-delete": "Сокрытие страницы",
+       "log-action-filter-suppress-block": "Сокрытие пользователя через блокировки",
+       "log-action-filter-suppress-reblock": "Сокрытие пользователя через повторное блокирование",
        "log-action-filter-upload-upload": "Новая загрузка",
        "log-action-filter-upload-overwrite": "Повторно загрузить"
 }
index 48b4500..1cdb3a1 100644 (file)
@@ -87,6 +87,7 @@
        "tog-watchdefault": "Lägg till sidor och filer jag redigerar i min bevakningslista",
        "tog-watchmoves": "Lägg till sidor och filer jag flyttar i min bevakningslista",
        "tog-watchdeletion": "Lägg till sidor och filer jag raderar i min bevakningslista",
+       "tog-watchuploads": "Lägg till nya filer jag laddar upp i min bevakningslista",
        "tog-watchrollback": "Lägg till sidor där jag har utfört en tillbakarullning till min bevakningslista",
        "tog-minordefault": "Markera automatiskt ändringar som mindre",
        "tog-previewontop": "Visa förhandsgranskningen ovanför redigeringsrutan",
        "recentchangeslinked-page": "Sidnamn:",
        "recentchangeslinked-to": "Visa ändringar på sidor med länkar till den givna sidan istället",
        "recentchanges-page-added-to-category": "[[:$1]] lades till i kategorin",
-       "recentchanges-page-added-to-category-bundled": "[[:$1]] och [[Special:WhatLinksHere/$1|{{PLURAL:$2|en sida|$2 sidor}}]] lades till i kategorin",
+       "recentchanges-page-added-to-category-bundled": "[[:$1]] lades till i kategorin, [[Special:WhatLinksHere/$1|denna sida inkluderas i andra sidor]]",
        "recentchanges-page-removed-from-category": "[[:$1]] togs bort från kategorin",
-       "recentchanges-page-removed-from-category-bundled": "[[:$1]] och [[Special:WhatLinksHere/$1|{{PLURAL:$2|en sida|$2 sidor}}]] togs bort från kategorin",
+       "recentchanges-page-removed-from-category-bundled": "[[:$1]] togs bort från kategorin, [[Special:WhatLinksHere/$1|denna sida inkluderas i andra sidor]]",
        "autochange-username": "Automatisk MediaWiki-ändring",
        "upload": "Ladda upp fil",
        "uploadbtn": "Ladda upp fil",
index ddb6571..01370ca 100644 (file)
        "sessionprovider-mediawiki-session-cookiesessionprovider": "குக்கீயை அடிபடையாக்கக் கொண்ட பகுதிகள்",
        "sessionprovider-nocookies": "குக்கீசு செயலற்று இருக்கலாம். உங்களது குக்கீசு செயலில் உள்ளது என உறுதிப்படுத்திவிட்டு மீண்டும் முயல்க.",
        "randomrootpage": "தற்போக்கு வேர்ப் பக்கம்",
-       "log-action-filter-protect": "பாதுகாப்பு வகை"
+       "log-action-filter-protect": "பாதுகாப்பு வகை:"
 }
index 11736b1..60e4246 100644 (file)
@@ -8,7 +8,8 @@
                        "Vishwanatha Badikana",
                        "Bharathesha Alasandemajalu",
                        "Soundarya shetty s",
-                       "రహ్మానుద్దీన్"
+                       "రహ్మానుద్దీన్",
+                       "BHARATHESHA ALASANDEMAJALU"
                ]
        },
        "tog-underline": "ಲಿಂಕ್’ಲೆದ ತಿರ್ತ್ ಗೆರೆ(ಅಂಡರ್ ಲೈನ್) ಪಾಡ್’ಲೆ",
@@ -26,6 +27,7 @@
        "tog-watchdefault": "ಯಾನ್ ಸಂಪೊಲಿಪುನ ಪುಟೊಲೆನ್ ವೀಕ್ಷಣಾಪಟ್ಟಿಗ್ ಸೇರ್ಪಾಲೆ",
        "tog-watchmoves": "ಯಾನ್ ಸ್ತಲಾಂತರಿಸುನ ಪುಟೊಲೆನ್ ಎನ್ನ ವೀಕ್ಷಣಾಪಟ್ಟಿಗ್ ಸೇರ್ಪಾಲೆ",
        "tog-watchdeletion": "ಯಾನ್ ದೆತ್ತ್‌ ಪಾಡುನ ಪುಟೊಲೆನ್ ಎನ್ನ ವೀಕ್ಷಣಾಪಟ್ಟಿಗ್ ಸೇರ್ಪಾಲೆ",
+       "tog-watchuploads": "ಎನ್ನ ಅಪ್ಲೋಡ್ ಪಟ್ಟಿಗ್  ಪೊಸ ಕಡತೊಲೆನ್ ಸೇರಲ",
        "tog-watchrollback": "ಯಾನ್ ಪಿರ ದೆತೊನುನ ಪುಟೊಲೆನ್ ಎನ್ನ ಗುಮನೊಗು ಸೇರಲೆ",
        "tog-minordefault": "ಪೂರಾ ಸಂಪಾದನೆನ್ಲಾ ಎಲ್ಯ ಪಂಡ್’ದ್ ಗುರ್ತ ಮಲ್ಪುಲೆ",
        "tog-previewontop": "ಮುನ್ನೋಟನ್ ಸಂಪಾದನೆ ಅಂಕಣದ ಮಿತ್ತ್ ತೊಜ್ಪಾಲೆ",
        "october-date": "ಅಕ್ಟೋಬರ $1",
        "november-date": "ನವಂಬರ $1",
        "december-date": "ದಸಂಬರ $1",
+       "period-am": "ಕಾಂಡೆ",
+       "period-pm": "ಬೈಯ್ಯ",
        "pagecategories": "{{PLURAL:$1|ವರ್ಗೊ|ವರ್ಗೊಲು}}",
        "category_header": "\"$1\" ವರ್ಗಡುಪ್ಪುನಂಚಿನ ಲೇಕನೊಲು",
        "subcategories": "ಉಪ ವರ್ಗೊಲು",
        "morenotlisted": "ಈ ಪಟ್ಟಿ ಪೂರ್ತಿ ಆತ್‍ಜಿ.",
        "mypage": "ಎನ್ನ ಪುಟೊ",
        "mytalk": "ಎನ್ನ ಚರ್ಚೆ",
-       "anontalk": "à²\88 à²\90.ಪಿ à²\97à³\8d à²ªà²¾à²¤à³\86ರà³\8dâ\80\99ಲೆ",
+       "anontalk": "ಪಾತà³\86ರà³\8dಲೆ",
        "navigation": "ಸಂಚಾರೊ",
        "and": "&#32;ಬೊಕ್ಕ",
        "qbfind": "ನಾಡ್’ಲೆ",
        "viewyourtext": "ಈರ್ ಈ ಪುಟೊದ ಮೂಲನ್ ತೂವೊಲಿ ಬೊಕ್ಕ ನಕಲ್ ಮಲ್ಪೊಲಿ <strong>ಈರೆನ ಸಂಪದನೆ</strong>",
        "protectedinterface": "ಈ ಪುಟೊ ತಂತ್ರಾಂಸೊ ಉಪಯೋಗೊ ಮಲ್ಪುನ ಪಟ್ಯೊನ್ ಒದಗಿಸಾಪುಂಡ್. ದುರುಪಯೋಗ ಅವಂದಿಲೆಕ್ಕ ಇದೆನ್ ರಕ್ಷಣೆ ಮಲ್ಪುಲೆ.\nಮಾತ ವಿಕಿಲೆಗ್ ಬಾಸಾಂತರೊನು ಕೂಡಯೆರೆ ಅಂಚನೆ ಬದಲ್ಪೆರೆ, [//translatewiki.net/ translatewiki.net], the MediaWiki localisation ಯೋಜನೆನ್ ಉಪಯೊಗಿಸಲೆ\nಕನ್ನಡ",
        "ns-specialprotected": "ವಿಶೇಷ ಪುಟ‘ಕ್‘ಲೆನ್ ಸಂಪಾದನೆ ಮಲ್ಪರೆ ಆಪುಜಿ",
+       "exception-nologin": "ಲಾಗಿನ್ ಆತ್‘ಜ್ಜರ್",
        "logouttext": "<strong>ಈರ್ ಇತ್ತೆ ಲಾಗ್ ಔಟ್ ಆತರ್</strong>\nಗಮನಿಸಲೆ ಈರೆನ ಬ್ರೌಸರ್‍ದ cacheನ್ ದೆತ್ತ ಪಾಡುನೆಟ ಮುಟ್ಟೊ ಕೆಲವು ಪುಟೊಲು ಈರ್ ನಾನಲ ಲಾಗ್ ಇನ್ ಆದಿಪ್ಪುಂಚ ತೋಜುಂಡು.",
        "welcomeuser": "ಎದ್ಖೊನುವೊ,$1!",
        "welcomecreation-msg": "ಈರೆನ ಕಾತೆನ್ ದೆತ್ತ್‌ದಾತ್ಂಡ್.  ಈರೆನ [[Special:Preferences|{{SITENAME}} ಆಯ್ಕೆನ್]]ಬದಲ್ಪೆರೆ ಮರಪೊಡ್ಚಿ.",
        "remembermypassword": "ಈ ಗಣಕಯಂತ್ರೊಡು ಎನ್ನ ಲಾಗಿನ್ ನೆಂಪು ದೀಡೊನ್ಲೆ(ಹೆಚ್ಚ್ $1 {{PLURAL:$1|ದಿನೊತ|ದಿನೊಕ್ಕುಲೆ}}ಮುಟ್ಟೊ)",
        "userlogin-remembermypassword": "ಎನನ್ ಲಾಗಿನ್ ಆತೇ ದೀಡ್ಲೆ",
        "userlogin-signwithsecure": "ರಕ್ಷಣೆದ ಕನೆಕ್ಷನ್ ಉಪಯೋಗಿಸಲೆ.",
+       "cannotloginnow-title": "ಇತ್ತೆ ಉಲಾಯಿ ಪೋಯರ್ ಸಾದ್ಯೊ ಇದ್ದಿ",
        "yourdomainname": "ಈರೆನ ಕಾರ್ಯಕ್ಷೇತ್ರ",
        "password-change-forbidden": "ಈರ್ ಈ ವಿಕಿಡ್ ಪ್ರರವೇಸ ಪದೊನು ಬದಲ್ಪೆರೆ ಸಾದ್ಯೊ ಇದ್ದಿ.",
        "login": "ಲಾಗಿನ್ ಆಲೆ",
        "createacct-emailoptional": "ಮಿಂಚಂಚೆ ವಿಲಾಸೊ(ಐಚ್ಛಿಕೊ)",
        "createacct-email-ph": "ಇರೆನ ಮಿಂಚಂಚೆ ವಿಲಾಸೊನ್ ನಮೂದಿಸಲೆ.",
        "createacct-another-email-ph": "ಇ-ಅಂಚೆ ವಿಳಾಸೊನು ಬದಲಾವಣೆ ಮಲ್ಪುಲೆ",
-       "createaccountmail": "ಇ ಮೈಲ್ ಮೂಲಕ",
+       "createaccountmail": "(ರಾಂಡಮ್) ತಾತ್ಕಾಲಿಕವಾದ್ ಯಾದೃಚ್ಛಿಕ ಪಾಸ್ವರ್ಡ್ ಆಯ್ಕೆ ಮಾಲ್ಪುಲೆ ಬುಕ್ಕೊ ಇಮೇಲ್ ವಿಳಾಸೊನು ಸೂಚಿಸದ್ : ಕಡಪುಡುಲೆ",
        "createacct-realname": "ನಿಜವಾಯಿನ ಪುದರ್(ಐಚ್ಛಿಕೊ)",
        "createaccountreason": "ಕಾರಣ",
        "createacct-reason": "ಕಾರಣೊ",
        "nocookieslogin": "{{SITENAME}} ಲಾಗ್ ಇನ್ ಮಲ್ಪರ ಕುಕೀಸ್ ಉಪಯೋಗ ಮಲ್ಪುಂಡ್.\nಈರೆನ ಗಣಕಯಂತ್ರಡು ಕುಕೀಸ್ ನಿಷಿದ್ದ ವಾತ್ಂಡ್.\nದಯದೀದ್ ಈ ನಿಷಿದ್ಧನ್ ದೆತ್ತ್‘ದ್, ಕುಡೊರ ಪ್ರಯತ್ನ ಮಲ್ಪುಲೆ.",
        "nocookiesfornew": "ಮೂಲನ್  ನಿರ್ಧರಿಸಾವರ ಆವೊಂದಿಜ್ಜಿ  ಐಡ್‘ದಾವರ  ಈರೆನ ಖಾತೆ ಸೃಷ್ಟಿ ಆತ್‘ಜ್ಜಿ.  .\nದಯದೀದ್ ಕುಕೀಸ್ ನಿಷಿದ್ಧನ್ ದೆತ್ತ್‘ದ್, ಈ ಪುಟನ್ ಪಿರ ದಿಂಜಾದ್ (load)ಪ್ರಯತ್ನಿಸಾಲೆ.",
        "noname": "ಈರ್ ಸರಿಯಾಯಿನ ಬಳಕೆದಾರ ಪುದರ್ ಕೊರ್ತಿಜ್ಜರ್.",
-       "loginsuccesstitle": "ಲಾಗ್ ಇನ್ ಯಶಸ್ವಿಯಾತ್ಂಡ್",
+       "loginsuccesstitle": "ಲಾಗ್ ಇನ್ ಯಶಸ್ವಿಯಾತ್ಂಡ್",
        "loginsuccess": "ಲಾಗ್ ಇನ್ ಯಶಸ್ವಿಯಾತ್‘ಂಡ್\". {{SITENAME}}  \"$1\".'''",
        "nosuchuser": "!!\"$1\"ಪುದರ್‘ದ ವಾ ಸದಸ್ಯೆರ್‘ಲಾ ಇಜ್ಜೆರ್, ಅಕ್ಷರ ಸರಿಯಾದ ತೂಲೆ ಅಥವಾ  [[Special:UserLogin/signup|ಪೊಸ ಸದಸ್ಯತ್ವ  ಖಾತೆನ್ ಸೃಷ್ಟಿ ಮಲ್ಪುಲೆ]].",
        "nosuchusershort": "!!\"$1\"ಪುದರ್‘ದ ವಾ ಸದಸ್ಯೆರ್‘ಲಾ ಇಜ್ಜೆರ್, ಅಕ್ಷರ ಸರಿಯಾದ ತೂಲೆ.",
        "mailerror": "ಅಂಚೆ ಕಡಪುಡುನೆಡ್ ದೋಸೊ: $1",
        "noemailprefs": "ಈ ಸೌಲಭ್ಯೊಲ್ ಕೆಲಸ ಮಲ್ಪರೆ ಒಂಜಿ ಇ-ಅಂಚೆ ವಿಳಾಸೊನ್ ನಮೂದು ಮಲ್ಪುಲೆ.",
        "emailconfirmlink": "ಇರೆನ ಇ-ಅಂಚೆ ವಿಳಾಸೊನ್ ದೃಡೀಕರಣ ಮಲ್ಪುಲೆ.",
+       "emaildisabled": "ಈ ಜಾಲತಾಣಡ್‍ದ್ ಮಿಂಚಂಚೆ ಕಡಪುಡರ ಆಪುಜ್ಜಿ",
        "accountcreated": "ಖಾತೆ ಸೃಷ್ಟಿಯಾತ್‘ಂಡ್.",
-       "login-abort-generic": "à²\87ರà³\86ನ à²²à²¾à²\97à³\8d à²\87ನà³\8d à²µà²¿à²«à²² à²µà²¾à²¤à³\8dâ\80\98ಂಡ್",
+       "login-abort-generic": "à²\87ರà³\86ನ à²²à²¾à²\97à³\8d à²\87ನà³\8d à²ªà³\88ಲà³\8d à²\86ತà³\8dಂಡ್",
        "loginlanguagelabel": "ಬಾಸೆ: $1",
        "pt-login": "ಲಾಗ್ ಇನ್",
        "pt-login-button": "ಲಾಗಿನ್ ಆಲೆ",
        "newpassword": "ಪೊಸ ಪ್ರವೇಶಪದ",
        "retypenew": "ಪ್ರವೇಶಪದ ಪಿರ ಟೈಪ್ ಮಲ್ಪುಲೆ",
        "resetpass_submit": "ಪ್ರವೇಶಪದ ನಿಶ್ಚಯ ಮಲ್ತ್‘ದ್ ಲಾಗ್ ಇನ್ ಆಲೆ",
+       "changepassword-success": "ಈರೆನ ಪಾಸ್‍ವರ್ಡ್ ಬದಲಾತ್‍ಂಡ್",
+       "botpasswords": "ಬಾಟ್ ಪಾಸ್‍ವರ್ಡ್",
+       "botpasswords-disabled": "ಬಾಟ್ ಪಾಸ್‍ವರ್ಡ್‍ಲೆನ್ ನಿಸ್ಕ್ರೀಯೊ ಮಲ್ತಾತ್ಂಡ್",
+       "botpasswords-existing": "ಅಸ್ತಿತ್ವೊಡು ಇದ್ಯಾಂದಿನ ಬಾಟ್ ಪಾಸ್‍ವರ್ಡ್",
+       "botpasswords-label-appid": "ಬಾಟ್ ಪುದರ್",
+       "botpasswords-label-create": "ಸ್ರಿಸ್ಟಿಸಲೆ",
+       "botpasswords-label-update": "ಮಿತ್ತ್ ಏರಲೆ",
+       "botpasswords-label-cancel": "ವಜಾ ಮಲ್ಪುಲೆ",
+       "botpasswords-label-delete": "ದೆಪ್ಪುಲೆ",
+       "botpasswords-label-resetpassword": "ಪ್ರವೇಸೊ ಪದೊನ್ ಪಿರ ಸ್ತಾಪನೆ ಮಲ್ಪುಲೆ",
+       "botpasswords-label-grants": "ಅನ್ವಯೊ ಆಪುನ ಅನುದಾನೊ",
+       "botpasswords-label-grants-column": "ಅನುದಾನೊ",
+       "botpasswords-created-title": "ಬಾಟ್ ಪಾಸ್‍ವರ್ಡ್‌ನ್ ಸ್ರಿಸ್ಟಿಸದಾತ್ಂಡ್",
+       "botpasswords-updated-title": "ಬಾಟ್ ಪಾಸ್‍ವರ್ಡ್‌ನ್ ಮಿತ್ತ್ ಏರ್ಪದಾತ್ಂಡ್",
+       "botpasswords-deleted-title": "ಬಾಟ್ ಪಾಸ್‍ವರ್ಡ್‌ ದೆತ್ತ್‌ದಾತ್ಂಡ್",
        "resetpass-submit-loggedin": "ಪ್ರವೇಶಪದೊನ್ ಬದಲಾವಣೆ ಮಲ್ಪುಲೆ",
        "resetpass-submit-cancel": "ವಜಾ ಮಲ್ಪುಲೆ",
        "resetpass-temp-password": "ತಾತ್ಕಾಲಿಕ ಪ್ರವೇಶಪದ:",
        "passwordreset": "ಪ್ರವೇಸೊ ಪದೊನ್ ಪಿರ ಸ್ತಾಪನೆ ಮಲ್ಪುಲೆ",
        "passwordreset-username": "ಸದಸ್ಯೆರ್ನ ಪುದರ್:",
+       "passwordreset-domain": "ಕ್ಷೇತ್ರೊ:",
        "passwordreset-email": "ಇ-ಅಂಚೆ ವಿಳಾಸೊ",
+       "changeemail-newemail": "ಪೊಸ ಇ-ಅಂಚೆ ವಿಳಾಸೊ:",
+       "changeemail-none": "ಒವ್ವುಲಾ ಇಜ್ಜಿ",
        "changeemail-submit": "ಇ-ಅಂಚೆ ವಿಳಾಸ ಬದಲಾವಣೆ ಮಲ್ಪುಲೆ",
+       "resettokens": "ಸಂಕೇತೊಲೆನ್ ಜತೆಸೇರಲೆ",
        "resettokens-tokens": "ಸಂಕೇತೊಲು:",
        "resettokens-token-label": "$1(ಇತ್ತೆದ ಮೌಲ್ಯೊ:$2)",
        "bold_sample": "ದಪ್ಪೊ ಅಕ್ಷರೊ",
        "subject-preview": "ವಿಷಯ/ಮುಖ್ಯಾ೦ಶದ ಮುನ್ನೋಟ:",
        "blockedtitle": "ಈ ಸದಸ್ಯೆರೆನ್ ತಡೆ ಮಲ್ತ್ ದ್೦ಡ್.",
        "blockednoreason": "ವಾ ಕಾರಣೊಲಾ ಕೊರ್ತ್‍ಜಿ",
+       "nosuchsectiontitle": "ಈ ಪುದರ್‍ದ ವಾ ವಿಭಾಗಲಾ ಇಜ್ಜಿ",
+       "loginreqtitle": "ಲಾಗಿನ್ ಆವೊಡು",
        "loginreqlink": "ಲಾಗಿನ್ ಆಲೆ",
        "accmailtitle": "ಪ್ರವೇಶಪದ ಕಡಪುಡ್‘ದುಂಡು",
        "newarticle": "(ಪೊಸತ್)",
        "newarticletext": "ನನಲ ಅಸ್ಥಿತ್ವಡ್ ಉಪ್ಪಂದಿನ ಪುಟೊಗು ಈರ್ ಬೈದರ್.\nಈ ಪುಟೊನು ಸ್ರಿಸ್ಟಿ ಮಲ್ಪೆರೆ ತಿರ್ತ್‍ದ ಚೌಕೊಡು ಬರೆಯೆರೆ ಸುರು ಮಲ್ಪುಲೆ.\n(ಜಾಸ್ತಿ ಮಾಹಿತಿಗ್ [$1 ಸಹಾಯ ಪುಟೊನು] ತೂಲೆ).\nಈ ಪುಟೊಕು ಈರ್ ತಪ್ಪಾದ್ ಬತ್ತಿತ್ತ್ಂಡ ಇರೆನ ಬ್ರೌಸರ್‍ದ '''back''' ಬಟನ್’ನ್ ಒತ್ತ್’ಲೆ.",
-       "noarticletext": "à²\88 à²ªà³\81à²\9fà³\8aಡà³\8d à²¸à²¦à³\8dಯà²\97à³\8d à²\92ವà³\8dವà³\87 à²¬à²°à²µà³\81ಲಾ à²\87ದà³\8dದಿ, à²\88ರà³\8d à²¬à³\87ತà³\86 à²ªà³\81à²\9fà³\8aಡà³\8d [[Special:Search/{{PAGENAME}}|à²\88 à²²à³\87à²\95ನà³\8aನà³\81 à²¨à²¾à²¡à³\8aಲಿ]] <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} à²¸à²\82ಬà²\82ದà³\8a à²\87ತà³\8dತಿನ à²¦à²¾à²\95ಲà³\86ನà³\8d à²¨à²¾à²¡à³\8dâ\80\8dಲà³\86], à²\85ತà³\8dತà³\8dಂಡ  [{{fullurl:{{FULLPAGENAME}}|action=edit}} ಈ ಪುಟೊನು ಸಂಪೊಲಿಪೊಲಿ]</span>.",
+       "noarticletext": "à²\88 à²ªà³\81à²\9fà³\8aಡà³\8d à²¸à²¦à³\8dಯà²\97à³\8d à²\92ವà³\8dವà³\87 à²¬à²°à²µà³\81ಲಾ à²\87à²\9cà³\8dà²\9cಿ, à²\88ರà³\8d à²¬à³\87ತà³\86 à²ªà³\81à²\9fà³\8aಡà³\8d [[Special:Search/{{PAGENAME}}|à²\88 à²²à³\87à²\95ನà³\8aನà³\81 à²¨à²¾à²¡à³\8aಲಿ]] <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} à²¸à²\82ಬà²\82ದà³\8a à²\87ತà³\8dತಿನ à²¦à²¾à²\95ಲà³\86ನà³\8d à²¨à²¾à²¡à³\8dâ\80\8dಲà³\86], à²\85ತà³\8dತಾಂಡ  [{{fullurl:{{FULLPAGENAME}}|action=edit}} ಈ ಪುಟೊನು ಸಂಪೊಲಿಪೊಲಿ]</span>.",
        "noarticletext-nopermission": "ಈ ಪುಟೊಡ್ ಸದ್ಯಗ್ ಒವ್ವೇ ಬರವುಲಾ ಇಜ್ಜಿ, ಈರ್ ಬೇತೆ ಪುಟೊಡ್ [[Special:Search/{{PAGENAME}}|ಈ ಲೇಕನೊನು ನಾಡೊಲಿ]] <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ಸಂಬಂದೊ ಇತ್ತ್‌ನ ಲಾಗ್‌ನ್ ನಾಡ್‍ಲೆ], ಅತ್ತ್ಂಡ  [{{fullurl:{{FULLPAGENAME}}|action=edit}} ಈ ಪುಟೊನು ಸಂಪೊಲಿಪೊಲಿ]</span>.",
        "userpage-userdoesnotexist": "ಬಳಕೆದಾರ ಖಾತೆ \"<nowiki>$1</nowiki>\" ದಾಖಲಾತ್‘ಜ್ಜಿ. ಈರ್ ಉಂದುವೇ ಪುಟನ್ ಸಂಪಾದನೆ ಮಲ್ಪರ ಉಂಡಾಂದ್ ಖಾತ್ರಿ ಮಲ್ತೊನಿ.",
        "previewnote": "'''ಉಂದು ಕೇವಲ ಮುನ್ನೋಟ; ಪುಟೊನು ನನಲ ಒರಿಪಾದಿಜಿ ಪನ್ಪುನೇನ್ ಮರಪೊರ್ಚಿ!'''",
        "exif-orientation-1": "ಸಾದಾರನೊ",
        "namespacesall": "ಮಾತ",
        "monthsall": "ಮಾತ",
+       "watchlistedit-clear-title": "ತುಯಿನೇನ್ ಮಾಜಾಲೇ",
        "watchlisttools-view": "ಪ್ರಸ್ತುತ ಬದಲಾವಣೆಲ್ ತೋಜಾಲೆ",
        "watchlisttools-edit": "ವೀಕ್ಷಣಾಪಟ್ಟಿನ್ ತೂಲೆ ಬೊಕ್ಕ ಎಡಿಟ್ ಮಲ್ಪುಲೆ",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|ಪಾತೆರ್ಲೆ]])",
index 87f978b..f8a8300 100644 (file)
        "tog-editondblclick": "双击编辑页面",
        "tog-editsectiononrightclick": "右击段落标题编辑段落",
        "tog-watchcreations": "拿我建个页面搭我传个文件加到我个关注表里去",
-       "tog-watchdefault": "拿我编个页面搭文件加到我个关注表里去",
-       "tog-watchmoves": "畀我移个页搭文件加进我个监控列表里去",
+       "tog-watchdefault": "拿我编辑个页搭文件加进我个关注表里",
+       "tog-watchmoves": "拿我移动个页搭文件加进我个关注表里",
        "tog-watchdeletion": "畀我刪脫個頁搭文件加進我個關注表裏",
+       "tog-watchuploads": "拿我上传个新文件加进我个关注表里",
        "tog-watchrollback": "拿我执行过回退个页面加到我个关注表里去",
        "tog-minordefault": "默认拿所有编辑标记成细编辑",
        "tog-previewontop": "来拉编辑框上头显示预览",
        "cancel": "取消",
        "moredotdotdot": "還多...",
        "morenotlisted": "箇張表還朆完成。",
-       "mypage": "我个页面",
-       "mytalk": "我个讨论",
+       "mypage": "页面",
+       "mytalk": "讲张",
        "anontalk": "讲张",
        "navigation": "导航",
-       "and": "&#32;搭",
+       "and": "搭仔",
        "qbfind": "尋",
        "qbbrowse": "浏览",
        "qbedit": "编辑",
        "qbpageoptions": "箇頁",
-       "qbmyoptions": "我",
+       "qbmyoptions": "我个页面",
        "faq": "FAQ",
        "faqpage": "Project:FAQ",
        "actions": "动作",
        "view-foreign": "登$1上看",
        "edit": "编辑",
        "edit-local": "编辑本地说明",
-       "create": "建",
+       "create": "å\88\9b建",
        "create-local": "添加本地说明",
        "editthispage": "编辑该只页面",
        "create-this-page": "建箇頁",
        "delete": "删除",
        "deletethispage": "刪箇頁",
-       "undeletethispage": "弗删箇页",
-       "undelete_short": "復原消脫個$1個編寫",
-       "viewdeleted_short": "望̺$1个删脱编写",
+       "undeletethispage": "还原箇页",
+       "undelete_short": "还原{{PLURAL:$1|一趟编辑|$1趟编辑}}",
+       "viewdeleted_short": "望{{PLURAL:$1|一只删脱个编辑|$1只删脱个编辑}}",
        "protect": "保",
        "protect_change": "改",
        "protectthispage": "保护该个页面",
        "nocookieslogin": "本站利用Cookies进行用户登录,侬个Cookies像煞关拉许,请开开来再登录。",
        "nocookiesfornew": "用户账号朆建起,我里确认弗了渠个原因。\n你要准定cookies是开勒里个,刷新箇页试试凑相。",
        "noname": "用户名无效。",
-       "loginsuccesstitle": "登录成功",
-       "loginsuccess": "'''侬现在以 \"$1\" 个身份登录到{{SITENAME}}。 '''",
+       "loginsuccesstitle": "登录",
+       "loginsuccess": "<strong>侬现在以“$1”个身份登录到{{SITENAME}}。</strong>",
        "nosuchuser": "寻弗着用户“$1”。用户名是大小写敏感外加区分繁简体个。请检查拼写,或者[[Special:UserLogin/signup|开只新账户]]。",
        "nosuchusershort": "无没叫“$1”个用户。请检查侬个输入。",
        "nouserspecified": "侬必须选个用户名。",
        "newpassword": "新密码:",
        "retypenew": "再打一遍新密码:",
        "resetpass_submit": "设置密码再登录",
-       "changepassword-success": "密碼改好哉!\n能界登錄當中...",
+       "changepassword-success": "侬个密码改好哉!",
        "changepassword-throttled": "侬试登录忒多次哉。等$1再试试看。",
        "botpasswords": "机器人密码",
        "botpasswords-label-appid": "机器人名字:",
        "resetpass-no-info": "侬必须登录著才好直接进入箇只页面。",
        "resetpass-submit-loggedin": "更改密码",
        "resetpass-submit-cancel": "取消",
-       "resetpass-wrong-oldpass": "无效个临时或者现有密码。\n侬ä½\9cå\85´å·²ç»\8fæ\88\90å\8a\9fæ\8b¿å¯\86ç \81æ\94¹è\84±ï¼\8cæ\88\96è\80\85å·²ç»\8f请æ±\82ä¸\80个æ\96°ä¸ªä¸´æ\97¶å¯\86ç \81ã\80\82",
+       "resetpass-wrong-oldpass": "无效个临时或者现有密码。侬ä½\9cå\85´å·²ç»\8fæ\8b¿å¯\86ç \81æ\94¹è\84±ï¼\8cæ\88\96è\80\85请æ±\82ç\9d\80ä¸\80å\8fªæ\96°ä¸ªä¸´æ\97¶å¯\86ç \81ã\80\82",
        "resetpass-recycled": "请重置一只搭侬当前密码弗一样个密码。",
        "resetpass-temp-password": "临时密码:",
        "resetpass-abort-generic": "密码更改已经畀扩展程序中止。",
        "continue-editing": "到编辑区去",
        "previewconflict": "箇个预览显示了上头文字编辑区里向个内容。渠会得垃拉侬保存之后出现。",
        "session_fail_preview": "'''弗好意思!由于会话数据落失,我伲弗好处理侬个编辑。'''请重试。如果再次失败,请尝试[[Special:UserLogout|登出]]之后重新登录。",
-       "session_fail_preview_html": "'''弗好意思!我伲弗好处理侬垃拉进程数据落失辰光个编辑。'''\n\n''由于{{SITENAME}}允许使用原始个 HTML,为著防范 JavaScript 攻击,预览已畀隐藏。''\n\n'''如果这是一次合法的编辑,请重新进行尝试。'''如果还不行,请 [[Special:UserLogout|退出]]并重新登录。",
+       "session_fail_preview_html": "弗好意思!因为会话数据落失,我伲弗好处理侬个编辑。\n\n<em>由于{{SITENAME}}允许使用原始个HTML,为著防范JavaScript攻击,预览已经囥脱。</em>\n\n<strong>如果箇是一趟合法个编辑,请再试一遍。</strong>如果仍旧弗来事,请[[Special:UserLogout|登出]]著再重新登录,并确保侬个浏览器允许本站个cookie。",
        "token_suffix_mismatch": "<strong>由于侬用户端里向个编辑令牌毁损仔一些标点符号字元,为防止编辑个文字损坏,侬个编辑已经畀回头。</strong>箇种情况通常出现垃拉使用含有交关bug、以网络为主个匿名代理服务个辰光。",
        "editing": "来里编写$1",
        "creating": "创建“$1”",
        "viewpagelogs": "望箇页日志",
        "nohistory": "该只页面呒拨编辑历史。",
        "currentrev": "最后版本",
-       "currentrev-asof": "$1个最新修订版",
+       "currentrev-asof": "$1个最新修订版",
        "revisionasof": "垃拉$1所作出个修订版",
        "revision-info": "{{GENDER:$6|$2}}$1个版本$7",
        "previousrevision": "←旧点个版本",
        "revdelete-submit": "应用于拣中个{{PLURAL:$1|修订}}",
        "revdelete-success": "'''修订个可见性已经成功更新。'''",
        "revdelete-failure": "版本个可见性无法更新:$1",
-       "logdelete-success": "'''事件个可见性已经成功设置。'''",
+       "logdelete-success": "日志个可见性设置好哉。",
        "logdelete-failure": "'''事件个可见性无法设置:'''\n$1",
        "revdel-restore": "改变可见性",
        "pagehist": "页面历史",
        "searchprofile-advanced-tooltip": "垃拉自定义名字空间里向搜索",
        "search-result-size": "$1($2个字)",
        "search-result-category-size": "$1个成员($2个儿分类,$3个文件)",
-       "search-redirect": "(转戳到 $1)",
+       "search-redirect": "(重定向 $1)",
        "search-section": "(段落 $1)",
        "search-category": "(分类$1)",
        "search-file-match": "(匹配文件内容)",
        "speciallogtitlelabel": "目标(标题,或针对用户使用{{ns:user}}:用户名):",
        "log": "记录",
        "alllogstext": "所有{{SITENAME}}公开日志个联合展示。侬可以选择日志类型、用户名(区分大小写)或者相关页面(区分大小写)来缩小搜寻范围。",
+       "checkbox-all": "侪选",
+       "checkbox-none": "侪弗选",
        "allpages": "全部页面",
        "nextpage": "下一页($1)",
        "prevpage": "上一页($1)",
index ef1552c..97278ac 100644 (file)
        "noemail": "ס'איז נישט רעקארדירט קיין ע-פאסט אַדרעס פֿאַר באַניצער  \"$1\".",
        "noemailcreate": "איר דאַרפֿט פֿאַרזארגן א גילטיגן ע-פאסט אַדרעס",
        "passwordsent": "א ניי פאסווארט איז געשיקט געווארן צום ע-פאסט אדרעס רעגיסטרירט פאר \"$1\".\nביטע ווידער אריינלאגירן נאך דעם וואס איר באקומט עס.",
-       "blocked-mailpassword": "אייער איי פי אדרעס איז בלאקירט צו רעדאקטירן, דערוועגן זענט איר נישט ערלויבט צו באניצן מיטן פאסווארט ווידעראויפלעבונג פֿונקציע כדי צו פארמיידן סיסטעם קרומבאניץ.",
+       "blocked-mailpassword": "אייער IP-אַדרעס איז בלאָקירט פון רעדאַקטירן. כדי צו פאַרהיטן מיסברויך, ס׳איז ניט דערלויבט צו ניצן די פּאַראָל ווידעראויפשטעלונג פונקציע.",
        "eauthentsent": "א באשטעטיגונג ע-בריוו איז געשיקט געווארן צו דעם באשטימטן ע-פאסט אדרעס. איידער סיי וועלכע אנדערע ע-פאסט וועט ווערן געשיקט צו דער קאנטע, וועט איר דארפן פאלגן די אנווייזונגען אין דער מעלדונג כדי צו זיין זיכער אז די קאנטע איז טאקע אייערס.",
        "throttled-mailpassword": "מ'האט שוין געשיקט א בליצבריוו צוריקצושטעלן דאס פאסווארט, אין {{PLURAL:$1|דער לעצטער שעה|די לעצטע $1 שעה'ן}}. כדי צו פארמײַדן שלעכט באניצן, נאר איין פאסווארט צוריקשטעלן בליצבריוו וועט געשיקט ווערן אין {{PLURAL:$1|א שעה |$1 שעה'ן}}.",
        "mailerror": "פעלער ביים שיקן פּאָסט: $1",
        "recentchangeslinked-page": "בלאַט נאָמען:",
        "recentchangeslinked-to": "צייג ענדערונגען צו בלעטער פארבינדן צו דעם בלאט אנשטאט",
        "recentchanges-page-added-to-category": "[[:$1]] צוגעלייגט צו קאטעגאריע",
-       "recentchanges-page-added-to-category-bundled": "[[:$1]] ×\90×\95×\9f [[Special:WhatLinksHere/$1|{{PLURAL:$2]]|×\90×\99×\99×\9f ×\91×\9c×\90×\98|$2 ×\91×\9c×¢×\98ער}} ×¦×\95×\92×¢×\9c×\99×\99×\92×\98 ×¦×\95 ×§×\90×\98×¢×\92×\90ר×\99×¢",
+       "recentchanges-page-added-to-category-bundled": "[[:$1]] ×¦×\95×\92×¢×\9c×\99×\99×\92×\98 ×¦×\95 ×§×\90Ö·×\98×¢×\92×\90ָר×\99×¢, [[Special:WhatLinksHere/$1|×\93ער ×\93×\90Ö¸×\96×\99קער ×\91×\9c×\90Ö·×\98 ×\90×\99×\96 ×\90×\99×\99× ×\92עש×\9c×\90ָס×\9f ×\90×\99×\9f ×\90Ö·× ×\93ערע ×\91×\9c×¢×\98ער]]",
        "recentchanges-page-removed-from-category": "[[:$1]] אראפגענומען פון קאטעגאריע",
-       "recentchanges-page-removed-from-category-bundled": "[[:$1]] און {{PLURAL:$2|איין בלאט|$2 בלעטער}} אראפגענומען פון קאטעגאריע",
+       "recentchanges-page-removed-from-category-bundled": "[[:$1]] אַראָפּגענומען פון קאַטעגאָריע, [[Special:WhatLinksHere/$1|דער דאָזיקער בלאַט איז איינגעשלאָסן אין אַנדערע בלעטער]]",
        "autochange-username": "מעדיעוויקי אויטאמאטישער טויש",
        "upload": "אַרױפֿלאָדן בילדער/טעקעס",
        "uploadbtn": "אַרױפֿלאָדן טעקע",
        "watchlistedit-raw-done": "אייער אויפֿפאַסונג ליסטע איז געווארן דערהײַנטיקט",
        "watchlistedit-raw-added": "{{PLURAL:$1|1 טיטל איז|$1 טיטלען זענען}} געווען צוגעלייגט:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|1 טיטל איז|$1 טיטלען זענען}} געווען אַראָפגענומען:",
-       "watchlistedit-clear-title": "×\90פ×\92ער×\90×\9e×\98 ×\93×\99 ×\90×\95×\99פפ×\90ס×\9f ליסטע",
+       "watchlistedit-clear-title": "×\90×\95×\99פר×\90Ö·×\9e×¢×\9f ×\93×\99 ×\90×\95×\99פפּ×\90ַס×\9fÖ¾ליסטע",
        "watchlistedit-clear-legend": "ליידיקן די אויפפאסן ליסטע",
        "watchlistedit-clear-explain": "אלע בלעטער וועט מען אראפנעמען פון אײַער אויפפאסונג־ליסטע",
        "watchlistedit-clear-titles": "טיטלען:",
        "logentry-newusers-create2": "באניצער קאנטע $1 איז {{GENDER:$2|געשאפן געווארן}} דורך $3",
        "logentry-newusers-byemail": "באניצער קאנטע $3 איז {{GENDER:$2|געשאפן געווארן}} דורך $1 און דאס פאסווארט איז געשיקט געווארט דורך ע־פאסט",
        "logentry-newusers-autocreate": "באַניצער קאנטע $1 {{GENDER:$2|געשאפן}} אויטאמאטיש",
-       "logentry-rights-rights": "$1 האט {{GENDER:$2|געביטן}} גרופע מיטגלידערשאַפֿט פֿאַר $3 פֿון $4 אויף $5",
+       "logentry-rights-rights": "$1 האָט {{GENDER:$2|געביטן}} גרופּע מיטגלידערשאַפט פאַר $3 פון $4 אויף $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|האט געביטן}} גרופע מיטגלידערשאפט פאר $3",
        "logentry-rights-autopromote": "$1 אויטאמאטיש  {{GENDER:$2|פראמאווירט}} פון $4 צו $5",
        "logentry-upload-upload": "$1 {{GENDER:$2|האט ארויפגעלאדן}} $3",
index 89972ed..81aa690 100644 (file)
        "log-name-managetags": "标签管理日志",
        "log-description-managetags": "此页面列出有关[[Special:Tags|标签]]的管理任务。该日志仅包含管理员手工进行的操作;wiki软件可能创建或删除标签而未在此日志中留下记录。",
        "logentry-managetags-create": "$1{{GENDER:$2|创建了}}标签“$4”",
-       "logentry-managetags-delete": "$1 {{GENDER:$2|删除了}}“$4”标签(已从$5个{{PLURAL:$5|修订版本和/或日志条目}}中移除)",
+       "logentry-managetags-delete": "$1{{GENDER:$2|删除了}}标签“$4”(已从$5个{{PLURAL:$5|修订版本或日志项|修订版本和/或日志项}}中移除)",
        "logentry-managetags-activate": "$1 {{GENDER:$2|激活了}}“$4”标签供用户和机器人使用",
        "logentry-managetags-deactivate": "$1 {{GENDER:$2|停用了}}“$4”标签供用户和机器人使用",
        "log-name-tag": "标签日志",
index 548b78c..ee04481 100644 (file)
@@ -111,6 +111,7 @@ $specialPageAliases = [
        'Specialpages'              => [ 'Speciální_stránky', 'Specialni_stranky' ],
        'Statistics'                => [ 'Statistika', 'Statistiky' ],
        'Tags'                      => [ 'Značky', 'Znacky' ],
+       'TrackingCategories'        => [ 'Sledovací_kategorie', 'Sledovaci_kategorie' ],
        'Unblock'                   => [ 'Odblokování', 'Odblokovani' ],
        'Uncategorizedcategories'   => [ 'Nekategorizované_kategorie', 'Nekategorizovane_kategorie' ],
        'Uncategorizedimages'       => [ 'Nekategorizované_soubory', 'Nekategorizovane_soubory' ],
index 6fda4be..a207c8f 100644 (file)
@@ -6,7 +6,7 @@
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2016-04-19T21:57:53Z
+ * Date: 2016-04-21T17:34:15Z
  */
 .oo-ui-popupTool .oo-ui-popupWidget-popup,
 .oo-ui-popupTool .oo-ui-popupWidget-anchor {
        background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/apex/images/icons/check.svg");
        background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/apex/images/icons/check.svg");
        background-image:      -o-linear-gradient(transparent, transparent), url("themes/apex/images/icons/check.png");
+       background-size: contain;
+       background-position: center center;
+       background-repeat: no-repeat;
 }
 .oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-enabled:hover {
        background-color: #e1f3ff;
index 6d4bbed..6b789f4 100644 (file)
@@ -6,7 +6,7 @@
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2016-04-19T21:57:53Z
+ * Date: 2016-04-21T17:34:15Z
  */
 .oo-ui-popupTool .oo-ui-popupWidget-popup,
 .oo-ui-popupTool .oo-ui-popupWidget-anchor {
        background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check.svg");
        background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check.svg");
        background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/check.png");
+       background-size: contain;
+       background-position: center center;
+       background-repeat: no-repeat;
 }
 .oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-enabled:hover {
        background-color: #eeeeee;
index 3c8b3f6..c2da10e 100644 (file)
                        }
 
                        function finishUpload( moreData ) {
-                               api.uploadFromStash( filekey, $.extend( data, moreData ) );
+                               return api.uploadFromStash( filekey, $.extend( data, moreData ) );
                        }
 
                        return this.upload( file, { stash: true, filename: data.filename } ).then(
index 127f869..1889575 100644 (file)
@@ -1,4 +1,5 @@
 <?php
+use Liuggio\StatsdClient\Factory\StatsdDataFactory;
 use MediaWiki\MediaWikiServices;
 
 /**
@@ -23,6 +24,7 @@ class MediaWikiServicesTest extends PHPUnit_Framework_TestCase {
                        'MainConfig' => [ 'getMainConfig', Config::class ],
                        'SiteStore' => [ 'getSiteStore', SiteStore::class ],
                        'SiteLookup' => [ 'getSiteLookup', SiteLookup::class ],
+                       'StatsdDataFactory' => [ 'getStatsdDataFactory', StatsdDataFactory::class ],
                ];
        }
 
@@ -46,6 +48,7 @@ class MediaWikiServicesTest extends PHPUnit_Framework_TestCase {
                        'MainConfig' => [ 'MainConfig', Config::class ],
                        'SiteStore' => [ 'SiteStore', SiteStore::class ],
                        'SiteLookup' => [ 'SiteLookup', SiteLookup::class ],
+                       'StatsdDataFactory' => [ 'StatsdDataFactory', StatsdDataFactory::class ],
                ];
        }
 
index 20fcedb..e536205 100644 (file)
@@ -105,7 +105,7 @@ class WatchedItemIntegrationTest extends MediaWikiTestCase {
                        WatchedItem::fromUserTitle( $user, $title )->getNotificationTimestamp()
                );
                $user->mRights = [];
-               $this->assertFalse( WatchedItem::fromUserTitle( $user, $title )->isWatched() );
+               $this->assertFalse( WatchedItem::fromUserTitle( $user, $title )->getNotificationTimestamp() );
        }
 
        public function testRemoveWatch_falseOnNotAllowed() {
@@ -120,4 +120,14 @@ class WatchedItemIntegrationTest extends MediaWikiTestCase {
                $this->assertTrue( WatchedItem::fromUserTitle( $user, $title )->removeWatch() );
        }
 
+       public function testGetNotificationTimestamp_falseOnNotWatched() {
+               $user = $this->getUser();
+               $title = Title::newFromText( 'WatchedItemIntegrationTestPage' );
+
+               WatchedItem::fromUserTitle( $user, $title )->removeWatch();
+               $this->assertFalse( WatchedItem::fromUserTitle( $user, $title )->isWatched() );
+
+               $this->assertFalse( WatchedItem::fromUserTitle( $user, $title )->getNotificationTimestamp() );
+       }
+
 }
index 6218f0a..d04d7ec 100644 (file)
@@ -751,8 +751,8 @@ class SessionManagerTest extends MediaWikiTestCase {
                $manager = \TestingAccessWrapper::newFromObject( $this->getManager() );
                $manager->setLogger( new \Psr\Log\NullLogger() );
 
-               $mock = $this->getMock( 'stdClass', [ 'save' ] );
-               $mock->expects( $this->once() )->method( 'save' );
+               $mock = $this->getMock( 'stdClass', [ 'shutdown' ] );
+               $mock->expects( $this->once() )->method( 'shutdown' );
 
                $manager->allSessionBackends = [ $mock ];
                $manager->shutdown();
index af7b758..013bbc1 100644 (file)
  */
 class TitleValueTest extends MediaWikiTestCase {
 
-       public function testConstruction() {
-               $title = new TitleValue( NS_USER, 'TestThis', 'stuff' );
+       public function goodConstructorProvider() {
+               return [
+                       [ NS_USER, 'TestThis', 'stuff', true ],
+                       [ NS_USER, 'TestThis', '', false ],
+               ];
+       }
 
-               $this->assertEquals( NS_USER, $title->getNamespace() );
-               $this->assertEquals( 'TestThis', $title->getText() );
-               $this->assertEquals( 'stuff', $title->getFragment() );
+       /**
+        * @dataProvider goodConstructorProvider
+        */
+       public function testConstruction( $ns, $text, $fragment, $hasFragment ) {
+               $title = new TitleValue( $ns, $text, $fragment );
+
+               $this->assertEquals( $ns, $title->getNamespace() );
+               $this->assertEquals( $text, $title->getText() );
+               $this->assertEquals( $fragment, $title->getFragment() );
+               $this->assertEquals( $hasFragment, $title->hasFragment() );
        }
 
        public function badConstructorProvider() {