From: jenkins-bot Date: Fri, 21 Nov 2014 20:08:10 +0000 (+0000) Subject: Merge "mediawiki.ui: checkbox: Remove unnecessary nesting and group variables" X-Git-Tag: 1.31.0-rc.0~13213 X-Git-Url: https://git.cyclocoop.org/%242?a=commitdiff_plain;h=40905bb087c0fa8063fc90723587cef0def28508;hp=eba0af51fa99206dc47db0ace9a9b050c39f46fe;p=lhc%2Fweb%2Fwiklou.git Merge "mediawiki.ui: checkbox: Remove unnecessary nesting and group variables" --- diff --git a/RELEASE-NOTES-1.25 b/RELEASE-NOTES-1.25 index f96044e5a3..5aba823e82 100644 --- a/RELEASE-NOTES-1.25 +++ b/RELEASE-NOTES-1.25 @@ -98,6 +98,9 @@ production. * If the user has the 'deletedhistory' right, action=query's revids parameter will now recognize deleted revids. * prop=revisions may be used as a generator, generating revids. +* (bug 66776) format=json results will no longer be corrupted when + $wgMangleFlashPolicy is in effect. format=php results will cleanly return an + error instead of returning invalid serialized data. === Action API internal changes in 1.25 === * ApiHelp has been rewritten to support i18n and paginated HTML output. @@ -193,6 +196,7 @@ changes to languages because of Bugzilla reports. * Deprecated the getInternalLinkAttributes, getInternalLinkAttributesObj, and getInternalLinkAttributes methods in Linker, and removed getExternalLinkAttributes method, which was deprecated in MediaWiki 1.18. +* Removed Sites class, which was deprecated in 1.21 and replaced by SiteSQLStore. == Compatibility == diff --git a/autoload.php b/autoload.php index 5239edcacc..e017530be2 100644 --- a/autoload.php +++ b/autoload.php @@ -681,6 +681,7 @@ $wgAutoloadLocalClasses = array( 'MWLoggerLegacyLogger' => __DIR__ . '/includes/debug/logger/legacy/Logger.php', 'MWLoggerLegacySpi' => __DIR__ . '/includes/debug/logger/legacy/Spi.php', 'MWLoggerMonologHandler' => __DIR__ . '/includes/debug/logger/monolog/Handler.php', + 'MWLoggerMonologLegacyFormatter' => __DIR__ . '/includes/debug/logger/monolog/LegacyFormatter.php', 'MWLoggerMonologProcessor' => __DIR__ . '/includes/debug/logger/monolog/Processor.php', 'MWLoggerMonologSpi' => __DIR__ . '/includes/debug/logger/monolog/Spi.php', 'MWLoggerNullSpi' => __DIR__ . '/includes/debug/logger/NullSpi.php', @@ -1028,7 +1029,6 @@ $wgAutoloadLocalClasses = array( 'SiteStatsInit' => __DIR__ . '/includes/SiteStats.php', 'SiteStatsUpdate' => __DIR__ . '/includes/deferred/SiteStatsUpdate.php', 'SiteStore' => __DIR__ . '/includes/site/SiteStore.php', - 'Sites' => __DIR__ . '/includes/site/SiteSQLStore.php', 'Skin' => __DIR__ . '/includes/skins/Skin.php', 'SkinApi' => __DIR__ . '/includes/skins/SkinApi.php', 'SkinApiTemplate' => __DIR__ . '/includes/skins/SkinApiTemplate.php', diff --git a/includes/DefaultSettings.php b/includes/DefaultSettings.php index f93737cdff..f83c402386 100644 --- a/includes/DefaultSettings.php +++ b/includes/DefaultSettings.php @@ -3199,6 +3199,8 @@ $wgEnableCanonicalServerLink = false; * . Without this, an attacker can send their own * cross-domain policy unless it is prevented by the crossdomain.xml file at * the domain root. + * + * @since 1.25 */ $wgMangleFlashPolicy = true; diff --git a/includes/api/ApiFormatJson.php b/includes/api/ApiFormatJson.php index ce8656e221..966e82dc6a 100644 --- a/includes/api/ApiFormatJson.php +++ b/includes/api/ApiFormatJson.php @@ -67,6 +67,16 @@ class ApiFormatJson extends ApiFormatBase { $this->getIsHtml(), $params['utf8'] ? FormatJson::ALL_OK : FormatJson::XMLMETA_OK ); + + // Bug 66776: wfMangleFlashPolicy() is needed to avoid a nasty bug in + // Flash, but what it does isn't friendly for the API, so we need to + // work around it. + if ( preg_match( '/\<\s*cross-domain-policy\s*\>/i', $json ) ) { + $json = preg_replace( + '/\<(\s*cross-domain-policy\s*)\>/i', '\\u003C$1\\u003E', $json + ); + } + $callback = $params['callback']; if ( $callback !== null ) { $callback = preg_replace( "/[^][.\\'\\\"_A-Za-z0-9]/", '', $callback ); diff --git a/includes/api/ApiFormatPhp.php b/includes/api/ApiFormatPhp.php index ae93812254..a4b4a11d61 100644 --- a/includes/api/ApiFormatPhp.php +++ b/includes/api/ApiFormatPhp.php @@ -35,6 +35,22 @@ class ApiFormatPhp extends ApiFormatBase { } public function execute() { - $this->printText( serialize( $this->getResultData() ) ); + $text = serialize( $this->getResultData() ); + + // Bug 66776: wfMangleFlashPolicy() is needed to avoid a nasty bug in + // Flash, but what it does isn't friendly for the API. There's nothing + // we can do here that isn't actively broken in some manner, so let's + // just be broken in a useful manner. + if ( $this->getConfig()->get( 'MangleFlashPolicy' ) && + in_array( 'wfOutputHandler', ob_list_handlers(), true ) && + preg_match( '/\<\s*cross-domain-policy\s*\>/i', $text ) + ) { + $this->dieUsage( + 'This response cannot be represented using format=php. See https://bugzilla.wikimedia.org/show_bug.cgi?id=66776', + 'internalerror' + ); + } + + $this->printText( $text ); } } diff --git a/includes/api/i18n/be-tarask.json b/includes/api/i18n/be-tarask.json index a07fe59591..372131d791 100644 --- a/includes/api/i18n/be-tarask.json +++ b/includes/api/i18n/be-tarask.json @@ -11,5 +11,6 @@ "apihelp-main-param-smaxage": "Выстаўце загаловак s-maxage на зададзеную колькасьць сэкундаў. Памылкі ніколі не кэшуюцца.", "apihelp-main-param-maxage": "Выстаўляе загаловак max-age на зададзеную колькасьць сэкундаў. Памылкі ніколі не кэшуюцца.", "apihelp-main-param-assert": "Упэўніцеся, што ўдзельнік увайшоў у сыстэму, калі зададзена «user», або мае правы робата, калі зададзена «bot».", - "apihelp-main-param-requestid": "Любое значэньне, пададзенае тут, будзе ўключанае ў адказ. Можа быць выкарыстанае для адрозьненьня запытаў." + "apihelp-main-param-requestid": "Любое значэньне, пададзенае тут, будзе ўключанае ў адказ. Можа быць выкарыстанае для адрозьненьня запытаў.", + "apihelp-main-param-servedby": "Уключае ў вынік назву сэрвэра, які апрацаваў запыт." } diff --git a/includes/api/i18n/de.json b/includes/api/i18n/de.json index 302738f14c..304668bf7d 100644 --- a/includes/api/i18n/de.json +++ b/includes/api/i18n/de.json @@ -3,7 +3,8 @@ "authors": [ "Florian", "Kghbln", - "Metalhead64" + "Metalhead64", + "Inkowik" ] }, "apihelp-main-description": "
\n* [https://www.mediawiki.org/wiki/API:Main_page/de Dokumentation]\n* [https://www.mediawiki.org/wiki/API:FAQ/de Häufig gestellte Fragen]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Mailingliste]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API-Ankündigungen]\n* [https://bugzilla.wikimedia.org/buglist.cgi?component=API&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&order=bugs.delta_ts Fehlerberichte und Anfragen]\n
\nStatus: Alle auf dieser Seite gezeigten Funktionen sollten funktionieren, aber die API ist noch in aktiver Entwicklung und könnte sich zu jeder Zeit ändern. Abonniere die [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ MediaWiki-API-Ankündigungs-Mailingliste] für Mitteilungen über Aktualisierungen.\n\nFehlerhafte Anfragen: Wenn fehlerhafte Anfragen an die API gesendet werden, wird ein HTTP-Header mit dem Schlüssel „MediaWiki-API-Error“ versandt. Die zurückgesandten Werte des Headers und des Fehlercodes werden auf den gleichen Wert gesetzt. Für weitere Informationen siehe https://www.mediawiki.org/wiki/API:Errors_and_warnings.", @@ -208,7 +209,18 @@ "apihelp-parse-example-text": "Wikitext parsen.", "apihelp-patrol-description": "Kontrolliert eine Seite oder Version.", "apihelp-patrol-example-revid": "Kontrolliert eine Version", + "apihelp-protect-description": "Ändert den Schutzstatus einer Seite.", + "apihelp-protect-param-title": "Titel der Seite, die du (ent-)sperren möchtest. Kann nicht zusammen mit $1pageid verwendet werden.", + "apihelp-protect-param-pageid": "Seitenkennung der Seite, die du (ent-)sperren möchtest. Kann nicht zusammen mit $1title verwendet werden.", + "apihelp-protect-param-protections": "Liste der Schutzebenen nach dem Format Aktion=Ebene (z.B. edit=sysop).\n\n'''HINWEIS:''' Wenn eine Aktion nicht angegeben wird, wird deren Schutz entfernt.", + "apihelp-protect-param-expiry": "Zeitstempel des Schutzablaufs. Wenn nur ein Zeitstempel übergeben wird, ist dieser für alle Seitenschutze gültig. Um eine unendliche Schutzdauer festzulegen, kannst du die Werte \"infinite\", \"indefinite\", \"infinity\" oder \"never\" übergeben.", + "apihelp-protect-param-reason": "Grund für den Seitenschutz oder dessen Aufhebung.", + "apihelp-protect-param-cascade": "Aktiviert den Kaskadenschutz (alle eingebundenen Seiten werden ebenfalls geschützt). Wenn die übergebenen Schutzebenen keinen Kaskadenschutz unterstützen, wird dieser Parameter ignoriert.", + "apihelp-protect-param-watch": "Wenn vorhanden, fügt dieser Parameter die zu (ent-)sperrende Seite der Beobachtungsliste hinzu.", + "apihelp-protect-param-watchlist": "Die Seite bedingungslos zu deiner Beobachtungsliste hinzufügen oder von ihr entfernen, Einstellungen verwenden oder Beobachtung nicht ändern.", "apihelp-protect-example-protect": "Schützt eine Seite", + "apihelp-protect-example-unprotect": "Eine Seite entsperren, indem die Einschränkungen durch den Schutz auf \"all\" gestellt werden.", + "apihelp-protect-example-unprotect2": "Eine Seite entsperren, indem keine Einschränkungen übergeben werden", "apihelp-purge-param-forcelinkupdate": "Aktualisiert die Linktabellen.", "apihelp-query-param-list": "Welche Listen abgerufen werden sollen.", "apihelp-query+allcategories-description": "Alle Kategorien aufzählen.", diff --git a/includes/api/i18n/fr.json b/includes/api/i18n/fr.json index 5a9e66bfb8..0de069b1c0 100644 --- a/includes/api/i18n/fr.json +++ b/includes/api/i18n/fr.json @@ -754,6 +754,20 @@ "apihelp-query+search-example-text": "Rechercher des textes pour « signification »", "apihelp-query+search-example-generator": "Obtenir les informations sur les pages renvoyées par une recherche de « signification »", "apihelp-query+siteinfo-description": "Renvoyer les informations générales sur le site.", + "apihelp-query+siteinfo-param-prop": "Quelles informations obtenir :\n;general:Information globale du système.\n;namespaces:Liste des espaces de nom déclarés et leur nom canonique.\n;namespacealiases:Liste des alias des espaces de nom déclarés.\n;specialpagealiases:Liste des alias des pages spéciales.\n;magicwords:Liste des mots magiques et leurs alias.\n;statistics:Renvoie les statistiques du site.\n;interwikimap:Renvoie la correspondance interwiki (éventuellement filtrée, (éventuellement localisée en utilisant $1inlanguagecode)).\n;dbrepllag:Renvoie le serveur de base de donnée avec la plus grande latence de réplication.\n;usergroups:Renvoie les groupes utilisateur et les droits associés.\n;extensions:Renvoie les extensions installées sur le wiki.\n;fileextensions:Renvoie la liste des extensions de fichier autorisées au téléchargement.\n;rightsinfo:Renvoie l’information sur les droits du wiki (sa licence), si elle est disponible.\n;restrictions:Renvoie l’information sur les types de restriction disponibles (protection).\n;languages:Renvoie une liste des langues que supporte MédiaWiki (éventuellement localisé en utilisant $1inlanguagecode).\n;skins:Renvoie une liste de tous les habillages activés (éventuellement localisé en utilisant $1inlanguagecode, sinon dans la langue du contenu).\n;extensiontags:Renvoie une liste des balises d’extension de l’analyseur.\n;functionhooks:Renvoie une liste des accroches de fonction de l’analyseur.\n;showhooks:Renvoie une liste de toutes les accroches souscrites (contenu de $wgHooks).\n;variables:Renvoie une liste des IDs de variable.\n;protocols:Renvoie une liste des protocoles qui sont autorisés dans les liens externes.\n;defaultoptions:Renvoie les valeurs par défaut pour les préférences utilisateur.", + "apihelp-query+siteinfo-param-filteriw": "Renvoyer uniquement les entrées locales ou uniquement les non locales de la correspondance interwiki.", + "apihelp-query+siteinfo-param-showalldb": "Lister tous les serveurs de base de données, pas seulement celui avec la plus grande latence.", + "apihelp-query+siteinfo-param-numberingroup": "Liste le nombre d’utilisateurs dans les groupes.", + "apihelp-query+siteinfo-param-inlanguagecode": "Code de langue pour les noms de langue localisés (du mieux possible) et les noms d’habillage.", + "apihelp-query+siteinfo-example-simple": "Extraire les informations du site", + "apihelp-query+siteinfo-example-interwiki": "Extraire une liste des préfixes interwiki locaux", + "apihelp-query+siteinfo-example-replag": "Vérifier la latence de réplication actuelle", + "apihelp-query+stashimageinfo-description": "Renvoie les informations de fichier des fichiers mis en réserve.", + "apihelp-query+stashimageinfo-param-filekey": "Clé qui identifie un téléchargement précédent qui a été temporairement mis en réserve.", + "apihelp-query+stashimageinfo-param-sessionkey": "Alias pour $1filekey, pour la compatibilité descendante.", + "apihelp-query+stashimageinfo-param-prop": "Quelles informations de l’image obtenir :\n;timestamp:Ajoute l’horodatage pour la version téléchargée.\n;canonicaltitle:Ajoute le titre canonique du fichier image.\n;url:Fournit l’URL de l’image et sa page de description.\n;size:Ajoute la taille de l’image en octets et la hauteur, la largeur et le nombre de pages (si c&est applicable).\n;dimensions:Alias pour la taille.\n;sha1:Ajoute le hachage SHA-1 pour l’image.\n;mime:Ajoute le type MIME de l’image.\n;thumbmime:Ajoute le type MIME de la vignette de l’image (nécessite l’URL et le paramètre $1urlwidth).\n;metadata:Liste les métadonnées Exif pour la version de l’image.\n;commonmetadata:Liste les métadonnées génériques du format de fichier pour la version de l’image.\n;extmetadata:Liste les métadonnées mises en forme combinées depuis diverses sources. Les résultats sont au format HTML.\n;bitdepth:Ajoute la profondeur de bits de la version.", + "apihelp-query+stashimageinfo-example-simple": "Renvoie les informations sur un fichier mis en réserve.", + "apihelp-query+stashimageinfo-example-params": "Renvoie les vignettes pour deux fichiers mis en réserve", "apihelp-format-example-generic": "Mettre en forme le résultat de la requête dans le format $1", "apihelp-dbg-description": "Extraire les données au format de var_export() de PHP.", "apihelp-dbgfm-description": "Extraire les données au format de var_export() de PHP (affiché proprement en HTML).", diff --git a/includes/api/i18n/sv.json b/includes/api/i18n/sv.json index 1227bb5175..8829dd699d 100644 --- a/includes/api/i18n/sv.json +++ b/includes/api/i18n/sv.json @@ -6,12 +6,19 @@ "WikiPhoenix" ] }, + "apihelp-main-param-action": "Vilken åtgärd som ska utföras.", + "apihelp-main-param-format": "Formatet för utdata.", "apihelp-main-param-curtimestamp": "Inkludera den aktuella tidsstämpeln i resultatet.", "apihelp-block-description": "Blockera en användare.", "apihelp-block-param-user": "Användare, IP-adress eller IP-intervall du vill blockera.", "apihelp-block-param-reason": "Orsak till blockering.", "apihelp-block-param-anononly": "Blockera endast anonyma användare (t.ex. inaktivera anonyma redigeringar för denna IP-adress).", "apihelp-block-param-nocreate": "Förhindra registrering av användarkonton.", + "apihelp-compare-param-fromid": "Första sid-ID att jämföra.", + "apihelp-compare-param-fromrev": "Första version att jämföra.", + "apihelp-compare-param-toid": "Andra sid-ID att jämföra.", + "apihelp-compare-param-torev": "Andra version att jämföra.", + "apihelp-compare-example-1": "Skapa en diff mellan version 1 och 2", "apihelp-createaccount-description": "Skapa ett nytt användarkonto.", "apihelp-createaccount-param-name": "Användarnamn.", "apihelp-createaccount-param-password": "Lösenord (ignoreras om $1mailpassword angetts).", @@ -49,6 +56,14 @@ "apihelp-filerevert-param-comment": "Ladda upp kommentar.", "apihelp-help-example-recursive": "All hjälp på en sida", "apihelp-help-example-help": "Hjälp för själva hjälpmodulen", + "apihelp-login-param-name": "Användarnamn.", + "apihelp-login-param-password": "Lösenord.", + "apihelp-login-example-login": "Logga in", + "apihelp-logout-description": "Logga ut och rensa sessionsdata.", + "apihelp-logout-example-logout": "Logga ut den aktuella användaren", + "apihelp-move-description": "Flytta en sida.", + "apihelp-move-param-noredirect": "Skapa inte en omdirigering.", + "apihelp-opensearch-param-search": "Söksträng.", "apihelp-query+stashimageinfo-description": "Returnerar filinformation för temporära filer.", "apihelp-query+stashimageinfo-param-filekey": "Nyckel som identifierar en tidigare uppladdning som lagrats temporärt.", "apihelp-query+stashimageinfo-example-simple": "Returnerar information för en temporär fil", diff --git a/includes/cache/bloom/BloomCache.php b/includes/cache/bloom/BloomCache.php index a15b4613ee..627f4f0db9 100644 --- a/includes/cache/bloom/BloomCache.php +++ b/includes/cache/bloom/BloomCache.php @@ -102,7 +102,7 @@ abstract class BloomCache { $status = $this->getStatus( $virtualKey ); if ( $status == false ) { wfDebug( "Could not query virtual bloom filter '$virtualKey'." ); - return null; + return true; } $useFilter = call_user_func_array( diff --git a/includes/db/LBFactory.php b/includes/db/LBFactory.php index 73456e2308..2f93ce70e3 100644 --- a/includes/db/LBFactory.php +++ b/includes/db/LBFactory.php @@ -109,7 +109,7 @@ abstract class LBFactory { * Construct a factory based on a configuration array (typically from $wgLBFactoryConf) * @param array $conf */ - abstract function __construct( $conf ); + abstract function __construct( array $conf ); /** * Create a new load balancer object. The resulting object will be untracked, @@ -156,7 +156,7 @@ abstract class LBFactory { * @param callable $callback * @param array $params */ - abstract function forEachLB( $callback, $params = array() ); + abstract function forEachLB( $callback, array $params = array() ); /** * Prepare all tracked load balancers for shutdown @@ -171,7 +171,7 @@ abstract class LBFactory { * @param string $methodName * @param array $args */ - function forEachLBCallMethod( $methodName, $args = array() ) { + function forEachLBCallMethod( $methodName, array $args = array() ) { $this->forEachLB( array( $this, 'callMethod' ), array( $methodName, $args ) ); } @@ -227,7 +227,7 @@ class LBFactorySimple extends LBFactory { /** @var ChronologyProtector */ protected $chronProt; - function __construct( $conf ) { + function __construct( array $conf ) { $this->chronProt = new ChronologyProtector; } @@ -324,7 +324,7 @@ class LBFactorySimple extends LBFactory { * @param callable $callback * @param array $params */ - function forEachLB( $callback, $params = array() ) { + function forEachLB( $callback, array $params = array() ) { if ( isset( $this->mainLB ) ) { call_user_func_array( $callback, array_merge( array( $this->mainLB ), $params ) ); } @@ -352,7 +352,7 @@ class LBFactorySimple extends LBFactory { * LBFactory::enableBackend() to return to normal behavior */ class LBFactoryFake extends LBFactory { - function __construct( $conf ) { + function __construct( array $conf ) { } function newMainLB( $wiki = false ) { @@ -371,7 +371,7 @@ class LBFactoryFake extends LBFactory { throw new DBAccessError; } - function forEachLB( $callback, $params = array() ) { + function forEachLB( $callback, array $params = array() ) { } } diff --git a/includes/db/LBFactoryMulti.php b/includes/db/LBFactoryMulti.php index bac9652342..7100615694 100644 --- a/includes/db/LBFactoryMulti.php +++ b/includes/db/LBFactoryMulti.php @@ -152,7 +152,7 @@ class LBFactoryMulti extends LBFactory { * @param array $conf * @throws MWException */ - function __construct( $conf ) { + function __construct( array $conf ) { $this->chronProt = new ChronologyProtector; $this->conf = $conf; $required = array( 'sectionsByDB', 'sectionLoads', 'serverTemplate' ); @@ -377,7 +377,7 @@ class LBFactoryMulti extends LBFactory { * @param callable $callback * @param array $params */ - function forEachLB( $callback, $params = array() ) { + function forEachLB( $callback, array $params = array() ) { foreach ( $this->mainLBs as $lb ) { call_user_func_array( $callback, array_merge( array( $lb ), $params ) ); } diff --git a/includes/db/LBFactorySingle.php b/includes/db/LBFactorySingle.php index 3a4d829b3e..03b7fbe9cf 100644 --- a/includes/db/LBFactorySingle.php +++ b/includes/db/LBFactorySingle.php @@ -32,7 +32,7 @@ class LBFactorySingle extends LBFactory { * @param array $conf An associative array with one member: * - connection: The DatabaseBase connection object */ - function __construct( $conf ) { + function __construct( array $conf ) { $this->lb = new LoadBalancerSingle( $conf ); } @@ -74,7 +74,7 @@ class LBFactorySingle extends LBFactory { * @param string|callable $callback * @param array $params */ - function forEachLB( $callback, $params = array() ) { + function forEachLB( $callback, array $params = array() ) { call_user_func_array( $callback, array_merge( array( $this->lb ), $params ) ); } } @@ -89,7 +89,7 @@ class LoadBalancerSingle extends LoadBalancer { /** * @param array $params */ - function __construct( $params ) { + function __construct( array $params ) { $this->db = $params['connection']; parent::__construct( array( 'servers' => array( array( 'type' => $this->db->getType(), diff --git a/includes/db/LoadBalancer.php b/includes/db/LoadBalancer.php index 233c92f4a6..4e11af2e24 100644 --- a/includes/db/LoadBalancer.php +++ b/includes/db/LoadBalancer.php @@ -28,13 +28,13 @@ * @ingroup Database */ class LoadBalancer { - /** @var array Map of (server index => server config array) */ + /** @var array[] Map of (server index => server config array) */ private $mServers; - /** @var array Map of (local/foreignUsed/foreignFree => server index => DatabaseBase array) */ + /** @var array[] Map of (local/foreignUsed/foreignFree => server index => DatabaseBase array) */ private $mConns; /** @var array Map of (server index => weight) */ private $mLoads; - /** @var array Map of (group => server index => weight) */ + /** @var array[] Map of (group => server index => weight) */ private $mGroupLoads; /** @var bool Whether to disregard slave lag as a factor in slave selection */ private $mAllowLagged; @@ -67,7 +67,7 @@ class LoadBalancer { * loadMonitor Name of a class used to fetch server lag and load. * @throws MWException */ - function __construct( $params ) { + function __construct( array $params ) { if ( !isset( $params['servers'] ) ) { throw new MWException( __CLASS__ . ': missing servers parameter' ); } @@ -144,7 +144,7 @@ class LoadBalancer { * @param array $weights * @return bool|int|string */ - function pickRandom( $weights ) { + function pickRandom( array $weights ) { return ArrayUtils::pickRandom( $weights ); } @@ -153,7 +153,7 @@ class LoadBalancer { * @param bool|string $wiki Wiki to get non-lagged for * @return bool|int|string */ - function getRandomNonLagged( $loads, $wiki = false ) { + function getRandomNonLagged( array $loads, $wiki = false ) { # Unset excessively lagged servers $lags = $this->getLagTimes( $wiki ); foreach ( $lags as $i => $lag ) { @@ -197,8 +197,8 @@ class LoadBalancer { * always return a consistent index during a given invocation * * Side effect: opens connections to databases - * @param bool|string $group - * @param bool|string $wiki + * @param string|bool $group Query group, or false for the generic reader + * @param string|bool $wiki Wiki ID, or false for the current wiki * @throws MWException * @return bool|int|string */ @@ -218,7 +218,7 @@ class LoadBalancer { return $this->mReadIndex; } - $section = new ProfileSection( __METHOD__ ); + new ProfileSection( __METHOD__ ); # Find the relevant load array if ( $group !== false ) { @@ -410,7 +410,7 @@ class LoadBalancer { if ( $result == -1 || is_null( $result ) ) { # Timed out waiting for slave, use master instead - $server = $this->mServers[$index]; + $server = $this->mServers[$index]['host']; $msg = __METHOD__ . ": Timed out waiting on $server pos {$this->mWaitForPos}"; wfDebug( "$msg\n" ); wfDebugLog( 'DBPerformance', "$msg:\n" . wfBacktrace( true ) ); @@ -432,8 +432,8 @@ class LoadBalancer { * This is the main entry point for this class. * * @param int $i Server index - * @param array $groups Query groups - * @param bool|string $wiki Wiki ID + * @param array|string|bool $groups Query group(s), or false for the generic reader + * @param string|bool $wiki Wiki ID, or false for the current wiki * * @throws MWException * @return DatabaseBase @@ -556,8 +556,8 @@ class LoadBalancer { * @see LoadBalancer::getConnection() for parameter information * * @param int $db - * @param mixed $groups - * @param bool|string $wiki + * @param array|string|bool $groups Query group(s), or false for the generic reader + * @param string|bool $wiki Wiki ID, or false for the current wiki * @return DBConnRef */ public function getConnectionRef( $db, $groups = array(), $wiki = false ) { @@ -572,8 +572,8 @@ class LoadBalancer { * @see LoadBalancer::getConnection() for parameter information * * @param int $db - * @param mixed $groups - * @param bool|string $wiki + * @param array|string|bool $groups Query group(s), or false for the generic reader + * @param string|bool $wiki Wiki ID, or false for the current wiki * @return DBConnRef */ public function getLazyConnectionRef( $db, $groups = array(), $wiki = false ) { @@ -589,7 +589,7 @@ class LoadBalancer { * error will be available via $this->mErrorConnection. * * @param int $i Server index - * @param bool|string $wiki Wiki ID to open + * @param string|bool $wiki Wiki ID, or false for the current wiki * @return DatabaseBase * * @access private @@ -857,7 +857,7 @@ class LoadBalancer { * @param int $i * @param array $serverInfo */ - function setServerInfo( $i, $serverInfo ) { + function setServerInfo( $i, array $serverInfo ) { $this->mServers[$i] = $serverInfo; } @@ -1071,7 +1071,7 @@ class LoadBalancer { * @param callable $callback * @param array $params */ - function forEachOpenConnection( $callback, $params = array() ) { + function forEachOpenConnection( $callback, array $params = array() ) { foreach ( $this->mConns as $conns2 ) { foreach ( $conns2 as $conns3 ) { foreach ( $conns3 as $conn ) { @@ -1119,7 +1119,7 @@ class LoadBalancer { * Results are cached for a short time in memcached/process cache * * @param string|bool $wiki - * @return array Map of (server index => seconds) + * @return int[] Map of (server index => seconds) */ function getLagTimes( $wiki = false ) { if ( $this->getServerCount() <= 1 ) { diff --git a/includes/debug/logger/legacy/Logger.php b/includes/debug/logger/legacy/Logger.php index c6d915ef39..c67bd7b949 100644 --- a/includes/debug/logger/legacy/Logger.php +++ b/includes/debug/logger/legacy/Logger.php @@ -77,7 +77,7 @@ class MWLoggerLegacyLogger extends \Psr\Log\AbstractLogger { * @return bool True if message should be sent to disk/network, false * otherwise */ - protected static function shouldEmit( $channel, $message, $context ) { + public static function shouldEmit( $channel, $message, $context ) { global $wgDebugLogFile, $wgDBerrorLog, $wgDebugLogGroups; if ( $channel === 'wfLogDBError' ) { @@ -102,10 +102,10 @@ class MWLoggerLegacyLogger extends \Psr\Log\AbstractLogger { } } elseif ( isset( $context['private'] ) && $context['private'] ) { - // Don't emit if the message didn't match previous checks based on the - // channel and the event is marked as private. This check discards - // messages sent via wfDebugLog() with dest == 'private' and no explicit - // wgDebugLogGroups configuration. + // Don't emit if the message didn't match previous checks based on + // the channel and the event is marked as private. This check + // discards messages sent via wfDebugLog() with dest == 'private' + // and no explicit wgDebugLogGroups configuration. $shouldEmit = false; } else { // Default return value is the the same as the historic wfDebug @@ -130,7 +130,7 @@ class MWLoggerLegacyLogger extends \Psr\Log\AbstractLogger { * @param array $context * @return string */ - protected static function format( $channel, $message, $context ) { + public static function format( $channel, $message, $context ) { global $wgDebugLogGroups; if ( $channel === 'wfDebug' ) { diff --git a/includes/debug/logger/monolog/Handler.php b/includes/debug/logger/monolog/Handler.php index 02ab309891..b2e3012013 100644 --- a/includes/debug/logger/monolog/Handler.php +++ b/includes/debug/logger/monolog/Handler.php @@ -48,6 +48,12 @@ class MWLoggerMonologHandler extends \Monolog\Handler\AbstractProcessingHandler */ protected $uri; + /** + * Filter log events using legacy rules + * @var bool $useLegacyFilter + */ + protected $useLegacyFilter; + /** * Log sink * @var resource $sink @@ -77,16 +83,30 @@ class MWLoggerMonologHandler extends \Monolog\Handler\AbstractProcessingHandler /** * @param string $stream Stream URI + * @param bool $useLegacyFilter Filter log events using legacy rules * @param int $level Minimum logging level that will trigger handler * @param bool $bubble Can handled meesages bubble up the handler stack? */ public function __construct( - $stream, $level = \Monolog\Logger::DEBUG, $bubble = true + $stream, + $useLegacyFilter = false, + $level = \Monolog\Logger::DEBUG, + $bubble = true ) { parent::__construct( $level, $bubble ); $this->uri = $stream; + $this->useLegacyFilter = $useLegacyFilter; } + public function isHandling( array $record ) { + $levelOk = parent::isHandling( $record ); + if ( $levelOk && $this->useLegacyFilter ) { + return MWLoggerLegacyLogger::shouldEmit( + $record['channel'], $record['message'], $record + ); + } + return $levelOk; + } /** * Open the log sink described by our stream URI. diff --git a/includes/debug/logger/monolog/LegacyFormatter.php b/includes/debug/logger/monolog/LegacyFormatter.php new file mode 100644 index 0000000000..11dbc82f0a --- /dev/null +++ b/includes/debug/logger/monolog/LegacyFormatter.php @@ -0,0 +1,45 @@ + + * @copyright © 2013 Bryan Davis and Wikimedia Foundation. + * @see MWLoggerLegacyLogger + */ +class MWLoggerMonologLegacyFormatter extends \Monolog\Formatter\NormalizerFormatter { + + public function __construct() { + parent::__construct( 'c' ); + } + + public function format( array $record ) { + $normalized = parent::format( $record ); + return MWLoggerLegacyLogger::format( + $normalized['channel'], $normalized['message'], $normalized + ); + } +} diff --git a/includes/installer/i18n/el.json b/includes/installer/i18n/el.json index fa406945fc..e3a607595c 100644 --- a/includes/installer/i18n/el.json +++ b/includes/installer/i18n/el.json @@ -103,7 +103,7 @@ "config-cc-again": "Επιλέξτε ξανά...", "config-advanced-settings": "Προηγμένες ρυθμίσεις παραμέτρων", "config-extensions": "Επεκτάσεις", - "config-skins": "Skins", + "config-skins": "Θέματα εμφάνισης", "config-skins-help": "Τα skins που αναφέρονται παραπάνω, εντοπίστηκαν στον κατάλογο ./skins. Πρέπει να ενεργοποιήσετε τουλάχιστον ένα, και επιλέξτε το προεπιλεγμένο.", "config-skins-use-as-default": "Χρησιμοποιήστε αυτό το skin ως προεπιλογή", "config-skins-must-enable-default": "Το skin που επιλέχθηκε ως προεπιλεγμένο πρέπει να ενεργοποιηθεί.", diff --git a/includes/logging/LogEventsList.php b/includes/logging/LogEventsList.php index c7f5e5ab59..e03cf1cd94 100644 --- a/includes/logging/LogEventsList.php +++ b/includes/logging/LogEventsList.php @@ -542,22 +542,28 @@ class LogEventsList extends ContextSource { $pager->mLimit = $lim; } - $logBody = null; + $knownEmptyResult = false; // Check if we can avoid the DB query all together if ( $page !== '' && !$param['useMaster'] ) { $title = ( $page instanceof Title ) ? $page : Title::newFromText( $page ); if ( $title ) { $member = $title->getNamespace() . ':' . $title->getDBkey(); if ( !BloomCache::get( 'main' )->check( wfWikiId(), 'TitleHasLogs', $member ) ) { - $logBody = ''; + $knownEmptyResult = true; } } else { - $logBody = ''; + $knownEmptyResult = true; } } // Fetch the log rows and build the HTML if needed - $logBody = ( $logBody === null ) ? $pager->getBody() : $logBody; + if ( $knownEmptyResult ) { + $logBody = ''; + $numRows = 0; + } else { + $logBody = $pager->getBody(); + $numRows = $pager->getNumRows(); + } $s = ''; @@ -588,7 +594,7 @@ class LogEventsList extends ContextSource { $context->msg( 'logempty' )->parse() ); } - if ( $pager->getNumRows() > $pager->mLimit ) { # Show "Full log" link + if ( $numRows > $pager->mLimit ) { # Show "Full log" link $urlParam = array(); if ( $page instanceof Title ) { $urlParam['page'] = $page->getPrefixedDBkey(); @@ -635,7 +641,7 @@ class LogEventsList extends ContextSource { } } - return $pager->getNumRows(); + return $numRows; } /** diff --git a/includes/media/FormatMetadata.php b/includes/media/FormatMetadata.php index 4356953997..07d7618c60 100644 --- a/includes/media/FormatMetadata.php +++ b/includes/media/FormatMetadata.php @@ -1624,6 +1624,7 @@ class FormatMetadata extends ContextSource { if ( $this->singleLang ) { $this->resolveMultilangMetadata( $extendedMetadata ); } + $this->discardMultipleValues( $extendedMetadata ); // Make sure the metadata won't break the API when an XML format is used. // This is an API-specific function so it would be cleaner to call it from // outside fetchExtendedMetadata, but this way we don't need to redo the @@ -1776,6 +1777,32 @@ class FormatMetadata extends ContextSource { return null; } + /** + * Turns an XMP-style multivalue array into a single value by dropping all but the first value. + * If the value is not a multivalue array (or a multivalue array inside a multilang array), it is returned unchanged. + * See mediawiki.org/wiki/Manual:File_metadata_handling#Multi-language_array_format + * @param mixed $value + * @return mixed The value, or the first value if there were multiple ones + * @since 1.25 + */ + protected function resolveMultivalueValue( $value ) { + if ( !is_array( $value ) ) { + return $value; + } elseif ( isset( $value['_type'] ) && $value['_type'] === 'lang' ) { // if this is a multilang array, process fields separately + $newValue = array(); + foreach ( $value as $k => $v ) { + $newValue[$k] = $this->resolveMultivalueValue( $v ); + } + return $newValue; + } else { // _type is 'ul' or 'ol' or missing in which case it defaults to 'ul' + list( $k, $v ) = each( $value ); + if ( $k === '_type' ) { + $v = current( $value ); + } + return $v; + } + } + /** * Takes an array returned by the getExtendedMetadata* functions, * and resolves multi-language values in it. @@ -1793,6 +1820,29 @@ class FormatMetadata extends ContextSource { } } + /** + * Takes an array returned by the getExtendedMetadata* functions, + * and turns all fields into single-valued ones by dropping extra values. + * @param array $metadata + * @since 1.25 + */ + protected function discardMultipleValues( &$metadata ) { + if ( !is_array( $metadata ) ) { + return; + } + foreach ( $metadata as $key => &$field ) { + if ( $key === 'Software' || $key === 'Contact' ) { + // we skip some fields which have composite values. They are not particularly interesting + // and you can get them via the metadata / commonmetadata APIs anyway. + continue; + } + if ( isset( $field['value'] ) ) { + $field['value'] = $this->resolveMultivalueValue( $field['value'] ); + } + } + + } + /** * Makes sure the given array is a valid API response fragment * (can be transformed into XML) diff --git a/includes/objectcache/BagOStuff.php b/includes/objectcache/BagOStuff.php index 1978c3ead3..0a2344688b 100644 --- a/includes/objectcache/BagOStuff.php +++ b/includes/objectcache/BagOStuff.php @@ -173,13 +173,14 @@ abstract class BagOStuff { /** * @param string $key - * @param int $timeout [optional] + * @param int $timeout Lock wait timeout [optional] + * @param int $expiry Lock expiry [optional] * @return bool Success */ - public function lock( $key, $timeout = 6 ) { + public function lock( $key, $timeout = 6, $expiry = 6 ) { $this->clearLastError(); $timestamp = microtime( true ); // starting UNIX timestamp - if ( $this->add( "{$key}:lock", 1, $timeout ) ) { + if ( $this->add( "{$key}:lock", 1, $expiry ) ) { return true; } elseif ( $this->getLastError() ) { return false; @@ -198,11 +199,11 @@ abstract class BagOStuff { } usleep( $sleep ); // back off $this->clearLastError(); - $locked = $this->add( "{$key}:lock", 1, $timeout ); + $locked = $this->add( "{$key}:lock", 1, $expiry ); if ( $this->getLastError() ) { return false; } - } while ( !$locked ); + } while ( !$locked && ( microtime( true ) - $timestamp ) < $timeout ); return $locked; } diff --git a/includes/objectcache/MemcachedPhpBagOStuff.php b/includes/objectcache/MemcachedPhpBagOStuff.php index 330d2b52ad..939a7153ab 100644 --- a/includes/objectcache/MemcachedPhpBagOStuff.php +++ b/includes/objectcache/MemcachedPhpBagOStuff.php @@ -65,23 +65,6 @@ class MemcachedPhpBagOStuff extends MemcachedBagOStuff { return $this->client->get_multi( array_map( $callback, $keys ) ); } - /** - * @param string $key - * @param int $timeout - * @return bool - */ - public function lock( $key, $timeout = 0 ) { - return $this->client->lock( $this->encodeKey( $key ), $timeout ); - } - - /** - * @param string $key - * @return mixed - */ - public function unlock( $key ) { - return $this->client->unlock( $this->encodeKey( $key ) ); - } - /** * @param string $key * @param int $value diff --git a/includes/objectcache/MultiWriteBagOStuff.php b/includes/objectcache/MultiWriteBagOStuff.php index 6a691379a0..c2a4a2783a 100644 --- a/includes/objectcache/MultiWriteBagOStuff.php +++ b/includes/objectcache/MultiWriteBagOStuff.php @@ -136,12 +136,13 @@ class MultiWriteBagOStuff extends BagOStuff { /** * @param string $key * @param int $timeout + * @param int $expiry * @return bool */ - public function lock( $key, $timeout = 0 ) { + public function lock( $key, $timeout = 6, $expiry = 6 ) { // Lock only the first cache, to avoid deadlocks if ( isset( $this->caches[0] ) ) { - return $this->caches[0]->lock( $key, $timeout ); + return $this->caches[0]->lock( $key, $timeout, $expiry ); } else { return true; } diff --git a/includes/site/SiteSQLStore.php b/includes/site/SiteSQLStore.php index e5d05bec54..fde22f1738 100644 --- a/includes/site/SiteSQLStore.php +++ b/includes/site/SiteSQLStore.php @@ -444,52 +444,3 @@ class SiteSQLStore implements SiteStore { } } - -/** - * @deprecated since 1.21 - */ -class Sites extends SiteSQLStore { - - /** - * Factory for creating new site objects. - * - * @since 1.21 - * @deprecated since 1.21 - * - * @param string|bool $globalId - * - * @return Site - */ - public static function newSite( $globalId = false ) { - $site = new Site(); - - if ( $globalId !== false ) { - $site->setGlobalId( $globalId ); - } - - return $site; - } - - /** - * @deprecated since 1.21 - * @return SiteStore - */ - public static function singleton() { - static $singleton; - - if ( $singleton === null ) { - $singleton = new static(); - } - - return $singleton; - } - - /** - * @deprecated since 1.21 - * @param string $group - * @return SiteList - */ - public function getSiteGroup( $group ) { - return $this->getSites()->getGroup( $group ); - } -} diff --git a/includes/utils/AutoloadGenerator.php b/includes/utils/AutoloadGenerator.php index 98efd274af..727f4851ee 100644 --- a/includes/utils/AutoloadGenerator.php +++ b/includes/utils/AutoloadGenerator.php @@ -81,19 +81,15 @@ class AutoloadGenerator { * @var string $inputPath Path to a php file to find classes within */ public function readFile( $inputPath ) { - $path = realpath( $inputPath ); - if ( !$path ) { - throw new \Exception( "Invalid path: $inputPath" ); - } $len = strlen( $this->basepath ); - if ( substr( $path, 0, $len ) !== $this->basepath ) { + if ( substr( $inputPath, 0, $len ) !== $this->basepath ) { throw new \Exception( "Path is not within basepath: $inputPath" ); } $result = $this->collector->getClasses( - file_get_contents( $path ) + file_get_contents( $inputPath ) ); if ( $result ) { - $shortpath = substr( $path, $len ); + $shortpath = substr( $inputPath, $len ); $this->classes[$shortpath] = $result; } } diff --git a/languages/i18n/azb.json b/languages/i18n/azb.json index c74cfe85a6..96eeb13abc 100644 --- a/languages/i18n/azb.json +++ b/languages/i18n/azb.json @@ -277,7 +277,7 @@ "sort-descending": "آزالان سیرالاماق", "sort-ascending": "چوْخالان سیرالاماق", "nstab-main": "صفحه", - "nstab-user": "ایستیفاده‌چی صحیفه‌سی", + "nstab-user": "ایشلدن صفحه‌سی", "nstab-media": "مئدیا صحیفه‌سی", "nstab-special": "اؤزل صحیفه", "nstab-project": "پروژه صحیفه‌سی", diff --git a/languages/i18n/be-tarask.json b/languages/i18n/be-tarask.json index 59b80c2eb7..c3bce9adaa 100644 --- a/languages/i18n/be-tarask.json +++ b/languages/i18n/be-tarask.json @@ -303,7 +303,7 @@ "nospecialpagetext": "Спэцыяльная старонка, да якой Вы зьвярнуліся, не існуе.\n\nСьпіс дзейных спэцыяльных старонак можна знайсьці на [[Special:SpecialPages|{{int:specialpages}}]].", "error": "Памылка", "databaseerror": "Памылка базы зьвестак", - "databaseerror-text": "Пры запыце базы зьвестак узьнікла памылка.\nГэта можа сьведчыць пра няспраўнасьць апраграмаваньня.", + "databaseerror-text": "Пры запыце базы зьвестак узьнікла памылка.\nГэта можа сьведчыць пра памылку ў праграмным забесьпячэньні.", "databaseerror-textcl": "Узьнікла памылка запыту базы зьвестак.", "databaseerror-query": "Запыт: $1", "databaseerror-function": "Функцыя: $1", diff --git a/languages/i18n/crh-cyrl.json b/languages/i18n/crh-cyrl.json index e715dbba05..8f1540f587 100644 --- a/languages/i18n/crh-cyrl.json +++ b/languages/i18n/crh-cyrl.json @@ -44,6 +44,7 @@ "tog-diffonly": "Тенъештирме саифелеринде саифенинъ эсас мундериджесини косьтерме", "tog-showhiddencats": "Гизли категорияларны косьтер", "tog-norollbackdiff": "Кери къайтарув япылгъан сонъ версиялар арасындаки фаркъны косьтерме", + "tog-prefershttps": "Системагъа кирген сонъ эр вакъыт телюкесиз багълама къулланылсын", "underline-always": "Даима", "underline-never": "Асла", "underline-default": "Браузер сазламалары къулланылсын", @@ -293,7 +294,7 @@ "perfcached": "Ашагъыдаки малюмат кэштен алынды ве эскирген ола билир! Кэште энъ чокъ {{PLURAL:$1|1=бир нетидже|$1 нетидже}} сакъланып тура.", "perfcachedts": "Ашагъыдаки малюмат кэштен алынды, кэшнинъ сонъки янъартылгъан вакъты: $1. Кэште энъ чокъ {{PLURAL:$1|1=бир нетидже|$1 нетидже}} сакъланып тура.", "querypage-no-updates": "Бу саифени денъиштирмеге шимди изин ёкъ. Бу малюмат аман янъартылмайджакъ.", - "viewsource": "менба кодуны косьтер", + "viewsource": "Менба кодуны косьтер", "viewsource-title": "$1 саифесининъ менба коду", "actionthrottled": "Арекет токъталды", "actionthrottledtext": "Спамгъа къаршы куреш себебинден бу арекетни аз вакъыт ичинде чокъ кере текрарлап оламайсынъыз. Мумкюн олгъан къарардан зияде арекет яптынъыз. Бир къач дакъкъадан сонъ текрарлап бакъынъыз.", @@ -308,12 +309,25 @@ "virus-badscanner": "Янълыш сазлама. Билинмеген вирус сканери: ''$1''", "virus-scanfailed": "скан этюв мувафакъиетсиз (код $1)", "virus-unknownscanner": "билинмеген антивирус:", - "logouttext": "'''Отурымны къапаттынъыз.'''\n\nШимди {{SITENAME}} сайтыны аноним оларакъ къулланып оласынъыз, я да янъыдан [$1 отурым ачып] оласынъыз (истер айны къулланыджы адынен, истер башкъа бир къулланыджы адынен). Web браузеринъиз кэшини темизлегендже базы саифелер санки аля даа отурымынъыз ачыкъ экен киби корюнип олур.", + "logouttext": "Системадан чыкътынъыз.\n\nБраузеринъиз кешини темизлегендже базы саифелер системадан аля даа чыкъмагъансынъыз киби корюнип олур.", + "welcomeuser": "Хош кельдинъиз, $1!", + "welcomecreation-msg": "Эсап язынъыз яратылды.\nИстесенъиз, [[Special:Preferences|{{SITENAME}} сазламаларынъызны]] денъиштире билесинъиз.", "yourname": "Къулланыджы адынъыз", + "userlogin-yourname": "Къулланынджы ады", + "userlogin-yourname-ph": "Къулланыджы адынъызны язынъыз", + "createacct-another-username-ph": "Къулланыджы адынъызны язынъыз", "yourpassword": "Паролинъиз", + "userlogin-yourpassword": "Пароль", + "userlogin-yourpassword-ph": "Паролинъизни язынъыз", + "createacct-yourpassword-ph": "Парольни язынъыз", "yourpasswordagain": "Парольни бир даа язынъыз:", + "createacct-yourpasswordagain": "Парольни тасдыкъланъыз", + "createacct-yourpasswordagain-ph": "Парольни бир даа язынъыз", "remembermypassword": "Киришимни бу компьютерде хатырла (энъ чокъ $1 {{PLURAL:$1|1=кунь|кунь}} ичюн)", + "userlogin-remembermypassword": "Системада къалайым", + "userlogin-signwithsecure": "Телюкесиз багълама къулланылсын", "yourdomainname": "Домен адынъыз", + "password-change-forbidden": "Бу викиде паролинъизни денъиштирип оламайсынъыз", "externaldberror": "Сайткъа киргенде бир хата олды. Бу тыш эсабынъызны денъиштирмек акъкъынъыз олмагъанындан себеп мейдангъа келип ола.", "login": "Кириш", "nav-login-createaccount": "Кириш / Къайд олув", @@ -321,18 +335,36 @@ "userloginnocreate": "Кириш", "logout": "Чыкъыш", "userlogout": "Чыкъыш", - "notloggedin": "Отурым ачмадынъыз.", + "notloggedin": "Системагъа кирмединъиз.", + "userlogin-noaccount": "Аккаунтынъыз ёкъмы?", + "userlogin-joinproject": "{{SITENAME}} лейхасына къошулынъыз", "nologin": "Даа эсап ачмадынъызмы? '''$1'''.", "nologinlink": "Къайд ол", - "createaccount": "Янъы эсап ач", - "gotaccount": "Даа эвель эсап ачкъан эдинъизми? '''$1'''.", - "gotaccountlink": "Отурым ачынъыз", + "createaccount": "Къайд олув", + "gotaccount": "Даа эвель сайтта къайд олгъан эдинъизми? '''$1'''.", + "gotaccountlink": "Системагъа киринъиз", "userlogin-resetlink": "Кириш малюматыны унуттынъызмы?", - "createaccountmail": "e-mail вастасынен", + "createacct-emailrequired": "E-mail adresi", + "createacct-emailoptional": "E-mail адреси (меджбурий дегиль)", + "createacct-email-ph": "E-mail адресинъизни язынъыз", + "createacct-another-email-ph": "E-mail адресинъизни язынъыз", + "createaccountmail": "Автоматик оларакъ мейдангъа кетирильген мувакъкъат бир пароль къуллана билир ве бу парольни бильдирильген e-mail адресине ёллай билирсинъиз", + "createacct-realname": "Акъикъий адынъыз (меджбурий дегиль)", "createaccountreason": "Себеп:", + "createacct-reason": "Себеп", + "createacct-reason-ph": "Башкъа бир эсап язысы неден себеп яратасынъыз", + "createacct-captcha": "Телюкесизлик контроли", + "createacct-imgcaptcha-ph": "Юкъарыда корьген метнинъизни язынъыз", + "createacct-submit": "Эсап язынъызны яратынъыз", + "createacct-another-submit": "Башкъа бир эсап язысы яратынъыз", + "createacct-benefit-heading": "{{SITENAME}} сизинъ киби адамлар тарафындан языла.", + "createacct-benefit-body1": "денъиштирме", + "createacct-benefit-body2": "{{PLURAL:$1|саифе|саифе}}", + "createacct-benefit-body3": "сонъки вакъытларда {{PLURAL:$1|иссесини къошкъан къулланыджы|иссесини къошкъан къулланыджы}}", "badretype": "Кирсеткен пароллеринъиз айны дегиль.", "userexists": "Кирсеткен къулланыджы адынъыз энди къулланыла.\nЛютфен, башкъа бир къулланыджы ады сайланъыз.", "loginerror": "Отурым ачма хатасы", + "createacct-error": "Эсап язысыны яратув хатасы", "createaccounterror": "Эсап яратылып оламай: $1", "nocookiesnew": "Къулланыджы эсабы ачылгъан, факъат танытылмагъан. {{SITENAME}} къулланыджыларны танытмакъ ичюн «cookies»ни къуллана. Сизде бу функция къапалы вазиеттедир. «Cookies» функциясыны ишлетип текрар янъы адынъыз ве паролинъизнен тырышып бакъыныз.", "nocookieslogin": "{{SITENAME}} «cookies»ни къуллана. Сизде бу функция къапалы вазиеттедир. «Cookies» функциясыны ишлетип текрар тырышып бакъынъыз.", @@ -348,7 +380,7 @@ "passwordtooshort": "Паролинъизде энъ аз {{PLURAL:$1|1=1|$1}} ишарет олмалы.", "password-name-match": "Паролинъиз къулланыджы адынъыздан фаркълы олмалы.", "password-login-forbidden": "Бу къулланыджы ады ве парольни къулланмакъ ясакътыр.", - "mailmypassword": "Янъы пароль йибер", + "mailmypassword": "Парольни сыфырла", "passwordremindertitle": "{{grammar:genitive|{{SITENAME}}}} къулланыджынынъ пароль хатырлатувы", "passwordremindertext": "Бирев (бельки де бу сизсинъиз, $1 IP адресинден) {{SITENAME}} сайты ичюн ($4) янъы къулланыджы паролини истеди.\n$2 къулланыджысына вакътынджа $3 пароли яратылды. Эгер бу керчектен де сизинъ истегинъиз олгъан олса, отурым ачып янъы бир пароль яратманъыз керектир. Мувакъкъат паролинъизнинъ муддети {{PLURAL:$5|1=1 кунь|$5 кунь}} ичинде доладжакъ.\n\nЭгер де янъы пароль талап этмеген олсанъыз я да эски паролинъизни хатырлап энди оны денъиштирмеге истемесенъиз, бу мектюпни дикъкъаткъа алмайып эски паролинъизни къулланмагъа девам этип оласынъыз.", "noemail": "$1 адлы къулланыджы ичюн e-mail бильдирильмеди.", @@ -371,6 +403,10 @@ "login-throttled": "Якъын заманда пек чокъ кере кирмеге тырыштынъыз.\nЛютфен, къайта кирмезден эвель бираз бекленъиз.", "loginlanguagelabel": "Тиль: $1", "suspicious-userlogout": "Чыкъыш истегенинъиз ред этильди, чюнки бозукъ бир браузер я да кэшлейиджи прокси тарафындан ёллангъан киби корюне.", + "pt-login": "Кириш", + "pt-login-button": "Кириш", + "pt-createaccount": "Къайд олув", + "pt-userlogout": "Чыкъыш", "changepassword": "Пароль денъиштир", "resetpass_announce": "Мувакъкъат код вастасынен кирдинъиз. Киришни тамамламакъ ичюн янъы парольни мында къоюнъыз:", "resetpass_header": "Эсапнынъ паролини денъиштир", @@ -452,7 +488,8 @@ "session_fail_preview": "''' Сервер сиз япкъан денъиштирмелерни сессия идентификаторы джоюлгъаны себебинден сакълап оламады.\nБу вакътынджа проблемадыр. Лютфен, текрар сакълап бакъынъыз.\nБундан да сонъ олып чыкъмаса, малюмат локаль файлгъа сакъланъыз да браузеринъизни бир къапатып ачынъыз.'''", "session_fail_preview_html": "'''Афу этинъиз! HTML сессиянынъ малюматлары гъайып олгъаны себебинден сизинъ денъиштирмелеринъизни къабул этмеге имкян ёкътыр.'''", "token_suffix_mismatch": "'''Сизинъ программанъызнынъ озь тюрлендирюв пенджересинде пунктуация ишаретлерини догъру ишлемегени ичюн япкъан денъиштирмелеринъиз къабул олунмады. Денъиштирмелер саифе метнининъ корюниши бозулмасын деп лягъу этильди.\nБунынъ киби проблемалар хаталы аноним web-проксилер къулланувдан чыкъып ола.'''", - "editing": "\"$1\" саифесини денъиштиреятасыз", + "editing": "«$1» саифесини денъиштиреятасыз", + "creating": "«$1» саифесини яратув", "editingsection": "\"$1\" саифесинде болюк денъиштиреятасыз", "editingcomment": "$1 саифесини денъиштиреятасыз (янъы болюк)", "editconflict": "Денъиштирмелер чатышмасы: $1", @@ -585,6 +622,7 @@ "preferences": "Сазламалар", "mypreferences": "Сазламалар", "prefs-edits": "Денъиштирмелер сайысы:", + "prefsnologintext2": "Сазламаларынъызны денъиштирмек ичюн лютфен системагъа киринъиз.", "prefs-skin": "Ресимлеме", "skin-preview": "Бакъып чыкъув", "datedefault": "Стандарт", @@ -708,8 +746,10 @@ "recentchanges-label-minor": "Бу, кичик бир денъиштирме", "recentchanges-label-bot": "Бу бир ботнынъ япкъан денъиштирмеси", "recentchanges-label-unpatrolled": "Бу денъиштирме аля даа тешкерильмеген", + "recentchanges-label-plusminus": "Байт эсабынен саифе буюклигининъ денъиштирильмеси", + "recentchanges-legend-heading": "'''Ишаретлер:'''", "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|янъы саифелер джедвелине]] де бакъынъыз)", - "rcnotefrom": "'''$2''' тарихындан итибарен япылгъан денъиштирмелер ашагъыдадыр (энъ чокъ '''$1''' дане саифе косьтериле).", + "rcnotefrom": "$3, $4 тарихындан башлап япылгъан {{PLURAL:$5|денъиштирме|денъиштирмелер}} ашагъыдадыр (энъ чокъ $1 дане саифе косьтериле).", "rclistfrom": "$3 $2 тарихындан берли япылгъан денъиштирмелерни косьтер", "rcshowhideminor": "кичик денъиштирмелерни $1", "rcshowhideminor-show": "косьтер", @@ -717,7 +757,7 @@ "rcshowhidebots": "ботларны $1", "rcshowhidebots-show": "косьтер", "rcshowhidebots-hide": "гизле", - "rcshowhideliu": "Къайдлы къулланыджыларны $1", + "rcshowhideliu": "къайдлы къулланыджыларны $1", "rcshowhideliu-show": "косьтер", "rcshowhideliu-hide": "гизле", "rcshowhideanons": "аноним къулланыджыларны $1", @@ -740,6 +780,7 @@ "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|1=къулланыджы|къулланыджы}} козете]", "rc_categories": "Тек категориялардан («|» иле айырыла)", "rc_categories_any": "Эр анги", + "rc-change-size-new": "Денъиштирильген сонъ $1 {{PLURAL:$1|байт|байт}}", "newsectionsummary": "/* $1 */ янъы болюк", "rc-enhanced-expand": "Тафсилятыны косьтер", "rc-enhanced-hide": "Тафсилятыны гизле", @@ -755,7 +796,7 @@ "reuploaddesc": "Юклеме формасына кери къайт.", "upload-tryagain": "Денъиштирильген файл тарифини ёлла", "uploadnologin": "Отурым ачмадынъыз", - "uploadnologintext": "Файл юклеп олмакъ ичюн [[Special:UserLogin|отурым ачмакъ]] керексинъиз.", + "uploadnologintext": "Файл юклеп олмакъ ичюн лютфен $1.", "upload_directory_missing": "Юклемелер ичюн директория ($1) мевджут дегиль ве веб-сервер тарафындан япылып оламай.", "upload_directory_read_only": "Web серверининъ ($1) джузьданына файллар сакъламагъа акълары ёкътыр.", "uploaderror": "Юклеме хатасы", @@ -929,6 +970,7 @@ "pager-older-n": "{{PLURAL:$1|1=даа эски 1|даа эски $1}}", "booksources": "Китаплар менбасы", "booksources-search-legend": "Китаплар менбасыны къыдырув", + "booksources-search": "Къыдыр", "specialloguserlabel": "Къулланыджы:", "speciallogtitlelabel": "Серлева:", "log": "Журналлар", @@ -976,7 +1018,8 @@ "emailsenttext": "Сизинъ e-mail беянатынъыз ёлланды", "emailuserfooter": "Бу мектюп $1 тарафындан $2 къулланыджысына, {{SITENAME}} сайтындаки \"Къулланыджыгъа e-mail ёлла\" функциясынен ёллангъан.", "watchlist": "Козетюв джедвели", - "mywatchlist": "Козетюв джедвелим", + "mywatchlist": "Козетюв джедвели", + "watchlistfor2": "$1 ичюн $2", "nowatchlist": "Сизинъ козетюв джедвелинъиз боштыр.", "watchlistanontext": "Козетюв джедвелини бакъмакъ я да денъиштирмек ичюн $1 борджлусынъыз.", "watchnologin": "Отурым ачмакъ керек", @@ -1068,8 +1111,10 @@ "undeletecomment": "Себеп:", "undeletedrevisions": "Топлам {{PLURAL:$1|1=1 къайд|$1 къайд}} кери кетирильди.", "undelete-header": "Кеченлерде ёкъ этильген саифелерни корьмек ичюн [[Special:Log/delete|ёкъ этюв журналына]] бакъынъыз.", + "undelete-search-submit": "Къыдыр", "namespace": "Исим фезасы:", "invert": "Сайлангъан тышындакилерни сайла", + "namespace_association": "Багълы исим фезасы", "blanknamespace": "(Эсас)", "contributions": "{{GENDER:$1|Къулланыджынынъ}} исселери", "contributions-title": "$1 къулланыджысынынъ исселери", @@ -1118,6 +1163,7 @@ "unblockip": "Къулланыджынынъ блок этмесини чыкъар", "ipusubmit": "Бу блок этмени чыкъар", "ipblocklist": "Блок этильген къулланыджылар ве IP адреслери", + "ipblocklist-submit": "Къыдыр", "infiniteblock": "муддетсиз", "expiringblock": "$1 $2 тарихында битеджек", "blocklink": "блок эт", @@ -1179,6 +1225,7 @@ "allmessagesdefault": "Оригиналь метин", "allmessagescurrent": "Шимди къулланылгъан метин", "allmessagestext": "Ишбу джедвель MediaWiki-де мевджут олгъан бутюн система беянатларынынъ джедвелидир.\nMediaWiki интерфейсининъ чешит тиллерге терджиме этювде иштирак этмеге истесенъиз [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation MediaWiki Localisation] ве [//translatewiki.net translatewiki.net] саифелерине зиярет этинъиз.", + "allmessages-filter-legend": "Сюзгюч", "thumbnail-more": "Буют", "filemissing": "Файл тапылмады", "thumbnail_error": "Кичик ресим (thumbnail) яратылгъанда бир хата чыкъты: $1", @@ -1194,7 +1241,7 @@ "tooltip-pt-watchlist": "Козетювге алгъан саифелеринъиз", "tooltip-pt-mycontris": "Къошкъан исселеринъизнинъ джедвели", "tooltip-pt-login": "Отурым ачманъыз тевсие олуныр амма меджбур дегильсинъиз.", - "tooltip-pt-logout": "Системадан чыкъув", + "tooltip-pt-logout": "Чыкъыш", "tooltip-ca-talk": "Саифедеки малюматнен багълы музакере", "tooltip-ca-edit": "Бу саифени денъиштирип оласынъыз. Сакъламаздан эвель бакъып чыкъмагъа унутманъыз.", "tooltip-ca-addsection": "Янъы болюкни ачув", @@ -1415,7 +1462,7 @@ "specialpages": "Махсус саифелер", "specialpages-group-maintenance": "Бакъым эсабатлары", "specialpages-group-other": "Дигер махсус саифелер", - "specialpages-group-login": "Кириш / Къайд олув", + "specialpages-group-login": "Кириш / къайд олув", "specialpages-group-changes": "Сонъки денъишикликлер ве журналлар", "specialpages-group-media": "Файл эсабатлары ве юклеме", "specialpages-group-users": "Къулланыджылар ве акълары", @@ -1427,6 +1474,11 @@ "specialpages-group-spam": "Спамгъа къаршы алетлер", "blankpage": "Бош саифе", "intentionallyblankpage": "Бу саифе аселет бош къалдырылгъан", + "tag-filter": "[[Special:Tags|Бельги]] сюзгючи:", + "tag-filter-submit": "Сюз", + "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Бельги|Бельгилер}}]]: $2)", + "tags-title": "Бельгилер", "htmlform-reset": "Денъишикликлерни кери ал", + "searchsuggest-search": "Къыдыр", "searchsuggest-containing": "ичинде бу олгъан..." } diff --git a/languages/i18n/crh-latn.json b/languages/i18n/crh-latn.json index 31b184a99b..1cce6928b7 100644 --- a/languages/i18n/crh-latn.json +++ b/languages/i18n/crh-latn.json @@ -43,6 +43,7 @@ "tog-diffonly": "Teñeştirme saifelerinde saifeniñ esas mündericesini kösterme", "tog-showhiddencats": "Gizli kategoriyalarnı köster", "tog-norollbackdiff": "Keri qaytaruv yapılğan soñ versiyalar arasındaki farqnı kösterme", + "tog-prefershttps": "Sistemağa kirgen soñ er vaqıt telükesiz bağlama qullanılsın", "underline-always": "Daima", "underline-never": "Asla", "underline-default": "Brauzer sazlamaları qullanılsın", @@ -200,7 +201,7 @@ "pool-errorunknown": "Bilinmegen hata", "aboutsite": "{{SITENAME}} aqqında", "aboutpage": "Project:Aqqında", - "copyright": "Malümat $1 binaen keçilip ola.", + "copyright": "Başqası bildirilmese, malümat $1 litsenziyasınen berile.", "copyrightpage": "{{ns:project}}:Müelliflik aqları", "currentevents": "Şimdiki vaqialar", "currentevents-url": "Project:Ağımdaki vaqialar", @@ -293,7 +294,7 @@ "perfcached": "Aşağıdaki malümat keşten alındı ve eskirgen ola bilir! Keşte eñ çoq {{PLURAL:$1|bir netice|$1 netice}} saqlanıp tura.", "perfcachedts": "Aşağıdaki malümat keşten alındı, keşniñ soñki yañartılğan vaqtı: $1. Keşte eñ çoq {{PLURAL:$1|bir netice|$1 netice}} saqlanıp tura.", "querypage-no-updates": "Bu saifeni deñiştirmege şimdi izin yoq. Bu malümat aman yañartılmaycaq.", - "viewsource": "menba kodunı köster", + "viewsource": "Menba kodunı köster", "viewsource-title": "$1 saifesiniñ menba kodu", "actionthrottled": "Areket toqtaldı", "actionthrottledtext": "Spamğa qarşı küreş sebebinden bu areketni az vaqıt içinde çoq kere tekrarlap olamaysıñız. Mümkün olğan qarardan ziyade areket yaptıñız. Bir qaç daqqadan soñ tekrarlap baqıñız.", @@ -308,7 +309,9 @@ "virus-badscanner": "Yañlış sazlama. Bilinmegen virus skaneri: ''$1''", "virus-scanfailed": "skan etüv muvafaqiyetsiz (kod $1)", "virus-unknownscanner": "bilinmegen antivirus:", - "logouttext": "'''Oturımnı qapattıñız.'''\n\nŞimdi {{SITENAME}} saytını anonim olaraq qullanıp olasıñız, ya da yañıdan [$1 oturım açıp] olasıñız (ister aynı qullanıcı adınen, ister başqa bir qullanıcı adınen). Web brauzeriñiz keşini temizlegence bazı saifeler sanki alâ daa oturımıñız açıq eken kibi körünip olur.", + "logouttext": "Sistemadan çıqtıñız.\n\nBrauzeriñiz keşini temizlegence bazı saifeler sistemadan alâ daa çıqmağansıñız kibi körünip olur.", + "welcomeuser": "Hoş keldiñiz, $1!", + "welcomecreation-msg": "Esap yazıñız yaratıldı.\nİsteseñiz, [[Special:Preferences|{{SITENAME}} sazlamalarıñıznı]] deñiştire bilesiñiz.", "yourname": "Qullanıcı adıñız", "userlogin-yourname": "Qullanıncı adı", "userlogin-yourname-ph": "Qullanıcı adıñıznı yazıñız", @@ -321,7 +324,10 @@ "createacct-yourpasswordagain": "Parolni tasdıqlañız", "createacct-yourpasswordagain-ph": "Parolni bir daa yazıñız", "remembermypassword": "Kirişimni bu kompyuterde hatırla (eñ çoq $1 {{PLURAL:$1|kün|kün}} içün)", + "userlogin-remembermypassword": "Sistemada qalayım", + "userlogin-signwithsecure": "Telükesiz bağlama qullanılsın", "yourdomainname": "Domen adıñız", + "password-change-forbidden": "Bu vikide paroliñizni deñiştirip olamaysıñız", "externaldberror": "Saytqa kirgende bir hata oldı. Bu tış esabıñıznı deñiştirmek aqqıñız olmağanından sebep meydanğa kelip ola.", "login": "Kiriş", "nav-login-createaccount": "Kiriş / Qayd oluv", @@ -329,22 +335,36 @@ "userloginnocreate": "Kiriş", "logout": "Çıqış", "userlogout": "Çıqış", - "notloggedin": "Saytqa kirmediñiz.", + "notloggedin": "Sistemağa kirmediñiz.", "userlogin-noaccount": "Akkauntıñız yoqmı?", "userlogin-joinproject": "{{SITENAME}} leyhasına qoşulıñız", "nologin": "Daa esap açmadıñızmı? '''$1'''.", "nologinlink": "Qayd ol", "createaccount": "Qayd oluv", "gotaccount": "Daa evel saytta qayd olğan ediñizmi? '''$1'''.", - "gotaccountlink": "Saytqa kiriñiz", + "gotaccountlink": "Sistemağa kiriñiz", "userlogin-resetlink": "Kiriş malümatını unuttıñızmı?", - "createaccountmail": "e-mail vastasınen", + "createacct-emailrequired": "E-mail adresi", + "createacct-emailoptional": "E-mail adresi (mecburiy degil)", + "createacct-email-ph": "E-mail adresiñizni yazıñız", + "createacct-another-email-ph": "E-mail adresiñizni yazıñız", + "createaccountmail": "Avtomatik olaraq meydanğa ketirilgen muvaqqat bir parol qullana bilir ve bu parolni bildirilgen e-mail adresine yollay bilirsiñiz", + "createacct-realname": "Aqiqiy adıñız (mecburiy degil)", "createaccountreason": "Sebep:", + "createacct-reason": "Sebep", + "createacct-reason-ph": "Başqa bir esap yazısı neden sebep yaratasıñız", + "createacct-captcha": "Telükesizlik kontroli", + "createacct-imgcaptcha-ph": "Yuqarıda körgen metniñizni yazıñız", "createacct-submit": "Esap yazıñıznı yaratıñız", + "createacct-another-submit": "Başqa bir esap yazısı yaratıñız", "createacct-benefit-heading": "{{SITENAME}} siziñ kibi adamlar tarafından yazıla.", + "createacct-benefit-body1": "{{PLURAL:$1|deñiştirme|deñiştirme}}", + "createacct-benefit-body2": "{{PLURAL:$1|saife|saife}}", + "createacct-benefit-body3": "soñki vaqıtlarda {{PLURAL:$1|issesini qoşqan qullanıcı|issesini qoşqan qullanıcı}}", "badretype": "Kirsetken parolleriñiz aynı degil.", "userexists": "Kirsetken qullanıcı adıñız endi qullanıla.\nLütfen, başqa bir qullanıcı adı saylañız.", "loginerror": "Oturım açma hatası", + "createacct-error": "Esap yazısını yaratuv hatası", "createaccounterror": "Esap yaratılıp olamay: $1", "nocookiesnew": "Qullanıcı esabı açılğan, faqat tanıtılmağan. {{SITENAME}} qullanıcılarnı tanıtmaq içün \"cookies\"ni qullana. Sizde bu funktsiya qapalı vaziyettedir. \"Cookies\" funktsiyasını işletip tekrar yañı adıñız ve paroliñiznen tırışıp baqınız.", "nocookieslogin": "{{SITENAME}} \"cookies\"ni qullana. Sizde bu funktsiya qapalı vaziyettedir. \"Cookies\" funktsiyasını işletip tekrar tırışıp baqıñız.", @@ -360,7 +380,7 @@ "passwordtooshort": "Paroliñizde eñ az {{PLURAL:$1|1|$1}} işaret olmalı.", "password-name-match": "Paroliñiz qullanıcı adıñızdan farqlı olmalı.", "password-login-forbidden": "Bu qullanıcı adı ve parolni qullanmaq yasaqtır.", - "mailmypassword": "Yañı parol yiber", + "mailmypassword": "Parolni sıfırla", "passwordremindertitle": "{{grammar:genitive|{{SITENAME}}}} qullanıcınıñ parol hatırlatuvı", "passwordremindertext": "Birev (belki de bu sizsiñiz, $1 IP adresinden) {{SITENAME}} saytı içün ($4) yañı qullanıcı parolini istedi.\n$2 qullanıcısına vaqtınca $3 paroli yaratıldı. Eger bu kerçekten de siziñ istegiñiz olğan olsa, oturım açıp yañı bir parol yaratmañız kerektir. Muvaqqat paroliñizniñ müddeti {{PLURAL:$5|1 kün|$5 kün}} içinde dolacaq.\n\nEger de yañı parol talap etmegen olsañız ya da eski paroliñizni hatırlap endi onı deñiştirmege istemeseñiz, bu mektüpni diqqatqa almayıp eski paroliñizni qullanmağa devam etip olasıñız.", "noemail": "$1 adlı qullanıcı içün e-mail bildirilmedi.", @@ -468,7 +488,8 @@ "session_fail_preview": "''' Server siz yapqan deñiştirmelerni sessiya identifikatorı\ncoyulğanı sebebinden saqlap olamadı. Bu vaqtınca problemadır. Lütfen, tekrar saqlap baqıñız.\nBundan da soñ olıp çıqmasa, malümat lokal faylğa saqlañız da brauzeriñizni bir qapatıp\naçıñız.'''", "session_fail_preview_html": "'''Afu etiñiz! HTML sessiyanıñ malümatları ğayıp olğanı sebebinden siziñ deñiştirmeleriñizni qabul etmege imkân yoqtır.'''", "token_suffix_mismatch": "'''Siziñ programmañıznıñ öz türlendirüv penceresinde punktuatsiya işaretlerini doğru işlemegeni içün yapqan deñiştirmeleriñiz qabul olunmadı. Deñiştirmeler saife metniniñ körünişi bozulmasın dep lâğu etildi.\nBunıñ kibi problemalar hatalı anonim web-proksiler qullanuvdan çıqıp ola.'''", - "editing": "\"$1\" saifesini deñiştireyatasız", + "editing": "“$1” saifesini deñiştireyatasız", + "creating": "“$1” saifesini yaratuv", "editingsection": "\"$1\" saifesinde bölük deñiştireyatasız", "editingcomment": "$1 saifesini deñiştireyatasız (yañı bölük)", "editconflict": "Deñiştirmeler çatışması: $1", @@ -601,7 +622,7 @@ "preferences": "Sazlamalar", "mypreferences": "Sazlamalar", "prefs-edits": "Deñiştirmeler sayısı:", - "prefsnologintext2": "Sazlamalarıñıznı deñiştirmek içün lütfen saytqa kiriñiz.", + "prefsnologintext2": "Sazlamalarıñıznı deñiştirmek içün lütfen sistemağa kiriñiz.", "prefs-skin": "Resimleme", "skin-preview": "Baqıp çıquv", "datedefault": "Standart", @@ -725,8 +746,10 @@ "recentchanges-label-minor": "Bu, kiçik bir deñiştirme", "recentchanges-label-bot": "Bu bir botnıñ yapqan deñiştirmesi", "recentchanges-label-unpatrolled": "Bu deñiştirme alâ daa teşkerilmegen", + "recentchanges-label-plusminus": "Bayt esabınen saife büyükliginiñ deñiştirilmesi", + "recentchanges-legend-heading": "'''İşaretler:'''", "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|yañı saifeler cedveline]] de baqıñız)", - "rcnotefrom": "'''$2''' tarihından itibaren yapılğan deñiştirmeler aşağıdadır (eñ çоq '''$1''' dane saife kösterile).", + "rcnotefrom": "$3, $4 tarihından başlap yapılğan {{PLURAL:$5|deñiştirme|deñiştirmeler}} aşağıdadır (eñ çоq $1 dane saife kösterile).", "rclistfrom": "$3 $2 tarihından berli yapılğan deñiştirmelerni köster", "rcshowhideminor": "kiçik deñiştirmelerni $1", "rcshowhideminor-show": "köster", @@ -734,7 +757,7 @@ "rcshowhidebots": "botlarnı $1", "rcshowhidebots-show": "köster", "rcshowhidebots-hide": "gizle", - "rcshowhideliu": "Qaydlı qullanıcılarnı $1", + "rcshowhideliu": "qaydlı qullanıcılarnı $1", "rcshowhideliu-show": "köster", "rcshowhideliu-hide": "gizle", "rcshowhideanons": "anonim qullanıcılarnı $1", @@ -757,6 +780,7 @@ "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|qullanıcı|qullanıcı}} közete]", "rc_categories": "Tek kategoriyalardan (\"|\" ile ayırıla)", "rc_categories_any": "Er angi", + "rc-change-size-new": "Deñiştirilgen soñ $1 {{PLURAL:$1|bayt|bayt}}", "newsectionsummary": "/* $1 */ yañı bölük", "rc-enhanced-expand": "Tafsilâtını köster", "rc-enhanced-hide": "Tafsilâtını gizle", @@ -772,7 +796,7 @@ "reuploaddesc": "Yükleme formasına keri qayt.", "upload-tryagain": "Deñiştirilgen fayl tarifini yolla", "uploadnologin": "Oturım açmadıñız", - "uploadnologintext": "Fayl yüklep olmaq içün [[Special:UserLogin|oturım açmaq]] kereksiñiz.", + "uploadnologintext": "Fayl yüklep olmaq içün lütfen $1.", "upload_directory_missing": "Yüklemeler içün direktoriya ($1) mevcut degil ve veb-server tarafından yapılıp olamay.", "upload_directory_read_only": "Web serverniñ ($1) cüzdanına fayllar saqlamağa aqları yoqtır.", "uploaderror": "Yükleme hatası", @@ -946,6 +970,7 @@ "pager-older-n": "{{PLURAL:$1|daa eski 1|daa eski $1}}", "booksources": "Kitaplar menbası", "booksources-search-legend": "Kitaplar menbasını qıdıruv", + "booksources-search": "Qıdır", "specialloguserlabel": "Qullanıcı:", "speciallogtitlelabel": "Serleva:", "log": "Jurnallar", @@ -993,7 +1018,8 @@ "emailsenttext": "Siziñ e-mail beyanatıñız yollandı", "emailuserfooter": "Bu mektüp $1 tarafından $2 qullanıcısına, {{SITENAME}} saytındaki \"Qullanıcığa e-mail yolla\" funktsiyasınen yollanğan.", "watchlist": "Közetüv cedveli", - "mywatchlist": "Közetüv cedvelim", + "mywatchlist": "Közetüv cedveli", + "watchlistfor2": "$1 içün $2", "nowatchlist": "Siziñ közetüv cedveliñiz boştır.", "watchlistanontext": "Közetüv cedvelini baqmaq ya da deñiştirmek içün $1 borclusıñız.", "watchnologin": "Oturım açmaq kerek", @@ -1085,8 +1111,10 @@ "undeletecomment": "Sebep:", "undeletedrevisions": "Toplam {{PLURAL:$1|1 qayd|$1 qayd}} keri ketirildi.", "undelete-header": "Keçenlerde yoq etilgen saifelerni körmek içün [[Special:Log/delete|yoq etüv jurnalına]] baqıñız.", + "undelete-search-submit": "Qıdır", "namespace": "İsim fezası:", "invert": "Saylanğan tışındakilerni sayla", + "namespace_association": "Bağlı isim fezası", "blanknamespace": "(Esas)", "contributions": "{{GENDER:$1|Qullanıcınıñ}} isseleri", "contributions-title": "$1 qullanıcısınıñ isseleri", @@ -1135,6 +1163,7 @@ "unblockip": "Qullanıcınıñ blok etmesini çıqar", "ipusubmit": "Bu blok etmeni çıqar", "ipblocklist": "Blok etilgen qullanıcılar ve IP adresleri", + "ipblocklist-submit": "Qıdır", "infiniteblock": "müddetsiz", "expiringblock": "$1 $2 tarihında bitecek", "blocklink": "blok et", @@ -1196,6 +1225,7 @@ "allmessagesdefault": "Original metin", "allmessagescurrent": "Şimdi qullanılğan metin", "allmessagestext": "İşbu cedvel MediaWikide mevcut olğan bütün sistema beyanatlarınıñ cedvelidir.\nMediaWiki interfeysiniñ çeşit tillerge tercime etüvde iştirak etmege isteseñiz [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation MediaWiki Localisation] ve [//translatewiki.net translatewiki.net] saifelerine ziyaret etiñiz.", + "allmessages-filter-legend": "Süzgüç", "thumbnail-more": "Büyüt", "filemissing": "Fayl tapılmadı", "thumbnail_error": "Kiçik resim (thumbnail) yaratılğanda bir hata çıqtı: $1", @@ -1211,7 +1241,7 @@ "tooltip-pt-watchlist": "Közetüvge alğan saifeleriñiz", "tooltip-pt-mycontris": "Qoşqan isseleriñizniñ cedveli", "tooltip-pt-login": "Oturım açmañız tevsiye olunır amma mecbur degilsiñiz.", - "tooltip-pt-logout": "Sistemadan çıquv", + "tooltip-pt-logout": "Çıqış", "tooltip-ca-talk": "Saifedeki malümatnen bağlı muzakere", "tooltip-ca-edit": "Bu saifeni deñiştirip olasıñız. Saqlamazdan evel baqıp çıqmağa unutmañız.", "tooltip-ca-addsection": "Yañı bölükni açuv", @@ -1444,8 +1474,13 @@ "specialpages-group-spam": "Spamğa qarşı aletler", "blankpage": "Boş saife", "intentionallyblankpage": "Bu saife aselet boş qaldırılğan", + "tag-filter": "[[Special:Tags|Belgi]] süzgüçi:", + "tag-filter-submit": "Süz", + "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Belgi|Belgiler}}]]: $2)", + "tags-title": "Belgiler", "comparepages": "Saifelerni teñeştirüv", "compare-submit": "Teñeştir", "htmlform-reset": "Deñişikliklerni keri al", + "searchsuggest-search": "Qıdır", "searchsuggest-containing": "içinde bu olğan..." } diff --git a/languages/i18n/de.json b/languages/i18n/de.json index 861df7ae0a..22ae45c2e1 100644 --- a/languages/i18n/de.json +++ b/languages/i18n/de.json @@ -2002,7 +2002,7 @@ "ipboptions": "2 Stunden:2 hours,1 Tag:1 day,3 Tage:3 days,1 Woche:1 week,2 Wochen:2 weeks,1 Monat:1 month,3 Monate:3 months,6 Monate:6 months,1 Jahr:1 year,unbeschränkt:infinite", "ipbhidename": "Benutzername in Bearbeitungen und Listen verstecken", "ipbwatchuser": "Benutzer(diskussions)seite beobachten", - "ipb-disableusertalk": "Diesen Benutzer daran hindern seine eigene Diskussionsseite zu bearbeiten, solange er gesperrt ist", + "ipb-disableusertalk": "Diesen Benutzer daran hindern, seine eigene Diskussionsseite zu bearbeiten, solange er gesperrt ist", "ipb-change-block": "Sperre mit diesen Sperrparametern erneuern", "ipb-confirm": "Sperrung bestätigen", "badipaddress": "Die IP-Adresse hat ein falsches Format.", diff --git a/languages/i18n/el.json b/languages/i18n/el.json index c924744380..b607abbaf8 100644 --- a/languages/i18n/el.json +++ b/languages/i18n/el.json @@ -83,7 +83,7 @@ "tog-prefershttps": "Να γίνεται πάντα χρήση ασφαλούς σύνδεσης όταν ο χρήστης είναι συνδεδεμένος", "underline-always": "Πάντα", "underline-never": "Ποτέ", - "underline-default": "Προεπιλογή από το skin ή από τον περιηγητή", + "underline-default": "Προεπιλογή από το θέμα ή από τον περιηγητή", "editfont-style": "Στυλ γραμματοσειράς της περιοχής επεξεργασίας:", "editfont-default": "Προεπιλογή περιηγητή", "editfont-monospace": "Γραμματοσειρά με σταθερό πλάτος χαρακτήρων", @@ -891,7 +891,7 @@ "mypreferences": "Προτιμήσεις", "prefs-edits": "Αριθμός επεξεργασιών:", "prefsnologintext2": "Παρακαλώ συνδεθείτε για να αλλάξετε τις προτιμήσεις σας.", - "prefs-skin": "Skin", + "prefs-skin": "Θέμα εμφάνισης", "skin-preview": "Προεπισκόπηση", "datedefault": "Χωρίς προτίμηση", "prefs-labs": "Λειτουργίες των Labs", @@ -947,7 +947,7 @@ "prefs-files": "Αρχεία", "prefs-custom-css": "Προκαθορισμένη CSS", "prefs-custom-js": "Προκαθορισμένη JS", - "prefs-common-css-js": "Κοινά CSS/JS για όλα τα skins:", + "prefs-common-css-js": "Κοινά CSS/JS για όλα τα θέματα:", "prefs-reset-intro": "Μπορείτε να χρησιμοποιήσετε αυτήν την σελίδα για να επαναρρυθμίσετε τις προτιμήσεις σας στις προεπιλογές του ιστότοπου. Αυτό δεν μπορεί να αναστρεφθεί.", "prefs-emailconfirm-label": "Επιβεβαίωση e-mail:", "youremail": "Διεύθυνση ηλεκτρονικού ταχυδρομείου:", @@ -2835,7 +2835,7 @@ "duplicate-defaultsort": "'''Προειδοποίηση:''' Το προεπιλεγμένο κλειδί ταξινόμησης «$2» υπερισχύει του προηγούμενου προεπιλεγμένου κλειδιού «$1».", "version": "Έκδοση", "version-extensions": "Εγκαταστημένες επεκτάσεις", - "version-skins": "Εγκατεστημένα skins", + "version-skins": "Εγκατεστημένα θέματα εμφάνισης", "version-specialpages": "Ειδικές σελίδες", "version-parserhooks": "Άγκιστρα του συντακτικού αναλυτή", "version-variables": "Παράμετροι", @@ -2852,7 +2852,7 @@ "version-license": "Άδεια MediaWiki", "version-ext-license": "Άδεια χρήσης", "version-ext-colheader-name": "Επέκταση", - "version-skin-colheader-name": "Skin", + "version-skin-colheader-name": "Θέμα εμφάνισης", "version-ext-colheader-version": "Έκδοση", "version-ext-colheader-license": "Άδεια χρήσης", "version-ext-colheader-description": "Περιγραφή", diff --git a/languages/i18n/et.json b/languages/i18n/et.json index 1556350786..6a80627cf6 100644 --- a/languages/i18n/et.json +++ b/languages/i18n/et.json @@ -206,7 +206,7 @@ "unprotect": "Muuda kaitset", "unprotectthispage": "Muuda selle lehekülje kaitset", "newpage": "Uus lehekülg", - "talkpage": "Selle artikli arutelu", + "talkpage": "Selle lehekülje arutelu", "talkpagelinktext": "arutelu", "specialpage": "Erilehekülg", "personaltools": "Personaalsed tööriistad", @@ -2212,7 +2212,7 @@ "tooltip-pt-login": "See pole küll kohustuslik, aga sul tasub sisse logida.", "tooltip-pt-logout": "Logi välja", "tooltip-pt-createaccount": "See pole küll kohustuslik, aga sul tasub konto luua ja sisse logida.", - "tooltip-ca-talk": "Selle artikli arutelu", + "tooltip-ca-talk": "Arutelu selle lehekülje sisu kohta", "tooltip-ca-edit": "Sa saad seda lehekülge muuta. Palun kasuta enne salvestamist eelvaadet.", "tooltip-ca-addsection": "Lisa uus alaosa", "tooltip-ca-viewsource": "See lehekülg on kaitstud.\nSaad vaadata selle lähteteksti.", diff --git a/languages/i18n/kk-cyrl.json b/languages/i18n/kk-cyrl.json index 1f5b5b74cc..39ab526691 100644 --- a/languages/i18n/kk-cyrl.json +++ b/languages/i18n/kk-cyrl.json @@ -781,6 +781,7 @@ "search-result-category-size": "{{PLURAL:$1|1 мүше|$1 мүше}} ({{PLURAL:$2|1 санатша|$2 санатша}}, {{PLURAL:$3|1 файл|$3 файл}})", "search-redirect": "(айдағыш $1)", "search-section": "(бөлім $1)", + "search-category": "(Санат:$1)", "search-suggest": "Мүмкін осы болар: $1", "search-interwiki-caption": "Бауырлас жобалар", "search-interwiki-default": "$1 дегеннен нәтиже:", diff --git a/languages/i18n/lrc.json b/languages/i18n/lrc.json index eef50169c1..dc78d3ec9e 100644 --- a/languages/i18n/lrc.json +++ b/languages/i18n/lrc.json @@ -2456,6 +2456,7 @@ "exif-source": "سرچشمه", "exif-urgency": "فوریت", "exif-fixtureidentifier": "نوم ثاوت", + "exif-contact": "دونسمنیا پیوند گرتن", "exif-writer": "نیسنه", "exif-languagecode": "زون", "exif-iimversion": "نسقه آی آی ام", @@ -2508,6 +2509,7 @@ "exif-flash-mode-3": "مد خودانجوم", "exif-focalplaneresolutionunit-2": "ائنج", "exif-sensingmethod-1": "نادیار", + "exif-filesource-3": "دیربین دیجیتالی", "exif-customrendered-0": "پردازشت خو", "exif-customrendered-1": "پردازشت همیشه ای", "exif-scenecapturetype-0": "استاندارد", @@ -2571,6 +2573,7 @@ "confirmemail_send": "کل کردن رازینه پشت راس کاری", "confirmemail_sent": "انجومانامه پشت راس کردن کل بیه.", "confirmemail_subject": "{{SITENAME}} تیرنشون انجومانامه پشت راست کردن", + "confirmemail_invalidated": "پشت راس کنی انجومانامه انجوم شیو بیه", "invalidateemail": "انجومشیو کردن پشت راس کردن انجومانامه", "scarytranscludetoolong": "[یو آر ال فره گپه]", "recreate": "د نو راس کردن", @@ -2602,6 +2605,7 @@ "table_pager_prev": "بلگه دمايی", "table_pager_first": "سرآسونه", "table_pager_last": "بلگه آخری", + "table_pager_limit": "$1 سی هر بلگه نشو بیه", "table_pager_limit_label": "آیتم سی هر بلگه:", "table_pager_limit_submit": "رو", "table_pager_empty": "هیچ نتیجه ای نئ", @@ -2621,7 +2625,9 @@ "watchlistedit-clear-title": "سیل برگ دروس بیه", "watchlistedit-clear-legend": "پاک کردن سیل برگ", "watchlistedit-clear-titles": "داسون:", + "watchlistedit-clear-submit": "پاک کردن سیل برگ(وه سی همیشه هئ!)", "watchlistedit-clear-done": "سیل برگتون وه پاک بیه.", + "watchlistedit-too-many": "ایچه بلگه یا فره ای سی نشو دئن هئ.", "watchlisttools-clear": "پاک کردن سیل برگ", "watchlisttools-view": "آلشتیا مرتوط نه بوینیت", "watchlisttools-edit": "سیل برگ بوینیتو و ویرایشت بکید", @@ -2642,9 +2648,12 @@ "hijri-calendar-m2": "صفر", "hijri-calendar-m3": "ربیع الاول", "hijri-calendar-m4": "رجو", + "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|چک چنه]])", "timezone-utc": "UTC", + "unknown_extension_tag": "سردیس دمادیس نادیار \"$1\"", "duplicate-defaultsort": "زنهار کلیت پیش فرض جور بیه $2 تازه ای یا کلید پیش فرض جوربیه $1 رد بیه.", "version": "نسقه", + "version-extensions": "دمادیسیا پورسه", "version-specialpages": "بلگيا ويجه", "version-variables": "آلشت ونا", "version-antispam": "نهاگرتن هرزنومه", @@ -2652,6 +2661,7 @@ "version-hook-name": "نوم قلاو", "version-no-ext-name": "[بی نوم]", "version-ext-license": "ليسانس", + "version-ext-colheader-name": "دمادیس", "version-skin-colheader-name": "پوسه", "version-ext-colheader-version": "نسقه", "version-ext-colheader-license": "ليسانس", @@ -2737,6 +2747,9 @@ "api-error-filename-tooshort": "نوم جانیا فره کؤچکه.", "api-error-illegal-filename": "نوم جانیا اجازه دئه نئ.", "api-error-mustbeloggedin": "شما سی سوارکردن فایلیا با بیایت وامین", + "api-error-unclassified": "یه گل خطا نادیار ری ون کرده.", + "api-error-unknown-code": "خطا نادیار:\"$1\".", + "api-error-unknownerror": "خطا نادیار:\"$1\".", "duration-seconds": "$1 {{PLURAL:$1|ثانیه|ثانیه یا}}", "duration-minutes": "$1 {{PLURAL:$1|دیقه|دیقه یا}}", "duration-hours": "$1 {{PLURAL:$1|ساعت |ساعتیا}}", @@ -2745,10 +2758,13 @@ "duration-years": "$1{{جمی:$1| سال|سالیا}}", "duration-decades": "$1 {{PLURAL:$1|دهه|دهه یا}}", "duration-centuries": "$1 {{PLURAL:$1|سده|سده یا}}", + "limitreport-cputime-value": "$1 {{PLURAL:$1|ثانیه|ثانیه یا}}", + "limitreport-walltime": "زمون راستکی وه کار گرتن", "limitreport-ppvisitednodes-value": "$1/$2", "limitreport-ppgeneratednodes-value": "$1/$2", "limitreport-expansiondepth-value": "$1/$2", "limitreport-expensivefunctioncount-value": "$1/$2", + "expand_templates_input": "نیسسه درینده:", "expand_templates_output": "نتیجه", "expand_templates_xml_output": "درده ایکس ام ال", "expand_templates_ok": "خوئه", @@ -2770,6 +2786,7 @@ "mediastatistics-header-bitmap": "عسگیا بیت مپ", "mediastatistics-header-audio": "دنگ", "mediastatistics-header-video": "عسگ و فیلم", + "mediastatistics-header-multimedia": "وارسگر خو", "mediastatistics-header-office": "نوشتگه", "mediastatistics-header-text": "نیسسه دار", "json-error-syntax": "خطا دستوری" diff --git a/languages/i18n/mt.json b/languages/i18n/mt.json index 6ac9530d01..03f9923eec 100644 --- a/languages/i18n/mt.json +++ b/languages/i18n/mt.json @@ -316,6 +316,8 @@ "filerenameerror": "Il-fajl \"$1\" ma setax jiġi msemmi mill-ġdid għal \"$2\".", "filedeleteerror": "Il-fajl \"$1\" ma setax jiġi mħassar.", "directorycreateerror": "Id-direttorju \"$1\" ma setax jiġi maħluq.", + "directoryreadonlyerror": "Id-direttorju \"$1\" hu għall-qari biss", + "directorynotreadableerror": "Id-direttorju \"$1\" ma jistax jinqara.", "filenotfound": "Il-fajl \"$1\" ma nstabx.", "unexpected": "Valur mhux mistenni: \"$1\"=\"$2\".", "formerror": "Problema: il-formula ma setgħatx tiġi proċessata", @@ -442,11 +444,11 @@ "passwordsent": "Il-password il-ġdida ntbagħtet fl-indirizz tal-posta elettronika ta' \"$1\".\nJekk jogħġbok, għamel aċċess wara li tasallek.", "blocked-mailpassword": "L-indirizz tal-IP tiegħek huwa bblokkjat u miżmum milli jwettaq modifiki. Għaldaqstant, mhuwiex possibli għalik li tuża l-funzjoni sabiex iġġib lura l-password, u dan sabiex ma jkunx hemm abbużi.", "eauthentsent": "Intbagħtetlek konferma b'permezz ta' messaġġ elettroniku fl-indirizz speċifikat.\nQabel ma tinbagħat xi posta elettronika oħra fuq il-kont, trid issegwi l-istruzzjonijiet indikati fil-messaġġ, sabiex tikkonferma li l-kont huwa tassew tiegħek.", - "throttled-mailpassword": "Posta elettronika sabiex tfakrek il-password ġiet postjata, fl-aħħar {{PLURAL:$1|siegħa|$1 siegħat}}.\nSabiex jitnaqqas l-abbuż, waħda biss tista' tiġi postjata f'kull {{PLURAL:$1|siegħa|$1 siegħat}}.", + "throttled-mailpassword": "Diġà nbagħtitlek messaġġ elettroniku biex ifakkrek il-password, fl-aħħar {{PLURAL:$1|siegħa|$1 sigħat}}.\nSabiex jiġi evitat l-abbuż, password waħda biss tista' tinbagħat kull {{PLURAL:$1|siegħa|$1 sigħat}}.", "mailerror": "Problema bil-postar tal-messaġġ: $1", "acct_creation_throttle_hit": "L-utenti ta' din il-wiki li jużaw l-indirizz IP tiegħek ħolqu {{PLURAL:$1|kont|$1 kontijiet}} fl-aħħar ġurnata, li hu n-numru massimu permess f'dan il-perjodu ta' żmien.\nBħala riżultat, il-viżitaturi li jużaw dan l-IP ma jistgħux għall-mument, joħoloqu aktar kontijiet.", - "emailauthenticated": "L-indirizz tal-posta elettronika tiegħek ġiet konfermat nhar il-$2, fil-$3.", - "emailnotauthenticated": "L-indirizz tal-posta elettronika tiegħek għadu ma ġiex konfermat. L-ebda posta elettronika mhi se tintbagħat għall-ebda minn dawn il-funzjonijiet elenkati hawn taħt.", + "emailauthenticated": "L-indirizz tal-posta elettronika tiegħek ġie kkonfermat nhar il-$2, fil-$3.", + "emailnotauthenticated": "L-indirizz tal-posta elettronika tiegħek għadu ma ġiex konfermat. L-ebda posta elettronika mhi se tinbagħat għall-funzjonijiet elenkati hawn taħt.", "noemailprefs": "Speċifika indirizz ta' posta elettronika sabiex dawn il-faċċilitajiet jaħdmu.", "emailconfirmlink": "Ikkonferma l-indirizz tal-posta elettronika tiegħek", "invalidemailaddress": "L-indirizz tal-posta elettronika ma jistax jiġi aċċettat għax jidher li għandu format ħażin.\nJekk jogħġbok daħħal indirizz validu jew inkella ħassru.", @@ -456,8 +458,9 @@ "accountcreatedtext": "Il-kont tal-utent għal [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|diskussjoni]]) ġie maħluq.", "createaccount-title": "Ħolqien tal-kont għal {{SITENAME}}", "createaccount-text": "Xi ħadd ħoloq kont għall-indirizz tal-posta elettronika tiegħek fuq {{SITENAME}} ($4) bl-isem \"$2\", bil-password: \"$3\".\nHuwa opportun li tidħol issa u tbiddel il-password tiegħek mill-ewwel.\n\nJekk trid tista' ma tagħtix każ dan il-messaġġ, jekk dan il-kont ġie maħluq bi żball.", - "login-throttled": "Saru ħafna tentattivi riċenti fuq il-password ta' dan il-kont.\nJekk jogħġbok stenna qabel ma terġa' tipprova.", + "login-throttled": "Ippruvajt tidħol fl-kont wisq drabi\nJekk jogħġbok stenna $1 qabel ma terġa' tipprova.", "login-abort-generic": "Il-login ma kienx suċċess - Imħassar", + "login-migrated-generic": "Il-kont tiegħek tmexxa u ismek ta' utent m'għadux jeżisti fuq dan il-wiki.", "loginlanguagelabel": "Lingwa: $1", "suspicious-userlogout": "Ir-rikjesta tiegħek li toħroġ barra mill-kont tiegħek ġiet miċħuda minħabba li jidher li din intbagħtet minn browser li ma jaħdimx jew minn proxy ta' caching.", "pt-login": "Idħol", @@ -517,6 +520,7 @@ "changeemail-submit": "Biddel l-indirizz elettroniku", "changeemail-throttled": "Ippruvajt tidħol wisq drabi.\nJekk jogħġbok stenna $1 qabel ma terġa' tipprova.", "resettokens": "Irrisettja t-tokens", + "resettokens-token-label": "$1 (valur attwali: $2)", "bold_sample": "Tipa ħoxna", "bold_tip": "Tipa ħoxna", "italic_sample": "Tipa korsiva", @@ -543,6 +547,7 @@ "preview": "Dehra proviżorja", "showpreview": "Dehra proviżorja", "showdiff": "Uri t-tibdiliet", + "blankarticle": "Attenzjoni: Il-paġna li qed toħloq vojta.\nMeta terġa' tikklikkja fuq \"{{int:savearticle}}\", il-paġna tinħoloq bla ebda kontenut.", "anoneditwarning": "'''Attenzjoni:''' Ma dħaltx f'kontok.\nL-indirizz tal-IP tiegħek se jkun jidher pubblikament meta tagħmel xi modifika. Jekk [$1 tidħol f'kontok] jew [$2 toħloq kont], il-modifiki li tagħmel jiġu attribwiti lill-ismek ta' utent, flimkien ma benefiċċji oħra.", "anonpreviewwarning": "''Bħalissa mintix fil-kont tiegħek. Jekk issalva xi modifiki tiegħek, fil-kronoloġija tal-paġna se jiġi reġistrat l-indirizz IP tiegħek.''", "missingsummary": "'''Twissija:''' Ma pprovdejt l-ebda taqsira dwar il-modifika.\nJekk terġa' tagħfas Modifika, l-modifika se tiġi salvata mingħajr waħda.", @@ -562,12 +567,12 @@ "loginreqlink": "li tidħol fil-kont tiegħek", "loginreqpagetext": "Int trid ikollhok $1 sabiex tkun tista' tara paġni oħrajn.", "accmailtitle": "Il-password intbagħtet.", - "accmailtext": "Password ġenerata każwalment għal [[User talk:$1|$1]] intbagħtet lil $2.
\n\nIl-password għal dan il-kont il-ġdid tista' titbiddel fil-paġna għat-''[[Special:ChangePassword|tibdil tal-password]]''.", + "accmailtext": "Intbagħtet lil $2 password iġġenerata każwalment għal [[User talk:$1|$1]] .\nTista' tinbidel fuq il-paġna għat-[[Special:ChangePassword|tibdil tal-password]] wara d-dħul fil-kont.", "newarticle": "(Ġdid)", "newarticletext": "Inti segwejt link għal paġna li għadha ma ġietx maħluqa.\nSabiex toħloq il-paġna, ikteb fil-kaxxa li tinsab hawn taħt (ara [$1 paġna tal-għajnuna] għal aktar informazzjoni).\nJekk wasalt hawn biż-żball, agħfas il-buttuna '''lura''' (''back'') fuq il-browser tiegħek.", "anontalkpagetext": "----''Din hija l-paġna ta' diskussjoni ta' utent anonimu li għadu ma ħoloqx kont, jew inkella li ma jużahx.\nGħaldaqstant biex nidentifikawh ikollna nużaw l-indirizz tal-IP tiegħu/tagħha.\nL-istess indirizz tal-IP jista' jkun użat minn bosta utenti differenti.\nJekk int utent anonimu u tħoss li qiegħed tirċievi kummenti irrelevanti jew li ma jagħmlux sens, jekk jogħġbok [[Special:UserLogin|idħol fil-kont tiegħek]] jew [[Special:UserLogin/signup|oħloq wieħed]] sabiex tevita li fil-futur tiġi konfuż ma' utenti anonimi oħra.''", "noarticletext": "Bħalissa m'hemm l-ebda test f'din il-paġna.\nInti tista' [[Special:Search/{{PAGENAME}}|tfittex it-titlu ta' din il-paġna]] f'paġni oħra, jew [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} tfittex ir-reġistri relatati], jew [{{fullurl:{{FULLPAGENAME}}|action=edit}} timmodifika din il-paġna].", - "noarticletext-nopermission": "Bħalissa m'hemm l-ebda test f'din il-paġna. Inti tista' [[Special:Search/{{PAGENAME}}|tfittex għal dan it-titlu tal-paġna]] f'paġni oħra, jew [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} fittex ir-reġistri relatati].", + "noarticletext-nopermission": "Bħalissa m'hemm l-ebda test f'din il-paġna. Inti tista' [[Special:Search/{{PAGENAME}}|tfittex dan it-titlu tal-paġna]] f'paġni oħra, jew [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} tfittex ir-reġistri relatati], imma m'għandikx permess toħloq dil-paġna.", "missing-revision": "Ir-reviżjoni #$1 tal-paġna bl-isem \"{{FULLPAGENAME}}\" ma teżistix.\n\nDan ħafna drabi jiġri minħabba li tkun segwejt ħolqa lejn paġna mħassra, f'kronoloġija li mhix aġġornata.\nId-detallji tista' ssibhom fir-[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} reġistru tat-tħassir].", "userpage-userdoesnotexist": "Il-kont tal-utent \"$1\" mhux reġistrat.\nJekk jogħġbok, ara jekk verament tridx toħloq/timodifika din il-paġna.", "userpage-userdoesnotexist-view": "Il-kont tal-utent \"$1\" mhuwiex reġistrat.", @@ -603,7 +608,7 @@ "copyrightwarning": "Jekk jogħġbok innota li kull kontribuzzjoni li tagħmel lil {{SITENAME}} hija konsidrata li ġiet postjata taħt l-$2 (ara $1 għal aktar informazzjoni).\nJekk inti tixtieq li l-kitba tiegħek ma tiġiex modifikata jew mqassma, jekk jogħġbok tagħmilx modifiki hawnhekk.
\nInti qiegħed ukoll qiegħed twiegħed li ktibt dan ix-xogħol int, jew ġibtu minn dominazzjoni pubblika jew resorsi b'xejn simili.
\n
\n'''TAGĦMILX MODIFIKI LI JINKLUDU XOGĦOL TA' ĦADDIEĦOR BLA PERMESS!'''", "copyrightwarning2": "Jekk jogħġbok innota li kull kontribuzzjoni li tagħmel lil {{SITENAME}} tista' tiġi modifikata, inbidla, jew imħassra minn kontributuri oħrajn.\nJekk inti tixtieq li l-kitba tiegħek ma tiġiex modifikata jew mqassma, jekk jogħġbok tagħmilx modifiki hawnhekk.
\nInti qiegħed ukoll qiegħed twiegħed li ktibt dan ix-xogħol int, jew ġibtu minn dominazzjoni pubblika jew resorsi b'xejn simili. (ara $1 għal aktar informazzjoni)
\n
\n'''TAGĦMILX MODIFIKI LI JINKLUDU XOGĦOL TA' ĦADDIEĦOR BLA PERMESS!'''", "longpageerror": "'''PROBLEMA: Il-modifika li għamilt hija twila {{PLURAL:$1|kilobyte waħda|$1 kilobytes}}, li hija iktar mill-massimu ta' {{PLURAL:$1|kilobyte waħda|$2 kilobytes}}.''' Il-modifika ma tistax tiġi salvata.", - "readonlywarning": "'''TWISSIJA: Id-databażi ġiet imblukkata għall-manutenzjoni, u għaldaqstant m'huwiex possibbli li ssalva l-modifiki tiegħek dal-ħin. Biex ma titlifhomx, għalissa salva xogħlok ġo fajl u ġaladarba terġa' tinfetaħ id-databażi, ikkopja kollox. Grazzi.'''\n\nL-amministratur li mblokkaha offra din ir-raġuni: $1", + "readonlywarning": "Attenzjoni: Il-bażi tad-dejta ġiet imblukkata għall-manutenzjoni, allura ma tistax tissejvja l-modifiki bħalissa.\nBiex ma titlifhomx tista' tikkopja u tinkolla t-test tiegħek ġo fajl testwali u tissejvjah għal aktar tard.\n\nL-amministratur li mblokkaha offra din ir-raġuni: $1", "protectedpagewarning": "'''Twissija: Din il-paġna ġiet imblukkata b'tali mod li l-utenti li għandhom il-privileġġi ta' amministratur biss jistgħu jimmodifikawha.'''
\nL-aħħar daħla fir-reġistru hija disponibbli hawn taħt għar-referenza:", "semiprotectedpagewarning": "'''Nota:''' Din il-paġna ġiet imblukkata b'tali mod li l-utenti reġistrati biss jistgħu jimmodifikawha. L-aħħar daħla fir-reġistru hija disponibbli hawn taħt bħala referenza:", "cascadeprotectedwarning": "'''Twissija:''' Din il-paġna ġiet imblukkata sabiex l-utenti li għandhom il-privileġġi ta' amministratur biss ikunu jistgħu jimmodifikawha, minħabba li hija inkluża fil-{{PLURAL:$1|paġna segwenti, li ġiet protetta|paġni segwenti li ġew protetti}}, bil-protezzjoni \"rikorsiva\" tiġi magħżula:", @@ -630,6 +635,7 @@ "edit-conflict": "Kunflitt tal-editjar.", "edit-no-change": "Il-modifika li għamilt ġiet injorata, minħabba li ebda bidla ma saret lejn it-test.", "postedit-confirmation-created": "Il-paġna ġiet maħluqa.", + "postedit-confirmation-restored": "Il-paġna ġġeddet.", "postedit-confirmation-saved": "Il-modifika tiegħek ġiet salvata.", "edit-already-exists": "Ma tistax tinħoloq din il-paġna.\nDin teżisti diġà.", "editwarning-warning": "Jekk tħalli din il-paġna jista' jwassal sabiex titlef kwalunkwe tibdil li tkun għamilt. Jekk int tinsab fil-kont tiegħek, tista' tneħħi dan l-avviż fis-sezzjoni \"Modifiki\" tal-preferenzi tiegħek.", diff --git a/languages/i18n/tt-cyrl.json b/languages/i18n/tt-cyrl.json index 879e8efe0b..1f16645c43 100644 --- a/languages/i18n/tt-cyrl.json +++ b/languages/i18n/tt-cyrl.json @@ -1167,7 +1167,7 @@ "emailsenttext": "E-mail хатыгыз җиберелде.", "watchlist": "Күзәтү исемлеге", "mywatchlist": "Күзәтү исемлеге", - "watchlistfor2": "$1 $2 өчен", + "watchlistfor2": "$1 өчен $2", "nowatchlist": "Күзәтү исемлегегездә битләр юк.", "watchnologin": "Кермәдегез", "addedwatchtext": "\"[[:$1]]\" бите [[Special:Watchlist|күзәтү исемлегегезгә]] өстәлде.\nБу биттә һәм аның бәхәслегендә барлык булачак үзгәртүләр шунда күрсәтелер, һәм, [[Special:RecentChanges|соңгы үзгәртүләр]] исемлегендә бу битне җиңелрәк табу өчен, ул '''калын мәтен''' белән күрсәтелер.", diff --git a/resources/lib/oojs-ui/oojs-ui-apex.css b/resources/lib/oojs-ui/oojs-ui-apex.css index 7db8c39458..6af125fab9 100644 --- a/resources/lib/oojs-ui/oojs-ui-apex.css +++ b/resources/lib/oojs-ui/oojs-ui-apex.css @@ -1,12 +1,12 @@ /*! - * OOjs UI v0.1.0-pre (1fa4eb7a73) + * OOjs UI v0.1.0-pre (d4cfcce969) * https://www.mediawiki.org/wiki/OOjs_UI * * Copyright 2011–2014 OOjs Team and other contributors. * Released under the MIT license * http://oojs.mit-license.org * - * Date: 2014-11-20T00:05:48Z + * Date: 2014-11-21T00:12:46Z */ .oo-ui-progressBarWidget-slide-frames from { margin-left: -40%; @@ -383,6 +383,7 @@ } .oo-ui-fieldLayout .oo-ui-fieldLayout-help-content { padding: 0.5em 0.75em; + line-height: 1.5em; } .oo-ui-fieldLayout:last-child { margin-bottom: 0; @@ -1306,15 +1307,9 @@ .oo-ui-popupButtonWidget.oo-ui-buttonElement-frameless > .oo-ui-popupWidget { left: 1em; } -.oo-ui-popupButtonWidget.oo-ui-buttonElement-frameless > .oo-ui-popupWidget > .oo-ui-popupWidget-popup { - left: -1em; -} .oo-ui-popupButtonWidget.oo-ui-buttonElement-framed > .oo-ui-popupWidget { left: 1.25em; } -.oo-ui-popupButtonWidget.oo-ui-buttonElement-framed > .oo-ui-popupWidget > .oo-ui-popupWidget-popup { - left: -1.25em; -} .oo-ui-textInputWidget { position: relative; -webkit-box-sizing: border-box; @@ -2030,7 +2025,7 @@ height: 0; overflow: hidden; } -.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-load { +.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-setup { width: auto; height: auto; top: 0; @@ -2052,12 +2047,6 @@ width: 100%; height: 100%; } -.oo-ui-windowManager-modal > .oo-ui-dialog > .oo-ui-window-frame { - visibility: hidden; -} -.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready > .oo-ui-window-frame { - visibility: visible; -} .oo-ui-windowManager-fullscreen > .oo-ui-dialog > .oo-ui-window-frame { width: 100%; height: 100%; @@ -2088,7 +2077,7 @@ -o-transition: all 250ms ease-in-out; transition: all 250ms ease-in-out; } -.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-load { +.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready { opacity: 1; } .oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready > .oo-ui-window-frame { diff --git a/resources/lib/oojs-ui/oojs-ui-apex.js b/resources/lib/oojs-ui/oojs-ui-apex.js index 53d40d5e61..3d06808db3 100644 --- a/resources/lib/oojs-ui/oojs-ui-apex.js +++ b/resources/lib/oojs-ui/oojs-ui-apex.js @@ -1,12 +1,12 @@ /*! - * OOjs UI v0.1.0-pre (1fa4eb7a73) + * OOjs UI v0.1.0-pre (d4cfcce969) * https://www.mediawiki.org/wiki/OOjs_UI * * Copyright 2011–2014 OOjs Team and other contributors. * Released under the MIT license * http://oojs.mit-license.org * - * Date: 2014-11-20T00:05:37Z + * Date: 2014-11-21T00:12:34Z */ /* Instantiation */ diff --git a/resources/lib/oojs-ui/oojs-ui-apex.svg.css b/resources/lib/oojs-ui/oojs-ui-apex.svg.css index 63acf8373d..a3a7e34e77 100644 --- a/resources/lib/oojs-ui/oojs-ui-apex.svg.css +++ b/resources/lib/oojs-ui/oojs-ui-apex.svg.css @@ -1,12 +1,12 @@ /*! - * OOjs UI v0.1.0-pre (1fa4eb7a73) + * OOjs UI v0.1.0-pre (d4cfcce969) * https://www.mediawiki.org/wiki/OOjs_UI * * Copyright 2011–2014 OOjs Team and other contributors. * Released under the MIT license * http://oojs.mit-license.org * - * Date: 2014-11-20T00:05:48Z + * Date: 2014-11-21T00:12:46Z */ .oo-ui-progressBarWidget-slide-frames from { margin-left: -40%; @@ -383,6 +383,7 @@ } .oo-ui-fieldLayout .oo-ui-fieldLayout-help-content { padding: 0.5em 0.75em; + line-height: 1.5em; } .oo-ui-fieldLayout:last-child { margin-bottom: 0; @@ -1306,15 +1307,9 @@ .oo-ui-popupButtonWidget.oo-ui-buttonElement-frameless > .oo-ui-popupWidget { left: 1em; } -.oo-ui-popupButtonWidget.oo-ui-buttonElement-frameless > .oo-ui-popupWidget > .oo-ui-popupWidget-popup { - left: -1em; -} .oo-ui-popupButtonWidget.oo-ui-buttonElement-framed > .oo-ui-popupWidget { left: 1.25em; } -.oo-ui-popupButtonWidget.oo-ui-buttonElement-framed > .oo-ui-popupWidget > .oo-ui-popupWidget-popup { - left: -1.25em; -} .oo-ui-textInputWidget { position: relative; -webkit-box-sizing: border-box; @@ -2030,7 +2025,7 @@ height: 0; overflow: hidden; } -.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-load { +.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-setup { width: auto; height: auto; top: 0; @@ -2052,12 +2047,6 @@ width: 100%; height: 100%; } -.oo-ui-windowManager-modal > .oo-ui-dialog > .oo-ui-window-frame { - visibility: hidden; -} -.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready > .oo-ui-window-frame { - visibility: visible; -} .oo-ui-windowManager-fullscreen > .oo-ui-dialog > .oo-ui-window-frame { width: 100%; height: 100%; @@ -2088,7 +2077,7 @@ -o-transition: all 250ms ease-in-out; transition: all 250ms ease-in-out; } -.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-load { +.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready { opacity: 1; } .oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready > .oo-ui-window-frame { diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki.css b/resources/lib/oojs-ui/oojs-ui-mediawiki.css index 6518cbcbbe..de3a155b70 100644 --- a/resources/lib/oojs-ui/oojs-ui-mediawiki.css +++ b/resources/lib/oojs-ui/oojs-ui-mediawiki.css @@ -1,12 +1,12 @@ /*! - * OOjs UI v0.1.0-pre (1fa4eb7a73) + * OOjs UI v0.1.0-pre (d4cfcce969) * https://www.mediawiki.org/wiki/OOjs_UI * * Copyright 2011–2014 OOjs Team and other contributors. * Released under the MIT license * http://oojs.mit-license.org * - * Date: 2014-11-20T00:05:48Z + * Date: 2014-11-21T00:12:46Z */ .oo-ui-progressBarWidget-slide-frames from { margin-left: -40%; @@ -369,6 +369,7 @@ } .oo-ui-fieldLayout .oo-ui-fieldLayout-help-content { padding: 0.5em 0.75em; + line-height: 1.5em; } .oo-ui-fieldLayout:last-child { margin-bottom: 0; @@ -1184,15 +1185,9 @@ .oo-ui-popupButtonWidget.oo-ui-buttonElement-frameless > .oo-ui-popupWidget { left: 1em; } -.oo-ui-popupButtonWidget.oo-ui-buttonElement-frameless > .oo-ui-popupWidget > .oo-ui-popupWidget-popup { - left: -1em; -} .oo-ui-popupButtonWidget.oo-ui-buttonElement-framed > .oo-ui-popupWidget { left: 1.75em; } -.oo-ui-popupButtonWidget.oo-ui-buttonElement-framed > .oo-ui-popupWidget > .oo-ui-popupWidget-popup { - left: -1.75em; -} .oo-ui-checkboxInputWidget { position: relative; line-height: 1.6em; @@ -1901,7 +1896,7 @@ height: 0; overflow: hidden; } -.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-load { +.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-setup { width: auto; height: auto; top: 0; @@ -1923,12 +1918,6 @@ width: 100%; height: 100%; } -.oo-ui-windowManager-modal > .oo-ui-dialog > .oo-ui-window-frame { - visibility: hidden; -} -.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready > .oo-ui-window-frame { - visibility: visible; -} .oo-ui-windowManager-fullscreen > .oo-ui-dialog > .oo-ui-window-frame { width: 100%; height: 100%; @@ -1959,7 +1948,7 @@ -o-transition: all 250ms ease-in-out; transition: all 250ms ease-in-out; } -.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-load { +.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready { opacity: 1; } .oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready > .oo-ui-window-frame { diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki.js b/resources/lib/oojs-ui/oojs-ui-mediawiki.js index d447a38169..00ac3512cb 100644 --- a/resources/lib/oojs-ui/oojs-ui-mediawiki.js +++ b/resources/lib/oojs-ui/oojs-ui-mediawiki.js @@ -1,12 +1,12 @@ /*! - * OOjs UI v0.1.0-pre (1fa4eb7a73) + * OOjs UI v0.1.0-pre (d4cfcce969) * https://www.mediawiki.org/wiki/OOjs_UI * * Copyright 2011–2014 OOjs Team and other contributors. * Released under the MIT license * http://oojs.mit-license.org * - * Date: 2014-11-20T00:05:37Z + * Date: 2014-11-21T00:12:34Z */ /** * @class diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki.svg.css b/resources/lib/oojs-ui/oojs-ui-mediawiki.svg.css index f67ecdba0e..2b5dfa1c47 100644 --- a/resources/lib/oojs-ui/oojs-ui-mediawiki.svg.css +++ b/resources/lib/oojs-ui/oojs-ui-mediawiki.svg.css @@ -1,12 +1,12 @@ /*! - * OOjs UI v0.1.0-pre (1fa4eb7a73) + * OOjs UI v0.1.0-pre (d4cfcce969) * https://www.mediawiki.org/wiki/OOjs_UI * * Copyright 2011–2014 OOjs Team and other contributors. * Released under the MIT license * http://oojs.mit-license.org * - * Date: 2014-11-20T00:05:48Z + * Date: 2014-11-21T00:12:46Z */ .oo-ui-progressBarWidget-slide-frames from { margin-left: -40%; @@ -369,6 +369,7 @@ } .oo-ui-fieldLayout .oo-ui-fieldLayout-help-content { padding: 0.5em 0.75em; + line-height: 1.5em; } .oo-ui-fieldLayout:last-child { margin-bottom: 0; @@ -1184,15 +1185,9 @@ .oo-ui-popupButtonWidget.oo-ui-buttonElement-frameless > .oo-ui-popupWidget { left: 1em; } -.oo-ui-popupButtonWidget.oo-ui-buttonElement-frameless > .oo-ui-popupWidget > .oo-ui-popupWidget-popup { - left: -1em; -} .oo-ui-popupButtonWidget.oo-ui-buttonElement-framed > .oo-ui-popupWidget { left: 1.75em; } -.oo-ui-popupButtonWidget.oo-ui-buttonElement-framed > .oo-ui-popupWidget > .oo-ui-popupWidget-popup { - left: -1.75em; -} .oo-ui-checkboxInputWidget { position: relative; line-height: 1.6em; @@ -1901,7 +1896,7 @@ height: 0; overflow: hidden; } -.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-load { +.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-setup { width: auto; height: auto; top: 0; @@ -1923,12 +1918,6 @@ width: 100%; height: 100%; } -.oo-ui-windowManager-modal > .oo-ui-dialog > .oo-ui-window-frame { - visibility: hidden; -} -.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready > .oo-ui-window-frame { - visibility: visible; -} .oo-ui-windowManager-fullscreen > .oo-ui-dialog > .oo-ui-window-frame { width: 100%; height: 100%; @@ -1959,7 +1948,7 @@ -o-transition: all 250ms ease-in-out; transition: all 250ms ease-in-out; } -.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-load { +.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready { opacity: 1; } .oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready > .oo-ui-window-frame { diff --git a/resources/lib/oojs-ui/oojs-ui.js b/resources/lib/oojs-ui/oojs-ui.js index d7b79ddf7e..a7d4fc2e32 100644 --- a/resources/lib/oojs-ui/oojs-ui.js +++ b/resources/lib/oojs-ui/oojs-ui.js @@ -1,12 +1,12 @@ /*! - * OOjs UI v0.1.0-pre (1fa4eb7a73) + * OOjs UI v0.1.0-pre (d4cfcce969) * https://www.mediawiki.org/wiki/OOjs_UI * * Copyright 2011–2014 OOjs Team and other contributors. * Released under the MIT license * http://oojs.mit-license.org * - * Date: 2014-11-20T00:05:37Z + * Date: 2014-11-21T00:12:34Z */ ( function ( OO ) { @@ -1463,6 +1463,7 @@ OO.ui.Widget.prototype.updateDisabled = function () { * @param {Object} [config] Configuration options * @cfg {string} [size] Symbolic name of dialog size, `small`, `medium`, `large` or `full`; omit to * use #static-size + * @fires initialize */ OO.ui.Window = function OoUiWindow( config ) { // Configuration initialization @@ -1844,7 +1845,7 @@ OO.ui.Window.prototype.getTeardownProcess = function () { * instead of display. * * @param {boolean} [show] Make window visible, omit to toggle visibility - * @fires toggle + * @fires visible * @chainable */ OO.ui.Window.prototype.toggle = function ( show ) { @@ -2105,7 +2106,7 @@ OO.ui.Window.prototype.teardown = function ( data ) { this.getTeardownProcess( data ).execute().done( function () { // Force redraw by asking the browser to measure the elements' widths - win.$element.removeClass( 'oo-ui-window-load oo-ui-window-setup' ).width(); + win.$element.removeClass( 'oo-ui-window-setup' ).width(); win.$content.removeClass( 'oo-ui-window-content-setup' ).width(); win.$element.hide(); win.visible = false; @@ -2118,9 +2119,10 @@ OO.ui.Window.prototype.teardown = function ( data ) { /** * Load the frame contents. * - * Once the iframe's stylesheets are loaded the returned promise will be resolved. Calling while - * loading will return a promise but not trigger a new loading cycle. Calling after loading is - * complete will return a promise that's already been resolved. + * Once the iframe's stylesheets are loaded, the `load` event will be emitted and the returned + * promise will be resolved. Calling while loading will return a promise but not trigger a new + * loading cycle. Calling after loading is complete will return a promise that's already been + * resolved. * * Sounds simple right? Read on... * @@ -2149,13 +2151,12 @@ OO.ui.Window.prototype.teardown = function ( data ) { * All this stylesheet injection and polling magic is in #transplantStyles. * * @return {jQuery.Promise} Promise resolved when loading is complete + * @fires load */ OO.ui.Window.prototype.load = function () { var sub, doc, loading, win = this; - this.$element.addClass( 'oo-ui-window-load' ); - // Non-isolated windows are already "loaded" if ( !this.loading && !this.isolated ) { this.loading = $.Deferred().resolve(); @@ -2879,10 +2880,13 @@ OO.ui.WindowManager.prototype.openWindow = function ( win, data ) { // Window opening if ( opening.state() !== 'rejected' ) { - if ( !win.getManager() ) { + // Begin loading the window if it's not loading or loaded already - may take noticable time + // and we want to do this in parallel with any other preparatory actions + if ( !win.isLoading() && !win.isLoaded() ) { + // Finish initializing the window (must be done after manager is attached to DOM) win.setManager( this ); + preparing.push( win.load() ); } - preparing.push( win.load() ); if ( this.closing ) { // If a window is currently closing, wait for it to complete @@ -5287,7 +5291,9 @@ OO.ui.Toolbar = function OoUiToolbar( toolFactory, toolGroupFactory, config ) { if ( config.actions ) { this.$bar.append( this.$actions.addClass( 'oo-ui-toolbar-actions' ) ); } - this.$bar.append( this.$group, '
' ); + this.$bar + .addClass( 'oo-ui-toolbar-bar' ) + .append( this.$group, '
' ); if ( config.shadow ) { this.$bar.append( '
' ); } diff --git a/resources/src/jquery/jquery.tablesorter.js b/resources/src/jquery/jquery.tablesorter.js index ea2c5f9238..e798cc971e 100644 --- a/resources/src/jquery/jquery.tablesorter.js +++ b/resources/src/jquery/jquery.tablesorter.js @@ -35,15 +35,9 @@ * to sortable tr elements in the thead on a descending sort. Default * value: "headerSortDown" * - * @option String sortInitialOrder ( optional ) A string of the inital sorting - * order can be asc or desc. Default value: "asc" - * * @option String sortMultisortKey ( optional ) A string of the multi-column sort * key. Default value: "shiftKey" * - * @option Boolean sortLocaleCompare ( optional ) Boolean flag indicating whatever - * to use String.localeCampare method or not. Set to false. - * * @option Boolean cancelSelection ( optional ) Boolean flag indicating if * tablesorter should cancel selection of the table headers text. * Default value: true @@ -53,9 +47,6 @@ * { : } * Default value: [] * - * @option Boolean debug ( optional ) Boolean flag indicating if tablesorter - * should display debuging information usefull for development. - * * @event sortEnd.tablesorter: Triggered as soon as any sorting has been applied. * * @type jQuery @@ -702,18 +693,12 @@ cssAsc: 'headerSortUp', cssDesc: 'headerSortDown', cssChildRow: 'expand-child', - sortInitialOrder: 'asc', sortMultiSortKey: 'shiftKey', - sortLocaleCompare: false, unsortableClass: 'unsortable', parsers: {}, - widgets: [], - headers: {}, cancelSelection: true, sortList: [], - headerList: [], - selectorHeaders: 'thead tr:eq(0) th', - debug: false + headerList: [] }, dateRegex: [], diff --git a/resources/src/mediawiki.less/mediawiki.ui/mixins.less b/resources/src/mediawiki.less/mediawiki.ui/mixins.less index 5d0fefbc88..1f21b41cd8 100644 --- a/resources/src/mediawiki.less/mediawiki.ui/mixins.less +++ b/resources/src/mediawiki.less/mediawiki.ui/mixins.less @@ -62,6 +62,12 @@ color: @colorButtonText; border: 1px solid @colorGray12; + &:hover, + &:active { + // make sure that is isn't inheriting from a general rule + color: @colorButtonText; + } + &:disabled { color: @colorDisabledText; diff --git a/resources/src/mediawiki.ui/components/checkbox.less b/resources/src/mediawiki.ui/components/checkbox.less index 0735a80df4..f455f1106e 100644 --- a/resources/src/mediawiki.ui/components/checkbox.less +++ b/resources/src/mediawiki.ui/components/checkbox.less @@ -39,6 +39,8 @@ line-height: @checkboxSize; * { + // reset font sizes (see bug 72727) + font: inherit; vertical-align: middle; } diff --git a/resources/src/mediawiki.ui/components/inputs.less b/resources/src/mediawiki.ui/components/inputs.less index c01dd365cd..9f3a77d9e4 100644 --- a/resources/src/mediawiki.ui/components/inputs.less +++ b/resources/src/mediawiki.ui/components/inputs.less @@ -89,7 +89,7 @@ textarea.mw-ui-input { // // Markup: // -// +// // // Styleguide 1.2. input[type="number"], diff --git a/tests/phpunit/includes/media/FormatMetadataTest.php b/tests/phpunit/includes/media/FormatMetadataTest.php index 002e2cb987..97aa0a3dce 100644 --- a/tests/phpunit/includes/media/FormatMetadataTest.php +++ b/tests/phpunit/includes/media/FormatMetadataTest.php @@ -68,4 +68,36 @@ class FormatMetadataTest extends MediaWikiMediaTestCase { // TODO: more test cases ); } + + /** + * @param mixed $input + * @param mixed $output + * @dataProvider provideResolveMultivalueValue + * @covers FormatMetadata::resolveMultivalueValue + */ + public function testResolveMultivalueValue( $input, $output ) { + $formatMetadata = new FormatMetadata(); + $class = new ReflectionClass( 'FormatMetadata' ); + $method = $class->getMethod( 'resolveMultivalueValue' ); + $method->setAccessible( true ); + $actualInput = $method->invoke( $formatMetadata, $input ); + $this->assertEquals( $output, $actualInput ); + } + + public function provideResolveMultivalueValue() { + return array( + 'nonArray' => array( 'foo', 'foo' ), + 'multiValue' => array( array( 'first', 'second', 'third', '_type' => 'ol' ), 'first' ), + 'noType' => array( array( 'first', 'second', 'third' ), 'first' ), + 'typeFirst' => array( array( '_type' => 'ol', 'first', 'second', 'third' ), 'first' ), + 'multilang' => array( + array( 'en' => 'first', 'de' => 'Erste', '_type' => 'lang' ), + array( 'en' => 'first', 'de' => 'Erste', '_type' => 'lang' ), + ), + 'multilang-multivalue' => array( + array( 'en' => array( 'first', 'second' ), 'de' => array( 'Erste', 'Zweite' ), '_type' => 'lang' ), + array( 'en' => 'first', 'de' => 'Erste', '_type' => 'lang' ), + ), + ); + } } diff --git a/tests/phpunit/includes/utils/UIDGeneratorTest.php b/tests/phpunit/includes/utils/UIDGeneratorTest.php index 50fa384933..0e11ccad59 100644 --- a/tests/phpunit/includes/utils/UIDGeneratorTest.php +++ b/tests/phpunit/includes/utils/UIDGeneratorTest.php @@ -35,14 +35,14 @@ class UIDGeneratorTest extends MediaWikiTestCase { $lastId_bin = wfBaseConvert( $lastId, 10, 2 ); $this->assertGreaterThanOrEqual( - substr( $id_bin, 0, $tbits ), substr( $lastId_bin, 0, $tbits ), + substr( $id_bin, 0, $tbits ), "New ID timestamp ($id_bin) >= prior one ($lastId_bin)." ); if ( $hostbits ) { $this->assertEquals( - substr( $id_bin, 0, -$hostbits ), - substr( $lastId_bin, 0, -$hostbits ), + substr( $id_bin, -$hostbits ), + substr( $lastId_bin, -$hostbits ), "Host ID of ($id_bin) is same as prior one ($lastId_bin)." ); }