From: jenkins-bot Date: Fri, 26 May 2017 23:48:29 +0000 (+0000) Subject: Merge "UploadBase: Avoid deprecated wfMemcKey()" X-Git-Tag: 1.31.0-rc.0~3123 X-Git-Url: https://git.cyclocoop.org/%27.WWW_URL.%27admin/?a=commitdiff_plain;h=ca74e553cbed8b7976dfcd2474b02028f8da520d;hp=316641798f502f5a576796758ffef12c45182da3;p=lhc%2Fweb%2Fwiklou.git Merge "UploadBase: Avoid deprecated wfMemcKey()" --- diff --git a/RELEASE-NOTES-1.30 b/RELEASE-NOTES-1.30 index 9ff7e97166..e61277a9f4 100644 --- a/RELEASE-NOTES-1.30 +++ b/RELEASE-NOTES-1.30 @@ -32,6 +32,10 @@ production. X-Content-Dimensions header for originals that contain the media's dimensions as page ranges keyed by dimensions. +=== Languages updated in 1.30 === + +* Support for kbp (Kabɩyɛ / Kabiyè) was added. + === External library changes in 1.30 === ==== Upgraded external libraries ==== diff --git a/includes/OutputPage.php b/includes/OutputPage.php index c739b3098f..e22f42ce21 100644 --- a/includes/OutputPage.php +++ b/includes/OutputPage.php @@ -3644,10 +3644,21 @@ class OutputPage extends ContextSource { [ 'name' => 'ResourceLoaderDynamicStyles', 'content' => '' ] ); + $separateReq = [ 'site.styles', 'user.styles' ]; foreach ( $this->rlExemptStyleModules as $group => $moduleNames ) { - $chunks[] = $this->makeResourceLoaderLink( $moduleNames, + // Combinable modules + $chunks[] = $this->makeResourceLoaderLink( + array_diff( $moduleNames, $separateReq ), ResourceLoaderModule::TYPE_STYLES ); + + foreach ( array_intersect( $moduleNames, $separateReq ) as $name ) { + // These require their own dedicated request in order to support "@import" + // syntax, which is incompatible with concatenation. (T147667, T37562) + $chunks[] = $this->makeResourceLoaderLink( $name, + ResourceLoaderModule::TYPE_STYLES + ); + } } return self::combineWrappedStrings( array_merge( $chunks, $append ) ); diff --git a/includes/WebStart.php b/includes/WebStart.php index 15804c7bd4..e281b6f267 100644 --- a/includes/WebStart.php +++ b/includes/WebStart.php @@ -1,12 +1,11 @@ meaning.", "apihelp-query+search-example-text": "Buscar meaning en los textos.", "apihelp-query+search-example-generator": "Obtener información acerca de las páginas devueltas por una búsqueda de meaning.", diff --git a/includes/api/i18n/he.json b/includes/api/i18n/he.json index 7613b847bd..b6a5b09beb 100644 --- a/includes/api/i18n/he.json +++ b/includes/api/i18n/he.json @@ -347,6 +347,7 @@ "apihelp-parse-param-preview": "לפענח במצב תצוגה מקדימה.", "apihelp-parse-param-sectionpreview": "לפענח במצב תצוגה מקדימה של פסקה (מדליק גם את מצב תצוגה מקדימה).", "apihelp-parse-param-disabletoc": "להשמיט את תוכן העניינים בפלט.", + "apihelp-parse-param-useskin": "להחיל את העיצוב שנבחר לפלט המפענח. יכול להשפיע על המאפיינים הבאים: langlinks, headitems, modules, jsconfigvars, indicators.", "apihelp-parse-param-contentformat": "תסדיר הסדרת תוכן שישמש לטקסט הקלט. תקף רק עם $1text.", "apihelp-parse-param-contentmodel": "מודל התוכן של טקסט הקלט. אם זה מושמט, יש לציין את $1title והערך ההתחלתי יהיה המודל של הכותרת שצוינה. תקין רק כאשר משמש עם $1text.", "apihelp-parse-example-page": "לפענח דף.", @@ -1047,7 +1048,7 @@ "apihelp-query+search-param-limit": "כמה דפים להחזיר בסך הכול.", "apihelp-query+search-param-interwiki": "לכלול תוצאות בינוויקי בחיפוש, אם זמין.", "apihelp-query+search-param-backend": "באיזה שרת חיפוש להשתמש אם לא בבררת המחדל.", - "apihelp-query+search-param-enablerewrites": "הפעלת שכתוב שאילתות פנימי. שרתי חיפוש אחדים יכולים לשכתב את השאילתה לצורה שלדעתם נותנת תוצאות טובות יותר, למשל תיקון שגיאות כתיב.", + "apihelp-query+search-param-enablerewrites": "הפעלת שכתוב שאילתות פנימי. שרתי חיפוש אחדים יכולים לשכתב את השאילתה לצורה אחרת שנחשבת לכזאת שמספקת תוצאות טובות יותר, למשל באמצעות תיקון שגיאות כתיב.", "apihelp-query+search-example-simple": "חיפוש meaning.", "apihelp-query+search-example-text": "חיפוש טקסטים עבור meaning.", "apihelp-query+search-example-generator": "קבלת מידע על הדף עבור שמוחזרים מחיפוש אחרי meaning.", diff --git a/includes/api/i18n/hu.json b/includes/api/i18n/hu.json index 250ec2fcd3..a41df90863 100644 --- a/includes/api/i18n/hu.json +++ b/includes/api/i18n/hu.json @@ -524,6 +524,26 @@ "apihelp-query+backlinks-param-redirect": "Ha a hivatkozó lap átirányítás, az arra hivatkozó lapok keresése szintén. A maximális limit feleződik.", "apihelp-query+backlinks-example-simple": "A Main Page lapra mutató hivatkozások keresése.", "apihelp-query+backlinks-example-generator": "Információk lekérése a Main Page-re hivatkozó lapokról.", + "apihelp-query+blocks-description": "Az összes blokkolt felhasználó és IP-cím listázása.", + "apihelp-query+blocks-param-start": "A listázás kezdő időbélyege.", + "apihelp-query+blocks-param-end": "A lista végét jelentő időbélyeg.", + "apihelp-query+blocks-param-ids": "A listázandó blokkok blokkazonosítói (opcionális).", + "apihelp-query+blocks-param-users": "A keresendő felhasználók (opcionális).", + "apihelp-query+blocks-param-ip": "Minden erre az IP-címre vagy CIDR tartományra vonatkozó blokk listázása, a tartományblokkokat is beleértve. Nem használható együtt a $3users paraméterrel. A CIDR tartományok maximális szélessége IPv4 esetén /$1, IPv6 esetén /$2.", + "apihelp-query+blocks-param-limit": "A listázandó blokkok maximális száma.", + "apihelp-query+blocks-param-prop": "Lekérendő tulajdonságok:", + "apihelp-query+blocks-paramvalue-prop-id": "A blokk azonosítója.", + "apihelp-query+blocks-paramvalue-prop-user": "A blokkolt felhasználó felhasználóneve.", + "apihelp-query+blocks-paramvalue-prop-userid": "A blokkolt felhasználó felhasználóazonosítója.", + "apihelp-query+blocks-paramvalue-prop-by": "A blokkoló felhasználó felhasználóneve.", + "apihelp-query+blocks-paramvalue-prop-byid": "A blokkoló felhasználó felhasználóazonosítója.", + "apihelp-query+blocks-paramvalue-prop-timestamp": "A blokkolás időbélyege.", + "apihelp-query+blocks-paramvalue-prop-expiry": "A blokk lejáratának időbélyege.", + "apihelp-query+blocks-paramvalue-prop-reason": "A blokk indoklása.", + "apihelp-query+blocks-paramvalue-prop-range": "A blokk által érintett IP-címek tartománya.", + "apihelp-query+blocks-param-show": "Csak a megadott feltételeknek megfelelő elemek megjelenítése.\nPéldául csak IP-címek végtelen blokkjainak megjelenítéséhez állítsd $1show=ip|!temp értékre.", + "apihelp-query+blocks-example-simple": "Blokkok listázása.", + "apihelp-query+blocks-example-users": "Alice és Bob blokkjainak listázása.", "apihelp-query+deletedrevs-paraminfo-modes": "{{PLURAL:$1|Mód|Módok}}: $2", "apihelp-query+imageinfo-paramvalue-prop-sha1": "SHA-1 hash hozzáadása a fájlhoz.", "apihelp-query+imageinfo-paramvalue-prop-mime": "MIME-típus hozzáadása a fájlhoz.", diff --git a/includes/api/i18n/ko.json b/includes/api/i18n/ko.json index ed9511f284..3391708584 100644 --- a/includes/api/i18n/ko.json +++ b/includes/api/i18n/ko.json @@ -235,6 +235,7 @@ "apihelp-parse-param-preview": "미리 보기 모드에서 구문 분석을 합니다.", "apihelp-parse-param-sectionpreview": "문단 미리 보기 모드에서 구문 분석을 합니다. (미리 보기 모드도 활성화함)", "apihelp-parse-param-disabletoc": "출력에서 목차를 제외합니다.", + "apihelp-parse-param-useskin": "선택한 스킨을 파서 출력에 적용합니다. 다음의 속성에 영향을 줄 수 있습니다: langlinks, headitems, modules, jsconfigvars, indicators.", "apihelp-parse-example-page": "페이지의 구문을 분석합니다.", "apihelp-parse-example-text": "위키텍스트의 구문을 분석합니다.", "apihelp-parse-example-summary": "요약을 구문 분석합니다.", diff --git a/includes/api/i18n/pt.json b/includes/api/i18n/pt.json index 24d0246b30..36f92c31ee 100644 --- a/includes/api/i18n/pt.json +++ b/includes/api/i18n/pt.json @@ -1446,6 +1446,22 @@ "api-help-authmanagerhelper-returnurl": "O URL de retorno para processos de autenticação por terceiros tem de ser absoluto. É obrigatório fornecer este URL ou $1continue.\n\nTipicamente, após receber uma resposta REDIRECT, abrirá um ''browser'' ou uma ''web view'' para o URL redirecttarget especificado, para dar lugar ao processo de autenticação por terceiros. Quando esse processo terminar, a terceira entidade encaminhará o ''browser'' ou a ''web view'' para este URL. Deve extrair do URL quaisquer parâmetros de consulta ou de POST, e passá-los como um pedido $1continue a este módulo da API.", "api-help-authmanagerhelper-continue": "Este pedido é uma continuação após uma resposta anterior com o valor UI ou REDIRECT. É obrigatório fornecer este parâmetro ou o parâmetro $1returnurl.", "api-help-authmanagerhelper-additional-params": "Este módulo aceita parâmetros adicionais, dependendo dos pedidos de autenticação disponíveis. Use [[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]] com amirequestsfor=$1 (ou uma resposta anterior deste módulo, se aplicável) para determinar os pedidos disponíveis e os campos que estes utilizam.", + "apierror-allimages-redirect": "Usar gaifilterredir=nonredirects em vez de redirects ao utilizar allimages como gerador.", + "apierror-allpages-generator-redirects": "Usar gapfilterredir=nonredirects em vez de redirects ao utilizar allpages como gerador.", + "apierror-badgenerator-notgenerator": "O módulo $1 não pode ser usado como gerador.", + "apierror-badgenerator-unknown": "generator=$1 desconhecido.", + "apierror-badip": "O parâmetro IP não é válido.", + "apierror-badmd5": "A chave MD5 fornecida estava incorreta.", + "apierror-badmodule-badsubmodule": "O módulo $1 não tem um submódulo \"$2\".", + "apierror-badmodule-nosubmodules": "O módulo $1 não tem submódulos.", + "apierror-badparameter": "Valor inválido para o parâmetro $1.", + "apierror-badquery": "Consulta inválida.", + "apierror-badtimestamp": "Valor inválido \"$2\" para o parâmetro de data e hora $1.", + "apierror-badtoken": "Chave CSRF inválida.", + "apierror-badupload": "O parâmetro para carregamento de ficheiros $1 não é um carregamento de ficheiro; verifique que usou multipart/form-data no seu POST e inclua um nome de ficheiro no cabeçalho Content-Disposition.", + "apierror-badurl": "Valor inválido \"$2\" para o parâmetro $1 do URL.", + "apierror-baduser": "Valor inválido \"$2\" para o parâmetro de utilizador $1.", + "apierror-badvalue-notmultivalue": "O separador de valores múltiplos U+001F só pode ser usado em parâmetros de valores múltiplos.", "api-credits-header": "Créditos", "api-credits": "Programadores da API:\n* Yuri Astrakhan (criador, programador principal, set 2006–set 2007)\n* Roan Kattouw (programador principal, set 2007–2009)\n* Victor Vasiliev\n* Bryan Tong Minh\n* Sam Reed\n* Brad Jorsch (programador principal, 2013–presente)\n\nPode enviar os seus comentários, sugestões e perguntas para o endereço mediawiki-api@lists.wikimedia.org, ou reportar quaisquer defeitos que encontre em https://phabricator.wikimedia.org/." } diff --git a/includes/api/i18n/zh-hans.json b/includes/api/i18n/zh-hans.json index 5f82a78fd1..45cf70923e 100644 --- a/includes/api/i18n/zh-hans.json +++ b/includes/api/i18n/zh-hans.json @@ -354,6 +354,7 @@ "apihelp-parse-param-preview": "在预览模式下解析。", "apihelp-parse-param-sectionpreview": "在段落预览模式下解析(同时要启用预览模式)。", "apihelp-parse-param-disabletoc": "在输出中省略目录。", + "apihelp-parse-param-useskin": "为解析器输出应用选择的皮肤。会影响以下属性:langlinks、headitems、modules、jsconfigvars和indicators。", "apihelp-parse-param-contentformat": "用于输入文本的内容序列化格式。只当与$1text一起使用时有效。", "apihelp-parse-param-contentmodel": "输入文本的内容模型。如果省略,$1title必须指定,并且默认将为指定标题的模型。只当与$1text一起使用时有效。", "apihelp-parse-example-page": "解析一个页面。", diff --git a/includes/cache/MessageCache.php b/includes/cache/MessageCache.php index 8f88ee9e10..ad1fffb41b 100644 --- a/includes/cache/MessageCache.php +++ b/includes/cache/MessageCache.php @@ -220,7 +220,7 @@ class MessageCache { * @return array|bool The cache array, or false if not in cache. */ protected function getLocalCache( $code ) { - $cacheKey = wfMemcKey( __CLASS__, $code ); + $cacheKey = $this->srvCache->makeKey( __CLASS__, $code ); return $this->srvCache->get( $cacheKey ); } @@ -232,7 +232,7 @@ class MessageCache { * @param array $cache The cache array */ protected function saveToLocalCache( $code, $cache ) { - $cacheKey = wfMemcKey( __CLASS__, $code ); + $cacheKey = $this->srvCache->makeKey( __CLASS__, $code ); $this->srvCache->set( $cacheKey, $cache ); } @@ -308,7 +308,7 @@ class MessageCache { } if ( !$success ) { - $cacheKey = wfMemcKey( 'messages', $code ); # Key in memc for messages + $cacheKey = $this->clusterCache->makeKey( 'messages', $code ); # Key in memc for messages # Try the global cache. If it is empty, try to acquire a lock. If # the lock can't be acquired, wait for the other thread to finish # and then try the global cache a second time. @@ -402,7 +402,7 @@ class MessageCache { protected function loadFromDBWithLock( $code, array &$where, $mode = null ) { # If cache updates on all levels fail, give up on message overrides. # This is to avoid easy site outages; see $saveSuccess comments below. - $statusKey = wfMemcKey( 'messages', $code, 'status' ); + $statusKey = $this->clusterCache->makeKey( 'messages', $code, 'status' ); $status = $this->clusterCache->get( $statusKey ); if ( $status === 'error' ) { $where[] = "could not load; method is still globally disabled"; @@ -416,7 +416,7 @@ class MessageCache { # This lock is non-blocking so stale cache can quickly be used. # Note that load() will call a blocking getReentrantScopedLock() # after this if it really need to wait for any current thread. - $cacheKey = wfMemcKey( 'messages', $code ); + $cacheKey = $this->clusterCache->makeKey( 'messages', $code ); $scopedLock = $this->getReentrantScopedLock( $cacheKey, 0 ); if ( !$scopedLock ) { $where[] = 'could not acquire main lock'; @@ -596,7 +596,9 @@ class MessageCache { function () use ( $title, $msg, $code ) { global $wgContLang, $wgMaxMsgCacheEntrySize; // Allow one caller at a time to avoid race conditions - $scopedLock = $this->getReentrantScopedLock( wfMemcKey( 'messages', $code ) ); + $scopedLock = $this->getReentrantScopedLock( + $this->clusterCache->makeKey( 'messages', $code ) + ); if ( !$scopedLock ) { LoggerFactory::getInstance( 'MessageCache' )->error( __METHOD__ . ': could not acquire lock to update {title} ({code})', @@ -628,7 +630,7 @@ class MessageCache { // Relay the purge. Touching this check key expires cache contents // and local cache (APC) validation hash across all datacenters. - $this->wanCache->touchCheckKey( wfMemcKey( 'messages', $code ) ); + $this->wanCache->touchCheckKey( $this->wanCache->makeKey( 'messages', $code ) ); // Also delete cached sidebar... just in case it is affected // @TODO: shouldn't this be $code === $wgLanguageCode? if ( $code === 'en' ) { @@ -639,7 +641,7 @@ class MessageCache { $codes = [ $code ]; } foreach ( $codes as $code ) { - $this->wanCache->delete( wfMemcKey( 'sidebar', $code ) ); + $this->wanCache->delete( $this->wanCache->makeKey( 'sidebar', $code ) ); } // Purge the message in the message blob store @@ -684,7 +686,7 @@ class MessageCache { */ protected function saveToCaches( array $cache, $dest, $code = false ) { if ( $dest === 'all' ) { - $cacheKey = wfMemcKey( 'messages', $code ); + $cacheKey = $this->clusterCache->makeKey( 'messages', $code ); $success = $this->clusterCache->set( $cacheKey, $cache ); $this->setValidationHash( $code, $cache ); } else { @@ -707,7 +709,7 @@ class MessageCache { $value = $this->wanCache->get( $this->wanCache->makeKey( 'messages', $code, 'hash', 'v1' ), $curTTL, - [ wfMemcKey( 'messages', $code ) ] + [ $this->wanCache->makeKey( 'messages', $code ) ] ); if ( $value ) { @@ -1212,7 +1214,7 @@ class MessageCache { $langs = Language::fetchLanguageNames( null, 'mw' ); foreach ( array_keys( $langs ) as $code ) { # Global and local caches - $this->wanCache->touchCheckKey( wfMemcKey( 'messages', $code ) ); + $this->wanCache->touchCheckKey( $this->wanCache->makeKey( 'messages', $code ) ); } $this->mLoadedLanguages = []; diff --git a/includes/libs/objectcache/WANObjectCache.php b/includes/libs/objectcache/WANObjectCache.php index f0a439a21a..cb1be95586 100644 --- a/includes/libs/objectcache/WANObjectCache.php +++ b/includes/libs/objectcache/WANObjectCache.php @@ -97,6 +97,8 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface { private $callbackDepth = 0; /** @var mixed[] Temporary warm-up cache */ private $warmupCache = []; + /** @var integer Key fetched */ + private $warmupKeyMisses = 0; /** Max time expected to pass between delete() and DB commit finishing */ const MAX_COMMIT_DELAY = 3; @@ -298,10 +300,13 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface { if ( $this->warmupCache ) { $wrappedValues = array_intersect_key( $this->warmupCache, array_flip( $keysGet ) ); $keysGet = array_diff( $keysGet, array_keys( $wrappedValues ) ); // keys left to fetch + $this->warmupKeyMisses += count( $keysGet ); } else { $wrappedValues = []; } - $wrappedValues += $this->cache->getMulti( $keysGet ); + if ( $keysGet ) { + $wrappedValues += $this->cache->getMulti( $keysGet ); + } // Time used to compare/init "check" keys (derived after getMulti() to be pessimistic) $now = microtime( true ); @@ -1073,7 +1078,7 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface { * // Time-to-live (in seconds) * $cache::TTL_DAY, * // Function that derives the new key value - * return function ( $id, $oldValue, &$ttl, array &$setOpts ) { + * function ( $id, $oldValue, &$ttl, array &$setOpts ) { * $dbr = wfGetDB( DB_REPLICA ); * // Account for any snapshot/replica DB lag * $setOpts += Database::getCacheSetOptions( $dbr ); @@ -1103,22 +1108,34 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface { final public function getMultiWithSetCallback( ArrayIterator $keyedIds, $ttl, callable $callback, array $opts = [] ) { - $keysWarmUp = iterator_to_array( $keyedIds, true ); $checkKeys = isset( $opts['checkKeys'] ) ? $opts['checkKeys'] : []; + + $keysWarmUp = []; + // Get all the value keys to fetch... + foreach ( $keyedIds as $key => $id ) { + $keysWarmUp[] = self::VALUE_KEY_PREFIX . $key; + } + // Get all the check keys to fetch... foreach ( $checkKeys as $i => $checkKeyOrKeys ) { if ( is_int( $i ) ) { - $keysWarmUp[] = $checkKeyOrKeys; + // Single check key that applies to all value keys + $keysWarmUp[] = self::TIME_KEY_PREFIX . $checkKeyOrKeys; } else { - $keysWarmUp = array_merge( $keysWarmUp, $checkKeyOrKeys ); + // List of check keys that apply to value key $i + $keysWarmUp = array_merge( + $keysWarmUp, + self::prefixCacheKeys( $checkKeyOrKeys, self::TIME_KEY_PREFIX ) + ); } } $this->warmupCache = $this->cache->getMulti( $keysWarmUp ); $this->warmupCache += array_fill_keys( $keysWarmUp, false ); + $this->warmupKeyMisses = 0; // Wrap $callback to match the getWithSetCallback() format while passing $id to $callback $id = null; - $func = function ( $oldValue, &$ttl, array $setOpts, $oldAsOf ) use ( $callback, &$id ) { + $func = function ( $oldValue, &$ttl, array &$setOpts, $oldAsOf ) use ( $callback, &$id ) { return $callback( $id, $oldValue, $ttl, $setOpts, $oldAsOf ); }; @@ -1316,6 +1333,14 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface { return (int)min( $maxTTL, max( $minTTL, $factor * $age ) ); } + /** + * @return integer Number of warmup key cache misses last round + * @since 1.30 + */ + public function getWarmupKeyMisses() { + return $this->warmupKeyMisses; + } + /** * Do the actual async bus purge of a key * diff --git a/includes/libs/rdbms/database/DatabasePostgres.php b/includes/libs/rdbms/database/DatabasePostgres.php index f84ffa9b12..2fe275b5c1 100644 --- a/includes/libs/rdbms/database/DatabasePostgres.php +++ b/includes/libs/rdbms/database/DatabasePostgres.php @@ -776,7 +776,7 @@ __INDEXATTR__; $safeseq = str_replace( "'", "''", $seqName ); $res = $this->query( "SELECT nextval('$safeseq')" ); $row = $this->fetchRow( $res ); - $this->mInsertId = $row[0]; + $this->mInsertId = is_null( $row[0] ) ? null : (int)$row[0]; return $this->mInsertId; } diff --git a/includes/page/WikiPage.php b/includes/page/WikiPage.php index e5356171a6..7489f44627 100644 --- a/includes/page/WikiPage.php +++ b/includes/page/WikiPage.php @@ -1177,7 +1177,7 @@ class WikiPage implements Page, IDBAccessObject { ); if ( $dbw->affectedRows() > 0 ) { - $newid = $pageId ?: $dbw->insertId(); + $newid = $pageId ? (int)$pageId : $dbw->insertId(); $this->mId = $newid; $this->mTitle->resetArticleID( $newid ); diff --git a/languages/data/Names.php b/languages/data/Names.php index d1715d2917..76ced3e4a6 100644 --- a/languages/data/Names.php +++ b/languages/data/Names.php @@ -222,6 +222,7 @@ class Names { 'kab' => 'Taqbaylit', # Kabyle 'kbd' => 'Адыгэбзэ', # Kabardian 'kbd-cyrl' => 'Адыгэбзэ', # Kabardian (Cyrillic) + 'kbp' => 'Kabɩyɛ', # Kabiyè 'kg' => 'Kongo', # Kongo, (FIXME!) should probaly be KiKongo or KiKoongo 'khw' => 'کھوار', # Khowar 'ki' => 'Gĩkũyũ', # Gikuyu diff --git a/languages/i18n/ast.json b/languages/i18n/ast.json index 298a0cce37..9477067037 100644 --- a/languages/i18n/ast.json +++ b/languages/i18n/ast.json @@ -1303,10 +1303,11 @@ "recentchanges-submit": "Amosar", "rcfilters-activefilters": "Filtros activos", "rcfilters-quickfilters": "Enllaces rápidos", + "rcfilters-quickfilters-placeholder": "Guarda la configuración favorita de la ferramienta pa volver a usala sero.", "rcfilters-savedqueries-defaultlabel": "Filtros guardaos", "rcfilters-savedqueries-rename": "Renomar", "rcfilters-savedqueries-setdefault": "Guardar como predeterminao", - "rcfilters-savedqueries-unsetdefault": "Desactivar predeterminao", + "rcfilters-savedqueries-unsetdefault": "Quitar predeterminao", "rcfilters-savedqueries-remove": "Desaniciar", "rcfilters-savedqueries-new-name-label": "Nome", "rcfilters-savedqueries-apply-label": "Crear enllaz rápidu", @@ -3731,6 +3732,8 @@ "mw-widgets-titleinput-description-redirect": "redirixir a $1", "mw-widgets-categoryselector-add-category-placeholder": "Amestar una categoría...", "mw-widgets-usersmultiselect-placeholder": "Amestar más...", + "date-range-from": "Dende la data:", + "date-range-to": "Ata la data:", "sessionmanager-tie": "Nun puen combinase dellos tipos de solicitú d'identificación: $1.", "sessionprovider-generic": "sesiones $1", "sessionprovider-mediawiki-session-cookiesessionprovider": "sesiones basaes en cookies", @@ -3868,7 +3871,7 @@ "rawhtml-notallowed": "Les etiquetes <html> nun pueden usase fuera de les páxines normales.", "gotointerwiki": "Dexando {{SITENAME}}", "gotointerwiki-invalid": "El títulu especificáu nun ye válidu.", - "gotointerwiki-external": "Tas a piques de dexar {{SITENAME}} pa visitar [[$2]], que ye un sitiu web distintu.\n\n[$1 Fai click equí pa siguir a $1].", + "gotointerwiki-external": "Tas a piques de dexar {{SITENAME}} pa visitar [[$2]], que ye un sitiu web distintu.\n\n'''[$1 Siguir a $1]'''", "undelete-cantedit": "Nun puedes desfacer el borráu d'esta páxina porque nun tienes permisu pa editala.", "undelete-cantcreate": "Nun puedes desfacer el borráu d'esta páxina porque nun existe nenguna páxina con esti nome y nun tienes permisu pa creala." } diff --git a/languages/i18n/atj.json b/languages/i18n/atj.json index cdc89b5e08..28e82c20b7 100644 --- a/languages/i18n/atj.json +++ b/languages/i18n/atj.json @@ -11,6 +11,8 @@ "Catrope" ] }, + "underline-always": "Mocak", + "underline-never": "Nama wiskat", "sunday": "manactakaniwon", "monday": "ockorkananiwon", "tuesday": "nicw kicikaw", @@ -73,6 +75,8 @@ "october-date": "Namekosi pisimw $1", "november-date": "Atikamekw pisimw $1", "december-date": "Pitcipipon pisimw $1", + "period-am": "E pwamici apita kicikak", + "period-pm": "E ickwa apita kicikak", "pagecategories": "{{PLURAL:$1|Ka ici arimotcikatek|Ka ici arimotcikateki}}", "category_header": "Masinahikana ka ici arimotcikateki \"$1\"", "subcategories": "Awocamec ke ici arimotcikateki", @@ -92,6 +96,8 @@ "and": " kaie", "qbbrowse": "Nantowepaha", "qbedit": "Meckotcita", + "qbpageoptions": "Nohwe paskickwemakan", + "qbmyoptions": "Nipaskickwemakana", "namespaces": "Ka ici masinasotcik", "variants": "Pitoc", "navigation-heading": "Matcecikinikana", diff --git a/languages/i18n/be-tarask.json b/languages/i18n/be-tarask.json index 649d68c9b7..27c3f7dc44 100644 --- a/languages/i18n/be-tarask.json +++ b/languages/i18n/be-tarask.json @@ -1384,6 +1384,7 @@ "rcfilters-typeofchange-conflicts-hideminor": "Гэты фільтар тыпаў зьменаў канфліктуе зь фільтрам «Дробныя праўкі». Некаторыя тыпы зьменаў ня могуць быць вызначаныя як «дробныя».", "rcfilters-filtergroup-lastRevision": "Цяперашняя вэрсія", "rcfilters-filter-lastrevision-label": "Апошняя вэрсія", + "rcfilters-filter-lastrevision-description": "Апошняя зьмена на старонцы.", "rcnotefrom": "Ніжэй {{PLURAL:$5|знаходзіцца зьмена|знаходзяцца зьмены}} з $4 $3 (да $1 на старонку).", "rclistfromreset": "Скінуць выбар даты", "rclistfrom": "Паказаць зьмены з $2 $3", diff --git a/languages/i18n/bg.json b/languages/i18n/bg.json index 6eb3d4f629..ccdb1f289e 100644 --- a/languages/i18n/bg.json +++ b/languages/i18n/bg.json @@ -630,7 +630,7 @@ "anonpreviewwarning": "Внимание: Не сте влезли в системата. Ако съхраните редакцията си, тя ще бъде записана в историята на страницата с вашият IP-адрес.", "missingsummary": "'''Напомняне:''' Не е въведено кратко описание на промените. При повторно натискане на бутона „Съхраняване“, редакцията ще бъде съхранена без резюме.", "missingcommenttext": "По-долу въведете вашето съобщение.", - "missingcommentheader": "Напомняне: Не е въведено заглавие на коментара.\nПри повторно натискане на „$1“, редакцията ще бъде записана без такова.", + "missingcommentheader": "Напомняне: Не е въведено заглавие на коментара.\nПри повторно натискане на „$1“, редакцията ще бъде записана без коментар.", "summary-preview": "Предварителен преглед на резюмето:", "subject-preview": "Предварителен преглед на заглавието:", "previewerrortext": "Възникна грешка при опита за преглед на промените.", @@ -653,7 +653,7 @@ "noarticletext": "Понастоящем няма текст на тази страница. Можете да [[Special:Search/{{PAGENAME}}|потърсите за заглавието на страницата]] в други страници, да [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} потърсите в съответните дневници] или [{{fullurl:{{FULLPAGENAME}}|action=edit}} да я създадете].", "noarticletext-nopermission": "Понастоящем в тази страница няма текст.\nМожете да [[Special:Search/{{PAGENAME}}|потърсите заглавието на тази страница ]] в други страници или да [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} потърсите в съответните дневници], но нямате права да създадете тази страница.", "missing-revision": "Версия #$1 на страницата „{{FULLPAGENAME}}“ не съществува.\n\nТова обикновено се дължи на препратка от историята на страницата, която е била изтрита.\nПодробности могат да бъдат открити в [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} дневника на изтриванията].", - "userpage-userdoesnotexist": "Няма регистрирана потребителска сметка за „$1“. Изисква се потвърждение, че желаете да създадете/редактирате тази страница?", + "userpage-userdoesnotexist": "Няма регистрирана потребителска сметка за „$1“. Моля потвърдете, че желаете да създадете/редактирате тази страница.", "userpage-userdoesnotexist-view": "Не е регистрирана потребителска сметка на име „$1“.", "blocked-notice-logextract": "В момента този потребител е блокиран.\nПо-долу за справка е показан последният запис от Дневника на блокиранията:", "clearyourcache": "Забележка: За да се видят промените, необходимо е след съхраняване на страницата, кешът на браузъра да бъде изтрит.\n* Firefox / Safari: Задържа се клавиш Shift и се щраква върху Презареждане (Reload) или чрез клавишната комбинация Ctrl-F5 or Ctrl-R (⌘-R за Mac);\n* Google Chrome: клавишна комбинация Ctrl-Shift-R (⌘-Shift-R за Mac)\n* Internet Explorer: Задържа се клавиш Ctrl и се щраква върху Refresh или чрез клавишната комбинация Ctrl-F5;\n* Opera: кешът се изчиства през менюто Tools → Settings (Opera → Preferences за Mac) след което Privacy & security → Clear browsing data → Cached images and files.", @@ -2171,6 +2171,10 @@ "unblocked-id": "Блок № $1 беше премахнат", "unblocked-ip": "[[Special:Contributions/$1|$1]] е отблокиран.", "blocklist": "Блокирани потребители", + "autoblocklist": "Автоматични блокирания", + "autoblocklist-submit": "Търсене", + "autoblocklist-localblocks": "{{PLURAL:$1|Локално автоматично блокиране|Локални автоматични блокирания}}", + "autoblocklist-empty": "Списъкът на автоматичните блокирания е празен.", "ipblocklist": "Блокирани потребители", "ipblocklist-legend": "Търсене на блокиран потребител", "blocklist-userblocks": "Скриване на блокирани потребителски сметки", @@ -2498,7 +2502,7 @@ "pageinfo-header-properties": "Характеристики на страницата", "pageinfo-display-title": "Показвано заглавие", "pageinfo-default-sort": "Ключ за сортиране по подразбиране", - "pageinfo-length": "Големина на страницата (в байтове)", + "pageinfo-length": "Размер на страницата (в байтове)", "pageinfo-article-id": "Номер на страницата", "pageinfo-language": "Език на съдържанието на страницата", "pageinfo-language-change": "промяна", diff --git a/languages/i18n/bn.json b/languages/i18n/bn.json index 9e37a6410f..1d631101e9 100644 --- a/languages/i18n/bn.json +++ b/languages/i18n/bn.json @@ -3957,7 +3957,7 @@ "rawhtml-notallowed": "<html> ট্যাগ স্বাভাবিক পৃষ্ঠাগুলির বাহিরে ব্যবহার করা যাবে না।", "gotointerwiki": "{{SITENAME}} ছেড়ে যাচ্ছেন", "gotointerwiki-invalid": "নিদিষ্টকৃত শিরোনামটি অবৈধ ছিল।", - "gotointerwiki-external": "আপনি [[$2]] পরিদর্শন করতে {{SITENAME}} ছাড়তে চলেছেন যা একটি ভিন্ন ওয়েবসাইট।\n\n[$1 $1-এ অবিরত থাকতে এখানে ক্লিক করুন]।", + "gotointerwiki-external": "আপনি [[$2]] পরিদর্শন করতে {{SITENAME}} ছাড়তে চলেছেন যা একটি ভিন্ন ওয়েবসাইট।\n\n'''[$1 $1-এ চলুন]'''", "undelete-cantedit": "আপনি এই পাতাটি ফিরিয়ে আনতে পারবেন না কারণ আপনার এই পাতাটি সম্পাদনা করার অনুমতি নেই।", "undelete-cantcreate": "আপনি এই পাতাটি ফিরিয়ে আনতে পারবেন না কারণ এই নামে কোন পাতা বিদ্যমান নেই ও আপনার এই পাতাটি তৈরি করার অনুমতি নেই।" } diff --git a/languages/i18n/bs.json b/languages/i18n/bs.json index d56a376149..a5d58aae2a 100644 --- a/languages/i18n/bs.json +++ b/languages/i18n/bs.json @@ -25,7 +25,8 @@ "Semso98", "Matma Rex", "Сербијана", - "Asmen" + "Asmen", + "Obsuser" ] }, "tog-underline": "Podvlačenje linkova:", @@ -3620,12 +3621,12 @@ "limitreport-walltime-value": "$1 {{PLURAL:$1|sekunda|sekunde|sekundi}}", "limitreport-ppvisitednodes": "Broj predprocesiranih posjećenih nodova", "limitreport-ppgeneratednodes": "Broj predprocesiranih generiranih nodova", - "limitreport-postexpandincludesize": "Nakon proširenja navedi i veličinu", + "limitreport-postexpandincludesize": "Uključena veličina nakon proširenja", "limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|bajt|bajta|bajtova}}", - "limitreport-templateargumentsize": "Veličina stavke šablona", + "limitreport-templateargumentsize": "Veličina argumenata šablona", "limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|bajt|bajta|bajtova}}", "limitreport-expansiondepth": "Najveća dubina proširenja", - "limitreport-expensivefunctioncount": "Broj funkcije ekspenzivnog analizatora", + "limitreport-expensivefunctioncount": "Broj složenih funkcija raščlanjivača", "expandtemplates": "Proširi šablone", "expand_templates_intro": "Ova posebna stranica uzima neki tekst i proširuje sve šablone u njemu rekurzivno.\nOna također proširuje parserske funkcije poput\n{{#language:…}} i varijable poput\n{{CURRENTDAY}}. U principu proširuje gotovo sve između dvostrukih zagrada.", "expand_templates_title": "Naslov konteksta, za {{FULLPAGENAME}} itd.:", diff --git a/languages/i18n/en.json b/languages/i18n/en.json index cc60432627..22f274555d 100644 --- a/languages/i18n/en.json +++ b/languages/i18n/en.json @@ -1366,7 +1366,8 @@ "recentchanges-submit": "Show", "rcfilters-activefilters": "Active filters", "rcfilters-quickfilters": "Quick links", - "rcfilters-quickfilters-placeholder": "Save your favorite tool settings to re-use them later.", + "rcfilters-quickfilters-placeholder-title": "No links saved yet", + "rcfilters-quickfilters-placeholder-description": "To save your filter settings and reuse them later, click the bookmark icon in the Active Filter area, below.", "rcfilters-savedqueries-defaultlabel": "Saved filters", "rcfilters-savedqueries-rename": "Rename", "rcfilters-savedqueries-setdefault": "Set as default", diff --git a/languages/i18n/es.json b/languages/i18n/es.json index 598d9535d5..91a72a9365 100644 --- a/languages/i18n/es.json +++ b/languages/i18n/es.json @@ -1450,7 +1450,7 @@ "rcfilters-savedqueries-defaultlabel": "Filtros guardados", "rcfilters-savedqueries-rename": "Cambiar nombre", "rcfilters-savedqueries-setdefault": "Activar por defecto", - "rcfilters-savedqueries-unsetdefault": "Desactivar por defecto", + "rcfilters-savedqueries-unsetdefault": "Eliminar por defecto", "rcfilters-savedqueries-remove": "Eliminar", "rcfilters-savedqueries-new-name-label": "Nombre", "rcfilters-savedqueries-apply-label": "Crear enlace rápido", @@ -4029,7 +4029,7 @@ "rawhtml-notallowed": "No se pueden emplear las etiquetas <html> si no es en las páginas normales.", "gotointerwiki": "Salir de {{SITENAME}}", "gotointerwiki-invalid": "El título especificado no es válido.", - "gotointerwiki-external": "Estás a punto de abandonar {{SITENAME}} para visitar [[$2]], un sitio web separado.\n\n[$1 Continuar a $1].", + "gotointerwiki-external": "Estás a punto de abandonar {{SITENAME}} para visitar [[$2]], un sitio web diferente.\n\n'''[$1 Continuar a $1]'''", "undelete-cantedit": "No puedes deshacer el borrado de esta página porque no tienes permisos para editarla.", "undelete-cantcreate": "No puedes deshacer el borrado de esta página porque no existe ninguna página con este nombre y no tienes permisos para crearla." } diff --git a/languages/i18n/fa.json b/languages/i18n/fa.json index 25e90e21f8..fd286e3aa9 100644 --- a/languages/i18n/fa.json +++ b/languages/i18n/fa.json @@ -1350,10 +1350,11 @@ "recentchanges-submit": "نمایش", "rcfilters-activefilters": "پالایه‌های فعال", "rcfilters-quickfilters": "پیوندهای سریع", + "rcfilters-quickfilters-placeholder": "تنظیمات ابزار مورد علاقه‌تان را برای استفاده مجدد در زمانی دیگر، ذخیره کنید.", "rcfilters-savedqueries-defaultlabel": "پالایه‌های ذخیره‌شده", "rcfilters-savedqueries-rename": "تغییر نام", "rcfilters-savedqueries-setdefault": "تنظیم به عنوان پیش‌فرض", - "rcfilters-savedqueries-unsetdefault": "به در آوردن از پیش‌فرض", + "rcfilters-savedqueries-unsetdefault": "حذف از پیش‌فرض", "rcfilters-savedqueries-remove": "حذف", "rcfilters-savedqueries-new-name-label": "نام", "rcfilters-savedqueries-apply-label": "ایجاد پیوند سریع", @@ -3831,6 +3832,8 @@ "mw-widgets-titleinput-description-redirect": "تغییر مسیر به $1", "mw-widgets-categoryselector-add-category-placeholder": "در حال افزودن رده ...", "mw-widgets-usersmultiselect-placeholder": "افزودن بیشتر...", + "date-range-from": "از تاریخ:", + "date-range-to": "تا تاریخ:", "sessionmanager-tie": "نمی‌توان چندین نوع درخواست هویت‌سنجی را ترکیب کرد: $1.", "sessionprovider-generic": "$1 فصل", "sessionprovider-mediawiki-session-cookiesessionprovider": "فصل‌های کوکی‌محور", @@ -3967,8 +3970,8 @@ "pageid": "شناسهٔ صفحهٔ $1", "rawhtml-notallowed": "برچسب‌های <html> را نمی‌توان خارج از صفحه‌های معمولی استفاده کرد.", "gotointerwiki": "در حال ترک {{SITENAME}}", - "gotointerwiki-invalid": "عنوان مشخص شده نامجاز بود.", - "gotointerwiki-external": "شما در حال ترک {{SITENAME}} هستید تا [[$2]] را ببینید که یک وب‌گاه مجزا است.\n\n[$1 اینجا کلیک کنید تا به $1 بروید]", + "gotointerwiki-invalid": "عنوان مشخص شده نامجاز است.", + "gotointerwiki-external": "شما در حال ترک {{SITENAME}} هستید تا [[$2]] را ببینید که یک وب‌گاه مجزا است.\n\n'''[$1 ادامه تا $1]'''", "undelete-cantedit": "شما نمی‌توانید این صفحه را احیا کنید چون مجاز به ویرایش این صفحه نیستید.", "undelete-cantcreate": "شما نمی‌توانید این صفحه را احیا کنید چرا که صفحه‌ای به این نام همینک وجود ندارد و شما مجاز به ساختن آن نیستید." } diff --git a/languages/i18n/fr.json b/languages/i18n/fr.json index f06dc25c7a..a42f9ea966 100644 --- a/languages/i18n/fr.json +++ b/languages/i18n/fr.json @@ -3393,7 +3393,7 @@ "confirmrecreate": "L’utilisat{{GENDER:$1|eur|rice}} [[User:$1|$1]] ([[User talk:$1|Discussion]]) a supprimé cette page, alors que vous aviez commencé à la modifier, pour le motif suivant :\n: $2\nVeuillez confirmer que vous désirez réellement recréer cette page.", "confirmrecreate-noreason": "L’utilisat{{GENDER:$1|eur|rice}} [[User:$1|$1]] ([[User talk:$1|Discussion]]) a supprimé cette page, alors que vous aviez commencé à la modifier. Veuillez confirmer que vous désirez réellement recréer cette page.", "recreate": "Recréer", - "confirm-purge-title": "Détruire cette page", + "confirm-purge-title": "Purger cette page", "confirm_purge_button": "Confirmer", "confirm-purge-top": "Voulez-vous rafraîchir cette page (purger le cache) ?", "confirm-purge-bottom": "Purger une page l’efface du cache et force sa dernière version à être affichée.", diff --git a/languages/i18n/fy.json b/languages/i18n/fy.json index 7c09f8d8a0..09762bf6e4 100644 --- a/languages/i18n/fy.json +++ b/languages/i18n/fy.json @@ -244,7 +244,7 @@ "privacypage": "Project:Privacybelied", "badaccess": "Gjin tastimming", "badaccess-group0": "Jo hawwe gjin rjochten om de frege hanneling út te fieren.", - "badaccess-groups": "De frege hanneling is foarbehâlden oan brûkers yn {{PLURAL:$2|'e groep|ien fan de groepen}}: $1.", + "badaccess-groups": "De frege hanneling is foarbehâlden oan meidoggers yn {{PLURAL:$2|'e groep|ien fan de groepen}}: $1.", "versionrequired": "Ferzje $1 fan MediaWiki is eask", "versionrequiredtext": "Ferzje $1 fan MediaWiki is eask om dizze side te brûken. Mear ynfo is beskikber op 'e side [[Special:Version|softwareferzje]].", "ok": "OK", @@ -481,7 +481,7 @@ "preview": "Oerlêze", "showpreview": "Earst oerlêze", "showdiff": "Wizigings", - "anoneditwarning": "Warskôging: Jo binne net oanmeld. By it fêstlizzen wurdt jo ynternetadres opnaam yn de sideskiednis.", + "anoneditwarning": "Warskôging: Jo binne net oanmeld. By it fêstlizzen wurdt jo ynternetadres opnaam yn de sideskiednis. At jo [$1 oanmelde] of [$2 in akkount oanmeitsje] ferskine jo bewurkingen ûnder jo meidochnamme, njonken oare foardielen.", "missingsummary": "Tink derom: Jo hawwe gjin gearfetting jûn foar jo bewurking.\nAs jo nochris op ''Side opslaan'' klikke wurdt de bewurking sûnder gearfetting opslein.", "missingcommenttext": "Set jo opmerking beleaven hjir ûnder.", "missingcommentheader": "Tink derom: Jo hawwe gjin ûnderwerp/kop foar dizze opmerking opjûn.\ns jo op 'e nij op \"opslaan\" klikke, wurdt jo feroaring sûnder in ûnderwerp/kop opslein.", @@ -502,7 +502,7 @@ "accmailtext": "Samar in wachtwurd foar [[User talk:$1|$1]] is ferstjoerd nei $2. It kin wizige wurde op 'e side \n[[Special:ChangePassword|Wachtwurd feroarje]] nei oanmelden.", "newarticle": "(Nij)", "newarticletext": "Jo hawwe in keppeling folge nei in side dêr't noch gjin tekst op stiet.\nOm sels tekst te meistjsen kinne jo dy gewoan yntype in dit bewurkingsfjild\n([$1 Mear ynformaasje oer bewurkjen].)\nOars kinne jo tebek mei de tebek-knop fan jo blêder.", - "anontalkpagetext": "----''Dit is de oerlisside fan in ûnbekende meidogger; in meidogger dy't him/har net oanmeld hat. Om't der gjin namme bekend is, wurdt it ynternet-adres brûkt om oan te jaan wa. Mar faak is it sa dat sa'n adres net altyd troch deselde persoan brûkt wurdt. As jo it idee hawwe dat jo as ûnbekende meidogger opmerkings foar in oar krije, dan kinne jo jo [[Special:CreateAccount|registrearje]], of jo [[Special:UserLogin|oanmelde]]. Fan in oanmelde meidogger is it ynternet-adres net sichtber, en as oanmelde meidogger krije jo allinnich opmerkings dy't foar josels bedoeld binne.''", + "anontalkpagetext": "----\nDit is de oerlisside fan in ûnbekende meidogger; in meidogger dy't him/har net oanmeld hat.\nOm't der gjin namme bekend is, wurdt it ynternet-adres brûkt om oan te jaan om wa't it giet.\nMar faak is it sa dat sa'n adres net altyd troch deselde persoan brûkt wurdt.\nAs jo it idee hawwe dat jo as ûnbekende meidogger opmerkings foar in oar krije, dan kinne jo jo [[Special:CreateAccount|registrearje]], of jo [[Special:UserLogin|oanmelde]]. Fan in oanmelde meidogger is it ynternet-adres net sichtber, en as oanmelde meidogger krije jo allinnich opmerkings dy't foar josels bedoeld binne.", "noarticletext": "Der stjit noch gjin tekst op dizze side. Jo kinne\n[[Special:Search/{{PAGENAME}}|hjirboppe nei dy tekst sykje]], of [{{fullurl:{{FULLPAGENAME}}|action=edit}} de side skriuwe].", "userpage-userdoesnotexist": "Jo bewurkje in brûkersside fan in brûker dy't net bestiet (brûker \"$1\").\nKontrolearje oft jo dizze side wol oanmeitsje/bewurkje wolle.", "clearyourcache": "Opmerking: Nei it fêstlizzen kin it nedich wêze de oerslach fan dyn blêder te leegjen foardat de wizigings te sjen binne.\n* Firefox / Safari: Hâld Shift yntreaun wylst jo op Dizze side fernije klikke, of typ Ctrl-F5 of Ctrl-R (⌘-R op in Mac)\n* Google Chrome: Typ CTRL-Shift-R (⌘-Shift-R op in Mac)\n* Internet Explorer: Hâld Ctrl yntreaun wylst jo Vernieuwen'' klikke of typ Ctrl-F5\n* Opera: Leegje jo cache yn Extra → Voorkeuren", @@ -757,7 +757,7 @@ "timezoneregion-europe": "Jeropa", "timezoneregion-indian": "Yndyske Oseaan", "timezoneregion-pacific": "Stille Oseaan", - "allowemail": "Lit my ek netpost fan oare meidoggers krije", + "allowemail": "Lit my ek e-mail fan oare meidoggers ûntfange", "prefs-searchoptions": "Sykje", "prefs-namespaces": "Nammeromten", "default": "standert", @@ -1349,7 +1349,7 @@ "rollbacklink": "feroaring werom sette", "rollbackfailed": "Feroaring werom sette net slagge", "cantrollback": "Dizze feroaring kin net werom setten wurde, om't der mar ien skriuwer is.", - "alreadyrolled": "Kin de feroaring fan [[:$1]]\ntroch [[User:$2|$2]] ([[User talk:$2|Oerlis]]) net werom sette;\nin oar hat de feroaring werom set, of oars wat oan de side feroare.\n\nDe lêste feroaring wie fan [[User:$3|$3]] ([[User talk:$3|Oerlis]]).", + "alreadyrolled": "Kin de feroaring fan [[:$1]] troch [[User:$2|$2]] ([[User talk:$2|oerlis]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) net werom sette;\nin oar hat de feroaring werom set, of oars wat oan de side feroare.\n\nDe lêste feroaring wie fan [[User:$3|$3]] ([[User talk:$3|oerlis]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).", "editcomment": "De gearfetting wie: $1.", "revertpage": "Bewurkings fan [[Special:Contributions/$2|$2]] ([[User talk:$2|Oerlis]]) werom set ta de ferzje fan [[User:$1|$1]]", "rollback-success": "Feroarings werom set fan $1; werom set nei de lêste ferzje fan $2.", @@ -1414,7 +1414,7 @@ "undelete-show-file-submit": "Ja", "namespace": "Nammeromte:", "invert": "Seleksje útsein", - "blanknamespace": "(Haadnammerûmte)", + "blanknamespace": "(Ensyklopedy)", "contributions": "{{GENDER:$1|Meidogger}}-bydragen", "contributions-title": "Bydragen fan $1", "mycontris": "Bydragen", @@ -1462,7 +1462,7 @@ "ipbsubmit": "Slút dizze meidogger út", "ipbother": "In oare tiid:", "ipboptions": "2 oeren:2 hours,1 dei:1 day,3 dagen:3 days,1 wike:1 week,2 wiken:2 weeks,1 moanne:1 month,3 moanne:3 months,6 moanne:6 months,1 jier:1 year,ûnbeheind:infinite", - "badipaddress": "Gjin jildige IP-adres", + "badipaddress": "Gjin jildich IP-adres", "blockipsuccesssub": "Utsluting slagge", "blockipsuccesstext": "Meidogger [[Special:Contributions/$1|$1]] is útsletten.
\n(List fan [[Special:BlockList|útslette meidoggers]].)", "ipb-unblock-addr": "Lit $1 yn", @@ -1534,7 +1534,7 @@ "allmessagesname": "Namme", "allmessagesdefault": "Standerttekst", "allmessagescurrent": "Tekst yn de nijste ferzje", - "allmessagestext": "Dit is in list fan alle systeemberjochten beskikber yn de MediaWiki-nammeromte.\nSjoch: [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation MediaWiki Localisation], [https://translatewiki.net translatewiki.net].", + "allmessagestext": "Dit is in list fan alle systeemberjochten beskikber yn de MediaWiki-nammeromte.\nSjoch [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation MediaWiki Localisation] en [https://translatewiki.net translatewiki.net] at jo bydrage wolle oan de basisoersettings fan MediaWiki.", "allmessages-filter-legend": "Filter", "allmessages-filter-all": "Alle", "allmessages-language": "Taal:", diff --git a/languages/i18n/id.json b/languages/i18n/id.json index 3d89afe3da..73398afc43 100644 --- a/languages/i18n/id.json +++ b/languages/i18n/id.json @@ -52,7 +52,8 @@ "Irus", "Presidenvolksraad", "Hidayatsrf", - "MF-Warburg" + "MF-Warburg", + "Rachmat04" ] }, "tog-underline": "Garis bawahi pranala:", diff --git a/languages/i18n/lij.json b/languages/i18n/lij.json index 27983677ad..c0aa4ee899 100644 --- a/languages/i18n/lij.json +++ b/languages/i18n/lij.json @@ -749,6 +749,8 @@ "post-expand-template-argument-warning": "'''Atençión:''' sta pàgina a contegne un ò ciù argomenti di template che son tròppo gràndi pe êse espansi. Sti argomenti no saiàn fæti védde.", "post-expand-template-argument-category": "Pàgine con di template che ghe mancàn di argoménti", "parser-template-loop-warning": "Rilevou loop do template: [[$1]]", + "template-loop-category": "Paggine con di template che se reciamman da lô", + "template-loop-category-desc": "A paggina a conten un template ch'o se reciamma da lê, saiv'a dî un template into quæ gh'è incruzo o template mæximo.", "parser-template-recursion-depth-warning": "Limmite de ricorscion into template superòu($1)", "language-converter-depth-warning": "Limmite de profonditæ do convertitô de lengoa superòu ($1)", "node-count-exceeded-category": "Paggine dovve l'è superòu o nummero di groppi.", @@ -783,8 +785,8 @@ "page_first": "primma", "page_last": "ûrtima", "histlegend": "Confronto tra verscioîn: selession-a e cascette corispondenti a-e verscioîn dexidiæ e schissa Invio oppû o pomello da basso.\n\nLegenda: (corr) = differense co-a verscion corrente, (prec) = differense co-a verscion precedente, '''m''' = modiffica minô", - "history-fieldset-title": "Véddi a stöia", - "history-show-deleted": "Sôlo scancelæ", + "history-fieldset-title": "Çerca de verscioin", + "history-show-deleted": "Solo verscioin scassæ", "histfirst": "primma", "histlast": "urtima", "historysize": "({{PLURAL:$1|1 byte|$1 byte}})", @@ -937,9 +939,10 @@ "search-file-match": "(corrispondença into contegnuo do file)", "search-suggest": "Fòscia ti voéivi: $1", "search-rewritten": "Mostro i risultæ pe $1. Atrimenti, çerca $2.", - "search-interwiki-caption": "Progetti fræ", + "search-interwiki-caption": "Risultæ da-i progetti fræ", "search-interwiki-default": "Risultæ da $1:", "search-interwiki-more": "(atro)", + "search-interwiki-more-results": "atri risultæ", "search-relatedarticle": "corelæ", "searchrelated": "corelæ", "searchall": "tùtti", @@ -1029,6 +1032,7 @@ "youremail": "Indirìsso email:", "username": "{{GENDER:$1|Nomme utente}}:", "prefs-memberingroups": "{{GENDER:$2|Membro}} {{PLURAL:$1|do gruppo|di gruppi}}:", + "group-membership-link-with-expiry": "$1 (scin a $2)", "prefs-registration": "Dæta de registraçion:", "yourrealname": "Nomme vêo:", "yourlanguage": "Léngoa:", @@ -1067,18 +1071,18 @@ "prefs-help-prefershttps": "Questa preferença a l'aviâ effetto da-o proscimo accesso.", "prefswarning-warning": "T'hæ fæto de modiffiche a-e teu preferense che no son ancon stæte sarvæ.\nSe ti sciorti da sta paggina sensa sciaccâ \"$1\" e preferense no saian agiornæ.", "prefs-tabs-navigation-hint": "Suggeimento: ti peu deuviâ i pomelli co-a freccia scinistra e drita pe navegâ tra e schede inta lista de schede.", - "userrights": "Manezzo di driti di utenti", + "userrights": "Driti utente", "userrights-lookup-user": "Seleçion-a un utente", "userrights-user-editname": "Scrivi o teu nomme utente:", "editusergroup": "Carrega groppi utente", "editinguser": "Apreuvo a cangiâ i driti de l'{{GENDER:$1|utente}} [[User:$1|$1]] $2", "viewinguserrights": "Vixualizaçion di driti de l'{{GENDER:$1|utente}} [[User:$1|$1]] $2", - "userrights-editusergroup": "Modiffica i gruppi di utenti", - "userrights-viewusergroup": "Vixualizza groppi utente", + "userrights-editusergroup": "Modiffica groppi {{GENDER:$1|utente}}", + "userrights-viewusergroup": "Vixualizza groppi {{GENDER:$1|utente}}", "saveusergroups": "Sarva groppi {{GENDER:$1|utente}}", "userrights-groupsmember": "Membro de:", "userrights-groupsmember-auto": "Membro impliçito de:", - "userrights-groups-help": "L'è poscibile modificâ i groppi de st'utente:\n* Una casella marcâ voeu dî che l'utente o l'è inte quello groppo.\n* Una casella smarcâ voeu dî che l'utente o no l'è inte quello groppo.\n* O scimbolo * o voeu dî che no ti poeu smarcâ o groppo una votta che ti l'hæ azonto (ò viçeversa).", + "userrights-groups-help": "L'è poscibile modificâ i groppi de st'utente:\n* Una casella marcâ voeu dî che l'utente o l'è inte quello groppo.\n* Una casella smarcâ voeu dî che l'utente o no l'è inte quello groppo.\n* O scimbolo * o voeu dî che no ti poeu smarcâ o groppo una votta che ti l'hæ azonto (ò viçeversa).\n* O scimbolo # o l'indica che ti poeu solo portâ inderê a dæta da descheita de l'inscriçion a questo groppo; no l'è poscibbile portala avanti", "userrights-reason": "Raxon:", "userrights-no-interwiki": "No ti g'hæ i permissi pe modificâ i driti di utenti insce di atre wiki.", "userrights-nodatabase": "O database $1 o no l'esiste ò o no l'è un database locale.", @@ -1087,6 +1091,12 @@ "userrights-expiry-current": "O descazze o $1", "userrights-expiry-none": "O no descazze", "userrights-expiry": "O descazze:", + "userrights-expiry-existing": "Scadença attoale: $2, $3", + "userrights-expiry-othertime": "Atra duata:", + "userrights-expiry-options": "1 giorno:1 day,1 setteman-a:1 week,1 meise:1 month,3 meixi:3 months,6 meixi:6 months,1 anno:1 year", + "userrights-invalid-expiry": "A scadença pe-o groppo \"$1\" a no l'è vallida", + "userrights-expiry-in-past": "A scadença pe-o groppo \"$1\" a l'è za passâ.", + "userrights-cannot-shorten-expiry": "No ti poeu antiçipâ a descheita de l'inscriçion a-o groppo \"$1\". Soltanto i utenti co-o permisso de azonze e rimoeuve questo groppo poeuan antiçipâ e descheite.", "userrights-conflict": "Conflito de modiffica di driti utente! Pe piaxei controlla e conferma e teu modiffiche.", "group": "Gruppo:", "group-user": "Ûtenti", @@ -1237,11 +1247,13 @@ "action-upload_by_url": "caregâ sto file da un addreçço URL", "action-writeapi": "deuviâ l'API in scrittua", "action-delete": "scassâ 'sta paggina", - "action-deleterevision": "scassâ sta verscion", - "action-deletedhistory": "vixualizzâ a cronologia scassâ de sta pagina", + "action-deleterevision": "scassâ verscioin", + "action-deletelogentry": "scassâ e voxe de registro", + "action-deletedhistory": "vixualizzâ a cronologia scassâ de 'na paggina", + "action-deletedtext": "vixualizâ o testo de verscioin scassæ", "action-browsearchive": "çercâ paggine scassæ", - "action-undelete": "Recuppera sta paggina", - "action-suppressrevision": "rivedde e ripristinâ e modiffiche ascose", + "action-undelete": "recuperâ paggine", + "action-suppressrevision": "rivedde e ripristinâ e verscioin ascose", "action-suppressionlog": "vedde questo registro privou", "action-block": "bloccâ st'utente in scrittua", "action-protect": "modificâ i livelli de proteçion pe questa pagina", @@ -1256,6 +1268,7 @@ "action-userrights-interwiki": "modificâ i driti di utenti insce di atre wiki", "action-siteadmin": "broccâ e sbroccâ o database", "action-sendemail": "mandâ di e-mail", + "action-editmyoptions": "modificâ e proppie preferençe", "action-editmywatchlist": "modificâ a to lista di öservæ", "action-viewmywatchlist": "vedde i to öservæ speçiali", "action-viewmyprivateinfo": "vedde i proppi dæti personali", @@ -1282,6 +1295,23 @@ "recentchanges-legend-heading": "Legenda:", "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (veddi e [[Special:NewPages|neuve paggine]])", "recentchanges-submit": "Fanni vedde", + "rcfilters-activefilters": "Filtri attivi", + "rcfilters-quickfilters": "Inganci rappidi", + "rcfilters-quickfilters-placeholder": "Sarva e to impostaçioin prefeie pe riutilizâle doppo.", + "rcfilters-savedqueries-defaultlabel": "Filtri sarvæ", + "rcfilters-savedqueries-rename": "Rinommina", + "rcfilters-savedqueries-setdefault": "Imposta comme predefinio", + "rcfilters-savedqueries-unsetdefault": "Rimoeuvi comme predefinio", + "rcfilters-savedqueries-remove": "Leva", + "rcfilters-savedqueries-new-name-label": "Nomme", + "rcfilters-savedqueries-apply-label": "Crea ingancio rappido", + "rcfilters-savedqueries-cancel-label": "Anulla", + "rcfilters-savedqueries-add-new-title": "Sarva filtri comme ingancio rappido", + "rcfilters-restore-default-filters": "Ripristina i filtri predefinii", + "rcfilters-clear-all-filters": "Netezza tutti i filtri", + "rcfilters-search-placeholder": "Filtra i urtime modiffiche (navega ò comença a digitâ)", + "rcfilters-invalid-filter": "Filtro non vallido", + "rcfilters-empty-filter": "Nisciun filtro attivo. Se ghe vedde tutti i contributi.", "rcfilters-filterlist-title": "Filtri", "rcfilters-filterlist-whatsthis": "Cos'o l'è sto chì?", "rcfilters-filterlist-feedbacklink": "Lascia un commento in sciâ noeuva fonçionalitæ sperimentale", @@ -1291,6 +1321,43 @@ "rcfilters-filterlist-noresults": "Nisciun filtro atrovou", "rcfilters-noresults-conflict": "Nisciun risultou trovou percose i critei de çerchia son in conflito", "rcfilters-state-message-subset": "Sto filtro chì o no g'ha effetto percose i so risultæ son incluxi con quelli {{PLURAL:$2|do seguente filtro ciu ampio|di seguenti filtri ciu ampi}} (proeuva a evidençiâli pe distinguili): $1", + "rcfilters-state-message-fullcoverage": "A seleçion de tutti i filtri inte 'n groppo l'è comme no seleçionâne manc'un, coscì che sto filtro o no fa effetto. O groppo o l'includde: $1", + "rcfilters-filtergroup-registration": "Registraçion utente", + "rcfilters-filter-registered-label": "Registrou", + "rcfilters-filter-unregistered-label": "Non registrou", + "rcfilters-filtergroup-authorship": "Aotô do contributo", + "rcfilters-filter-editsbyself-label": "E to modiffiche", + "rcfilters-filter-editsbyself-description": "I to contributi.", + "rcfilters-filter-editsbyother-label": "E modiffiche di atri", + "rcfilters-filter-editsbyother-description": "Tutte e modiffiche sarvo e to.", + "rcfilters-filtergroup-userExpLevel": "Livello d'esperiença (solo pe i utenti registræ)", + "rcfilters-filter-user-experience-level-newcomer-label": "Noeuvi utenti", + "rcfilters-filter-user-experience-level-newcomer-description": "Meno de 10 modiffiche e 4 giorni d'attivitæ.", + "rcfilters-filter-user-experience-level-experienced-label": "Utenti con esperiença", + "rcfilters-filter-user-experience-level-experienced-description": "Ciù de 30 giorni d'attivitæ e 500 modiffiche.", + "rcfilters-filtergroup-automated": "Contributi aotomattichi", + "rcfilters-filter-bots-label": "Bot", + "rcfilters-filter-bots-description": "Modiffiche effettoæ da strumenti aotomattichi.", + "rcfilters-filter-humans-label": "Umoen (non bot)", + "rcfilters-filter-humans-description": "Modiffiche effettoæ da di contributoî umoen.", + "rcfilters-filtergroup-reviewstatus": "Stato da revixon", + "rcfilters-filter-patrolled-label": "Veificæ", + "rcfilters-filter-patrolled-description": "Modiffiche contrassegnæ comme veificæ.", + "rcfilters-filter-unpatrolled-label": "Non veificæ", + "rcfilters-filter-unpatrolled-description": "Modiffiche non contrassegnæ comme veificæ.", + "rcfilters-filtergroup-significance": "Scignificou", + "rcfilters-filter-minor-label": "Cangiamenti menoî", + "rcfilters-filter-minor-description": "Modiffiche che l'aoto o l'ha indicou comme minoî.", + "rcfilters-filter-major-label": "Cangiamenti non menoî", + "rcfilters-filter-watchlist-watched-label": "Sotta oservaçion", + "rcfilters-filtergroup-changetype": "Tipo de modiffica", + "rcfilters-filter-pageedits-label": "Modiffiche a-e paggine", + "rcfilters-filter-newpages-label": "Creaçioin de paggine", + "rcfilters-filter-logactions-description": "Açioin aministrative, creaçioin utençe, eliminaçioin paggine, caregamenti....", + "rcfilters-filtergroup-lastRevision": "Urtima revixon", + "rcfilters-filter-lastrevision-label": "Urtima revixon", + "rcfilters-filter-lastrevision-description": "I urtime modiffiche a 'na paggina.", + "rcfilters-filter-previousrevision-label": "Verscioin precedente", "rcnotefrom": "Chì sotta gh'è {{PLURAL:$5|o cangiamento|i cangiamenti}} a partî da $3, $4 (scin a '''$1''').", "rclistfrom": "Fanni vedde e modiffiche apportæ partindo da $3 $2", "rcshowhideminor": "$1 cangiaménti minoî", @@ -1798,6 +1865,7 @@ "apisandbox-sending-request": "Invio recesta de API...", "apisandbox-loading-results": "Riceçion di risultæ de API in corso...", "apisandbox-results-error": "S'è veificou un errô durante o caregamento da risposta a l'interrogaçion API: $1", + "apisandbox-request-selectformat-label": "Mostra i dæti recesti comme:", "apisandbox-request-url-label": "URL de recesta:", "apisandbox-request-time": "Tempo richiesto: {{PLURAL:$1|$1 ms}}", "apisandbox-results-fixtoken": "Correzi token e reinvia", @@ -1819,6 +1887,8 @@ "magiclink-tracking-rfc-desc": "Sta paggina a l'adoeuevia di inganci maggichi RFC. Amia [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org] insce comme ezeguî a migraçion.", "magiclink-tracking-pmid": "Paggine ch'adoeuvian di inganci maggichi PMID", "magiclink-tracking-pmid-desc": "Sta paggina a l'adoeuvia dio inganci maggichi PMID. Amia [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org] sciu comme exeguî a migraçion.", + "magiclink-tracking-isbn": "Paggine ch'adoeuvian di inganci maggichi ISBN", + "magiclink-tracking-isbn-desc": "Sta paggina a l'adoeuvia di inganci maggichi ISBN. Amia [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org] sciu comme exeguî a migraçion.", "specialloguserlabel": "Açion effettuâ da:", "speciallogtitlelabel": "Açion effettuâ sciu (tittolo da paggina ò {{ns:user}}:Nomme utente):", "log": "Log", @@ -1870,6 +1940,8 @@ "activeusers-intro": "Questo o l'è un elenco di utenti ch'han avuo quarche tipo d'attivitæ da $1 {{PLURAL:$1|giorno|giorni}} a questa parte.", "activeusers-count": "$1 {{PLURAL:$1|açion|açioin}} {{PLURAL:$3|inte l'urtimo giorno|inti urtimi $3 giorni}}", "activeusers-from": "Mostra i utenti a partî da:", + "activeusers-groups": "Vixualizza i utenti ch'apartegnan a di groppi:", + "activeusers-excludegroups": "Escluddi i utenti ch'apartegnan a di groppi:", "activeusers-noresult": "Nisciun utente o risponde a-i critei impostæ.", "activeusers-submit": "Mostra utenti attivi", "listgrouprights": "Driti do groppo utente", @@ -1936,7 +2008,7 @@ "emailccsubject": "Coppia do messaggio inviou a $1: $2", "emailsent": "E-mail spedïa", "emailsenttext": "A teu e-mail a l'è stæta spedïa.", - "emailuserfooter": "Questa email a l'è stæta {{GENDER:$1|inviâ}} da $1 a {{GENDER:$2|$2}} a traverso a fonçion \"{{int:emailuser}}\" insce {{SITENAME}}.", + "emailuserfooter": "Questa email a l'è stæta {{GENDER:$1|inviâ}} da $1 a {{GENDER:$2|$2}} a traverso a fonçion \"{{int:emailuser}}\" insce {{SITENAME}}. Se {{GENDER:$2|ti ghe rispondi}}, a to email de risposta a saiâ spedia direttamente {{GENDER:$1|a-o|a-a}} mittente originâ, rivelando{{GENDER:$1|ghe}} o {{GENDER:$2|to}} adresso de posta elettronica.", "usermessage-summary": "Messaggio de scistema", "usermessage-editor": "Messaggê de scistema", "watchlist": "Sotta osservassion", diff --git a/languages/i18n/my.json b/languages/i18n/my.json index 884d21d70b..f10cdb6ef6 100644 --- a/languages/i18n/my.json +++ b/languages/i18n/my.json @@ -536,7 +536,7 @@ "post-expand-template-argument-warning": "'''သတိပေးချက် -''' ဤစာမျက်နှာတွင် ပမာဏအားဖြင့် ကြီးမားကျယ်ပြန့်သော template argument တစ်ခုပါဝင်သည်။\nယင်း arguments များကို ဖယ်ထုတ်လိုက်သည်။", "post-expand-template-argument-category": "ဖယ်ထုတ်ထားသော template arguments များပါဝင်သည့် စာမျက်နှာများ", "parser-template-loop-warning": "တမ်းပလိတ်များ လှည့်ပတ်ဆက်စပ် နေသည်ကို တွေ့ရသည်။ [[$1]]", - "undo-summary": "[[Special:Contributions/$2|$2]] ([[User talk:$2|ဆွေးနွေး]]) ၏ $1 ပြင်ဆင်ချက် $1 ကို ပြန်လည်ပယ်ဖျက်လိုက်သည်", + "undo-summary": "[[Special:Contributions/$2|$2]] ([[User talk:$2|ဆွေးနွေး]]) ၏ တည်းဖြတ်မူ $1 ကို ပြန်လည်ပယ်ဖျက်လိုက်သည်", "viewpagelogs": "ဤစာမျက်နှာအတွက် မှတ်တမ်းများကို ကြည့်ရန်", "nohistory": "ဤစာမျက်နှာတွင် တည်းဖြတ်မှု ရာဇဝင်မရှိပါ", "currentrev": "နောက်ဆုံးမူ", diff --git a/languages/i18n/qqq.json b/languages/i18n/qqq.json index 694ef74506..3c9791e1c5 100644 --- a/languages/i18n/qqq.json +++ b/languages/i18n/qqq.json @@ -1554,7 +1554,8 @@ "recentchanges-submit": "Label for submit button in [[Special:RecentChanges]]\n{{Identical|Show}}", "rcfilters-activefilters": "Title for the filters selection showing the active filters.", "rcfilters-quickfilters": "Label for the button that opens the quick filters menu in [[Special:RecentChanges]]", - "rcfilters-quickfilters-placeholder": "Text shown in the quick filters menu on [[Special:RecentChanges]] if the user has not saved any quick filters.", + "rcfilters-quickfilters-placeholder-title": "Title for the text shown in the quick filters menu on [[Special:RecentChanges]] if the user has not saved any quick filters.", + "rcfilters-quickfilters-placeholder-description": "Description for the text shown in the quick filters menu on [[Special:RecentChanges]] if the user has not saved any quick filters.", "rcfilters-savedqueries-defaultlabel": "Default name for saving a new set of quick filters [[Special:RecentChanges]]", "rcfilters-savedqueries-rename": "Label for the menu option that edits a quick filter in [[Special:RecentChanges]]\n{{Identical|Rename}}", "rcfilters-savedqueries-setdefault": "Label for the menu option that sets a quick filter as default in [[Special:RecentChanges]]", diff --git a/languages/i18n/sr-ec.json b/languages/i18n/sr-ec.json index aed37e7fcd..835837867c 100644 --- a/languages/i18n/sr-ec.json +++ b/languages/i18n/sr-ec.json @@ -3506,11 +3506,19 @@ "duration-centuries": "$1 {{PLURAL:$1|век|века|векова}}", "duration-millennia": "$1 {{PLURAL:$1|миленијум|миленијума|миленијума}}", "rotate-comment": "Слика је ротирана за $1° у смеру казаљке на сату", + "limitreport-title": "Подаци профилисања анализатора:", + "limitreport-cputime": "Време коришћења CPU", "limitreport-cputime-value": "$1 {{PLURAL:$1|секунда|секунд|секунди}}", "limitreport-walltime": "Коришћење у реалном времену", "limitreport-walltime-value": "$1 {{PLURAL:$1|секунда|секунди}}", + "limitreport-ppvisitednodes": "Број предпроцесираних посећених нодова", + "limitreport-ppgeneratednodes": "Број предпроцесираних генерисаних нодова", + "limitreport-postexpandincludesize": "Укључена величина након проширења", "limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|бајт|бајта|бајтова}}", + "limitreport-templateargumentsize": "Величина аргумената шаблона", "limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|бајт|бајта|бајтова}}", + "limitreport-expansiondepth": "Највећа дубина проширења", + "limitreport-expensivefunctioncount": "Број „скупих” функција анализатора", "expandtemplates": "Замена шаблона", "expand_templates_intro": "Ова посебна страница узима текст и мења све шаблоне у њему рекурзивно.\nТакође мења функције парсера као што је {{#language:…}} и променљиве као што је {{CURRENTDAY}}. \nЗаправо практично све што се налази између витичастих заграда.", "expand_templates_title": "Назив контекста; за {{СТРАНИЦА}} итд.:", diff --git a/languages/i18n/sr-el.json b/languages/i18n/sr-el.json index 6e0f08554a..6204632919 100644 --- a/languages/i18n/sr-el.json +++ b/languages/i18n/sr-el.json @@ -25,7 +25,8 @@ "Matma Rex", "Mega Aleksandar", "Asmen", - "Obsuser" + "Obsuser", + "Zoranzoki21" ] }, "tog-underline": "Podvlačenje veza:", @@ -227,7 +228,7 @@ "toolbox": "Alatke", "tool-link-userrights": "Promeni {{GENDER:$1|korisnik}} grupe", "tool-link-userrights-readonly": "Prikaži {{GENDER:$1|korisnik}} grupe", - "tool-link-emailuser": "Pošalji imejl", + "tool-link-emailuser": "Pošalji imejl {{GENDER:$1|korisniku|korisnici}}", "userpage": "Pogledaj korisničku stranicu", "projectpage": "Pogledaj stranicu projekta", "imagepage": "Pogledaj stranicu datoteke", @@ -3362,10 +3363,19 @@ "duration-centuries": "$1 {{PLURAL:$1|vek|veka|vekova}}", "duration-millennia": "$1 {{PLURAL:$1|milenijum|milenijuma|milenijuma}}", "rotate-comment": "Slika je rotirana za $1° u smeru kazaljke na satu", + "limitreport-title": "Podaci profilisanja analizatora:", + "limitreport-cputime": "Vreme korišćenja CPU", "limitreport-cputime-value": "$1 {{PLURAL:$1|sekunda|sekund|sekundi}}", + "limitreport-walltime": "Korišćenje u realnom vremenu", "limitreport-walltime-value": "$1 {{PLURAL:$1|sekund|sekunde|sekundi}}", + "limitreport-ppvisitednodes": "Broj predprocesiranih posećenih nodova", + "limitreport-ppgeneratednodes": "Broj predprocesiranih generisanih nodova", + "limitreport-postexpandincludesize": "Uključena veličina nakon proširenja", "limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|bajt|bajta|bajtova}}", + "limitreport-templateargumentsize": "Veličina argumenata šablona", "limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|bajt|bajta|bajtova}}", + "limitreport-expansiondepth": "Najveća dubina proširenja", + "limitreport-expensivefunctioncount": "Broj „skupih” funkcija analizatora", "expandtemplates": "Zamena šablona", "expand_templates_intro": "Ova posebna stranica uzima tekst i menja sve šablone u njemu rekurzivno.\nTakođe menja funkcije parsera kao što je {{#language:…}} i promenljive kao što je {{CURRENTDAY}}.\nZapravo praktično sve što se nalazi između vitičastih zagrada.", "expand_templates_title": "Naziv konteksta; za {{STRANICA}} itd.:", diff --git a/languages/i18n/tr.json b/languages/i18n/tr.json index 800b4d43fb..ba31f03e34 100644 --- a/languages/i18n/tr.json +++ b/languages/i18n/tr.json @@ -94,7 +94,8 @@ "1917 Ekim Devrimi", "Asmen", "Stephanecbisson", - "Alerque" + "Alerque", + "Bulgu" ] }, "tog-underline": "Bağlantıların altını çizme:", @@ -809,6 +810,7 @@ "invalid-content-data": "Geçersiz içerik verisi", "content-not-allowed-here": "\"$1\" içeriğine, [[$2]] sayfasında izin verilmemekte.", "editwarning-warning": "Bu sayfadan ayrılmak yaptığınız herhangi bir değişikliği kaybetmenize sebep olabilir.\nEğer giriş yaptıysanız, bu uyarıyı, tercihlerinizin \"{{int:prefs-editing}}\" bölümünde devre dışı bırakabilirsiniz.", + "editpage-invalidcontentmodel-text": "\"$1\" içerik modeli desteklenmemektedir.", "editpage-notsupportedcontentformat-title": "İçerik biçimi desteklenmiyor", "editpage-notsupportedcontentformat-text": "$1 içerik biçimi $2 içerik modeli tarafından desteklenmiyor.", "content-model-wikitext": "vikimetin", @@ -1166,7 +1168,7 @@ "userrights-nodatabase": "$1 veritabanı mevcut veya bölgesel değil", "userrights-changeable-col": "Değiştirebildiğiniz gruplar", "userrights-unchangeable-col": "Değiştiremediğiniz gruplar", - "userrights-expiry-current": "$2 günü saat $3 itibarıyla sona eriyor", + "userrights-expiry-current": "$1 tarihi itibarıyla sona eriyor", "userrights-expiry-none": "Süresiz", "userrights-expiry": "Bitiş:", "userrights-expiry-existing": "Mevcut bitiş süresi: $2 $3", @@ -1998,7 +2000,7 @@ "addedwatchtext": "\"[[:$1]]\" sayfası [[Special:Watchlist|izleme listenize]] eklenmiştir.\nBundan sonra, bu sayfaya ve ilgili tartışma sayfasına yapılacak değişiklikler burada listelenecek.", "addedwatchtext-short": "\"$1\" sayfası izleme listenize eklendi.", "removewatch": "İzleme listesinden kaldır", - "removedwatchtext": "\"[[:$1]]\" sayfası [[Special:Watchlist|izleme listenizden]] silinmiştir.", + "removedwatchtext": "\"[[:$1]]\" sayfası, tartışma sayfası ile birlikte [[Special:Watchlist|izleme listenizden]] silinmiştir.", "removedwatchtext-short": "\"$1\" sayfası izleme listenizden çıkarıldı.", "watch": "izle", "watchthispage": "Sayfayı izle", @@ -2156,7 +2158,7 @@ "undeletepagetext": "Aşağıdaki {{PLURAL:$1|sayfa|$1 sayfa}} silinmiştir ama hala arşivdedir ve geri getirilebilir.\nArşiv düzenli olarak temizlenebilir.", "undelete-fieldset-title": "Revizyonları geri yükle", "undeleteextrahelp": "Sayfanın tüm geçmişini geri getirmek için onay kutularını boş bırakarak '''''{{int:undeletebtn}}''''' tuşuna tıklayın.\nSayfanın geçmişini ayrı ayrı getirmek için geri getirmek istediğiniz değişikliklerin onay kutularını seçip '''''{{int:undeletebtn}}''''' tuşuna tıklayın.", - "undeleterevisions": "$1 {{PLURAL:$1|revizyon|revizyon}} arşivlendi", + "undeleterevisions": "$1 revizyon silindi", "undeletehistory": "Eğer sayfayı geri getirirseniz, tüm revizyonlar geçmişe geri getirilecektir.\nSilindikten sonra aynı isimle yeni bir sayfa oluşturulmuşsa, geri gelen revizyonlar varolan sayfanın geçmişinde görünecektir.", "undeleterevdel": "Eğer üst sayfada sonuçlanacaksa ya da dosya revizyonu kısmen silinmiş ise, silmeyi geri alma uygulanamaz.\nBöyle durumlarda, en yeni silinen revizyonu seçmemeli ya da gizlemesini kaldırmalısınız.", "undeletehistorynoadmin": "Bu madde silinmiştir. Silinme sebebi ve silinme öncesinde maddeyi düzenleyen kullanıcıların detayları aşağıdaki özette verilmiştir. Bu silinmiş sürümlerin metinleri ise sadece hizmetliler tarafından görülebilir.", @@ -2520,7 +2522,7 @@ "tooltip-pt-watchlist": "Değişiklikler için izlemeye aldığınız sayfaların listesi", "tooltip-pt-mycontris": "{{GENDER:|Katkılarınızın}} listesi", "tooltip-pt-anoncontribs": "Bu IP adresinden yapılmış değişiklikler listesi", - "tooltip-pt-login": "Oturum açmanız tavsiye edilmektedir; ancak bu zorunda değildir", + "tooltip-pt-login": "Oturum açmanız tavsiye edilmektedir; ancak bu zorunlu değildir", "tooltip-pt-logout": "Sistemden çık", "tooltip-pt-createaccount": "Bir hesap oluşturup oturum açmanız tavsiye edilmektedir ancak bu zorunlu değildir", "tooltip-ca-talk": "İçerik ile ilgili tartışma", @@ -3119,7 +3121,7 @@ "scarytranscludefailed-httpstatus": "[$1 için şablon alımı başarısız oldu: HTTP $2]", "scarytranscludetoolong": "[URL çok uzun]", "deletedwhileediting": "'''Uyarı''': Bu sayfa siz değişiklik yapmaya başladıktan sonra silinmiş!", - "confirmrecreate": "Bu sayfayı [[User:$1|$1]] ([[User talk:$1|mesaj]]) kullanıcısı siz sayfada değişiklik yaparken silmiştir, nedeni:\n: ''$2''\nSayfayı baştan açmak isityorsanız, lütfen onaylayın.", + "confirmrecreate": "Bu sayfayı [[User:$1|$1]] ([[User talk:$1|mesaj]]) kullanıcısı siz sayfada değişiklik yaparken silmiştir, nedeni:\n: ''$2''\nSayfayı baştan açmak istiyorsanız, lütfen onaylayın.", "confirmrecreate-noreason": "[[User:$1|$1]] ([[User talk:$1|mesaj]]) adlı kullanıcı, siz değişiklik yapmaya başladıktan sonra bu sayfayı sildi. Lütfen bu sayfayı gerçekten yeniden oluşturmak istediğinizi onaylayın.", "recreate": "Canlandır", "unit-pixel": "px", @@ -3605,6 +3607,7 @@ "mw-widgets-mediasearch-noresults": "Sonuç bulunamadı.", "mw-widgets-titleinput-description-new-page": "sayfa henüz mevcut değil", "mw-widgets-titleinput-description-redirect": "$1'e yönlendirildi", + "mw-widgets-categoryselector-add-category-placeholder": "Bir kategori ekle...", "sessionprovider-mediawiki-session-cookiesessionprovider": "çerez tabanlı oturumlar", "sessionprovider-nocookies": "Çerezler devre dışı olabilir. Çerkezlerin aktif olduğuna emin olun ve yeniden başlatin.", "randomrootpage": "Rastgele kök sayfası", diff --git a/maintenance/backupPrefetch.inc b/maintenance/backupPrefetch.inc index 265800ec06..6a2d3bf626 100644 --- a/maintenance/backupPrefetch.inc +++ b/maintenance/backupPrefetch.inc @@ -40,6 +40,7 @@ * @ingroup Maintenance */ class BaseDump { + /** @var XMLReader */ protected $reader = null; protected $atEnd = false; protected $atPageEnd = false; diff --git a/maintenance/dumpTextPass.php b/maintenance/dumpTextPass.php index 581f0d7b4d..c6e9aad646 100644 --- a/maintenance/dumpTextPass.php +++ b/maintenance/dumpTextPass.php @@ -33,7 +33,12 @@ use Wikimedia\Rdbms\IMaintainableDatabase; * @ingroup Maintenance */ class TextPassDumper extends BackupDumper { + /** @var BaseDump */ public $prefetch = null; + /** @var string|bool */ + private $thisPage; + /** @var string|bool */ + private $thisRev; // when we spend more than maxTimeAllowed seconds on this run, we continue // processing until we write out the next complete page, then save output file(s), @@ -583,8 +588,7 @@ TEXT if ( $text === false && isset( $this->prefetch ) && $prefetchNotTried ) { $prefetchNotTried = false; $tryIsPrefetch = true; - $text = $this->prefetch->prefetch( intval( $this->thisPage ), - intval( $this->thisRev ) ); + $text = $this->prefetch->prefetch( (int)$this->thisPage, (int)$this->thisRev ); if ( $text === null ) { $text = false; diff --git a/maintenance/rebuildrecentchanges.php b/maintenance/rebuildrecentchanges.php index 458dacf56d..142a4e5f2f 100644 --- a/maintenance/rebuildrecentchanges.php +++ b/maintenance/rebuildrecentchanges.php @@ -24,6 +24,7 @@ */ require_once __DIR__ . '/Maintenance.php'; +use MediaWiki\MediaWikiServices; /** * Maintenance script that rebuilds recent changes from scratch. @@ -478,15 +479,16 @@ class RebuildRecentchanges extends Maintenance { } /** - * Purge cached feeds in $messageMemc + * Purge cached feeds in $wanCache */ private function purgeFeeds() { - global $wgFeedClasses, $messageMemc; + global $wgFeedClasses; $this->output( "Deleting feed timestamps.\n" ); + $wanCache = MediaWikiServices::getInstance()->getMainWANObjectCache(); foreach ( $wgFeedClasses as $feed => $className ) { - $messageMemc->delete( wfMemcKey( 'rcfeed', $feed, 'timestamp' ) ); # Good enough for now. + $wanCache->delete( $wanCache->makeKey( 'rcfeed', $feed, 'timestamp' ) ); # Good enough for now. } } } diff --git a/resources/Resources.php b/resources/Resources.php index 42376392f3..d100078922 100644 --- a/resources/Resources.php +++ b/resources/Resources.php @@ -1685,6 +1685,7 @@ return [ 'mediawiki.page.watch.ajax' => [ 'scripts' => 'resources/src/mediawiki/page/watch.js', 'dependencies' => [ + 'mediawiki.page.startup', 'mediawiki.api.watch', 'mediawiki.notify', 'mediawiki.util', @@ -1804,7 +1805,8 @@ return [ 'messages' => [ 'rcfilters-activefilters', 'rcfilters-quickfilters', - 'rcfilters-quickfilters-placeholder', + 'rcfilters-quickfilters-placeholder-title', + 'rcfilters-quickfilters-placeholder-description', 'rcfilters-savedqueries-defaultlabel', 'rcfilters-savedqueries-rename', 'rcfilters-savedqueries-setdefault', diff --git a/resources/src/jquery/jquery.makeCollapsible.js b/resources/src/jquery/jquery.makeCollapsible.js index 9d3df8cbf3..ac4a3926ac 100644 --- a/resources/src/jquery/jquery.makeCollapsible.js +++ b/resources/src/jquery/jquery.makeCollapsible.js @@ -152,7 +152,8 @@ if ( e ) { if ( e.type === 'click' && - e.target.nodeName.toLowerCase() === 'a' + e.target.nodeName.toLowerCase() === 'a' && + $( e.target ).attr( 'href' ) ) { // Don't fire if a link was clicked (for premade togglers) return; diff --git a/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.SavedLinksListItemWidget.less b/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.SavedLinksListItemWidget.less index 66ceb64363..fb0b93b854 100644 --- a/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.SavedLinksListItemWidget.less +++ b/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.SavedLinksListItemWidget.less @@ -1,5 +1,5 @@ .mw-rcfilters-ui-savedLinksListItemWidget { - padding: 0.5em; + padding: 0.2em 0.7em; &:hover { // Mimicking optionWidget styles @@ -11,13 +11,13 @@ vertical-align: middle; } - &:not( .oo-ui-iconElement ) .oo-ui-iconElement-icon { - // The iconElement-icon class still appears when we - // have an empty icon, and we need it to pretend to - // be there so the text has the same alignment as - // text next to a visible icon. #ThanksOOUI - width: 1.875em; - height: 1.875em; + .oo-ui-iconElement-icon { + // Since we made the rows narrower (height smaller than usual) + // then the icon needs to be slightly smaller as well, so that + // when we toggle 'default' the icon doesn't bounce the option + // height up a little + width: 1.7em; + height: 1.7em; } &-icon span { @@ -38,6 +38,7 @@ overflow: hidden; cursor: pointer; margin-left: 0.5px; + color: #36c; // Accent50; } &-icon, diff --git a/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.SavedLinksListWidget.less b/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.SavedLinksListWidget.less index 5bda034c32..716ed034ec 100644 --- a/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.SavedLinksListWidget.less +++ b/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.SavedLinksListWidget.less @@ -6,6 +6,11 @@ } &-placeholder { + &-title { + font-weight: bold; + margin-bottom: 1em; + } + // Extra specificity needed to override OOUI rule that sets white-space: nowrap; // on labels inside options &.oo-ui-optionWidget .oo-ui-labelElement-label { @@ -15,6 +20,11 @@ .oo-ui-iconElement-icon { opacity: 0.5; + // Override OOUI option widget rules for icons + // we want the icon to appear at the top near the + // title, not in the middle of the multiline option + top: 0.7em !important; /* stylelint-disable-line declaration-no-important */ + height: inherit !important; /* stylelint-disable-line declaration-no-important */ } } } diff --git a/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.SavedLinksListItemWidget.js b/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.SavedLinksListItemWidget.js index 44b48b8c20..acda29e12a 100644 --- a/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.SavedLinksListItemWidget.js +++ b/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.SavedLinksListItemWidget.js @@ -106,10 +106,6 @@ $( '
' ) .addClass( 'mw-rcfilters-ui-row' ) .append( - $( '
' ) - .addClass( 'mw-rcfilters-ui-cell' ) - .addClass( 'mw-rcfilters-ui-savedLinksListItemWidget-icon' ) - .append( this.$icon ), $( '
' ) .addClass( 'mw-rcfilters-ui-cell' ) .addClass( 'mw-rcfilters-ui-savedLinksListItemWidget-content' ) @@ -119,6 +115,10 @@ this.editInput.$element, this.saveButton.$element ), + $( '
' ) + .addClass( 'mw-rcfilters-ui-cell' ) + .addClass( 'mw-rcfilters-ui-savedLinksListItemWidget-icon' ) + .append( this.$icon ), this.popupButton.$element .addClass( 'mw-rcfilters-ui-cell' ) ) @@ -257,6 +257,7 @@ this.editInput.toggle( isEdit ); this.$label.toggleClass( 'oo-ui-element-hidden', isEdit ); + this.$icon.toggleClass( 'oo-ui-element-hidden', isEdit ); this.popupButton.toggle( !isEdit ); this.saveButton.toggle( isEdit ); diff --git a/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.SavedLinksListWidget.js b/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.SavedLinksListWidget.js index 91c05b268f..8c021d0901 100644 --- a/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.SavedLinksListWidget.js +++ b/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.SavedLinksListWidget.js @@ -11,6 +11,16 @@ * @cfg {jQuery} [$overlay] A jQuery object serving as overlay for popups */ mw.rcfilters.ui.SavedLinksListWidget = function MwRcfiltersUiSavedLinksListWidget( controller, model, config ) { + var $labelNoEntries = $( '
' ) + .append( + $( '
' ) + .addClass( 'mw-rcfilters-ui-savedLinksListWidget-placeholder-title' ) + .text( mw.msg( 'rcfilters-quickfilters-placeholder-title' ) ), + $( '
' ) + .addClass( 'mw-rcfilters-ui-savedLinksListWidget-placeholder-description' ) + .text( mw.msg( 'rcfilters-quickfilters-placeholder-description' ) ) + ); + config = config || {}; // Parent @@ -22,7 +32,7 @@ this.placeholderItem = new OO.ui.DecoratedOptionWidget( { classes: [ 'mw-rcfilters-ui-savedLinksListWidget-placeholder' ], - label: mw.msg( 'rcfilters-quickfilters-placeholder' ), + label: $labelNoEntries, icon: 'unClip' } ); // The only reason we're using "ButtonGroupWidget" here is that diff --git a/tests/phpunit/includes/OutputPageTest.php b/tests/phpunit/includes/OutputPageTest.php index cedb6232d0..32fa46887d 100644 --- a/tests/phpunit/includes/OutputPageTest.php +++ b/tests/phpunit/includes/OutputPageTest.php @@ -372,8 +372,10 @@ class OutputPageTest extends MediaWikiTestCase { 'user' => [ 'user.styles', 'example.user' ], ], '' . "\n" . - '' . "\n" . - '', + '' . "\n" . + '' . "\n" . + '' . "\n" . + '', ], // @codingStandardsIgnoreEnd Generic.Files.LineLength ]; diff --git a/tests/phpunit/includes/libs/objectcache/WANObjectCacheTest.php b/tests/phpunit/includes/libs/objectcache/WANObjectCacheTest.php index 72effd79ea..dcb09867e3 100644 --- a/tests/phpunit/includes/libs/objectcache/WANObjectCacheTest.php +++ b/tests/phpunit/includes/libs/objectcache/WANObjectCacheTest.php @@ -310,10 +310,12 @@ class WANObjectCacheTest extends PHPUnit_Framework_TestCase { $keyedIds, 30, $genFunc, [ 'lowTTL' => 0, 'lockTSE' => 5, ] + $extOpts ); $this->assertEquals( $value, $v[$keyB], "Value returned" ); $this->assertEquals( 1, $wasSet, "Value regenerated" ); + $this->assertEquals( 0, $cache->getWarmupKeyMisses(), "Keys warmed yet in process cache" ); $v = $cache->getMultiWithSetCallback( $keyedIds, 30, $genFunc, [ 'lowTTL' => 0, 'lockTSE' => 5, ] + $extOpts ); $this->assertEquals( $value, $v[$keyB], "Value returned" ); $this->assertEquals( 1, $wasSet, "Value not regenerated" ); + $this->assertEquals( 0, $cache->getWarmupKeyMisses(), "Keys warmed in process cache" ); $priorTime = microtime( true ); usleep( 1 ); diff --git a/tests/phpunit/maintenance/backupTextPassTest.php b/tests/phpunit/maintenance/backupTextPassTest.php index d460401a86..ea5ca8d847 100644 --- a/tests/phpunit/maintenance/backupTextPassTest.php +++ b/tests/phpunit/maintenance/backupTextPassTest.php @@ -103,7 +103,7 @@ class TextPassDumperDatabaseTest extends DumpTestCase { // increasing $this->assertEquals( [ $this->pageId2, $this->pageId3, $this->pageId4 ], - [ $this->pageId1 + 1, $this->pageId2 + 1, $this->pageId3 + 1 ], + [ $this->pageId1 + 1, $this->pageId1 + 2, $this->pageId1 + 3 ], "Page ids increasing without holes" ); } diff --git a/tests/qunit/suites/resources/jquery/jquery.makeCollapsible.test.js b/tests/qunit/suites/resources/jquery/jquery.makeCollapsible.test.js index 44a2305352..53d29cf93e 100644 --- a/tests/qunit/suites/resources/jquery/jquery.makeCollapsible.test.js +++ b/tests/qunit/suites/resources/jquery/jquery.makeCollapsible.test.js @@ -266,7 +266,7 @@ var $collapsible = prepareCollapsible( '
' + '
' + - 'Toggle toggle toggle toggle' + + 'Toggle toggle toggle toggle' + '
' + '
' + loremIpsum + '
' + '
', @@ -282,6 +282,22 @@ assert.assertTrue( $content.is( ':hidden' ), 'click event on non-link inside toggle toggles content' ); } ); + QUnit.test( 'click on non-link inside toggler counts as trigger', function ( assert ) { + var $collapsible = prepareCollapsible( + '
' + + '
' + + 'Toggle toggle toggle toggle' + + '
' + + '
' + loremIpsum + '
' + + '
', + { instantHide: true } + ), + $content = $collapsible.find( '.mw-collapsible-content' ); + + $collapsible.find( '.mw-collapsible-toggle a' ).trigger( 'click' ); + assert.assertTrue( $content.is( ':hidden' ), 'click event on link (with no href) inside toggle toggles content' ); + } ); + QUnit.test( 'collapse/expand text (data-collapsetext, data-expandtext)', function ( assert ) { var $collapsible = prepareCollapsible( '
' +