From: jenkins-bot Date: Sun, 24 Dec 2017 23:42:56 +0000 (+0000) Subject: Merge "[MCR] Don't require $title to be passed to Revision::newFromId" X-Git-Tag: 1.31.0-rc.0~1108 X-Git-Url: http://git.cyclocoop.org/?a=commitdiff_plain;h=07d0b2368516446c60593f2c021e9c2c7c032ce3;hp=56b7ba03a286c0997752fb61b14662347ea0e9de;p=lhc%2Fweb%2Fwiklou.git Merge "[MCR] Don't require $title to be passed to Revision::newFromId" --- diff --git a/RELEASE-NOTES-1.31 b/RELEASE-NOTES-1.31 index 7f67feb8b7..e6b9fce3b0 100644 --- a/RELEASE-NOTES-1.31 +++ b/RELEASE-NOTES-1.31 @@ -153,6 +153,9 @@ changes to languages because of Phabricator reports. * WatchedItem::IGNORE_USER_RIGHTS * WatchedItem::CHECK_USER_RIGHTS * WatchedItem::DEPRECATED_USAGE_TIMESTAMP +* The $statementsOnOwnLine parameter of JavaScriptMinifier::minify was removed. + The corresponding configuration variable ($wgResourceLoaderMinifierStatementsOnOwnLine) + has been deprecated since 1.27 and was removed as well. == Compatibility == MediaWiki 1.31 requires PHP 5.5.9 or later. There is experimental support for diff --git a/autoload.php b/autoload.php index 6b8387b4f7..c37d9f71f3 100644 --- a/autoload.php +++ b/autoload.php @@ -944,6 +944,7 @@ $wgAutoloadLocalClasses = [ 'MediaWiki\\Site\\MediaWikiPageNameNormalizer' => __DIR__ . '/includes/site/MediaWikiPageNameNormalizer.php', 'MediaWiki\\Storage\\BlobAccessException' => __DIR__ . '/includes/Storage/BlobAccessException.php', 'MediaWiki\\Storage\\BlobStore' => __DIR__ . '/includes/Storage/BlobStore.php', + 'MediaWiki\\Storage\\BlobStoreFactory' => __DIR__ . '/includes/Storage/BlobStoreFactory.php', 'MediaWiki\\Storage\\IncompleteRevisionException' => __DIR__ . '/includes/Storage/IncompleteRevisionException.php', 'MediaWiki\\Storage\\MutableRevisionRecord' => __DIR__ . '/includes/Storage/MutableRevisionRecord.php', 'MediaWiki\\Storage\\MutableRevisionSlots' => __DIR__ . '/includes/Storage/MutableRevisionSlots.php', diff --git a/docs/hooks.txt b/docs/hooks.txt index 1f4a5f4da4..45387a386f 100644 --- a/docs/hooks.txt +++ b/docs/hooks.txt @@ -951,7 +951,7 @@ $id: the page ID (original ID in case of page deletions) in a Category page. Gives extensions the opportunity to batch load any related data about the pages. $type: The category type. Either 'page', 'file' or 'subcat' -$res: Query result from DatabaseBase::select() +$res: Query result from Wikimedia\Rdbms\IDatabase::select() 'CategoryViewer::generateLink': Before generating an output link allow extensions opportunity to generate a more specific or relevant link. diff --git a/includes/DefaultSettings.php b/includes/DefaultSettings.php index b707174ced..fecf322c47 100644 --- a/includes/DefaultSettings.php +++ b/includes/DefaultSettings.php @@ -316,10 +316,16 @@ $wgAppleTouchIcon = false; /** * Value for the referrer policy meta tag. - * One of 'never', 'default', 'origin', 'always'. Setting it to false just - * prevents the meta tag from being output. - * See https://www.w3.org/TR/referrer-policy/ for details. + * One of the values defined in the Referrer Policy specification: + * https://w3c.github.io/webappsec-referrer-policy/ + * ('no-referrer', 'no-referrer-when-downgrade', 'same-origin', + * 'origin', 'strict-origin', 'origin-when-cross-origin', + * 'strict-origin-when-cross-origin', or 'unsafe-url') + * Setting it to false prevents the meta tag from being output + * (which results in falling back to the Referrer-Policy header, + * or 'no-referrer-when-downgrade' if that's not set either.) * + * @var string|bool * @since 1.25 */ $wgReferrerPolicy = false; diff --git a/includes/MediaWikiServices.php b/includes/MediaWikiServices.php index 33d0fd4d3d..04c67fb297 100644 --- a/includes/MediaWikiServices.php +++ b/includes/MediaWikiServices.php @@ -12,6 +12,7 @@ use Hooks; use IBufferingStatsdDataFactory; use MediaWiki\Shell\CommandFactory; use MediaWiki\Storage\BlobStore; +use MediaWiki\Storage\BlobStoreFactory; use MediaWiki\Storage\RevisionStore; use Wikimedia\Rdbms\LBFactory; use LinkCache; @@ -700,12 +701,20 @@ class MediaWikiServices extends ServiceContainer { return $this->getService( 'ExternalStoreFactory' ); } + /** + * @since 1.31 + * @return BlobStoreFactory + */ + public function getBlobStoreFactory() { + return $this->getService( 'BlobStoreFactory' ); + } + /** * @since 1.31 * @return BlobStore */ public function getBlobStore() { - return $this->getService( 'BlobStore' ); + return $this->getService( '_SqlBlobStore' ); } /** diff --git a/includes/Revision.php b/includes/Revision.php index 0b5832497a..8f36e88fbe 100644 --- a/includes/Revision.php +++ b/includes/Revision.php @@ -65,10 +65,14 @@ class Revision implements IDBAccessObject { } /** + * @param bool|string $wikiId The ID of the target wiki database. Use false for the local wiki. + * * @return SqlBlobStore */ - protected static function getBlobStore() { - $store = MediaWikiServices::getInstance()->getBlobStore(); + protected static function getBlobStore( $wiki = false ) { + $store = MediaWikiServices::getInstance() + ->getBlobStoreFactory() + ->newSqlBlobStore( $wiki ); if ( !$store instanceof SqlBlobStore ) { throw new RuntimeException( @@ -984,7 +988,7 @@ class Revision implements IDBAccessObject { $cacheKey = isset( $row->old_id ) ? ( 'tt:' . $row->old_id ) : null; - return self::getBlobStore()->expandBlob( $text, $flags, $cacheKey ); + return self::getBlobStore( $wiki )->expandBlob( $text, $flags, $cacheKey ); } /** diff --git a/includes/ServiceWiring.php b/includes/ServiceWiring.php index 575970d23f..0d266fb710 100644 --- a/includes/ServiceWiring.php +++ b/includes/ServiceWiring.php @@ -42,6 +42,7 @@ use MediaWiki\Linker\LinkRendererFactory; use MediaWiki\Logger\LoggerFactory; use MediaWiki\MediaWikiServices; use MediaWiki\Shell\CommandFactory; +use MediaWiki\Storage\BlobStoreFactory; use MediaWiki\Storage\RevisionStore; use MediaWiki\Storage\SqlBlobStore; @@ -450,46 +451,6 @@ return [ return $factory; }, - 'RevisionStore' => function ( MediaWikiServices $services ) { - /** @var SqlBlobStore $blobStore */ - $blobStore = $services->getService( '_SqlBlobStore' ); - - $store = new RevisionStore( - $services->getDBLoadBalancer(), - $blobStore, - $services->getMainWANObjectCache() - ); - - $config = $services->getMainConfig(); - $store->setContentHandlerUseDB( $config->get( 'ContentHandlerUseDB' ) ); - - return $store; - }, - - 'BlobStore' => function ( MediaWikiServices $services ) { - return $services->getService( '_SqlBlobStore' ); - }, - - '_SqlBlobStore' => function ( MediaWikiServices $services ) { - global $wgContLang; // TODO: manage $wgContLang as a service - - $store = new SqlBlobStore( - $services->getDBLoadBalancer(), - $services->getMainWANObjectCache() - ); - - $config = $services->getMainConfig(); - $store->setCompressRevisions( $config->get( 'CompressRevisions' ) ); - $store->setCacheExpiry( $config->get( 'RevisionCacheExpiry' ) ); - $store->setUseExternalStore( $config->get( 'DefaultExternalStore' ) !== false ); - - if ( $config->get( 'LegacyEncoding' ) ) { - $store->setLegacyEncoding( $config->get( 'LegacyEncoding' ), $wgContLang ); - } - - return $store; - }, - 'ExternalStoreFactory' => function ( MediaWikiServices $services ) { $config = $services->getMainConfig(); @@ -514,28 +475,22 @@ return [ return $store; }, + 'BlobStoreFactory' => function ( MediaWikiServices $services ) { + global $wgContLang; + return new BlobStoreFactory( + $services->getDBLoadBalancer(), + $services->getMainWANObjectCache(), + $services->getMainConfig(), + $wgContLang + ); + }, + 'BlobStore' => function ( MediaWikiServices $services ) { return $services->getService( '_SqlBlobStore' ); }, '_SqlBlobStore' => function ( MediaWikiServices $services ) { - global $wgContLang; // TODO: manage $wgContLang as a service - - $store = new SqlBlobStore( - $services->getDBLoadBalancer(), - $services->getMainWANObjectCache() - ); - - $config = $services->getMainConfig(); - $store->setCompressBlobs( $config->get( 'CompressRevisions' ) ); - $store->setCacheExpiry( $config->get( 'RevisionCacheExpiry' ) ); - $store->setUseExternalStore( $config->get( 'DefaultExternalStore' ) !== false ); - - if ( $config->get( 'LegacyEncoding' ) ) { - $store->setLegacyEncoding( $config->get( 'LegacyEncoding' ), $wgContLang ); - } - - return $store; + return $services->getBlobStoreFactory()->newSqlBlobStore(); }, /////////////////////////////////////////////////////////////////////////// diff --git a/includes/Storage/BlobStoreFactory.php b/includes/Storage/BlobStoreFactory.php new file mode 100644 index 0000000000..63ca74def4 --- /dev/null +++ b/includes/Storage/BlobStoreFactory.php @@ -0,0 +1,105 @@ +loadBalancer = $loadBalancer; + $this->cache = $cache; + $this->config = $mainConfig; + $this->contLang = $contLang; + } + + /** + * @since 1.31 + * + * @param bool|string $wikiId The ID of the target wiki database. Use false for the local wiki. + * + * @return BlobStore + */ + public function newBlobStore( $wikiId = false ) { + return $this->newSqlBlobStore( $wikiId ); + } + + /** + * @internal Please call newBlobStore and use the BlobStore interface. + * + * @param bool|string $wikiId The ID of the target wiki database. Use false for the local wiki. + * + * @return SqlBlobStore + */ + public function newSqlBlobStore( $wikiId = false ) { + $store = new SqlBlobStore( + $this->loadBalancer, + $this->cache, + $wikiId + ); + + $store->setCompressBlobs( $this->config->get( 'CompressRevisions' ) ); + $store->setCacheExpiry( $this->config->get( 'RevisionCacheExpiry' ) ); + $store->setUseExternalStore( $this->config->get( 'DefaultExternalStore' ) !== false ); + + if ( $this->config->get( 'LegacyEncoding' ) ) { + $store->setLegacyEncoding( $this->config->get( 'LegacyEncoding' ), $this->contLang ); + } + + return $store; + } + +} diff --git a/includes/Storage/SqlBlobStore.php b/includes/Storage/SqlBlobStore.php index fcdc1b908c..69e1539ad1 100644 --- a/includes/Storage/SqlBlobStore.php +++ b/includes/Storage/SqlBlobStore.php @@ -382,7 +382,7 @@ class SqlBlobStore implements IDBAccessObject, BlobStore { return false; } - if ( $cacheKey ) { + if ( $cacheKey && $this->wikiId === false ) { // Make use of the wiki-local revision text cache. // The cached value should be decompressed, so handle that and return here. // NOTE: we rely on $this->cache being the right cache for $this->wikiId! diff --git a/includes/api/i18n/pt.json b/includes/api/i18n/pt.json index b24e3ae947..f0c0b40791 100644 --- a/includes/api/i18n/pt.json +++ b/includes/api/i18n/pt.json @@ -474,7 +474,7 @@ "apihelp-query+allimages-example-generator": "Mostrar informação sobre 4 ficheiros, começando pela letra T.", "apihelp-query+alllinks-summary": "Enumerar todos os ''links'' que apontam para um determinado espaço nominal.", "apihelp-query+alllinks-param-from": "O título da hiperligação a partir da qual será começada a enumeração.", - "apihelp-query+alllinks-param-to": "O título do ''link'' no qual será terminada a enumeração.", + "apihelp-query+alllinks-param-to": "O título da hiperligação na qual será terminada a enumeração.", "apihelp-query+alllinks-param-prefix": "Procurar todos os títulos ligados que começam por este valor.", "apihelp-query+alllinks-param-unique": "Mostrar só títulos ligados únicos. Não pode ser usado com $1prop=ids.\nAo ser usado como gerador, produz páginas de destino em vez de páginas de origem.", "apihelp-query+alllinks-param-prop": "As informações que devem ser incluídas:", diff --git a/includes/installer/i18n/pt.json b/includes/installer/i18n/pt.json index ea365a5a6d..15f15aa373 100644 --- a/includes/installer/i18n/pt.json +++ b/includes/installer/i18n/pt.json @@ -72,7 +72,7 @@ "config-no-db": "Não foi possível encontrar um controlador apropriado da base de dados! Precisa de instalar um controlador da base de dados para o PHP. {{PLURAL:$2|É aceite o seguinte tipo|São aceites os seguintes tipos}} de base de dados: $1.\n\nSe fez a compilação do PHP, reconfigure-o com um cliente de base de dados ativado; por exemplo, usando ./configure --with-mysqli.\nSe instalou o PHP a partir de um pacote Debian ou Ubuntu, então precisa de instalar também, por exemplo, o pacote php5-mysql.", "config-outdated-sqlite": "Aviso: Tem a versão $1 do SQLite, que é anterior à versão mínima necessária, a $2. O SQLite não estará disponível.", "config-no-fts3": "Aviso: O SQLite foi compilado sem o módulo [//sqlite.org/fts3.html FTS3]; as funcionalidades de pesquisa não estarão disponíveis nesta instalação.", - "config-pcre-old": "Erro fatal: É necessário o PCRE $1 ou versão posterior.\nO link do seu binário PHP foi feito com o PCRE $2.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE Mais informações].", + "config-pcre-old": "Erro fatal: É necessário o PCRE $1 ou versão posterior.\nO seu binário PHP foi linkado com o PCRE $2.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE Mais informações].", "config-pcre-no-utf8": "'''Erro fatal''': O módulo PCRE do PHP parece ter sido compilado sem suporte PCRE_UTF8.\nO MediaWiki necessita do suporte UTF-8 para funcionar corretamente.", "config-memory-raised": "A configuração memory_limit do PHP era $1; foi aumentada para $2.", "config-memory-bad": "Aviso: A configuração memory_limit do PHP é $1.\nIsto é provavelmente demasiado baixo.\nA instalação poderá falhar!", @@ -250,7 +250,7 @@ "config-email-watchlist": "Ativar notificação de alterações às páginas vigiadas", "config-email-watchlist-help": "Permitir que os utilizadores recebam notificações de alterações às suas páginas vigiadas, se tiverem ativado esta funcionalidade nas suas preferências.", "config-email-auth": "Ativar autenticação do correio eletrónico", - "config-email-auth-help": "Se esta opção for ativada, os utilizadores têm de confirmar o seu endereço de correio eletrónico usando um link que lhes é enviado sempre que o definirem ou alterarem.\nSó os endereços de correio eletrónico autenticados podem receber mensagens eletrónicas dos outros utilizadores ou alterar as mensagens de notificação.\nÉ '''recomendado''' que esta opção seja ativada nas wikis de acesso público para impedir o uso abusivo das funcionalidades de correio eletrónico.", + "config-email-auth-help": "Se esta opção for ativada, os utilizadores têm de confirmar o seu endereço de correio eletrónico usando uma hiperligação que lhes é enviada sempre que o definirem ou alterarem.\nSó os endereços de correio eletrónico autenticados podem receber mensagens eletrónicas dos outros utilizadores ou alterar as mensagens de notificação.\nÉ '''recomendado''' que esta opção seja ativada nas wikis de acesso público para impedir o uso abusivo das funcionalidades de correio eletrónico.", "config-email-sender": "Endereço de correio eletrónico de retorno:", "config-email-sender-help": "Introduza o endereço de correio eletrónico que será usado como endereço de retorno nas mensagens eletrónicas de saída.\nÉ para este endereço que serão enviadas as mensagens que não podem ser entregues.\nMuitos servidores de correio eletrónico exigem que pelo menos a parte do nome do domínio seja válida. \\", "config-upload-settings": "Carregamento de imagens e ficheiros", diff --git a/includes/libs/JavaScriptMinifier.php b/includes/libs/JavaScriptMinifier.php index 141a5153d4..bbba33a7ea 100644 --- a/includes/libs/JavaScriptMinifier.php +++ b/includes/libs/JavaScriptMinifier.php @@ -74,11 +74,10 @@ class JavaScriptMinifier { * or when required to guard against semicolon insertion. * * @param string $s JavaScript code to minify - * @param bool $statementsOnOwnLine Whether to put each statement on its own line * @param int $maxLineLength Maximum length of a single line, or -1 for no maximum. * @return String Minified code */ - public static function minify( $s, $statementsOnOwnLine = false, $maxLineLength = 1000 ) { + public static function minify( $s, $maxLineLength = 1000 ) { // First we declare a few tables that contain our parsing rules // $opChars : characters, which can be combined without whitespace in between them @@ -387,23 +386,6 @@ class JavaScriptMinifier { ) ); - // Rules for when newlines should be inserted if - // $statementsOnOwnLine is enabled. - // $newlineBefore is checked before switching state, - // $newlineAfter is checked after - $newlineBefore = array( - self::STATEMENT => array( - self::TYPE_BRACE_CLOSE => true, - ), - ); - $newlineAfter = array( - self::STATEMENT => array( - self::TYPE_BRACE_OPEN => true, - self::TYPE_PAREN_CLOSE => true, - self::TYPE_SEMICOLON => true, - ), - ); - // $divStates : Contains all states that can be followed by a division operator $divStates = array( self::EXPRESSION_OP => true, @@ -467,18 +449,24 @@ class JavaScriptMinifier { // We have to distinguish between regexp literals and division operators // A division operator is only possible in certain states } elseif( $ch === '/' && !isset( $divStates[$state] ) ) { - // Regexp literal, search to the end, skipping over backslash escapes and - // character classes + // Regexp literal for( ; ; ) { do{ + // Skip until we find "/" (end of regexp), "\" (backslash escapes), + // or "[" (start of character classes). $end += strcspn( $s, '/[\\', $end ) + 2; + // If backslash escape, keep searching... } while( $end - 2 < $length && $s[$end - 2] === '\\' ); $end--; + // If the end, stop here. if( $end - 1 >= $length || $s[$end - 1] === '/' ) { break; } + // (Implicit else), we must've found the start of a char class, + // skip until we find "]" (end of char class), or "\" (backslash escape) do{ $end += strcspn( $s, ']\\', $end ) + 2; + // If backslash escape, keep searching... } while( $end - 2 < $length && $s[$end - 2] === '\\' ); $end--; }; @@ -580,15 +568,6 @@ class JavaScriptMinifier { $pos = $end; $newlineFound = false; - // Output a newline after the token if required - // This is checked before AND after switching state - $newlineAdded = false; - if ( $statementsOnOwnLine && !$newlineAdded && isset( $newlineBefore[$state][$type] ) ) { - $out .= "\n"; - $lineLength = 0; - $newlineAdded = true; - } - // Now that we have output our token, transition into the new state. if( isset( $push[$state][$type] ) && count( $stack ) < self::STACK_LIMIT ) { $stack[] = $push[$state][$type]; @@ -598,12 +577,6 @@ class JavaScriptMinifier { } elseif( isset( $goto[$state][$type] ) ) { $state = $goto[$state][$type]; } - - // Check for newline insertion again - if ( $statementsOnOwnLine && !$newlineAdded && isset( $newlineAfter[$state][$type] ) ) { - $out .= "\n"; - $lineLength = 0; - } } return $out; } diff --git a/languages/i18n/ar.json b/languages/i18n/ar.json index 3ba0b96d26..3ec6f9524e 100644 --- a/languages/i18n/ar.json +++ b/languages/i18n/ar.json @@ -1474,9 +1474,9 @@ "rcfilters-preference-label": "أخف النسخة المحسنة من أحدث التغييرات", "rcfilters-preference-help": "يسترجع عملية إعادة تصميم الواجهة لعام 2017 وكل الأدوات التي أضيفت منذ ذلك الوقت.", "rcfilters-filter-showlinkedfrom-label": "عرض التغييرات في الصفحات الموصولة من", - "rcfilters-filter-showlinkedfrom-option-label": "عرض التغييرات في الصفحات الموصولة من صفحة", - "rcfilters-filter-showlinkedto-label": "أظهر التغييرات في الصفحات الموصولة بصفحة", - "rcfilters-filter-showlinkedto-option-label": "عرض التغييرات في الصفحات الموصولة إلى صفحة", + "rcfilters-filter-showlinkedfrom-option-label": "الصفحات الموصولة من الصفحة المختارة", + "rcfilters-filter-showlinkedto-label": "عرض التغييرات في الصفحات الموصولة بصفحة", + "rcfilters-filter-showlinkedto-option-label": "الصفحات الموصولة إلى الصفحة المختارة", "rcfilters-target-page-placeholder": "أدخل اسم صفحة", "rcnotefrom": "بالأسفل {{PLURAL:$5|التغيير|التغييرات}} منذ $2 (إلى $1 معروضة).", "rclistfromreset": "إعادة ضبط خيار التاريخ", @@ -3625,6 +3625,8 @@ "tag-mw-replace-description": "التعديلات التي أزالت أكثر من 90% من محتوى صفحة", "tag-mw-rollback": "استرجاع", "tag-mw-rollback-description": "التعديلات التي استرجعت التعديلات السابقة باستخدام وصلة الاسترجاع", + "tag-mw-undo": "رجوع", + "tag-mw-undo-description": "التعديلات التي ترجع عن التعديلات السابقة باستخدام وصلة رجوع", "tags-title": "وسوم", "tags-intro": "هذه الصفحة تعرض الوسوم التي ربما يعلم البرنامج تعديلا بها، ومعانيها.", "tags-tag": "اسم الوسم", diff --git a/languages/i18n/az.json b/languages/i18n/az.json index 379c774a8d..1a46a3fd1d 100644 --- a/languages/i18n/az.json +++ b/languages/i18n/az.json @@ -1016,6 +1016,8 @@ "rcfilters-activefilters": "Aktiv filtrlər", "rcfilters-advancedfilters": "Geniş filtr", "rcfilters-limit-title": "Göstərilməli dəyişikliklər", + "rcfilters-limit-and-date-label": "{{PLURAL:$1|redaktə|redaktə}}, $2", + "rcfilters-date-popup-title": "Axtarış üçün vaxt aralığı", "rcfilters-days-title": "Son günlər", "rcfilters-hours-title": "Son saatlar", "rcfilters-days-show-days": "$1 {{PLURAL:$1|gün|gün}}", diff --git a/languages/i18n/be-tarask.json b/languages/i18n/be-tarask.json index 7e36ebe9f1..94ebd45051 100644 --- a/languages/i18n/be-tarask.json +++ b/languages/i18n/be-tarask.json @@ -1041,7 +1041,7 @@ "gender-unknown": "Калі вы будзеце згадвацца, праграмнае забесьпячэньне будзе кожны раз пры магчымасьці ўжываць гендэрна нэўтральныя словы", "gender-male": "Ён рэдагуе вікістаронкі", "gender-female": "Яна рэдагуе вікістаронкі", - "prefs-help-gender": "Вызначаць гэта неабавязкова.\nАпраграмаваньне выкарыстоўвае гэтае значэньне толькі для граматычна карэктнага звароту да вас.\nГэтая інфармацыя будзе агульнадаступнай.", + "prefs-help-gender": "Вызначаць гэта неабавязкова.\nПраграмнае забесьпячэньне выкарыстоўвае гэтае значэньне толькі для граматычна карэктнага звароту да вас.\nГэтая інфармацыя будзе агульнадаступнай.", "email": "Электронная пошта", "prefs-help-realname": "Сапраўднае імя паведамляць неабавязковае.\nКалі Вы яго пазначыце, яно можа быць выкарыстанае для пазначэньня Вашай працы.", "prefs-help-email": "Адрас электроннай пошты неабавязковы, але ён дае магчымасьць даслаць Вам пароль, калі Вы забылі яго.", @@ -3309,6 +3309,8 @@ "autosumm-blank": "Выдалены ўвесь зьмест старонкі", "autosumm-replace": "Старонка замененая на '$1'", "autoredircomment": "Перанакіроўвае на [[$1]]", + "autosumm-removed-redirect": "Выдаленае перанакіраваньне на [[$1]]", + "autosumm-changed-redirect-target": "Перанакіраваньне зьмененае з [[$1]] на [[$2]]", "autosumm-new": "Створана старонка са зьместам '$1'", "autosumm-newblank": "Створаная пустая старонка", "size-bytes": "$1 б", diff --git a/languages/i18n/bg.json b/languages/i18n/bg.json index 86fef15259..db39ac0991 100644 --- a/languages/i18n/bg.json +++ b/languages/i18n/bg.json @@ -2188,8 +2188,8 @@ "contributions-userdoesnotexist": "Няма регистрирана потребителска сметка за „$1“.", "nocontribs": "Не са намерени промени, отговарящи на критерия.", "uctop": "(текуща)", - "month": "Месец:", - "year": "Година:", + "month": "От месец (и по-рано):", + "year": "От година (и по-рано):", "sp-contributions-newbies": "Показване само на приносите на нови потребители", "sp-contributions-newbies-sub": "на нови потребители", "sp-contributions-newbies-title": "Потребителски приноси за нови сметки", @@ -2211,7 +2211,7 @@ "whatlinkshere-title": "Страници, които сочат към „$1“", "whatlinkshere-page": "Страница:", "linkshere": "Следните страници сочат към [[:$1]]:", - "nolinkshere": "Няма страници, сочещи към '''[[:$1]]'''.", + "nolinkshere": "Няма страници, сочещи към [[:$1]].", "nolinkshere-ns": "Няма страници, сочещи към [[:$1]] в избраното именно пространство.", "isredirect": "пренасочваща страница", "istemplate": "включване", @@ -2524,7 +2524,7 @@ "tooltip-ca-undelete": "Възстановяване на изтрити редакции на страницата", "tooltip-ca-move": "Преместване на страницата", "tooltip-ca-watch": "Добавяне на страницата към списъка Ви за наблюдение", - "tooltip-ca-unwatch": "Премахване на страницата от списъка ви за наблюдение", + "tooltip-ca-unwatch": "Премахване на страницата от списъка Ви за наблюдение", "tooltip-search": "Претърсване на {{SITENAME}}", "tooltip-search-go": "Отиване на страницата, ако тя съществува с точно това име", "tooltip-search-fulltext": "Търсене в страниците за този текст", @@ -3185,7 +3185,7 @@ "redirect-submit": "Отваряне", "redirect-lookup": "Параметър:", "redirect-value": "Стойност:", - "redirect-user": "Потребителски номер", + "redirect-user": "Потребителски идентификатор", "redirect-page": "Номер на страницата", "redirect-revision": "Версия на страницата", "redirect-file": "Име на файл", @@ -3223,6 +3223,7 @@ "tag-filter-submit": "Филтриране", "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Етикет|Етикети}}]]: $2)", "tag-mw-contentmodelchange": "промяна на модела на съдържание", + "tag-mw-undo": "Отмяна", "tags-title": "Етикети", "tags-intro": "Тук са изброени всички етикети, които могат да се ползват за отбелязване на редакциите, както и тяхното значение.", "tags-tag": "Име на етикета", diff --git a/languages/i18n/bn.json b/languages/i18n/bn.json index 21f66a7b65..140d4fa8f9 100644 --- a/languages/i18n/bn.json +++ b/languages/i18n/bn.json @@ -725,7 +725,7 @@ "contentmodelediterror": "আপনি এই পুনর্বিবেচনা সম্পাদনা করতে পারবেন না কারণ এর বিষয়বস্তু মডেল $1, যা বর্তমান বিষয়বস্তু মডেল $2-এর থেকে ভিন্ন।", "recreate-moveddeleted-warn": "'''সতর্কীকরণ: আপনি এমন একটি পাতা পুনরায় তৈরি করছেন যা পূর্বে অপসারণ করা হয়েছিল।'''\n\nআপনি পাতাটি সম্পাদনা চালিয়ে যাওয়া ঠিক হবে কিনা, তা বিবেচনা করুন।\nআপনার সুবিধার্থে পাতাটির অপলুপ্তি লগ এখানে দেয়া হলো:", "moveddeleted-notice": "এই পাতাটি অপসারণ করা হয়েছে।\nসূত্র হিসেবে নিচে এই পাতার অপসারণ, সুরক্ষা ও স্থানান্তর লগ দেওয়া হলো।", - "moveddeleted-notice-recent": "দুঃখিত, এই পাতাটি সাম্প্রতি অপসারিত হয়েছে (সর্বশেষ ২৪ ঘণ্টায়)।\nসূত্র হিসেবে নিচে এই পাতা অপসারণ, সুরক্ষা ও স্থানান্তর লগ দেয়া হয়েছে।", + "moveddeleted-notice-recent": "দুঃখিত, এই পাতাটি সম্প্রতি অপসারিত হয়েছে (সর্বশেষ ২৪ ঘণ্টায়)।\nসূত্র হিসেবে নিচে এই পাতার অপসারণ, সুরক্ষা ও স্থানান্তর লগ দেয়া হয়েছে।", "log-fulllog": "সম্পূর্ণ লগ দেখুন", "edit-hook-aborted": "হূক দ্বারা সম্পাদনা পরিত্যক্ত হয়েছে।\nএর কোন ব্যাখ্যা নাই।", "edit-gone-missing": "পাতাটি হালনাগাদ হয়নি।\nসম্ভবতঃ পাতাটি মুছে ফেলা হয়েছে।", diff --git a/languages/i18n/ca.json b/languages/i18n/ca.json index 8e9cc415db..b71d72ba84 100644 --- a/languages/i18n/ca.json +++ b/languages/i18n/ca.json @@ -3435,6 +3435,7 @@ "fileduplicatesearch-noresults": "No s'ha trobat cap fitxer anomenat «$1».", "specialpages": "Pàgines especials", "specialpages-note-top": "Llegenda", + "specialpages-note-restricted": "* Pàgines especials normals.\n* Pàgines especials restringides.", "specialpages-group-maintenance": "Informes de manteniment", "specialpages-group-other": "Altres pàgines especials", "specialpages-group-login": "Iniciar sessió / Crear un compte", diff --git a/languages/i18n/da.json b/languages/i18n/da.json index 37f7e837e0..cce61a4ff9 100644 --- a/languages/i18n/da.json +++ b/languages/i18n/da.json @@ -3328,6 +3328,7 @@ "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Tag|Tags}}]]: $2)", "tag-mw-new-redirect": "Ny omdirigering", "tag-mw-removed-redirect": "Fjernede omdirigering", + "tag-mw-changed-redirect-target": "Omdigeringsmål ændret", "tag-mw-blank": "Sidetømning", "tag-mw-replace": "Erstattet", "tag-mw-rollback": "Tilbagerulning", diff --git a/languages/i18n/eu.json b/languages/i18n/eu.json index 569d2c019c..24ae9003ea 100644 --- a/languages/i18n/eu.json +++ b/languages/i18n/eu.json @@ -3449,6 +3449,7 @@ "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Etiketa|Etiketak}}]]: $2)", "tag-mw-contentmodelchange": "Eduki eredu aldaketa", "tag-mw-contentmodelchange-description": "Orri baten [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel change the content model] aldaketak", + "tag-mw-new-redirect": "Birbideratze berria", "tag-mw-blank-description": "Orria zuriz jartzen duten aldaketak", "tag-mw-replace": "Ordezkatuta", "tag-mw-replace-description": "Orrialde baten edukiaren %90a baino gehiagok ezabatzen duten aldaketak", diff --git a/languages/i18n/hi.json b/languages/i18n/hi.json index a05746eb94..981706c3ae 100644 --- a/languages/i18n/hi.json +++ b/languages/i18n/hi.json @@ -86,7 +86,8 @@ "Sachinkatiyar", "Rishi.Singh", "Clockery", - "Rajatkatiyar10" + "Rajatkatiyar10", + "Dcljr" ] }, "tog-underline": "लिंक रेखांकित करें:", @@ -104,7 +105,7 @@ "tog-watchdefault": "मेरे द्वारा सम्पादित पृष्ठों और फ़ाइलों को मेरी ध्यानसूची में जोड़ें", "tog-watchmoves": "मेरे द्वारा स्थानांतरित पृष्ठों एवं फ़ाइलों को मेरी ध्यानसूची में जोड़ें", "tog-watchdeletion": "मेरे द्वारा हटाए गए पृष्ठों एवं फ़ाइलों को मेरी ध्यानसूची में जोड़ें", - "tog-watchuploads": "मेरे नए फ़ाइलों को मेरे ध्यानसूची में डालें।", + "tog-watchuploads": "मेरी ध्यानसूची में मेरी अपलोड करने वाली नई फ़ाइलें डालें|", "tog-watchrollback": "मेरे द्वारा प्रत्यापन्न (रोलबैक) किये हुये पृष्ठों को मेरी ध्यानसूची में जोड़ें।", "tog-minordefault": "मेरे सभी सम्पादनों को छोटे बदलाव के रूप में चिह्नित करें", "tog-previewontop": "सम्पादन सन्दूक से पहले झलक दिखायें", @@ -264,7 +265,7 @@ "viewdeleted_short": "देखें {{PLURAL:$1|एक हटाया गया सम्पादन|$1 हटाए गए सम्पादन}}", "protect": "सुरक्षित करें", "protect_change": "बदलें", - "unprotect": "असुरक्षित", + "unprotect": "सुरक्षा बदलें", "newpage": "नया पृष्ठ", "talkpagelinktext": "चर्चा", "specialpage": "विशेष पृष्ठ", @@ -297,9 +298,9 @@ "pool-queuefull": "पूल पंक्ति भरी हुई है", "pool-errorunknown": "अज्ञात त्रुटि", "pool-servererror": "पूल काउंटर सेवा उपलब्ध नहीं है ($1)।", - "poolcounter-usage-error": "उपयोग त्रुटि: $1", + "poolcounter-usage-error": "प्रयोग त्रुटि: $1", "aboutsite": "{{SITENAME}} के बारे में", - "aboutpage": "Project:परिचय", + "aboutpage": "Project:के बारे में", "copyright": "उपलब्ध सामग्री $1 के अधीन है जब तक अलग से उल्लेख ना किया गया हो।", "copyrightpage": "{{ns:project}}:कॉपीराइट", "currentevents": "हाल की घटनाएँ", @@ -2230,7 +2231,7 @@ "enotif_subject_moved": "{{SITENAME}} पृष्ठ $1 को {{GENDER:$2|चले गए}} $2 द्वारा चले जा चुका है", "enotif_subject_restored": "{{SITENAME}} पृष्ठ $1 को {{GENDER:$2|$2}} ने पुनर्स्थापित कर दिया है", "enotif_subject_changed": "{{SITENAME}} पृष्ठ $1 को {{GENDER:$2|$2}} ने परिवर्तित किया है", - "enotif_body_intro_deleted": "{{SITENAME}} पृष्ठ $1 को {{GENDER:$2|$2}} ने $PAGEEDITDATE को हटा दिया है, देखें $3।", + "enotif_body_intro_deleted": "{{SITENAME}} पृष्ठ $1 को {{GENDER:$2|$2}} ने $PAGEEDITDATE को हटा दिया है, देखें <$3>।", "enotif_body_intro_created": "{{SITENAME}} पृष्ठ $1 को {{GENDER:$2|$2}} ने $PAGEEDITDATE को बनाया है, वर्तमान अवतरण के लिए $3 देखें।", "enotif_body_intro_moved": "{{SITENAME}} पृष्ठ $1 को {{GENDER:$2|$2}} ने $PAGEEDITDATE को स्थानांतरित किया है, वर्तमान अवतरण के लिए $3 देखें।", "enotif_body_intro_restored": "{{SITENAME}} पृष्ठ $1 को {{GENDER:$2|$2}} ने $PAGEEDITDATE को पुनर्स्थापित किया है, वर्तमान अवतरण के लिए $3 देखें।", diff --git a/languages/i18n/hr.json b/languages/i18n/hr.json index d739d97759..caab337fe0 100644 --- a/languages/i18n/hr.json +++ b/languages/i18n/hr.json @@ -2015,7 +2015,7 @@ "confirmdeletetext": "Zauvijek ćete izbrisati stranicu ili sliku zajedno s prijašnjim inačicama.\nMolim potvrdite svoju namjeru, da razumijete posljedice i da ovo radite u skladu s [[{{MediaWiki:Policy-url}}|pravilima]].", "actioncomplete": "Radnja je dovršena", "actionfailed": "Radnja nije uspjela", - "deletedtext": "\"$1\" je izbrisana.\nVidi $2 za evidenciju nedavnih brisanja.", + "deletedtext": "Stranica »$1« je izbrisana.\nVidi pod $2 za zapise nedavnih brisanja.", "dellogpage": "Evidencija brisanja", "dellogpagetext": "Dolje je popis nedavnih brisanja.\nSva vremena su prema poslužiteljevom vremenu.", "deletionlog": "evidencija brisanja", diff --git a/languages/i18n/is.json b/languages/i18n/is.json index cc616d4aab..f7ec58155d 100644 --- a/languages/i18n/is.json +++ b/languages/i18n/is.json @@ -3445,6 +3445,7 @@ "htmlform-user-not-exists": "$1 er ekki til.", "htmlform-user-not-valid": "$1 er ekki gilt notandanafn.", "logentry-delete-delete": "$1 {{GENDER:$2|eyddi}} síðunni $3", + "logentry-delete-delete_redir": "$1 {{GENDER:$2|eyddi}} tilvísun $3 með því að yfirskrifa", "logentry-delete-restore": "$1 {{GENDER:$2|endurvakti}} síðu $3 ($4)", "logentry-delete-event": "$1 {{GENDER:$2|breytti}} sýnileika {{PLURAL:$5|færslu|$5 færslna}} á $3: $4", "logentry-delete-revision": "$1 {{GENDER:$2|breytti}} sýnileika {{PLURAL:$5|útgáfu|$5 útgáfna}} á $3: $4", diff --git a/languages/i18n/it.json b/languages/i18n/it.json index f6fd689ab7..90f4e60157 100644 --- a/languages/i18n/it.json +++ b/languages/i18n/it.json @@ -3535,6 +3535,8 @@ "tag-mw-replace-description": "Modifiche che rimuovono oltre il 90% del contenuto di una pagina", "tag-mw-rollback": "Rollback", "tag-mw-rollback-description": "Modifiche che ripristinano le versioni precedenti utilizzando il collegamento di rollback", + "tag-mw-undo": "Annulla", + "tag-mw-undo-description": "Modifiche che annullano le modifiche precedenti utilizzando il collegamento \"Annulla\"", "tags-title": "Etichette", "tags-intro": "Questa pagina elenca le etichette che il software potrebbe associare a una modifica e il loro significato.", "tags-tag": "Nome dell'etichetta", diff --git a/languages/i18n/kk-cyrl.json b/languages/i18n/kk-cyrl.json index 7c4b4f4f79..d83a5ea782 100644 --- a/languages/i18n/kk-cyrl.json +++ b/languages/i18n/kk-cyrl.json @@ -3203,7 +3203,7 @@ "logentry-newusers-byemail": "$1 $3 деген аккаунт {{GENDER:$2|тіркеді}} және құпия сөзі е-пошта арқылы жіберілді", "logentry-newusers-autocreate": "$1 қатысушы аккаунтын автоматты түрде {{GENDER:$2|тіркеді}}", "logentry-protect-move_prot": "$1 protection settings from $4 дегеннен $3 дегенге қорғалу баптауларын {{GENDER:$2|жылжытты}}", - "logentry-protect-unprotect": "$1 $3 бетінің қорғанысын {{GENDER:$2|алыпсады}}", + "logentry-protect-unprotect": "$1 $3 бетінің қорғанысын {{GENDER:$2|алып тастады}}", "logentry-protect-protect": "$1 $3 бетін {{GENDER:$2|қорғады}} $4", "logentry-protect-modify-cascade": "$1 $3 бетінің қорғалу деңгейін $4 мерзіміне {{GENDER:$2|өзгертті}} [баулы]", "logentry-rights-rights": "$1 $3 үшін топ мүшелігін $4 дегеннен $5 дегенге {{GENDER:$2|өзгертті}}", diff --git a/languages/i18n/ko.json b/languages/i18n/ko.json index 99dfa4ea2a..daf56a69bd 100644 --- a/languages/i18n/ko.json +++ b/languages/i18n/ko.json @@ -3517,6 +3517,8 @@ "tag-mw-replace-description": "문서 내용 중 90% 보다 많은 내용을 제거한 편집", "tag-mw-rollback": "되돌리기", "tag-mw-rollback-description": "되돌리기 링크를 사용하여 이전 편집을 되돌리는 편집", + "tag-mw-undo": "편집 취소", + "tag-mw-undo-description": "편집 취소 링크를 사용하여 이전 편집을 취소하는 편집", "tags-title": "태그", "tags-intro": "이 문서는 소프트웨어에서 편집에 대해 표시하는 태그와 그 의미를 설명하는 목록입니다.", "tags-tag": "태그 이름", diff --git a/languages/i18n/mk.json b/languages/i18n/mk.json index d835015c3d..675a8a4aed 100644 --- a/languages/i18n/mk.json +++ b/languages/i18n/mk.json @@ -1432,9 +1432,9 @@ "rcfilters-preference-label": "Скриј ја подобрената верзија во Скорешните промени", "rcfilters-preference-help": "Го отповикува преуредувањето на околината од 2017 г. и сите алатки додадени оттогаш.", "rcfilters-filter-showlinkedfrom-label": "Прикажи промени во страници кои водат од", - "rcfilters-filter-showlinkedfrom-option-label": "Прикажи промени во страници кои водат ОД страница", + "rcfilters-filter-showlinkedfrom-option-label": "Страници кон кои води избраната страница", "rcfilters-filter-showlinkedto-label": "Прикажи промени во страници кои водат кон", - "rcfilters-filter-showlinkedto-option-label": "Прикажи промени во страници кои водат КОН страница", + "rcfilters-filter-showlinkedto-option-label": "Страници кои води кон избраната страница", "rcfilters-target-page-placeholder": "Внесете страница", "rcnotefrom": "Подолу {{PLURAL:$5|е прикажана промената|се прикажани промените}} почнувајќи од $3, $4 (се прикажуваат до $1).", "rclistfromreset": "Нов избор на датуми", @@ -3616,6 +3616,8 @@ "tag-mw-replace-description": "Уредувања што отстрануваат преку 90% од содржината на една страница", "tag-mw-rollback": "Отповикување", "tag-mw-rollback-description": "Уредувања што отповикуваат претходни уредувања користејќи ја соодветната врска", + "tag-mw-undo": "Отповикај", + "tag-mw-undo-description": "Уредувања што ги отповикуваат претходните уредувања користејќи ја врската за таа намена", "tags-title": "Ознаки", "tags-intro": "На оваа страница е даден список на ознаки со кои програмската опрема може да ги означи измените и нивното значење.", "tags-tag": "Име на ознака", diff --git a/languages/i18n/nb.json b/languages/i18n/nb.json index aa9636f31b..895a91acf5 100644 --- a/languages/i18n/nb.json +++ b/languages/i18n/nb.json @@ -1456,9 +1456,9 @@ "rcfilters-preference-label": "Skjul den forbedrede versjonen av siste endringer", "rcfilters-preference-help": "Fjerner grensesnittendringen fra 2017 og alle verktøyene som ble lagt fra og med da.", "rcfilters-filter-showlinkedfrom-label": "Vis endringer på sider som lenkes fra", - "rcfilters-filter-showlinkedfrom-option-label": "Vis endringer på sider som lenkes FRA en side", + "rcfilters-filter-showlinkedfrom-option-label": "Sider som lenkes fra den valgte siden", "rcfilters-filter-showlinkedto-label": "Vis endringer på sider som lenker til", - "rcfilters-filter-showlinkedto-option-label": "Vis endringer på sider som lenker TIL en side", + "rcfilters-filter-showlinkedto-option-label": "Sider som lenker til den valgte siden", "rcfilters-target-page-placeholder": "Skriv inn et sidenavn", "rcnotefrom": "Nedenfor er vist {{PLURAL:$5|endringen|endringene}} som er gjort siden $3, $4 (frem til $1).", "rclistfromreset": "Nullstill datovalg", @@ -3534,6 +3534,8 @@ "tag-mw-replace-description": "Redigeringer som fjerner mer enn 90 % av innholdet på en side", "tag-mw-rollback": "Tilbakestilling", "tag-mw-rollback-description": "Redigeringer som tilbakestiller redigeringer med tilbakestillingsknappen", + "tag-mw-undo": "Endringsomgjøring", + "tag-mw-undo-description": "Redigeringer som fjerner tidligere redigeringer med lenka «{{int:editundo}}»", "tags-title": "Tagger", "tags-intro": "Denne siden lister opp taggene programvaren kan merke en endring med, og hva de betyr.", "tags-tag": "Taggnavn", diff --git a/languages/i18n/nl.json b/languages/i18n/nl.json index b8d8b37f8f..75d2fefa97 100644 --- a/languages/i18n/nl.json +++ b/languages/i18n/nl.json @@ -1493,9 +1493,9 @@ "rcfilters-preference-label": "Verberg de verbeterde versie van recente wijzigingen", "rcfilters-preference-help": "Zet het oude uiterlijk van de recente wijzigingen-pagina terug, inclusief alle hulpmiddelen die sindsdien zijn toegevoegd.", "rcfilters-filter-showlinkedfrom-label": "Toon wijzigingen op pagina's gekoppeld aan", - "rcfilters-filter-showlinkedfrom-option-label": "Toon wijzigingen op paginas gekoppeld AAN een pagina", + "rcfilters-filter-showlinkedfrom-option-label": "Paginas gekoppeld aan de geselecteerde pagina", "rcfilters-filter-showlinkedto-label": "Toon wijzigingen op pagina's gekoppeld naar", - "rcfilters-filter-showlinkedto-option-label": "Toon wijzigingen op pagina's gekoppeld NAAR een pagina", + "rcfilters-filter-showlinkedto-option-label": "Pagina's gekoppeld naar de geselecteerde pagina", "rcfilters-target-page-placeholder": "Voer een paginanaam in", "rcnotefrom": "Wijzigingen sinds $3 om $4 (maximaal $1 {{PLURAL:$1|wijziging|wijzigingen}}).", "rclistfromreset": "Datum selectie opnieuw instellen", @@ -3548,6 +3548,8 @@ "tag-mw-replace-description": "Bewerkingen die meer dan 90% van de pagina verwijderen", "tag-mw-rollback": "Terugdraaiing", "tag-mw-rollback-description": "Bewerkingen die eerdere bewerkingen terugdraaien door middel van de koppeling \"terugdraaien\"", + "tag-mw-undo": "Ongedaan maken", + "tag-mw-undo-description": "Bewerkingen die vorige bewerkingen door middel van de ongedaan maken koppeling ongedaan maken", "tags-title": "Labels", "tags-intro": "Op deze pagina staan de labels waarmee de software iedere bewerking kan markeren, en hun betekenis.", "tags-tag": "Labelnaam", diff --git a/languages/i18n/ps.json b/languages/i18n/ps.json index 079b425b6b..582e700f33 100644 --- a/languages/i18n/ps.json +++ b/languages/i18n/ps.json @@ -1684,6 +1684,7 @@ "apisandbox-request-time": "د غوښتنې وخت: {{PLURAL:$1|$1 م.ث}}", "apisandbox-continue": "پرله پورې", "apisandbox-continue-clear": "سپينول", + "apisandbox-multivalue-all-values": "د $1 (ټول ارزښتونه)", "booksources": "د کتاب سرچينې", "booksources-search-legend": "د کتابي سرچينو پلټنه", "booksources-isbn": "ISBN:", @@ -1758,6 +1759,7 @@ "listgrouprights-namespaceprotection-namespace": "نوم-تشيال", "listgrouprights-namespaceprotection-restrictedto": "د کارن سمون ترسره کولو رښته(رښتې)", "listgrants": "منلې", + "listgrants-grant": "منلې", "listgrants-rights": "رښتې", "trackingcategories": "موندونکې وېشنيزې", "trackingcategories-summary": "په دې مخ کې هغه موندونکې وېشنيزې چې په اتوماتيک ډول د مېډياويکي ساوترې لخوا ډکېږي، د لړليک په توگه راغلي. د وېشنيزو نومونه د اړونده غونډال پيغامونو په بدلون سره چې د {{ns:8}} په نومتشيال کې دي، د بدلېدلو وړتيا لري.", @@ -1873,6 +1875,7 @@ "rollbacklinkcount": "$1 {{PLURAL:$1|سمون|سمونونه}} پرشابېول", "editcomment": "د سمون لنډيز دا وو: \"''$1''\".", "changecontentmodel-title-label": "مخ سرليک", + "changecontentmodel-model-label": "د نوي مېنځپانگې موډل", "changecontentmodel-reason-label": "سبب:", "changecontentmodel-submit": "بدلول", "logentry-contentmodel-change-revertlink": "په څټ گرځول", @@ -1998,6 +2001,7 @@ "whatlinkshere-hideimages": "د دوتنې تړنې $1", "whatlinkshere-filters": "چاڼگرونه", "whatlinkshere-submit": "ورځه", + "autoblockid": "خپلواک بنديز #$1", "block": "په کارن بنديز لگول", "unblock": "کارن له بنديزه وېستل", "blockip": "په {{GENDER:$1|کارن}} بنديز لگول", @@ -2016,10 +2020,12 @@ "ipbhidename": "کارن-نوم له سمون او لړليکونو پټول", "ipbwatchuser": "د دې کارن د خبرو اترو مخ او کارن مخ کتل", "ipb-disableusertalk": "د بنديز لگېدو سره دې د کارن د خبرو اترو مخ د سمولو مخنيوی هم پلي شي", + "ipb-change-block": "د کارن څخه بنديز لرې کول ددغو امستنې له لارې", "ipb-confirm": "د بنديز تاييد", "badipaddress": "ناسمه IP پته", "blockipsuccesssub": "بنديز په برياليتوب سره ولگېده", "blockipsuccesstext": "په [[Special:Contributions/$1|$1]] بنديز لگېدلی.
\nد بنديزونو د څارلو لپاره [[Special:BlockList|بنديز لړليک]] وگورۍ.", + "ipb-blockingself": "تاسو پر خپل ځان د بنديز لګولو په حال کې یاست! ایا تاسو ډاډه یاست چې تاسو دا کار کول غواړئ؟", "ipb-edit-dropdown": "د بنديز سببونه سمول", "ipb-unblock-addr": "له $1 بنديز ليرې کول", "ipb-unblock": "له يوه کارن-نوم يا IP پتې بنديز ليري کول", @@ -2033,16 +2039,24 @@ "unblocked-range": "له $1 بنديز ليرې شو", "unblocked-ip": "له [[Special:Contributions/$1|$1]] څخه بنديز ليرې شو.", "blocklist": "بنديز لگېدلي کارنان", + "autoblocklist": "خپلواک بنديزونه", "autoblocklist-submit": "پلټل", + "autoblocklist-legend": "د خپلواک بنديزونو لړليک", + "autoblocklist-localblocks": "ځایي {{PLURAL:$1|خپلواک بنديز|خپلواک بنديزونه}}", + "autoblocklist-total-autoblocks": "د خپلواک بنديز ټول لړليک: $1", + "autoblocklist-empty": "د بنديز لړليک تش دی", + "autoblocklist-otherblocks": "نور {{PLURAL:$1|خپلواک بنديز|خپلواک بنديزونه}}", "ipblocklist": "بنديز لگېدلي کارنان", "ipblocklist-legend": "يو بنديز شوی کارن موندل", "blocklist-userblocks": "گڼون بنديزونه پټول", "blocklist-tempblocks": "لنډمهاله بنديزونه پټول", "blocklist-addressblocks": "يواځې آی پي بنديزونه پټول", + "blocklist-rangeblocks": "پټ اندازه بنديزونه", "blocklist-timestamp": "وخت ټاپه", "blocklist-target": "موخه", "blocklist-expiry": "پای نېټه", "blocklist-by": "بنديز لگونکی پازوال", + "blocklist-params": "بنديز پاراميټرونه", "blocklist-reason": "سبب", "ipblocklist-submit": "پلټل", "ipblocklist-localblock": "سيمه ايز بنديز", @@ -2050,10 +2064,12 @@ "infiniteblock": "نامحدوده", "expiringblock": "په $1 نېټه، $2 بجو پای ته رسېږي", "anononlyblock": "يواځې ورکنومی", + "noautoblockblock": "خپلواک بنديز ترسره نشو", "createaccountblock": "په گڼون جوړولو بنديز لگېدلی", "emailblock": "پر برېښليک بنديز ولگېد", "blocklist-nousertalk": "د خبرواترو خپل مخ نه شی سمولای", "ipblocklist-empty": "د بنديز لړليک تش دی", + "ipblocklist-no-results": "پر غوښتل شوي آي پي پتې باندې بنديز نه دي لګول شوي.", "blocklink": "بنديز لگول", "unblocklink": "بنديز لرې کول", "change-blocklink": "د بنديز بدلون", @@ -2068,9 +2084,12 @@ "unblocklogentry": "بنديز ليرې شو $1", "block-log-flags-anononly": "يواځې ورکنومي کارنان", "block-log-flags-nocreate": "د گڼون جوړول ناچارن شوی", + "block-log-flags-noautoblock": "خپلواک بنديز ترسره نشو", "block-log-flags-noemail": "ددې برېښليک مخه نيول شوی", "block-log-flags-nousertalk": "خپل د خبرو اترو مخ نه شي سمولای", "block-log-flags-hiddenname": "پټ کارن-نوم", + "ipb_expiry_invalid": "د پاي ته رسيدو وخت غلط دی.", + "ipb_expiry_old": "د پای ته رسېدو وخت په تېرمهال کې دی.", "ipb_already_blocked": "پر \"$1\" د پخوا نه بنديز دی", "ipb-needreblock": "پر $1 د پخوا نه بنديز لگېدلی.\nآيا تاسې د امستنو بدلول غواړۍ؟", "ipb-otherblocks-header": "{{PLURAL:$1|بل بنديز|نور بنديزونه}}", @@ -2160,6 +2179,8 @@ "imported-log-entries": "$1 {{PLURAL:$1|يادښتليک راوړل شوی|يادښتليکونه راوړل شوي}}.", "importcantopen": "واردونکې دوتنه و نه پرانيستل شوه.", "importbadinterwiki": "ناسمه ويکيخپلمنځي تړنه", + "importsuccess": "راليږل بشپړ شوه!", + "import-noarticle": "د رالېږدولو لپاره مخونه نشته.", "import-upload": "د XML اومتوک پورته کول", "import-token-mismatch": "د اومتوک غونډېدنه له لاسه وتلې.\n\nتاسو شاید په نښه شوي وي. لطفا ډاډ ترلاسه کړئ چې ته ننوځئ او بیا بیا هڅه وکړه.\nکه تاسو د سیسټم څخه یو ځل بیا پیغام ترلاسه کړئ چي [[Special:UserLogout|ووځي]]، بيا ننوځي، و از این‌ که او ډاډه کړئ چې ستاسو براؤزر اجازه لري چې د دې سایټ څخه کوکیز ترلاسه کړي.", "importlogpage": "د واردولو يادښت", @@ -2445,10 +2466,17 @@ "exif-objectname": "لنډ سرليک", "exif-headline": "سرليک", "exif-source": "سرچينه", + "exif-urgency": "بیړنی حالت", + "exif-fixtureidentifier": "د ثابتولو نوم", + "exif-locationdest": "ځای ښودل شوی", + "exif-locationdestcode": "د موقعیت کوډ ښودل شوی", + "exif-objectcycle": "د ورځې وخت چې رسنۍ اراده لري", "exif-contact": "د اړيکو مالومات", "exif-writer": "ليکوال", "exif-languagecode": "ژبه", + "exif-iimversion": "د IIM بڼه", "exif-iimcategory": "وېشنيزه", + "exif-iimsupplementalcategory": "ضمیمه وېشنيزه", "exif-datetimeexpires": "مه يې کاروۍ وروسته له", "exif-datetimereleased": "خپرېدلی په", "exif-identifier": "پېژندنه", @@ -2456,18 +2484,29 @@ "exif-serialnumber": "د کامرې پرله پسې شمېره", "exif-cameraownername": "د کامرې خاوند", "exif-label": "نښکه", + "exif-rating": "درجه (له ۵ څخه بهر)", "exif-copyrighted": "د رښتو دريځ", "exif-copyrightowner": "د رښتو خاوند", "exif-usageterms": "د کارولو شرايط", "exif-pngfilecomment": "د PNG دوتنې تبصره", "exif-disclaimer": "ردادعاليک", + "exif-contentwarning": "د منځپانګي خبرداری", "exif-giffilecomment": "د GIF دوتنې تبصره", + "exif-intellectualgenre": "د توکو ډول", + "exif-subjectnewscode": "د موضوع کوډ", + "exif-scenecode": "د اي پي ثي ټي(IPTC) منظر کوډ", + "exif-event": "پيښه ښودل شوي", + "exif-organisationinimage": "سازمان ښودل شوي", "exif-personinimage": "شخص ښودل شوی", "exif-copyrighted-true": "په رښتو سمبال", "exif-copyrighted-false": "د خپراوي د رښتو دريځ نه دی ټاکل شوی", "exif-photometricinterpretation-1": "تور او سپين (تور 0 دی)", "exif-unknowndate": "ناڅرگنده نېټه", "exif-orientation-1": "نورمال", + "exif-orientation-3": "څرخيدونکي °١٨٠", + "exif-orientation-4": "چورليځه اړونه", + "exif-orientation-5": "څرخيدونکي °٩٠ CCW او عمودی یې وویشل", + "exif-orientation-6": "څرخيدونکي °٩٠ CCW", "exif-componentsconfiguration-0": "نشته دی", "exif-exposureprogram-1": "لارښوونيز", "exif-exposureprogram-2": "نورماله پروگرام", @@ -2476,6 +2515,7 @@ "exif-meteringmode-1": "منځالی", "exif-meteringmode-3": "سپوټ", "exif-meteringmode-5": "مخبېلگه", + "exif-meteringmode-6": "برخيز", "exif-meteringmode-255": "نور", "exif-lightsource-0": "ناجوت", "exif-lightsource-1": "د ورځې رڼا", @@ -2483,6 +2523,10 @@ "exif-lightsource-9": "ښه هوا", "exif-lightsource-10": "ورېځ پوښلې هوا", "exif-lightsource-11": "سيوری", + "exif-lightsource-12": "ورځنې فلوروسینټ (ډالر ۵۷۰۰ – ۷۱۰۰ زره)", + "exif-lightsource-17": "معياري رڼا '''ا'''", + "exif-lightsource-18": "معياري رڼا '''ب'''", + "exif-lightsource-19": "معياري رڼا '''ث'''", "exif-lightsource-255": "د رڼا بله سرچينه", "exif-flash-fired-0": "فلش و نه ځلېده", "exif-flash-mode-3": "خپلکاره حالت", @@ -2675,6 +2719,7 @@ "version-ext-colheader-description": "څرگندونه", "version-ext-colheader-credits": "ليکوالان", "version-license-title": "د $1 منښتليک", + "version-credits-title": "د کریډیټ د $1 لپاره", "version-poweredby-credits": "دا ويکي د '''[https://www.mediawiki.org/ مېډياويکي]''' په سېک چلېږي، ټولې رښتې خوندي دي © 2001-$1 $2.", "version-poweredby-others": "نور", "version-poweredby-translators": "د translatewiki.net ژباړنان", @@ -2726,6 +2771,7 @@ "tag-filter": "[[Special:Tags|نښلن]] چاڼگر:", "tag-filter-submit": "چاڼگر", "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|نښلن|نښلنونه}}]]: $2)", + "tag-mw-undo": "ناکړل", "tags-title": "نښلنونه", "tags-tag": "نښلن نوم", "tags-display-header": "د بدلون په لړليکونو کې ښکارېدنه", @@ -2793,6 +2839,7 @@ "htmlform-cloner-create": "نور ورگډول", "htmlform-cloner-delete": "غورځول", "htmlform-cloner-required": "لږ تر لږه يو ارزښت ته اړتيا شته.", + "htmlform-date-placeholder": "کککک-م م-و و", "htmlform-title-not-exists": "$1 نشته.", "htmlform-user-not-exists": "$1 نشته.", "logentry-delete-delete": "$1 د $3 مخ {{GENDER:$2|ړنگ کړ}}", @@ -2811,12 +2858,14 @@ "logentry-newusers-create": "د $1 کارن گڼون {{GENDER:$2|جوړ شو}}", "logentry-newusers-autocreate": "د $1 گڼون په اتوماتيک ډول {{GENDER:$2|جوړ شو}}", "logentry-protect-unprotect": "$1 له $3 څخه ژغورنه {{GENDER:$2|ليرې کړه}}", + "logentry-protect-protect-cascade": "$1 {{GENDER:$2|وژغورل شو}} $3 $4 [کڅوړی]", "logentry-rights-rights": "$1 د $3 لپاره د غړيتوب ډله له $4 څخه $5 ته {{GENDER:$2|بدله کړه}}", "logentry-rights-rights-legacy": "$1 د $3 لپاره د غړيتوب ډله {{GENDER:$2|بدله کړه}}", "logentry-upload-upload": "$1 $3 {{GENDER:$2|ورپورته يې کړ}}", "logentry-upload-overwrite": "$1 نوي ويرژن {{GENDER:$2|پورته}} سو $3", "logentry-upload-revert": "$1 $3 يې {{GENDER:$2|ورپورته کړه}}", "log-name-managetags": "د نښلن مهارولو يادښت", + "logentry-managetags-create": "$1 {{GENDER:$2|د}} د ټګ \"$4\" جوړ کړ", "log-name-tag": "نښلن يادښت", "rightsnone": "(هېڅ)", "rightslogentry-temporary-group": "$1 (لنډمهاله، تر $2)", diff --git a/languages/i18n/pt-br.json b/languages/i18n/pt-br.json index 44e8dd5f3c..7bb87c64d6 100644 --- a/languages/i18n/pt-br.json +++ b/languages/i18n/pt-br.json @@ -3549,6 +3549,8 @@ "tag-mw-replace-description": "Edições que removem mais de 90% do conteúdo de uma página", "tag-mw-rollback": "Reverter", "tag-mw-rollback-description": "Edições que revertem edições anteriores usando o link de reversão", + "tag-mw-undo": "Desfazer", + "tag-mw-undo-description": "Edições que desfazem edições anteriores usando o link de desfazer", "tags-title": "Etiquetas", "tags-intro": "Esta página lista as etiquetas com que o software poderá marcar uma edição, e o seu significado.", "tags-tag": "Nome da etiqueta", diff --git a/languages/i18n/pt.json b/languages/i18n/pt.json index 2eb741b50f..2ab847b5d9 100644 --- a/languages/i18n/pt.json +++ b/languages/i18n/pt.json @@ -2441,7 +2441,7 @@ "nolinkshere-ns": "Não existem afluentes para [[:$1]] no espaço nominal selecionado.", "isredirect": "página de redirecionamento", "istemplate": "inclusão", - "isimage": "ligação para ficheiro", + "isimage": "hiperligação para ficheiro", "whatlinkshere-prev": "{{PLURAL:$1|anterior|$1 anteriores}}", "whatlinkshere-next": "{{PLURAL:$1|próximo|próximos $1}}", "whatlinkshere-links": "← afluentes", @@ -2645,7 +2645,7 @@ "move-over-sharedrepo": "[[:$1]] já existe num repositório partilhado. Mover um ficheiro para o título [[:$1]] irá substituir o ficheiro partilhado.", "file-exists-sharedrepo": "O nome de ficheiro que escolheu já é utilizado num repositório partilhado.\nEscolha outro nome, por favor.", "export": "Exportar páginas", - "exporttext": "Pode exportar o texto e o histórico de edições de uma página em particular para um ficheiro XML. Poderá então importar esse conteúdo noutra wiki que utilize o programa MediaWiki, através da [[Special:Import|página de importações]].\n\nPara exportar páginas, introduza os títulos na caixa de texto abaixo (um título por linha) e selecione se deseja todas as versões, com as linhas de histórico de edições, ou apenas a edição atual e informações sobre a mais recente das edições.\n\nSe desejar, pode utilizar um link (por exemplo, [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] para a [[{{MediaWiki:Mainpage}}]]).", + "exporttext": "Pode exportar o texto e o histórico de edições de uma página em particular para um ficheiro XML. Poderá então importar esse conteúdo noutra wiki que utilize o programa MediaWiki, através da [[Special:Import|página de importações]].\n\nPara exportar páginas, introduza os títulos na caixa de texto abaixo (um título por linha) e selecione se deseja todas as versões, com as linhas de histórico de edições, ou apenas a edição atual e informações sobre a mais recente das edições.\n\nSe desejar, pode utilizar uma hiperligação (por exemplo, [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] para a [[{{MediaWiki:Mainpage}}]]).", "exportall": "Exportar todas as páginas", "exportcuronly": "Incluir apenas a edição atual, não o histórico completo", "exportnohistory": "----\nNota: A exportação do histórico completo de páginas através deste formulário foi desativada por motivos de desempenho.", @@ -2977,7 +2977,7 @@ "saturday-at": "Sábado às $1", "sunday-at": "Domingo às $1", "yesterday-at": "Ontem às $1", - "bad_image_list": "O formato é o seguinte:\n\nSó são reconhecidos elementos na forma de lista (linhas começadas por *).\nO primeiro link em cada linha deve apontar para o ficheiro que se pretende bloquear.\nQuaisquer outras ligações nessa mesma linha são considerados excepções (ou seja, páginas de onde se pode aceder ao ficheiro).", + "bad_image_list": "O formato é o seguinte:\n\nSó são reconhecidos elementos na forma de lista (linhas começadas por *).\nA primeira hiperligação em cada linha deve apontar para o ficheiro que se pretende bloquear.\nQuaisquer outras hiperligações nessa mesma linha são consideradas exceções (ou seja, páginas de onde se pode aceder ao ficheiro).", "metadata": "Metadados", "metadata-help": "Este ficheiro contém informação adicional, provavelmente acrescentada pela câmara digital ou pelo digitalizador usados para criá-lo.\nCaso o ficheiro tenha sido modificado a partir do seu estado original, alguns detalhes poderão não refletir completamente as mudanças efetuadas.", "metadata-expand": "Mostrar detalhes adicionais", @@ -3507,7 +3507,7 @@ "specialpages-group-developer": "Ferramentas de desenvolvimento", "blankpage": "Página em branco", "intentionallyblankpage": "Esta página foi intencionalmente deixada em branco", - "external_image_whitelist": " # Deixe esta linha exatamente como ela está
\n# Coloque fragmentos de expressões regulares (apenas a parte entre //) abaixo\n# Estas serão comparadas com os URL das imagens externas (com ligação direta)\n# As que corresponderem serão apresentadas como imagens, caso contrário apenas será apresentado um link para a imagem\n# As linhas que começam com um símbolo de cardinal (#) são tratadas como comentários\n# Esta lista não distingue maiúsculas de minúsculas\n\n# Coloque todos os fragmentos de expressões regulares (regex) acima desta linha. Deixe esta linha exatamente como ela está
", + "external_image_whitelist": " # Deixe esta linha exatamente como ela está
\n# Coloque fragmentos de expressões regulares (apenas a parte entre //) abaixo\n# Estas serão comparadas com os URL das imagens externas (com ligação direta)\n# As que corresponderem serão apresentadas como imagens, caso contrário apenas será apresentada uma hiperligação para a imagem\n# As linhas que começam com um símbolo de cardinal (#) são tratadas como comentários\n# Esta lista não distingue maiúsculas de minúsculas\n\n# Coloque todos os fragmentos de expressões regulares (regex) acima desta linha. Deixe esta linha exatamente como ela está
", "tags": "Etiquetas de modificação válidas", "tag-filter": "Filtro de [[Special:Tags|etiquetas]]:", "tag-filter-submit": "Filtrar", @@ -3527,6 +3527,7 @@ "tag-mw-rollback": "Reversão", "tag-mw-rollback-description": "Edições que revertem edições anteriores usando a hiperligação desfazer", "tag-mw-undo": "Desfazer", + "tag-mw-undo-description": "Edições que desfazem edições anteriores usando a hiperligação «desfazer»", "tags-title": "Etiquetas de modificação válidas", "tags-intro": "Esta página lista as etiquetas com que o software poderá marcar uma edição, e o seu significado.", "tags-tag": "Nome da etiqueta", @@ -3861,7 +3862,7 @@ "json-error-recursion": "Uma ou mais referências recursivas no valor a ser codificado", "json-error-inf-or-nan": "Um ou mais valores NaN ou INF no valor a ser codificado", "json-error-unsupported-type": "Foi dado um valor de um tipo que não pode ser codificado", - "headline-anchor-title": "Ligação para esta secção", + "headline-anchor-title": "Hiperligação para esta secção", "special-characters-group-latin": "Latim", "special-characters-group-latinextended": "Latim expandido", "special-characters-group-ipa": "AFI (IPA)", diff --git a/languages/i18n/ru.json b/languages/i18n/ru.json index bf5df9fc82..5bf406b01e 100644 --- a/languages/i18n/ru.json +++ b/languages/i18n/ru.json @@ -3664,6 +3664,8 @@ "tag-mw-replace-description": "Правки, которые удаляют более 90 % содержимого страницы", "tag-mw-rollback": "откат", "tag-mw-rollback-description": "Правки, которые откатывают предыдущие правки по нажатию ссылки отката", + "tag-mw-undo": "отмена", + "tag-mw-undo-description": "Правки, отменяющие предыдущие с помощью ссылки «отменить»", "tags-title": "Метки", "tags-intro": "На этой странице приведён список меток, которыми программное обеспечение отмечает правки, а также значения этих меток.", "tags-tag": "Имя метки", diff --git a/languages/i18n/th.json b/languages/i18n/th.json index cfb1ef8c7d..bfe9af0ecd 100644 --- a/languages/i18n/th.json +++ b/languages/i18n/th.json @@ -2506,6 +2506,7 @@ "import-logentry-upload-detail": "นำเข้า $1 {{PLURAL:$1|รุ่นการแก้ไข|รุ่นการแก้ไข}}", "import-logentry-interwiki-detail": "นำเข้า $1 {{PLURAL:$1|รุ่นการแก้ไข|รุ่นการแก้ไข}}จาก $2", "javascripttest": "การทดสอบจาวาสคริปต์", + "javascripttest-pagetext-unknownaction": "ปฏิบัติการที่ไม่รู้จัก: \"$1\"", "javascripttest-qunit-intro": "ดู[$1 เอกสารกำกับการทดสอบ]บน mediawiki.org", "tooltip-pt-userpage": "{{GENDER:|หน้าผู้ใช้}}ของคุณ", "tooltip-pt-anonuserpage": "หน้าผู้ใช้ของเลขที่อยู่ไอพีที่คุณกำลังใช้แก้ไข", @@ -2645,6 +2646,7 @@ "pageinfo-templates": "แม่แบบที่ใช้ ($1)", "pageinfo-toolboxlink": "สารสนเทศหน้า", "pageinfo-redirectsto": "เปลี่ยนทางไป", + "pageinfo-redirectsto-info": "สนเทศ", "pageinfo-contentpage": "นับเป็นหน้าเนื้อหา", "pageinfo-contentpage-yes": "ใช่", "pageinfo-protect-cascading": "การล็อกที่ต่อเรียงจากหน้านี้", @@ -3183,6 +3185,8 @@ "tag-mw-replace-description": "การแก้ไขซึ่งลบเนื้อหากว่า 90% ของหน้า", "tag-mw-rollback": "ย้อนกลับ", "tag-mw-rollback-description": "การแก้ไขซึ่งย้อนการแก้ไขก่อนหน้าโดยใช้ลิงก์ย้อนกลับฉุกเฉิน", + "tag-mw-undo": "ทำกลับ", + "tag-mw-undo-description": "การแก้ไขที่ทำกลับการแก้ไขก่อนหน้าโดยใช้ลิงก์ทำกลับ", "tags-title": "ป้ายระบุ", "tags-intro": "หน้านี้แสดงรายการและความหมายของป้ายระบุที่ซอฟต์แวร์อาจใช้ทำเครื่องหมายกำกับการแก้ไข", "tags-tag": "ชื่อป้ายกำกับ", @@ -3400,6 +3404,8 @@ "special-characters-group-canadianaboriginal": "แคนาดาพื้นเมืองดั้งเดิม", "special-characters-title-minus": "เครื่องหมายลบ", "mw-widgets-dateinput-no-date": "ไม่เลือกวันที่", + "date-range-from": "ตั้งแต่วันที่:", + "date-range-to": "ถึงวันที่:", "randomrootpage": "สุ่มหน้าราก", "log-action-filter-block": "ประเภทของการบล็อก:", "log-action-filter-contentmodel": "ประเภทของการเปลี่ยนตัวแบบเนื้อหา:", diff --git a/languages/i18n/tr.json b/languages/i18n/tr.json index 94708e53dc..032787aee6 100644 --- a/languages/i18n/tr.json +++ b/languages/i18n/tr.json @@ -97,7 +97,8 @@ "Alerque", "Bulgu", "Botansahin", - "Catrope" + "Catrope", + "Hedda" ] }, "tog-underline": "Bağlantıların altını çizme:", @@ -1355,12 +1356,12 @@ "rcfilters-empty-filter": "Etkin süzgeç bulunmuyor. Tüm katkıları gösteriliyor.", "rcfilters-filterlist-title": "Süzgeçler", "rcfilters-filterlist-whatsthis": "Bunlar nasıl çalışır?", - "rcfilters-filterlist-feedbacklink": "Bu (yeni) süzgeç araçları konusunda ne düşündüğünüzü bize aktarın", + "rcfilters-filterlist-feedbacklink": "Bu (yeni) süzgeç araçları konusunda ne düşündüğünüzü bize bildirin", "rcfilters-highlightbutton-title": "Sonuçları vurgula", "rcfilters-highlightmenu-title": "Bir renk seçin", "rcfilters-highlightmenu-help": "Bu özelliği vurgulamak için bir renk seçin", "rcfilters-filterlist-noresults": "Süzgeç bulunamadı", - "rcfilters-noresults-conflict": "Hiçbir sonuç bulunamadı çünkü arama kriterleri çelişkili", + "rcfilters-noresults-conflict": "Arama kriterleri çelişkili olduğu için hiçbir sonuç bulunamadı", "rcfilters-filtergroup-authorship": "Düzenleme sahipliği", "rcfilters-filter-editsbyself-label": "Senin değişiklikleriniz", "rcfilters-filter-editsbyself-description": "Kendi katkılarınız.", diff --git a/resources/Resources.php b/resources/Resources.php index b4944298d2..7d37b5023b 100644 --- a/resources/Resources.php +++ b/resources/Resources.php @@ -1842,9 +1842,13 @@ return [ 'resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.LiveUpdateButtonWidget.less', 'resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.RcTopSectionWidget.less', 'resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.RclToOrFromWidget.less', + 'resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.RclTargetPageWidget.less', 'resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.WatchlistTopSectionWidget.less', ], 'skinStyles' => [ + 'vector' => [ + 'resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.Overlay.vector.less', + ], 'monobook' => [ 'resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.Overlay.monobook.less', 'resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.CapsuleItemWidget.monobook.less', diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.styles.less b/resources/src/mediawiki.action/mediawiki.action.edit.styles.less index 1d578e47cc..e4443f6384 100644 --- a/resources/src/mediawiki.action/mediawiki.action.edit.styles.less +++ b/resources/src/mediawiki.action/mediawiki.action.edit.styles.less @@ -57,4 +57,25 @@ .editOptions { border-radius: 0 0 2px 2px; } + + .editButtons .oo-ui-buttonInputWidget, + .cancelLink, + .editHelp { + margin-top: 0.5em; + } + + .cancelLink, + .editHelp { + display: inline-block; + vertical-align: middle; + } + + // FIXME: Remove CSS magic together with DOM element in T183672 + .mw-editButtons-pipe-separator { + display: inline-block; + padding-top: 0.625em; + padding-bottom: 0.546875em; + line-height: 1.172em; + vertical-align: middle; + } } diff --git a/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.Overlay.vector.less b/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.Overlay.vector.less new file mode 100644 index 0000000000..528707bed1 --- /dev/null +++ b/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.Overlay.vector.less @@ -0,0 +1,4 @@ +// Fix z-index for the overlay in Vector, see T183442 +.mw-rcfilters-ui-overlay { + z-index: 101; +} diff --git a/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.RclTargetPageWidget.less b/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.RclTargetPageWidget.less new file mode 100644 index 0000000000..2d92e27be1 --- /dev/null +++ b/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.RclTargetPageWidget.less @@ -0,0 +1,3 @@ +.mw-rcfilters-ui-rclTargetPageWidget { + min-width: 400px; +} diff --git a/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.RclToOrFromWidget.less b/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.RclToOrFromWidget.less index af01f6879b..d63f35b7c0 100644 --- a/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.RclToOrFromWidget.less +++ b/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.RclToOrFromWidget.less @@ -1,6 +1,4 @@ .mw-rcfilters-ui-rclToOrFromWidget { - min-width: 340px; - // need to be very specific to override bg-color &.oo-ui-dropdownWidget.oo-ui-widget-enabled { .oo-ui-dropdownWidget-handle { diff --git a/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.RclTargetPageWidget.js b/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.RclTargetPageWidget.js index d5c5e26ec9..527d790d6c 100644 --- a/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.RclTargetPageWidget.js +++ b/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.RclTargetPageWidget.js @@ -71,7 +71,9 @@ * Respond to the model being updated */ mw.rcfilters.ui.RclTargetPageWidget.prototype.updateUiBasedOnModel = function () { - var title = mw.Title.newFromText( this.model.getValue() ); - this.titleSearch.setValue( title ? title.toText() : this.model.getValue() ); + var title = mw.Title.newFromText( this.model.getValue() ), + text = title ? title.toText() : this.model.getValue(); + this.titleSearch.setValue( text ); + this.titleSearch.setTitle( text ); }; }( mediaWiki ) ); diff --git a/tests/phpunit/includes/MediaWikiServicesTest.php b/tests/phpunit/includes/MediaWikiServicesTest.php index 6bab16feeb..dbb7799b55 100644 --- a/tests/phpunit/includes/MediaWikiServicesTest.php +++ b/tests/phpunit/includes/MediaWikiServicesTest.php @@ -8,6 +8,7 @@ use MediaWiki\Services\SalvageableService; use MediaWiki\Services\ServiceDisabledException; use MediaWiki\Shell\CommandFactory; use MediaWiki\Storage\BlobStore; +use MediaWiki\Storage\BlobStoreFactory; use MediaWiki\Storage\RevisionStore; use MediaWiki\Storage\SqlBlobStore; @@ -334,6 +335,7 @@ class MediaWikiServicesTest extends MediaWikiTestCase { 'LocalServerObjectCache' => [ 'LocalServerObjectCache', BagOStuff::class ], 'VirtualRESTServiceClient' => [ 'VirtualRESTServiceClient', VirtualRESTServiceClient::class ], 'ShellCommandFactory' => [ 'ShellCommandFactory', CommandFactory::class ], + 'BlobStoreFactory' => [ 'BlobStoreFactory', BlobStoreFactory::class ], 'BlobStore' => [ 'BlobStore', BlobStore::class ], '_SqlBlobStore' => [ '_SqlBlobStore', SqlBlobStore::class ], 'RevisionStore' => [ 'RevisionStore', RevisionStore::class ], diff --git a/tests/phpunit/includes/RevisionTest.php b/tests/phpunit/includes/RevisionTest.php index 566dc9285a..80257cca8b 100644 --- a/tests/phpunit/includes/RevisionTest.php +++ b/tests/phpunit/includes/RevisionTest.php @@ -1,5 +1,6 @@ setService( '_SqlBlobStore', $blobStore ); + $this->setService( 'BlobStoreFactory', $this->mockBlobStoreFactory( $blobStore ) ); $row = (object)$arrayData; $rev = new Revision( $row, 0, $this->getMockTitle() ); @@ -435,6 +436,20 @@ class RevisionTest extends MediaWikiTestCase { return $blobStore; } + private function mockBlobStoreFactory( $blobStore ) { + /** @var LoadBalancer $lb */ + $factory = $this->getMockBuilder( BlobStoreFactory::class ) + ->disableOriginalConstructor() + ->getMock(); + $factory->expects( $this->any() ) + ->method( 'newBlobStore' ) + ->willReturn( $blobStore ); + $factory->expects( $this->any() ) + ->method( 'newSqlBlobStore' ) + ->willReturn( $blobStore ); + return $factory; + } + /** * @return RevisionStore */ @@ -478,7 +493,7 @@ class RevisionTest extends MediaWikiTestCase { public function testGetRevisionWithLegacyEncoding( $expected, $lang, $encoding, $rowData ) { $blobStore = $this->getBlobStore(); $blobStore->setLegacyEncoding( $encoding, Language::factory( $lang ) ); - $this->setService( 'BlobStore', $blobStore ); + $this->setService( 'BlobStoreFactory', $this->mockBlobStoreFactory( $blobStore ) ); $this->testGetRevisionText( $expected, $rowData ); } @@ -518,7 +533,7 @@ class RevisionTest extends MediaWikiTestCase { $blobStore = $this->getBlobStore(); $blobStore->setLegacyEncoding( $encoding, Language::factory( $lang ) ); - $this->setService( 'BlobStore', $blobStore ); + $this->setService( 'BlobStoreFactory', $this->mockBlobStoreFactory( $blobStore ) ); $this->testGetRevisionText( $expected, $rowData ); } @@ -548,7 +563,7 @@ class RevisionTest extends MediaWikiTestCase { $blobStore = $this->getBlobStore(); $blobStore->setCompressBlobs( true ); - $this->setService( 'BlobStore', $blobStore ); + $this->setService( 'BlobStoreFactory', $this->mockBlobStoreFactory( $blobStore ) ); $row = new stdClass; $row->old_text = "Wiki est l'\xc3\xa9cole superieur !"; @@ -693,7 +708,7 @@ class RevisionTest extends MediaWikiTestCase { $blobStore->setLegacyEncoding( $legacyEncoding, Language::factory( 'en' ) ); } - $this->setService( 'BlobStore', $blobStore ); + $this->setService( 'BlobStoreFactory', $this->mockBlobStoreFactory( $blobStore ) ); $this->assertSame( $expected, Revision::decompressRevisionText( $text, $flags ) @@ -802,7 +817,7 @@ class RevisionTest extends MediaWikiTestCase { ->getMock(); $blobStore = new SqlBlobStore( $lb, $cache ); - $this->setService( 'BlobStore', $blobStore ); + $this->setService( 'BlobStoreFactory', $this->mockBlobStoreFactory( $blobStore ) ); $this->assertSame( 'AAAABBAAA', diff --git a/tests/phpunit/includes/Storage/BlobStoreFactoryTest.php b/tests/phpunit/includes/Storage/BlobStoreFactoryTest.php new file mode 100644 index 0000000000..46ba7a5da1 --- /dev/null +++ b/tests/phpunit/includes/Storage/BlobStoreFactoryTest.php @@ -0,0 +1,46 @@ +getBlobStoreFactory(); + $store = $factory->newBlobStore( $wikiId ); + $this->assertInstanceOf( BlobStore::class, $store ); + + // This only works as we currently know this is a SqlBlobStore object + $wrapper = TestingAccessWrapper::newFromObject( $store ); + $this->assertEquals( $wikiId, $wrapper->wikiId ); + } + + /** + * @dataProvider provideWikiIds + */ + public function testNewSqlBlobStore( $wikiId ) { + $factory = MediaWikiServices::getInstance()->getBlobStoreFactory(); + $store = $factory->newSqlBlobStore( $wikiId ); + $this->assertInstanceOf( SqlBlobStore::class, $store ); + + $wrapper = TestingAccessWrapper::newFromObject( $store ); + $this->assertEquals( $wikiId, $wrapper->wikiId ); + } + +} diff --git a/tests/phpunit/includes/Storage/RevisionStoreTest.php b/tests/phpunit/includes/Storage/RevisionStoreTest.php index efad1b14f5..18dbc25046 100644 --- a/tests/phpunit/includes/Storage/RevisionStoreTest.php +++ b/tests/phpunit/includes/Storage/RevisionStoreTest.php @@ -213,6 +213,7 @@ class RevisionStoreTest extends MediaWikiTestCase { public function testGetQueryInfo( $contentHandlerUseDb, $options, $expected ) { $store = $this->getRevisionStore(); $store->setContentHandlerUseDB( $contentHandlerUseDb ); + $this->setMwGlobals( 'wgCommentTableSchemaMigrationStage', MIGRATION_OLD ); $this->assertEquals( $expected, $store->getQueryInfo( $options ) ); } @@ -242,6 +243,7 @@ class RevisionStoreTest extends MediaWikiTestCase { public function testGetArchiveQueryInfo_contentHandlerDb() { $store = $this->getRevisionStore(); $store->setContentHandlerUseDB( true ); + $this->setMwGlobals( 'wgCommentTableSchemaMigrationStage', MIGRATION_OLD ); $this->assertEquals( [ 'tables' => [ @@ -269,6 +271,7 @@ class RevisionStoreTest extends MediaWikiTestCase { public function testGetArchiveQueryInfo_noContentHandlerDb() { $store = $this->getRevisionStore(); $store->setContentHandlerUseDB( false ); + $this->setMwGlobals( 'wgCommentTableSchemaMigrationStage', MIGRATION_OLD ); $this->assertEquals( [ 'tables' => [ diff --git a/tests/phpunit/includes/libs/JavaScriptMinifierTest.php b/tests/phpunit/includes/libs/JavaScriptMinifierTest.php index ca12f6c777..12b2c04ab6 100644 --- a/tests/phpunit/includes/libs/JavaScriptMinifierTest.php +++ b/tests/phpunit/includes/libs/JavaScriptMinifierTest.php @@ -59,6 +59,20 @@ class JavaScriptMinifierTest extends PHPUnit_Framework_TestCase { [ "0xFF.\nx;", "0xFF.x;" ], [ "5.3.\nx;", "5.3.x;" ], + // Cover failure case for incomplete hex literal + [ "0x;", false, false ], + + // Cover failure case for number with no digits after E + [ "1.4E", false, false ], + + // Cover failure case for number with several E + [ "1.4EE2", false, false ], + [ "1.4EE", false, false ], + + // Cover failure case for number with several E (nonconsecutive) + // FIXME: This is invalid, but currently tolerated + [ "1.4E2E3", "1.4E2 E3", false ], + // Semicolon insertion between an expression having an inline // comment after it, and a statement on the next line (T29046). [ @@ -138,6 +152,7 @@ class JavaScriptMinifierTest extends PHPUnit_Framework_TestCase { [ "var a = 5.;", "var a=5.;" ], [ "5.0.toString();", "5.0.toString();" ], [ "5..toString();", "5..toString();" ], + // Cover failure case for too many decimal points [ "5...toString();", false ], [ "5.\n.toString();", '5..toString();' ], @@ -153,8 +168,9 @@ class JavaScriptMinifierTest extends PHPUnit_Framework_TestCase { /** * @dataProvider provideCases * @covers JavaScriptMinifier::minify + * @covers JavaScriptMinifier::parseError */ - public function testJavaScriptMinifierOutput( $code, $expectedOutput, $expectedValid = true ) { + public function testMinifyOutput( $code, $expectedOutput, $expectedValid = true ) { $minified = JavaScriptMinifier::minify( $code ); // JSMin+'s parser will throw an exception if output is not valid JS. diff --git a/tests/phpunit/maintenance/categoriesRdfTest.php b/tests/phpunit/maintenance/categoriesRdfTest.php index ec2746e8ee..b51c14c495 100644 --- a/tests/phpunit/maintenance/categoriesRdfTest.php +++ b/tests/phpunit/maintenance/categoriesRdfTest.php @@ -1,5 +1,9 @@