Merge "resourceloader: Don't call wfExpandUrl() on load.php urls"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Tue, 15 Sep 2015 23:25:38 +0000 (23:25 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Tue, 15 Sep 2015 23:25:38 +0000 (23:25 +0000)
42 files changed:
RELEASE-NOTES-1.26
autoload.php
docs/hooks.txt
docs/uidesign/design.html
includes/Linker.php
includes/User.php
includes/WebRequest.php
includes/XmlSelect.php
includes/api/i18n/es.json
includes/api/i18n/pt.json
includes/installer/i18n/pt.json
includes/specials/SpecialEditTags.php
includes/specials/SpecialMovepage.php
includes/widget/ComplexTitleInputWidget.php [new file with mode: 0644]
includes/widget/NamespaceInputWidget.php
languages/i18n/be-tarask.json
languages/i18n/ckb.json
languages/i18n/de.json
languages/i18n/el.json
languages/i18n/es.json
languages/i18n/fi.json
languages/i18n/gsw.json
languages/i18n/it.json
languages/i18n/lt.json
languages/i18n/lv.json
languages/i18n/pt.json
languages/i18n/sv.json
languages/i18n/wo.json
resources/Resources.php
resources/src/mediawiki.legacy/shared.css
resources/src/mediawiki.special/mediawiki.special.movePage.css [new file with mode: 0644]
resources/src/mediawiki.special/mediawiki.special.movePage.js
resources/src/mediawiki.widgets/mw.widgets.ComplexTitleInputWidget.base.css [new file with mode: 0644]
resources/src/mediawiki.widgets/mw.widgets.ComplexTitleInputWidget.js [new file with mode: 0644]
resources/src/mediawiki.widgets/mw.widgets.NamespaceInputWidget.js
resources/src/mediawiki.widgets/mw.widgets.TitleInputWidget.js
resources/src/mediawiki/mediawiki.Upload.Dialog.js
resources/src/mediawiki/mediawiki.feedlink.css
resources/src/mediawiki/mediawiki.inspect.js
resources/src/mediawiki/mediawiki.js
tests/phpunit/includes/LinkerTest.php
tests/qunit/suites/resources/mediawiki/mediawiki.test.js

index 8f5db0e..4463c78 100644 (file)
@@ -139,6 +139,7 @@ changes to languages because of Phabricator reports.
 * ChangeTags::tagDescription() will return false if the interface message
   for the tag is disabled.
 * Added PageHistoryPager::doBatchLookups hook.
+* Added $wikiId parameter to FormatAutocomments hook.
 * Added ParserCacheSaveComplete to ParserCache
 * supportsDirectEditing and supportsDirectApiEditing methods added to
   ContentHandler, to provide a way for ApiEditPage and EditPage to check
index 4db3ec7..5adfbe5 100644 (file)
@@ -768,6 +768,7 @@ $wgAutoloadLocalClasses = array(
        'MediaWiki\\Tidy\\RaggettWrapper' => __DIR__ . '/includes/tidy/RaggettWrapper.php',
        'MediaWiki\\Tidy\\TidyDriverBase' => __DIR__ . '/includes/tidy/TidyDriverBase.php',
        'MediaWiki\\Widget\\ComplexNamespaceInputWidget' => __DIR__ . '/includes/widget/ComplexNamespaceInputWidget.php',
+       'MediaWiki\\Widget\\ComplexTitleInputWidget' => __DIR__ . '/includes/widget/ComplexTitleInputWidget.php',
        'MediaWiki\\Widget\\NamespaceInputWidget' => __DIR__ . '/includes/widget/NamespaceInputWidget.php',
        'MediaWiki\\Widget\\TitleInputWidget' => __DIR__ . '/includes/widget/TitleInputWidget.php',
        'MediaWiki\\Widget\\UserInputWidget' => __DIR__ . '/includes/widget/UserInputWidget.php',
index 5e2269a..54ab46c 100644 (file)
@@ -1376,6 +1376,9 @@ $auto: The extracted part of the parsed comment before the call to the hook.
 $post: Boolean, true if there is text after this autocomment
 $title: An optional title object used to links to sections. Can be null.
 $local: Boolean indicating whether section links should refer to local page.
+$wikiId: String containing the ID (as used by WikiMap) of the wiki from which the
+  autocomment originated; null for the local wiki. Added in 1.26, should default
+  to null in handler functions, for backwards compatibility.
 
 'GalleryGetModes': Get list of classes that can render different modes of a
 gallery.
index 51c1b55..6ab57d7 100644 (file)
@@ -2,6 +2,7 @@
 <html lang="en" dir="ltr">
 <head>
        <link rel="stylesheet" href="../../resources/src/mediawiki.legacy/shared.css">
+       <link rel="stylesheet" href="../../resources/src/mediawiki/mediawiki.feedlink.css">
 </head>
 <body style="font-size: small;">
 
index db6f379..9b5ff27 100644 (file)
@@ -1276,9 +1276,11 @@ class Linker {
         * @param string $comment
         * @param Title|null $title Title object (to generate link to the section in autocomment) or null
         * @param bool $local Whether section links should refer to local page
+        * @param string|null $wikiId Id (as used by WikiMap) of the wiki to generate links to. For use with external changes.
+        *
         * @return mixed|string
         */
-       public static function formatComment( $comment, $title = null, $local = false ) {
+       public static function formatComment( $comment, $title = null, $local = false, $wikiId = null ) {
 
                # Sanitize text a bit:
                $comment = str_replace( "\n", " ", $comment );
@@ -1286,8 +1288,8 @@ class Linker {
                $comment = Sanitizer::escapeHtmlAllowEntities( $comment );
 
                # Render autocomments and make links:
-               $comment = self::formatAutocomments( $comment, $title, $local );
-               $comment = self::formatLinksInComment( $comment, $title, $local );
+               $comment = self::formatAutocomments( $comment, $title, $local, $wikiId );
+               $comment = self::formatLinksInComment( $comment, $title, $local, $wikiId );
 
                return $comment;
        }
@@ -1304,9 +1306,11 @@ class Linker {
         * @param string $comment Comment text
         * @param Title|null $title An optional title object used to links to sections
         * @param bool $local Whether section links should refer to local page
-        * @return string Formatted comment
+        * @param string|null $wikiId Id of the wiki to link to (if not the local wiki), as used by WikiMap.
+        *
+        * @return string Formatted comment (wikitext)
         */
-       private static function formatAutocomments( $comment, $title = null, $local = false ) {
+       private static function formatAutocomments( $comment, $title = null, $local = false, $wikiId = null ) {
                // @todo $append here is something of a hack to preserve the status
                // quo. Someone who knows more about bidi and such should decide
                // (1) what sane rendering even *is* for an LTR edit summary on an RTL
@@ -1320,7 +1324,7 @@ class Linker {
                        // zero-width assertions optional, so wrap them in a non-capturing
                        // group.
                        '!(?:(?<=(.)))?/\*\s*(.*?)\s*\*/(?:(?=(.)))?!',
-                       function ( $match ) use ( $title, $local, &$append ) {
+                       function ( $match ) use ( $title, $local, $wikiId, &$append ) {
                                global $wgLang;
 
                                // Ensure all match positions are defined
@@ -1330,7 +1334,7 @@ class Linker {
                                $auto = $match[2];
                                $post = $match[3] !== '';
                                $comment = null;
-                               Hooks::run( 'FormatAutocomments', array( &$comment, $pre, $auto, $post, $title, $local ) );
+                               Hooks::run( 'FormatAutocomments', array( &$comment, $pre, $auto, $post, $title, $local, $wikiId ) );
                                if ( $comment === null ) {
                                        $link = '';
                                        if ( $title ) {
@@ -1349,9 +1353,7 @@ class Linker {
                                                                $title->getDBkey(), $section );
                                                }
                                                if ( $sectionTitle ) {
-                                                       $link = Linker::link( $sectionTitle,
-                                                               $wgLang->getArrow(), array(), array(),
-                                                               'noclasses' );
+                                                       $link = Linker::makeCommentLink( $sectionTitle, $wgLang->getArrow(), $wikiId, 'noclasses' );
                                                } else {
                                                        $link = '';
                                                }
@@ -1384,7 +1386,7 @@ class Linker {
         * @param string $comment Text to format links in
         * @param Title|null $title An optional title object used to links to sections
         * @param bool $local Whether section links should refer to local page
-        * @param string|null $wikiId Id of the wiki to link to (if not the local wiki), as used by WikiMap
+        * @param string|null $wikiId Id of the wiki to link to (if not the local wiki), as used by WikiMap.
         *
         * @return string
         */
@@ -1459,22 +1461,9 @@ class Linker {
                                                        $newTarget = clone ( $title );
                                                        $newTarget->setFragment( '#' . $target->getFragment() );
                                                        $target = $newTarget;
-
-                                               }
-
-                                               if ( $wikiId !== null ) {
-                                                       $thelink = Linker::makeExternalLink(
-                                                               WikiMap::getForeignURL( $wikiId, $target->getPrefixedText(), $target->getFragment() ),
-                                                               $linkText . $inside,
-                                                               /* escape = */ false // Already escaped
-                                                       ) . $trail;
-                                               } else {
-                                                       $thelink = Linker::link(
-                                                               $target,
-                                                               $linkText . $inside
-                                                       ) . $trail;
                                                }
 
+                                               $thelink = Linker::makeCommentLink( $target, $linkText . $inside, $wikiId ) . $trail;
                                        }
                                }
                                if ( $thelink ) {
@@ -1493,6 +1482,32 @@ class Linker {
                );
        }
 
+       /**
+        * Generates a link to the given Title
+        *
+        * @note This is only public for technical reasons. It's not intended for use outside Linker.
+        *
+        * @param Title $title
+        * @param string $text
+        * @param string|null $wikiId Id of the wiki to link to (if not the local wiki), as used by WikiMap.
+        * @param string|string[] $options See the $options parameter in Linker::link.
+        *
+        * @return string HTML link
+        */
+       public static function makeCommentLink( Title $title, $text, $wikiId = null, $options = array() ) {
+               if ( $wikiId !== null && !$title->isExternal() ) {
+                       $link = Linker::makeExternalLink(
+                                       WikiMap::getForeignURL( $wikiId, $title->getPrefixedText(), $title->getFragment() ),
+                                       $text,
+                                       /* escape = */ false // Already escaped
+                               );
+               } else {
+                       $link = Linker::link( $title, $text, array(), array(), $options );
+               }
+
+               return $link;
+       }
+
        /**
         * @param Title $contextTitle
         * @param string $target
@@ -1579,17 +1594,18 @@ class Linker {
         * @param string $comment
         * @param Title|null $title Title object (to generate link to section in autocomment) or null
         * @param bool $local Whether section links should refer to local page
+        * @param string|null $wikiId Id (as used by WikiMap) of the wiki to generate links to. For use with external changes.
         *
         * @return string
         */
-       public static function commentBlock( $comment, $title = null, $local = false ) {
+       public static function commentBlock( $comment, $title = null, $local = false, $wikiId = null ) {
                // '*' used to be the comment inserted by the software way back
                // in antiquity in case none was provided, here for backwards
                // compatibility, acc. to brion -ævar
                if ( $comment == '' || $comment == '*' ) {
                        return '';
                } else {
-                       $formatted = self::formatComment( $comment, $title, $local );
+                       $formatted = self::formatComment( $comment, $title, $local, $wikiId );
                        $formatted = wfMessage( 'parentheses' )->rawParams( $formatted )->escaped();
                        return " <span class=\"comment\">$formatted</span>";
                }
@@ -2382,6 +2398,7 @@ class Linker {
                        'title' => $tooltip
                ) );
        }
+
 }
 
 /**
index 605dab6..dbcbe31 100644 (file)
@@ -3709,14 +3709,6 @@ class User implements IDBAccessObject {
                Hooks::run( 'UserSaveSettings', array( $this ) );
                $this->clearSharedCache();
                $this->getUserPage()->invalidateCache();
-
-               // T95839: clear the cache again post-commit to reduce race conditions
-               // where stale values are written back to the cache by other threads.
-               // Note: this *still* doesn't deal with REPEATABLE-READ snapshot lag...
-               $that = $this;
-               $dbw->onTransactionIdle( function() use ( $that ) {
-                       $that->clearSharedCache();
-               } );
        }
 
        /**
index 03410cc..850f101 100644 (file)
@@ -1324,14 +1324,6 @@ class FauxRequest extends WebRequest {
                $this->protocol = $protocol;
        }
 
-       /**
-        * @param string $method
-        * @throws MWException
-        */
-       private function notImplemented( $method ) {
-               throw new MWException( "{$method}() not implemented" );
-       }
-
        /**
         * @param string $name
         * @param string $default
@@ -1425,10 +1417,6 @@ class FauxRequest extends WebRequest {
                return $this->protocol;
        }
 
-       private function initHeaders() {
-               return;
-       }
-
        /**
         * @param string $name
         * @param string $val
index e765eed..78f4764 100644 (file)
@@ -43,7 +43,7 @@ class XmlSelect {
        }
 
        /**
-        * @param string $default
+        * @param string|array $default
         */
        public function setDefault( $default ) {
                $this->default = $default;
@@ -95,7 +95,7 @@ class XmlSelect {
         * label => ( label => value, label => value )
         *
         * @param array $options
-        * @param string $default
+        * @param string|array $default
         * @return string
         */
        static function formatOptions( $options, $default = false ) {
@@ -106,7 +106,11 @@ class XmlSelect {
                                $contents = self::formatOptions( $value, $default );
                                $data .= Html::rawElement( 'optgroup', array( 'label' => $label ), $contents ) . "\n";
                        } else {
-                               $data .= Xml::option( $label, $value, $value === $default ) . "\n";
+                               // If $default is an array, then the <select> probably has the multiple attribute,
+                               // so we should check if each $value is in $default, rather than checking if
+                               // $value is equal to $default.
+                               $selected = is_array( $default ) ? in_array( $value, $default ) : $value === $default;
+                               $data .= Xml::option( $label, $value, $selected ) . "\n";
                        }
                }
 
index edc5b7a..06478f6 100644 (file)
        "apihelp-feedrecentchanges-param-hidebots": "Ocultar los cambios realizados por bots.",
        "apihelp-feedrecentchanges-param-hideanons": "Ocultar los cambios realizados por usuarios anónimos.",
        "apihelp-feedrecentchanges-param-hideliu": "Ocultar los cambios realizados por usuarios registrados.",
-       "apihelp-feedrecentchanges-param-hidepatrolled": "Ocultar los cambios patrullados.",
+       "apihelp-feedrecentchanges-param-hidepatrolled": "Ocultar los cambios verificados.",
        "apihelp-feedrecentchanges-param-hidemyself": "Ocultar los cambios realizados por el usuario actual.",
        "apihelp-feedrecentchanges-param-tagfilter": "Filtrar por etiquetas.",
        "apihelp-feedrecentchanges-param-target": "Mostrar solo los cambios en las páginas enlazadas en esta.",
        "apihelp-parse-example-text": "Analizar wikitexto.",
        "apihelp-parse-example-texttitle": "Analizar wikitexto, especificando el título de la página.",
        "apihelp-parse-example-summary": "Analizar un resumen.",
-       "apihelp-patrol-description": "Patrullar una página o revisión.",
-       "apihelp-patrol-example-rcid": "Patrullar un cambio reciente",
-       "apihelp-patrol-example-revid": "Patrullar una revisión",
+       "apihelp-patrol-description": "Verificar una página o revisión.",
+       "apihelp-patrol-param-rcid": "Identificador de cambios recientes que verificar.",
+       "apihelp-patrol-example-rcid": "Verificar un cambio reciente.",
+       "apihelp-patrol-example-revid": "Verificar una revisión.",
        "apihelp-protect-description": "Cambiar el nivel de protección de una página.",
        "apihelp-protect-param-title": "Título de la página a (des)proteger. No se puede utilizar con $1pageid.",
        "apihelp-protect-param-pageid": "ID de la página a (des)proteger. No se puede utilizar con $1title.",
        "apihelp-query+recentchanges-param-prop": "Incluir piezas adicionales de información:",
        "apihelp-query+recentchanges-paramvalue-prop-parsedcomment": "Añade el comentario analizado para la edición.",
        "apihelp-query+recentchanges-paramvalue-prop-flags": "Añade marcas para la edición.",
-       "apihelp-query+recentchanges-paramvalue-prop-patrolled": "Etiqueta ediciones patrullables como patrulladas o no patrulladas.",
+       "apihelp-query+recentchanges-paramvalue-prop-patrolled": "Etiqueta ediciones verificables como verificadas o no verificadas.",
        "apihelp-query+recentchanges-param-token": "Usa <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd> en su lugar.",
        "apihelp-query+recentchanges-param-limit": "Cuántos cambios en total se devolverán.",
        "apihelp-query+recentchanges-param-type": "Cuántos tipos de cambios se mostrarán.",
        "apihelp-query+usercontribs-paramvalue-prop-title": "Agrega el título y el identificador del espacio de nombres de la página.",
        "apihelp-query+usercontribs-paramvalue-prop-timestamp": "Añade fecha y hora de la edición.",
        "apihelp-query+usercontribs-paramvalue-prop-comment": "Añade el comentario de la edición.",
+       "apihelp-query+usercontribs-paramvalue-prop-patrolled": "Etiqueta ediciones verificadas.",
        "apihelp-query+usercontribs-paramvalue-prop-tags": "Lista las etiquetas para la edición.",
+       "apihelp-query+usercontribs-param-show": "Mostrar solo los elementos que coinciden con estos criterios. Por ejemplo, solo ediciones no menores: <kbd>$2show=!minor</kbd>.\n\nSi se establece <kbd>$2show=patrolled</kbd> o <kbd>$2show=!patrolled</kbd>, las revisiones más antiguas que <var>[[mw:Manual:$wgRCMaxAge|$wgRCMaxAge]]</var> ($1 {{PLURAL:$1|segundo|segundos}}) no se mostrarán.",
        "apihelp-query+usercontribs-example-user": "Mostrar contribuciones del usuario <kbd>Ejemplo</kbd>.",
        "apihelp-query+usercontribs-example-ipprefix": "Mostrar las contribuciones de todas las direcciones IP con el prefijo <kbd>192.0.2.</kbd>.",
        "apihelp-query+userinfo-description": "Obtener información sobre el usuario actual.",
        "apihelp-query+watchlist-paramvalue-prop-userid": "Añade el identificador de usuario de quien hizo la edición.",
        "apihelp-query+watchlist-paramvalue-prop-comment": "Añade el comentario de la edición.",
        "apihelp-query+watchlist-paramvalue-prop-timestamp": "Añade fecha y hora de la edición.",
-       "apihelp-query+watchlist-paramvalue-prop-patrol": "Etiqueta las ediciones que están patrulladas.",
+       "apihelp-query+watchlist-paramvalue-prop-patrol": "Etiqueta las ediciones que están verificadas.",
        "apihelp-query+watchlist-paramvalue-prop-sizes": "Añade la longitud vieja y la nueva de la página.",
        "apihelp-query+watchlist-paramvalue-prop-notificationtimestamp": "Añade fecha y hora de cuando el usuario fue notificado por última vez acerca de la edición.",
        "apihelp-query+watchlist-paramvalue-prop-loginfo": "Añade información del registro cuando corresponda.",
        "api-help-param-type-boolean": "Tipo: booleano/lógico ([[Special:ApiHelp/main#main/datatypes|detalles]])",
        "api-help-param-type-timestamp": "Tipo: {{PLURAL:$1|1=timestamp|2=lista de timestamps}} ([[Special:ApiHelp/main#main/datatypes|formatos permitidos]])",
        "api-help-param-type-user": "Tipo: {{PLURAL:$1|1=nombre de usuario|2=lista de nombres de usuarios}}",
-       "api-help-param-list": "{{PLURAL:$1|1=Un valor|2=Valores (separados por <kbd>{{!}}</kbd>)}}: $2",
+       "api-help-param-list": "{{PLURAL:$1|1=Uno de los siguientes valores|2=Valores (separados por <kbd>{{!}}</kbd>)}}: $2",
        "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=Debe estar vacío|Puede estar vacío, o $2}}",
        "api-help-param-limit": "No se permite más de $1.",
        "api-help-param-limit2": "No se permite más de $1 ($2 para los bots).",
index aaa0fad..9df9dc2 100644 (file)
@@ -18,8 +18,8 @@
        "apihelp-createaccount-param-email": "Endereço de correio eletrónico do utilizador (opcional).",
        "apihelp-createaccount-param-realname": "Nome verdadeiro do utilizador (opcional).",
        "apihelp-delete-description": "Eliminar uma página.",
-       "apihelp-delete-param-watch": "Adicionar a página à lista de vigiadas do utilizador actual.",
-       "apihelp-delete-param-unwatch": "Remover a página da lista de vigiadas do utilizador actual.",
+       "apihelp-delete-param-watch": "Adicionar a página à lista de vigiadas do utilizador atual.",
+       "apihelp-delete-param-unwatch": "Remover a página da lista de vigiadas do utilizador atual.",
        "apihelp-delete-example-simple": "Eliminar <kbd>Página Principal</kbd>.",
        "apihelp-disabled-description": "O módulo foi desativado.",
        "apihelp-edit-description": "Criar e editar páginas.",
@@ -41,7 +41,7 @@
        "apihelp-feedrecentchanges-param-hideminor": "Ocultar edições menores.",
        "apihelp-feedrecentchanges-param-hidebots": "Ocultar alterações feitas por robôs.",
        "apihelp-feedrecentchanges-param-hidepatrolled": "Ocultar alterações patrulhadas.",
-       "apihelp-feedrecentchanges-param-hidemyself": "Ocultar alterações feitas pelo utilizador actual.",
+       "apihelp-feedrecentchanges-param-hidemyself": "Ocultar alterações feitas pelo utilizador atual.",
        "apihelp-feedrecentchanges-param-target": "Mostrar apenas mudanças em páginas afluentes a esta.",
        "apihelp-feedrecentchanges-example-simple": "Mostrar mudanças recentes",
        "apihelp-help-example-main": "Ajuda para o módulo principal",
index ffb4fb6..bbf2798 100644 (file)
@@ -76,7 +76,7 @@
        "config-memory-raised": "A configuração <code>memory_limit</code> do PHP era $1; foi aumentada para $2.",
        "config-memory-bad": "'''Aviso:''' A configuração <code>memory_limit</code> do PHP é $1.\nIsto é provavelmente demasiado baixo.\nA instalação poderá falhar!",
        "config-ctype": "'''Erro fatal''': O PHP tem de ser compilado com suporte para a [http://www.php.net/manual/en/ctype.installation.php extensão Ctype].",
-       "config-iconv": "<strong>Fatal:</strong> PHP deve ser compilado com suporte à [http://www.php.net/manual/en/iconv.installation.php extensão iconv].",
+       "config-iconv": "<strong>Erro fatal:</strong> O PHP deve ser compilado com suporte à [http://www.php.net/manual/en/iconv.installation.php extensão iconv].",
        "config-json": "<strong>Erro fatal:</strong> O PHP foi compilado sem suporte de JSON.\nTem de instalar a extensão JSON do PHP (incluída no PHP 5.2 ou posterior) ou a extensão [http://pecl.php.net/package/jsonc PECL jsonc] antes de instalar o MediaWiki.\n* A extensão JSON do PHP está incluída nas distribuções 5 e 6 do Red Hat Enterprise Linux (CentOS), mas tem de estar ativa nos ficheiros <code>/etc/php.ini</code> ou <code>/etc/php.d/json.ini</code>.\n* Algumas distribuições do Linux posteriores a maio de 2013 omitem a extensão JSON do PHP e substituem-na pela extensão PECL chamando-lhe <code>php5-json</code> ou <code>php-pecl-jsonc</code>.",
        "config-xcache": "[http://xcache.lighttpd.net/ XCache] instalada",
        "config-apc": "[http://www.php.net/apc APC] instalada",
index f41a1f1..54f50d9 100644 (file)
@@ -349,20 +349,18 @@ class SpecialEditTags extends UnlistedSpecialPage {
        protected function getTagSelect( $selectedTags, $label ) {
                $result = array();
                $result[0] = Xml::label( $label, 'mw-edittags-tag-list' );
-               $result[1] = Xml::openElement( 'select', array(
-                       'name' => 'wpTagList[]',
-                       'id' => 'mw-edittags-tag-list',
-                       'multiple' => 'multiple',
-                       'size' => '8',
-               ) );
+
+               $select = new XmlSelect( 'wpTagList[]', 'mw-edittags-tag-list', $selectedTags );
+               $select->setAttribute( 'multiple', 'multiple' );
+               $select->setAttribute( 'size', '8' );
 
                $tags = ChangeTags::listExplicitlyDefinedTags();
                $tags = array_unique( array_merge( $tags, $selectedTags ) );
-               foreach ( $tags as $tag ) {
-                       $result[1] .= Xml::option( $tag, $tag, in_array( $tag, $selectedTags ) );
-               }
 
-               $result[1] .= Xml::closeElement( 'select' );
+               // Values of $tags are also used as <option> labels
+               $select->addOptions( array_combine( $tags, $tags ) );
+
+               $result[1] = $select->getHTML();
                return $result;
        }
 
index eb8a274..8091f1b 100644 (file)
@@ -147,6 +147,7 @@ class MovePageForm extends UnlistedSpecialPage {
                $out = $this->getOutput();
                $out->setPageTitle( $this->msg( 'move-page', $this->oldTitle->getPrefixedText() ) );
                $out->addModules( 'mediawiki.special.movePage' );
+               $out->addModuleStyles( 'mediawiki.special.movePage.styles' );
                $this->addHelpLink( 'Help:Moving a page' );
 
                $newTitle = $this->newTitle;
@@ -290,7 +291,6 @@ class MovePageForm extends UnlistedSpecialPage {
                // is enforced in the mediawiki.special.movePage module
 
                $immovableNamespaces = array();
-
                foreach ( array_keys( $this->getLanguage()->getNamespaces() ) as $nsId ) {
                        if ( !MWNamespace::isMovable( $nsId ) ) {
                                $immovableNamespaces[] = $nsId;
@@ -299,202 +299,207 @@ class MovePageForm extends UnlistedSpecialPage {
 
                $handler = ContentHandler::getForTitle( $this->oldTitle );
 
-               $out->addHTML(
-                       Xml::openElement(
-                               'form',
-                               array(
-                                       'method' => 'post',
-                                       'action' => $this->getPageTitle()->getLocalURL( 'action=submit' ),
-                                       'id' => 'movepage'
-                               )
-                       ) .
-                       Xml::openElement( 'fieldset' ) .
-                       Xml::element( 'legend', null, $this->msg( 'move-page-legend' )->text() ) .
-                       Xml::openElement( 'table', array( 'id' => 'mw-movepage-table' ) )
+               $out->enableOOUI();
+               $fields = array();
+
+               $fields[] = new OOUI\FieldLayout(
+                       new OOUI\LabelWidget( array(
+                               'label' => new OOUI\HtmlSnippet( "<strong>$oldTitleLink</strong>" )
+                       ) ),
+                       array(
+                               'label' => $this->msg( 'movearticle' )->text(),
+                               'align' => 'top',
+                       )
                );
 
-               $out->addHTML(
-                       "<tr>
-                               <td class='mw-label'>" .
-                                       $this->msg( 'movearticle' )->escaped() .
-                               "</td>
-                               <td class='mw-input'>
-                                       <strong>{$oldTitleLink}</strong>
-                               </td>
-                       </tr>
-                       <tr>
-                               <td class='mw-label'>" .
-                                       Xml::label( $this->msg( 'newtitle' )->text(), 'wpNewTitleMain' ) .
-                               "</td>
-                               <td class='mw-input'>" .
-                                       Html::namespaceSelector(
-                                               array(
-                                                       'selected' => $newTitle->getNamespace(),
-                                                       'exclude' => $immovableNamespaces
-                                               ),
-                                               array( 'name' => 'wpNewTitleNs', 'id' => 'wpNewTitleNs' )
-                                       ) .
-                                       Xml::input(
-                                               'wpNewTitleMain',
-                                               60,
-                                               $wgContLang->recodeForEdit( $newTitle->getText() ),
-                                               array(
-                                                       'type' => 'text',
-                                                       'id' => 'wpNewTitleMain',
-                                                       'maxlength' => 255
-                                               )
-                                       ) .
-                                       Html::hidden( 'wpOldTitle', $this->oldTitle->getPrefixedText() ) .
-                               "</td>
-                       </tr>
-                       <tr>
-                               <td class='mw-label'>" .
-                                       Xml::label( $this->msg( 'movereason' )->text(), 'wpReason' ) .
-                               "</td>
-                               <td class='mw-input'>" .
-                                       Xml::input( 'wpReason', 60, $this->reason, array(
-                                               'type' => 'text',
-                                               'id' => 'wpReason',
-                                               'maxlength' => 200,
-                                       ) ) .
-                               "</td>
-                       </tr>"
+               $fields[] = new OOUI\FieldLayout(
+                       new MediaWiki\Widget\ComplexTitleInputWidget( array(
+                               'id' => 'wpNewTitle',
+                               'namespace' => array(
+                                       'id' => 'wpNewTitleNs',
+                                       'name' => 'wpNewTitleNs',
+                                       'value' => $newTitle->getNamespace(),
+                                       'exclude' => $immovableNamespaces,
+                               ),
+                               'title' => array(
+                                       'id' => 'wpNewTitleMain',
+                                       'name' => 'wpNewTitleMain',
+                                       'value' => $wgContLang->recodeForEdit( $newTitle->getText() ),
+                                       // Inappropriate, since we're expecting the user to input a non-existent page's title
+                                       'suggestions' => false,
+                               ),
+                               'infusable' => true,
+                       ) ),
+                       array(
+                               'label' => $this->msg( 'newtitle' )->text(),
+                               'align' => 'top',
+                       )
+               );
+
+               $fields[] = new OOUI\FieldLayout(
+                       new OOUI\TextInputWidget( array(
+                               'name' => 'wpReason',
+                               'id' => 'wpReason',
+                               'maxLength' => 200,
+                               'infusable' => true,
+                       ) ),
+                       array(
+                               'label' => $this->msg( 'movereason' )->text(),
+                               'align' => 'top',
+                       )
                );
 
                if ( $considerTalk ) {
-                       $out->addHTML( "
-                               <tr>
-                                       <td></td>
-                                       <td class='mw-input'>" .
-                                               Xml::checkLabel(
-                                                       $this->msg( 'movetalk' )->text(),
-                                                       'wpMovetalk',
-                                                       'wpMovetalk',
-                                                       $this->moveTalk
-                                               ) .
-                                       "</td>
-                               </tr>"
+                       $fields[] = new OOUI\FieldLayout(
+                               new OOUI\CheckboxInputWidget( array(
+                                       'name' => 'wpMovetalk',
+                                       'id' => 'wpMovetalk',
+                                       'value' => '1',
+                                       'selected' => $this->moveTalk,
+                               ) ),
+                               array(
+                                       'label' => $this->msg( 'movetalk' )->text(),
+                                       'align' => 'inline',
+                               )
                        );
                }
 
                if ( $user->isAllowed( 'suppressredirect' ) ) {
                        if ( $handler->supportsRedirects() ) {
                                $isChecked = $this->leaveRedirect;
-                               $options = array();
+                               $isDisabled = false;
                        } else {
                                $isChecked = false;
-                               $options = array(
-                                       'disabled' => 'disabled'
-                               );
+                               $isDisabled = true;
                        }
-                       $out->addHTML( "
-                               <tr>
-                                       <td></td>
-                                       <td class='mw-input'>" .
-                                               Xml::checkLabel(
-                                                       $this->msg( 'move-leave-redirect' )->text(),
-                                                       'wpLeaveRedirect',
-                                                       'wpLeaveRedirect',
-                                                       $isChecked,
-                                                       $options
-                                               ) .
-                                       "</td>
-                               </tr>"
+                       $fields[] = new OOUI\FieldLayout(
+                               new OOUI\CheckboxInputWidget( array(
+                                       'name' => 'wpLeaveRedirect',
+                                       'id' => 'wpLeaveRedirect',
+                                       'value' => '1',
+                                       'selected' => $isChecked,
+                                       'disabled' => $isDisabled,
+                               ) ),
+                               array(
+                                       'label' => $this->msg( 'move-leave-redirect' )->text(),
+                                       'align' => 'inline',
+                               )
                        );
                }
 
                if ( $hasRedirects ) {
-                       $out->addHTML( "
-                               <tr>
-                                       <td></td>
-                                       <td class='mw-input'>" .
-                                               Xml::checkLabel(
-                                                       $this->msg( 'fix-double-redirects' )->text(),
-                                                       'wpFixRedirects',
-                                                       'wpFixRedirects',
-                                                       $this->fixRedirects
-                                               ) .
-                                       "</td>
-                               </tr>"
+                       $fields[] = new OOUI\FieldLayout(
+                               new OOUI\CheckboxInputWidget( array(
+                                       'name' => 'wpFixRedirects',
+                                       'id' => 'wpFixRedirects',
+                                       'value' => '1',
+                                       'selected' => $this->fixRedirects,
+                               ) ),
+                               array(
+                                       'label' => $this->msg( 'fix-double-redirects' )->text(),
+                                       'align' => 'inline',
+                               )
                        );
                }
 
                if ( $canMoveSubpage ) {
                        $maximumMovedPages = $this->getConfig()->get( 'MaximumMovedPages' );
-                       $out->addHTML( "
-                               <tr>
-                                       <td></td>
-                                       <td class='mw-input'>" .
-                                               Xml::check(
-                                                       'wpMovesubpages',
-                                                       # Don't check the box if we only have talk subpages to
-                                                       # move and we aren't moving the talk page.
-                                                       $this->moveSubpages && ( $this->oldTitle->hasSubpages() || $this->moveTalk ),
-                                                       array( 'id' => 'wpMovesubpages' )
-                                               ) . '&#160;' .
-                                               Xml::tags(
-                                                       'label',
-                                                       array( 'for' => 'wpMovesubpages' ),
-                                                       $this->msg(
-                                                               ( $this->oldTitle->hasSubpages()
-                                                                       ? 'move-subpages'
-                                                                       : 'move-talk-subpages' )
-                                                       )->numParams( $maximumMovedPages )->params( $maximumMovedPages )->parse()
-                                               ) .
-                                       "</td>
-                               </tr>"
+                       $fields[] = new OOUI\FieldLayout(
+                               new OOUI\CheckboxInputWidget( array(
+                                       'name' => 'wpMovesubpages',
+                                       'id' => 'wpMovesubpages',
+                                       'value' => '1',
+                                       # Don't check the box if we only have talk subpages to
+                                       # move and we aren't moving the talk page.
+                                       'selected' => $this->moveSubpages && ( $this->oldTitle->hasSubpages() || $this->moveTalk ),
+                               ) ),
+                               array(
+                                       'label' => new OOUI\HtmlSnippet(
+                                               $this->msg(
+                                                       ( $this->oldTitle->hasSubpages()
+                                                               ? 'move-subpages'
+                                                               : 'move-talk-subpages' )
+                                               )->numParams( $maximumMovedPages )->params( $maximumMovedPages )->parse()
+                                       ),
+                                       'align' => 'inline',
+                               )
                        );
                }
 
-               $watchChecked = $user->isLoggedIn() && ( $this->watch || $user->getBoolOption( 'watchmoves' )
-                       || $user->isWatched( $this->oldTitle ) );
                # Don't allow watching if user is not logged in
                if ( $user->isLoggedIn() ) {
-                       $out->addHTML( "
-                               <tr>
-                                       <td></td>
-                                       <td class='mw-input'>" .
-                                               Xml::checkLabel(
-                                                       $this->msg( 'move-watch' )->text(),
-                                                       'wpWatch',
-                                                       'watch',
-                                                       $watchChecked
-                                               ) .
-                                       "</td>
-                               </tr>"
+                       $watchChecked = $user->isLoggedIn() && ( $this->watch || $user->getBoolOption( 'watchmoves' )
+                               || $user->isWatched( $this->oldTitle ) );
+                       $fields[] = new OOUI\FieldLayout(
+                               new OOUI\CheckboxInputWidget( array(
+                                       'name' => 'wpWatch',
+                                       'id' => 'watch', # ew
+                                       'value' => '1',
+                                       'selected' => $watchChecked,
+                               ) ),
+                               array(
+                                       'label' => $this->msg( 'move-watch' )->text(),
+                                       'align' => 'inline',
+                               )
                        );
                }
 
                if ( $confirm ) {
-                       $out->addHTML( "
-                               <tr>
-                                       <td></td>
-                                       <td class='mw-input'>" .
-                                               Xml::checkLabel(
-                                                       $this->msg( 'delete_and_move_confirm' )->text(),
-                                                       'wpConfirm',
-                                                       'wpConfirm'
-                                               ) .
-                                       "</td>
-                               </tr>"
+                       $watchChecked = $user->isLoggedIn() && ( $this->watch || $user->getBoolOption( 'watchmoves' )
+                               || $user->isWatched( $this->oldTitle ) );
+                       $fields[] = new OOUI\FieldLayout(
+                               new OOUI\CheckboxInputWidget( array(
+                                       'name' => 'wpConfirm',
+                                       'id' => 'wpConfirm',
+                                       'value' => '1',
+                               ) ),
+                               array(
+                                       'label' => $this->msg( 'delete_and_move_confirm' )->text(),
+                                       'align' => 'inline',
+                               )
                        );
                }
 
-               $out->addHTML( "
-                       <tr>
-                               <td></td>
-                               <td class='mw-submit'>" .
-                                       Xml::submitButton( $movepagebtn, array( 'name' => $submitVar ) ) .
-                               "</td>
-                       </tr>"
+               $fields[] = new OOUI\FieldLayout(
+                       new OOUI\ButtonInputWidget( array(
+                               'name' => $submitVar,
+                               'value' => $movepagebtn,
+                               'label' => $movepagebtn,
+                               'flags' => array( 'progressive', 'primary' ),
+                               'type' => 'submit',
+                       ) ),
+                       array(
+                               'align' => 'top',
+                       )
+               );
+
+               $fieldset = new OOUI\FieldsetLayout( array(
+                       'label' => $this->msg( 'move-page-legend' )->text(),
+                       'id' => 'mw-movepage-table',
+                       'items' => $fields,
+               ) );
+
+               $form = new OOUI\FormLayout( array(
+                       'method' => 'post',
+                       'action' => $this->getPageTitle()->getLocalURL( 'action=submit' ),
+                       'id' => 'movepage',
+               ) );
+               $form->appendContent(
+                       $fieldset,
+                       new OOUI\HtmlSnippet(
+                               Html::hidden( 'wpOldTitle', $this->oldTitle->getPrefixedText() ) .
+                               Html::hidden( 'wpEditToken', $user->getEditToken() )
+                       )
                );
 
                $out->addHTML(
-                       Xml::closeElement( 'table' ) .
-                       Html::hidden( 'wpEditToken', $user->getEditToken() ) .
-                       Xml::closeElement( 'fieldset' ) .
-                       Xml::closeElement( 'form' ) .
-                       "\n"
+                       new OOUI\PanelLayout( array(
+                               'classes' => array( 'movepage-wrapper' ),
+                               'expanded' => false,
+                               'padded' => true,
+                               'framed' => true,
+                               'content' => $form,
+                       ) )
                );
 
                $this->showLogFragment( $this->oldTitle );
diff --git a/includes/widget/ComplexTitleInputWidget.php b/includes/widget/ComplexTitleInputWidget.php
new file mode 100644 (file)
index 0000000..73ef54c
--- /dev/null
@@ -0,0 +1,67 @@
+<?php
+/**
+ * MediaWiki Widgets – ComplexTitleInputWidget class.
+ *
+ * @copyright 2011-2015 MediaWiki Widgets Team and others; see AUTHORS.txt
+ * @license The MIT License (MIT); see LICENSE.txt
+ */
+namespace MediaWiki\Widget;
+
+/**
+ * Complex title input widget.
+ */
+class ComplexTitleInputWidget extends \OOUI\Widget {
+
+       protected $namespace = null;
+       protected $title = null;
+
+       /**
+        * Like TitleInputWidget, but the namespace has to be input through a separate dropdown field.
+        *
+        * @param array $config Configuration options
+        * @param array $config['namespace'] Configuration for the NamespaceInputWidget dropdown with list
+        *     of namespaces
+        * @param array $config['title'] Configuration for the TitleInputWidget text field
+        */
+       public function __construct( array $config = array() ) {
+               // Configuration initialization
+               $config = array_merge(
+                       array(
+                               'namespace' => array(),
+                               'title' => array(),
+                       ),
+                       $config
+               );
+
+               // Parent constructor
+               parent::__construct( $config );
+
+               // Properties
+               $this->config = $config;
+               $this->namespace = new NamespaceInputWidget( $config['namespace'] );
+               $this->title = new TitleInputWidget( array_merge(
+                       $config['title'],
+                       array(
+                               // The inner TitleInputWidget shouldn't be infusable, only the ComplexTitleInputWidget itself can be.
+                               'infusable' => false,
+                               'relative' => true,
+                               'namespace' => isset( $config['namespace']['value'] ) ? $config['namespace']['value'] : null,
+                       )
+               ) );
+
+               // Initialization
+               $this
+                       ->addClasses( array( 'mw-widget-complexTitleInputWidget' ) )
+                       ->appendContent( $this->namespace, $this->title );
+       }
+
+       protected function getJavaScriptClassName() {
+               return 'mw.widgets.ComplexTitleInputWidget';
+       }
+
+       public function getConfig( &$config ) {
+               $config['namespace'] = $this->config['namespace'];
+               $config['title'] = $this->config['title'];
+               return parent::getConfig( $config );
+       }
+}
index a99227e..696c8ad 100644 (file)
@@ -18,6 +18,7 @@ class NamespaceInputWidget extends \OOUI\DropdownInputWidget {
         * @param array $config Configuration options
         * @param string $config['includeAllValue'] If specified, add a "all namespaces" option to the
         *     namespace dropdown, and use this as the input value for it
+        * @param number[] $config['exclude'] List of namespace numbers to exclude from the selector
         */
        public function __construct( array $config = array() ) {
                // Configuration initialization
@@ -28,14 +29,17 @@ class NamespaceInputWidget extends \OOUI\DropdownInputWidget {
 
                // Properties
                $this->includeAllValue = isset( $config['includeAllValue'] ) ? $config['includeAllValue'] : null;
+               $this->exclude = isset( $config['exclude'] ) ? $config['exclude'] : array();
 
                // Initialization
                $this->addClasses( array( 'mw-widget-namespaceInputWidget' ) );
        }
 
        protected function getNamespaceDropdownOptions( array $config ) {
-               $namespaceOptionsParams = isset( $config['includeAllValue'] ) ?
-                       array( 'all' => $config['includeAllValue'] ) : array();
+               $namespaceOptionsParams = array(
+                       'all' => isset( $config['includeAllValue'] ) ? $config['includeAllValue'] : null,
+                       'exclude' => isset( $config['exclude'] ) ? $config['exclude'] : null
+               );
                $namespaceOptions = \Html::namespaceSelectorOptions( $namespaceOptionsParams );
 
                $options = array();
@@ -55,6 +59,7 @@ class NamespaceInputWidget extends \OOUI\DropdownInputWidget {
 
        public function getConfig( &$config ) {
                $config['includeAllValue'] = $this->includeAllValue;
+               $config['exclude'] = $this->exclude;
                // Skip DropdownInputWidget's getConfig(), we don't need 'options' config
                return \OOUI\InputWidget::getConfig( $config );
        }
index ef97433..b776403 100644 (file)
        "tags-edit-remove": "Выдаліць гэтыя меткі:",
        "tags-edit-remove-all-tags": "(выдаліць усе меткі)",
        "tags-edit-chosen-placeholder": "Абярыце меткі",
+       "tags-edit-chosen-no-results": "Адпаведныя меткі ня знойдзеныя",
        "comparepages": "Параўнаньне старонак",
        "compare-page1": "Старонка 1",
        "compare-page2": "Старонка 2",
index d0cfc1a..f467f8f 100644 (file)
        "sp-contributions-toponly": "تەنیا ئەو دەستکارییانە نیشان بدە کە دوایین پێداچوونەوەن",
        "sp-contributions-newonly": "تەنیا ئەو دەستکارییانە نیشان بدە کە دروستکردنی پەڕەن",
        "sp-contributions-submit": "بگەڕێ",
-       "whatlinkshere": "پەیوەندیدار بە ئێرەوە",
+       "whatlinkshere": "بەستەرەکان بە ئێرەوە",
        "whatlinkshere-title": "ئەو پەڕانەی بەستەریان ھەیە بۆ «$1»",
        "whatlinkshere-page": "پەڕە:",
        "linkshere": "پەڕەکانی ژێرەوە بەستەر دراون بۆ <strong>[[:$1]]</strong>:",
index b2a76d7..c61e5f4 100644 (file)
        "gender-unknown": "„Der Benutzer“, „seine Diskussion“, „er bearbeitet“ usw.",
        "gender-male": "„Der Benutzer“, „seine Diskussion“, „er bearbeitet“ usw. (männlich)",
        "gender-female": "„Die Benutzerin“, „ihre Diskussion“, „sie bearbeitet“ usw. (weiblich)",
-       "prefs-help-gender": "Dies ist eine freiwillige Angabe.\nDie Software nutzt sie, um dich mit dem zutreffenden grammatikalischen Geschlecht anzureden oder gegenüber anderen zu erwähnen.\nDiese Information ist öffentlich zugänglich.\n\nBei der ersten Option wird das generische Maskulinum verwendet, so dass sich das gleiche Resultat ergibt wie bei der dritten Option.",
+       "prefs-help-gender": "Dies ist eine freiwillige Angabe.\nDie Software nutzt sie, um dich mit dem zutreffenden grammatikalischen Geschlecht anzureden oder gegenüber anderen zu erwähnen.\nDiese Information ist öffentlich zugänglich.",
        "email": "E-Mail",
        "prefs-help-realname": "Der bürgerliche Name ist optional.\nFalls angegeben, kann er verwendet werden, um dir eine Zuordnung für deine Beiträge zu geben.",
        "prefs-help-email": "Die Angabe einer E-Mail-Adresse ist optional, ermöglicht aber die Zusendung eines Ersatzpasswortes, sofern du dein Passwort vergessen hast.",
index 2f80d03..2f58c02 100644 (file)
        "spam_blanking": "Όλες οι αναθεωρήσεις περιείχαν συνδέσμους προς το $1, εξάλειψη",
        "spam_deleting": "Διαγραφή όλων των αναθεωρήσεων που περιείχαν συνδέσμους προς το $1",
        "simpleantispam-label": "Έλεγχος για spam.\n<strong>Μην</strong> το συμπληρώσετε αυτό!",
-       "pageinfo-title": "Πληροφορίες για \"$1\"",
+       "pageinfo-title": "Πληροφορίες για «$1»",
        "pageinfo-not-current": "Μας συγχωρείτε, είναι αδύνατο να παράσχουμε αυτή την πληροφορία για παλιές αναθεωρήσεις.",
        "pageinfo-header-basic": "Βασικές πληροφορίες",
        "pageinfo-header-edits": "Ιστορικό επεξεργασίας",
        "pageinfo-recent-authors": "Πρόσφατος αριθμός μοναδικών συντακτών",
        "pageinfo-magic-words": "{{PLURAL:$1|Μαγική λέξη|Μαγικές λέξεις}} ($1)",
        "pageinfo-hidden-categories": "{{PLURAL:$1|Κρυφή κατηγορία|Κρυφές κατηγορίες}} ($1)",
-       "pageinfo-templates": "Ενσωματωμένα {{PLURAL:$1|πρότυπο|πρότυπα}} ($1)",
-       "pageinfo-transclusions": "{{PLURAL:$1|Î\97 Ï\83ελίδα ÎµÎ½Ï\83Ï\89μαÏ\84Ï\8eνεÏ\84αι|Î\9fι Ï\83ελίδεÏ\82 ÎµÎ½Ï\83Ï\89μαÏ\84Ï\8eνονÏ\84αι}} Ï\83ε ($1)",
+       "pageinfo-templates": "{{PLURAL:$1|Ενσωματωμένο πρότυπο|Ενσωματωμένα πρότυπα}} ($1)",
+       "pageinfo-transclusions": "{{PLURAL:$1|Σελίδα Ï\83Ï\84ην Î¿Ï\80οία|ΣελίδεÏ\82 Ï\83Ï\84ιÏ\82 Î¿Ï\80οίεÏ\82}} ÎµÎ½Ï\83Ï\89μαÏ\84Ï\8eνεÏ\84αι ($1)",
        "pageinfo-toolboxlink": "Πληροφορίες σελίδας",
-       "pageinfo-redirectsto": "Ανακατευθύνσεις σε",
+       "pageinfo-redirectsto": "Ανακατευθύνει σε",
        "pageinfo-redirectsto-info": "πληροφορίες",
-       "pageinfo-contentpage": "Î¥Ï\80ολογίζονÏ\84αι Ï\89Ï\82 Ï\83ελίδεÏ\82 περιεχομένου",
+       "pageinfo-contentpage": "Î\9aαÏ\84αμεÏ\84Ï\81άÏ\84αι Ï\89Ï\82 Ï\83ελίδα περιεχομένου",
        "pageinfo-contentpage-yes": "Ναι",
        "pageinfo-protect-cascading": "Οι προστασίες ξεκινούν τη διαδοχή τους από εδώ",
        "pageinfo-protect-cascading-yes": "Ναι",
        "special-characters-title-endash": "παύλα",
        "special-characters-title-emdash": "διπλή παύλα",
        "special-characters-title-minus": "σύμβολο πλην",
+       "mw-widgets-dateinput-no-date": "Καμία ημερομηνία δεν επιλέχθηκε",
        "mw-widgets-dateinput-placeholder-day": "ΕΕΕΕ-ΜΜ-ΗΗ",
        "mw-widgets-dateinput-placeholder-month": "ΕΕΕΕ-ΜΜ",
+       "mw-widgets-titleinput-description-new-page": "η σελίδα που δεν υπάρχει ακόμα",
        "mw-widgets-titleinput-description-redirect": "ανακατεύθυνση στο $1"
 }
index c6bdc23..47248b6 100644 (file)
        "tog-underline": "Subrayar los enlaces:",
        "tog-hideminor": "Ocultar las ediciones menores de los cambios recientes",
        "tog-hidepatrolled": "Ocultar las ediciones verificadas de los cambios recientes",
-       "tog-newpageshidepatrolled": "Ocultar las páginas patrulladas en la lista de páginas nuevas",
+       "tog-newpageshidepatrolled": "Ocultar las páginas verificadas de la lista de páginas nuevas",
        "tog-extendwatchlist": "Mostrar todos los cambios en la lista de seguimiento, no solo los más recientes",
        "tog-usenewrc": "Agrupar los cambios por página en los cambios recientes y en la lista de seguimiento",
        "tog-numberheadings": "Numerar automáticamente los encabezados",
        "markedaspatrolledtext": "La revisión seleccionada de [[:$1|$1]] ha sido marcada como verificada.",
        "rcpatroldisabled": "Se ha desactivado la supervisión de cambios recientes",
        "rcpatroldisabledtext": "La capacidad de verificar los cambios recientes está deshabilitada en este momento.",
-       "markedaspatrollederror": "No se puede marcar como patrullada",
+       "markedaspatrollederror": "No se puede marcar como verificada",
        "markedaspatrollederrortext": "Debes especificar una revisión para marcarla como verificada.",
        "markedaspatrollederror-noautopatrol": "No tienes permisos para marcar tus propios cambios como verificados.",
        "markedaspatrollednotify": "Este cambio realizado en $1 se ha marcado como verificado.",
index efe544f..b6c51a9 100644 (file)
        "booksources-text": "Alla linkkejä ulkopuolisiin sivustoihin, joilla myydään uusia ja käytettyjä kirjoja. Sivuilla voi myös olla lisätietoa kirjoista.",
        "booksources-invalid-isbn": "Annettu ISBN-numero ei ole kelvollinen. Tarkista alkuperäisestä lähteestä kirjoitusvirheiden varalta.",
        "specialloguserlabel": "Suorittaja:",
-       "speciallogtitlelabel": "Kohde (sivu tai {{ns:user}}:käyttäjänimi käyttäjää varten):",
+       "speciallogtitlelabel": "Kohde (sivu tai {{ns:user}}:käyttäjänimi):",
        "log": "Lokit",
        "all-logs-page": "Kaikki julkiset lokit",
        "alllogstext": "Tämä on yhdistetty lokien näyttö.\nVoit rajoittaa listaa valitsemalla lokityypin, käyttäjän tai sivun johon muutos on kohdistunut. Jälkimmäiset ovat kirjainkokoherkkiä.",
index 29a474e..f583152 100644 (file)
        "page_last": "Ändi",
        "histlegend": "Du chasch zwei Versionen uswähle und verglyche.<br />\nErklärig: (aktuell) = Underschid zu jetz,\n(vorane) = Underschid zur alte Version, <strong>K</strong> = chlyni Änderig",
        "history-fieldset-title": "Suech in dr Versionsgschicht",
-       "history-show-deleted": "nume gleschti Versione",
+       "history-show-deleted": "Nume gleschti Versione",
        "histfirst": "eltischti",
        "histlast": "neischti",
        "historysize": "({{PLURAL:$1|1 Byte|$1 Bytes}})",
        "changecontentmodel-title-label": "Sytetitel",
        "changecontentmodel-model-label": "Nöüs Inhaltsmodäll",
        "changecontentmodel-reason-label": "Grund:",
+       "changecontentmodel-success-title": "Ds Inhaltsmodäll het g’änderet",
+       "changecontentmodel-success-text": "Der Inhaltstyp vo [[:$1]] het g’änderet.",
+       "changecontentmodel-cannot-convert": "Der Inhalt vo [[:$1]] lat sech nid zum Typ $2 la konvertiere.",
+       "changecontentmodel-nodirectediting": "Ds Inhaltsmodäll «$1» lat ds diräkte Bearbeite nid zue",
+       "log-name-contentmodel": "Protokoll vo Inhaltsmodälländerige",
+       "log-description-contentmodel": "Ereignis, wo mit em Inhaltsmodäll von ere Syte z tüe hei",
+       "logentry-contentmodel-change": "{{GENDER:$2|Der $1|D $1|$1}} het ds Inhaltsmodäll vor Syte $3 g’änderet vo «$4» uf «$5»",
+       "logentry-contentmodel-change-revertlink": "zrüggsetze",
+       "logentry-contentmodel-change-revert": "zrüggsetze",
        "protectlogpage": "Syteschutz-Logbuech",
        "protectlogtext": "Des isch s Syteschutz-Logbuech.\nLueg d [[Special:ProtectedPages|Lischt vu dr gschitzte Syte]] fir alli zurzyt gschitzte Syte.",
        "protectedarticle": "het „[[$1]]“ gschitzt",
        "protect-locked-blocked": "Du chasch dr Syteschutz nit ändere, wel Dyy Benutzerkonto gsperrt isch. Do sin di aktuälle Syteschutz-Yystellige fir d Syte '''„$1“:'''",
        "protect-locked-dblock": "D Datebank isch gsperrt, dr Syteschutz cha wäge däm nit gänderet wäre. Doo sin di aktuälle Syteschutz-Yystellige fir d Syte '''„$1“:'''",
        "protect-locked-access": "Dys Konto het nid di nötige Rächt, für der Schutzstatus z ändere.\nHie sy di aktuelle Schutzystellige vor Syte '''$1''':",
-       "protect-cascadeon": "Die Syten isch gschützt, wil si {{PLURAL:$1|zur folgende Syte|zu de folgende Syte}} ghört, wo derfür e Kaskadesperrig gilt.\nDer Schutzstatus vo dere Syte lat sech la ändere, aber das het kei Yfluss uf d Kaskadesperrig.",
+       "protect-cascadeon": "Die Syten isch gschützt, wil si i {{PLURAL:$1|der|de}} folgende Syten y’bunden isch, wo derfür e Kaskadesperrig gilt.\nÄnderigen am Schutzstatus vo dere Syte hei kei Yfluss uf d Kaskadesperrig.",
        "protect-default": "Alle Benutzer",
        "protect-fallback": "Nume Benutzer mit dr „$1“-Berächtigung erlaube.",
        "protect-level-autoconfirmed": "Nume automatisch bstetigte Benutzer erlaube",
        "protect-othertime": "Anderi Sperrduur:",
        "protect-othertime-op": "anderi Sperrduur",
        "protect-existing-expiry": "Aktuälls Syteschutzänd: $2, $3 Uhr",
+       "protect-existing-expiry-infinity": "Momentani Ablouffzyt: unbeschränkt",
        "protect-otherreason": "Andere/zuesätzlige Grund:",
        "protect-otherreason-op": "Andere Grund",
        "protect-dropdown": "*Allgmeini Schutzgrind\n** Link-Spam\n** Editwar\n** Vylmol yybundeni Vorlag\n** Syte mit ere hoche Bsuecherzahl",
        "undeletepagetext": "Die {{PLURAL:$1|Syte isch glescht wore un cha|$1 Syte sin glescht wore un chenne}} vu Ammanne widerhärgstellt wäre:",
        "undelete-fieldset-title": "Widerhärstelle",
        "undeleteextrahelp": "* Go d Syte ganz mit allene Versione widerhärzstelle, wehl kei Version us, gib e Begrindig aa un druck uf „{{int:undeletebtn}}“.\n* Mechtsch nume bstimmti Versione widerhärstelle, no wehl die bitte einzeln no dr Markierige us, gib e Begrindig aa un druck derno uf „{{int:undeletebtn}}“..",
-       "undeleterevisions": "{{PLURAL:$1|1 Version|$1 Versione}} archiviert",
+       "undeleterevisions": "$1 {{PLURAL:$1|Version|Versione}} glöscht",
        "undeletehistory": "Wänn Du die Syte widerhärstellsch, wäre au alli alte Versione widerhärgstellt.\nWänn syt dr Leschig e neiji Syte mit em glyche Name aagleit woren isch, no wäre di widerhärgstellte Versione chronologisch in d Versionsgschicht yygordnet.",
        "undeleterevdel": "D Widerhärstellig wird nit durgfiert, wänn di neijscht Version versteckt isch oder s versteckti Teil dinne het.\nIn däm Fall darf di neijscht Version nit markiert wäre oder ihre Status muess uf normali Version gänderet wäre.",
        "undeletehistorynoadmin": "Dä Artikel isch glescht wore. Dr Grund fir d Leschig isch in dr Zämmefassig aagee, derzue au Aagaabe zum letschte Benutzer, wu dä Artikel bearbeitet het vor dr Leschig. Dr aktuäll Täxt vum gleschte Artikel isch nume zuegängli fir Ammanne.",
        "namespace": "Namensruum:",
        "invert": "Uswahl umkehre",
        "tooltip-invert": "Des Chäschtli aaklicke go Änderige im gwehlte Namensruum un, wänn uusgwehlt, im zuegherige Namensruum uusblände",
+       "tooltip-whatlinkshere-invert": "Tue das Chästli abhääggle, für kener Links vo Syten us em usgwählte Namensruum z zeige.",
        "namespace_association": "Zuegordnete Namensruum",
        "tooltip-namespace_association": "Des Chäschtli aaklicke go dr Diskussionsnamensruum oder dr Namesnruum zuesätzlig mityybezie, wu zue Dyre Uuswahl derzue ghert.",
        "blanknamespace": "(Haupt-)",
        "contributions-title": "Benutzerbyytreg vu „$1“",
        "mycontris": "Myyni Byyträg",
        "contribsub2": "Vu {{GENDER:$3|$1}} ($2)",
+       "contributions-userdoesnotexist": "Ds Benutzerkonto «$1» isch nid registriert.",
        "nocontribs": "S sin keini Benutzerbyytreg mit däne Kriterie gfunde wore.",
        "uctop": "(aktuell)",
        "month": "u Monet:",
        "sp-contributions-newbies-sub": "vo nöji Benützer",
        "sp-contributions-newbies-title": "Benutzerbyytreg vu neije Benutzer",
        "sp-contributions-blocklog": "Sperrlogbuech",
+       "sp-contributions-suppresslog": "underdrückti Benutzerbyträg",
        "sp-contributions-deleted": "gleschti Bytreg",
        "sp-contributions-uploads": "Uffegladeni Dateie",
        "sp-contributions-logs": "Logbiecher",
        "sp-contributions-blocked-notice-anon": "Die IP-Adräss isch zur Zyt gsperrt.\nDo chunnt dr aktuäll Yytrag us em Benutzersperr-Logbuech:",
        "sp-contributions-search": "Suech no Benutzerbiträg",
        "sp-contributions-username": "IP-Adress oder Benutzername:",
-       "sp-contributions-toponly": "Nume aktuälli Versione zeige",
+       "sp-contributions-toponly": "Nume Byträg zeige, won en aktuelli Version sy",
+       "sp-contributions-newonly": "Nume Byträg zeige, wo e nöüi Syte hei agleit",
        "sp-contributions-submit": "Sueche",
        "whatlinkshere": "Was verwyst do druff?",
        "whatlinkshere-title": "Sytene, wo uf „$1“ verlinke",
        "autoblockid": "Automatischi Sperrig #$1",
        "block": "Benutzer sperre",
        "unblock": "Benutzer frejgee",
-       "blockip": "Däm Binutzer d Bearbeitigsrächt furtnee",
+       "blockip": "{{GENDER:$1|Benutzer|Benutzerin}} sperre",
        "blockip-legend": "IP-Adräss/Benutzer sperre",
        "blockiptext": "Nimm des Formular go ne Benutzer oder e IP-Adräss sperre.\nDes sott numme erfolge go Vandalismus verhindere un in Ibereinstimmig mit in dr [[{{MediaWiki:Policy-url}}|Leitlinie]]. Bitte gib au ne Grund fi d Sperri aa (z. B. indäm du einzel ni Syte zitiersch, wu vandaliert wore sin).",
        "ipaddressorusername": "IP-Adräss oder Benutzername:",
        "blockipsuccesstext": "Dr Benutzer/d IP-Adräss [[Special:Contributions/$1|$1]] isch gsperrt wore.<br />\nGo d Sperri ufhebe lueg d [[Special:BlockList|Lisch vu allene aktive Sperrine]].",
        "ipb-blockingself": "Du bist grad am Sperre vu Dir sälber! Wettsch des wirkli mache?",
        "ipb-confirmhideuser": "Du bist grad am Sperre vun eme Benutzer im Modus „Benutzer verstecke“. Des fiert derzue, ass dr Benutzername in allne Lischten un Logbiecher unterdruckt wird. Wettsch des wirkli mache?",
+       "ipb-confirmaction": "We du dir sicher bisch, das d’s würklech wosch mache, de tue bitte unde ds Fäld «{{int:ipb-confirm}}» achrüzle.",
        "ipb-edit-dropdown": "Sperrgrind bearbeite",
        "ipb-unblock-addr": "„$1“ frejgee",
        "ipb-unblock": "IP-Adräss/Benutzer frejgee",
        "ipb-blocklist": "Alli aktuälle Sperrine aazeige",
-       "ipb-blocklist-contribs": "Benutzerbyytreg fir „$1“",
+       "ipb-blocklist-contribs": "Benutzerbyträg {{GENDER:$1|vom|vor|vo}} $1",
        "unblockip": "IP-Adräss frejgee",
        "unblockiptext": "Mit däm Formular chasch e IP-Adräss oder e Benutzer frejgee.",
        "ipusubmit": "Die Sperri useneh",
        "unblocked": "[[User:$1|$1]] isch frejgee wore",
        "unblocked-range": "D Sperri fir $1 isch ufghobe",
        "unblocked-id": "Sperr-ID $1 isch freijgee wore",
+       "unblocked-ip": "[[Special:Contributions/$1|$1]] isch nümm gsperrt.",
        "blocklist": "Gsperrti Benutzer",
        "ipblocklist": "Gsperrti Benutzer",
        "ipblocklist-legend": "Suech no eme gsperrte Benutzer",
        "change-blocklink": "Sperri ändere",
        "contribslink": "Byträg",
        "emaillink": "E-Mail abschicke",
-       "autoblocker": "Automatischi Sperri, wel Du e gmeinsami IP-Adräss mit [[User:$1|Benutzer:$1]] bruchsch. Grund: „$2“.",
+       "autoblocker": "Automatischi Sperrig, wil dyni IP-Adrässe chürzlech vo [[User:$1|Benutzer:$1]] isch ’bruucht worde. Grund für d Sperrig vo $1: «$2».",
        "blocklogpage": "Sperrigs-Protokoll",
        "blocklog-showlog": "Dää Benutzer isch schon emol gsperrt wore. S Sperrine-Logbuech git s do as Referänz:",
        "blocklog-showsuppresslog": "Dää Benutzer isch schon emol gsperrt wore un syyni Bearbeitige sin uusblädet wore. S Uusbländigs-Logbuech git s do as Referänz:",
        "proxyblockreason": "Dyni IP-Adrässe isch gsperrt wore, wel si ne ufige Proxy isch. Bitte kontaktier Dyyn Internet-Provider oder Dyni Systemadministratore un informier si iber des Sicherheitsproblem.",
        "sorbsreason": "D IP-Adräss isch in dr DNSBL vu {{SITENAME}} as uffige PROXY glischtet.",
        "sorbs_create_account_reason": "D IP-Adräss isch in dr DNSBL vu {{SITENAME}} as uffige PROXY glischtet. S Aalege vu neije Benutzer isch nit megli.",
+       "xffblockreason": "En IP-Adrässen im Header «X-Forwarded-For» isch gsperrt worde, entweder dyni oder die vomene Proxy-Server, wo du bruuchsch. Der ursprünglechi Grund für d Sperrig isch: $1",
        "cant-see-hidden-user": "Dr Benutzer, wu Du versuechsch z sperre, isch scho gsperrt un versteckt wore. Du chasch d Sperri vu däm Benutzer nit säh oder bearbeite, wel du s „hideuser“-Rächt nit hesch.",
        "ipbblocked": "Du chasch keini andere Benutzer sperre oder entsperre, wel Du sälber gsperrt bisch",
        "ipbnounblockself": "Du derfsch di nit sälber entsperre",
        "movepagetalktext": "D Diskussionssyte wird mitverschobe, '''ussert:'''\n*Du verschiebsch d Syten i nen andere Namensruum, oder\n*es git scho ne Diskussionssyte mit däm Namen oder\n*du wählsch unte d Option, se nid z verschiebe.\n\nI söttigne Fäll müessti d Diskussionssyten allefalls vo Hand kopiert wärde.",
        "movearticle": "Artikel verschiebe",
        "moveuserpage-warning": "'''Warnig:''' Du bis am Verschiebe vun ere Benutzersyte. Bitte gib Achtig, ass doderdur nume die Syte verschobe wird, aber dr Benutzer '''nit''' umgnännt wird.",
+       "movecategorypage-warning": "<strong>Obacht:</strong> Du bisch e Kategoriesyten am Verschiebe. Bitte dänk dra, das nume die Syte verschobe wird. D Syte, wo zur alte Kategorie ghöre, wärde <strong>nid</strong> i di nöüi Kategorie verschobe.",
        "movenologintext": "Du muesch e regischtrierte Benutzer syy un Di [[Special:UserLogin|aamälde]] go die Syte verschiebe.",
        "movenotallowed": "Du derfsch kei Syte verschiebe.",
        "movenotallowedfile": "Du derfsch kei Dateie verschiebe.",
        "cant-move-user-page": "Du derfsch kei Benutzersyte verschiebe (mit Usnaam vo Untersyte).",
        "cant-move-to-user-page": "Du derfsch kei Syte uf e Benutzersyte verschiebe (mit Usnaam vo Untersyte).",
+       "cant-move-category-page": "Du hesch nid ds Rächt, Kategoriesyte z verschiebe.",
+       "cant-move-to-category-page": "Du hesch nid ds Rächt, e Syte zunere Kategoriesyte z verschiebe.",
        "newtitle": "Zum nöie Titel",
        "move-watch": "Die Syte beobachte",
        "movepagebtn": "Artikel verschiebe",
        "allmessages-prefix": "Präfixfilter:",
        "allmessages-language": "Sproch:",
        "allmessages-filter-submit": "Gang",
+       "allmessages-filter-translate": "Übersetze",
        "thumbnail-more": "Vergreßere",
        "filemissing": "D Datei fäält",
        "thumbnail_error": "Fähler bir Härstellig vo re Vorschou: $1",
+       "thumbnail_error_remote": "Fälermäldig vo $1:\n$2",
        "djvu_page_error": "DjVu-Syte isch uusserhalb vum Sytebereich",
        "djvu_no_xml": "XML-Date chönne für d DjVu-Datei nüt abgruefe werde",
        "thumbnail-temp-create": "D Datei fir di temporär Miniaturaasicht het nit chenne aagleit wäre.",
        "thumbnail-dest-create": "D Miniaturaasicht het nit chenne an däm Ort gspycheret wäre.",
        "thumbnail_invalid_params": "Ungültigs Thumbnail-Parameter",
+       "thumbnail_toobigimagearea": "Dateiabmässig überschrytet $1",
        "thumbnail_dest_directory": "S Ziilverzeichnis cha nüt erstellt werde",
        "thumbnail_image-type": "Bildtyp wird nit unterstitzt",
        "thumbnail_gd-library": "Uuvollständigi GD-Library-Konfiguration: Funktion $1 fählt",
        "thumbnail_image-missing": "Datei fählt schyns: $1",
+       "thumbnail_image-failure-limit": "Ir letsti het’s z vil misslungnigi Versüech ’gä (mindistens $1), das Vorschoubild z rendere. Bitte versuech’s später wider.",
        "import": "Sytene importiere",
-       "importinterwiki": "Transwiki-Import",
-       "import-interwiki-text": "Wääl e Wiki un e Syte zum Importiere us.\nS Datum vo dr Bearbeitig un dr Benutzername blybe erhalte.\nAlli Transwiki-Import-Aktione werde im [[Special:Log/import|Import-Logbuech]] protokolliert.",
+       "importinterwiki": "Us emnen andere Wiki importiere",
+       "import-interwiki-text": "Wääl e Wiki un e Syte zum Importiere us.\nS Datum vo de Bearbeitige un d Benutzernäme blybe erhalte.\nAlli Import-Aktione us anderne Wiki werde im [[Special:Log/import|Import-Logbuech]] protokolliert.",
+       "import-interwiki-sourcewiki": "Ursprünglechs Wiki:",
+       "import-interwiki-sourcepage": "Ursprünglechi Syte:",
        "import-interwiki-history": "Alli früeneri Versione vo dere Syte importiere",
        "import-interwiki-templates": "Mit allene Vorlage",
        "import-interwiki-submit": "Import",
+       "import-mapping-default": "Zu de Standard-Orten importiere",
+       "import-mapping-namespace": "In e Namensruum importiere:",
+       "import-mapping-subpage": "Als Undersyte vor folgende Syten importiere:",
        "import-upload-filename": "Dateiname:",
        "import-comment": "Grund:",
        "importtext": "Datei iber d Spezialsyte [[Special:Export|Exportfunktion]] us em Quellwiki exportiere.\nDie uf em lokale Rächner spychere un derno do uffelade.",
        "importcantopen": "D Importdatei het nit chenne ufgmacht wäre.",
        "importbadinterwiki": "Falscher Interwiki-Link",
        "importsuccess": "Dr Import isch abgschlosse.",
-       "importnosources": "Für de Transwiki-Import sin kei Quelle definiert worde. Wege dem isch s direkte Ufelade vo Gschichtsversione gsperrt.",
+       "importnosources": "Es isch kes Wiki a’gä worde, wo druus söll importiert wärde, u ds diräkten Ufelade vo Versionsgschichten isch deaktiviert.",
        "importnofile": "Es isch kei Importdatei ufeglade worde.",
        "importuploaderrorsize": "S Ufelade vo dr Importdatei isch misslunge. D Datei isch grösser als erlaubt isch.",
        "importuploaderrorpartial": "S Ufelade vo dr Importdatei isch misslunge. D Datei het numme zum Deil chönne ufeglade werde.",
        "importuploaderrortemp": "S Ufelade vo dr Importdatei isch misslunge. E temporärs Verzeichnis fäält.",
        "import-parse-failure": "Fääler bim XML-Import:",
        "import-noarticle": "Du hesch kei Syte zum importiere aagää!",
-       "import-nonewrevisions": "Es sin scho alli früeneri Versione importiert worde.",
+       "import-nonewrevisions": "Es sy kener Versionen importiert worde (entweder sy si scho alli da gsy oder es het e Fähler ’gä).",
        "xml-error-string": "$1 Zeile $2, Spalte $3, (Byte $4): $5",
        "import-upload": "XML-Date ufelade",
        "import-token-mismatch": "D Sitzigsdate sin verlore gange. Bitte versuech es noo emool.",
        "import-error-create": "Die Syte „$1“ isch nit importiert worde, wyl du nit dezue berächtigt bisch, si z erstelle.",
        "import-error-interwiki": "D Syte „$1“ isch nit importiert wore, wel dr Name vun ere fir externi Link (Interwiki) reserviert isch.",
        "import-error-special": "D Syte „$1“ isch nit importiert wore, wel si zuen eme bsundere Namensruum ghert, wu kei Syte megli sin.",
-       "import-error-invalid": "Syte „$1“ isch nit importiert wore, wel dr Name vun ere nit giltig isch.",
+       "import-error-invalid": "D Syte «$1» isch nid importiert worde, wil der Name, wo si hätt söllen übercho, i däm Wiki nid gültig isch.",
        "import-error-unserialize": "D Version $2 vu dr Syte „$1“ het nit chenne deserialisiert wäre. D Version isch fir d Verwändig vum Inhaltsmodäll $3 gmäldet wore, wu as $4 serialisiert isch.",
+       "import-error-bad-location": "D Version $2 mit em Inhaltsmodäll $3 lat sech i däm Wiki nid under «$1» la spychere, wil das Inhaltsmodäll uf dere Syte nid understützt isch.",
        "import-options-wrong": "Falschi {{PLURAL:$2|Option|Optione}}: <nowiki>$1</nowiki>",
        "import-rootpage-invalid": "Dää Stammsytename isch nit giltig.",
        "import-rootpage-nosubpage": "Im Namensruum „$1“ vu dr Stammsyte sin kei Untersyte erlaubt.",
        "importlogpage": "Import-Logbuech",
        "importlogpagetext": "Adminischtrativer Import vo Sytene mit Versionsgschichte us anderi Wikis.",
-       "import-logentry-upload-detail": "$1 {{PLURAL:$1|Vérsion|Vérsiona}}",
-       "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|Version|Versione}} vo $2",
+       "import-logentry-upload-detail": "$1 {{PLURAL:$1|Version|Versionen}} importiert",
+       "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|Version|Versione}} us $2 importiert",
        "javascripttest": "JavaScript-Tescht",
        "javascripttest-pagetext-noframework": "Die Syte isch reserviert fir JavaSkript-Tescht.",
        "javascripttest-pagetext-unknownframework": "Nit bekannt Framework „$1“.",
+       "javascripttest-pagetext-unknownaction": "Unbekannti Aktion «$1».",
        "javascripttest-pagetext-frameworks": "Bitte eis vu däne Framework uuswehle: $1",
        "javascripttest-pagetext-skins": "Wehl e Benutzeroberflechi uus fir d Durfierig vu dr Tescht:",
        "javascripttest-qunit-intro": "Lueg d [$1 Dokumentation zue Tescht] uf mediawiki.org",
        "tooltip-feed-atom": "Atom-Feed für selli Syte",
        "tooltip-t-contributions": "Lischte vo de Byträg vo däm Benutzer",
        "tooltip-t-emailuser": "Schick däm Benutzer e E-Bost",
+       "tooltip-t-info": "Meh Informationen über die Syte",
        "tooltip-t-upload": "Dateien ufelade",
        "tooltip-t-specialpages": "Lischte vo allne Spezialsyte",
        "tooltip-t-print": "E Version vo dere Syte zum Usdrugge.",
        "pageinfo-length": "Sytelengi (in Byte)",
        "pageinfo-article-id": "Syten-ID",
        "pageinfo-language": "Syteninhaltssproch",
+       "pageinfo-content-model": "Syteninhaltsmodäll",
        "pageinfo-robot-policy": "Indexierig dur Suechmaschine",
        "pageinfo-robot-index": "Erlaubt",
        "pageinfo-robot-noindex": "Nit erlaubt",
        "pageinfo-watchers": "Aazahl vu Beobachter",
+       "pageinfo-visiting-watchers": "Azahl vo dene, wo d Syte beobachten und di letste Bearbeitige hei agluegt",
        "pageinfo-few-watchers": "Weniger wie {{PLURAL:$1|ei|$1}} Beobachter",
+       "pageinfo-few-visiting-watchers": "Es chönnt öpper gä oder ou nid, wo beobachtet und di letste Bearbeitigen am aluegen isch",
        "pageinfo-redirects-name": "Zahl vu dr Wyterleitige zue däre Syte",
        "pageinfo-subpages-name": "Untersyte vu däre Syte",
        "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|Wyterleitig|Wyterleitige}}; $3 {{PLURAL:$3|anderi Syte}})",
        "pageinfo-protect-cascading-yes": "Jo",
        "pageinfo-protect-cascading-from": "Syte mit Kaskadeschutz vu",
        "pageinfo-category-info": "Kategoriinformatione",
+       "pageinfo-category-total": "Gsamti Azahl Mitglider",
        "pageinfo-category-pages": "Aazahl vu dr Syte",
        "pageinfo-category-subcats": "Aazahl vu dr Unterkategorie",
        "pageinfo-category-files": "Aazahl vu dr Dateie",
        "markedaspatrollederrortext": "Du muesch e Syteänderig uswehle.",
        "markedaspatrollederror-noautopatrol": "S isch nit erlaubt, eigeni Bearbeitige as kontrolliert z markiere.",
        "markedaspatrollednotify": "Die Änderig an $1 isch as kontrolliert markiert wore.",
+       "markedaspatrollederrornotify": "D Markierig als kontrolliert isch nid glunge.",
        "patrol-log-page": "Kontroll-Logbuech",
        "patrol-log-header": "Des isch s Kontroll-Logbuech.",
        "log-show-hide-patrol": "Kontroll-Logbuech $1",
+       "log-show-hide-tag": "Markierigs-Logbuech $1",
        "deletedrevision": "alti Version: $1",
        "filedeleteerror-short": "Fähler bi dr Datei-Leschig: $1",
        "filedeleteerror-long": "Bi dr Datei-Leschig sin Fähler feschtgstellt wore:\n\n$1",
        "file-nohires": "Kei höcheri Uflösig verfüegbar.",
        "svg-long-desc": "SVG-Datei, Basisgrößi: $1 × $2 Pixel, Dateigrößi: $3",
        "svg-long-desc-animated": "Animierti SVG-Datei, Basisgreßi $1 × $2 Pixel, Dateigreßi: $3",
+       "svg-long-error": "Ungültigi SVG-Datei: $1",
        "show-big-image": "Originaldatei",
        "show-big-image-preview": "Greßi vu däre Vorschau: $1.",
        "show-big-image-other": "Wyteri {{PLURAL:$2|Ufflösig|Ufflösige}}: $1.",
        "newimages-summary": "Die Spezialsyte zeigt di zletscht uffegladene Dateie aa.",
        "newimages-legend": "Filter",
        "newimages-label": "Dateiname (oder e Teil devu):",
+       "newimages-showbots": "Ufelade vo Bots azeige",
        "noimages": "Kei Dateie gfunde.",
        "ilsubmit": "Suech",
        "bydate": "noch Datum",
        "minutes": "{{PLURAL:$1|1 Minut|$1 Minute}}",
        "hours": "{{PLURAL:$1|1 Stund|$1 Stunde}}",
        "days": "{{PLURAL:$1|1 Tag|$1 Täg}}",
+       "weeks": "{{PLURAL:$1|$1 Wuche}}",
+       "months": "{{PLURAL:$1|$1 Monet|$1 Mönet}}",
+       "years": "{{PLURAL:$1|$1 Jahr}}",
        "ago": "vor $1",
+       "just-now": "grad ersch",
+       "hours-ago": "vor {{PLURAL:$1|eire Stund|$1 Stund}}",
+       "minutes-ago": "vor {{PLURAL:$1|eire Minute|$1 Minute}}",
+       "seconds-ago": "vor {{PLURAL:$1|eire Sekunde|$1 Sekunde}}",
+       "monday-at": "Mäntig um $1",
+       "tuesday-at": "Zystig um $1",
+       "wednesday-at": "Midwuch um $1",
+       "thursday-at": "Donnstig um $1",
+       "friday-at": "Frytig um $1",
+       "saturday-at": "Samstig um $1",
        "sunday-at": "Sunntig am $1",
        "yesterday-at": "Geschtert am $1",
        "bad_image_list": "Format:\n\nNume Zylene, wo mit emne * afö, wärde berücksichtigt.\nNach em * mues zersch e Link zuren Unerwünschte Datei cho.\nWyteri Links uf der glyche Zyle wärden als Usnahme behandlet, wo die Datei trotzdäm darff vorcho.",
        "confirm-watch-top": "Tue die Syten uf dyni Beobachtigslischte.",
        "confirm-unwatch-button": "In Ornig",
        "confirm-unwatch-top": "Nim die Syte us dyre Beobachtungslischte furt.",
+       "quotation-marks": "«$1»",
        "imgmultipageprev": "← vorderi Syte",
        "imgmultipagenext": "nächschti Syte →",
        "imgmultigo": "Gang!",
        "autosumm-replace": "Dr Inhalt vo dr Syte isch ersetzt worde: '$1'",
        "autoredircomment": "E Wyterleitig uf [[$1]] isch erstellt worde",
        "autosumm-new": "Het Syte aagleit mit '$1'",
+       "autosumm-newblank": "Lääri Syten agleit",
        "lag-warn-normal": "Bearbeitige in dr letschte {{PLURAL:$1|Sekund|$1 Sekunde}} wäre in däre Lischt nonig aazeigt.",
        "lag-warn-high": "Wäg ere hoche Datebank-Uslaschtig wäre d Bearbeitige in dr letschte {{PLURAL:$1|Sekund|$1 Sekunde}} in däre Lischt nonig aazeigt.",
        "watchlistedit-normal-title": "D Beobachtigslischt bearbeite",
        "watchlistedit-raw-done": "Dyni Beobachtigslischt isch aktualisiert worde.",
        "watchlistedit-raw-added": "{{PLURAL:$1|ei Ytrag isch|$1 Yträg sin}} dezuedüü worde:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|ei Ytrag isch|$1 Yträg sin}} usegnoo worde:",
+       "watchlistedit-clear-title": "Beobachtigsliste lääre",
+       "watchlistedit-clear-legend": "Beobachtigsliste lääre",
+       "watchlistedit-clear-explain": "Jeden einzel Ytrag wird us der Beobachtigsliste gstriche",
+       "watchlistedit-clear-titles": "Sytenäme:",
+       "watchlistedit-clear-submit": "Beobachtigsliste lääre (Das lat sech nid la rückgängig mache!)",
+       "watchlistedit-clear-done": "Dyni Beobachtigslisten isch gläärt.",
+       "watchlistedit-clear-removed": "{{PLURAL:$1|$1 Syten isch|$1 Syte sy}} nümm uf der Beobachtigsliste:",
+       "watchlistedit-too-many": "Es het z vil Syte, für se hie azzeige.",
        "watchlisttools-clear": "Beobachtigsliste lääre",
        "watchlisttools-view": "Beobachtigsliste: Änderige",
        "watchlisttools-edit": "normal bearbeite",
        "watchlisttools-raw": "imene große Textfäld bearbeite",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|Diskussion]])",
        "duplicate-defaultsort": "Obacht: Dr Sortierigsschlüssel „$2“ iberschrybt dr vorig brucht Schlüssel „$1“.",
+       "duplicate-displaytitle": "<strong>Obacht:</strong> Der Azeigtitel «$2» überschrybt der früecher Azeigtitel «$1».",
+       "invalid-indicator-name": "<strong>Fähler:</strong> Ds Attribut <code>name</code> vom Sytestatusindikator darf nid läär sy.",
        "version": "Version",
        "version-extensions": "Installierti Erwyterige",
-       "version-skins": "Benutzeroberflechine",
+       "version-skins": "Installierti Benutzeroberflechine",
        "version-specialpages": "Spezialsyte",
        "version-parserhooks": "Parser-Schnittstelle",
        "version-variables": "Variable",
        "version-hook-name": "Schnittstellename",
        "version-hook-subscribedby": "Ufruef vu",
        "version-version": "($1)",
+       "version-no-ext-name": "[kei Name]",
        "version-license": "Lizänz",
        "version-ext-license": "Lizänz",
        "version-ext-colheader-name": "Erwyterig",
+       "version-skin-colheader-name": "Name",
+       "version-ext-colheader-version": "Version",
        "version-ext-colheader-license": "Lizänz",
        "version-ext-colheader-description": "Bschryybig",
        "version-ext-colheader-credits": "Autore",
        "version-entrypoints": "Yygangspunkt-URL",
        "version-entrypoints-header-entrypoint": "Yygangspunkt",
        "version-entrypoints-header-url": "URL",
+       "version-libraries": "Installierti Bibliotheke",
+       "version-libraries-library": "Bibliothek",
+       "version-libraries-version": "Version",
+       "version-libraries-license": "Lizänz",
+       "version-libraries-description": "Beschrybig",
+       "version-libraries-authors": "Autor/inne",
        "redirect": "Wyterleitig uf Benutzersyte, Syte, Syteversion oder Datei",
        "redirect-legend": "Wyterleitig uf e Datei oder e Syte",
        "redirect-summary": "Die Spezialsyte leitet wyter uf e Benutzersyte (numerischi Benutzerkännig aagee), Syte (Sytekännig aagee), Syteversion (Versionskännig aagee) oder Datei (Dateiname aagee). Benutzig: [[{{#Special:Redirect}}/user/101]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]] oder [[{{#Special:Redirect}}/file/Example.jpg]].",
        "tags-tag": "Markierigsname",
        "tags-display-header": "Benännig uf dr Änderigslischte",
        "tags-description-header": "Vollständigi Bschryybig",
+       "tags-active-header": "Aktiv?",
        "tags-hitcount-header": "Markierti Änderige",
+       "tags-actions-header": "Aktione",
        "tags-active-yes": "Jo",
        "tags-active-no": "Nei",
+       "tags-source-extension": "Von eren Erwyterig definiert",
+       "tags-source-manual": "Manuell vo Benutzer/innen oder Bots ygsetzt",
+       "tags-source-none": "Nümm ’bruucht",
        "tags-edit": "bearbeite",
+       "tags-delete": "lösche",
+       "tags-activate": "aktiviere",
+       "tags-deactivate": "deaktiviere",
        "tags-hitcount": "$1 {{PLURAL:$1|Änderig|Änderige}}",
+       "tags-manage-no-permission": "Du hesch nid ds Rächt, Änderigsmarkierige z verwalte.",
+       "tags-create-heading": "Nöüi Markierig alege",
+       "tags-create-explanation": "Standardmäässig wärde nöüi Markierige zur Verfüegig gstellt, so das se Benutzer/innen und Bots chöü bruuche.",
+       "tags-create-tag-name": "Markierigsname:",
+       "tags-create-reason": "Grund:",
+       "tags-create-submit": "Alege",
+       "tags-create-no-name": "Du muesch e Markierigsnamen agä.",
+       "tags-create-invalid-chars": "Markierigsnäme dörffe kei Kommas (<code>,</code>) oder Schregstriche (<code>/</code>) ha.",
+       "tags-create-invalid-title-chars": "Markierigsnäme dörffe kei Zeiche ha, wo me nid i Sytenäme cha bruuche.",
+       "tags-create-already-exists": "D Markierig «$1» git’s scho.",
+       "tags-create-warnings-above": "Bim Versuech, d Markierig «$1» azlege, het’s di {{PLURAL:$2|folgendi Warnig|folgende Warnige}} ’gä:",
+       "tags-create-warnings-below": "Möchtsch mit em Alege vor Markierig wytermache?",
+       "tags-delete-title": "Markierig lösche",
+       "tags-delete-explanation-initial": "Du bisch drann, d Markierig «$1» us der Datebank z lösche.",
+       "tags-delete-explanation-in-use": "Si wird vo {{PLURAL:$2|eire Version oder eim Logbuechytrag|allne $2 Versionen oder Logbuechyträg}} furtgnoh, wo momentan dermit markiert sy.",
+       "tags-delete-explanation-warning": "Die Aktion isch <strong>für immer</strong> und <strong>lat sech nid la rückgängig mache</strong>, nid emal vo Datebank-Administrator/inne. Bis dir ganz sicher, das es die Markierig isch, wo du wosch lösche.",
+       "tags-delete-explanation-active": "<strong>D Markierig «$1» isch immer no aktiv und blybt ou zuekünftig im Ysatz.</strong> We du das wosch verhindere, de gang die Markierig dört ga deaktiviere, wo si ygsetzt isch.",
+       "tags-delete-reason": "Grund:",
+       "tags-delete-submit": "Markierig für immer lösche",
+       "tags-delete-not-allowed": "Von eren Erwyterig definierti Markierige lö sech nid la lösche, ussert d Erwyterig erloubt’s usdrücklech.",
+       "tags-delete-not-found": "D Markierig «$1» git’s nid.",
+       "tags-delete-too-many-uses": "D Markierig «$1» isch by meh als {{PLURAL:$2|eire Version|$2 Versionen}} ygsetzt. Drum lat si sech nid la lösche.",
+       "tags-delete-warnings-after-delete": "D Markierig «$1» isch erfolgrych glöscht, aber es het di {{PLURAL:$2|folgendi Warnig|folgende Warnige}} ’gä:",
+       "tags-activate-title": "Markierig aktiviere",
+       "tags-activate-question": "Du bisch drann, d Markierig «$1» z aktiviere.",
+       "tags-activate-reason": "Grund:",
+       "tags-activate-not-allowed": "D Markierig «$1» lat sech nid la aktiviere.",
+       "tags-activate-not-found": "D Markierig «$1» git’s nid.",
+       "tags-activate-submit": "Aktiviere",
+       "tags-deactivate-title": "Markierig deaktiviere",
+       "tags-deactivate-question": "Du bisch drann, d Markierig «$1» z deaktiviere.",
+       "tags-deactivate-reason": "Grund:",
+       "tags-deactivate-not-allowed": "D Markierig «$1» lat sech nid la deaktiviere.",
+       "tags-deactivate-submit": "Deaktiviere",
+       "tags-apply-no-permission": "Du hesch nid ds Rächt, Änderige mit Änderigsmarkierige z mache.",
+       "tags-apply-not-allowed-one": "D Markierig «$1» darf me nid vo Hand ysetze.",
+       "tags-apply-not-allowed-multi": "Di {{PLURAL:$2|folgendi Markierig|folgende Markierige}} darf me nid vo Hand ysetze: $1",
+       "tags-update-no-permission": "Du hesch nid ds Rächt, Änderigsmarkierige by einzelne Versionen oder Logbuechyträg yzsetzen oder furtznäh.",
+       "tags-update-add-not-allowed-one": "D Markierig «$1» darf me nid vo Hand ysetze.",
+       "tags-update-add-not-allowed-multi": "Di {{PLURAL:$2|folgendi Markierig|folgende Markierige}} darf me nid vo Hand derzuetue: $1",
+       "tags-update-remove-not-allowed-one": "D Markierig «$1» darf me nid furtnäh.",
+       "tags-update-remove-not-allowed-multi": "Di {{PLURAL:$2|folgendi Markierig|folgende Markierige}} darf me nid vo Hand furtnäh: $1",
+       "tags-edit-title": "Markierige bearbeite",
+       "tags-edit-manage-link": "Markierige verwalte",
+       "tags-edit-revision-selected": "{{PLURAL:$1|Usgwählti Version|Usgwählti Versione}} vo [[:$2]]:",
+       "tags-edit-logentry-selected": "{{PLURAL:$1|Usgwählte Logbuechytrag|Usgwählti Logbuechyträg}}:",
+       "tags-edit-revision-legend": "Markierige by {{PLURAL:$1|dere Versione|allne $1 Versione}} derzuetue oder furtnäh.",
+       "tags-edit-logentry-legend": "Markierige by {{PLURAL:$1|däm Logbuechytrag|allne $1 Logbuechyträg}} derzuetue oder furtnäh.",
+       "tags-edit-existing-tags": "Ygsetzti Markierige:",
+       "tags-edit-existing-tags-none": "''Keini''",
+       "tags-edit-new-tags": "Nöüi Markierige:",
+       "tags-edit-add": "Die Markierige derzuetue:",
+       "tags-edit-remove": "Die Markierige furtnäh:",
+       "tags-edit-remove-all-tags": "(alli Markierige furtnäh)",
+       "tags-edit-chosen-placeholder": "Markierigen ussueche",
+       "tags-edit-chosen-no-results": "Es git ke Markierige, wo passe",
+       "tags-edit-reason": "Grund:",
+       "tags-edit-revision-submit": "Änderige by {{PLURAL:$1|dere Version|$1 Versionen}} usfüere",
+       "tags-edit-logentry-submit": "Änderige by {{PLURAL:$1|däm Logbuechytrag|$1 Logbuechyträg}} usfüere",
+       "tags-edit-success": "D Änderige sy erfolgrych usgfüert.",
+       "tags-edit-failure": "D Änderige hei sech nid la usfüere: $1",
+       "tags-edit-nooldid-title": "Ungültigi Zilversion",
+       "tags-edit-nooldid-text": "Entweder hesch du kei Zilversion a’gä, für die Funktion dermit uszfüere, oder es git di a’gänigi Zilversion nid.",
+       "tags-edit-none-selected": "Bitte suech mindistens ei Markierig uus zum Derzuetue oder Furtnäh.",
        "comparepages": "Syte verglyyche",
        "compare-page1": "Syte 1",
        "compare-page2": "Syte 2",
        "compare-revision-not-exists": "Die Version, wu Du aagee hesch, git s nit.",
        "dberr-problems": "Excusez! Die Seite het im Momänt tächnischi Schwirigkeite.",
        "dberr-again": "Wart e paar Minute un lad derno nej.",
-       "dberr-info": "(Cha kei Verbindig zum Datebank-Server härstelle: $1)",
-       "dberr-info-hidden": "(Cha kei Verbindig zum Datebank-Server härstelle)",
+       "dberr-info": "(Kei Zuegriff uf d Datebank: $1)",
+       "dberr-info-hidden": "(Kei Zuegriff uf d Datebank)",
        "dberr-usegoogle": "Du chenntsch in dr Zwischezyt mit Google sueche.",
        "dberr-outofdate": "Obacht: Dr Suechindex vu unsere Syte chennt veraltet syy.",
        "dberr-cachederror": "Des isch e Kopii vum Cache vu dr Syte, wu Du aagforderet hesch, un chennt veraltet syy.",
        "htmlform-no": "Nei",
        "htmlform-yes": "Jo",
        "htmlform-chosen-placeholder": "Wehl en Option",
+       "htmlform-cloner-create": "Wyteri derzuetue",
+       "htmlform-cloner-delete": "Furtnäh",
+       "htmlform-cloner-required": "Es bruucht mindistens ei Wärt.",
+       "htmlform-title-badnamespace": "[[:$1]] isch nid im Namensruum «{{ns:$2}}».",
+       "htmlform-title-not-creatable": "«$1» isch kei Sytename, wo sech lat la alege",
+       "htmlform-title-not-exists": "[[:$1]] git’s nid.",
+       "htmlform-user-not-exists": "<strong>$1</strong> git’s nid.",
+       "htmlform-user-not-valid": "<strong>$1</strong> isch ke gültige Name.",
        "sqlite-has-fts": "$1 mit Unterstitzig vu dr Volltextsuechi",
        "sqlite-no-fts": "$1 ohni Unterstitzig vu dr Volltextsuechi",
        "logentry-delete-delete": "{{GENDER:$2|Dr|D|}} $1 het d Syte $3 glöscht",
-       "logentry-delete-restore": "$1 het d Syte $3 wiiderhergstellt",
-       "logentry-delete-event": "$1 het die Sichtbarkeit {{PLURAL:$5|vumene Logbuechyytrag|vo $5 Logbuechyyträg}} uff $3: $4 gänderet",
-       "logentry-delete-revision": "$1 het die Sichtbarkeit {{PLURAL:$5|vunere Version|vo $5 Versione}} uff $3: $4 gänderet",
-       "logentry-delete-event-legacy": "$1 het d Sichtbarkeit vo Logbuechyyträg uff $3 gänderet",
-       "logentry-delete-revision-legacy": "$1 het d Sichtbarkeit vo Versione uff $3 gänderet",
-       "logentry-suppress-delete": "$1 het d Syte $3 unterdrückt",
-       "logentry-suppress-event": "$1 het diskret d Sichtbarkeit {{PLURAL:$5|vumene Logbuechyytrag|vo $5 Logbuechyyträg}} uff $3: $4 gänderet",
-       "logentry-suppress-revision": "$1 het diskret d Sichtbarkeit {{PLURAL:$5|vunere Version|vo $5 Versione}} uff $3: $4 gänderet",
-       "logentry-suppress-event-legacy": "$1 het d Sichtbarkeit vo Logbuechyyträg diskret uff $3 gänderet",
-       "logentry-suppress-revision-legacy": "$1 het diskret d Sichtbarkeit vo Versione uff $3 gänderet",
+       "logentry-delete-restore": "{{GENDER:$2|Der $1|D $1|$1}} het d Syte $3 wider härgstellt",
+       "logentry-delete-event": "{{GENDER:$2|Der $1|D $1|$1}} het d Sichtbarkeit {{PLURAL:$5|vumene Logbuechyytrag|vo $5 Logbuechyyträg}} gänderet uff $3: $4",
+       "logentry-delete-revision": "{{GENDER:$2|Der $1|D $1|$1}} het d Sichtbarkeit {{PLURAL:$5|vunere Version|vo $5 Versione}} gänderet uff $3: $4",
+       "logentry-delete-event-legacy": "{{GENDER:$2|Der $1|D $1|$1}} het d Sichtbarkeit vo Logbuechyyträg uff $3 gänderet",
+       "logentry-delete-revision-legacy": "{{GENDER:$2|Der $1|D $1|$1}} het d Sichtbarkeit vo Versione uff $3 gänderet",
+       "logentry-suppress-delete": "{{GENDER:$2|Der $1|D $1|$1}} het d Syte $3 unterdrückt",
+       "logentry-suppress-event": "{{GENDER:$2|Der $1|D $1|$1}} het diskret d Sichtbarkeit {{PLURAL:$5|vumene Logbuechyytrag|vo $5 Logbuechyyträg}} gänderet uff $3: $4",
+       "logentry-suppress-revision": "{{GENDER:$2|Der $1|D $1|$1}} het diskret d Sichtbarkeit {{PLURAL:$5|vunere Version|vo $5 Versione}} gänderet uff $3: $4",
+       "logentry-suppress-event-legacy": "{{GENDER:$2|Der $1|D $1|$1}} het d Sichtbarkeit vo Logbuechyyträg diskret uff $3 gänderet",
+       "logentry-suppress-revision-legacy": "{{GENDER:$2|Der $1|D $1|$1}} het diskret d Sichtbarkeit vo Versione uff $3 gänderet",
        "revdelete-content-hid": "Inhalt versteckt",
        "revdelete-summary-hid": "Bearbeitigszämmefassig versteckt",
        "revdelete-uname-hid": "Benutzername versteckt",
        "revdelete-uname-unhid": "Benutzername freigee",
        "revdelete-restricted": "Yyschränkige gälte au fir Ammanne",
        "revdelete-unrestricted": "Yyschränkige fir Ammanne ufghobe",
+       "logentry-block-block": "{{GENDER:$2|Der $1|D $1|$1}} het {{GENDER:$4|der $3|d $3|$3}} bis $5 gsperrt $6",
+       "logentry-block-unblock": "{{GENDER:$2|Der $1|D $1|$1}} het {{GENDER:$4|der $3|d $3|$3}} entsperrt",
+       "logentry-block-reblock": "{{GENDER:$2|Der $1|D $1|$1}} het {{GENDER:$4|der $3|d $3|$3}} bis $5 gsperrt $6",
+       "logentry-suppress-block": "{{GENDER:$2|Der $1|D $1|$1}} het {{GENDER:$4|der $3|d $3|$3}} bis $5 gsperrt $6",
+       "logentry-suppress-reblock": "{{GENDER:$2|Der $1|D $1|$1}} het d Sperrystellige {{GENDER:$4|füre $3|für d $3|für $3}} bis $5 g’änderet $6",
+       "logentry-import-upload": "{{GENDER:$2|Der $1|D $1|$1}} het $3 importiert per Datei-Ufelade",
+       "logentry-import-interwiki": "{{GENDER:$2|Der $1|D $1|$1}} het $3 vomenen andere Wiki importiert",
+       "logentry-merge-merge": "{{GENDER:$2|Der $1|D $1|$1}} het $3 i $4 zämegfüert (Versione bis $5)",
        "logentry-move-move": "{{GENDER:$2|Dr|D}} $1 het d Seite $3 uf $4 verschobe",
-       "logentry-move-move-noredirect": "$1 het d Syte $3 nooch $4 verschobe ohni e Wyterleitig aazlege",
-       "logentry-move-move_redir": "$1 het d Syte $3 nooch $4 verschobe un het debi e Wyterleitig überschrybe",
-       "logentry-move-move_redir-noredirect": "$1 het d Syte $3 nooch $4 verschobe un het debi e Wyterleitig überschrybe, ohni sälber eini aazlege",
-       "logentry-patrol-patrol": "$1 het Version $4 vo Syte $3 als kontrolliert markiert",
-       "logentry-patrol-patrol-auto": "$1 het Version $4 vo Syte $3 automatisch als kontrolliert markiert",
-       "logentry-newusers-newusers": "Benutzerkonto $1 isch aagleit wore.",
+       "logentry-move-move-noredirect": "{{GENDER:$2|Der $1|D $1|$1}} het d Syte $3 nooch $4 verschobe ohni e Wyterleitig aazlege",
+       "logentry-move-move_redir": "{{GENDER:$2|Der $1|D $1|$1}} het d Syte $3 nooch $4 verschobe un het debi e Wyterleitig überschrybe",
+       "logentry-move-move_redir-noredirect": "{{GENDER:$2|Der $1|D $1|$1}} het d Syte $3 nooch $4 verschobe un het debi e Wyterleitig überschrybe, ohni sälber eini aazlege",
+       "logentry-patrol-patrol": "{{GENDER:$2|Der $1|D $1|$1}} het Version $4 vo Syte $3 als kontrolliert markiert",
+       "logentry-patrol-patrol-auto": "{{GENDER:$2|Der $1|D $1|$1}} het Version $4 vor Syte $3 automatisch als kontrolliert markiert",
+       "logentry-newusers-newusers": "{{GENDER:$2|Benutzerkonto}} $1 isch aagleit wore.",
        "logentry-newusers-create": "Benutzerkonto $1 {{GENDER:$2|isch aagleit wore}}",
-       "logentry-newusers-create2": "Benutzerkonto $3 isch aalgeit wore vu $1",
-       "logentry-newusers-autocreate": "S Benutzerchonto $1 isch automatisch erstellt worde",
-       "logentry-rights-rights": "$1 het d Gruppezuegherigkeit fir $3 vu $4 uf $5 gänderet",
-       "logentry-rights-rights-legacy": "$1 het d Gruppezuegherigkeit fir $3 gänderet",
-       "logentry-rights-autopromote": "$1 isch automatisch vu $4 zue $5 zuegordnet wore",
+       "logentry-newusers-create2": "{{GENDER:$2|Der $1|D $1|$1}} het ds Benutzerkonto $3 agleit",
+       "logentry-newusers-byemail": "{{GENDER:$2|Der $1|D $1|$1}} het ds Benutzerkonto $3 agleit und ds Passwort isch per E-Mail verschickt worde",
+       "logentry-newusers-autocreate": "Ds {{GENDER:$2|Benutzerkonto}} $1 isch automatisch agleit worde",
+       "logentry-protect-move_prot": "{{GENDER:$2|Der $1|D $1|$1}} het d Schutzystellige vo $4 uf $3 verschobe",
+       "logentry-rights-rights": "{{GENDER:$2|Der $1|D $1|$1}} het d Gruppezuegherigkeit fir $3 vu $4 uf $5 gänderet",
+       "logentry-rights-rights-legacy": "{{GENDER:$2|Der $1|D $1|$1}} het d Gruppezuegherigkeit fir $3 gänderet",
+       "logentry-rights-autopromote": "{{GENDER:$2|Der $1|D $1|$1}} isch automatisch vo $4 uf $5 beförderet worde",
        "logentry-upload-upload": "{{GENDER:$2|Dr|D}} $1 het $3 uffeglade",
+       "logentry-upload-overwrite": "{{GENDER:$2|Der $1|D $1|$1}} het e nöüi Version vo $3 ufeglade",
+       "logentry-upload-revert": "{{GENDER:$2|Der $1|D $1|$1}} het $3 ufeglade",
+       "log-name-managetags": "Markierigsverwaltigs-Logbuech",
+       "log-description-managetags": "Uf dere Syte het’s Verwaltigsufgabe für [[Special:Tags|Markierige]]. Ds Logbuech zeigt numen Aktione, wo manuell von ere/emen Administrator/in sy usgfüert worde. D Wiki-Software cha Markierigen alegen oder lösche, ohni das es i däm Logbuech verzeichnet wird.",
+       "logentry-managetags-create": "{{GENDER:$2|Der $1|D $1|$1}} het d Markierig «$4» agleit",
+       "logentry-managetags-delete": "{{GENDER:$2|Der $1|D $1|$1}} het d Markierig «$4» glöscht (us {{PLURAL:$5|eire Version oder eim Logbuechytrag|$5 Versionen oder Logbuechyträg}} furtgnoh)",
+       "logentry-managetags-activate": "{{GENDER:$2|Der $1|D $1|$1}} het d Markierig $4 zum Gebruuch vo Benutzer/innen oder Bots aktiviert",
+       "logentry-managetags-deactivate": "{{GENDER:$2|Der $1|D $1|$1}} het d Markierig $4 zum Gebruuch vo Benutzer/innen oder Bots deaktiviert",
+       "log-name-tag": "Markierigs-Logbuech",
+       "log-description-tag": "Die Syte zeigt [[Special:Tags|Markierige]], wo by einzelne Versionen oder Logbuechyträg äxtra sy derzueta oder furtgnoh worde. Markierige als Teil von ere Bearbeitig, Löschig oder ähnlechen Aktion sy nid ufgfüert.",
+       "logentry-tag-update-add-revision": "{{GENDER:$2|Der $1|D $1|$1}} het d {{PLURAL:$7|Markierig|Markierige}} $6 zur Version $4 vor Syte $3 derzueta.",
+       "logentry-tag-update-add-logentry": "{{GENDER:$2|Der $1|D $1|$1}} het d {{PLURAL:$7|Markierig|Markierige}} $6 zum Logbuechytrag $5 vor Syte $3 derzueta.",
+       "logentry-tag-update-remove-revision": "{{GENDER:$2|Der $1|D $1|$1}} het d {{PLURAL:$9|Markierig|Markierige}} $8 vor Version $4 vor Syte $3 furtgnoh.",
+       "logentry-tag-update-remove-logentry": "{{GENDER:$2|Der $1|D $1|$1}} het d {{PLURAL:$9|Markierig|Markierige}} $8 vom Logbuechytrag $5 vor Syte $3 furtgnoh.",
+       "logentry-tag-update-revision": "{{GENDER:$2|Der $1|D $1|$1}} het d Markierige bir Version $4 vor Syte $3 aktualisiert ({{PLURAL:$7|eini|$6}} derzueta, {{PLURAL:$9|eini|$8}} furtgnoh).",
+       "logentry-tag-update-logentry": "{{GENDER:$2|Der $1|D $1|$1}} het d Markierige bim Logbuechytrag $5 vor Syte $3 aktualisiert ({{PLURAL:$7|eini|$6}} derzueta, {{PLURAL:$9|eini|$8}} furtgnoh).",
        "rightsnone": "(keini)",
        "revdelete-summary": "Zämmefassig",
        "feedback-adding": "Ruggmäldig wird zur Syte dezuegfiegt …",
+       "feedback-back": "Zrügg",
        "feedback-bugcheck": "Schen! Bitte iberprief no, eb s sich doderby nit um e scho [$1 bekannte Fähler] handlet.",
        "feedback-bugnew": "Ich haa s iberprieft. Dr nej Fähler mälde.",
        "feedback-bugornote": "Wän Du detailliert e tächnisch Probläm witt bschryybe, no mäld bitte [$1 ne Fähler].\nSunscht chasch au s eifach Formular unte nutze. Dyy Kommentar wird, zämme mit Dyym Benutzername un dr Version vu Dyym Webbrowser un em Betribssyschtem, uf dr Syte „[$3 $2]“ zuegfiegt.",
        "feedback-cancel": "Abbräche",
        "feedback-close": "Isch gmacht",
+       "feedback-external-bug-report-button": "E technischi Ufgab yreiche",
+       "feedback-dialog-title": "Rückmäldig gä",
+       "feedback-dialog-intro": "Du chasch ds eifache Formular unde bruuche, für’ne Rückmäldig z gä. Dy Kommentar chunt zäme mit dym Benutzernamen uf d Syte «$1».",
+       "feedback-error-title": "Fähler",
        "feedback-error1": "Fäälermäldig: Unbekannts Ergebniss vo de API",
        "feedback-error2": "Fääler: Bearbeitig fehlgschlo",
        "feedback-error3": "Fäälermäldig: Kei Antwort vo de API",
+       "feedback-error4": "Fähler: Der Fähler het sech nid under em a’gänige Titel la spychere",
        "feedback-message": "Noochricht:",
        "feedback-subject": "Beträff:",
        "feedback-submit": "Ruggmäldig abschigge",
+       "feedback-terms": "I bi mer bewusst, das my User Agent exakti Versionen über my Browser und mys Betribssystem enthaltet und zäme mit der Rückmäldig veröffentlecht wird.",
        "feedback-thanks": "Dankschen. Dyy Ruckmäldig isch uf dr Syte „[$2 $1]“ gspycheret wore.",
        "searchsuggest-search": "Suechi",
        "searchsuggest-containing": "din het s …",
index a0b2391..5e2bc07 100644 (file)
@@ -89,7 +89,8 @@
                        "Fringio",
                        "Aquatech",
                        "Statix64",
-                       "CassiodoroVicinetti"
+                       "CassiodoroVicinetti",
+                       "Bultro"
                ]
        },
        "tog-underline": "Sottolinea i collegamenti:",
        "recentchanges-label-unpatrolled": "Modifica non ancora verificata",
        "recentchanges-label-plusminus": "Variazione della pagina in numero di byte",
        "recentchanges-legend-heading": "'''Legenda:'''",
-       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (vedi [[Special:NewPages|le nuove pagine]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (vedi le [[Special:NewPages|nuove pagine]])",
        "recentchanges-legend-plusminus": "(''±123'')",
        "rcnotefrom": "Di seguito {{PLURAL:$5|è elencata la modifica apportata|sono elencate le modifiche apportate}} a partire da <strong>$3, $4</strong> (mostrate fino a <strong>$1</strong>).",
        "rclistfrom": "Mostra le modifiche apportate a partire da $3 $2",
        "booksources-text": "Di seguito sono elencati alcuni collegamenti verso siti esterni che vendono libri nuovi e usati, attraverso i quali è possibile ottenere maggiori informazioni sul testo cercato.",
        "booksources-invalid-isbn": "L'ISBN inserito sembra non essere valido; verificare che non siano stati commessi errori nel copiarlo dalla fonte originale.",
        "specialloguserlabel": "Azione effettuata da:",
-       "speciallogtitlelabel": "Azione effettuata su:",
+       "speciallogtitlelabel": "Azione effettuata su (titolo della pagina o {{ns:user}}:Nome utente):",
        "log": "Registri",
        "all-logs-page": "Tutti i registri pubblici",
        "alllogstext": "Presentazione unificata di tutti i registri di {{SITENAME}}.\nÈ possibile restringere i criteri di ricerca selezionando il tipo di registro, l'utente che ha eseguito l'azione, e/o la pagina interessata (entrambi i campi sono sensibili al maiuscolo/minuscolo).",
        "logentry-newusers-create2": "L'utenza $3 è stata {{GENDER:$2|creata}} da $1",
        "logentry-newusers-byemail": "L'utenza $3 è stata {{GENDER:$2|creata}} da $1 e la password è stata inviata via email",
        "logentry-newusers-autocreate": "L'utenza $1 è stata {{GENDER:$2|creata}} automaticamente",
+       "logentry-protect-move_prot": "$1 {{GENDER:$2|ha spostato}} le impostazioni di protezione da $4 a $3",
        "logentry-rights-rights": "$1 {{GENDER:$2|ha modificato}} l'appartenenza di $3 dal gruppo $4 al gruppo $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|ha modificato}} l'appartenenza a gruppi di $3",
        "logentry-rights-autopromote": "$1 è {{GENDER:$2|stato promosso|stata promossa|stato/a promosso/a}} automaticamente da $4 a $5",
index 5544747..b220367 100644 (file)
        "tooltip-ca-nstab-main": "Rodyti puslapio turinį",
        "tooltip-ca-nstab-user": "Rodyti naudotojo puslapį",
        "tooltip-ca-nstab-media": "Rodyti media puslapį",
-       "tooltip-ca-nstab-special": "Šis puslapis yra specialusis - jo negalima redaguoti",
+       "tooltip-ca-nstab-special": "Šis puslapis yra specialusis ir jo negalima redaguoti",
        "tooltip-ca-nstab-project": "Rodyti projekto puslapį",
        "tooltip-ca-nstab-image": "Rodyti rinkmenos puslapį",
        "tooltip-ca-nstab-mediawiki": "Rodyti sisteminį pranešimą",
index c9d491e..86b5705 100644 (file)
        "categoriesfrom": "Parādīt kategorijas sākot ar:",
        "special-categories-sort-count": "kārtot pēc skaita",
        "special-categories-sort-abc": "kārtot alfabētiskā secībā",
-       "deletedcontributions": "Izdzēstais lietotāju devums",
-       "deletedcontributions-title": "Izdzēstais lietotāju devums",
+       "deletedcontributions": "Dzēstais dalībnieka devums",
+       "deletedcontributions-title": "Dzēstais dalībnieka devums",
        "sp-deletedcontributions-contribs": "devums",
        "linksearch": "Ārējo saišu meklēšana",
        "linksearch-pat": "Meklēt:",
        "invert": "Izvēlēties pretēji",
        "namespace_association": "Saistītā vārdtelpa",
        "blanknamespace": "(Pamatlapa)",
-       "contributions": "{{GENDER:$1|Lietotāja|Lietotājas|Lietotāja}} devums",
-       "contributions-title": "Lietotāja $1 devums",
+       "contributions": "{{GENDER:$1|Dalībnieka|Dalībnieces|Dalībnieka}} devums",
+       "contributions-title": "Dalībnieka $1 devums",
        "mycontris": "Devums",
        "contribsub2": "Lietotājs: $1 ($2)",
        "nocontribs": "Netika atrastas izmaiņas, kas atbilstu šiem kritērijiem.",
        "sp-contributions-newbies": "Rādīt jauno lietotāju devumu",
        "sp-contributions-newbies-sub": "Jaunie lietotāji",
        "sp-contributions-blocklog": "Bloķēšanas reģistrs",
-       "sp-contributions-deleted": "Izdzēstais lietotāja devums",
+       "sp-contributions-deleted": "dzēstais dalībnieka devums",
        "sp-contributions-uploads": "augšupielādes",
        "sp-contributions-logs": "reģistri",
        "sp-contributions-talk": "diskusija",
index 47bebf8..40b1339 100644 (file)
        "unusedimages": "Ficheiros não utilizados",
        "wantedcategories": "Categorias desejadas",
        "wantedpages": "Páginas desejadas",
-       "wantedpages-summary": "Lista de páginas inexistentes com o maior número de ligações à elas, excluindo páginas que possuem apenas redirecionamentos à elas. Para obter uma lista de páginas inexistentes que possuam redirecionamento à elas, veja [[{{#special:BrokenRedirects}}|a lista de redirecionamentos quebrados]].",
+       "wantedpages-summary": "Lista de páginas inexistentes com o maior número de ligações a elas, excluindo páginas que possuem apenas redirecionamentos a elas. Para obter uma lista de páginas inexistentes que possuam redirecionamento a elas, veja [[{{#special:BrokenRedirects}}|a lista de redirecionamentos quebrados]].",
        "wantedpages-badtitle": "Título inválido no conjunto de resultados: $1",
        "wantedfiles": "Ficheiros desejados",
        "wantedfiletext-cat": "Os seguintes ficheiros são usados, mas não existem. Ficheiros de repositórios externos podem ser listados apesar de existirem. Tais falsos positivos aparecerão <del>riscados</del>. Adicionalmente, as páginas que incorporam ficheiros que não existem estão listadas em [[:$1]].",
        "tags-edit-success": "As alterações foram aplicadas com sucesso.",
        "tags-edit-failure": "As alterações não puderam ser aplicadas:\n$1",
        "tags-edit-nooldid-title": "Revisão de página inválida",
-       "tags-edit-nooldid-text": "Não foi especificada nenhuma revisão na qual será realizada esta acção, ou a revisão especificada não existe.",
+       "tags-edit-nooldid-text": "Não foi especificada nenhuma revisão na qual será realizada esta ação, ou a revisão especificada não existe.",
        "tags-edit-none-selected": "Por favor, selecione pelo menos uma etiqueta para adicionar ou remover.",
        "comparepages": "Comparar páginas",
        "compare-page1": "Página 1",
        "logentry-newusers-create2": "A conta de utilizador $3 foi criada por $1",
        "logentry-newusers-byemail": "A conta de utilizador $3 foi criada por $1 e a palavra-passe foi enviada por correio eletrónico",
        "logentry-newusers-autocreate": "A conta de utilizador $1 foi criada automaticamente",
-       "logentry-protect-move_prot": "$1 {{GENDER:$2|moveu}} as preferências de protecção de $4 para $3",
+       "logentry-protect-move_prot": "$1 {{GENDER:$2|moveu}} as preferências de proteção de $4 para $3",
        "logentry-rights-rights": "$1 modificou os privilégios do utilizador $3 de $4 para $5",
        "logentry-rights-rights-legacy": "$1 alterou os grupos de $3",
        "logentry-rights-autopromote": "$1 foi automaticamente {{GENDER:$2|promovido|promovida}} de $4 a $5",
index b401348..9fc552e 100644 (file)
        "columns": "Kolumner:",
        "searchresultshead": "Sökning",
        "stub-threshold": "Gräns för formatering av stubblänk ($1):",
+       "stub-threshold-sample-link": "exempel",
        "stub-threshold-disabled": "Avaktiverat",
        "recentchangesdays": "Antal dygn som skall visas i \"senaste ändringarna\":",
        "recentchangesdays-max": "Maximalt $1 {{PLURAL:$1|dygn}}",
        "booksources-text": "Nedan följer en lista över länkar till webbplatser som säljer nya och begagnade böcker, och som kanske har ytterligare information om de böcker du söker.",
        "booksources-invalid-isbn": "Det angivna ISBN-numret verkar inte vara giltigt. Kontrollera källan för eventuella fel.",
        "specialloguserlabel": "Utförare:",
-       "speciallogtitlelabel": "Mål (titel eller användare):",
+       "speciallogtitlelabel": "Mål (titel eller {{ns:user}}:användarnamn för användare):",
        "log": "Loggar",
        "all-logs-page": "Alla publika loggar",
        "alllogstext": "Kombinerad visning av alla tillgängliga loggar för {{SITENAME}}.\nDu kan avgränsa sökningen och få färre träffar genom att ange typ av logg, användarnamn (skiftlägeskänsligt), eller berörd sida (också skiftlägeskänsligt).",
index 323c9ab..a08c972 100644 (file)
        "cancel": "Neenal",
        "moredotdotdot": "Ak yeneen...",
        "mypage": "Samaw xët",
-       "mytalk": "Xëtu waxtaanuwaay",
+       "mytalk": "Waxtaan",
        "anontalk": "Waxtaan ak bii IP",
        "navigation": "Joowiin",
        "and": "&#32;ak",
        "view-foreign": "Xoolee ko ci $1",
        "edit": "Soppi",
        "create": "Sos",
+       "create-local": "Yokk faramfàcceb barab bii",
        "editthispage": "Soppi xët wii",
        "create-this-page": "Sos wii xët",
        "delete": "Far",
        "otherlanguages": "Yeneeni làkk",
        "redirectedfrom": "(Yoonalaat gu jóge $1)",
        "redirectpagesub": "Xëtu yoonalaat",
+       "redirectto": "Jëmalewaat:",
        "lastmodifiedat": "Coppite bu mujj bu xët wii $1 ci $2.<br />",
        "viewcount": "Xët wii nemmeeku nañ ko {{PLURAL:$1|$1 yoon|$1 yoon}}.",
        "protectedpage": "Xët wees aar",
        "virus-scanfailed": "Saytu gi dog na (code $1)",
        "logouttext": "Fi mu nekk nii génn nga.'''\n\nMan ngaa wéy di jëfandikoo {{SITENAME}} ci anam buñ la dul xamme walla nga  <span class='plainlinks'>[$1 duggewaat]</span> ak wenn tur wi walla ak weneen.",
        "yourname": "Sa turu jëfandikukat",
+       "userlogin-yourname": "Turu jëfandikukat",
+       "userlogin-yourname-ph": "Duggalal sa turu jëfandikukat",
        "yourpassword": "Sa baatujàll",
+       "userlogin-yourpassword": "Baatujàll",
        "yourpasswordagain": "Bindaatal sa baatujàll",
        "remembermypassword": "Denc sama yëgley dukkukaay ci bii joowukaay (lu ëpp nag $1 {{PLURAL:$1|day|days}})",
        "yourdomainname": "Sa barab",
        "gotaccount": "Sos nga am sàq? '''$1'''.",
        "gotaccountlink": "Dugg",
        "createaccountmail": "Jaare ko ci m-bataaxal",
+       "createacct-captcha": "Caytug kaaraange",
+       "createacct-imgcaptcha-ph": "Duggalal mbind  miy toftal mi ngay gis",
        "badretype": "Baatujàll yi nga bind yemuñu.",
        "userexists": "Turu jëfandikukat bi nga bind am na boroom ba noppi. Tànnal weneen.",
        "loginerror": "Njuumte ci dugg gi",
        "loginlanguagelabel": "Làkk : $1",
        "pt-login": "Dugg",
        "pt-createaccount": "Sos am sàq",
+       "pt-userlogout": "Génn",
        "changepassword": "Coppiteg baatujàll bi",
        "resetpass_announce": "Danga dugg ak ab baatujàll bu saxul-dakk, buñ la yónne cib bataaxal. Ngir matal mbindu mi, faaw nga roof ab baatujàll bu bees fii:",
        "resetpass_text": "<!-- Bindal fii -->",
        "preview": "Wonendi",
        "showpreview": "Wonendi",
        "showdiff": "Wone samay soppi",
-       "anoneditwarning": "'''Moytul :''' Duggoo. Sa màkkaanub IP di nañu ko dugal ci jaar-jaaru xët wii.",
+       "anoneditwarning": "<strong>Moytul :</strong> Duggoo. Bépp coppite boo def sa màkkaanub IP lañu koy xaatimee ci jaar-jaaru xët wi, ñépp di ko gis. Waaye soo <strong>[$1 duggee]</strong> walla nga <strong>[$2 sos am sàq]</strong>, say coppite sa tur lañuy àndal ak yeneeni njariñ.",
        "missingsummary": "'''Fattali :''' Defoo ab tënk ci coppite yi nga amal. Soo cuqaate ci «Denc xët wi», say coppite di nañ dugg te duñ am tënk, maanaam duñ xam loo soppi.",
        "missingcommenttext": "Di la sakku nga dugal ab tënk ci suuf, jërëjëf.",
        "missingcommentheader": "'''Fattali :''' Joxoo ab koj say coppite. Soo cuqaate ci «Denc xët wi», di nañ leen dugal te duñ am koj.",
        "newarticletext": "Da ngaa topp ab lëkkalekaay buy jëme ci aw xët wu amagul. ngir sos xët wi léegi, duggalal sa mbind ci boyot bii ci suuf (man ngaa yër [$1 xëtu ndimbal wi] ngir yeneeni xamle). Su fekkee njuumtee la fi indi cuqal ci '''dellu''' bu sa joowukaay.",
        "anontalkpagetext": "---- ''Yaa ngi ci xëtu waxtaanuwaayu ab jëfandikukatu alaxam, bu bindoogul ba fim ne mbaa jëfandikoowul am sàqam.\nKon ngir xàmmee ko fàw nga jëfandikoo màkkaanub IP wam. Te màkkaanub IP jëfandikukat yu bari man nañ koo bokk.\nSu fekkee jëfandikukatu alaxam nga, te nga gis ne dees laa féetale ay kàddu yoo moomul, ngalla [[Special:UserLogin|bindu]] walla [[Special:UserLogin|dugg]] ngir benn jaxase bañatee am ëllëg .''",
        "noarticletext": "Fi mu ne ni amul menn mbind ci xët wii; man ngaa [[Special:Search/{{PAGENAME}}|seet koju xët wi]] ci yeneen xët, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} seet ci xëtu jagleel wi ],\nwalla [{{fullurl:{{FULLPAGENAME}}|action=edit}} soppi xët wii]</span>.",
-       "noarticletext-nopermission": "Nii-nii amul menn mbind ci wii xët.\nMan nga [[Special:Search/{{PAGENAME}}|seet bii koj]] ci yeneen xët,\nwalla <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} nga seet ci yéenekaay yees ko féetaleel]</span>.",
+       "noarticletext-nopermission": "Nii-nii amul menn mbind ci wii xët.\nMan ngaa [[Special:Search/{{PAGENAME}}|seet bii koj]] ci yeneen xët walla <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} nga seet ciy yéenekaayam]</span>. Numu man a deme, amoo sañ-sañu sos wii xët.",
        "userpage-userdoesnotexist": "Mii sàqum jëfandikukat « <nowiki>$1</nowiki> » du bu ku-bindu. Seetal bu baax ndax da ngaa namma sos walla soppi wii xët.",
        "clearyourcache": "'''Karmat :''' Soo dence xët wi ba noppi, faaw nga far nëmbiitu sa joowukaay ngir man a gis say coppite, te nga, su dee '''Mozilla / Firefox / Safari :''' cuq ci ''yeesal'' te bësaale ''shift'', walla nga bës ''Shift-R'' walla ''Ctrl-F5'' (Command-R ci Mac ), su dee '''Konqueror''': cuq ''yeesal'' walla nga bës ''F5''; su dee '''Opera''' faral nëbiit li (''Jumtukaay → Tànneef'') su dee '''Internet Explorer:''' cuq ci ''yeesal te bësaale ''Ctrl''  walla nga bës ''Ctrl-F5''.",
        "usercssyoucanpreview": "'''Xelal :''' di la digël nga cuq ci «Wonendi» ngir gis say xobi CSS walla JavaScript yu bees laata nga leen di denc.",
        "shown-title": "Wone $1 {{PLURAL:$1|ngérte|ngérte}} ciw xët",
        "viewprevnext": "Xool ($1 {{int:pipe-separator}} $2) ($3).",
        "searchmenu-exists": "'''wenn xët wu tudd « [[:$1]] » moo am ci bii wiki'''",
-       "searchmenu-new": "'''Sosal xët wii di « [[:$1|$1]] » ci bii wiki !'''",
+       "searchmenu-new": "<strong>Sosal xët wii di « [[:$1|$1]] » ci bii wiki !</strong>\n{{PLURAL:$2|0=|Xoolal itam xët wees gis ak sa ceet gi.|Xoolal itam ngértey ceet gi.}}",
        "searchprofile-articles": "Xëti ëmbiit",
        "searchprofile-images": "Barixibaarukaay",
        "searchprofile-everything": "Lépp",
        "searchrelated": "yeneeni ngérte",
        "searchall": "yépp",
        "showingresults": "Woneg <b>$1</b> {{PLURAL:$1|ngérte|ciy ngérte}} doore ko ci #<b>$2</b>.",
+       "search-showingresults": "{{PLURAL:$4|Ngérte <strong>$1</strong> ci <strong>$3</strong>|Ngérte <strong>$1 - $2</strong> ci <strong>$3</strong>}}",
        "search-nonefound": "Ceet gi jurul dara.",
        "powersearch-legend": "Ceet gu xóot",
        "powersearch-ns": "Seet ci barabi tur yi :",
        "search-external": "Ceet gu biti",
        "searchdisabled": "Ceet gi ci {{SITENAME}} doxul. Ci négandiku doxal gi, man nga seet ci Google. Jàppal ne, xéj-na ëmbiti {{SITENAME}} gi ci bii seetukaay yeesaluñ leen.",
        "preferences": "Tànneef",
-       "mypreferences": "Samay tànneef",
+       "mypreferences": "Tànnéef",
        "prefs-edits": "Limu coppite yi:",
        "prefs-skin": "Melokaan",
        "skin-preview": "Wonendil",
        "filewasdeleted": "Dencukaay bu tudd nii yeboon nañ ko fi ba noppi, faraat ko. Saytul $1 laataa nga koy yebaat.",
        "filename-bad-prefix": "Turu dencukaay bi ngay yeb moo ngi tambalee '''\"$1\"''', te muy tur wu nosukaay bi di joxal boppam nataalukaay yi.\nDila ñaan nga tànn tur wuy faramfacce dencukaay bi.",
        "upload-success-subj": "Yeb gi jàll na",
+       "license-header": "Anami Jëfandikoo gi",
        "imgfile": "Dencukaay",
        "listfiles": "Limu dencukaay",
        "listfiles_date": "Taariix",
        "blanknamespace": "(njëkk)",
        "contributions": "Cëruy bii {{GENDER:$1|jëfandikukat}}",
        "contributions-title": "Cëru yu jëfandikukat bii di $1",
-       "mycontris": "Samay cëru",
+       "mycontris": "Cëru",
        "contribsub2": "Ngir $1 ($2)",
        "nocontribs": "Amul benn coppite bu melokaanoo nii bu ñu gis.",
        "uctop": "(bi mujj)",
        "nolinkshere-ns": "Amul wenn xët wu lëkkalook wii '''[[:$1]]''' ci barabu tur bi nga tànn.",
        "isredirect": "Xëtu jubluwaat",
        "istemplate": "mboole",
-       "isimage": "lëkkalekaayu nataal bi",
+       "isimage": "lëkkalekaayu dencukaay bi",
        "whatlinkshere-prev": "{{PLURAL:$1|wi jiitu|$1 yi jiitu}}",
        "whatlinkshere-next": "{{PLURAL:$1|wi toftal|$1 yi toftal}}",
        "whatlinkshere-links": "← lëkkalekaay",
        "metadata-fields": "Tooli jégginjoxe yu nataal yi ñu lim ci bii bataaxal dañ leen di wone ci xëtu faramfàcce wu nataal bi su fekkee dañoo lem àlliwab jégginjoxe bi.\nYeneen tool yi dañ leen di nëbb.\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": "Yaatuwaay",
        "exif-imagelength": "Kawewaay",
+       "exif-orientation": "Jubluwaay",
+       "exif-datetime": "Taariix ak waxtu coppiteg dencukaay bi",
+       "exif-make": "Defarkatu nataalukaay bi",
+       "exif-software": "Jëfekaay bees jëfandikoo",
+       "exif-exifversion": "Sumb bu Exif",
+       "exif-colorspace": "Barabu melo",
        "exif-usercomment": "Kadduy jëfëndikookat bi",
+       "exif-datetimeoriginal": "Taariix ak waxtub njurug njoxe yi",
+       "exif-orientation-1": "Jaadu",
        "exif-componentsconfiguration-0": "Amul",
        "namespacesall": "Yépp",
        "monthsall": "Yépp",
        "watchlisttools-view": "Limu toppte",
        "watchlisttools-edit": "Xool te soppi limu toppte gi",
        "watchlisttools-raw": "Soppi lim gi",
+       "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|waxtaan]])",
        "specialpages": "Xëti jagleel",
        "tag-filter": "Seggee ak [[Special:Tags|Tafaan]]:",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Tag|Tag}}]]: $2)",
+       "logentry-delete-delete": "$1 {{GENDER:$2|moo far}} xët wi $3",
        "revdelete-restricted": "doxalub digal ngir yorkat yi",
        "revdelete-unrestricted": "digal ngir yorkat yi deñ na",
        "logentry-newusers-create": "Sàqum jëfandikukat $1 sos nañu ko",
index 8fc9bdd..07142a5 100644 (file)
@@ -1602,7 +1602,14 @@ return array(
        ),
        'mediawiki.special.movePage' => array(
                'scripts' => 'resources/src/mediawiki.special/mediawiki.special.movePage.js',
-               'dependencies' => 'jquery.byteLimit',
+               'dependencies' => array(
+                       'jquery.byteLimit',
+                       'mediawiki.widgets',
+               ),
+       ),
+       'mediawiki.special.movePage.styles' => array(
+               'styles' => 'resources/src/mediawiki.special/mediawiki.special.movePage.css',
+               'position' => 'top',
        ),
        'mediawiki.special.pageLanguage' => array(
                'scripts' => 'resources/src/mediawiki.special/mediawiki.special.pageLanguage.js',
@@ -1875,6 +1882,7 @@ return array(
                        'resources/src/mediawiki.widgets/mw.widgets.NamespaceInputWidget.js',
                        'resources/src/mediawiki.widgets/mw.widgets.ComplexNamespaceInputWidget.js',
                        'resources/src/mediawiki.widgets/mw.widgets.TitleInputWidget.js',
+                       'resources/src/mediawiki.widgets/mw.widgets.ComplexTitleInputWidget.js',
                        'resources/src/mediawiki.widgets/mw.widgets.TitleOptionWidget.js',
                        'resources/src/mediawiki.widgets/mw.widgets.UserInputWidget.js',
                        'resources/src/mediawiki.widgets/mw.widgets.CategorySelector.js',
@@ -1916,6 +1924,7 @@ return array(
                'skinStyles' => array(
                        'default' => array(
                                'resources/src/mediawiki.widgets/mw.widgets.ComplexNamespaceInputWidget.base.css',
+                               'resources/src/mediawiki.widgets/mw.widgets.ComplexTitleInputWidget.base.css',
                        ),
                ),
                'position' => 'top',
index f55d2a8..9045e4c 100644 (file)
@@ -394,21 +394,6 @@ a.new {
        color: #BA0000;
 }
 
-/* feed links */
-/* To be removed before 1.26 release, moved to mediawiki.feedlink module */
-a.feedlink {
-       /* SVG support using a transparent gradient to guarantee cross-browser
-        * compatibility (browsers able to understand gradient syntax support also SVG).
-        * http://pauginer.tumblr.com/post/36614680636/invisible-gradient-technique */
-       background-image: url(../mediawiki/images/feed-icon.png);
-       background-image: -webkit-linear-gradient(transparent, transparent), url(../mediawiki/images/feed-icon.svg);
-       background-image: linear-gradient(transparent, transparent), url(../mediawiki/images/feed-icon.svg);
-       background-position: center left;
-       background-repeat: no-repeat;
-       background-size: 12px 12px;
-       padding-left: 16px;
-}
-
 /* Plainlinks - this can be used to switch
  * off special external link styling */
 .plainlinks a.external {
diff --git a/resources/src/mediawiki.special/mediawiki.special.movePage.css b/resources/src/mediawiki.special/mediawiki.special.movePage.css
new file mode 100644 (file)
index 0000000..dd1c2aa
--- /dev/null
@@ -0,0 +1,8 @@
+/*!
+ * Styles for Special:MovePage
+ */
+
+.movepage-wrapper {
+       width: 50em;
+       margin: 1em 0;
+}
index 7e56050..6d88c51 100644 (file)
@@ -1,6 +1,7 @@
 /*!
  * JavaScript for Special:MovePage
  */
-jQuery( function ( $ ) {
-       $( '#wpReason, #wpNewTitleMain' ).byteLimit();
+jQuery( function () {
+       OO.ui.infuse( 'wpNewTitle' );
+       OO.ui.infuse( 'wpReason' ).$input.byteLimit();
 } );
diff --git a/resources/src/mediawiki.widgets/mw.widgets.ComplexTitleInputWidget.base.css b/resources/src/mediawiki.widgets/mw.widgets.ComplexTitleInputWidget.base.css
new file mode 100644 (file)
index 0000000..73a50d8
--- /dev/null
@@ -0,0 +1,20 @@
+/*!
+ * MediaWiki Widgets - base ComplexTitleInputWidget styles.
+ *
+ * @copyright 2011-2015 MediaWiki Widgets Team and others; see AUTHORS.txt
+ * @license The MIT License (MIT); see LICENSE.txt
+ */
+
+.mw-widget-complexTitleInputWidget .mw-widget-namespaceInputWidget,
+.mw-widget-complexTitleInputWidget .mw-widget-titleInputWidget {
+       display: inline-block;
+}
+
+.mw-widget-complexTitleInputWidget .mw-widget-namespaceInputWidget {
+       max-width: 20em;
+       margin-right: 0.5em;
+}
+
+.mw-widget-complexTitleInputWidget .mw-widget-titleInputWidget {
+       max-width: 29.5em;
+}
diff --git a/resources/src/mediawiki.widgets/mw.widgets.ComplexTitleInputWidget.js b/resources/src/mediawiki.widgets/mw.widgets.ComplexTitleInputWidget.js
new file mode 100644 (file)
index 0000000..0c6c15e
--- /dev/null
@@ -0,0 +1,63 @@
+/*!
+ * MediaWiki Widgets - ComplexTitleInputWidget class.
+ *
+ * @copyright 2011-2015 MediaWiki Widgets Team and others; see AUTHORS.txt
+ * @license The MIT License (MIT); see LICENSE.txt
+ */
+( function ( $, mw ) {
+
+       /**
+        * Like TitleInputWidget, but the namespace has to be input through a separate dropdown field.
+        *
+        * @class
+        * @extends OO.ui.Widget
+        *
+        * @constructor
+        * @param {Object} [config] Configuration options
+        * @cfg {Object} namespace Configuration for the NamespaceInputWidget dropdown with list of
+        *     namespaces
+        * @cfg {Object} title Configuration for the TitleInputWidget text field
+        */
+       mw.widgets.ComplexTitleInputWidget = function MwWidgetsComplexTitleInputWidget( config ) {
+               // Parent constructor
+               mw.widgets.ComplexTitleInputWidget.parent.call( this, config );
+
+               // Properties
+               this.namespace = new mw.widgets.NamespaceInputWidget( config.namespace );
+               this.title = new mw.widgets.TitleInputWidget( $.extend(
+                       {},
+                       config.title,
+                       {
+                               relative: true,
+                               namespace: config.namespace.value || null
+                       }
+               ) );
+
+               // Events
+               this.namespace.connect( this, { change: 'updateTitleNamespace' } );
+
+               // Initialization
+               this.$element
+                       .addClass( 'mw-widget-complexTitleInputWidget' )
+                       .append(
+                               this.namespace.$element,
+                               this.title.$element
+                       );
+               this.updateTitleNamespace();
+       };
+
+       /* Setup */
+
+       OO.inheritClass( mw.widgets.ComplexTitleInputWidget, OO.ui.Widget );
+
+       /* Methods */
+
+       /**
+        * Update the namespace to use for search suggestions of the title when the value of namespace
+        * dropdown changes.
+        */
+       mw.widgets.ComplexTitleInputWidget.prototype.updateTitleNamespace = function () {
+               this.title.setNamespace( Number( this.namespace.getValue() ) );
+       };
+
+}( jQuery, mediaWiki ) );
index ef42dc1..4f1b874 100644 (file)
@@ -14,7 +14,8 @@
         *
         * @constructor
         * @param {Object} [config] Configuration options
-        * @cfg {string|null} includeAllValue Value for "all namespaces" option, if any
+        * @cfg {string|null} [includeAllValue] Value for "all namespaces" option, if any
+        * @cfg {number[]} [exclude] List of namespace numbers to exclude from the selector
         */
        mw.widgets.NamespaceInputWidget = function MwWidgetsNamespaceInputWidget( config ) {
                // Configuration initialization
         */
        mw.widgets.NamespaceInputWidget.prototype.getNamespaceDropdownOptions = function ( config ) {
                var options,
+                       exclude = config.exclude || [],
                        NS_MAIN = 0;
 
                options = $.map( mw.config.get( 'wgFormattedNamespaces' ), function ( name, ns ) {
-                       if ( ns < NS_MAIN ) {
+                       if ( ns < NS_MAIN || exclude.indexOf( Number( ns ) ) !== -1 ) {
                                return null; // skip
                        }
                        ns = String( ns );
index ee9583d..d5a7abc 100644 (file)
 
        /* Methods */
 
+       /**
+        * Get the namespace to prepend to titles in suggestions, if any.
+        *
+        * @return {number|null} Namespace number
+        */
+       mw.widgets.TitleInputWidget.prototype.getNamespace = function () {
+               return this.namespace;
+       };
+
+       /**
+        * Set the namespace to prepend to titles in suggestions, if any.
+        *
+        * @param {number|null} namespace Namespace number
+        */
+       mw.widgets.TitleInputWidget.prototype.setNamespace = function ( namespace ) {
+               this.namespace = namespace;
+               this.lookupCache = {};
+               this.closeLookupMenu();
+       };
+
        /**
         * @inheritdoc
         */
index 596e777..36fbd46 100644 (file)
@@ -34,7 +34,7 @@
         * To use, setup a {@link OO.ui.WindowManager window manager} like for normal
         * dialogs:
         *
-        *     var uploadDialog = new mw.Upload.Dialog( { size: 'small' } );
+        *     var uploadDialog = new mw.Upload.Dialog();
         *     var windowManager = new OO.ui.WindowManager();
         *     $( 'body' ).append( windowManager.$element );
         *     windowManager.addWindows( [ uploadDialog ] );
index 1dda2ac..8221f52 100644 (file)
@@ -1,8 +1,6 @@
 /* Styles for links to RSS/Atom feeds in sidebar */
 
-/* Until the copy of this code in mediawiki.legacy.shared is removed, which no longer @embeds the
- * background image, the selector below must be kept more specific. */
-#feedlinks a.feedlink {
+a.feedlink {
        /* SVG support using a transparent gradient to guarantee cross-browser
         * compatibility (browsers able to understand gradient syntax support also SVG).
         * http://pauginer.tumblr.com/post/36614680636/invisible-gradient-technique */
index 6bebf4d..4859953 100644 (file)
                        rules = sheet.cssRules || sheet.rules;
                        $.each( rules, function ( index, rule ) {
                                selectors.total++;
-                               if ( document.querySelector( rule.selectorText ) !== null ) {
-                                       selectors.matched++;
-                               }
+                               // document.querySelector() on prefixed pseudo-elements can throw exceptions
+                               // in Firefox and Safari. Ignore these exceptions.
+                               // https://bugs.webkit.org/show_bug.cgi?id=149160
+                               // https://bugzilla.mozilla.org/show_bug.cgi?id=1204880
+                               try {
+                                       if ( document.querySelector( rule.selectorText ) !== null ) {
+                                               selectors.matched++;
+                                       }
+                               } catch ( e ) {}
                        } );
                        document.body.removeChild( style );
                        return selectors;
index af89b9a..122e512 100644 (file)
                                // Add ready and error callbacks if they were given
                                if ( ready !== undefined || error !== undefined ) {
                                        jobs.push( {
+                                               // Narrow down the list to modules that are worth waiting for
                                                dependencies: $.grep( dependencies, function ( module ) {
                                                        var state = mw.loader.getState( module );
-                                                       return state === 'registered' || state === 'loaded' || state === 'loading';
+                                                       return state === 'registered' || state === 'loaded' || state === 'loading' || state === 'executing';
                                                } ),
                                                ready: ready,
                                                error: error
index 823c933..a3efbb8 100644 (file)
@@ -93,12 +93,26 @@ class LinkerTest extends MediaWikiLangTestCase {
         * @covers Linker::formatAutocomments
         * @covers Linker::formatLinksInComment
         */
-       public function testFormatComment( $expected, $comment, $title = false, $local = false ) {
+       public function testFormatComment( $expected, $comment, $title = false, $local = false, $wikiId = null ) {
+               $conf = new SiteConfiguration();
+               $conf->settings = array(
+                       'wgServer' => array(
+                               'enwiki' => '//en.example.org',
+                               'dewiki' => '//de.example.org',
+                       ),
+                       'wgArticlePath' => array(
+                               'enwiki' => '/w/$1',
+                               'dewiki' => '/w/$1',
+                       ),
+               );
+               $conf->suffixes = array( 'wiki' );
+
                $this->setMwGlobals( array(
                        'wgScript' => '/wiki/index.php',
                        'wgArticlePath' => '/wiki/$1',
                        'wgWellFormedXml' => true,
                        'wgCapitalLinks' => true,
+                       'wgConf' => $conf,
                ) );
 
                if ( $title === false ) {
@@ -108,11 +122,13 @@ class LinkerTest extends MediaWikiLangTestCase {
 
                $this->assertEquals(
                        $expected,
-                       Linker::formatComment( $comment, $title, $local )
+                       Linker::formatComment( $comment, $title, $local, $wikiId )
                );
        }
 
-       public static function provideCasesForFormatComment() {
+       public function provideCasesForFormatComment() {
+               $wikiId = 'enwiki'; // $wgConf has a fake entry for this
+
                return array(
                        // Linker::formatComment
                        array(
@@ -127,6 +143,10 @@ class LinkerTest extends MediaWikiLangTestCase {
                                "&#039;&#039;&#039;not bolded&#039;&#039;&#039;",
                                "'''not bolded'''",
                        ),
+                       array(
+                               "try &lt;script&gt;evil&lt;/scipt&gt; things",
+                               "try <script>evil</scipt> things",
+                       ),
                        // Linker::formatAutocomments
                        array(
                                '<a href="/wiki/Special:BlankPage#autocomment" title="Special:BlankPage">→</a>‎<span dir="auto"><span class="autocomment">autocomment</span></span>',
@@ -156,6 +176,14 @@ class LinkerTest extends MediaWikiLangTestCase {
                                '<a href="/wiki/Special:BlankPage#autocomment_containing_.2F.2A" title="Special:BlankPage">→</a>‎<span dir="auto"><span class="autocomment">autocomment containing /*: </span> T70361</span>',
                                "/* autocomment containing /* */ T70361"
                        ),
+                       array(
+                               '<a href="/wiki/Special:BlankPage#autocomment_containing_.22quotes.22" title="Special:BlankPage">→</a>‎<span dir="auto"><span class="autocomment">autocomment containing &quot;quotes&quot;</span></span>',
+                               "/* autocomment containing \"quotes\" */"
+                       ),
+                       array(
+                               '<a href="/wiki/Special:BlankPage#autocomment_containing_.3Cscript.3Etags.3C.2Fscript.3E" title="Special:BlankPage">→</a>‎<span dir="auto"><span class="autocomment">autocomment containing &lt;script&gt;tags&lt;/script&gt;</span></span>',
+                               "/* autocomment containing <script>tags</script> */"
+                       ),
                        array(
                                '<a href="#autocomment">→</a>‎<span dir="auto"><span class="autocomment">autocomment</span></span>',
                                "/* autocomment */",
@@ -166,6 +194,16 @@ class LinkerTest extends MediaWikiLangTestCase {
                                "/* autocomment */",
                                null
                        ),
+                       array(
+                               '<a href="/wiki/Special:BlankPage#autocomment" title="Special:BlankPage">→</a>‎<span dir="auto"><span class="autocomment">autocomment</span></span>',
+                               "/* autocomment */",
+                               false, false
+                       ),
+                       array(
+                               '<a class="external" rel="nofollow" href="//en.example.org/w/Special:BlankPage#autocomment">→</a>‎<span dir="auto"><span class="autocomment">autocomment</span></span>',
+                               "/* autocomment */",
+                               false, false, $wikiId
+                       ),
                        // Linker::formatLinksInComment
                        array(
                                'abc <a href="/wiki/index.php?title=Link&amp;action=edit&amp;redlink=1" class="new" title="Link (page does not exist)">link</a> def',
@@ -191,6 +229,28 @@ class LinkerTest extends MediaWikiLangTestCase {
                                'abc <a href="/wiki/index.php?title=/subpage&amp;action=edit&amp;redlink=1" class="new" title="/subpage (page does not exist)">/subpage</a> def',
                                "abc [[/subpage]] def",
                        ),
+                       array(
+                               'abc <a href="/wiki/index.php?title=%22evil!%22&amp;action=edit&amp;redlink=1" class="new" title="&quot;evil!&quot; (page does not exist)">&quot;evil!&quot;</a> def',
+                               "abc [[\"evil!\"]] def",
+                       ),
+                       array(
+                               'abc [[&lt;script&gt;very evil&lt;/script&gt;]] def',
+                               "abc [[<script>very evil</script>]] def",
+                       ),
+                       array(
+                               'abc [[|]] def',
+                               "abc [[|]] def",
+                       ),
+                       array(
+                               'abc <a href="/wiki/index.php?title=Link&amp;action=edit&amp;redlink=1" class="new" title="Link (page does not exist)">link</a> def',
+                               "abc [[link]] def",
+                               false, false
+                       ),
+                       array(
+                               'abc <a class="external" rel="nofollow" href="//en.example.org/w/Link">link</a> def',
+                               "abc [[link]] def",
+                               false, false, $wikiId
+                       )
                );
        }
 
index 86c2eb8..b55b1e7 100644 (file)
                mw.loader.load( target );
        } );
 
+       QUnit.asyncTest( 'mw.loader() executing race (T112232)', 2, function ( assert ) {
+               var done = false;
+
+               // The red herring schedules its CSS buffer first. In T112232, a bug in the
+               // state machine would cause the job for testRaceLoadMe to run with an earlier job.
+               mw.loader.implement(
+                       'testRaceRedHerring',
+                       function () {},
+                       { css: [ '.mw-testRaceRedHerring {}' ] }
+               );
+               mw.loader.implement(
+                       'testRaceLoadMe',
+                       function () {
+                               done = true;
+                       },
+                       { css: [ '.mw-testRaceLoadMe { float: left; }' ] }
+               );
+
+               mw.loader.load( [ 'testRaceRedHerring', 'testRaceLoadMe' ] );
+               mw.loader.using( 'testRaceLoadMe', function () {
+                       assert.strictEqual( done, true, 'script ran' );
+                       assert.strictEqual( mw.loader.getState( 'testRaceLoadMe' ), 'ready', 'state' );
+               } ).always( QUnit.start );
+       } );
+
        QUnit.test( 'mw.html', 13, function ( assert ) {
                assert.throws( function () {
                        mw.html.escape();