Merge "Allow auto suggestion for subpages of Special:BotPasswords"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Thu, 18 Feb 2016 18:17:36 +0000 (18:17 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Thu, 18 Feb 2016 18:17:36 +0000 (18:17 +0000)
47 files changed:
autoload.php
includes/EditPage.php
includes/Title.php
includes/api/i18n/cs.json
includes/api/i18n/de.json
includes/api/i18n/fi.json
includes/api/i18n/fr.json
includes/api/i18n/he.json
includes/changes/ChangesList.php
includes/db/Database.php
includes/installer/LocalSettingsGenerator.php
includes/installer/SqliteInstaller.php
includes/installer/i18n/nl.json
includes/libs/CSSMin.php
includes/objectcache/ObjectCache.php
includes/parser/Parser.php
includes/parser/Preprocessor_Hash.php
includes/registration/ExtensionRegistry.php
includes/session/SessionManager.php
includes/utils/AutoloadGenerator.php
languages/i18n/ast.json
languages/i18n/be-tarask.json
languages/i18n/bn.json
languages/i18n/hak.json
languages/i18n/hy.json
languages/i18n/id.json
languages/i18n/ilo.json
languages/i18n/ka.json
languages/i18n/my.json
languages/i18n/nan.json
languages/i18n/nl.json
languages/i18n/or.json
languages/i18n/pt.json
languages/i18n/sk.json
languages/i18n/vec.json
languages/i18n/wuu.json
languages/i18n/zh-hans.json
languages/i18n/zh-hant.json
resources/src/mediawiki.special/mediawiki.special.search.js
resources/src/mediawiki.ui/components/checkbox.less
resources/src/mediawiki.ui/components/radio.less
resources/src/mediawiki.widgets.datetime/DateTimeInputWidget.js
resources/src/mediawiki.widgets/mw.widgets.DateInputWidget.js
resources/src/mediawiki/api/upload.js
tests/phpunit/includes/ExportTest.php
tests/phpunit/includes/libs/CSSMinTest.php
tests/qunit/suites/resources/jquery/jquery.byteLimit.test.js

index 83ca3b3..341cb90 100644 (file)
@@ -3,7 +3,7 @@
 // @codingStandardsIgnoreFile
 global $wgAutoloadLocalClasses;
 
-$wgAutoloadLocalClasses = array(
+$wgAutoloadLocalClasses = [
        'APCBagOStuff' => __DIR__ . '/includes/libs/objectcache/APCBagOStuff.php',
        'AbstractContent' => __DIR__ . '/includes/content/AbstractContent.php',
        'Action' => __DIR__ . '/includes/actions/Action.php',
@@ -1457,4 +1457,4 @@ $wgAutoloadLocalClasses = array(
        'ZipDirectoryReader' => __DIR__ . '/includes/utils/ZipDirectoryReader.php',
        'ZipDirectoryReaderError' => __DIR__ . '/includes/utils/ZipDirectoryReader.php',
        'profile_point' => __DIR__ . '/profileinfo.php',
-);
+];
index 5ebb44a..82fcdcf 100644 (file)
@@ -1420,6 +1420,11 @@ class EditPage {
                        }
                }
 
+               // "wpExtraQueryRedirect" is a hidden input to modify
+               // after save URL and is not used by actual edit form
+               $request = RequestContext::getMain()->getRequest();
+               $extraQueryRedirect = $request->getVal( 'wpExtraQueryRedirect' );
+
                switch ( $status->value ) {
                        case self::AS_HOOK_ERROR_EXPECTED:
                        case self::AS_CONTENT_TOO_BIG:
@@ -1443,6 +1448,13 @@ class EditPage {
 
                        case self::AS_SUCCESS_NEW_ARTICLE:
                                $query = $resultDetails['redirect'] ? 'redirect=no' : '';
+                               if ( $extraQueryRedirect ) {
+                                       if ( $query === '' ) {
+                                               $query = $extraQueryRedirect;
+                                       } else {
+                                               $query = $query . '&' . $extraQueryRedirect;
+                                       }
+                               }
                                $anchor = isset( $resultDetails['sectionanchor'] ) ? $resultDetails['sectionanchor'] : '';
                                $wgOut->redirect( $this->mTitle->getFullURL( $query ) . $anchor );
                                return false;
@@ -1464,6 +1476,14 @@ class EditPage {
                                                $extraQuery = 'redirect=no&' . $extraQuery;
                                        }
                                }
+                               if ( $extraQueryRedirect ) {
+                                       if ( $extraQuery === '' ) {
+                                               $extraQuery = $extraQueryRedirect;
+                                       } else {
+                                               $extraQuery = $extraQuery . '&' . $extraQueryRedirect;
+                                       }
+                               }
+
                                $wgOut->redirect( $this->mTitle->getFullURL( $extraQuery ) . $sectionanchor );
                                return false;
 
index 38ee2ee..c0ec97f 100644 (file)
@@ -3434,7 +3434,7 @@ class Title implements LinkTarget {
         * WARNING: do not use this function on arbitrary user-supplied titles!
         * On heavily-used templates it will max out the memory.
         *
-        * @param array $options May be FOR UPDATE
+        * @param array $options Query option to Database::select()
         * @return Title[] Array of Title the Title objects linking here
         */
        public function getTemplateLinksTo( $options = [] ) {
@@ -3448,7 +3448,7 @@ class Title implements LinkTarget {
         * WARNING: do not use this function on arbitrary user-supplied titles!
         * On heavily-used templates it will max out the memory.
         *
-        * @param array $options May be FOR UPDATE
+        * @param array $options Query option to Database::select()
         * @param string $table Table name
         * @param string $prefix Fields prefix
         * @return array Array of Title objects linking here
@@ -3461,11 +3461,7 @@ class Title implements LinkTarget {
                        return [];
                }
 
-               if ( count( $options ) > 0 ) {
-                       $db = wfGetDB( DB_MASTER );
-               } else {
-                       $db = wfGetDB( DB_SLAVE );
-               }
+               $db = wfGetDB( DB_SLAVE );
 
                $blNamespace = "{$prefix}_namespace";
                $blTitle = "{$prefix}_title";
@@ -4703,6 +4699,18 @@ class Title implements LinkTarget {
                        return $wgLang;
                }
 
+               // Checking if DB language is set
+               $dbPageLanguage = $this->getDbPageLanguageCode();
+               if ( $dbPageLanguage ) {
+                       $pageLang = wfGetLangObj( $dbPageLanguage );
+                       $variant = $pageLang->getPreferredVariant();
+                       if ( $pageLang->getCode() !== $variant ) {
+                               $pageLang = Language::factory( $variant );
+                       }
+
+                       return $pageLang;
+               }
+
                // @note Can't be cached persistently, depends on user settings.
                // @note ContentHandler::getPageViewLanguage() may need to load the
                //   content to determine the page language!
index c1c38ca..b6ddc88 100644 (file)
@@ -7,11 +7,12 @@
                        "Aktron",
                        "Cvanca",
                        "Utar",
-                       "Macofe"
+                       "Macofe",
+                       "Danny B."
                ]
        },
        "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Dokumentace]]\n* [[mw:API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api E-mailová konference]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Oznámení k API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Chyby a požadavky]\n</div>\n<strong>Stav:</strong> Všechny funkce uvedené na této stránce by měly fungovat, ale API se stále aktivně vyvíjí a může se kdykoli změnit. Upozornění na změny získáte přihlášením se k [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ e-mailové konferenci mediawiki-api-announce].\n\n<strong>Chybné požadavky:</strong> Pokud jsou do API zaslány chybné požadavky, bude vrácena HTTP hlavička s klíčem „MediaWiki-API-Error“ a hodnota této hlavičky a chybový kód budou nastaveny na stejnou hodnotu. Více informací najdete [[mw:API:Errors_and_warnings|v dokumentaci]].",
-       "apihelp-main-param-action": "Jaká akce se má provést.",
+       "apihelp-main-param-action": "Která akce se má provést.",
        "apihelp-main-param-format": "Formát výstupu.",
        "apihelp-main-param-maxlag": "Maximální zpoždění lze použít, když je MediaWiki nainstalováno na cluster s replikovanou databází. Abyste se vyhnuli zhoršování už tak špatného replikačního zpoždění, můžete tímto parametrem nechat klienta čekat, dokud replikační zpoždění neklesne pod uvedenou hodnotu. V případě příliš vysokého zpoždění se vrátí chybový kód „<samp>maxlag</samp>“ s hlášením typu „<samp>Waiting for $host: $lag seconds lagged</samp>“.<br />Více informací najdete v [[mw:Manual:Maxlag_parameter|příručce]].",
        "apihelp-main-param-smaxage": "Nastaví HTTP hlavičku pro řízení kešování <code>s-maxage</code> na uvedený počet sekund. Chyby se nekešují nikdy.",
index 0d965e6..305834b 100644 (file)
        "apihelp-undelete-param-title": "Titel der wiederherzustellenden Seite.",
        "apihelp-undelete-param-reason": "Grund für die Wiederherstellung.",
        "apihelp-upload-param-filename": "Ziel-Dateiname.",
+       "apihelp-upload-param-tags": "Auf den Datei-Logbuch-Eintrag und die Dateiseitenversion anzuwendende Änderungsmarkierungen.",
        "apihelp-upload-param-text": "Erster Seitentext für neue Dateien.",
        "apihelp-upload-param-watch": "Die Seite beobachten.",
        "apihelp-upload-param-ignorewarnings": "Ignoriert Warnungen.",
index 265fb66..f21ae2a 100644 (file)
        "apihelp-delete-param-watch": "Lisää sivu nykyisen käyttäjän tarkkailulistalle.",
        "apihelp-edit-description": "Luo ja muokkaa sivuja.",
        "apihelp-edit-param-text": "Sivun sisältö.",
-       "apihelp-edit-param-minor": "Vähäinen muokkaus.",
-       "apihelp-edit-param-notminor": "Ei-vähäinen muokkaus.",
+       "apihelp-edit-param-minor": "Pieni muokkaus.",
+       "apihelp-edit-param-notminor": "Ei-pieni muokkaus.",
        "apihelp-edit-example-edit": "Muokkaa sivua.",
        "apihelp-emailuser-description": "Lähetä sähköpostia käyttäjälle.",
        "apihelp-emailuser-param-subject": "Otsikko.",
        "apihelp-emailuser-param-ccme": "Lähetä kopio tästä viestistä minulle.",
        "apihelp-emailuser-example-email": "Lähetä käyttäjälle <kbd>WikiSysop</kbd> sähköposti, jossa lukee <kbd>Content</kbd>.",
        "apihelp-expandtemplates-param-title": "Sivun otsikko.",
-       "apihelp-feedrecentchanges-param-limit": "Kerralla näytettävien tulosten enimmäismäärän",
-       "apihelp-feedrecentchanges-param-hideminor": "Piilota vähäiset muokkaukset.",
-       "apihelp-feedrecentchanges-param-hideanons": "Piilota anonyymien käyttäjien tekemät muokkaukset.",
-       "apihelp-feedrecentchanges-param-hideliu": "Piilota rekisteröityneiden käyttäjien tekemät muokkaukset.",
-       "apihelp-filerevert-param-filename": "Kohteen tiedostonimi, ilman \"File:\"-etuliitettä.",
-       "apihelp-filerevert-param-comment": "Lähetä kommentti.",
+       "apihelp-feedrecentchanges-param-limit": "Kerralla näytettävien tulosten enimmäismäärä.",
+       "apihelp-feedrecentchanges-param-hideminor": "Piilota pienet muutokset.",
+       "apihelp-feedrecentchanges-param-hideanons": "Piilota kirjautumattomien käyttäjien tekemät muutokset.",
+       "apihelp-feedrecentchanges-param-hideliu": "Piilota rekisteröityneiden käyttäjien tekemät muutokset.",
+       "apihelp-filerevert-param-filename": "Kohteen nimi ilman File:-etuliitettä.",
+       "apihelp-filerevert-param-comment": "Tallennuksen kommentti.",
        "apihelp-imagerotate-description": "Käännä kuva tai kuvia.",
        "apihelp-query+linkshere-param-show": "Näytä vain kohteet, jotka täyttävät nämä kriteerit:\n;redirect:Näytä vain uudelleenohjaukset.\n;!redirect:Näytä vain ei-uudelleenohjaukset",
        "apihelp-tag-example-rev": "Lisää tunniste <kbd>vandalism</kbd> versioon 123 antamatta perustelua.",
index 309724c..07a5c94 100644 (file)
        "apihelp-upload-description": "Téléverser un fichier, ou obtenir l’état des téléversements en cours.\n\nPlusieurs méthodes sont disponibles :\n* Téléverser directement le contenu du fichier, en utilisant le paramètre <var>$1file</var>.\n* Téléverser le fichier par morceaux, en utilisant les paramètres <var>$1filesize</var>, <var>$1chunk</var>, and <var>$1offset</var>.\n* Pour que le serveur MédiaWiki cherche un fichier depuis une URL, utilisez le paramètre <var>$1url</var>.\n* Terminer un téléversement précédent qui a échoué à cause d’avertissements, en utilisant le paramètre <var>$1filekey</var>.\nNoter que le POST HTTP doit être fait comme un téléversement de fichier (par ex. en utilisant <code>multipart/form-data</code>) en envoyant le <code>multipart/form-data</code>.",
        "apihelp-upload-param-filename": "Nom de fichier cible.",
        "apihelp-upload-param-comment": "Télécharger le commentaire. Utilisé aussi comme texte de la page initiale pour les nouveaux fichiers si <var>$1text</var> n’est pas spécifié.",
+       "apihelp-upload-param-tags": "Modifier les balises à appliquer à l’entrée du journal de téléchargement et à la révision de la page du fichier.",
        "apihelp-upload-param-text": "Texte de page initiale pour les nouveaux fichiers.",
        "apihelp-upload-param-watch": "Suivre la page.",
        "apihelp-upload-param-watchlist": "Ajouter ou supprimer sans condition la page de la liste de suivi de l’utilisateur actuel, utiliser les préférences ou ne pas changer le suivi.",
index a759054..e641102 100644 (file)
        "apihelp-upload-description": "העלאת קובץ, או קבלת מצב ההעלאות הממתינות.\n\nיש מספר שיטות:\n* להעלות את הקובץ ישירות, באמצעות הפרמטר <var>$1file</var>.\n* להעלות את הקובץ בחלקים, באמצעות הפרמטרים <var>$1filesize</var>‏, <var>$1chunk</var> ו־<var>$1offset</var>.\n* לגרום לשרת מדיה־ויקי לאחזר את הקובץ מ־URL באמצעות הפרמטר <var>$1url</var>.\n* להשלים העלאה קודמת שנכשלה בשל אזהרות באמצעות הפרמטר <var>$1filekey</var>.\nלתשומך לבך, יש לעשות את HTTP POST בתור העלאת קובץ (כלומר באמצעות <code>multipart/form-data</code>) בעת שליחת ה־<var>$1file</var>.",
        "apihelp-upload-param-filename": "שם קובץ היעד.",
        "apihelp-upload-param-comment": "הערת העלאה. משמש גם בתור טקסט הדף ההתחלתי עבור קבצים חדשים אם <var>$1text</var> אינו מצוין.",
+       "apihelp-upload-param-tags": "תגי שינוי להחיל על עיולי יומן העלאות ועל גרסת דף הקובץ.",
        "apihelp-upload-param-text": "טקסט הדף ההתחלתי לקבצים חדשים.",
        "apihelp-upload-param-watch": "לעקוב אחרי הדף.",
        "apihelp-upload-param-watchlist": "הוספה או הסרה של הדף ללא תנאי מרשימת המעקב של המשתמש הנוכחי, להשתמש בהעדפות או לא לשנות את המעקב.",
index 2599cf2..485d523 100644 (file)
@@ -387,7 +387,7 @@ class ChangesList extends ContextSource {
                        $params = [ 'redirect' => 'no' ];
                }
 
-               $articlelink = Linker::linkKnown(
+               $articlelink = Linker::link(
                        $rc->getTitle(),
                        null,
                        [ 'class' => 'mw-changeslist-title' ],
index d741b2f..351d438 100644 (file)
@@ -1069,7 +1069,9 @@ abstract class DatabaseBase implements IDatabase {
                $table, $var, $cond = '', $fname = __METHOD__, $options = [], $join_conds = []
        ) {
                if ( $var === '*' ) { // sanity
-                       throw new DBUnexpectedError( $this, "Cannot use a * field: got '$var'" );
+                       throw new DBUnexpectedError( $this, "Cannot use a * field" );
+               } elseif ( !is_string( $var ) ) { // sanity
+                       throw new DBUnexpectedError( $this, "Cannot use an array of fields" );
                }
 
                if ( !is_array( $options ) ) {
index 252c22d..ced7b93 100644 (file)
@@ -214,9 +214,9 @@ class LocalSettingsGenerator {
                $servers = $this->values['_MemCachedServers'];
 
                if ( !$servers ) {
-                       return 'array()';
+                       return '[]';
                } else {
-                       $ret = 'array( ';
+                       $ret = '[ ';
                        $servers = explode( ',', $servers );
 
                        foreach ( $servers as $srv ) {
@@ -224,7 +224,7 @@ class LocalSettingsGenerator {
                                $ret .= "'$srv', ";
                        }
 
-                       return rtrim( $ret, ', ' ) . ' )';
+                       return rtrim( $ret, ', ' ) . ' ]';
                }
        }
 
index cd4b1aa..d59c162 100644 (file)
@@ -319,15 +319,15 @@ EOT;
 
                return "# SQLite-specific settings
 \$wgSQLiteDataDir = \"{$dir}\";
-\$wgObjectCaches[CACHE_DB] = array(
+\$wgObjectCaches[CACHE_DB] = [
        'class' => 'SqlBagOStuff',
        'loggroup' => 'SQLBagOStuff',
-       'server' => array(
+       'server' => [
                'type' => 'sqlite',
                'dbname' => 'wikicache',
                'tablePrefix' => '',
                'flags' => 0
-       )
-);";
+       ]
+];";
        }
 }
index 4c71d39..8d5fd6e 100644 (file)
        "config-no-db": "Het was niet mogelijk een geschikte databasedriver te vinden voor PHP! U moet een databasedriver installeren voor PHP.\n{{PLURAL:$2|Het volgende databasetype wordt|De volgende databasetypes worden}} ondersteund: $1.\n\nAls u PHP zelf hebt gecompileerd, wijzig dan uw instellingen zodat een databasedriver wordt geactiveerd, bijvoorbeeld via <code>./configure --with-mysqli</code>.\nAls u PHP hebt geïnstalleerd via een Debian- of Ubuntu-package, installeer dan ook bijvoorbeeld de module <code>php5-mysql</code>.",
        "config-outdated-sqlite": "''' Waarschuwing:''' u gebruikt SQLite $1. SQLite is niet beschikbaar omdat de minimaal vereiste versie $2 is.",
        "config-no-fts3": "'''Waarschuwing''': SQLite is gecompileerd zonder de module [//sqlite.org/fts3.html FTS3]; zoekfuncties zijn niet beschikbaar.",
-       "config-register-globals-error": "<strong>Fout: de optie <code>[http://php.net/register_globals register_globals]</code> van PHP is ingeschakeld.\nDeze optie moet uitgeschakeld zijn om door te kunnen gaan met de installatie.</strong>\nOp de pagina [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals] staat beschreven hoe u dit kunt doen.",
-       "config-magic-quotes-gpc": "<strong>Onherstelbare fout: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-gpc magic_quotes_gpc] is actief!<strong>\nDeze instelling zorgt voor onvoorspelbare gegevenscorruptie.\nU kunt MediaWiki niet installeren tenzij deze instelling is uitgeschakeld.",
-       "config-magic-quotes-runtime": "'''Onherstelbare fout: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] is actief!'''\nDeze instelling zorgt voor onvoorspelbare gegevenscorruptie.\nU kunt MediaWiki niet installeren tenzij deze instelling is uitgeschakeld.",
-       "config-magic-quotes-sybase": "'''Onherstelbare fout: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_sybase] is actief!'''\nDeze instelling zorgt voor onvoorspelbare gegevenscorruptie.\nU kunt MediaWiki niet installeren tenzij deze instelling is uitgeschakeld.",
        "config-mbstring": "'''Onherstelbare fout: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] is actief!'''\nDeze instelling zorgt voor onvoorspelbare gegevenscorruptie.\nU kunt MediaWiki niet installeren tenzij deze instelling is uitgeschakeld.",
-       "config-safe-mode": "'''Waarschuwing:'''\n'''PHP's [http://www.php.net/features.safe-mode veilige modus] is actief.'''\nDit kan problemen veroorzaken, vooral bij het uploaden van bestanden en ondersteuning van <code>math</code>.",
        "config-xml-bad": "De XML-module van PHP ontbreekt.\nMediaWiki vereist functies in deze module en werkt niet in deze configuratie.\nMogelijk moet u het RPM-pakket php-xml installeren.",
        "config-pcre-old": "'''Onherstelbare fout:''' PCRE $1 of een latere versie is vereist.\nUw uitvoerbare versie van PHP is gekoppeld met PCRE $2.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE Meer informatie].",
        "config-pcre-no-utf8": "'''Fataal:''' de module PRCE van PHP lijkt te zijn gecompileerd zonder ondersteuning voor PCRE_UTF8.\nMediaWiki heeft ondersteuning voor UTF-8 nodig om correct te kunnen werken.",
        "config-email-auth": "E-mailbevestiging inschakelen",
        "config-email-auth-help": "Als deze instelling actief is, moeten gebruikers hun e-mailadres bevestigen via een verwijziging die zij per e-mail wordt toegezonden.\nAlleen bevestigde e-mailadressen kunnen e-mail ontvangen van andere gebruikers of wijzigingsnotificaties ontvangen.\nHet inschakelen van deze instelling wordt '''aangeraden''' voor openbare wiki's vanwege de mogelijkheden voor misbruik van e-mailmogelijkheden.",
        "config-email-sender": "E-mailadres voor antwoorden:",
-       "config-email-sender-help": "Voer het e-mailadres in dat u wilt gebruiken als antwoordadres voor uitgaande e-mail.\nAls een e-mail niet bezorgd kan worden, wordt dat op dit e-mailadres gemeld.\nVeel mailservers vereisen dat tenminste het domein bestaat.",
+       "config-email-sender-help": "Voer het e-mailadres in dat u wilt gebruiken als antwoordadres voor uitgaande e-mail.\nAls een e-mail niet bezorgd kan worden, wordt dat op dit e-mailadres gemeld.\nVeel mailservers vereisen dat ten minste het domein bestaat.",
        "config-upload-settings": "Afbeeldingen en bestanden uploaden",
        "config-upload-enable": "Uploaden van bestanden inschakelen",
        "config-upload-help": "Het toestaan van het uploaden van bestanden stelt uw server mogelijk bloot aan beveiligingsrisico's.\nEr is meer [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Security informatie over beveiliging] beschikbaar in de handleiding.\n\nOm het bestandsuploads mogelijk te maken kunt u de rechten op de submap <code>images</code> onder de hoofdmap van MediaWiki aanpassen, zodat de webserver erin kan schrijven.\nDaarmee wordt deze functie ingeschakeld.",
        "config-extensions": "Uitbreidingen",
        "config-extensions-help": "De bovenstaande uitbreidingen zijn aangetroffen in de map <code>./extensions</code>.\n\nMogelijk moet u aanvullende instellingen maken, maar u kunt deze uitbreidingen nu inschakelen.",
        "config-skins": "Vormgevingen",
-       "config-skins-help": "De hierboven weergegeven uiterlijken zijn aangetroffen in de map <code>./skins</code>. U moet tenminste één uiterlijk inschakelen en het standaard uiterlijk kiezen.",
+       "config-skins-help": "De hierboven weergegeven uiterlijken zijn aangetroffen in de map <code>./skins</code>. U moet ten minste één uiterlijk inschakelen en het standaard uiterlijk kiezen.",
        "config-skins-use-as-default": "Als standaard vormgeving instellen",
        "config-skins-missing": "Er zijn geen uiterlijken aangetroffen. MediaWiki gebruikt een basisuiterlijk totdat u een uiterlijk installeert.",
        "config-skins-must-enable-some": "U moet minstens één vormgeving kiezen om in te schakelen.",
index 5f4dda9..ece29e8 100644 (file)
@@ -349,7 +349,7 @@ class CSSMin {
                                                        $url = $match['file'] . $match['query'];
                                                        $file = $local . $match['file'];
                                                        if (
-                                                               !CSSMin::isRemoteUrl( $url ) && !CSSMin::isLocalUrl( $url )
+                                                               !self::isRemoteUrl( $url ) && !self::isLocalUrl( $url )
                                                                && file_exists( $file )
                                                        ) {
                                                                $mimeTypes[ CSSMin::getMimeType( $file ) ] = true;
@@ -391,11 +391,10 @@ class CSSMin {
        /**
         * Is this CSS rule referencing a remote URL?
         *
-        * @private Until we require PHP 5.5 and we can access self:: from closures.
         * @param string $maybeUrl
         * @return bool
         */
-       public static function isRemoteUrl( $maybeUrl ) {
+       protected static function isRemoteUrl( $maybeUrl ) {
                if ( substr( $maybeUrl, 0, 2 ) === '//' || parse_url( $maybeUrl, PHP_URL_SCHEME ) ) {
                        return true;
                }
@@ -405,11 +404,10 @@ class CSSMin {
        /**
         * Is this CSS rule referencing a local URL?
         *
-        * @private Until we require PHP 5.5 and we can access self:: from closures.
         * @param string $maybeUrl
         * @return bool
         */
-       public static function isLocalUrl( $maybeUrl ) {
+       protected static function isLocalUrl( $maybeUrl ) {
                if ( $maybeUrl !== '' && $maybeUrl[0] === '/' && !self::isRemoteUrl( $maybeUrl ) ) {
                        return true;
                }
index 12a673a..6d26419 100644 (file)
@@ -269,8 +269,6 @@ class ObjectCache {
         */
        public static function newAccelerator( $params = [], $fallback = null ) {
                if ( $fallback === null ) {
-                       // The is_array check here is needed because in PHP 5.3:
-                       // $a = 'hash'; isset( $params['fallback'] ); yields true
                        if ( is_array( $params ) && isset( $params['fallback'] ) ) {
                                $fallback = $params['fallback'];
                        } elseif ( !is_array( $params ) ) {
index 67e7ff7..477d1f7 100644 (file)
@@ -2087,7 +2087,7 @@ class Parser {
                // @codingStandardsIgnoreStart Squiz.WhiteSpace.SemicolonSpacing.Incorrect
                # Loop for each link
                for ( ; $line !== false && $line !== null; $a->next(), $line = $a->current() ) {
-                       // @codingStandardsIgnoreStart
+                       // @codingStandardsIgnoreEnd
 
                        # Check for excessive memory usage
                        if ( $holders->isBig() ) {
@@ -2119,10 +2119,8 @@ class Parser {
                                # [[Image:Foo.jpg|[http://example.com desc]]] <- having three ] in a row fucks up,
                                # the real problem is with the $e1 regex
                                # See bug 1300.
-                               #
                                # Still some problems for cases where the ] is meant to be outside punctuation,
                                # and no image is in sight. See bug 2095.
-                               #
                                if ( $text !== ''
                                        && substr( $m[3], 0, 1 ) === ']'
                                        && strpos( $text, '[' ) !== false
@@ -2133,7 +2131,7 @@ class Parser {
                                # fix up urlencoded title texts
                                if ( strpos( $m[1], '%' ) !== false ) {
                                        # Should anchors '#' also be rejected?
-                                       $m[1] = str_replace( array( '<', '>' ), array( '&lt;', '&gt;' ), rawurldecode( $m[1] ) );
+                                       $m[1] = str_replace( [ '<', '>' ], [ '&lt;', '&gt;' ], rawurldecode( $m[1] ) );
                                }
                                $trail = $m[3];
                        } elseif ( preg_match( $e1_img, $line, $m ) ) {
@@ -2312,10 +2310,10 @@ class Parser {
                        # @todo FIXME: Should do batch file existence checks, see comment below
                        if ( $ns == NS_MEDIA ) {
                                # Give extensions a chance to select the file revision for us
-                               $options = array();
+                               $options = [];
                                $descQuery = false;
                                Hooks::run( 'BeforeParserFetchFileAndTitle',
-                                       array( $this, $nt, &$options, &$descQuery ) );
+                                       [ $this, $nt, &$options, &$descQuery ] );
                                # Fetch and register the file (file title may be different via hooks)
                                list( $file, $nt ) = $this->fetchFileAndTitle( $nt, $options );
                                # Cloak with NOPARSE to avoid replacement in replaceExternalLinks
@@ -2326,15 +2324,14 @@ class Parser {
 
                        # Some titles, such as valid special pages or files in foreign repos, should
                        # be shown as bluelinks even though they're not included in the page table
-                       #
                        # @todo FIXME: isAlwaysKnown() can be expensive for file links; we should really do
                        # batch file existence checks for NS_FILE and NS_MEDIA
                        if ( $iw == '' && $nt->isAlwaysKnown() ) {
                                $this->mOutput->addLink( $nt );
-                               $s .= $this->makeKnownLinkHolder( $nt, $text, array(), $trail, $prefix );
+                               $s .= $this->makeKnownLinkHolder( $nt, $text, [], $trail, $prefix );
                        } else {
                                # Links will be added to the output link list after checking
-                               $s .= $holders->makeHolder( $nt, $text, array(), $trail, $prefix );
+                               $s .= $holders->makeHolder( $nt, $text, [], $trail, $prefix );
                        }
                }
                return $holders;
@@ -2354,7 +2351,7 @@ class Parser {
         * @param string $prefix
         * @return string HTML-wikitext mix oh yuck
         */
-       public function makeKnownLinkHolder( $nt, $text = '', $query = array(), $trail = '', $prefix = '' ) {
+       public function makeKnownLinkHolder( $nt, $text = '', $query = [], $trail = '', $prefix = '' ) {
                list( $inside, $trail ) = Linker::splitTrail( $trail );
 
                if ( is_string( $query ) ) {
@@ -2364,7 +2361,7 @@ class Parser {
                        $text = htmlspecialchars( $nt->getPrefixedText() );
                }
 
-               $link = Linker::linkKnown( $nt, "$prefix$text$inside", array(), $query );
+               $link = Linker::linkKnown( $nt, "$prefix$text$inside", [], $query );
 
                return $this->armorLinks( $link ) . $trail;
        }
@@ -2539,7 +2536,6 @@ class Parser {
                # Parsing through the text line by line.  The main thing
                # happening here is handling of block-level elements p, pre,
                # and making lists from lines starting with * # : etc.
-               #
                $textLines = StringUtils::explode( "\n", $text );
 
                $lastPrefix = $output = '';
@@ -2619,7 +2615,7 @@ class Parser {
                                }
 
                                # Open prefixes where appropriate.
-                               if (  $lastPrefix && $prefixLength > $commonPrefixLength ) {
+                               if ( $lastPrefix && $prefixLength > $commonPrefixLength ) {
                                        $output .= "\n";
                                }
                                while ( $prefixLength > $commonPrefixLength ) {
@@ -2666,7 +2662,9 @@ class Parser {
                                                $this->mInPre = true;
                                        }
                                        $bqOffset = 0;
-                                       while ( preg_match( '/<(\\/?)blockquote[\s>]/i', $t, $bqMatch, PREG_OFFSET_CAPTURE, $bqOffset ) ) {
+                                       while ( preg_match( '/<(\\/?)blockquote[\s>]/i', $t,
+                                               $bqMatch, PREG_OFFSET_CAPTURE, $bqOffset )
+                                       ) {
                                                $inBlockquote = !$bqMatch[1][0]; // is this a close tag?
                                                $bqOffset = $bqMatch[0][1] + strlen( $bqMatch[0][0] );
                                        }
@@ -2923,14 +2921,14 @@ class Parser {
                 * Some of these require message or data lookups and can be
                 * expensive to check many times.
                 */
-               if ( Hooks::run( 'ParserGetVariableValueVarCache', array( &$this, &$this->mVarCache ) ) ) {
+               if ( Hooks::run( 'ParserGetVariableValueVarCache', [ &$this, &$this->mVarCache ] ) ) {
                        if ( isset( $this->mVarCache[$index] ) ) {
                                return $this->mVarCache[$index];
                        }
                }
 
                $ts = wfTimestamp( TS_UNIX, $this->mOptions->getTimestamp() );
-               Hooks::run( 'ParserGetVariableValueTs', array( &$this, &$ts ) );
+               Hooks::run( 'ParserGetVariableValueTs', [ &$this, &$ts ] );
 
                $pageLang = $this->getFunctionLang();
 
@@ -3240,7 +3238,7 @@ class Parser {
                                $ret = null;
                                Hooks::run(
                                        'ParserGetVariableValueSwitch',
-                                       array( &$this, &$this->mVarCache, &$index, &$ret, &$frame )
+                                       [ &$this, &$this->mVarCache, &$index, &$ret, &$frame ]
                                );
 
                                return $ret;
@@ -3310,7 +3308,7 @@ class Parser {
                } else {
                        $w2 = '';
                }
-               return array( $w1, $trimmed, $w2 );
+               return [ $w1, $trimmed, $w2 ];
        }
 
        /**
@@ -3363,7 +3361,7 @@ class Parser {
         * @return array
         */
        public static function createAssocArgs( $args ) {
-               $assocArgs = array();
+               $assocArgs = [];
                $index = 1;
                foreach ( $args as $arg ) {
                        $eqpos = strpos( $arg, '=' );
@@ -3464,7 +3462,7 @@ class Parser {
                # $args is a list of argument nodes, starting from index 0, not including $part1
                # @todo FIXME: If piece['parts'] is null then the call to getLength()
                # below won't work b/c this $args isn't an object
-               $args = ( null == $piece['parts'] ) ? array() : $piece['parts'];
+               $args = ( null == $piece['parts'] ) ? [] : $piece['parts'];
 
                $profileSection = null; // profile templates
 
@@ -3530,8 +3528,9 @@ class Parser {
                        $colonPos = strpos( $part1, ':' );
                        if ( $colonPos !== false ) {
                                $func = substr( $part1, 0, $colonPos );
-                               $funcArgs = array( trim( substr( $part1, $colonPos + 1 ) ) );
-                               for ( $i = 0; $i < $args->getLength(); $i++ ) {
+                               $funcArgs = [ trim( substr( $part1, $colonPos + 1 ) ) ];
+                               $argsLength = $args->getLength();
+                               for ( $i = 0; $i < $argsLength; $i++ ) {
                                        $funcArgs[] = $args->item( $i );
                                }
                                try {
@@ -3588,7 +3587,7 @@ class Parser {
                                        // Pass the template arguments as URL parameters.
                                        // "uselang" will have no effect since the Language object
                                        // is forced to the one defined in ParserOptions.
-                                       $pageArgs = array();
+                                       $pageArgs = [];
                                        $argsLength = $args->getLength();
                                        for ( $i = 0; $i < $argsLength; $i++ ) {
                                                $bits = $args->item( $i )->splitArg();
@@ -3662,7 +3661,7 @@ class Parser {
                        if ( $profileSection ) {
                                $this->mProfiler->scopedProfileOut( $profileSection );
                        }
-                       return array( 'object' => $text );
+                       return [ 'object' => $text ];
                }
 
                # Expand DOM-style return values in a child frame
@@ -3722,9 +3721,9 @@ class Parser {
                }
 
                if ( $isLocalObj ) {
-                       $ret = array( 'object' => $text );
+                       $ret = [ 'object' => $text ];
                } else {
-                       $ret = array( 'text' => $text );
+                       $ret = [ 'text' => $text ];
                }
 
                return $ret;
@@ -3749,7 +3748,7 @@ class Parser {
         * @throws MWException
         * @return array
         */
-       public function callParserFunction( $frame, $function, array $args = array() ) {
+       public function callParserFunction( $frame, $function, array $args = [] ) {
                global $wgContLang;
 
                # Case sensitive functions
@@ -3761,7 +3760,7 @@ class Parser {
                        if ( isset( $this->mFunctionSynonyms[0][$function] ) ) {
                                $function = $this->mFunctionSynonyms[0][$function];
                        } else {
-                               return array( 'found' => false );
+                               return [ 'found' => false ];
                        }
                }
 
@@ -3772,15 +3771,15 @@ class Parser {
                        throw new MWException( "Tag hook for $function is not callable\n" );
                }
 
-               $allArgs = array( &$this );
+               $allArgs = [ &$this ];
                if ( $flags & self::SFH_OBJECT_ARGS ) {
                        # Convert arguments to PPNodes and collect for appending to $allArgs
-                       $funcArgs = array();
+                       $funcArgs = [];
                        foreach ( $args as $k => $v ) {
                                if ( $v instanceof PPNode || $k === 0 ) {
                                        $funcArgs[] = $v;
                                } else {
-                                       $funcArgs[] = $this->mPreprocessor->newPartNodeArray( array( $k => $v ) )->item( 0 );
+                                       $funcArgs[] = $this->mPreprocessor->newPartNodeArray( [ $k => $v ] )->item( 0 );
                                }
                        }
 
@@ -3806,18 +3805,18 @@ class Parser {
                # string or an array containing the string and any flags. This mungs
                # things around to match what this method should return.
                if ( !is_array( $result ) ) {
-                       $result = array(
+                       $result =[
                                'found' => true,
                                'text' => $result,
-                       );
+                       ];
                } else {
                        if ( isset( $result[0] ) && !isset( $result['text'] ) ) {
                                $result['text'] = $result[0];
                        }
                        unset( $result[0] );
-                       $result += array(
+                       $result += [
                                'found' => true,
-                       );
+                       ];
                }
 
                $noparse = true;
@@ -3855,7 +3854,7 @@ class Parser {
                        $titleText = $title->getPrefixedDBkey();
                }
                if ( isset( $this->mTplDomCache[$titleText] ) ) {
-                       return array( $this->mTplDomCache[$titleText], $title );
+                       return [ $this->mTplDomCache[$titleText], $title ];
                }
 
                # Cache miss, go to the database
@@ -3863,7 +3862,7 @@ class Parser {
 
                if ( $text === false ) {
                        $this->mTplDomCache[$titleText] = false;
-                       return array( false, $title );
+                       return [ false, $title ];
                }
 
                $dom = $this->preprocessToDom( $text, self::PTD_FOR_INCLUSION );
@@ -3871,10 +3870,10 @@ class Parser {
 
                if ( !$title->equals( $cacheTitle ) ) {
                        $this->mTplRedirCache[$cacheTitle->getPrefixedDBkey()] =
-                               array( $title->getNamespace(), $cdb = $title->getDBkey() );
+                               [ $title->getNamespace(), $cdb = $title->getDBkey() ];
                }
 
-               return array( $dom, $title );
+               return [ $dom, $title ];
        }
 
        /**
@@ -3940,7 +3939,7 @@ class Parser {
                                }
                        }
                }
-               return array( $text, $finalTitle );
+               return [ $text, $finalTitle ];
        }
 
        /**
@@ -3965,22 +3964,24 @@ class Parser {
        public static function statelessFetchTemplate( $title, $parser = false ) {
                $text = $skip = false;
                $finalTitle = $title;
-               $deps = array();
+               $deps = [];
 
                # Loop to fetch the article, with up to 1 redirect
+               // @codingStandardsIgnoreStart Generic.CodeAnalysis.ForLoopWithTestFunctionCall.NotAllowed
                for ( $i = 0; $i < 2 && is_object( $title ); $i++ ) {
+                       // @codingStandardsIgnoreEnd
                        # Give extensions a chance to select the revision instead
                        $id = false; # Assume current
                        Hooks::run( 'BeforeParserFetchTemplateAndtitle',
-                               array( $parser, $title, &$skip, &$id ) );
+                               [ $parser, $title, &$skip, &$id ] );
 
                        if ( $skip ) {
                                $text = false;
-                               $deps[] = array(
+                               $deps[] = [
                                        'title' => $title,
                                        'page_id' => $title->getArticleID(),
                                        'rev_id' => null
-                               );
+                               ];
                                break;
                        }
                        # Get the revision
@@ -3998,16 +3999,16 @@ class Parser {
                                $linkCache->addBadLinkObj( $title );
                        }
 
-                       $deps[] = array(
+                       $deps[] = [
                                'title' => $title,
                                'page_id' => $title->getArticleID(),
-                               'rev_id' => $rev_id );
+                               'rev_id' => $rev_id ];
                        if ( $rev && !$title->equals( $rev->getTitle() ) ) {
                                # We fetched a rev from a different title; register it too...
-                               $deps[] = array(
+                               $deps[] = [
                                        'title' => $rev->getTitle(),
                                        'page_id' => $rev->getPage(),
-                                       'rev_id' => $rev_id );
+                                       'rev_id' => $rev_id ];
                        }
 
                        if ( $rev ) {
@@ -4037,10 +4038,10 @@ class Parser {
                        $finalTitle = $title;
                        $title = $content->getRedirectTarget();
                }
-               return array(
+               return [
                        'text' => $text,
                        'finalTitle' => $finalTitle,
-                       'deps' => $deps );
+                       'deps' => $deps ];
        }
 
        /**
@@ -4050,7 +4051,7 @@ class Parser {
         * @param array $options Array of options to RepoGroup::findFile
         * @return File|bool
         */
-       public function fetchFile( $title, $options = array() ) {
+       public function fetchFile( $title, $options = [] ) {
                $res = $this->fetchFileAndTitle( $title, $options );
                return $res[0];
        }
@@ -4062,7 +4063,7 @@ class Parser {
         * @param array $options Array of options to RepoGroup::findFile
         * @return array ( File or false, Title of file )
         */
-       public function fetchFileAndTitle( $title, $options = array() ) {
+       public function fetchFileAndTitle( $title, $options = [] ) {
                $file = $this->fetchFileNoRegister( $title, $options );
 
                $time = $file ? $file->getTimestamp() : false;
@@ -4074,7 +4075,7 @@ class Parser {
                        $title = $file->getTitle();
                        $this->mOutput->addImage( $title->getDBkey(), $time, $sha1 );
                }
-               return array( $file, $title );
+               return [ $file, $title ];
        }
 
        /**
@@ -4087,7 +4088,7 @@ class Parser {
         * @param array $options Array of options to RepoGroup::findFile
         * @return File|bool
         */
-       protected function fetchFileNoRegister( $title, $options = array() ) {
+       protected function fetchFileNoRegister( $title, $options = [] ) {
                if ( isset( $options['broken'] ) ) {
                        $file = false; // broken thumbnail forced by hook
                } elseif ( isset( $options['sha1'] ) ) { // get by (sha1,timestamp)
@@ -4113,7 +4114,7 @@ class Parser {
                        return wfMessage( 'scarytranscludedisabled' )->inContentLanguage()->text();
                }
 
-               $url = $title->getFullURL( array( 'action' => $action ) );
+               $url = $title->getFullURL( [ 'action' => $action ] );
 
                if ( strlen( $url ) > 255 ) {
                        return wfMessage( 'scarytranscludetoolong' )->inContentLanguage()->text();
@@ -4129,13 +4130,13 @@ class Parser {
                global $wgTranscludeCacheExpiry;
                $dbr = wfGetDB( DB_SLAVE );
                $tsCond = $dbr->timestamp( time() - $wgTranscludeCacheExpiry );
-               $obj = $dbr->selectRow( 'transcache', array( 'tc_time', 'tc_contents' ),
-                               array( 'tc_url' => $url, "tc_time >= " . $dbr->addQuotes( $tsCond ) ) );
+               $obj = $dbr->selectRow( 'transcache', [ 'tc_time', 'tc_contents' ],
+                               [ 'tc_url' => $url, "tc_time >= " . $dbr->addQuotes( $tsCond ) ] );
                if ( $obj ) {
                        return $obj->tc_contents;
                }
 
-               $req = MWHttpRequest::factory( $url, array(), __METHOD__ );
+               $req = MWHttpRequest::factory( $url, [], __METHOD__ );
                $status = $req->execute(); // Status object
                if ( $status->isOK() ) {
                        $text = $req->getContent();
@@ -4148,11 +4149,11 @@ class Parser {
                }
 
                $dbw = wfGetDB( DB_MASTER );
-               $dbw->replace( 'transcache', array( 'tc_url' ), array(
+               $dbw->replace( 'transcache', [ 'tc_url' ], [
                        'tc_url' => $url,
                        'tc_time' => $dbw->timestamp( time() ),
                        'tc_contents' => $text
-               ) );
+               ] );
                return $text;
        }
 
@@ -4195,9 +4196,9 @@ class Parser {
                        $text .= $error;
                }
                if ( $object !== false ) {
-                       $ret = array( 'object' => $object );
+                       $ret = [ 'object' => $object ];
                } else {
-                       $ret = array( 'text' => $text );
+                       $ret = [ 'text' => $text ];
                }
 
                return $ret;
@@ -4245,14 +4246,14 @@ class Parser {
                                        throw new MWException( "Tag hook for $name is not callable\n" );
                                }
                                $output = call_user_func_array( $this->mTagHooks[$name],
-                                       array( $content, $attributes, $this, $frame ) );
+                                       [ $content, $attributes, $this, $frame ] );
                        } elseif ( isset( $this->mFunctionTagHooks[$name] ) ) {
                                list( $callback, ) = $this->mFunctionTagHooks[$name];
                                if ( !is_callable( $callback ) ) {
                                        throw new MWException( "Tag hook for $name is not callable\n" );
                                }
 
-                               $output = call_user_func_array( $callback, array( &$this, $frame, $content, $attributes ) );
+                               $output = call_user_func_array( $callback, [ &$this, $frame, $content, $attributes ] );
                        } else {
                                $output = '<span class="error">Invalid tag extension name: ' .
                                        htmlspecialchars( $name ) . '</span>';
@@ -4360,7 +4361,6 @@ class Parser {
                        $this->addTrackingCategory( 'hidden-category-category' );
                }
                # (bug 8068) Allow control over whether robots index a page.
-               #
                # @todo FIXME: Bug 14899: __INDEX__ always overrides __NOINDEX__ here!  This
                # is not desirable, the last one on the page should win.
                if ( isset( $this->mDoubleUnderscores['noindex'] ) && $this->mTitle->canUseNoindex() ) {
@@ -4421,7 +4421,7 @@ class Parser {
 
                # Get all headlines for numbering them and adding funky stuff like [edit]
                # links - this is for later, but we need the number of headlines right now
-               $matches = array();
+               $matches = [];
                $numMatches = preg_match_all(
                        '/<H(?P<level>[1-6])(?P<attrib>.*?>)\s*(?P<header>[\s\S]*?)\s*<\/H[1-6] *>/i',
                        $text,
@@ -4460,9 +4460,9 @@ class Parser {
                # passed to the skin functions. These are determined here
                $toc = '';
                $full = '';
-               $head = array();
-               $sublevelCount = array();
-               $levelCount = array();
+               $head = [];
+               $sublevelCount = [];
+               $levelCount = [];
                $level = 0;
                $prevlevel = 0;
                $toclevel = 0;
@@ -4475,17 +4475,17 @@ class Parser {
                $root = $this->preprocessToDom( $origText );
                $node = $root->getFirstChild();
                $byteOffset = 0;
-               $tocraw = array();
-               $refers = array();
+               $tocraw = [];
+               $refers = [];
 
-               $headlines = $numMatches !== false ? $matches[3] : array();
+               $headlines = $numMatches !== false ? $matches[3] : [];
 
                foreach ( $headlines as $headline ) {
                        $isTemplate = false;
                        $titleText = false;
                        $sectionIndex = false;
                        $numbering = '';
-                       $markerMatches = array();
+                       $markerMatches = [];
                        if ( preg_match( "/^$markerRegex/", $headline, $markerMatches ) ) {
                                $serial = $markerMatches[1];
                                list( $titleText, $sectionIndex ) = $this->mHeadings[$serial];
@@ -4574,15 +4574,14 @@ class Parser {
                        # * <b> (r105284)
                        # * <bdi> (bug 72884)
                        # * <span dir="rtl"> and <span dir="ltr"> (bug 35167)
-                       #
                        # We strip any parameter from accepted tags (second regex), except dir="rtl|ltr" from <span>,
                        # to allow setting directionality in toc items.
                        $tocline = preg_replace(
-                               array(
+                               [
                                        '#<(?!/?(span|sup|sub|bdi|i|b)(?: [^>]*)?>).*?>#',
                                        '#<(/?(?:span(?: dir="(?:rtl|ltr)")?|sup|sub|bdi|i|b))(?: .*?)?>#'
-                               ),
-                               array( '', '<$1>' ),
+                               ],
+                               [ '', '<$1>' ],
                                $safeHeadline
                        );
 
@@ -4603,7 +4602,6 @@ class Parser {
                        if ( $wgExperimentalHtmlIds ) {
                                # For reverse compatibility, provide an id that's
                                # HTML4-compatible, like we used to.
-                               #
                                # It may be worth noting, academically, that it's possible for
                                # the legacy anchor to conflict with a non-legacy headline
                                # anchor on the page.  In this case likely the "correct" thing
@@ -4612,7 +4610,7 @@ class Parser {
                                # to type in section names like "abc_.D7.93.D7.90.D7.A4"
                                # manually, so let's not bother worrying about it.
                                $legacyHeadline = Sanitizer::escapeId( $safeHeadline,
-                                       array( 'noninitial', 'legacy' ) );
+                                       [ 'noninitial', 'legacy' ] );
                                $safeHeadline = Sanitizer::escapeId( $safeHeadline );
 
                                if ( $legacyHeadline == $safeHeadline ) {
@@ -4640,14 +4638,18 @@ class Parser {
                        $anchor = $safeHeadline;
                        $legacyAnchor = $legacyHeadline;
                        if ( isset( $refers[$arrayKey] ) ) {
+                               // @codingStandardsIgnoreStart 
                                for ( $i = 2; isset( $refers["${arrayKey}_$i"] ); ++$i );
+                               // @codingStandardsIgnoreEnd
                                $anchor .= "_$i";
                                $refers["${arrayKey}_$i"] = true;
                        } else {
                                $refers[$arrayKey] = true;
                        }
                        if ( $legacyHeadline !== false && isset( $refers[$legacyArrayKey] ) ) {
+                               // @codingStandardsIgnoreStart 
                                for ( $i = 2; isset( $refers["${legacyArrayKey}_$i"] ); ++$i );
+                               // @codingStandardsIgnoreEnd
                                $legacyAnchor .= "_$i";
                                $refers["${legacyArrayKey}_$i"] = true;
                        } else {
@@ -4659,7 +4661,7 @@ class Parser {
                                # the two are different if the line contains a link
                                $headline = Html::element(
                                        'span',
-                                       array( 'class' => 'mw-headline-number' ),
+                                       [ 'class' => 'mw-headline-number' ],
                                        $numbering
                                ) . ' ' . $headline;
                        }
@@ -4683,7 +4685,7 @@ class Parser {
                                        $frame->expand( $node, PPFrame::RECOVER_ORIG ) ) );
                                $node = $node->getNextSibling();
                        }
-                       $tocraw[] = array(
+                       $tocraw[] = [
                                'toclevel' => $toclevel,
                                'level' => $level,
                                'line' => $tocline,
@@ -4692,7 +4694,7 @@ class Parser {
                                'fromtitle' => $titleText,
                                'byteoffset' => ( $noOffset ? null : $byteOffset ),
                                'anchor' => $anchor,
-                       );
+                       ];
 
                        # give headline the correct <h#> tag
                        if ( $maybeShowEditLink && $sectionIndex !== false ) {
@@ -4763,7 +4765,7 @@ class Parser {
                $i = 0;
 
                // build an array of document sections
-               $sections = array();
+               $sections = [];
                foreach ( $blocks as $block ) {
                        // $head is zero-based, sections aren't.
                        if ( empty( $head[$i - 1] ) ) {
@@ -4782,7 +4784,7 @@ class Parser {
                         * &$sectionContent : ref to the content of the section
                         * $showEditLinks : boolean describing whether this section has an edit link
                         */
-                       Hooks::run( 'ParserSectionCreate', array( $this, $i, &$sections[$i], $showEditLink ) );
+                       Hooks::run( 'ParserSectionCreate', [ $this, $i, &$sections[$i], $showEditLink ] );
 
                        $i++;
                }
@@ -4822,17 +4824,17 @@ class Parser {
                $this->startParse( $title, $options, self::OT_WIKI, $clearState );
                $this->setUser( $user );
 
-               $pairs = array(
+               $pairs = [
                        "\r\n" => "\n",
                        "\r" => "\n",
-               );
+               ];
                $text = str_replace( array_keys( $pairs ), array_values( $pairs ), $text );
                if ( $options->getPreSaveTransform() ) {
                        $text = $this->pstPass2( $text, $user );
                }
                $text = $this->mStripState->unstripBoth( $text );
 
-               $this->setUser( null ); #Reset
+               $this->setUser( null ); # Reset
 
                return $text;
        }
@@ -4869,11 +4871,11 @@ class Parser {
 
                # Signatures
                $sigText = $this->getUserSig( $user );
-               $text = strtr( $text, array(
+               $text = strtr( $text, [
                        '~~~~~' => $d,
                        '~~~~' => "$sigText $d",
                        '~~~' => $sigText
-               ) );
+               ] );
 
                # Context links ("pipe tricks"): [[|name]] and [[name (context)|]]
                $tc = '[' . Title::legalChars() . ']';
@@ -4894,7 +4896,7 @@ class Parser {
                $text = preg_replace( $p3, '[[\\1\\2\\3\\4|\\2]]', $text );
 
                $t = $this->mTitle->getText();
-               $m = array();
+               $m = [];
                if ( preg_match( "/^($nc+:|)$tc+?( \\($tc+\\))$/", $t, $m ) ) {
                        $text = preg_replace( $p2, "[[$m[1]\\1$m[2]|\\1]]", $text );
                } elseif ( preg_match( "/^($nc+:|)$tc+?(, $tc+|)$/", $t, $m ) && "$m[1]$m[2]" != '' ) {
@@ -5159,8 +5161,8 @@ class Parser {
         * Remove all tag hooks
         */
        public function clearTagHooks() {
-               $this->mTagHooks = array();
-               $this->mFunctionTagHooks = array();
+               $this->mTagHooks = [];
+               $this->mFunctionTagHooks = [];
                $this->mStripList = $this->mDefaultStripList;
        }
 
@@ -5211,7 +5213,7 @@ class Parser {
                global $wgContLang;
 
                $oldVal = isset( $this->mFunctionHooks[$id] ) ? $this->mFunctionHooks[$id][0] : null;
-               $this->mFunctionHooks[$id] = array( $callback, $flags );
+               $this->mFunctionHooks[$id] = [ $callback, $flags ];
 
                # Add to function cache
                $mw = MagicWord::get( $id );
@@ -5266,7 +5268,7 @@ class Parser {
                }
                $old = isset( $this->mFunctionTagHooks[$tag] ) ?
                        $this->mFunctionTagHooks[$tag] : null;
-               $this->mFunctionTagHooks[$tag] = array( $callback, $flags );
+               $this->mFunctionTagHooks[$tag] = [ $callback, $flags ];
 
                if ( !in_array( $tag, $this->mStripList ) ) {
                        $this->mStripList[] = $tag;
@@ -5353,13 +5355,13 @@ class Parser {
                }
                $ig->setAdditionalOptions( $params );
 
-               Hooks::run( 'BeforeParserrenderImageGallery', array( &$this, &$ig ) );
+               Hooks::run( 'BeforeParserrenderImageGallery', [ &$this, &$ig ] );
 
                $lines = StringUtils::explode( "\n", $text );
                foreach ( $lines as $line ) {
                        # match lines like these:
                        # Image:someimage.jpg|This is some image
-                       $matches = array();
+                       $matches = [];
                        preg_match( "/^([^|]+)(\\|(.*))?$/", $line, $matches );
                        # Skip empty lines
                        if ( count( $matches ) == 0 ) {
@@ -5378,18 +5380,18 @@ class Parser {
                        # We need to get what handler the file uses, to figure out parameters.
                        # Note, a hook can overide the file name, and chose an entirely different
                        # file (which potentially could be of a different type and have different handler).
-                       $options = array();
+                       $options = [];
                        $descQuery = false;
                        Hooks::run( 'BeforeParserFetchFileAndTitle',
-                               array( $this, $title, &$options, &$descQuery ) );
+                               [ $this, $title, &$options, &$descQuery ] );
                        # Don't register it now, as ImageGallery does that later.
                        $file = $this->fetchFileNoRegister( $title, $options );
                        $handler = $file ? $file->getHandler() : false;
 
-                       $paramMap = array(
+                       $paramMap = [
                                'img_alt' => 'gallery-internal-alt',
                                'img_link' => 'gallery-internal-link',
-                       );
+                       ];
                        if ( $handler ) {
                                $paramMap = $paramMap + $handler->getParamMap();
                                // We don't want people to specify per-image widths.
@@ -5402,7 +5404,7 @@ class Parser {
                        $label = '';
                        $alt = '';
                        $link = '';
-                       $handlerOptions = array();
+                       $handlerOptions = [];
                        if ( isset( $matches[3] ) ) {
                                // look for an |alt= definition while trying not to break existing
                                // captions with multiple pipes (|) in it, until a more sensible grammar
@@ -5427,7 +5429,7 @@ class Parser {
                                                        $chars = self::EXT_LINK_URL_CLASS;
                                                        $addr = self::EXT_LINK_ADDR;
                                                        $prots = $this->mUrlProtocols;
-                                                       //check to see if link matches an absolute url, if not then it must be a wiki link.
+                                                       // check to see if link matches an absolute url, if not then it must be a wiki link.
                                                        if ( preg_match( "/^($prots)$addr$chars*$/u", $linkValue ) ) {
                                                                $link = $linkValue;
                                                        } else {
@@ -5460,7 +5462,7 @@ class Parser {
                        $ig->add( $title, $label, $alt, $link, $handlerOptions );
                }
                $html = $ig->toHTML();
-               Hooks::run( 'AfterParserFetchFileAndTitle', array( $this, $ig, &$html ) );
+               Hooks::run( 'AfterParserFetchFileAndTitle', [ $this, $ig, &$html ] );
                return $html;
        }
 
@@ -5476,20 +5478,20 @@ class Parser {
                }
                if ( !isset( $this->mImageParams[$handlerClass] ) ) {
                        # Initialise static lists
-                       static $internalParamNames = array(
-                               'horizAlign' => array( 'left', 'right', 'center', 'none' ),
-                               'vertAlign' => array( 'baseline', 'sub', 'super', 'top', 'text-top', 'middle',
-                                       'bottom', 'text-bottom' ),
-                               'frame' => array( 'thumbnail', 'manualthumb', 'framed', 'frameless',
-                                       'upright', 'border', 'link', 'alt', 'class' ),
-                       );
+                       static $internalParamNames = [
+                               'horizAlign' => [ 'left', 'right', 'center', 'none' ],
+                               'vertAlign' => [ 'baseline', 'sub', 'super', 'top', 'text-top', 'middle',
+                                       'bottom', 'text-bottom' ],
+                               'frame' => [ 'thumbnail', 'manualthumb', 'framed', 'frameless',
+                                       'upright', 'border', 'link', 'alt', 'class' ],
+                       ];
                        static $internalParamMap;
                        if ( !$internalParamMap ) {
-                               $internalParamMap = array();
+                               $internalParamMap = [];
                                foreach ( $internalParamNames as $type => $names ) {
                                        foreach ( $names as $name ) {
                                                $magicName = str_replace( '-', '_', "img_$name" );
-                                               $internalParamMap[$magicName] = array( $type, $name );
+                                               $internalParamMap[$magicName] = [ $type, $name ];
                                        }
                                }
                        }
@@ -5499,13 +5501,13 @@ class Parser {
                        if ( $handler ) {
                                $handlerParamMap = $handler->getParamMap();
                                foreach ( $handlerParamMap as $magic => $paramName ) {
-                                       $paramMap[$magic] = array( 'handler', $paramName );
+                                       $paramMap[$magic] = [ 'handler', $paramName ];
                                }
                        }
                        $this->mImageParams[$handlerClass] = $paramMap;
                        $this->mImageParamsMagicArray[$handlerClass] = new MagicWordArray( array_keys( $paramMap ) );
                }
-               return array( $this->mImageParams[$handlerClass], $this->mImageParamsMagicArray[$handlerClass] );
+               return [ $this->mImageParams[$handlerClass], $this->mImageParamsMagicArray[$handlerClass] ];
        }
 
        /**
@@ -5546,10 +5548,10 @@ class Parser {
                $parts = StringUtils::explode( "|", $options );
 
                # Give extensions a chance to select the file revision for us
-               $options = array();
+               $options = [];
                $descQuery = false;
                Hooks::run( 'BeforeParserFetchFileAndTitle',
-                       array( $this, $title, &$options, &$descQuery ) );
+                       [ $this, $title, &$options, &$descQuery ] );
                # Fetch and register the file (file title may be different via hooks)
                list( $file, $title ) = $this->fetchFileAndTitle( $title, $options );
 
@@ -5564,8 +5566,8 @@ class Parser {
 
                # Process the input parameters
                $caption = '';
-               $params = array( 'frame' => array(), 'handler' => array(),
-                       'horizAlign' => array(), 'vertAlign' => array() );
+               $params = [ 'frame' => [], 'handler' => [],
+                       'horizAlign' => [], 'vertAlign' => [] ];
                $seenformat = false;
                foreach ( $parts as $part ) {
                        $part = trim( $part );
@@ -5678,13 +5680,11 @@ class Parser {
                # came to also set the caption, ordinary text after the image -- which
                # makes no sense, because that just repeats the text multiple times in
                # screen readers.  It *also* came to set the title attribute.
-               #
                # Now that we have an alt attribute, we should not set the alt text to
                # equal the caption: that's worse than useless, it just repeats the
                # text.  This is the framed/thumbnail case.  If there's no caption, we
                # use the unnamed parameter for alt text as well, just for the time be-
                # ing, if the unnamed param is set and the alt param is not.
-               #
                # For the future, we need to figure out if we want to tweak this more,
                # e.g., introducing a title= parameter for the title; ignoring the un-
                # named parameter entirely for images without a caption; adding an ex-
@@ -5713,7 +5713,7 @@ class Parser {
                        $params['frame']['title'] = $this->stripAltText( $caption, $holders );
                }
 
-               Hooks::run( 'ParserMakeImageParams', array( $title, $file, &$params, $this ) );
+               Hooks::run( 'ParserMakeImageParams', [ $title, $file, &$params, $this ] );
 
                # Linker does the rest
                $time = isset( $options['time'] ) ? $options['time'] : false;
@@ -5803,10 +5803,10 @@ class Parser {
         * @return string
         */
        public function replaceTransparentTags( $text ) {
-               $matches = array();
+               $matches = [];
                $elements = array_keys( $this->mTransparentTagHooks );
                $text = self::extractTagsAndParams( $elements, $text, $matches );
-               $replacements = array();
+               $replacements = [];
 
                foreach ( $matches as $marker => $data ) {
                        list( $element, $content, $params, $tag ) = $data;
@@ -5814,7 +5814,7 @@ class Parser {
                        if ( isset( $this->mTransparentTagHooks[$tagName] ) ) {
                                $output = call_user_func_array(
                                        $this->mTransparentTagHooks[$tagName],
-                                       array( $content, $params, $this )
+                                       [ $content, $params, $this ]
                                );
                        } else {
                                $output = $tag;
@@ -6051,7 +6051,6 @@ class Parser {
 
                        # The cryptic '' timezone parameter tells to use the site-default
                        # timezone offset instead of the user settings.
-                       #
                        # Since this value will be saved into the parser cache, served
                        # to other users, and potentially even used inside links and such,
                        # it needs to be consistent for all visitors.
@@ -6168,7 +6167,7 @@ class Parser {
                # Strip out wikitext links(they break the anchor)
                $text = $this->stripSectionName( $text );
                $text = Sanitizer::normalizeSectionNameWhitespace( $text );
-               return '#' . Sanitizer::escapeId( $text, array( 'noninitial', 'legacy' ) );
+               return '#' . Sanitizer::escapeId( $text, [ 'noninitial', 'legacy' ] );
        }
 
        /**
@@ -6214,7 +6213,9 @@ class Parser {
         *
         * @return string
         */
-       public function testSrvus( $text, Title $title, ParserOptions $options, $outputType = self::OT_HTML ) {
+       public function testSrvus( $text, Title $title, ParserOptions $options,
+               $outputType = self::OT_HTML
+       ) {
                $magicScopeVariable = $this->lock();
                $this->startParse( $title, $options, $outputType, true );
 
@@ -6311,12 +6312,12 @@ class Parser {
         * @return array
         */
        public function serializeHalfParsedText( $text ) {
-               $data = array(
+               $data = [
                        'text' => $text,
                        'version' => self::HALF_PARSED_VERSION,
                        'stripState' => $this->mStripState->getSubState( $text ),
                        'linkHolders' => $this->mLinkHolders->getSubArray( $text )
-               );
+               ];
                return $data;
        }
 
@@ -6341,7 +6342,7 @@ class Parser {
                }
 
                # First, extract the strip state.
-               $texts = array( $data['text'] );
+               $texts = [ $data['text'] ];
                $texts = $this->mStripState->merge( $data['stripState'], $texts );
 
                # Now renumber links
@@ -6373,11 +6374,11 @@ class Parser {
         * @since 1.20
         */
        public function parseWidthParam( $value ) {
-               $parsedWidthParam = array();
+               $parsedWidthParam = [];
                if ( $value === '' ) {
                        return $parsedWidthParam;
                }
-               $m = array();
+               $m = [];
                # (bug 13500) In both cases (width/height and width only),
                # permit trailing "px" for backward compatibility.
                if ( preg_match( '/^([0-9]*)x([0-9]*)\s*(?:px)?\s*$/', $value, $m ) ) {
@@ -6426,7 +6427,7 @@ class Parser {
         * @since 1.24
         */
        public static function stripOuterParagraph( $html ) {
-               $m = array();
+               $m = [];
                if ( preg_match( '/^<p>(.*)\n?<\/p>\n?$/sU', $html, $m ) ) {
                        if ( strpos( $m[1], '</p>' ) === false ) {
                                $html = $m[1];
index df0e386..24baae4 100644 (file)
@@ -722,9 +722,9 @@ class PPDStack_Hash extends PPDStack {
  */
 // @codingStandardsIgnoreStart Squiz.Classes.ValidClassName.NotCamelCaps
 class PPDStackElement_Hash extends PPDStackElement {
-       // @codingStandardsIgnoreENd
+       // @codingStandardsIgnoreEnd
 
-       public function __construct( $data = array() ) {
+       public function __construct( $data = [] ) {
                $this->partClass = 'PPDPart_Hash';
                parent::__construct( $data );
        }
index bc9b26d..33395f7 100644 (file)
@@ -234,9 +234,7 @@ class ExtensionRegistry {
                foreach ( $info['globals'] as $key => $val ) {
                        // If a merge strategy is set, read it and remove it from the value
                        // so it doesn't accidentally end up getting set.
-                       // Need to check $val is an array for PHP 5.3 which will return
-                       // true on isset( 'string'['foo'] ).
-                       if ( isset( $val[self::MERGE_STRATEGY] ) && is_array( $val ) ) {
+                       if ( is_array( $val ) && isset( $val[self::MERGE_STRATEGY] ) ) {
                                $mergeStrategy = $val[self::MERGE_STRATEGY];
                                unset( $val[self::MERGE_STRATEGY] );
                        } else {
index 5573ec7..e7a5e2e 100644 (file)
@@ -475,12 +475,21 @@ final class SessionManager implements SessionManagerInterface {
                        $status = $user->addToDatabase();
                        if ( !$status->isOK() ) {
                                // @codeCoverageIgnoreStart
-                               $logger->error( __METHOD__ . ': failed with message ' . $status->getWikiText(),
-                                       [
-                                               'username' => $userName,
-                               ] );
-                               $user->setId( 0 );
-                               $user->loadFromId();
+                               // double-check for a race condition (T70012)
+                               $id = User::idFromName( $user->getName(), User::READ_LATEST );
+                               if ( $id ) {
+                                       $logger->info( __METHOD__ . ': tried to autocreate existing user',
+                                               [
+                                                       'username' => $userName,
+                                               ] );
+                               } else {
+                                       $logger->error( __METHOD__ . ': failed with message ' . $status->getWikiText(),
+                                               [
+                                                       'username' => $userName,
+                                               ] );
+                               }
+                               $user->setId( $id );
+                               $user->loadFromId( User::READ_LATEST );
                                return false;
                                // @codeCoverageIgnoreEnd
                        }
index 5cd6055..254e4e7 100644 (file)
@@ -206,9 +206,9 @@ class AutoloadGenerator {
 // @codingStandardsIgnoreFile
 global \${$this->variableName};
 
-\${$this->variableName} {$op} array(
+\${$this->variableName} {$op} [
        {$output}
-);
+];
 
 EOD
                );
index 1458449..23f388c 100644 (file)
        "continue-editing": "Dir al área d'edición",
        "previewconflict": "Esta vista previa amuesa'l testu del área d'edición d'arriba tal como apaecerá si escueyes guardar.",
        "session_fail_preview": "'''¡Sentímoslo muncho! Nun pudimos procesar la to edición porque hebo una perda de datos de la sesión.'''\nPor favor, vuelvi a intentalo.\nSi inda nun funciona, intenta [[Special:UserLogout|colar]] y volver a aniciar sesión.",
-       "session_fail_preview_html": "'''¡Sentímoslo! Nun pudo procesase la to edición por aciu d'una perda de datos de la sesión.'''\n\n''Como {{SITENAME}} tien el HTML puru activáu, la vista previa ta tapecida como precaución escontra ataques en JavaScript.''\n\n'''Si esti ye un intentu llexítimu d'edición, por favor vuelvi a intentalo.''' Si inda nun funciona, intenta [[Special:UserLogout|colar]] y volver a aniciar sesión.",
+       "session_fail_preview_html": "¡Sentímoslo! Nun pudo procesase la to edición por aciu d'una perda de datos de la sesión.\n\n<em>Como {{SITENAME}} tien el HTML puru activáu, la vista previa ta tapecida como precaución escontra ataques en JavaScript.</em>\n\n<strong>Si esti ye un intentu llexítimu d'edición, por favor vuelvi a intentalo.</strong>\nSi inda nun funciona, intenta [[Special:UserLogout|colar]] y volver a aniciar sesión, y comprueba que'l to restolador permite les cookies d'esti sitiu.",
        "token_suffix_mismatch": "'''La to edición nun s'aceutó porque'l to navegador mutiló los caráuteres de puntuación nel editor.'''\nLa edición nun foi aceutada pa prevenir corrupciones na páxina de testu.\nDacuando esto pasa por usar un serviciu proxy anónimu basáu en web que tenga fallos.",
        "edit_form_incomplete": "'''Delles partes del formulariu d'edición nun llegaron al sirvidor; comprueba que les ediciones tean intactes y vuelvi a tentalo.'''",
        "editing": "Editando $1",
        "mergehistory-empty": "Nun se pue fusionar nenguna revisión.",
        "mergehistory-done": "$3 {{PLURAL:$3|revisión|revisiones}} de $1 {{PLURAL:$3|fusionóse|fusionáronse}} en [[:$2]].",
        "mergehistory-fail": "Nun pudo facese la fusión d'historiales, por favor comprueba los parámetros de páxina y hora.",
+       "mergehistory-fail-bad-timestamp": "La marca de tiempu ye inválida.",
        "mergehistory-fail-toobig": "Nun pudo fusionase l'historial porque moveríense más del máximu de $1 {{PLURAL:$1|revisión|revisiones}}.",
        "mergehistory-no-source": "La páxina d'orixe $1 nun esiste.",
        "mergehistory-no-destination": "La páxina de destín $1 nun esiste.",
        "upload-dialog-button-done": "Fecho",
        "upload-dialog-button-save": "Guardar",
        "upload-dialog-button-upload": "Xubir",
-       "upload-form-label-select-file": "Seleiciona un ficheru",
        "upload-form-label-infoform-title": "Detalles",
        "upload-form-label-infoform-name": "Nome",
        "upload-form-label-infoform-name-tooltip": "Un títulu descriptivu únicu pal ficheru, que sirvirá para da-y nome al ficheru. Se pue usar llinguax normal con espacios. Nun amiestes la estensión del ficheru.",
index 5065d6b..005b9ca 100644 (file)
        "mergehistory-fail-bad-timestamp": "Няслушная метка часу.",
        "mergehistory-fail-invalid-source": "Няслушная старонка-крыніца.",
        "mergehistory-fail-invalid-dest": "Няслушная мэтавая старонка.",
+       "mergehistory-fail-permission": "Недастаткова правоў для аб’яднаньня гісторыі.",
        "mergehistory-fail-toobig": "Немагчыма аб’яднаць гісторыю, бо будзе перавышаны ліміт у $1 {{PLURAL:$1|1=вэрсію|вэрсіі|вэрсіяў}}, якія будуць перанесеныя.",
        "mergehistory-no-source": "Не існуе крынічнай старонкі $1.",
        "mergehistory-no-destination": "Не існуе мэтавай старонкі $1.",
index f1083c6..5eb0a6e 100644 (file)
        "botpasswords-label-delete": "অপসারণ",
        "botpasswords-label-resetpassword": "পাসওয়ার্ড পুনঃস্থাপন",
        "botpasswords-label-grants": "প্রয়োগযোগ্য মঞ্জুরি:",
+       "botpasswords-label-restrictions": "ব্যবহারের সীমাবদ্ধতা:",
        "botpasswords-label-grants-column": "অনুমোদিত",
        "botpasswords-bad-appid": "\"$1\" বট নামটি সঠিক নয়।",
        "botpasswords-insert-failed": "\"$1\" নামের বট যুক্ত করা যায়নি। আগে থেকেই তালিকায় রয়েছে?",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|আলাপ]])",
        "timezone-utc": "ইউটিসি",
        "timezone-local": "স্থানীয়",
-       "duplicate-defaultsort": "' ' ' সাবধান: ' ' '  ডিফল্ট সাজানোর কীঃ \"$2\" পূর্বে ডিফল্ট সাজানোর কীঃ \"$1\" কে অগ্রাহ্য করে।",
+       "duplicate-defaultsort": "<strong>সতর্কীকরণ:</strong> পূর্বনির্ধারিত সাজানোর চাবি \"$2\" পূর্বের পূর্বনির্ধারিত সাজানোর চাবি \"$1\" কে অগ্রাহ্য করে।",
        "duplicate-displaytitle": "<strong>সতর্কীকরণ:</strong> প্রদর্শন শিরোনাম \"$2\" আগের প্রদর্শন শিরোনাম \"$1\" অগ্রাহ্য করবে।",
        "invalid-indicator-name": "<strong>ত্রুটি:</strong> পাতার অবস্থা নির্দেশক <code>name</code> অ্যাট্রিবিউট খালি হতে পারবে না।",
        "version": "সংস্করণ",
index b45fd6b..cc4438c 100644 (file)
@@ -13,7 +13,8 @@
                        "Mywood",
                        "Impersonator 1",
                        "LNDDYL",
-                       "唐吉訶德的侍從"
+                       "唐吉訶德的侍從",
+                       "飞舞回堂前"
                ]
        },
        "tog-underline": "鏈接加底線:",
        "jumpto": "跳轉到:",
        "jumptonavigation": "導航",
        "jumptosearch": "搜尋",
-       "view-pool-error": "好抱歉,太多用戶嘗試緊覽邇頁,使服務器超出負擔。請等多一刻再嘗試。\n\n$1",
+       "view-pool-error": "好抱歉,太多用戶嘗試緊覽邇頁,使服務器超出負擔。請等多一刻再嘗試。\n\n$1",
        "pool-timeout": "等待鎖定超時",
        "pool-queuefull": "請求隊列满矣",
        "pool-errorunknown": "毋知得嘅差錯",
index e68c47a..8688b8f 100644 (file)
        "morenotlisted": "Այս ցանկն ավարտուն չէ։",
        "mypage": "Էջ",
        "mytalk": "Քննարկում",
-       "anontalk": "Քննարկում այս IP-հասցեի համար",
+       "anontalk": "Քննարկում",
        "navigation": "Շրջել կայքում",
        "and": "&#32;և",
        "qbfind": "Գտնել",
        "unprotectthispage": "Փոխել այս էջի պաշտպանությունը",
        "newpage": "Նոր էջ",
        "talkpage": "Քննարկել այս էջը",
-       "talkpagelinktext": "Քննարկում",
+       "talkpagelinktext": "քննարկում",
        "specialpage": "Հատուկ էջ",
        "personaltools": "Անձնական գործիքներ",
        "articlepage": "Դիտել էջի պարունակությունը",
        "jumpto": "Անցնել դեպի",
        "jumptonavigation": "նավարկություն",
        "jumptosearch": "որոնում",
-       "view-pool-error": "Ներեցեք՝ սերվերները գերբեռնված են այս պահին։\nՇատ օգտվողներ փորձում են դիտել այս էջը։\nԽնդրում ենք սպասել որոշ ժամանակ էջ կրկին մուտք գործելու համար։\n\n$1",
+       "view-pool-error": "Ներեցեք, սերվերները գերբեռնված են այս պահին։\nՇատ օգտվողներ փորձում են դիտել այս էջը։\nԽնդրում ենք սպասել որոշ ժամանակ էջը կրկին դիտելու համար։\n\n$1",
        "generic-pool-error": "Ներեցեք, սերվերները գերբեռնված են այս պահին։\nՇատ օգտվողներ փորձում են դիտել այս էջը։\nԽնդրում ենք սպասել որոշ ժամանակ էջը կրկին դիտելու համար։",
        "pool-errorunknown": "Անհայտ սխալ",
        "aboutsite": "{{grammar:genitive|{{SITENAME}}}} մասին",
        "cannotdelete-title": "Հնարավոր չէ ջնջել $1 էջը",
        "badtitle": "Անընդունելի անվանում",
        "badtitletext": "Հարցված էջի անվանումը անընդունելի է, դատարկ է կամ սխալ միջ-լեզվական կամ ինտերվիքի անվանում է։ Հնարավոր է, որ այն պարունակում է անթույլատրելի սիմվոլներ։",
+       "title-invalid-empty": "Էջի հայցվող վերնագիրը դատարկ է կամ պարունակում է միայն անվանատարածքի անունը։",
        "perfcached": "Ստորև տվյալները պահուստավորված են և հնարավոր է չարտացոլեն վերջին փոփոխությունները։ Առավելագույն {{PLURAL:$1|արդյունք|$1 արդյունք}} է հասանելի քեշում։",
        "perfcachedts": "Հետևյալ տվյալները վերցված են քեշից և վերջին անգամ թարմացվել են $1։ A maximum of {{PLURAL:$4|one result is|$4 results are}} available in the cache.",
        "querypage-no-updates": "Այս էջի փոփոխությունները ներկայումս արգելված են։ Այստեղի տվյալները այժմ չեն թարմացվի։",
        "ns-specialprotected": "«{{ns:special}}» անվանատարածքի էջերը չեն կարող խմբագրվել։",
        "titleprotected": "Այս անվանմամբ էջի ստեղծումը արգելվել է [[User:$1|$1]] մասնակցի կողմից։\nՏրված պատճառն է՝ ''$2''։",
        "exception-nologin": "Չեք մտել համակարգ",
-       "exception-nologin-text": "Խնդրում ենք, [[Special:Userlogin|մուտք գործեք]]՝ այս էջը դիտելու կամ գործողությունը կատարելու համար։",
+       "exception-nologin-text": "Խնդրում ենք, մուտք գործեք՝ այս էջը դիտելու կամ գործողությունը կատարելու համար։",
        "virus-badscanner": "Սխալ կարգավորւմ։ Անծանոթ վիրուսների զննիչ. ''$1''",
        "virus-scanfailed": "զննման սխալ (կոդ $1)",
        "virus-unknownscanner": "անծանոթ հակավիրուս՝",
-       "logouttext": "'''Դուք դուրս եկաք համակարգից։'''\n\nԴուք կարող եք շարունակել օգտագործել {{SITENAME}} կայքը անանուն, կամ <span class='plainlinks'>[$1 կրկին մուտք գործել համակարգ]</span> նույն կամ մեկ այլ մասնակցի անվամբ։ Ի նկատի ունեցեք, որ որոշ էջեր կարող են ցուցադրվել այնպես՝ ինչպես եթե դեռ համակարգում լինեիք մինչև որ չջնջեք ձեր զննարկիչի հիշապահեստը։",
+       "logouttext": "<strong>Դուք դուրս եկաք համակարգից։</strong>\n\nԻ նկատի ունեցեք, որ որոշ էջեր կարող են ցուցադրվել այնպես՝ ինչպես եթե դեռ համակարգում լինեիք մինչև որ չջնջեք ձեր զննարկիչի հիշապահեստը։",
        "welcomeuser": "Բարի գալո՜ւստ, $1",
        "welcomecreation-msg": "Ձեր հաշիվն ստեղծված է։\nՉմոռանաք փոփոխել ձեր [[Special:Preferences|նախընտրությունները]]։",
        "yourname": "Մասնակցի անուն՝",
        "createacct-reason": "Պատճառ",
        "createacct-reason-ph": "Ինչո՞ւ եք փորձում ստեղծել մեկ այլ հաշիվ",
        "createacct-submit": "Ստեղծել ձեր հաշիվը",
-       "createacct-another-submit": "Õ\8dÕ¿Õ¥Õ²Õ®Õ¥Õ¬ Õ´Õ¥Õ¯ Õ¡ÕµÕ¬ Õ°Õ¡Õ·Õ«Õ¾",
+       "createacct-another-submit": "Ստեղծել հաշիվ",
        "createacct-benefit-heading": "{{SITENAME}}՝ ստեղծվում է ձեր պես մարդկանց կողմից։",
        "createacct-benefit-body1": "{{PLURAL:$1|խմբագրում}}",
        "createacct-benefit-body2": "{{PLURAL:$1|էջ}}",
        "changeemail-none": "(ոչ մի)",
        "changeemail-password": "Քո {{SITENAME}} գաղտնաբառը՝",
        "changeemail-submit": "Փոխել էլ․ հասցեն",
+       "changeemail-nochange": "Խնդրում ենք մուտքագրեք այլ նոր էլեկտրոնային փոստի հասցեն։",
        "resettokens-tokens": "Կտրոններ՝",
        "bold_sample": "Թավատառ տեքստ",
        "bold_tip": "Թավատառ տեքստ",
        "preview": "Նախադիտում",
        "showpreview": "Նախադիտել",
        "showdiff": "Կատարված փոփոխությունները",
+       "blankarticle": "<strong>Զգուշացում:</strong> Էջը, որը Դուք ստեղծում եք, դատարկ է:\nԵթե նորից սեղմեք «\"{{int:savearticle}}\"» կոճակը, էջը կստեղծվի առանց որևէ բովանդակության:",
        "anoneditwarning": "<strong>Ուշադրություն,</strong> Դուք չեք մտել համակարգ։ Ցանկացած խմբագրման դեպքում Ձեր IP հասցեն կդառնա բոլորին տեսանելի։ Եթե Դուք <strong>[$1 մուտք գործեք]</strong> կամ <strong>[$2 ստեղծեք մասնակցային հաշիվ]</strong>, Ձեր կատարած խմբագրումները կկապվեն Ձեր մասնակցային անվան հետ, ինչպես նաև կունենաք այլ առավելություններ։",
        "anonpreviewwarning": "<em>Դուք չեք մտել համակարգ։\nՀիշելով Ձեր կատարած խմբագրումը, այն կպահանվի Ձեր IP հասցեի հետ միասին այս էջի խմբագրումների պատմության մեջ։</em>",
        "missingsummary": "'''Հիշեցում.''' Դուք չեք տվել խմբագրման ամփոփում։ «Հիշել» կոճակի կրկնակի մատնահարման դեպքում փոփոխությունները կհիշվեն առանց ամփոփման։",
        "columns": "Սյունակներ",
        "searchresultshead": "Որոնում",
        "stub-threshold": "<a href=\"#\" class=\"stub\">Պատառ հոդվածների հղումների</a> ձևավորման որոշման սահմանը.",
+       "stub-threshold-sample-link": "օրինակ",
        "stub-threshold-disabled": "Անջատված է",
        "recentchangesdays": "Վերջին փոփոխություններում ցուցադրվող օրերի թիվը՝",
        "recentchangesdays-max": "($1 {{PLURAL:$1|օրից|օրից}} ոչ ավել)",
        "prefs-dateformat": "Ամսաթվի ձևաչափ",
        "prefs-timeoffset": "Ժամային տարբերություն",
        "prefs-advancedediting": "Ընդլայնված ընրանքներ",
+       "prefs-editor": "Խմբագիր",
        "prefs-advancedrc": "Ընդլայնված ընրանքներ",
        "prefs-advancedrendering": "Ընդլայնված ընրանքներ",
        "prefs-advancedsearchoptions": "Ընդլայնված ընրանքներ",
        "right-writeapi": "API գրի օգտագործումը",
        "right-delete": "Էջերի ջնջում",
        "right-rollback": "Արագ հետ գլորել տվյալ էջը վերջին անգամ խմբագրած մասնակցի խմբագրումները",
+       "grant-createaccount": "Ստեղծել հաշիվներ",
+       "grant-createeditmovepage": "Ստեղծել․ խմբագրել և տեղափոխել էջեր",
        "newuserlogpage": "Մասնակիցների գրանցման տեղեկամատյան",
        "newuserlogpagetext": "Սա նոր մասնակիցների գրանցման տեղեկամատյանն է.",
        "rightslog": "Մասնակցի իրավունքների տեղեկամատյան",
        "action-deleterevision": "Ջնջել այս փոփոխությունը",
        "action-deletedhistory": "Դիտել այս էջի ջնջված պատմությունը",
        "action-rollback": "արագ հետ գլորել էջը վերջին անգամ խմբագրած մասնակցի կատարած փոփոխությունները",
+       "action-sendemail": "ուղարկել էլ. նամակ",
+       "action-editmywatchlist": "խմբագրել Ձեր հսկացանկը",
+       "action-viewmywatchlist": "դիտել Ձեր հսկացանկը",
+       "action-viewmyprivateinfo": "դիտել Ձեր անձնական տեղեկությունները",
+       "action-editmyprivateinfo": "խմբագրել Ձեր անձնական տեղեկությունները",
        "nchanges": "$1 {{PLURAL:$1|փոփոխություն|փոփոխություն}}",
        "enhancedrc-history": "պատմություն",
        "recentchanges": "Վերջին փոփոխություններ",
        "rcshowhidemine": "$1 իմ խմբագրումները",
        "rcshowhidemine-show": "Ցուցադրել",
        "rcshowhidemine-hide": "Թաքցնել",
+       "rcshowhidecategorization": "$1 էջերի կատեգորիզացիա",
+       "rcshowhidecategorization-show": "Ցուցադրել",
+       "rcshowhidecategorization-hide": "Թաքցնել",
        "rclinks": "Ցույց տալ վերջին $1 փոփոխությունները վերջին $2 օրվա ընթացքում<br />$3",
        "diff": "տարբ",
        "hist": "պատմ",
        "recentchangeslinked-summary": "Այս սպասարկող էջում բերված են հղվող էջերում կատարված վերջին փոփոխությունները։ Ձեր հսկացանկի էջերը ներկայացված են '''թավատառ'''։",
        "recentchangeslinked-page": "Էջի անվանումը՝",
        "recentchangeslinked-to": "Հակառա՛կը. ցույց տալ այս էջին հղող էջերի փոփոխությունները։",
+       "recentchanges-page-added-to-category": "[[:$1]] էջը ավելացվել է կատեգորիայում",
        "upload": "Բեռնել նիշք (ֆայլ)",
        "uploadbtn": "Բեռնել նիշք",
        "reuploaddesc": "Վերադառնալ բեռնման ձևին։",
        "badfilename": "Պատկերի վերանվանվել է «$1» անվանման։",
        "filetype-badmime": "«$1» MIME-տեսակով նիշքերի բեռնումը արգելված է։",
        "filetype-missing": "Նիշքը չունի ընդլայնում (օրինակ՝ «.jpg»)։",
+       "filename-tooshort": "Նիշքի անվանումը չափազանց կարճ է։",
+       "filetype-banned": "Այս տեսակի նիշքերը արգելված են։",
        "large-file": "Խորհուրդ է տրվում չօգտագործել $1 բայթից մեծ նիշքեր. այս նիշքի չափն է՝  $2 բայթ։",
        "largefileserver": "Այս նիշքը սպասարկիչի թույլատրած առավելագույն չափից մեծ է։",
        "emptyfile": "Ձեր բեռնած նիշքը ըստ երևույթին դատարկ է։ Հնարավոր է սա նիշքի անվանման մեջ տառասխալի հետևանք է։ Խնդրում ենք ստուգել, թե արդյոք իսկապես ուզում եք բեռնել այս նիշքը։",
        "upload-file-error-text": "Տեղի ունեցավ ներքին սխալ՝ սերվերի վրա ժամանակավոր նիշք ստեղծելիս։ Խնդրում ենք կապվել համակարգային [[Special:ListUsers/sysop|ադմինիստրատորի]] հետ։",
        "upload-misc-error": "Բեռնման անհայտ սխալ",
        "upload-misc-error-text": "Տեղի ունեցավ անհայտ սխալ բեռնման ընթացքում։ Խնդրում ենք ստուգել URL-հասցեի ճշտությունն ու հասանելիությունը և փորձել կրկին։ Սխալի կրկնման դեպքում կապնվեք համակարգային ադմինիստրատորի հետ։",
+       "upload-dialog-title": "Բեռնել նիշք",
+       "upload-dialog-button-cancel": "Չեղարկել",
+       "upload-dialog-button-done": "Արված է",
+       "upload-dialog-button-save": "Հիշել",
+       "upload-dialog-button-upload": "Բեռնել",
+       "upload-form-label-infoform-title": "Մանրամասներ",
+       "upload-form-label-infoform-name": "Անուն",
+       "upload-form-label-usage-filename": "Նիշքի անուն",
+       "foreign-structured-upload-form-label-own-work": "Սա իմ անձնական աշխատանքն է",
+       "foreign-structured-upload-form-label-infoform-categories": "Կատեգորիաներ",
+       "foreign-structured-upload-form-label-infoform-date": "Ամսաթիվ",
        "upload-curl-error6": "URL-հասցեն անհասանելի է",
        "upload-curl-error6-text": "Նշված URL-հասցեն անհասանելի է։ Խնդրում ենք ստուգել հասցեի ճշգրտությունը և կայքի գործունությունը։",
        "upload-curl-error28": "Բեռնման ժամհատնում",
        "listfiles_size": "Չափ",
        "listfiles_description": "Նկարագրություն",
        "listfiles_count": "Տարբերակ",
+       "listfiles-latestversion-yes": "Այո",
+       "listfiles-latestversion-no": "Ոչ",
        "file-anchor-link": "Նիշք",
        "filehist": "Նիշքի պատմություն",
        "filehist-help": "Մատնահարեք օրվան/ժամին՝ նիշքի այդ պահին տեսքը դիտելու համար։",
        "deadendpages": "Հղումներ չպարունակող էջեր",
        "deadendpagestext": "Հետևյալ էջերը չունեն հղումներ վիքիի այլ էջերին։",
        "protectedpages": "Պաշտպանված էջեր",
+       "protectedpages-noredirect": "Թաքցնել վերահղումները",
        "protectedpagesempty": "Ներկայումս չկան պաշտպանված էջեր նշված պարամետրերով։",
        "protectedpages-submit": "Ցույց տալ էջերը",
        "protectedtitles": "Պաշտպանված անվանումներ",
        "protectedtitles-submit": "Ցույց տալ վերնագրերը",
        "listusers": "Մասնակիցների ցանկ",
+       "listusers-editsonly": "Ցույց տալ միայն խմբագրումներով մասնակիցներին",
        "usereditcount": " \n$1 {{PLURAL:$1|խմբագրում|խմբագրումներ}}",
        "usercreated": "{{GENDER:$3|Ստեղծվել է}} $1-ին, ժամը $2-ին",
        "newpages": "Նոր էջեր",
+       "newpages-submit": "Ցուցադրել",
        "newpages-username": "Մասնակից՝",
        "ancientpages": "Ամենահին էջերը",
        "move": "Տեղափոխել",
        "specialloguserlabel": "Կատարող․",
        "speciallogtitlelabel": "Անվանում.",
        "log": "Տեղեկամատյաններ",
+       "logeventslist-submit": "Ցուցադրել",
        "all-logs-page": "Բոլոր տեղեկամատյանները",
        "alllogstext": "{{SITENAME}} կայքի տեղեկամատյանների համընդհանուր ցանկ։\nԴուք կարող եք սահմանափակել արդյունքները ըստ տեղեկամատյանի տեսակի, մասնակցի անունի կամ համապատասխան էջի։",
        "logempty": "Տեղեկամատյանում չկան համընկնող տարրեր։",
        "allpagesprefix": "Ցույց տալ հետևյալ նախածանցով էջերը՝",
        "allpagesbadtitle": "Տվյալ էջի անվանումը անթույլատրելի է։ Այն պարունակում է միջ-լեզվական կամ ինտերվիքի նախածանց, կամ էլ անվանումներում այնթույլատրելի սիմվոլներ։",
        "allpages-bad-ns": "{{SITENAME}} կայքը չունի «$1» անվանատարածք։",
+       "allpages-hide-redirects": "Թաքցնել վերահղումները",
        "categories": "Կատեգորիաներ",
+       "categories-submit": "Ցուցադրել",
        "categoriespagetext": "Հետևյալ կատեգորիաները պարունակում են էջեր կամ մեդիա.\n[[Special:UnusedCategories|Unused categories]] are not shown here.\nAlso see [[Special:WantedCategories|wanted categories]].",
        "deletedcontributions": "Մասնակցի ջնջված ներդրում",
        "deletedcontributions-title": "Մասնակցի ջնջված ներդրում",
        "listusers-noresult": "Այդպիսի մասնակիցներ չգտնվեցին։",
        "listusers-blocked": "(արգելափակված)",
        "activeusers": "Ակտիվ մասնակիցների ցանկ",
+       "activeusers-hidebots": "Թաքցնել բոտերին",
        "activeusers-noresult": "Այդպիսի մասնակիցներ չեն գտնվել։",
        "activeusers-submit": "Ցույց տալ ակտիվ մասնակիցներին",
        "listgrouprights-members": "(անդամների ցանկ)",
        "wlheader-showupdated": "Էջերը, որոնք փոփոխվել են ձեր դրանց վերջին այցից հետո բերված են '''թավատառ'''։",
        "wlnote": "Ստորև բերված {{PLURAL:$1|է վերջին փոփոխությունը|են վերջին '''$1''' փոփոխությունները}} վերջին <strong>$2</strong> ժամվա ընթացքում։",
        "wlshowlast": "Ցուցադրել վերջին $1 ժամերը $2 օրերը",
+       "watchlist-hide": "Թաքցնել",
        "watchlist-submit": "Ցույց տալ",
+       "wlshowhideminor": "չնչին խմբագրումներ",
+       "wlshowhidebots": "բոտեր",
        "wlshowhideliu": "գրանցված մասնակիցներ",
+       "wlshowhideanons": "անանուն մասնակիցներ",
        "wlshowhidemine": "իմ խմբագրումները",
+       "wlshowhidecategorization": "էջերի կատեգորիազացիա",
        "watchlist-options": "Հսկացանկի նախընտրություններ",
        "watching": "Հսկվում է...",
        "unwatching": "Հանվում է հսկումից...",
        "delete-confirm": "$1 ― ջնջում",
        "delete-legend": "Ջնջում",
        "historywarning": "Զգուշացում. էջը, որը դուք պատրաստվում եք ջնջել ունի փոփոխությունների պատմություն։",
+       "historyaction-submit": "Ցուցադրել",
        "confirmdeletetext": "Դուք պատրաստվում եք ընդմիշտ ջնջել էջը կամ պատկերը տվյալների բազայից իր փոփոխությունների պատմությամբ հանդերձ։ Խնդրում ենք հաստատել, որ դուք իրոք մտադրված եք դա անել, հասկանում եք դրա հետևանքները և գործում եք [[{{MediaWiki:Policy-url}}|կանոնադրության]] սահմաններում։",
        "actioncomplete": "Գործողությունը ավարտված  է",
        "actionfailed": "Գործողությունը չհաջողվեց",
        "contributions": "{{GENDER:$1|Մասնակցի}} ներդրում",
        "contributions-title": "$1 մասնակցի ներդրումը",
        "mycontris": "Ներդրում",
+       "anoncontribs": "Ներդրումներ",
        "contribsub2": "$1-ի ներդրումները ($2)",
        "nocontribs": "Այս չափանիշներին համապատասխանող փոփոխություններ չեն գտնվել։",
        "uctop": " (վերջինը)",
        "tooltip-t-recentchangeslinked": "Այս էջից կապված էջերի վերջին փոփոխությունները",
        "tooltip-feed-rss": "Այս էջի RSS սնուցումը",
        "tooltip-feed-atom": "Այս էջի Ատոմ սնուցումը",
-       "tooltip-t-contributions": "Դիտել այս մասնակցի ներդրումների ցանկը",
+       "tooltip-t-contributions": "Դիտել {{GENDER:$1|այս մասնակցի}} ներդրումների ցանկը",
        "tooltip-t-emailuser": "Ուղարկել էլ-նամակ այս մասնակցին",
        "tooltip-t-upload": "Բեռնել ֆայլեր",
        "tooltip-t-specialpages": "Բոլոր սպասարկող էջերի ցանկը",
        "tooltip-ca-nstab-main": "Դիտել հոդվածը",
        "tooltip-ca-nstab-user": "Դիտել մասնակցի էջը",
        "tooltip-ca-nstab-media": "Դիտել մեդիաֆայլի էջը",
-       "tooltip-ca-nstab-special": "Սա սպասարկող էջ է, դուք չեք կարող հենց իրեն խմբագրել",
+       "tooltip-ca-nstab-special": "Սա սպասարկող էջ է, և չի կարող խմբագրվել",
        "tooltip-ca-nstab-project": "Դիտել նախագծի էջը",
        "tooltip-ca-nstab-image": "Դիտել պատկերի էջը",
        "tooltip-ca-nstab-mediawiki": "Դիտել համակարգային ուղերձը",
        "newimages": "Նոր նիշքերի սրահ",
        "imagelisttext": "Ստորև բերված է '''$1''' {{PLURAL:$1|նիշքի}} ցանկ՝ դասավորված ըստ $2։",
        "newimages-legend": "Ֆիլտր",
+       "newimages-showbots": "Ցույց տալ բոտերի բեռնումները",
        "noimages": "Տեսնելու բան չկա։",
        "ilsubmit": "Որոնել",
        "bydate": "ըստ ամսաթվի",
index c2d5f7d..8d4232c 100644 (file)
        "logentry-newusers-create2": "$1 {{GENDER:$2|membuat}} akun pengguna $3",
        "logentry-newusers-byemail": "Akun pengguna  $3  {{GENDER:$2|dibuat}} oleh  $1  dan password dikirim melalui surel",
        "logentry-newusers-autocreate": "Akun $1 {{GENDER:$2|dibuat}} secara otomatis",
+       "logentry-protect-move_prot": "$1 {{GENDER:$2|memindahkan}} setelan perlindungan dari $4 ke $3",
+       "logentry-protect-protect": "$1 {{GENDER:$2|melindungi}} $3 $4",
+       "logentry-protect-modify": "$1 {{GENDER:$2|mengubah}} tingkat perlindungan untuk $3 $4",
        "logentry-rights-rights": "$1 {{GENDER:$2|mengubah}} keanggotaan grup $3 dari $4 menjadi $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|mengubah}} keanggotaan grup $3",
        "logentry-rights-autopromote": "$1 secara otomatis {{GENDER:$2|dipromosikan}} dari $4 menjadi $5",
index a4f8828..cdcd92d 100644 (file)
        "upload-dialog-button-done": "Nalpasen",
        "upload-dialog-button-save": "Idulin",
        "upload-dialog-button-upload": "Agikarga",
-       "upload-form-label-select-file": "Pilien ti papeles",
        "upload-form-label-infoform-title": "Dagiti salaysay",
        "upload-form-label-infoform-name": "Nagan",
        "upload-form-label-infoform-description": "Deskripsion",
        "foreign-structured-upload-form-label-own-work": "Daytoy ket bukodko nga obra",
        "foreign-structured-upload-form-label-infoform-categories": "Katkategoria",
        "foreign-structured-upload-form-label-infoform-date": "Petsa",
-       "foreign-structured-upload-form-3-label-yes": "Wen",
-       "foreign-structured-upload-form-3-label-no": "Saan",
        "backend-fail-stream": "Saan a maipan ti papeles $1.",
        "backend-fail-backup": "Saan a makaidulin ti kapada ti papeles ti $1.",
        "backend-fail-notexists": "Awan ti papeles ti $1.",
        "tooltip-t-recentchangeslinked": "Kaudian a balbaliw kadagiti panid a naisilpo manipud ti daytoy a panid",
        "tooltip-feed-rss": "RSS a pakan para iti daytoy a panid",
        "tooltip-feed-atom": "Atom a pakan para iti daytoy a panid",
-       "tooltip-t-contributions": "Ti listaan dagiti kontribusion iti daytoy nga agar-aramat",
+       "tooltip-t-contributions": "Ti listaan dagiti kontribusion babaen {{GENDER:$1|daytoy nga agar-aramat}}",
        "tooltip-t-emailuser": "Patulodan ti esurat daytoy nga agar-aramat",
        "tooltip-t-info": "Adu pay a pakaammo a maipanggep iti daytoy a panid",
        "tooltip-t-upload": "Agikarga kadagiti papeles",
index bcff5d2..ed01bc7 100644 (file)
        "mergehistory-fail-no-change": "ისტორიის გაერთიანებას ცვლილებები არ გაუერთიანებია. გთხოვთ კვლავ შეამოწმოთ გვერდი და დროის პარამეტრები.",
        "mergehistory-fail-permission": "არ გაქვთ საკმარისი ნებართვა ისტორიის გასაერთიანებლად.",
        "mergehistory-fail-self-merge": "წყაროსი და დანიშნულების გვერდები ერთიდაიგივეა.",
+       "mergehistory-fail-timestamps-overlap": "წყაროს რევიზიები ემთხვევა დანიშნულების რევიზიებს ან მის შემდეგ მოდის.",
        "mergehistory-fail-toobig": "არ ხერხდება ისტორიების შერწყმა, რამეთუ აუცილებელია დაშვებული ლიმიტის მეტი ნაწილის გადატანა $1 ვერსიაში.",
        "mergehistory-no-source": "დანიშნულების გვერდი $1 არ არსებობს.",
        "mergehistory-no-destination": "დანიშნულების გვერდი $1 არ არსებობს.",
        "upload-scripted-pi-callback": "შეუძლებელია ფაილის ატვირთვა, რომელიც XML-stylesheet წარმოქმნის ინსტრუქციას შეიცავს.",
        "uploaded-script-svg": "ნაპოვნია \"$1\" ელემენტი ატვირთულ SVG ფაილში.",
        "uploaded-hostile-svg": "ატვირთულ SVG-ფაილის style ელემენტში ნაპოვნია საფრთხის შემცვლელი CSS-ის კოდი.",
+       "uploaded-event-handler-on-svg": "event-handler ატრიბუტების <code>$1=\"$2\"</code> დანიშნვნა არ არის დაშვებული SVG ფაილებში.",
+       "uploaded-href-attribute-svg": "href ატრიბუტებისთვის SVG ფაილებში დაშვებულია ბმულის გაკეთება http:// და https:// მისამართებზე, ნაპოვნია <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploaded-href-unsafe-target-svg": "ნაპოვნია href საშიშ მონაცემში: URI <code>&lt;$1 $2=\"$3\"&gt;</code> ატვირთულ SVG ფაილში.",
+       "uploaded-animate-svg": "ნაპოვნია \"animate\" ტეგი, რომელიც შესაძლოა ცვლის href-ს, \"from\" ატრიბუტის, <code>&lt;$1 $2=\"$3\"&gt;</code>, გამოყენებით ატვირთულ SVG ფაილში.",
+       "uploaded-setting-event-handler-svg": "event-handler ატრიბუტების დანიშვნა დაბლოკილია, ნაპოვნია <code>&lt;$1 $2=\"$3\"&gt;</code> ატვირთულ SVG ფაილში.",
        "uploaded-setting-href-svg": "დაბლოკილია \"set\" ტეგის გამოყენების ფუნქცია \"href\" ატრიბუტის დასამატებლად \"მშობელ\" ელემენტში.",
+       "uploaded-wrong-setting-svg": "\"set\" ტეგის გამოყენება, იმისათვის რომ დაემატოს remote/data/script სამიზნე ნებისმიერ ატრიბუტში, დაბლოკილია. ნაპოვნია <code>&lt;set to=\"$1\"&gt;</code> ატვირთულ SVG ფაილში.",
+       "uploaded-setting-handler-svg": "SVG, რომელიც სვავს \"handler\" ატრიბუტს remote/data/script-ით, დაბლკილია. ნაპოვნია <code>$1=\"$2\"</code> ატვირთულ SVG ფაილში.",
+       "uploaded-remote-url-svg": "SVG, რომელიც სვავს რომელიმე სტილის ატრიბუტს დაშორებული URL-თი, დაბლოკილია. ნაპოვნია <code>$1=\"$2\"</code> ატვირთულ SVG ფაილში.",
        "uploaded-image-filter-svg": "ნაპოვნია სურათის ფილტრი URL-ით: <code>&lt;$1 $2=\"$3\"&gt;</code> ატვირთულ SVG ფაილში.",
        "uploadscriptednamespace": "ეს SVG ფაილი შეიცავს სახელთა არაკორექტულ სივრცეს \"$1\".",
        "uploadinvalidxml": "XML ჩატვირთულ ფაილში არ შეიძლება იყოს ანალიზირებული",
        "upload-options": "ატვირთვის პარამეტრები",
        "watchthisupload": "უთვალთვალე ამ ფაილს",
        "filewasdeleted": "ამ სახელწოდების ფაილი უკვე არსებობდა, მაგრამ წაშლილ იქნა. ხელმეორედ ჩატვირთვამდე იხილეთ $1.",
+       "filename-thumb-name": "ეს გამოიყურება, როგორც მინიატურის სათაური. გთხოვთ, არ არვირთოთ მინიატურები უკან იმავე ვიკიში. წინააღმდეგ შემთვევაში, გთხოვთ, შეასწორეთ ფაილის სახელი ისე, რომ ის იყოს უფრო ღირებული და არ ჰქონდეს მინიატურის პრეფიქსი.",
        "filename-bad-prefix": "ასატვირთვი ფაილი იწყება '''„$1“''', რაც არის ფოტოკამერის მიერ სურათებისთვის მიცემული სტანდარტული სახელი. გთხოვთ აირჩიოთ ფაილის აღმწერი უკეთესი სახელი.",
        "upload-proto-error": "არასწორი პროტოკოლი",
        "upload-proto-error-text": "ატვირთვის წასაშლელად საჭიროა მისამართი, რომელიც იწყება <code>http://</code> or <code>ftp://</code>-ით.",
        "upload-too-many-redirects": "URL შეიცავს ძალიან ბევრ გადამისამართებებს",
        "upload-http-error": "მოხდა HTTP შეცდომა: $1",
        "upload-copy-upload-invalid-domain": "ამ დომენში ატვირთვების კოპირება არ არის ხელმისაწვდომი.",
+       "upload-foreign-cant-upload": "ეს ვიკი არ არის დაკონფიგურირებული იმისათვის, რომ ატვირთოს ფაილების უცხო ფაილთა საწყობში.",
        "upload-dialog-title": "ფაილის ატვირთვა",
        "upload-dialog-button-cancel": "გაუქმება",
        "upload-dialog-button-done": "შესრულდა",
        "upload-dialog-button-upload": "ატვირთვა",
        "upload-form-label-infoform-title": "დეტალები",
        "upload-form-label-infoform-name": "სახელი",
+       "upload-form-label-infoform-name-tooltip": "ფაილის უნიკალური აღმწერი სათაური. თქვენ შეგიძლიათ გამოიყენოთ მარტივი ტექსტი შორისებით. არ მიუთითოთ გაფართოება.",
        "upload-form-label-infoform-description": "აღწერა",
        "upload-form-label-infoform-description-tooltip": "მოკლედ აღწერეთ ამ ნამუშევრის შესახებ ყველაფერი მნიშვნელოვანი.\nფოტოსათვის, მიუთითეთ რა არის გამოსახული, სად არის გადაღებული, რა ვითარებაში.",
        "upload-form-label-usage-title": "გამოყენება",
        "foreign-structured-upload-form-label-not-own-work-message-default": "თუ ვერ ტვირთავთ ამ ფაილს {{SITENAME}}-ის წესების დაცვით, გთხოვთ დახურეთ ეს ფანჯარა და სცადეთ სხვა მეთოდი.",
        "foreign-structured-upload-form-label-not-own-work-local-default": "შეგიძლიათ ასევე სცადოთ [[Special:Upload|ატვირთვის გვერდი {{SITENAME}}-ზე]], თუ ამ ფაილის ატვირთვა დაშვებულია მათი პოლიტიკის მიხედვით.",
        "foreign-structured-upload-form-label-own-work-message-shared": "მე ვადასტურებ, რომ ამ ფაილზე საავტორო უფლებების მფლობელი ვარ და ვთანხმდები ამ ფაილის შეუქცევადად განთავსებაზე ვიკისაწყობში [https://creativecommons.org/licenses/by-sa/4.0/deed.ka Creative Commons Attribution-ShareAlike 4.0] ლიცენზიით, აგრეთვე ვეთანხმები [https://wikimediafoundation.org/wiki/Terms_of_Use გამოყენების წესებს].",
+       "foreign-structured-upload-form-label-not-own-work-message-shared": "თუ თქვენ არ ხართ საავტორო უფლებებს ამ ფაილზე, ან გსურთ გაუშვათ განსხვავებული ლიცენზიით, გთხოვთ გამოიყენეთ [https://commons.wikimedia.org/wiki/Special:UploadWizard ვიკისაწყობის ატვირთვის ფუნქცია].",
        "foreign-structured-upload-form-label-not-own-work-local-shared": "შეგიძლიათ ასევე სცადოთ [[Special:Upload|ატვირთვის გვერდი {{SITENAME}}-ზე]], თუ ამ ფაილის ატვირთვა დაშვებულია მათი პოლიტიკის შესაბამისად.",
        "backend-fail-stream": "ფაილი $1 ტრანსლირება ვერ მოხერხდა.",
        "backend-fail-backup": "ფაილი $1 სარეზერვო ასლის გაკეთება ვერ მოხერხდა.",
        "filerevert-badversion": "არ არსებობს ფაილის წინა ლოკალური ვერსია მოთხოვნილი  თარიღითა და დროით",
        "filedelete": "$1 წაშლა",
        "filedelete-legend": "ფაილის წაშლა",
-       "filedelete-intro": "თქვენ შლით '''[[Media:$1|$1]]''' მისი ისტორიით.",
+       "filedelete-intro": "თქვენ შლით <strong>[[Media:$1|$1]]-ს</strong> მისი ისტორიით.",
        "filedelete-intro-old": "<span class=\"plainlinks\">თქვენ შლით ვერსიას '''[[Media:$1|$1]]'''  [$4 $3, $2]-დან.</span>",
        "filedelete-comment": "მიზეზი:",
        "filedelete-submit": "წაშლა",
-       "filedelete-success": "'''$1''' წაშლილია.",
+       "filedelete-success": "<strong>$1</strong> წაშლილია.",
        "filedelete-success-old": "ვერსია '''[[Media:$1|$1]]'''  $3 $2-დან წაიშალა.",
        "filedelete-nofile": "'''$1''' არ არსებობს.",
        "filedelete-nofile-old": "მითითებული ატრიბუტებით '''$1'''-ის არქივირებული ვერსია არ არსებობს.",
        "unusedtemplates": "გამოუყენებელი თარგები",
        "unusedtemplatestext": "ეს გვერდი სახელთა სივრცეში \"{{ns:template}}\" მოიცავს ყველა იმ გვერდის ჩამონათვალს, რომელიც არ არის მოთავსებული სხვა გვერდებზე.\nგახსოვდეთ თარგების სხვა ბმულებს სანამ წაშლით შეამოწმეთ.",
        "unusedtemplateswlh": "სხვა ბმულები",
-       "randompage": "á\83\9cá\83\94á\83\91á\83\98á\83¡á\83\9bá\83\98á\83\94á\83 ი გვერდი",
+       "randompage": "á\83¨á\83\94á\83\9bá\83\97á\83®á\83\95á\83\94á\83\95á\83\98á\83\97ი გვერდი",
        "randompage-nopages": "{{PLURAL:$2|სახელთა შემდეგი სივრცე|სახელთა შემდეგ სივრცეში}} \"$1\" არ არის გვერდები.",
        "randomincategory": "კატეგორიის შემთხვევითი გვერდი",
        "randomincategory-invalidcategory": "კატეგორია „$1“ არ არსებობს.",
        "randomincategory-nopages": "კატეგორიაში [[:კატეგორია:$1|$1]] გვერდები არაა.",
        "randomincategory-category": "კატეგორია:",
        "randomincategory-legend": "შემთხვევითი გვერდი კატეგორიაში",
-       "randomincategory-submit": "á\83\9bá\83\98á\83\93á\83\98",
+       "randomincategory-submit": "á\83¬á\83\98á\83\9c",
        "randomredirect": "ნებისმიერი გადამისამართება",
        "randomredirect-nopages": "სახელთა სივრცეში „$1“ არ არის გადამისამართებები.",
        "statistics": "სტატისტიკა",
        "apisandbox": "API-ს სავარჯიშო",
        "apisandbox-jsonly": "API-ის სავარჯიშოს გამოსაყენებლად საჭიროა JavaScript.",
        "apisandbox-api-disabled": "API ამ საიტზე გამორთულია.",
+       "apisandbox-intro": "გამოიყენეთ ეს გვერდი, თუ გსურთ მოსინჯოთ <strong>MediaWiki web service API</strong>.\nიხილეთ [[mw:API:Main page|API დოკუმენტაცია]] სხვა დეტალებისათვის.\nმაგალითი: [//www.mediawiki.org/wiki/API#A_simple_example მიიღეთ მთავარი გვერდის შინაარსი]. შეგიძლიათ ნახოთ სხვა მაგალითებიც.\n\nგაითვალისწინეთ, რომ თუმცა ეს სავარჯიშოა, თქვენმა მოქმედებამ შესაძლოა შეცვალოს ვიკის გვერდი.",
        "apisandbox-fullscreen": "პანელის გაშლა",
        "apisandbox-fullscreen-tooltip": "პანელის გაშლა ისე, რომ ბრაუზერის მთელი ფანფარა დაიკავოს.",
        "apisandbox-unfullscreen": "გვერდის ჩვენება",
        "apisandbox-results": "შედეგები",
        "apisandbox-sending-request": "API მოთხოვნის გაგზავნა...",
        "apisandbox-loading-results": "API შედეგების მიღება...",
+       "apisandbox-results-error": "მოხდა შეცდომა API-ის პასუხისას: $1.",
        "apisandbox-request-url-label": "მოთხოვნის URL:",
        "apisandbox-request-time": "თხოვნის დრო: $1მწ",
        "apisandbox-results-fixtoken": "ტოკენის შესწორება და თავიდან გაგზავნა",
        "listgrouprights-namespaceprotection-namespace": "სახელთა სივრცე",
        "listgrouprights-namespaceprotection-restrictedto": "უფლება, რომელიც მომხმარებელს რედაქტირების უფლებას აძლევს",
        "listgrants": "ანიჭებს",
+       "listgrants-summary": "აქ მოცემულია ნებართვების სია, მომხმარებელთა უფლებებზე წვდომით. მომხმარებლებს შეუძლიათ დაუკავშირდნენ აპლიკაციებს და გამოიყენონ მათი ანგარიში. აპლიკაცია ვერ გამოიყენებს იმ უფლებებს, რომელიც მომხმარებელს არ გააჩნია.\nინდივიდუალურ უფლებებზე იხილეთ [[{{MediaWiki:Listgrouprights-helppage}}|დამატებითი ინფორმაცია]].",
        "listgrants-grant": "ნებართვა",
        "listgrants-rights": "უფლებები",
        "trackingcategories": "კატეგორიის მიდევნება",
        "tags-deactivate-not-allowed": "შეუძლებელია დასათაურების გათიშვა „$1“.",
        "tags-deactivate-submit": "დეაქტივაცია",
        "tags-apply-no-permission": "თქვენ არ გაქვთ უფლება მიიღოთ ცვლილების დასათაურება საკუთარ ცვლილებებთან",
+       "tags-apply-blocked": "თქვენ ვერ შეინახავთ ტეგებს თქვენს ცვლილებებთან ერთად სანამ დაბლოკილი ხართ.",
        "tags-apply-not-allowed-one": "დასათაურება «$1» ავტომატურად არ შეიძლება იქნას მიღებული.",
        "tags-apply-not-allowed-multi": "შემდეგი {{PLURAL:$2|ტეგი|ტეგები}} არ შეიძლება იყოს ხელით მიღებული: $1",
        "tags-update-no-permission": "თქვენ არ გაქვთ ტეგების დამატების ან შეცვლის უფლება ცალკეული ვერსიების ცვლილებებიდან ან ჟურნალების ჩანაწერებიდან",
        "mw-widgets-titleinput-description-new-page": "გვერდი ჯერ არ არსებობს",
        "mw-widgets-titleinput-description-redirect": "გადამისამართება $1-ზე",
        "api-error-blacklisted": "გთხოვთ, აირჩიეთ სხვა, აღწერილობითი სათაური.",
+       "sessionmanager-tie": "შეუძლებელია მრავალი მოთხოვნის ავთენთიფიკაციის ტიპების გაერთიანება: $1.",
        "sessionprovider-generic": "$1 სესიები",
        "sessionprovider-mediawiki-session-cookiesessionprovider": "cookie-სთან დაკავშირებული სესიები",
        "sessionprovider-nocookies": "შესაძლოა ქუქები გათიშულია. გთხოვთ ჩართეთ და სცადეთ განმეორებით.",
index 9bfd0f7..1412293 100644 (file)
        "databaseerror": "ဒေတာဘေ့စ် အမှား",
        "databaseerror-function": "လုပ်ဆောင်ချက် - $1",
        "databaseerror-error": "အမှား - $1",
+       "laggedslavemode": "<strong>သတိပေးချက်။</strong> စာမျက်နှာတွင် မကြာမီက အသစ်တင်ခြင်းများ မပါဝင်ပါ။",
        "readonly": "ဒေတာဘေ့စ် ပိတ်ထားသည်။",
        "missing-article": "စာမျက်နှာ \"$1\" မှ $2 ကို ရှာတွေ့သင့်သည်ဖြစ်သော်လည်း ဒေတာဘေ့(စ်) သည် ရှာမတွေ့ပါ။\n\nယင်းသည် ဖျက်ထားပြီးသား diff သို့မဟုတ် မှတ်တမ်းလင့် တစ်ခုကြောင့် ဖြစ်လေ့ရှိသည်။\n\nယင်းသို့မဟုတ်ပါက သင်သည် ဤဆော့ဝဲအတွင်းမှ အမှားတစ်ခုကို တွေ့နေခြင်းဖြစ်ကောင်းဖြစ်မည်။ ဤသည်ကို [[Special:ListUsers/sysop|administrator]] သို့ ကျေးဇူးပြု၍ သတင်းပို့ပေးပါ။ URL လင့်ကိုပါ ထည့်သွင်းဖော်ပြပေးပါရန်။",
        "missingarticle-rev": "(တည်းဖြတ်မူ#: $1)",
        "rcshowhidemine": "ကျွန်ုပ်တည်းဖြတ်ထားသည်များ $1",
        "rcshowhidemine-show": "ပြသရန်",
        "rcshowhidemine-hide": "ဝှက်",
-       "rcshowhidecategorization-show": "ပြသရန်",
-       "rcshowhidecategorization-hide": "ဝှက်ရန်",
+       "rcshowhidecategorization": "စာမျက်နှာ ကဏ္ဍထည့်သွင်းခြင်း $1ရန်",
+       "rcshowhidecategorization-show": "ပြ",
+       "rcshowhidecategorization-hide": "ဝှက်",
        "rclinks": "$2 ရက်အတွင်းမှ နောက်ဆုံးပြင်ဆင်ချက် $1 ခုကို ပြရန်</br> $3",
        "diff": "ကွဲပြားမှု",
        "hist": "မှတ်တမ်း",
        "wlshowhideminor": "အရေးမကြီးသော ပြင်ဆင်မှုများ",
        "wlshowhideliu": "မှတ်ပုံတင်ထားသော အသုံးပြုသူများ",
        "wlshowhideanons": "အမည်မသိ အသုံးပြုသူများ",
+       "wlshowhidecategorization": "စာမျက်နှာ ကဏ္ဍထည့်သွင်းခြင်း",
        "watchlist-options": "စောင့်ကြည့်စာရင်းအတွက် ရွေးချယ်စရာများ",
        "watching": "စောင့်ကြည့်လျက်ရှိ...",
        "unwatching": "စောင့်မကြည့်တော့...",
index 106ac6d..5bcf3a3 100644 (file)
        "actions": "Tōng-chok",
        "namespaces": "Miâ-khong-kan",
        "variants": "piàn-thé",
-       "navigation-heading": "導覽目錄",
+       "navigation-heading": "Sûn-lám me-niú",
        "errorpagetitle": "Chhò-gō·",
        "returnto": "Tò-tńg khì $1.",
        "tagline": "Ùi {{SITENAME}}",
        "unprotectthispage": "kái chit ia̍h ê pó-hō͘",
        "newpage": "Sin ia̍h",
        "talkpage": "Thó-lūn chit ia̍h",
-       "talkpagelinktext": "Thó-lūn",
+       "talkpagelinktext": "thó-lūn",
        "specialpage": "Te̍k-sû-ia̍h",
        "personaltools": "Kò-jîn kang-khū",
        "articlepage": "Khoàⁿ loē-iông ia̍h",
-       "talk": "thó-lūn",
+       "talk": "Thó-lūn",
        "views": "Khoàⁿ",
        "toolbox": "Ke-si",
        "userpage": "Khoàⁿ iōng-chiá ê Ia̍h",
        "viewcount": "Chit ia̍h kàu taⁿ, hō͘ lâng khoàⁿ $1 pái.",
        "protectedpage": "Siū pó-hō͘ ê ia̍h",
        "jumpto": "Thiàu khì:",
-       "jumptonavigation": "Se̍h chām",
+       "jumptonavigation": "se̍h chām",
        "jumptosearch": "chhiau-chhoē",
        "view-pool-error": "Pháiⁿ-sè, chit-má chú-ki siuⁿ koè bô-êng.\nSiuⁿ koè chē lâng beh khoàⁿ chit ia̍h.\nChhiáⁿ sio-tán chi̍t-ē,  chiah koh lâi khoàⁿ chit ia̍h.\n\n$1",
        "generic-pool-error": "Pháiⁿ-sè, chit-má chú-ki siuⁿ koè bô-êng.\nSiuⁿ chē lâng beh khoàⁿ chit ia̍h.\nChhiáⁿ sio-tán chi̍t-ē,  chiah koh lâi khoàⁿ chit ia̍h.",
        "pool-queuefull": "Tūi-lia̍t pâi moá ah",
        "pool-errorunknown": "M̄-chai siáⁿ chhò-gō͘",
        "pool-servererror": "無提供系統服務總數的統計。",
-       "aboutsite": "hían-sī",
-       "aboutpage": "Project:koan-hē",
+       "aboutsite": "Koan-hē {{SITENAME}}",
+       "aboutpage": "Project:Koan-hē",
        "copyright": "Tû liáu ū lēng-goā kóng, nā bô loē-iông sī chiàu $1 tiâu-kiāⁿ tō thang sú-iōng.",
        "copyrightpage": "{{ns:project}}:Pán-khoân",
        "currentevents": "Sin-bûn sū-kiāⁿ",
        "emailnotauthenticated": "Lí ê e-mail chū-chí iáu-bōe khak-jīn ū-hāu, só·-í ē--kha ê e-mail kong-lêng bē-ēng-tit.",
        "noemailprefs": "Tī lí ê siat-piān chí-tēng chi̍t ê tiān-chú-phoe tē-chí thang hō͘ chia ê kong-lêng ē-tàng ēng.",
        "emailconfirmlink": "Chhiáⁿ khak-jīn lí ê e-mail chū-chí ū-hāu",
+       "loginlanguagelabel": "Gí-giân: $1",
        "pt-login": "Teng-ji̍p",
        "pt-login-button": "Teng-ji̍p",
        "pt-createaccount": "Khui sin kháu-chō",
        "nowiki_sample": "Chia siá bô keh-sek ê bûn-jī",
        "image_sample": "Iann-siong-e-le.jpg",
        "image_tip": "Giap tī lāi-bīn ê iáⁿ-siōng",
+       "media_tip": "Tóng-àn liân-kiat",
        "sig_tip": "Lí ê chhiam-miâ kap sî-kan ìn-á",
        "summary": "Khài-iàu:",
        "subject": "Tê-bo̍k/piau-tê:",
        "sourcefilename": "Tóng-àn goân miâ:",
        "destfilename": "Tóng-àn sin miâ:",
        "watchthisupload": "Kàm-sī chit ia̍h",
-       "upload-success-subj": "Sàng-chiūⁿ-bāng sêng-kong",
        "backend-fail-delete": "Bô-hoat-tō· kā tóng-àn \"$1\" thâi tiāu",
        "license": "Siū-khoân:",
        "license-header": "Siū-khoân",
        "watchlist-details": "Kàm-sī-toaⁿ ū {{PLURAL:$1|$1 ia̍h|$1 ia̍h}}, thó-lūn-ia̍h bô sǹg chāi-lāi.",
        "wlnote": "$3 $4: Ē-kha sī <strong>$2</strong> tiám-cheng í-lāi siōng sin ê <strong>$1</strong> ê kái-piàn.",
        "wlshowlast": "Hián-sī chêng $1 tiám-cheng $2 ji̍t",
-       "watchlistall2": "choân-pō͘",
        "deletepage": "Thâi ia̍h",
        "confirm": "Khak-tēng",
        "excontent": "lōe-iông sī: '$1'",
        "contributions": "{{GENDER:$1|Iōng-chiá}} ê kòng-hiàn",
        "contributions-title": "Iōng-chiá $1--ê kòng-hiàn",
        "mycontris": "Góa ê kòng-hiàn",
+       "anoncontribs": "Kòng-hiān",
        "nocontribs": "Chhōe bô tiâu-kiāⁿ ū-tùi ê hāng-bo̍k.",
        "uctop": "(siōng téng ê)",
        "month": "Kàu tó 1 kó͘ goe̍h ûi-chí:",
        "sp-contributions-username": "IP Chū-chí a̍h iōng-chiá miâ:",
        "sp-contributions-submit": "Chhoē",
        "whatlinkshere": "Tó-ūi liân kàu chia",
+       "whatlinkshere-title": "Liân khì \"$1\" ê ia̍h-bīn",
        "whatlinkshere-page": "頁:",
        "linkshere": "Í-hā '''[[:$1]]''' liân kàu chia:",
        "nolinkshere": "Bô poàⁿ ia̍h liân kàu '''[[:$1]]'''.",
        "isredirect": "choán-ia̍h",
+       "isimage": "tóng-àn liân-kiat",
        "whatlinkshere-prev": "{{PLURAL:$1|chêng|chêng $1 ê}}",
        "whatlinkshere-next": "{{PLURAL:$1|āu|āu $1 ê}}",
        "whatlinkshere-links": "← Liân kàu chia",
        "thumbnail-more": "Hòng-tōa",
        "filemissing": "Bô tóng-àn",
        "import": "Su-ji̍p ia̍h",
-       "tooltip-pt-userpage": "Lí chit ê iōng-chiá ê ia̍h",
+       "tooltip-pt-userpage": "{{GENDER:|Lí ê iōng-chiá}} ê ia̍h",
        "tooltip-pt-mytalk": "Lí ê thó-lūn ia̍h",
-       "tooltip-pt-preferences": "Lí ê siat-tēng",
+       "tooltip-pt-preferences": "{{GENDER:|Lí ê}} siat-tēng",
        "tooltip-pt-watchlist": "你監視的頁有改過的清單",
        "tooltip-pt-mycontris": "Lí ê kòng-hiàn lia̍t-toaⁿ",
        "tooltip-pt-login": "Hi-bāng lí teng-ji̍p; m̄-ko bô kiông-chè",
        "tooltip-t-whatlinkshere": "Só͘-ū liân kàu chia ê liat-toaⁿ",
        "tooltip-t-recentchangeslinked": "Liân kàu chit ia̍h koh choè-kīn ū kái koè--ê",
        "tooltip-feed-atom": "訂看這頁的修改",
-       "tooltip-t-contributions": "Khoàⁿ chit ê iōng-chiá ê kòng-hiàn lia̍t-toaⁿ",
+       "tooltip-t-contributions": "{{GENDER:$1|Pún iōng-chiá}} ê kòng-hiàn lia̍t-toaⁿ",
        "tooltip-t-upload": "Í-keng sàng chiūⁿ-bāng ê tóng-àn",
        "tooltip-t-specialpages": "Só͘-ū te̍k-sû-ia̍h ê lia̍t-toaⁿ",
        "tooltip-t-print": "Chit ia̍h ê ìn-soat pán-pún",
        "metadata-expand": "Hián-sī iù-chiat",
        "metadata-collapse": "Am iù-chiat",
        "metadata-fields": "佇顯示圖片的頁,若掀開元資料,下跤的EXIF資料會儂看著。其他的元資料是先看無。\n* 廠商\n* 機型\n* 翕像的時陣\n* 曝光\n* 光圈\n* ISO 速率\n* 焦距\n* 作者\n* 版權\n* 說明\n* 緯度(GPS)\n* 經度(GPS)\n* 海拔(GPS)",
+       "exif-software": "Sú-iōng ê nńg-thé",
        "namespacesall": "choân-pō·",
        "monthsall": "choân-pō͘",
        "confirmemail": "Khak-jīn e-mail chū-chí",
index 6174c80..39f5ca9 100644 (file)
        "expensive-parserfunction-category": "Pagina's die te veel kostbare parserfuncties gebruiken",
        "post-expand-template-inclusion-warning": "Waarschuwing: de maximale transclusiegrootte voor sjablonen is overschreden.\nSommige sjablonen worden niet getranscludeerd.",
        "post-expand-template-inclusion-category": "Pagina's waarvoor de maximale transclusiegrootte is overschreden",
-       "post-expand-template-argument-warning": "Waarschuwing: deze pagina bevat tenminste een sjabloonparameter met een te grote transclusiegrootte.\nDeze parameters zijn weggelaten.",
+       "post-expand-template-argument-warning": "Waarschuwing: deze pagina bevat ten minste een sjabloonparameter met een te grote transclusiegrootte.\nDeze parameters zijn weggelaten.",
        "post-expand-template-argument-category": "Pagina's die missende sjabloonparameters bevatten",
        "parser-template-loop-warning": "Er is een kringloop in sjablonen geconstateerd: [[$1]]",
        "parser-template-recursion-depth-warning": "De recursiediepte voor sjablonen is overschreden ($1)",
        "linksearch-pat": "Zoekpatroon:",
        "linksearch-ns": "Naamruimte:",
        "linksearch-ok": "Zoeken",
-       "linksearch-text": "Het jokerteken gebruiken, zoals \"*.wikipedia.org\" of \"*.org\" is toegestaan.\nHeeft tenminste een topleveldomein nodig, zoals bijvoorbeeld \"*.org\".<br />\n{{PLURAL:$2|Ondersteund protocol|Ondersteunde protocollen}}: $1 (wordt \"http://\" als er geen protocol wordt opgegeven).",
+       "linksearch-text": "Het jokerteken gebruiken, zoals \"*.wikipedia.org\" of \"*.org\" is toegestaan.\nHeeft ten minste een topleveldomein nodig, zoals bijvoorbeeld \"*.org\".<br />\n{{PLURAL:$2|Ondersteund protocol|Ondersteunde protocollen}}: $1 (wordt \"http://\" als er geen protocol wordt opgegeven).",
        "linksearch-line": "$1 heeft een koppeling in $2",
        "linksearch-error": "Wildcards zijn alleen toegestaan aan het begin van een hostnaam.",
        "listusersfrom": "Gebruikers bekijken vanaf:",
        "tags-edit-failure": "De wijzigingen konden niet toegepast worden:\n$1",
        "tags-edit-nooldid-title": "Ongeldige doelversie",
        "tags-edit-nooldid-text": "U hebt geen doelversie aangegeven waarop deze handeling uitgevoerd moet worden, of de aangegeven versie bestaat niet.",
-       "tags-edit-none-selected": "Selecteer tenminste één label om toe te voegen of te verwijderen.",
+       "tags-edit-none-selected": "Selecteer ten minste één label om toe te voegen of te verwijderen.",
        "comparepages": "Pagina's vergelijken",
        "compare-page1": "Pagina 1",
        "compare-page2": "Pagina 2",
index c1b8b59..a127831 100644 (file)
        "october-date": "$1 ଅକ୍ଟୋବର",
        "november-date": "$1 ନଭେମ୍ବର",
        "december-date": "$1 ଡିସେମ୍ବର",
+       "period-am": "ପୁର୍ବାହ୍ନ",
+       "period-pm": "ଅପରାହ୍ନ",
        "pagecategories": "{{PLURAL:$1|ଶ୍ରେଣୀ|ଶ୍ରେଣୀସମୂହ}}",
        "category_header": "\"$1\" ଶ୍ରେଣୀରେ ଥିବା ପୃଷ୍ଠାଗୁଡ଼ିକ",
        "subcategories": "ସାନ ଶ୍ରେଣୀସମୂହ",
        "morenotlisted": "ଏହା ପୁରା ହୋଇ ନାହିଁ",
        "mypage": "ପୃଷ୍ଠା",
        "mytalk": "ଆଲୋଚନା",
-       "anontalk": "à¬\8fହି IP address à¬\89ପରà­\87 à¬\86ଲà­\8bà¬\9aନା",
+       "anontalk": "ଆଲୋଚନା",
        "navigation": "ଦିଗବାରେଣି",
        "and": "&#32;ଓ",
        "qbfind": "ଖୋଜନ୍ତୁ",
        "actionthrottledtext": "ସ୍ପାମକୁ ବନ୍ଦ କରିବା ନିମନ୍ତେ ଏକ ଅଳ୍ପ ସମୟ ବିରତି ଭିତରେ ଆପଣଙ୍କୁ ଏହି କାମଟୀ ବାରମ୍ବାର କରିବାକୁ ଅନୁମତି ଦିଆଯାଉନାହିଁ ଓ ଆପଣ ସୀମା ପାର କରିଯାଇଛନ୍ତି ।\nଦୟାକରି କିଛି ସମୟ ପରେ ଚେଷ୍ଟା କରନ୍ତୁ ।",
        "protectedpagetext": "ଏହି ପୃଷ୍ଠାଟି ସମ୍ପାଦନା କିମ୍ବା ଅନ୍ୟକୌଣସି କାର୍ଯ୍ୟ କରିବାରୁ କିଳାଯାଇଛି ।",
        "viewsourcetext": "ଆପଣ ଏହି ପୃଷ୍ଠାର ଲେଖା ଦେଖିପାରିବେ ଓ ନକଲ କରିପାରିବେ:",
-       "viewyourtext": "ଆପଣ '''ଆପଣଙ୍କ ସମ୍ପାଦିତ ''' ଅଧରଟିକୁ ଦେଖିପାରିବେ ଓ ଏହି ପୃଷ୍ଠାକୁ ନକଲ କରି ପାରିବେ",
+       "viewyourtext": "ଆପଣ <strong>ଆପଣଙ୍କ ସମ୍ପାଦିତ </strong> ଅଧରଟିକୁ ଦେଖିପାରିବେ ଓ ଏହି ପୃଷ୍ଠାକୁ ନକଲ କରି ପାରିବେ",
        "protectedinterface": "ଏହି ପୃଷ୍ଠାଟି ଏହି ଉଇକିରେ ଥିବା ସଫ୍ଟୱେର ନିମନ୍ତେ ଇଣ୍ଟରଫେସ ଲେଖା ଯୋଗାଇଥାଏ ଓ ଏହା ଅପବ୍ୟବହାରକୁ ରୋକିବା ନିମନ୍ତେ କିଳାଯାଇଅଛି । ସମସ୍ତ ଉଇକିର ଅନୁବାଦକୁ ଯୋଡ଼ିବା ଏବଂ ବଦଳାଇବା ପାଇଁ ମେଡ଼ିଆଉଇକିର ସ୍ଥାନୀୟ ପ୍ରକଳ୍ପରେ ଥିବା [//translatewiki.net/ translatewiki.net]କୁ ବ୍ୟବହାର କରନ୍ତୁ ।",
        "editinginterface": "'''ଚେତାବନୀ:''' ଆପଣ ସଫ୍ଟୱେରର ଇଣ୍ଟରଫେସ ଲେଖା ଯୋଗାଇବା ନିମନ୍ତେ ବ୍ୟବହାର କରାଯାଉଥିବା ଏକ ପୃଷ୍ଠାର ସମ୍ପାଦନା କରୁଅଛନ୍ତି ।\nଏହି ଉଇକିପୃଷ୍ଠାର କିଛି ବି ବଦଳ ବାକି ସଭ୍ୟମାନଙ୍କ ଇଣ୍ଟରଫେସର ଦେଖଣାକୁ ପ୍ରଭାବିତ କରିବ ।",
        "translateinterface": "ସମସ୍ତ ଉଇକିରେ ଅନୁବାଦ ଯୋଡିବା ପାଇଁ କିମ୍ବା ବଦଳାଇବା ପାଇଁ ମେଡିଆଉଇକିର ଅଞ୍ଚଳିକୀକରଣ ପ୍ରକଳ୍ପ  [//translatewiki.net/ translatewiki.net] ବ୍ୟବହାର କରନ୍ତୁ ।",
        "virus-scanfailed": "ସ୍କାନ କରିବା ବିଫଳ ହେଲା (କୋଡ଼ $1)",
        "virus-unknownscanner": "ଅଜଣା ଆଣ୍ଟିଭାଇରସ:",
        "logouttext": "<strong>ଲଗ-ଆଉଟ ହୋଇଗଲା ।</strong>\n\nଆପଣ ନିଜର ବ୍ରାଉଜରର ଅସ୍ଥାୟୀ ସ୍ମତି (cache) ନ ଲିଭାଇବା ଯାଏ ହୁଏତ କିଛି ପୃଷ୍ଠାରେ ଲଗ-ଇନ ହୋଇ ରହିପାରେ ।",
+       "cannotlogoutnow-title": "ଲଗ ଆଉଟ ହେଇପାରିଲା ନାହିଁ",
+       "cannotlogoutnow-text": "$1ବ୍ୟବହାର କରୁଥିବା ବେଳେ ଲଗ ଆଉଟ ହେଇପାରିବ ନାହିଁ ।",
        "welcomeuser": "ସ୍ଵାଗତ, $1!",
        "welcomecreation-msg": "ଆପଣଙ୍କ ଖାତାଟି ଖୋଲାଗଲା\nନିଜର [[Special:Preferences|{{SITENAME}} ପସନ୍ଦସବୁକୁ]] ବଦଳାଇବାକୁ ଭୁଲିବେ ନାହିଁ ।",
        "yourname": "ବ୍ୟବହାରକାରୀଙ୍କ ନାମ:",
        "remembermypassword": "ଏହି ବ୍ରାଉଜରରେ (ସବୁଠୁ ଅଧିକ ହେଲେ $1 {{PLURAL:$1|day|ଦିନ}}) ପାଇଁ ମୋ ଲଗଇନ ମନେ ରଖିଥିବେ",
        "userlogin-remembermypassword": "ମୋତେ ଲଗ-ଇନ କରି ରଖିଥାନ୍ତୁ",
        "userlogin-signwithsecure": "ନିରାପଦ କନେକସନ ବ୍ୟବ‌ହାର କରନ୍ତୁ",
+       "cannotloginnow-title": "ଏବେ ଲଗ ଇନ ହୋଇପାରିବ ନାହିଁ",
+       "cannotloginnow-text": "$1ବ୍ୟବହାର କରୁଥିବା ବେଳେ ଲଗ ଇନ ହେଇପାରିବ ନାହିଁ ।",
        "yourdomainname": "ଆପଣଙ୍କ ଡୋମେନ:",
        "password-change-forbidden": "ଆପଣ ଏହି ଉଇକିରେ ପାସୱାର୍ଡ ବଦଳାଇ ପାରିବେ ନାହିଁ ।",
        "externaldberror": "ବୋଧ ହୁଏ ଚିହ୍ନଟ ଡାଟାବେସ ଭୁଲଟିଏ ହୋଇଥିଲା ବା ଆପଣଙ୍କୁ ନିଜର ବାହାର ଖାତା ଅପଡେଟ କରିବା ନିମନ୍ତେ ଅନୁମତି ମିଳିନାହିଁ ।",
        "createacct-benefit-body2": "{{PLURAL:$1|ପୃଷ୍ଠା|ପୃଷ୍ଠାମାନ}}",
        "createacct-benefit-body3": "ନଗଦ {{PLURAL:$1|ଅବଦାନକାରୀ|ଅବଦାନକାରୀଗଣ}}",
        "badretype": "ଆପଣ ଦେଇଥିବା ପାସବାର୍ଡ଼ଟି ମେଳଖାଉନାହିଁ ।",
+       "usernameinprogress": "ଏହି ବ୍ୟବ‌ହାରକାରୀନାମରେ ଆଉ ଗୋଟେ ଖାତା ଖୋଲା ଯାଉଅଛି । ଦୟାକରି ଅପେକ୍ଷା କରନ୍ତୁ ।",
        "userexists": "ଆପଣ ଦେଇଥିବା ଇଉଜର ନାମ ଆଗରୁ ଅଛି ।\nଦୟାକରି ଅଲଗା ନାମଟିଏ ବାଛନ୍ତୁ ।",
        "loginerror": "ଲଗ‌‌ଇନ ଭୁଲ",
        "createacct-error": "ଖାତା ଖୋଲିବାରେ ଅସୁବିଧା ଘଟିଲା",
        "resetpass_submit": "ପାସୱାର୍ଡ଼ଟିଏ ଦେଇ ଲଗ ଇନ କରନ୍ତୁ",
        "changepassword-success": "ଆପଣଙ୍କ ପାସୱାର୍ଡ଼ଟି ସଫଳତା ପୂର୍ବକ ବଦଳାଇ ଦିଆଗଲା !",
        "changepassword-throttled": "ଆପଣ ନିକଟରେ ଖୁବ ଅଧିକ ଥର ଲଗ ଇନ କରିବାକୁ ଚେଷ୍ଟା କରିଛନ୍ତି ।\nଆଉ ଅଧିକ ଥର ଚେଷ୍ଟା କରିବା ଆଗରୁ ଦୟାକରି $1 ପାଇଁ ଅପେକ୍ଷା କରନ୍ତୁ ।",
+       "botpasswords": "ବଟ ପାସ୍ୱାର୍ଡ",
+       "botpasswords-label-appid": "ବଟ ନାମ:",
+       "botpasswords-label-create": "ତିଆରି କରିବେ",
+       "botpasswords-label-update": "ଅପଡେଟ କରିବେ",
+       "botpasswords-label-cancel": "ବାତିଲ",
+       "botpasswords-label-delete": "ଲିଭାଇବେ",
+       "botpasswords-label-resetpassword": "ପାସୱାର୍ଡ଼ଟି ରିସେଟ କରିବେ",
        "resetpass_forbidden": "ପାସୱାର୍ଡ଼ମାନ ବଦଳା ଯାଇପାରିବ ନାହିଁ",
        "resetpass-no-info": "ଏହି ପୃଷ୍ଠାଟିକୁ ସିଧା ଖୋଲିବା ନିମନ୍ତେ ଆପଣଙ୍କୁ ଲଗ ଇନ କରିବାକୁ ପଡ଼ିବ ।",
        "resetpass-submit-loggedin": "ପାସୱାର୍ଡ଼ ବଦଳାନ୍ତୁ",
        "passwordreset-emailsentemail": "ଏକ ପାସୱାର୍ଡ଼ ପୁନଃସ୍ଥାପନ ଇମେଲ ପଠାଇଦିଆଯାଇଅଛି ।",
        "passwordreset-emailsent-capture": "ତଳେ ଦେଖାଯାଉଥିବା ଭଳି, ପାସୱାର୍ଡ଼ ପୁନଃସ୍ଥାପନ ଇମେଲଟିଏ ପଠାଇଦିଆଯାଇଛି ।",
        "passwordreset-emailerror-capture": "ପାସୱାର୍ଡ଼ ବଦଳାଇବା ସୂଚନା ସହ ଇମେଲଟିଏ ତିଆରି ହୋଇଛି, ଯାହା ତଳେ ଦେଖିପାରିବେ । କିନ୍ତୁ ଏହାକୁ {{GENDER:$2|ସଭ୍ୟ}}ଙ୍କୁ ପଠାଇବାରେ ବିଫଳ ହେଲୁ, କାରଣ: $1",
-       "changeemail": "ଇ-ମେଲ ଠିକଣା ବଦଳାଇବେ",
+       "changeemail": "ଇ-ମେଲ ଠିକଣା ବଦଳାଇବେ କିମ୍ବା କାଢିବେ",
        "changeemail-header": "ଖାତା ଇ-ମେଲ ଠିକଣା ବଦଳାଇବେ",
        "changeemail-no-info": "ଏହି ପୃଷ୍ଠାଟିକୁ ସିଧା ଖୋଲିବା ନିମନ୍ତେ ଆପଣଙ୍କୁ ଲଗ ଇନ କରିବାକୁ ପଡ଼ିବ ।",
        "changeemail-oldemail": "ଏବେର ଇ-ମେଲ ଠିକଣା:",
index 32c1057..d01a6a7 100644 (file)
        "listgrouprights-namespaceprotection-namespace": "Domínio",
        "listgrouprights-namespaceprotection-restrictedto": "Direito(s) do utilizador para editar",
        "listgrants": "Atribuições",
-       "listgrants-summary": "Esta é uma lista de atribuições os respectivos acessos às permissões de utilizador. Os utilizadores podem autorizar aplicações a utilizar suas contas, mas com permissões limitadas baseadas nas atribuições dadas pelos usuários a cada aplicação. No entanto, uma aplicação agindo em nome de um utilizador não tem como utilizar permissões que o utilizador não possui.\nPode haver [[{{MediaWiki:Listgrouprights-helppage}}|informação adicional]] sobre permissões individuais.",
+       "listgrants-summary": "Esta é uma lista de atribuições com os respetivos acessos às permissões de utilizador. Os utilizadores podem autorizar aplicações a utilizar suas contas, mas com permissões limitadas baseadas nas atribuições dadas pelos utilizadores a cada aplicação. No entanto, uma aplicação agindo em nome de um utilizador não pode utilizar permissões que o utilizador não possui.\nPode haver [[{{MediaWiki:Listgrouprights-helppage}}|informação adicional]] sobre permissões individuais.",
        "listgrants-grant": "Atribuição",
        "listgrants-rights": "Direitos",
        "trackingcategories": "Categorias de monitorização",
index e78d108..bb6d06d 100644 (file)
@@ -33,7 +33,8 @@
                        "TomášPolonec",
                        "Mikulas1",
                        "Hromoslav",
-                       "Matma Rex"
+                       "Matma Rex",
+                       "LacoR"
                ]
        },
        "tog-underline": "Podčiarkovať odkazy:",
        "rows": "Riadky:",
        "columns": "Stĺpce:",
        "searchresultshead": "Vyhľadávanie",
-       "stub-threshold": "Prah formátovania <a href=\"#\" class=\"stub\">výhonkov</a> (v bajtoch):",
+       "stub-threshold": "Prah formátovania odkazu ako výhonok:",
        "stub-threshold-sample-link": "príklad",
        "stub-threshold-disabled": "Vypnuté",
        "recentchangesdays": "Koľko dní zobrazovať v posledných úpravách:",
        "uploaderror": "Chyba pri nahrávaní",
        "upload-recreate-warning": "'''Upozornenie: Súbor s týmto názvom bol zmazaný alebo presunutý.'''\n\nĎalšie informácie si môžete pozrieť v zázname zmazaní a presunutí:",
        "uploadtext": "Tento formulár použite na nahrávanie súborov.\nUž nahrané súbory môžete zobraziť alebo hľadať v [[Special:FileList|zozname nahraných súborov]]. Nahrávania a mazania sa tiež zaznamenávajú v [[Special:Log/upload|zázname nahrávaní]].\n\nNa začlenenie obrázka do stránky použite odkaz v tvare\n\n* '''<nowiki>[[</nowiki>{{ns:file}}<nowiki>:Súbor.jpg]]</nowiki>''' - použije sa plná verzia obrázka\n* '''<nowiki>[[</nowiki>{{ns:file}}<nowiki>:Súbor.png|alternatívny text]]</nowiki>''' - vykreslí sa v šírke 200 pixelov s okrajom, na ľavom okraji, s popisom v „alt” texte.\n* '''<nowiki>[[</nowiki>{{ns:media}}<nowiki>:Súbor.ogg]]</nowiki>''' - priamy odkaz na súbor (nezobrazí obrázok na stránke)",
-       "upload-permitted": "Povolené typy súborov: $1.",
-       "upload-preferred": "Uprednostňované typy súborov: $1.",
-       "upload-prohibited": "Zakázané typy súborov: $1.",
+       "upload-permitted": "{{PLURAL:$2|Povolený formát súboru|Povolené typy súborov}}: $1.",
+       "upload-preferred": "{{PLURAL:$2|Uprednostňovaný formát súboru|Uprednostňované typy súborov}}: $1.",
+       "upload-prohibited": "{{PLURAL:$2|Zakázaný formát súboru|Zakázané formáty súborov}}: $1.",
        "uploadlogpage": "Záznam nahrávaní",
        "uploadlogpagetext": "Nižšie je zoznam nedávno nahraných súborov.\nVizuálny prehľad nájdete v [[Special:NewFiles|galérii novo nahraných súborov]].",
        "filename": "Názov súboru",
        "largefileserver": "Tento súbor je väčší ako je možné nahrať na server (z dôvodu obmedzenia veľkosti súboru v konfigurácii servera).",
        "emptyfile": "Zdá sa, že súbor, ktorý ste nahrali je prázdny. Mohlo sa stať, že ste urobili v názve súboru preklep. Prosím, skontrolujte, či skutočne chcete nahrať tento súbor.",
        "windows-nonascii-filename": "Táto wiki nepodporuje názvy súborov so špeciálnymi znakmi.",
-       "fileexists": "Súbor s týmto názvom už existuje, prosím skontrolujte <strong>[[:$1]]</strong> ak nie ste si istý, či ho chcete zmeniť.\n[[$1|thumb]]",
+       "fileexists": "Súbor s týmto názvom už existuje, prosím skontrolujte <strong>[[:$1]]</strong> ak nie ste si {{GENDER:|istý}}, či ho chcete zmeniť.\n[[$1|thumb]]",
        "filepageexists": "Popisná stránka pre tento súbor už bola vytvorená na <strong>[[:$1]]</strong>, ale žiadny súbor s týmto názvom momentálne neexistuje.\nZadané zhrnutie sa neobjaví na popisnej stránke.\nAby sa tam zhrnutie objavilo, budete potrebné ho manuálne upraviť.\n[[$1|thumb]]",
-       "fileexists-extension": "Súbor s podobným názvom už existuje: [[$2|thumb]]\n* Názov súboru, ktorý nahrávate: <strong>[[:$1]]</strong>\n* Názov existujúceho súboru: <strong>[[:$2]]</strong>\nProsím, vyberte preň iný názov.",
+       "fileexists-extension": "Súbor s podobným názvom už existuje: [[$2|thumb]]\n* Názov súboru, ktorý nahrávate: <strong>[[:$1]]</strong>\n* Názov existujúceho súboru: <strong>[[:$2]]</strong>\nNechcete použiť radšej iné meno?",
        "fileexists-thumbnail-yes": "Zdá sa, že súbor je obrázkom redukovanej veľkosti ''(náhľadom)''. [[$1|thumb]]\nProsím, skontolujte súbor <strong>[[:$1]]</strong>.\nAk je kontrolovaný súbor rovnaký obrázok v pôvodnej veľkosti, nie je potrebné nahrávať ďalší náhľad.",
        "file-thumbnail-no": "Názov súboru začína <strong>$1</strong>.\nZdá sa, že je to obrázok redukovanej veľkosti ''(náhľad)''.\nAk máte tento obrázok v plnom rozlíšení, nahrajte ho, inak prosím zmeňte názov.",
        "fileexists-forbidden": "Súbor s týmto názvom už existuje a nie je možné ho prepísať.\nAk si aj tak želáte nahrať svoj súbor, choďte prosím späť a nahrajte tento súbor pod iným názvom. [[File:$1|thumb|center|$1]]",
        "upload-too-many-redirects": "URL obsahoval príliš mnoho presmerovaní",
        "upload-http-error": "Vyskytla sa chyba HTTP: $1",
        "upload-copy-upload-invalid-domain": "Kopírovanie nahraných súborov nie je dostupné z tejto domény.",
+       "upload-dialog-title": "Nahrať súbor",
+       "upload-dialog-button-cancel": "Zrušiť",
+       "upload-dialog-button-done": "Hotovo",
+       "upload-dialog-button-save": "Uložiť",
+       "upload-dialog-button-upload": "Nahrať",
+       "upload-form-label-infoform-title": "Podrobnosti",
+       "upload-form-label-infoform-name": "Meno",
+       "upload-form-label-infoform-name-tooltip": "Jedinečný popis súboru, ktorý bude slúžiť ako názov súboru. Môžete použiť bežný jazyk s medzerami, ako aj znaky s diakritikou. Nezadávajte príponu súboru.",
        "backend-fail-stream": "$1 je názov súboru.",
        "backend-fail-backup": "Nebolo možné zálohovať súbor $1.",
        "backend-fail-notexists": "Súbor $1 neexistuje.",
        "apisandbox-submit": "Odoslať dopyt",
        "apisandbox-reset": "Vyčistiť",
        "apisandbox-retry": "Skúsiť znova",
-       "apisandbox-examples": "Príklad",
+       "apisandbox-examples": "Príklady",
        "apisandbox-results": "Výsledok",
        "apisandbox-request-url-label": "URL požiadavky:",
        "booksources": "Knižné zdroje",
        "emailccsubject": "Kópia správy pre $1: $2",
        "emailsent": "E-mail bol odoslaný",
        "emailsenttext": "Vaša e-mailová správa bola odoslaná.",
-       "emailuserfooter": "Tento e-mail poslal/-a/ $1 používateľovi $2 pomocou funkcie „E-mail používateľovi” na {{GRAMMAR:lokál|{{SITENAME}}}}.",
+       "emailuserfooter": "Tento e-mail {{GENDER:$1|poslal|poslala}} $1 používateľovi $2 pomocou funkcie „{{int:emailuser}}” na {{GRAMMAR:lokál|{{SITENAME}}}}.",
        "usermessage-summary": "Zanechanie správy systému.",
        "usermessage-editor": "Správy systému",
        "watchlist": "Sledované stránky",
        "mywatchlist": "Sledované stránky",
        "watchlistfor2": "$1 $2",
        "nowatchlist": "V zozname sledovaných stránok nemáte žiadne položky.",
-       "watchlistanontext": "Prosím $1 pre prezeranie alebo úpravu vášho zoznamu sledovaných stránok.",
+       "watchlistanontext": "Prihláste sa prosím, ak chcete prezerať alebo upravovať váš zoznam sledovaných stránok.",
        "watchnologin": "Nie ste prihlásený/á",
        "addwatch": "Pridať do zoznamu sledovaných stránok",
-       "addedwatchtext": "Stránka „[[:$1]]“ bola pridaná do vášho zoznamu [[Special:Watchlist|sledovaných stránok]].\nBudú tam uvedené aj budúce úpravy tejto stránky a jej diskusie.",
+       "addedwatchtext": "Stránka „[[:$1]]“ a jej diskusná stránka boli pridané do vášho zoznamu [[Special:Watchlist|sledovaných stránok]].",
        "addedwatchtext-short": "Stránka „$1“ bola pridaná do vášho zoznamu sledovaných.",
        "removewatch": "Odstrániť zo zoznamu sledovaných",
-       "removedwatchtext": "Stránka „[[:$1]]“ bola odstránená z vášho [[Special:Watchlist|zoznamu sledovaných stránok]].",
+       "removedwatchtext": "Stránka „[[:$1]]“ a jej diskusná stránka boli odstránené z vášho [[Special:Watchlist|zoznamu sledovaných stránok]].",
        "removedwatchtext-short": "Stránka „$1“ bola odstránená z vášho zoznamu sledovaných.",
        "watch": "Sledovať",
        "watchthispage": "Sledovať túto stránku",
        "enotif_lastvisited": "Všetky zmeny od vašej poslednej návštevy uvidíte na $1.",
        "enotif_lastdiff": "Zmenu uvidíte v $1.",
        "enotif_anon_editor": "anonymný používateľ $1",
-       "enotif_body": "Drahý $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nZhrnutie redaktora: $PAGESUMMARY $PAGEMINOREDIT\nKontaktujte používateľa:\nmail: $PAGEEDITOR_EMAIL\nwiki: $PAGEEDITOR_WIKI\n\nNedostanete Ä\8falÅ¡ie upozornenia ani v prípade Ä\8falších aktivít na strínke, kým túto stránku nenavštívite.\nMožete tiež vynulovať upozornenia pre všetky vaše sledované stránky.\n\nVáš upozorňovací systém {{GRAMMAR:genitív|{{SITENAME}}}}\n\n--\nZmeniť nastavenia vašich sledovaných stránok môžete na\n{{canonicalurl:Special:Watchlist/edit}}\n\nZmazať stránku z vášho zoznamu sledovaných môžete na\n$UNWATCHURL\n\nNávrhy a ďalšia pomoc:\n{{canonicalurl:{{int:Helppage}}}}",
+       "enotif_body": "Drahý $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nZhrnutie redaktora: $PAGESUMMARY $PAGEMINOREDIT\nKontaktujte používateľa:\nmail: $PAGEEDITOR_EMAIL\nwiki: $PAGEEDITOR_WIKI\n\nNedostanete Ä\8falÅ¡ie upozornenia ani v prípade Ä\8falších aktivít na stránke, kým túto stránku nenavštívite.\nMožete tiež vynulovať upozornenia pre všetky vaše sledované stránky.\n\nVáš upozorňovací systém {{GRAMMAR:genitív|{{SITENAME}}}}\n\n--\nZmeniť nastavenia vašich sledovaných stránok môžete na\n{{canonicalurl:Special:Watchlist/edit}}\n\nZmazať stránku z vášho zoznamu sledovaných môžete na\n$UNWATCHURL\n\nNávrhy a ďalšia pomoc:\n{{canonicalurl:{{int:Helppage}}}}",
        "created": "vytvorení",
        "changed": "zmene",
        "deletepage": "Zmazať stránku",
        "confirm": "Potvrdiť",
        "excontent": "obsah bol: „$1“",
-       "excontentauthor": "obsah bol: „$1“ (a jediný autor bol [[Special:Contributions/$2]])",
+       "excontentauthor": "obsah bol: „$1“ a jediným autorom bol [[Special:Contributions/$2|$2]] ([[User talk:$2|diskusia]])",
        "exbeforeblank": "obsah pred vyčistením stránky bol: '$1'",
        "delete-confirm": "Zmazať „$1“",
        "delete-legend": "Zmazať",
        "ipb-unblock-addr": "Odblokovať $1",
        "ipb-unblock": "Odblokovať používateľa alebo IP adresu",
        "ipb-blocklist": "Zobraziť existujúce blokovania",
-       "ipb-blocklist-contribs": "Príspevky $1",
+       "ipb-blocklist-contribs": "Príspevky {{GENDER:redaktora|redaktorky}} $1",
        "unblockip": "Odblokovať používateľa",
        "unblockiptext": "Použite tento formulár na obnovenie možnosti zápisov\nz/od momentálne zablokovanej IP adresy/používateľa.",
        "ipusubmit": "Zrušiť toto blokovanie",
        "change-blocklink": "zmeniť blokovanie",
        "contribslink": "príspevky",
        "emaillink": "poslať email",
-       "autoblocker": "Boli ste automaticky zablokovaný, pretože vašu IP adresu nedávno použil „[[User:$1|$1]]“.\nUvedený dôvod zablokovania používateľa $2 bol: „$2“",
+       "autoblocker": "Boli ste automaticky zablokovaný, pretože vašu IP adresu nedávno použil „[[User:$1|$1]]“.\nDôvodom zablokovania redaktora $1 bolo „$2“",
        "blocklogpage": "Záznam blokovaní",
        "blocklog-showlog": "Tento používateľ bol v minulosti zablokovaný. Záznam blokovaní uvádza nasledovný dôvod:",
        "blocklog-showsuppresslog": "Tento používateľ bol v minulosti zablokovaný a skrytý. Záznam potlačení uvádza nasledovný dôvod:",
        "range_block_disabled": "Možnosť správcov vytvárať rozsah zablokovaní je vypnutá.",
        "ipb_expiry_invalid": "Neplatný čas ukončenia.",
        "ipb_expiry_temp": "Blokovania skrytých používateľských mien by mali byť trvalé.",
-       "ipb_hide_invalid": "Nepodarilo sa potlačiť tento účet; je možné, že má príliš veľa úprav.",
+       "ipb_hide_invalid": "Nepodarilo sa potlačiť tento účet; má viac ako {{PLURAL:$1|jednu úpravu|$1 úpravy|$1 úprav}}.",
        "ipb_already_blocked": "„$1“ je už zablokovaný",
        "ipb-needreblock": "$1 je už zablokovaný. Chcete zmeniť voľby blokovania?",
        "ipb-otherblocks-header": "{{PLURAL:$1|Iný blok|Iné blokovania}}",
        "lockedbyandtime": "({{GENDER:$1|$1}}, $2 $3 )",
        "move-page": "Presunúť $1",
        "move-page-legend": "Presunúť stránku",
-       "movepagetext": "Pomocou tohto formulára premenujete stránku a premiestnite všetky jej predchádzajúce verzie pod zadaný nový názov.\nStarý názov sa stane presmerovacou stránkou na nový názov.\nMôžete automaticky aktualizovať odkazy odkazujúce na pôvodný názov.\nAk sa rozhodnete túto možnosť nevyužiť, ubezpečte sa, že ste skontrolovali\nvýskyt [[Special:DoubleRedirects|dvojitých]] a [[Special:BrokenRedirects|pokazených]] presmerovaní.\nVy ste zodpovedný za to, aby odkazy naďalej ukazovali tam, kam majú.\n\nUvedomte si, že stránka sa '''nepremiestni''', ak pod novým názvom už stránka existuje.\nToto neplatí iba ak je stránka prázdna alebo presmerovacia a nemá žiadne predchádzajúce verzie.\nTo znamená, že môžete premenovať stránku späť na názov, ktorý mala pred premenovaním, ak ste sa pomýlili, a že nemôžete prepísať\nexistujúcu stránku.\n\n'''UPOZORNENIE!'''\nToto môže byť drastická a nečakaná zmena pre populárnu stránku;\nubezpečte sa preto, skôr ako budete pokračovať, že chápete dôsledky svojho činu.",
-       "movepagetext-noredirectfixer": "Pomocou tohto formulára premenujete stránku a premiestnite všetky jej predchádzajúce verzie pod zadaný nový názov.\nStarý názov sa stane presmerovacou stránkou na nový názov.\nUbezpečte sa, že ste skontrolovali výskyt [[Special:DoubleRedirects|dvojitých]] a [[Special:BrokenRedirects|pokazených]] presmerovaní.\nVy ste zodpovedný za to, aby odkazy naďalej ukazovali tam, kam majú.\n\nUvedomte si, že stránka sa '''nepremiestni''', ak pod novým názvom už stránka existuje.\nToto neplatí iba ak je stránka prázdna alebo presmerovacia a nemá žiadne predchádzajúce verzie.\nTo znamená, že môžete premenovať stránku späť na názov, ktorý mala pred premenovaním, ak ste sa pomýlili, a že nemôžete prepísať\nexistujúcu stránku.\n\n'''UPOZORNENIE!'''\nToto môže byť drastická a nečakaná zmena pre populárnu stránku;\nubezpečte sa preto, skôr ako budete pokračovať, že chápete dôsledky svojho činu.",
+       "movepagetext": "Pomocou tohto formulára premenujete stránku a premiestnite všetky jej predchádzajúce verzie pod zadaný nový názov.\nStarý názov sa stane presmerovacou stránkou na nový názov.\nMôžete automaticky aktualizovať odkazy odkazujúce na pôvodný názov.\nAk sa rozhodnete túto možnosť nevyužiť, ubezpečte sa, že ste skontrolovali\nvýskyt [[Special:DoubleRedirects|dvojitých]] a [[Special:BrokenRedirects|pokazených]] presmerovaní.\nVy ste zodpovedný za to, aby odkazy naďalej ukazovali tam, kam majú.\n\nUvedomte si, že stránka sa <strong>nepremiestni</strong>, ak pod novým názvom už stránka existuje.\nToto neplatí iba ak je stránka prázdna alebo presmerovacia a nemá žiadne predchádzajúce verzie.\nTo znamená, že môžete premenovať stránku späť na názov, ktorý mala pred premenovaním, ak ste sa pomýlili, a že nemôžete prepísať\nexistujúcu stránku.\n\n<strong>UPOZORNENIE!</strong>\nToto môže byť drastická a nečakaná zmena pre populárnu stránku;\nubezpečte sa preto, skôr ako budete pokračovať, že chápete dôsledky svojho činu.",
+       "movepagetext-noredirectfixer": "Pomocou tohto formulára premenujete stránku a premiestnite všetky jej predchádzajúce verzie pod zadaný nový názov.\nStarý názov sa stane presmerovacou stránkou na nový názov.\nUbezpečte sa, že ste skontrolovali výskyt [[Special:DoubleRedirects|dvojitých]] a [[Special:BrokenRedirects|pokazených]] presmerovaní.\nVy ste zodpovedný za to, aby odkazy naďalej ukazovali tam, kam majú.\n\nUvedomte si, že stránka sa <strong>nepremiestni</strong>, ak pod novým názvom už stránka existuje.\nToto neplatí iba ak je stránka prázdna alebo presmerovacia a nemá žiadne predchádzajúce verzie.\nTo znamená, že môžete premenovať stránku späť na názov, ktorý mala pred premenovaním, ak ste sa pomýlili, a že nemôžete prepísať\nexistujúcu stránku.\n\n<strong>UPOZORNENIE!</strong>\nToto môže byť drastická a nečakaná zmena pre populárnu stránku;\nubezpečte sa preto, skôr ako budete pokračovať, že chápete dôsledky svojho činu.",
        "movepagetalktext": "Príslušná diskusná stránka (ak existuje) bude premiestnená spolu so samotnou stránkou; '''nestane sa tak, iba ak:'''\n*už existuje Diskusná stránka pod týmto novým menom, alebo\n*nezaškrtnete nižšie sa nachádzajúci textový rámček.\n\nV takých prípadoch budete musieť, ak si to želáte, premiestniť alebo zlúčiť stránku ručne.",
        "moveuserpage-warning": "'''Upozornenie:''' Chystáte sa presunúť používateľskú stránku. Pamätajte, že týmto presuniete iba stránku a používateľ ''nebude'' premenovaný.",
        "movecategorypage-warning": "<strong>Upozornenie:</strong> Chystáte sa presunúť stránku kategórie. Uvedomte si, že presunutá bude iba táto stránka a že žiadne stránky v pôvodnej kategórii <em>nebudú</em> do novej kategórie automaticky preradené.",
        "tooltip-feed-rss": "RSS feed pre túto stránku",
        "tooltip-feed-atom": "Kanál Atom pre túto stránku",
        "tooltip-t-contributions": "Pozrieť si zoznam príspevkov {{GENDER:$1|tohoto používateľa|tejto používateľky}}",
-       "tooltip-t-emailuser": "Poslať e-mail tomuto používateľovi",
+       "tooltip-t-emailuser": "Poslať e-mail {{GENDER:$1|tomuto redaktorovi|tejto redaktorke}}",
        "tooltip-t-info": "Viac informácií o tejto stránke",
        "tooltip-t-upload": "Nahranie súborov",
        "tooltip-t-specialpages": "Zoznam všetkých špeciálnych stránok",
index 01629cb..f603314 100644 (file)
        "morenotlisted": "Sta lista no xe conpleta.",
        "mypage": "Pàjina",
        "mytalk": "Discussion",
-       "anontalk": "Discusion par sto IP",
+       "anontalk": "Discussion",
        "navigation": "Navigasion",
        "and": "&#32;e",
        "qbfind": "Trova",
        "view": "Varda",
        "view-foreign": "Varda su $1",
        "edit": "Canbia",
+       "edit-local": "Canbia la descrision local",
        "create": "Crea",
        "create-local": "Xonta na descrision local",
        "editthispage": "Canbia sta pagina",
        "jumptonavigation": "navigasion",
        "jumptosearch": "serca",
        "view-pool-error": "En sto momento i server i xè sovracarichi.\nTropi utenti i sta tentando de visuałisare sta pajina.\nAtendare qualche minudo prima de riprovare a cargare ła pajina.\n\n$1",
+       "generic-pool-error": "Ne despiase, en sto momento i server i xè soracarghi.\nGhe xe massa utenti che xe drio sercar de védar sta pajina.\nPar piaser speta n'atimo prima de proàr da novo a recargar la pajina.",
        "pool-timeout": "Timeout durante l'atesa de lo sbloco",
        "pool-queuefull": "La cóa de laorassion la xe piena",
        "pool-errorunknown": "Eror sconossùo",
        "passwordreset-emailtext-ip": "Cualcheduni (probabilmente ti, co indiriso IP $1) ga richiesto l'invio de na nova password par l'aceso a {{SITENAME}} ($4). {{PLURAL:$3|L'utente asocià|I utenti asociadi}} a sto indiriso de posta ełetronega łi xe:\n\n$2\n\n{{PLURAL:$3|Sta password tenporanea ła scadarà|Ste password tenporanee łe scadarà}} dopo {{PLURAL:$5|un dì|$5 dì}}.\n\nSarìa mejo acedare e deçidare na nova password sùito. Se no te si stà ti a fare ła richiesta, o se te te ghe ricordà ła password originałe e no te vołi pi canbiarla, te połi ignorare sto mesajo e continuar doparare ła to password vecia.",
        "passwordreset-emailtext-user": "El utente $1 da {{SITENAME}} (probabilmente ti steso) ga richiesto l'invio de na password nova par {{SITENAME}} ($4). {{PLURAL:$3|El profiło utente asocià|I profiłi utenti asociadi}} a sto indiriso de posta ełetronega łi xe:\n\n$2\n\n{{PLURAL:$3|Sta password tenporanea ła scadarà|Ste password tenporanee łe scadarà}} dopo {{PLURAL:$5|un dì|$5 dì}}.\n\nSarìa mejo acedare e deçidare na nova password sùito. Se no te si stà ti a fare ła richiesta, o se te te ghe ricordà ła password originałe e no te vołi pi canbiarla, te połi ignorare sto mesajo e continuar doparare ła to password vecia.",
        "passwordreset-emailelement": "Nome utente: \n$1\n\nPassword tenporanea: \n$2",
-       "passwordreset-emailsent": "Xe stà invià na mail de reset password.",
+       "passwordreset-emailsentemail": "Xe stà invià na mail de reset password.",
        "passwordreset-emailsent-capture": "Xe stà invià na mail de reset password: el contegù xe riportà cuà de seguito.",
        "passwordreset-emailerror-capture": "Xe stà generà na mail de reset password, riportà cuà de seguito. L'invio a {{GENDER:$2|l'utente}} no xe riusido: $1",
        "changeemail": "Canbia indiriso de posta ełetronega",
        "prefs-displaywatchlist": "Opzioni de visualixassion",
        "prefs-tokenwatchlist": "Geton",
        "prefs-diffs": "Difarense",
-       "email-address-validity-valid": "L'indiriso de posta eletronega pararìa vałido",
-       "email-address-validity-invalid": "Inserisi un indiriso de posta eletronega vałido",
        "userrights": "Gestion dei parmessi dei utenti",
        "userrights-lookup-user": "Gestion de i gruppi utente",
        "userrights-user-editname": "Inserir el nome utente:",
        "right-blockemail": "Inpedìssighe a un utente de mandar e-mail",
        "right-hideuser": "Bloca un nome utente, scondéndolo al publico",
        "right-ipblock-exempt": "Scavalca i blochi de l'IP, i auto-blochi e i blochi de grupi de IP",
-       "right-proxyunbannable": "Salta via i blochi sui proxy",
        "right-unblockself": "Desblocar se steso",
        "right-protect": "Canbiar i livèi de protezion e modificar le pagine protete ricorsivamente",
        "right-editprotected": "Modifica pagine protete",
        "watchthisupload": "Tien d'ocio sto file",
        "filewasdeleted": "Un file con sto nome xè stato xà caricà e scancełà in passato. Verifica $1 prima de caricarlo de novo.",
        "filename-bad-prefix": "El nome del file che te sì drio cargar el scuminsia con '''\"$1\"''', che el xe un nome non-descritivo tipicamente assegnà automaticamente da le fotocàmare digitali. Par piaser siegli un nome piassè descritivo par el to file.",
-       "upload-success-subj": "Caricamento conpletà",
-       "upload-success-msg": "El to caricamento da [$2] el xe 'ndà ben. Te lo cati qua: [[:{{ns:file}}:$1]]",
-       "upload-failure-subj": "Problema nel caricamento",
-       "upload-failure-msg": "Ghe xe stà un problema col caricamento da [$2]:\n\n$1",
-       "upload-warning-subj": "Aviso de caricamento",
-       "upload-warning-msg": "Ghe xe stà un problema col caricamento da [$2]. Torna al [[Special:Upload/stash/$1|modulo de caricamento]] par sistemarlo.",
        "upload-proto-error": "Protocòl mìa giusto",
        "upload-proto-error-text": "Par el caricamento remoto bisogna specificar URL che scuminsia con <code>http://</code> opure <code>ftp://</code>.",
        "upload-file-error": "Eror interno",
        "upload-dialog-button-done": "Fato",
        "upload-dialog-button-save": "Salva",
        "upload-dialog-button-upload": "Carga",
-       "upload-form-label-select-file": "Siegli el file",
        "upload-form-label-infoform-name": "Nome",
        "upload-form-label-infoform-description": "Descrision",
        "upload-form-label-usage-title": "Uso",
        "wlheader-showupdated": "Le pagine che xe stà canbià da la to ultima visita le xe segnà in '''grosso'''",
        "wlnote": "Cuà soto te cati {{PLURAL:$1|'l ultimo canbiamento|i ultimi '''$1''' canbiamenti}} inte {{PLURAL:$2|l'ultema ora|łe ultime '''$2''' ore}}; i dati i xe axornai a łe $4 del $3.",
        "wlshowlast": "Mostra le ultime $1 ore $2 zorni",
-       "watchlistall2": "tute",
        "watchlist-options": "Inpostassion de le pagine tegnùe d'ocio",
        "watching": "Taco a tegner d'ocio...",
        "unwatching": "Desmeto de tegner d'ocio...",
        "contributions": "Contributi {{GENDER:$1|utente}}",
        "contributions-title": "Contributi de $1",
        "mycontris": "Contributi",
+       "anoncontribs": "Contributi",
        "contribsub2": "Par {{GENDER:$3|$1}} ($2)",
        "nocontribs": "No xe stà catà nissuna modifica che vaga ben par sti critèri.",
        "uctop": "(de dèsso)",
        "javascripttest-pagetext-frameworks": "Par piasere, siełi uno de i seguenti framework pa' i test: $1",
        "javascripttest-pagetext-skins": "Siełi na skin có cui exeguir i test:",
        "javascripttest-qunit-intro": "Varda so mediawiki.org ła [$1 documentasion rivardante i test].",
-       "tooltip-pt-userpage": "La to pagina utente",
+       "tooltip-pt-userpage": "La {{GENDER:|to}} pagina utente",
        "tooltip-pt-anonuserpage": "La pàxena utente de sto indirizo IP",
-       "tooltip-pt-mytalk": "La to pagina de discussion",
+       "tooltip-pt-mytalk": "La {{GENDER:|to}} pagina de discussion",
        "tooltip-pt-anontalk": "Discussioni riguardo le modifiche fate da sto ip",
-       "tooltip-pt-preferences": "Le to prefarense",
+       "tooltip-pt-preferences": "Le {{GENDER:|to}} prefarense",
        "tooltip-pt-watchlist": "La lista de le pagine che te sì drio tegner d'ocio",
-       "tooltip-pt-mycontris": "Elenco de i to contributi",
+       "tooltip-pt-mycontris": "L'elenco de i {{GENDER:|to}} contributi",
        "tooltip-pt-login": "Te consiliemo de registrarte, ma no te ghè da farlo par forsa.",
        "tooltip-pt-logout": "Và fora",
        "tooltip-pt-createaccount": "Te incorajemo de farte un utente e 'ndar drento co quelo; comunque no te toca farlo pa' forsa.",
        "tooltip-t-recentchangeslinked": "I ultimi canbiamenti a le pagine pontà da sta qua",
        "tooltip-feed-rss": "Feed RSS par sta pagina",
        "tooltip-feed-atom": "Feed Atom par sta pagina",
-       "tooltip-t-contributions": "Lista de i contribui de sto utente",
+       "tooltip-t-contributions": "La lista de i contribui de {{GENDER:$1|sto|sta}} utente",
        "tooltip-t-emailuser": "Invia on mesajo e-mail a sto utente",
        "tooltip-t-upload": "Carga file",
        "tooltip-t-specialpages": "Lista de tute le pagine speciali",
        "mw-widgets-dateinput-placeholder-day": "AAAA-MM-GG",
        "mw-widgets-dateinput-placeholder-month": "AAAA-MM",
        "mw-widgets-titleinput-description-redirect": "rimando a $1",
-       "api-error-blacklisted": "Par piaser siełi un titoło difarente e descritivo."
+       "api-error-blacklisted": "Par piaser siełi un titoło difarente e descritivo.",
+       "randomrootpage": "Pagina raìsa caxuale"
 }
index e8034ba..f9280ea 100644 (file)
        "subcategories": "子分类",
        "category-media-header": "\"$1\"分类里个媒体",
        "category-empty": "<em>本分类现在呒不任何页面或者媒体文件。</em>",
-       "hidden-categories": "$1囥脫分類",
+       "hidden-categories": "{{PLURAL:$1|囥脱分类}}",
        "hidden-category-category": "囥脫分類",
        "category-subcat-count": "{{PLURAL:$2|迭个分类里向只有下底一只子分类。|迭个分类里向有下底$1只子分类,共总有$2只子分类。}}",
        "category-subcat-count-limited": "迭只分类包括下底个{{PLURAL:$1|子分类|$1只子分类}}。",
        "databaseerror-query": "討信:$1",
        "databaseerror-function": "功能: $1",
        "databaseerror-error": "出錯:$1",
-       "laggedslavemode": "警告: 页面可能弗包含最近个更新。",
+       "laggedslavemode": "<strong>警告:</strong>页面可能弗包括最近个更新。",
        "readonly": "數據庫鎖牢",
        "enterlockreason": "请输入锁定个原因,包括预计解锁个辰光",
        "readonlytext": "数据库目前锁牢勒上,禁止输入新内容及更改,箇蛮有可能是因为数据库拉许维修,完成仔即可恢复。\n\n系统管理员有如下解释:$1",
        "permissionserrors": "权限错误",
        "permissionserrorstext": "为仔下头个{{PLURAL:$1|原因|原因}}咾侬无权进行箇只操作:",
        "permissionserrorstext-withaction": "为仔下头个{{PLURAL:$1|原因|原因}}咾侬无权进行$2操作:",
-       "recreate-moveddeleted-warn": "'''警告: 你侬要转建一个之前删脱过个页面。'''\n\n你侬应该要考虑考虑继续编箇页是否合适。\n方便考虑,箇页个删记录提供到下头:",
+       "recreate-moveddeleted-warn": "<strong>警告:你来上重新创建一只老早删过个页面。</strong>\n\n你应该考虑继续编辑箇只页面啊合适。为方便起见,箇只页面个删除搭移动记录提供勒下底:",
        "moveddeleted-notice": "箇页删脱哉。箇页个删除搭移动记录提供垃拉下头以便参考。",
        "log-fulllog": "查看完整日志",
        "edit-hook-aborted": "编辑畀钩子取消。\n渠弗曾畀出解释。",
        "page_last": "阿末",
        "histlegend": "选择比较版本:标记要比较个两只版本,回车或者揿页面底里个揿钮。<br /> 图例:(当前) = 搭当前版本有啥两样, (上个) = 搭上个版本有啥两样,小 = 小改动。",
        "history-fieldset-title": "浏览页史",
-       "history-show-deleted": "只删脱个",
+       "history-show-deleted": "只显示删脱个",
        "histfirst": "顶早",
        "histlast": "顶晏",
        "historysize": "($1字节)",
        "showhideselectedversions": "显示/囥脱选定修订版本",
        "editundo": "撤销",
        "diff-empty": "(呒不差别)",
-       "diff-multi-sameuser": "(朆显示同一用户个$1个中é\97´ç\89\88æ\9c¬ï¼\89",
+       "diff-multi-sameuser": "(朆显示同一用户个$1å\8fªä¸­é\97´ç\89\88æ\9c¬ï¼\89",
        "diff-multi-otherusers": "(朆显示{{PLURAL:$1|另一用户|$2个用户}}个{{PLURAL:$1|$1只中间版本}})",
        "diff-multi-manyusers": "(朆显示超过$2个用户个$1只中间版本)",
        "searchresults": "搜寻结果",
        "searchprofile-images-tooltip": "搜寻文件",
        "searchprofile-everything-tooltip": "搜寻全部内容(包括讨论页)",
        "searchprofile-advanced-tooltip": "垃拉自定义名字空间里向搜索",
-       "search-result-size": "$1($2字)",
+       "search-result-size": "$1($2字)",
        "search-result-category-size": "$1个成员($2个儿分类,$3个文件)",
        "search-redirect": "(转戳到 $1)",
        "search-section": "(段落 $1)",
        "yournick": "新签名:",
        "badsig": "无效原始签名;检查 HTML 标签。",
        "yourgender": "侬希望畀哪亨称呼?",
-       "gender-unknown": "提到侬个辰光,软件会尽量用性别中立个词",
+       "gender-unknown": "提到侬个辰光,软件会尽量用性别中立个词",
        "gender-male": "男",
        "gender-female": "女",
        "email": "电子邮件",
-       "prefs-help-email": "电子邮箱是选填个,来侬忘脱密码之后好拿新密码寄畀侬。",
+       "prefs-help-email": "电子邮箱是选填个,垃拉侬忘记密码个情况下头可以用得来重置密码。",
        "prefs-help-email-others": "你侬也好来你侬个用户|讨论页里添加自己个电子信连接畀别人联系你用。\n别人联系你是弗晓得你侬个电子信地址个。",
        "prefs-help-email-required": "需要电子邮件地址。",
        "prefs-info": "基本信息",
        "emailsenttext": "倷个电子邮件讯息已经拨发送哉。",
        "watchlist": "關注表",
        "mywatchlist": "我个关注表",
+       "watchlistfor2": "$1个关注表$2",
        "nowatchlist": "倷个关注表是空个。",
        "watchnologin": "朆登录",
-       "addedwatchtext": "“[[:$1]]”连牢著讨论页已经加进侬个[[Special:Watchlist|关注表]]。",
+       "addedwatchtext": "“[[:$1]]”连牢著讨论页已经加进侬个[[Special:Watchlist|关注表]]。",
        "removewatch": "從關注表移爻",
-       "removedwatchtext": "“[[:$1]]”连牢著讨论页已经从侬个[[Special:Watchlist|关注表]]去脱哉。",
+       "removedwatchtext": "“[[:$1]]”连牢著讨论页已经从侬个[[Special:Watchlist|关注表]]里向拿脱。",
        "watch": "关注",
        "watchthispage": "监控该只页面",
        "unwatch": "弗关注",
        "pagemovedsub": "移动成功",
        "movepage-moved": "'''“$1”已经移动到“$2”'''",
        "articleexists": "叫箇只名字个页面已经有垃许哉,要么侬拣个名字是无效个。请重新拣只名字。",
-       "cantmove-titleprotected": "侬弗可以移动迭个页面到个个位置,因为迭个新标题已经拨保护拉许以防止创建。",
+       "cantmove-titleprotected": "侬弗可以拿页面移动到迭个位置,因为新标题已经畀保护拉许以防止创建。",
        "movetalk": "移动相关讨论页",
        "movelogpage": "移动记录",
        "movelogpagetext": "下底是拨拉捅荡个页面列表。",
        "tooltip-n-recentchanges": "列出wiki里箇阶段个变化",
        "tooltip-n-randompage": "随机打开只页面",
        "tooltip-n-help": "寻求帮助",
-       "tooltip-t-whatlinkshere": "列出全部搭箇页链个页",
+       "tooltip-t-whatlinkshere": "链到箇里个所有wiki页面个清单",
        "tooltip-t-recentchangeslinked": "箇页链出去个全部页箇阶段变化",
        "tooltip-feed-rss": "订阅本页",
        "tooltip-feed-atom": "此页个Atom订阅",
        "hours": "$1个钟头",
        "days": "$1日天",
        "hours-ago": "$1个钟头前",
-       "bad_image_list": "格式如下:\n\n只列出项目(线开始* )的审议。\n第一个环节上线必须是一个链接到一个坏文件。\n其后的任何链接在同一行被认为是例外情况,即网页的文件,则可能会发生内部。",
+       "bad_image_list": "照下底个格式来:\n\n只有列表项目(*开头个行)有效。每行个第一只链接板要是劣质文件个链接。同一行任何接下来个链接会畀当成例外,就是嵌进箇只文件个页面。",
        "variantname-zh-tw": "台湾",
        "metadata": "元数据",
        "metadata-help": "箇只文件里向包含有扩展个信息。箇些信息可能是由数码相机或扫描仪垃拉创建或数字化过程中所添加个。\n\n如果此文件个源文件已经修改,一些信息垃拉修改后个文件里向将弗能完全反映出来。",
        "watchlistedit-clear-submit": "清空关注表(永远!)",
        "watchlisttools-clear": "清空关注表",
        "watchlisttools-view": "望相关修改",
-       "watchlisttools-edit": "æ\9f¥ç\9c\8b并ç¼\96è¾\91关注表",
+       "watchlisttools-edit": "æ\9c\9bæ\90­ç¼\96关注表",
        "watchlisttools-raw": "编写原始关注表",
        "signature": "[[{{ns:user}}:$1|$2]]([[{{ns:user_talk}}:$1|讨论]])",
        "version": "版本",
index e2373e0..a22274f 100644 (file)
@@ -88,7 +88,8 @@
                        "凡人丶",
                        "Nbdd0121",
                        "Apflu",
-                       "飞舞回堂前"
+                       "飞舞回堂前",
+                       "Cosine02"
                ]
        },
        "tog-underline": "链接下划线:",
        "page_last": "末页",
        "histlegend": "差异选择:选中要对比的版本的单选按钮,按Enter键或下方的按钮。<br />\n说明:<strong>({{int:cur}})</strong>=与最后版本之间的差异,<strong>({{int:last}})</strong>=与上一版本之间的差异,<strong>{{int:minoreditletter}}</strong>=小编辑。",
        "history-fieldset-title": "浏览历史",
-       "history-show-deleted": "仅已被删除",
+       "history-show-deleted": "仅显示已删除者",
        "histfirst": "最旧",
        "histlast": "最新",
        "historysize": "($1字节)",
        "lockdbsuccesstext": "数据库已锁定。<br />请记住在维护工作完成后[[Special:UnlockDB|解锁数据库]]。",
        "unlockdbsuccesstext": "数据库已解锁。",
        "lockfilenotwritable": "数据库锁定文件不可写。要锁定和解锁数据库,该文件必须对网络服务器可写。",
-       "databasenotlocked": "æ\95°æ\8d®åº\93没æ\9c\89锁定。",
+       "databasenotlocked": "æ\95°æ\8d®åº\93æ\9cªè¢«锁定。",
        "lockedbyandtime": "(由 {{GENDER:$1|$1}} 于$2 $3执行)",
        "move-page": "移动$1",
        "move-page-legend": "移动页面",
        "saturday-at": "周六$1",
        "sunday-at": "周日$1",
        "yesterday-at": "昨天$1",
-       "bad_image_list": "格式如下:\n\n仅列表项目(以*开头的行)被考虑。每行的第一个链接必需为劣质文件的链接。同一行任何后续链接均被视为例外,即该文件可以内链的页面。",
+       "bad_image_list": "格式如下:\n\n仅列表项目(以*开头的行)有效。每行的第一个链接必须为劣质文件的链接。同一行任何后续链接均被视为例外,即嵌入该文件的页面。",
        "variantname-zh-hans": "简体",
        "variantname-zh-hant": "繁体",
        "variantname-zh-cn": "大陆简体",
index 077892e..76efe9f 100644 (file)
        "jumpto": "前往:",
        "jumptonavigation": "導覽",
        "jumptosearch": "搜尋",
-       "view-pool-error": "抱歉,太多使用者正嘗試檢視此頁面,伺服器超出負荷。\n請稍候片刻再嘗試。\n\n$1",
+       "view-pool-error": "抱歉,太多使用者正嘗試檢視此頁面,伺服器超出負荷。請稍候片刻再嘗試。\n\n$1",
        "generic-pool-error": "抱歉,太多使用者正嘗試檢視此資源,伺服器超出負荷。\n請稍候片刻再嘗試。",
        "pool-timeout": "正在等待取消鎖定",
        "pool-queuefull": "程序序列已滿",
        "saturday-at": "週六在 $1",
        "sunday-at": "週日在 $1",
        "yesterday-at": "昨天於 $1",
-       "bad_image_list": "請依照下列格式:\n\n僅清單項目有效 (以 * 開頭)。\n每一行的第一個連結必須是不良檔案的連結。\n同一行除第一個以外的連結會被作為例外清單,例如:檔案所在的頁面。",
+       "bad_image_list": "請依照下列格式:\n\n僅清單項目有效 (以 * 開頭)。每一行的第一個連結必須是不良檔案的連結。同一行除第一個以外的連結會被視作例外清單,即檔案所在的頁面。",
        "variantname-zh-hans": "‪简体中文",
        "variantname-zh-hant": "‪繁體中文",
        "variantname-zh-cn": "大陸簡體",
index 730119e..ab83e1a 100644 (file)
                        $( '<label>' )
                                .text( mw.msg( 'powersearch-togglelabel' ) )
                ).append(
-                       $( '<input type="button" />' )
+                       $( '<input>' ).attr( 'type', 'button' )
                                .attr( 'id', 'mw-search-toggleall' )
                                .prop( 'value', mw.msg( 'powersearch-toggleall' ) )
                                .click( function () {
                                        $checkboxes.prop( 'checked', true );
                                } )
                ).append(
-                       $( '<input type="button" />' )
+                       $( '<input>' ).attr( 'type', 'button' )
                                .attr( 'id', 'mw-search-togglenone' )
                                .prop( 'value', mw.msg( 'powersearch-togglenone' ) )
                                .click( function () {
index d44e5d7..b0fbf51 100644 (file)
@@ -75,8 +75,7 @@
                        background-position: center center;
                        background-origin: border-box;
                        background-repeat: no-repeat;
-                       .background-size( @checkboxSize - 0.2em, @checkboxSize - 0.2em );
-                       background-size: 0 0;
+                       .background-size( 0, 0 );
                        .box-sizing( border-box );
                        position: absolute;
                        // align the checkbox to middle of the text
@@ -93,7 +92,7 @@
 
                // when the input is checked, style the label pseudo before element that followed as a checked checkbox
                &:checked + label::before {
-                       background-size: 100% 100%;
+                       .background-size( 100%, 100% );
                }
 
                &:active + label::before {
index 448390a..53c22b4 100644 (file)
@@ -67,8 +67,7 @@
                        background-origin: border-box;
                        background-position: center center;
                        background-repeat: no-repeat;
-                       .background-size( @radioSize, @radioSize );
-                       background-size: 0 0;
+                       .background-size( 0, 0 );
                        .box-sizing( border-box );
                        position: absolute;
                        left: 0;
@@ -81,7 +80,7 @@
 
                // when the input is checked, style the label pseudo before element that followed as a checked radio
                &:checked + label::before {
-                       background-size: 100% 100%;
+                       .background-size( 100%, 100% );
                }
 
                &:active + label::before {
index df148c7..7f36137 100644 (file)
                                        if ( spec.intercalarySize ) {
                                                $.each( spec.intercalarySize, reduceFunc );
                                        }
-                                       $field = $( '<input type="text">' )
+                                       $field = $( '<input>' ).attr( 'type', 'text' )
                                                .attr( {
                                                        tabindex: disabled ? -1 : 0,
                                                        size: spec.size,
         * @private
         */
        mw.widgets.datetime.DateTimeInputWidget.prototype.getInputElement = function () {
-               return $( '<input type="hidden" />' );
+               return $( '<input>' ).attr( 'type', 'hidden' );
        };
 
        /**
index 3e03502..cba580b 100644 (file)
         * @protected
         */
        mw.widgets.DateInputWidget.prototype.getInputElement = function () {
-               return $( '<input type="hidden">' );
+               return $( '<input>' ).attr( 'type', 'hidden' );
        };
 
        /**
index 47d80d6..437ddec 100644 (file)
@@ -61,7 +61,7 @@
         * @return {jQuery}
         */
        function getHiddenInput( name, val ) {
-               return $( '<input type="hidden" />' )
+               return $( '<input>' ).attr( 'type', 'hidden' )
                        .attr( 'name', name )
                        .val( val );
        }
index 4a9918c..d451e21 100644 (file)
@@ -43,28 +43,26 @@ class ExportTest extends MediaWikiLangTestCase {
 
                /**
                 * Check namespaces match xml
-                * FIXME: PHP 5.3 support. When we don't support PHP 5.3,
-                * add ->namespace to object and remove from array
                 */
-               $xmlNamespaces = (array) $xmlObject->siteinfo->namespaces;
-               $xmlNamespaces = str_replace( ' ', '_', $xmlNamespaces['namespace'] );
-               unset ( $xmlNamespaces[ '@attributes' ] );
+               $xmlNamespaces = (array)$xmlObject->siteinfo->namespaces->namespace;
+               $xmlNamespaces = str_replace( ' ', '_', $xmlNamespaces );
+               unset( $xmlNamespaces[ '@attributes' ] );
                foreach ( $xmlNamespaces as &$namespaceObject ) {
                        if ( is_object( $namespaceObject ) ) {
                                $namespaceObject = '';
                        }
                }
 
-               $actualNamespaces = (array) $wgContLang->getNamespaces();
+               $actualNamespaces = (array)$wgContLang->getNamespaces();
                $actualNamespaces = array_values( $actualNamespaces );
                $this->assertEquals( $actualNamespaces, $xmlNamespaces );
 
                // Check xml page title correct
-               $xmlTitle = (array) $xmlObject->page->title;
+               $xmlTitle = (array)$xmlObject->page->title;
                $this->assertEquals( $pageTitle, $xmlTitle[0] );
 
                // Check xml page text is not empty
-               $text = (array) $xmlObject->page->revision->text;
+               $text = (array)$xmlObject->page->revision->text;
                $this->assertNotEquals( '', $text[0] );
        }
 
index 6c0a923..8902ecd 100644 (file)
@@ -155,7 +155,7 @@ class CSSMinTest extends MediaWikiTestCase {
         * @cover CSSMin::isRemoteUrl
         */
        public function testIsRemoteUrl( $expect, $url ) {
-               $this->assertEquals( CSSMin::isRemoteUrl( $url ), $expect );
+               $this->assertEquals( CSSMinTestable::isRemoteUrl( $url ), $expect );
        }
 
        public static function provideIsLocalUrls() {
@@ -172,7 +172,7 @@ class CSSMinTest extends MediaWikiTestCase {
         * @cover CSSMin::isLocalUrl
         */
        public function testIsLocalUrl( $expect, $url ) {
-               $this->assertEquals( CSSMin::isLocalUrl( $url ), $expect );
+               $this->assertEquals( CSSMinTestable::isLocalUrl( $url ), $expect );
        }
 
        public static function provideRemapRemappingCases() {
@@ -443,3 +443,13 @@ class CSSMinTest extends MediaWikiTestCase {
                ];
        }
 }
+
+class CSSMinTestable extends CSSMin {
+       // Make some protected methods public
+       public static function isRemoteUrl( $maybeUrl ) {
+               return parent::isRemoteUrl( $maybeUrl );
+       }
+       public static function isLocalUrl( $maybeUrl ) {
+               return parent::isLocalUrl( $maybeUrl );
+       }
+}
index 0cb9cc8..81c116c 100644 (file)
 
        byteLimitTest( {
                description: 'Plain text input',
-               $input: $( '<input type="text"/>' ),
+               $input: $( '<input>' ).attr( 'type', 'text' ),
                sample: simpleSample,
                expected: simpleSample
        } );
 
        byteLimitTest( {
                description: 'Plain text input. Calling byteLimit with no parameters and no maxlength attribute (bug 36310)',
-               $input: $( '<input type="text"/>' )
+               $input: $( '<input>' ).attr( 'type', 'text' )
                        .byteLimit(),
                sample: simpleSample,
                expected: simpleSample
@@ -81,7 +81,7 @@
 
        byteLimitTest( {
                description: 'Limit using the maxlength attribute',
-               $input: $( '<input type="text"/>' )
+               $input: $( '<input>' ).attr( 'type', 'text' )
                        .attr( 'maxlength', '10' )
                        .byteLimit(),
                sample: simpleSample,
@@ -90,7 +90,7 @@
 
        byteLimitTest( {
                description: 'Limit using a custom value',
-               $input: $( '<input type="text"/>' )
+               $input: $( '<input>' ).attr( 'type', 'text' )
                        .byteLimit( 10 ),
                sample: simpleSample,
                expected: '1234567890'
@@ -98,7 +98,7 @@
 
        byteLimitTest( {
                description: 'Limit using a custom value, overriding maxlength attribute',
-               $input: $( '<input type="text"/>' )
+               $input: $( '<input>' ).attr( 'type', 'text' )
                        .attr( 'maxlength', '10' )
                        .byteLimit( 15 ),
                sample: simpleSample,
 
        byteLimitTest( {
                description: 'Limit using a custom value (multibyte)',
-               $input: $( '<input type="text"/>' )
+               $input: $( '<input>' ).attr( 'type', 'text' )
                        .byteLimit( 14 ),
                sample: mbSample,
                expected: '1234567890' + U_20AC + '1'
 
        byteLimitTest( {
                description: 'Limit using a custom value (multibyte) overlapping a byte',
-               $input: $( '<input type="text"/>' )
+               $input: $( '<input>' ).attr( 'type', 'text' )
                        .byteLimit( 12 ),
                sample: mbSample,
                expected: '1234567890' + '12'
 
        byteLimitTest( {
                description: 'Pass the limit and a callback as input filter',
-               $input: $( '<input type="text"/>' )
+               $input: $( '<input>' ).attr( 'type', 'text' )
                        .byteLimit( 6, function ( val ) {
                                var title = mw.Title.newFromText( String( val ) );
                                // Return without namespace prefix
 
        byteLimitTest( {
                description: 'Limit using the maxlength attribute and pass a callback as input filter',
-               $input: $( '<input type="text"/>' )
+               $input: $( '<input>' ).attr( 'type', 'text' )
                        .attr( 'maxlength', '6' )
                        .byteLimit( function ( val ) {
                                var title = mw.Title.newFromText( String( val ) );
 
        byteLimitTest( {
                description: 'Pass the limit and a callback as input filter',
-               $input: $( '<input type="text"/>' )
+               $input: $( '<input>' ).attr( 'type', 'text' )
                        .byteLimit( 6, function ( val ) {
                                var title = mw.Title.newFromText( String( val ) );
                                // Return without namespace prefix
 
        byteLimitTest( {
                description: 'Input filter that increases the length',
-               $input: $( '<input type="text"/>' )
+               $input: $( '<input>' ).attr( 'type', 'text' )
                .byteLimit( 10, function ( text ) {
                        return 'prefix' + text;
                } ),
        // Regression tests for bug 41450
        byteLimitTest( {
                description: 'Input filter of which the base exceeds the limit',
-               $input: $( '<input type="text"/>' )
+               $input: $( '<input>' ).attr( 'type', 'text' )
                .byteLimit( 3, function ( text ) {
                        return 'prefix' + text;
                } ),
        QUnit.test( 'Confirm properties and attributes set', 4, function ( assert ) {
                var $el, $elA, $elB;
 
-               $el = $( '<input type="text"/>' )
+               $el = $( '<input>' ).attr( 'type', 'text' )
                        .attr( 'maxlength', '7' )
                        .appendTo( '#qunit-fixture' )
                        .byteLimit();
 
                assert.strictEqual( $el.attr( 'maxlength' ), '7', 'maxlength attribute unchanged for simple limit' );
 
-               $el = $( '<input type="text"/>' )
+               $el = $( '<input>' ).attr( 'type', 'text' )
                        .attr( 'maxlength', '7' )
                        .appendTo( '#qunit-fixture' )
                        .byteLimit( 12 );
 
                assert.strictEqual( $el.attr( 'maxlength' ), '12', 'maxlength attribute updated for custom limit' );
 
-               $el = $( '<input type="text"/>' )
+               $el = $( '<input>' ).attr( 'type', 'text' )
                        .attr( 'maxlength', '7' )
                        .appendTo( '#qunit-fixture' )
                        .byteLimit( 12, function ( val ) {
 
                assert.strictEqual( $el.attr( 'maxlength' ), undefined, 'maxlength attribute removed for limit with callback' );
 
-               $elA = $( '<input type="text"/>' )
+               $elA = $( '<input>' ).attr( 'type', 'text' )
                        .addClass( 'mw-test-byteLimit-foo' )
                        .attr( 'maxlength', '7' )
                        .appendTo( '#qunit-fixture' );
 
-               $elB = $( '<input type="text"/>' )
+               $elB = $( '<input>' ).attr( 'type', 'text' )
                        .addClass( 'mw-test-byteLimit-foo' )
                        .attr( 'maxlength', '12' )
                        .appendTo( '#qunit-fixture' );
 
                // Use a new <input /> because the bug only occurs on the first time
                // the limit it reached (bug 40850)
-               $el = $( '<input type="text"/>' )
+               $el = $( '<input>' ).attr( 'type', 'text' )
                        .appendTo( '#qunit-fixture' )
                        .byteLimit( 3 )
                        .val( 'abc' ).trigger( 'change' )
 
                assert.strictEqual( $el.val(), 'abc', 'Trim from the insertion point (at 0), not the end' );
 
-               $el = $( '<input type="text"/>' )
+               $el = $( '<input>' ).attr( 'type', 'text' )
                        .appendTo( '#qunit-fixture' )
                        .byteLimit( 3 )
                        .val( 'abc' ).trigger( 'change' )