<exclude name="MediaWiki.Usage.SuperGlobalsUsage.SuperGlobals" />
<exclude name="MediaWiki.Files.ClassMatchesFilename.WrongCase" />
<exclude name="MediaWiki.Files.ClassMatchesFilename.NotMatch" />
- <exclude name="MediaWiki.Files.OneClassPerFile.MultipleFound" />
+ <exclude name="Generic.Files.OneObjectStructurePerFile.MultipleFound" />
<exclude name="MediaWiki.VariableAnalysis.ForbiddenGlobalVariables.ForbiddenGlobal$wgTitle" />
<exclude name="MediaWiki.Usage.DeprecatedConstantUsage.NS_IMAGE" />
<exclude name="MediaWiki.Usage.DeprecatedConstantUsage.NS_IMAGE_TALK" />
<exclude name="MediaWiki.Commenting.FunctionComment.SpacingDocStar" />
<exclude name="MediaWiki.Commenting.FunctionComment.SpacingDocTag" />
+ <exclude name="Squiz.Scope.MethodScope.Missing" />
+ <exclude name="Squiz.Scope.MemberVarScope.Missing" />
</rule>
<rule ref="MediaWiki.NamingConventions.PrefixedGlobalFunctions">
<properties>
- env: dbtype=postgres dbuser=travis
php: 5.5
# https://docs.travis-ci.com/user/languages/php#HHVM-versions
- - env: dbtype=mysql dbuser=root
- php: hhvm-3.12
- env: dbtype=mysql dbuser=root
php: hhvm-3.18
- env: dbtype=mysql dbuser=root
<?php
// This file is generated by maintenance/generateLocalAutoload.php, do not adjust manually
-// @codingStandardsIgnoreFile
+// phpcs:ignoreFile Generic.Files.LineLength
global $wgAutoloadLocalClasses;
$wgAutoloadLocalClasses = [
'LanguageAr' => __DIR__ . '/languages/classes/LanguageAr.php',
'LanguageAz' => __DIR__ . '/languages/classes/LanguageAz.php',
'LanguageBe_tarask' => __DIR__ . '/languages/classes/LanguageBe_tarask.php',
- 'LanguageBg' => __DIR__ . '/languages/classes/LanguageBg.php',
'LanguageBs' => __DIR__ . '/languages/classes/LanguageBs.php',
'LanguageCode' => __DIR__ . '/languages/LanguageCode.php',
'LanguageConverter' => __DIR__ . '/languages/LanguageConverter.php',
'LanguageCu' => __DIR__ . '/languages/classes/LanguageCu.php',
'LanguageDsb' => __DIR__ . '/languages/classes/LanguageDsb.php',
'LanguageEn' => __DIR__ . '/languages/classes/LanguageEn.php',
- 'LanguageEs' => __DIR__ . '/languages/classes/LanguageEs.php',
- 'LanguageEt' => __DIR__ . '/languages/classes/LanguageEt.php',
'LanguageFi' => __DIR__ . '/languages/classes/LanguageFi.php',
'LanguageGa' => __DIR__ . '/languages/classes/LanguageGa.php',
'LanguageGan' => __DIR__ . '/languages/classes/LanguageGan.php',
'LanguageKm' => __DIR__ . '/languages/classes/LanguageKm.php',
'LanguageKsh' => __DIR__ . '/languages/classes/LanguageKsh.php',
'LanguageKu' => __DIR__ . '/languages/classes/LanguageKu.php',
- 'LanguageKu_ku' => __DIR__ . '/languages/classes/LanguageKu_ku.php',
'LanguageLa' => __DIR__ . '/languages/classes/LanguageLa.php',
'LanguageMl' => __DIR__ . '/languages/classes/LanguageMl.php',
'LanguageMy' => __DIR__ . '/languages/classes/LanguageMy.php',
'LanguageOs' => __DIR__ . '/languages/classes/LanguageOs.php',
- 'LanguagePl' => __DIR__ . '/languages/classes/LanguagePl.php',
'LanguageQqx' => __DIR__ . '/languages/classes/LanguageQqx.php',
- 'LanguageRu' => __DIR__ . '/languages/classes/LanguageRu.php',
'LanguageShi' => __DIR__ . '/languages/classes/LanguageShi.php',
'LanguageSl' => __DIR__ . '/languages/classes/LanguageSl.php',
'LanguageSr' => __DIR__ . '/languages/classes/LanguageSr.php',
'LanguageTg' => __DIR__ . '/languages/classes/LanguageTg.php',
'LanguageTr' => __DIR__ . '/languages/classes/LanguageTr.php',
'LanguageTyv' => __DIR__ . '/languages/classes/LanguageTyv.php',
- 'LanguageUk' => __DIR__ . '/languages/classes/LanguageUk.php',
'LanguageUz' => __DIR__ . '/languages/classes/LanguageUz.php',
'LanguageWa' => __DIR__ . '/languages/classes/LanguageWa.php',
'LanguageYue' => __DIR__ . '/languages/classes/LanguageYue.php',
"wikimedia/php-session-serializer": "1.0.4",
"wikimedia/purtle": "1.0.6",
"wikimedia/relpath": "2.0.0",
- "wikimedia/remex-html": "1.0.1",
+ "wikimedia/remex-html": "1.0.2",
"wikimedia/running-stat": "1.1.0",
"wikimedia/scoped-callback": "1.0.0",
"wikimedia/utfnormal": "1.1.0",
"jakub-onderka/php-parallel-lint": "0.9.2",
"jetbrains/phpstorm-stubs": "dev-master#1b9906084d6635456fcf3f3a01f0d7d5b99a578a",
"justinrainbow/json-schema": "~5.2",
- "mediawiki/mediawiki-codesniffer": "14.1.0",
+ "mediawiki/mediawiki-codesniffer": "15.0.0",
"monolog/monolog": "~1.22.1",
"nikic/php-parser": "2.1.0",
"nmred/kafka-php": "0.1.5",
$this->version = $version;
}
- // @codingStandardsIgnoreStart
- // PSR2.Methods.MethodDeclaration.Underscore
- // PSR2.Classes.PropertyDeclaration.ScopeMissing
+ // phpcs:ignore PSR2.Methods.MethodDeclaration.Underscore,PSR2.Classes.PropertyDeclaration.ScopeMissing
function _newObject() {
/* Put the caller offset for wfDeprecated as 6, as
* that gives the function that uses this object, since:
wfDeprecated( '$' . $this->global, $this->version, false, 6 );
return parent::_newObject();
}
- // @codingStandardsIgnoreEnd
}
die( "This file is part of MediaWiki, it is not a valid entry point" );
}
-use Liuggio\StatsdClient\Sender\SocketSender;
use MediaWiki\Logger\LoggerFactory;
use MediaWiki\ProcOpenError;
use MediaWiki\Session\SessionManager;
/**
* @todo document
+ * @todo Move logic to MediaWiki.php
*/
function wfLogProfilingData() {
global $wgDebugLogGroups, $wgDebugRawPage;
$profiler->setContext( $context );
$profiler->logData();
- $config = $context->getConfig();
- $stats = MediaWikiServices::getInstance()->getStatsdDataFactory();
- if ( $config->get( 'StatsdServer' ) && $stats->hasData() ) {
- try {
- $statsdServer = explode( ':', $config->get( 'StatsdServer' ) );
- $statsdHost = $statsdServer[0];
- $statsdPort = isset( $statsdServer[1] ) ? $statsdServer[1] : 8125;
- $statsdSender = new SocketSender( $statsdHost, $statsdPort );
- $statsdClient = new SamplingStatsdClient( $statsdSender, true, false );
- $statsdClient->setSamplingRates( $config->get( 'StatsdSamplingRates' ) );
- $statsdClient->send( $stats->getData() );
- } catch ( Exception $ex ) {
- MWExceptionHandler::logException( $ex );
- }
- }
+ // Send out any buffered statsd metrics as needed
+ MediaWiki::emitBufferedStatsdData(
+ MediaWikiServices::getInstance()->getStatsdDataFactory(),
+ $context->getConfig()
+ );
- # Profiling must actually be enabled...
+ // Profiling must actually be enabled...
if ( $profiler instanceof ProfilerStub ) {
return;
}
}
-// @codingStandardsIgnoreStart
+// phpcs:ignore Generic.CodeAnalysis.UnconditionalIfStatement.Found
if ( false ) {
// Blobs generated by MediaWiki < 1.5 on PHP 4 were serialized with the
// class name coerced to lowercase. We can improve efficiency by adding
class_alias( 'HistoryBlobCurStub', 'historyblobcurstub' );
class_alias( 'HistoryBlobStub', 'historyblobstub' );
}
-// @codingStandardsIgnoreEnd
return Xml::tags( 'span', [ 'class' => 'mw-revdelundel-link' ], $htmlParentheses );
}
- /* Deprecated methods */
-
/**
* Returns the attributes for the tooltip and access key.
*
use Wikimedia\Rdbms\ChronologyProtector;
use Wikimedia\Rdbms\LBFactory;
use Wikimedia\Rdbms\DBConnectionError;
+use Liuggio\StatsdClient\Sender\SocketSender;
/**
* The MediaWiki class is the helper class for the index.php entry point.
wfDebug( "Request ended normally\n" );
}
+ /**
+ * Send out any buffered statsd data according to sampling rules
+ *
+ * @param IBufferingStatsdDataFactory $stats
+ * @param Config $config
+ * @throws ConfigException
+ * @since 1.31
+ */
+ public static function emitBufferedStatsdData(
+ IBufferingStatsdDataFactory $stats, Config $config
+ ) {
+ if ( $config->get( 'StatsdServer' ) && $stats->hasData() ) {
+ try {
+ $statsdServer = explode( ':', $config->get( 'StatsdServer' ) );
+ $statsdHost = $statsdServer[0];
+ $statsdPort = isset( $statsdServer[1] ) ? $statsdServer[1] : 8125;
+ $statsdSender = new SocketSender( $statsdHost, $statsdPort );
+ $statsdClient = new SamplingStatsdClient( $statsdSender, true, false );
+ $statsdClient->setSamplingRates( $config->get( 'StatsdSamplingRates' ) );
+ $statsdClient->send( $stats->getData() );
+
+ $stats->clearData(); // empty buffer for the next round
+ } catch ( Exception $ex ) {
+ MWExceptionHandler::logException( $ex );
+ }
+ }
+ }
+
/**
* Potentially open a socket and sent an HTTP request back to the server
* to run a specified number of jobs. This registers a callback to cleanup
* Add a new "<meta>" tag
* To add an http-equiv meta tag, precede the name with "http:"
*
- * @param string $name Tag name
- * @param string $val Tag value
+ * @param string $name Name of the meta tag
+ * @param string $val Value of the meta tag
*/
function addMeta( $name, $val ) {
array_push( $this->mMetatags, [ $name, $val ] );
<?php
-// @codingStandardsIgnoreFile Generic.Arrays.DisallowLongArraySyntax
-// @codingStandardsIgnoreFile Generic.Files.LineLength
-// @codingStandardsIgnoreFile MediaWiki.Usage.DirUsage.FunctionFound
+// phpcs:ignoreFile Generic.Arrays.DisallowLongArraySyntax,MediaWiki.Usage.DirUsage.FunctionFound
/**
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
. "{$otherInfo['minSupported']}.\n\nCheck if you have a"
. " newer php executable with a different name, such as php5.\n\n";
+ // phpcs:ignore Generic.Files.LineLength
$longHtml = <<<HTML
Please consider <a href="{$phpInfo['upgradeURL']}">upgrading your copy of
{$phpInfo['implementation']}</a>.
See our<a href="https://www.mediawiki.org/wiki/Compatibility#PHP">compatibility page</a>
for details of which versions are compatible with prior versions of {$phpInfo['implementation']}.
HTML;
+ // phpcs:enable
$this->triggerError(
"Supported {$phpInfo['implementation']} versions",
$shortText,
. "https://www.mediawiki.org/wiki/Download_from_Git#Fetch_external_libraries\n"
. "for help on installing the required components.";
+ // phpcs:ignore Generic.Files.LineLength
$longHtml = <<<HTML
MediaWiki now also has some external dependencies that need to be installed via
composer or from a separate git repo. Please see
<a href="https://www.mediawiki.org/wiki/Download_from_Git#Fetch_external_libraries">mediawiki.org</a>
for help on installing the required components.
HTML;
+ // phpcs:enable
$this->triggerError( 'External dependencies', $shortText, $longText, $longHtml );
}
? $pageIdOrTitle
: Title::newFromID( $pageIdOrTitle );
+ if ( !$title ) {
+ return false;
+ }
+
$record = self::getRevisionStore()->getKnownCurrentRevision( $title, $revId );
return $record ? new Revision( $record ) : false;
}
// Note that we allow 1 link higher than the max for things like 56 days but a 60 day link.
sort( $wgRCLinkDays );
- // @codingStandardsIgnoreStart Generic.CodeAnalysis.ForLoopWithTestFunctionCall.NotAllowed
+ // phpcs:ignore Generic.CodeAnalysis.ForLoopWithTestFunctionCall
for ( $i = 0; $i < count( $wgRCLinkDays ); $i++ ) {
- // @codingStandardsIgnoreEnd
if ( $wgRCLinkDays[$i] >= $rcMaxAgeDays ) {
$wgRCLinkDays = array_slice( $wgRCLinkDays, 0, $i + 1, false );
break;
/**
* Get the last touched timestamp
*
- * @param IDatabase $db Optional db
+ * @param IDatabase|null $db
* @return string|false Last-touched timestamp
*/
public function getTouched( $db = null ) {
$this->getOutput()->addWikiMsg( $msgKey, $this->getTitle()->getPrefixedText() );
}
- /* Static utility methods */
-
/**
* Watch or unwatch a page
* @since 1.22
}
protected function getExamplesMessages() {
- // @codingStandardsIgnoreStart Generic.Files.LineLength
+ // phpcs:disable Generic.Files.LineLength
return [
'action=block&user=192.0.2.5&expiry=3%20days&reason=First%20strike&token=123ABC'
=> 'apihelp-block-example-ip-simple',
'action=block&user=Vandal&expiry=never&reason=Vandalism&nocreate=&autoblock=&noemail=&token=123ABC'
=> 'apihelp-block-example-user-complex',
];
- // @codingStandardsIgnoreEnd
+ // phpcs:enable
}
public function getHelpUrls() {
* @deprecated Only for backwards compatibility, do not use
* @ingroup API
*/
-// @codingStandardsIgnoreStart Squiz.Classes.ValidClassName.NotCamelCaps
+// phpcs:ignore Squiz.Classes.ValidClassName.NotCamelCaps
class ApiErrorFormatter_BackCompat extends ApiErrorFormatter {
- // @codingStandardsIgnoreEnd
/**
* @param ApiResult $result Into which data will be added
}
$list->reloadFromMaster();
- // @codingStandardsIgnoreStart Avoid function calls in a FOR loop test part
+ // phpcs:ignore Generic.CodeAnalysis.ForLoopWithTestFunctionCall
for ( $item = $list->reset(); $list->current(); $item = $list->next() ) {
$data['items'][$item->getId()] += $item->getApiData( $this->getResult() );
}
- // @codingStandardsIgnoreEnd
$data['items'] = array_values( $data['items'] );
ApiResult::setIndexedTagName( $data['items'], 'i' );
"apihelp-query+alldeletedrevisions-paraminfo-useronly": "Kann nëmme mam <var>$3user</var> benotzt ginn.",
"apihelp-query+alldeletedrevisions-param-user": "Nëmme Versioune vun dësem Benotzer opzielen.",
"apihelp-query+alldeletedrevisions-param-excludeuser": "Versioune vun dësem Benotzer net opzielen.",
- "apihelp-query+allfileusages-paramvalue-prop-title": "Setzt den Titel vum Fichier derbäi.",
- "apihelp-query+alllinks-paramvalue-prop-title": "Setzt den Titel vum Link derbäi.",
+ "apihelp-query+allfileusages-paramvalue-prop-title": "Setzt den Titel vum Fichier dobäi.",
+ "apihelp-query+alllinks-paramvalue-prop-title": "Setzt den Titel vum Link dobäi.",
"apihelp-query+allrevisions-summary": "Lëscht vun alle Versiounen.",
"apihelp-query+allrevisions-param-user": "Nëmme Versioune vun dësem Benotzer opzielen.",
"apihelp-query+allrevisions-param-excludeuser": "Versioune vun dësem Benotzer net opzielen.",
"apihelp-query+allusers-param-activeusers": "Nëmme Benotzer opzielen déi an de leschten $1 {{PLURAL:$1|Dag|Deeg}} aktiv waren.",
"apihelp-query+backlinks-example-simple": "Linken op d'<kbd>Main page</kbd> weisen.",
"apihelp-query+blocks-summary": "Lëscht vun de gespaarte Benotzer an IP-Adressen.",
- "apihelp-query+blocks-paramvalue-prop-range": "Setzt de Beräich vun den IP-Adressen derbäi déi vun der Spär betraff sinn.",
+ "apihelp-query+blocks-paramvalue-prop-range": "Setzt de Beräich vun den IP-Adressen dobäi déi vun der Spär betraff sinn.",
"apihelp-query+blocks-example-simple": "Lëscht vun de Spären",
"apihelp-query+categories-summary": "All Kategorien opzielen zu deenen dës Säit gehéiert.",
- "apihelp-query+categories-paramvalue-prop-timestamp": "Setzt den Zäitstempel vun dem Ament derbäi wou d'Kategorie derbäigesat gouf.",
+ "apihelp-query+categories-paramvalue-prop-timestamp": "Setzt den Zäitstempel vun dem Ament dobäi wou d'Kategorie dobäigesat gouf.",
"apihelp-query+categories-example-generator": "Informatioun iwwer all Kategorien, déi an der Säit <kbd>Albert Einstein</kbd> benotzt ginn, kréien.",
"apihelp-query+categorymembers-summary": "All Säiten aus enger bestëmmter Kategorie opzielen.",
"apihelp-query+categorymembers-example-simple": "Déi éischt 10 Säiten aus der <kbd>Category:Physics</kbd> kréien.",
"apihelp-query+images-example-simple": "Eng Lëscht vun de Fichiere kréien déi op der [[Main Page|Haaptsäit]] benotzt ginn",
"apihelp-query+imageusage-example-simple": "Säite weisen déi [[:File:Albert Einstein Head.jpg]] benotzen",
"apihelp-query+info-paramvalue-prop-readable": "Ob de Benotzer dës Säit liese kann.",
- "apihelp-query+iwlinks-paramvalue-prop-url": "Setzt déi komplett URL derbäi.",
+ "apihelp-query+iwlinks-paramvalue-prop-url": "Setzt déi komplett URL dobäi.",
"apihelp-query+langlinks-param-lang": "Nëmme Sproochlinke mat dësem Sproochcode zréckginn.",
"apihelp-query+links-param-namespace": "Nëmme Linken an dësen Nummräim weisen.",
"apihelp-query+linkshere-summary": "All Säite fannen déi op déi Säit linken déi ugi gouf.",
"apihelp-query+random-param-redirect": "Benotzt dofir <kbd>$1filterredir=Viruleedungen</kbd>.",
"apihelp-query+recentchanges-summary": "Rezent Ännerungen opzielen.",
"apihelp-query+recentchanges-param-user": "Nëmmen Ännerunge vun dësem Benotzer opzielen.",
- "apihelp-query+recentchanges-paramvalue-prop-comment": "Setzt d'Bemierkung vun der Ännerung derbäi.",
+ "apihelp-query+recentchanges-paramvalue-prop-comment": "Setzt d'Bemierkung vun der Ännerung dobäi.",
"apihelp-query+recentchanges-example-simple": "Rezent Ännerunge weisen",
"apihelp-query+redirects-paramvalue-prop-title": "Titel vun all Viruleedung.",
"apihelp-query+revisions-example-last5": "Déi lescht 5 Versioune vun der <kbd>Haaptsäit</kbd> kréien.",
"apihelp-query+revisions+base-paramvalue-prop-comment": "Bemierkung vum Benotzer fir dës Versioun.",
"apihelp-query+revisions+base-paramvalue-prop-content": "Text vun der Versioun.",
"apihelp-query+search-param-namespace": "Nëmmen an dësen Nummräim sichen.",
- "apihelp-query+search-paramvalue-prop-wordcount": "Setzt d'Zuel vun de Wierder vun der Säit derbäi.",
- "apihelp-query+search-paramvalue-prop-timestamp": "Setzt den Zäitstempel vun der leschter Ännerung vun der Säit derbäi.",
+ "apihelp-query+search-paramvalue-prop-wordcount": "Setzt d'Zuel vun de Wierder vun der Säit dobäi.",
+ "apihelp-query+search-paramvalue-prop-timestamp": "Setzt den Zäitstempel vun der leschter Ännerung vun der Säit dobäi.",
"apihelp-query+search-paramvalue-prop-score": "Ignoréiert.",
"apihelp-query+search-paramvalue-prop-hasrelated": "Ignoréiert.",
"apihelp-query+templates-param-namespace": "Schablounen nëmmen an dësen Nummräim weisen.",
"apihelp-query+transcludedin-paramvalue-prop-title": "Titel vun all Säit.",
"apihelp-query+usercontribs-summary": "All Ännerunge vun engem Benotzer kréien.",
- "apihelp-query+usercontribs-paramvalue-prop-timestamp": "Setzt den Zäitstempel vun derÄnnerung derbäi.",
- "apihelp-query+usercontribs-paramvalue-prop-comment": "Setzt d'Bemierkung vun der Ännerung derbäi.",
+ "apihelp-query+usercontribs-paramvalue-prop-timestamp": "Setzt den Zäitstempel vun der Ännerung dobäi.",
+ "apihelp-query+usercontribs-paramvalue-prop-comment": "Setzt d'Bemierkung vun der Ännerung dobäi.",
"apihelp-query+userinfo-param-prop": "Informatioune fir dranzesetzen:",
"apihelp-query+userinfo-paramvalue-prop-options": "Lëscht vun allen Astellungen déi den aktuelle Benotzer gemaach huet.",
- "apihelp-query+userinfo-paramvalue-prop-editcount": "Setzt d'Gesamtzuel vun den Ännerunge vum aktuelle Benotzer derbäi.",
- "apihelp-query+userinfo-paramvalue-prop-realname": "Setzt dem Benotzer säi richtegen Numm derbäi.",
- "apihelp-query+userinfo-paramvalue-prop-registrationdate": "Setzt de Registréierungsdatum vum Benotzer derbäi.",
+ "apihelp-query+userinfo-paramvalue-prop-editcount": "Setzt d'Gesamtzuel vun den Ännerunge vum aktuelle Benotzer dobäi.",
+ "apihelp-query+userinfo-paramvalue-prop-realname": "Setzt dem Benotzer säi richtegen Numm dobäi.",
+ "apihelp-query+userinfo-paramvalue-prop-registrationdate": "Setzt de Registréierungsdatum vum Benotzer dobäi.",
"apihelp-query+users-paramvalue-prop-rights": "Weist all Rechter déi all Benotzer huet.",
"apihelp-query+watchlist-param-user": "Nëmmen Ännerunge vun dësem Benotzer opzielen.",
"apihelp-query+watchlist-param-excludeuser": "Ännerunge vun dësem Benotzer net opzielen.",
- "apihelp-query+watchlist-paramvalue-prop-title": "Setzt den Titel vun der Säit derbäi.",
- "apihelp-query+watchlist-paramvalue-prop-user": "Setzt de Benotzer derbäi deen d'Ännerung gemaach huet.",
- "apihelp-query+watchlist-paramvalue-prop-comment": "Setzt d'Bemierkung vun der Ännerung derbäi.",
- "apihelp-query+watchlist-paramvalue-prop-timestamp": "Setzt den Zäitstempel vun der Ännerung derbäi.",
+ "apihelp-query+watchlist-paramvalue-prop-title": "Setzt den Titel vun der Säit dobäi.",
+ "apihelp-query+watchlist-paramvalue-prop-user": "Setzt de Benotzer dobäi deen d'Ännerung gemaach huet.",
+ "apihelp-query+watchlist-paramvalue-prop-comment": "Setzt d'Bemierkung vun der Ännerung dobäi.",
+ "apihelp-query+watchlist-paramvalue-prop-timestamp": "Setzt den Zäitstempel vun der Ännerung dobäi.",
"apihelp-query+watchlist-paramvalue-type-external": "Extern Ännerungen.",
"apihelp-query+watchlist-paramvalue-type-new": "Ugeluecht Säiten.",
"apihelp-query+watchlistraw-param-show": "Nëmmen Elementer opzielen déi dëse Critèren entspriechen.",
"apihelp-query+allusers-param-activeusers": "Wyświetl tylko użytkowników, aktywnych w ciągu {{PLURAL:$1|ostatniego dnia|ostatnich $1 dni}}.",
"apihelp-query+allusers-example-Y": "Wyświetl użytkowników zaczynających się na <kbd>Y</kbd>.",
"apihelp-query+backlinks-summary": "Znajdź wszystkie strony, które linkują do danej strony.",
+ "apihelp-query+backlinks-param-title": "Tytuł strony do wyszukania. Nie może być użyty równocześnie z <var>$1pageid</var>.",
"apihelp-query+backlinks-param-namespace": "Przestrzeń nazw, z której wymieniać.",
"apihelp-query+backlinks-example-simple": "Pokazuj linki do <kbd>Main page</kbd>.",
"apihelp-query+blocks-summary": "Lista wszystkich zablokowanych użytkowników i adresów IP.",
"apihelp-query+pageswithprop-paramvalue-prop-value": "Dodaje wartość właściwości strony.",
"apihelp-query+pageswithprop-param-limit": "Maksymalna liczba zwracanych stron.",
"apihelp-query+pageswithprop-param-dir": "W jakim kierunku sortować.",
+ "apihelp-query+pageswithprop-example-simple": "Lista pierwszych 10 stron za pomocą <code>{{DISPLAYTITLE:}}</code>.",
"apihelp-query+pageswithprop-example-generator": "Pobierz dodatkowe informacje o pierwszych 10 stronach wykorzystując <code>__NOTOC__</code>.",
"apihelp-query+prefixsearch-param-search": "Wyszukaj tekst.",
"apihelp-query+prefixsearch-param-namespace": "Przestrzenie nazw do przeszukania.",
"apihelp-query+revisions+base-paramvalue-prop-tags": "Znaczniki wersji.",
"apihelp-query+revisions+base-param-limit": "Ograniczenie na liczbę wersji, które będą zwrócone.",
"apihelp-query+search-summary": "Wykonaj wyszukiwanie pełnotekstowe.",
+ "apihelp-query+search-param-namespace": "Szukaj tylko w tych przestrzeniach nazw.",
"apihelp-query+search-param-info": "Które metadane zwrócić.",
"apihelp-query+search-paramvalue-prop-size": "Dodaje rozmiar strony w bajtach.",
"apihelp-query+search-paramvalue-prop-wordcount": "Dodaje liczbę słów na stronie.",
"apihelp-query+search-paramvalue-prop-redirecttitle": "Dodaje tytuł pasującego przekierowania.",
+ "apihelp-query+search-paramvalue-prop-sectiontitle": "Dodaje tytuł pasującej sekcji.",
+ "apihelp-query+search-paramvalue-prop-extensiondata": "Dodaje dodatkowe dane generowane przez rozszerzenia.",
"apihelp-query+search-paramvalue-prop-hasrelated": "Zignorowano",
"apihelp-query+search-param-limit": "Łączna liczba stron do zwrócenia.",
"apihelp-query+search-param-interwiki": "Dołączaj wyniki wyszukiwań interwiki w wyszukiwarce, jeśli możliwe.",
"apihelp-query+siteinfo-paramvalue-prop-general": "Ogólne informacje o systemie.",
"apihelp-query+siteinfo-paramvalue-prop-namespaces": "Lista zarejestrowanych przestrzeni nazw i ich nazwy kanoniczne.",
"apihelp-query+siteinfo-paramvalue-prop-namespacealiases": "Lista zarejestrowanych aliasów przestrzeni nazw.",
+ "apihelp-query+siteinfo-paramvalue-prop-specialpagealiases": "Lista aliasów stron specjalnych.",
"apihelp-query+siteinfo-paramvalue-prop-magicwords": "Lista słów magicznych i ich aliasów.",
"apihelp-query+siteinfo-param-numberingroup": "Wyświetla liczbę użytkowników w grupach użytkowników.",
"apihelp-query+siteinfo-example-simple": "Pobierz informacje o stronie.",
"apihelp-query+stashimageinfo-param-sessionkey": "Alias dla $1filekey, dla kompatybilności wstecznej.",
+ "apihelp-query+stashimageinfo-example-simple": "Zwraca informacje o ukrytym pliku.",
"apihelp-query+tags-summary": "Lista znaczników zmian.",
"apihelp-query+tags-param-limit": "Maksymalna liczba znaczników do wyświetlenia.",
"apihelp-query+tags-paramvalue-prop-name": "Dodaje nazwę znacznika.",
"apierror-integeroutofrange-abovemax": "Wartość <var>$1</var> dla użytkowników nie może przekraczać $2 (ustawiono $3).",
"apierror-integeroutofrange-belowminimum": "Wartość <var>$1</var> nie może być mniejsza niż $2 (ustawiono $3).",
"apierror-invalidcategory": "Wprowadzona nazwa kategorii jest nieprawidłowa.",
+ "apierror-invalidexpiry": "Nieprawidłowy czas wygaśnięcia „$1”.",
+ "apierror-invalid-file-key": "Nieprawidłowy klucz pliku.",
"apierror-invalidlang": "Nieprawidłowy kod języka dla parametru <var>$1</var>.",
"apierror-invalidoldimage": "Parametr <var>oldimage</var> ma nieprawidłowy format.",
"apierror-invalidparammix": "{{PLURAL:$2|Parametry}} $1 nie mogą być używane razem.",
"apierror-invaliduserid": "Identyfikator użytkownika <var>$1</var> jest nieprawidłowy.",
"apierror-maxlag-generic": "Oczekiwania na serwer bazy danych: opóźnienie $1 {{PLURAL:$1|sekunda|sekundy|sekund}}.",
"apierror-missingparam": "Parametr <var>$1</var> musi być podany.",
+ "apierror-missingrev-title": "Brak aktualnej wersji tytułu $1.",
"apierror-missingtitle": "Wybrana przez ciebie strona nie istnieje.",
"apierror-missingtitle-byname": "Strona $1 nie istnieje.",
"apierror-moduledisabled": "Moduł <kbd>$1</kbd> został wyłączony.",
"apierror-mustbeloggedin-generic": "Musisz być zalogowany.",
+ "apierror-mustbeloggedin-removeauth": "Aby usunąć dane uwierzytelniające, musisz się zalogować.",
"apierror-mustbeloggedin": "Musisz się zalogować, aby mieć możliwość $1.",
+ "apierror-nochanges": "Nie zażądano żadnych zmian.",
"apierror-nodeleteablefile": "Nie ma takiej starej wersji pliku.",
"apierror-noedit-anon": "Niezarejestrowani użytkownicy nie mogą edytować stron.",
"apierror-noedit": "Nie masz uprawnień do edytowania stron.",
"apiwarn-invalidcategory": "„$1” nie jest kategorią.",
"apiwarn-invalidtitle": "„$1” nie jest poprawnym tytułem.",
"apiwarn-notfile": "„$1” nie jest plikiem.",
+ "apiwarn-tokennotallowed": "Działanie „$1” jest niedozwolone dla bieżącego użytkownika.",
"apiwarn-toomanyvalues": "Podano zbyt wiele wartości dla parametru <var>$1</var>. Ograniczenie do $2.",
+ "apiwarn-validationfailed-keytoolong": "klucz zbyt długi (dozwolone nie więcej niż $1 bajtów).",
"apiwarn-validationfailed": "Błąd walidacji dla <kbd>$1</kbd>: $2",
+ "apiwarn-wgDebugAPI": "<strong>Ostrzeżenie o zabezpieczeniach</strong>: włączone jest <var>$wgDebugAPI</var>.",
"api-feed-error-title": "Błąd ($1)",
"api-exception-trace": "$1 w $2($3)\n$4",
"api-credits-header": "Twórcy",
private $deps;
/**
- * Create an instance.
* @param mixed $value The user-supplied value
* @param CacheDependency|CacheDependency[] $deps A dependency or dependency
* array. All dependencies must be objects implementing CacheDependency.
$itemKey = array_keys( array_slice( $this->cachedChunks, 0, 1 ) );
$itemKey = array_shift( $itemKey );
- if ( !is_integer( $itemKey ) ) {
+ if ( !is_int( $itemKey ) ) {
wfWarn( "Attempted to get item with non-numeric key while " .
"the next item in the queue has a key ($itemKey) in " . __METHOD__ );
} elseif ( is_null( $itemKey ) ) {
static public $allKeys = [
'fallback', 'namespaceNames', 'bookstoreList',
'magicWords', 'messages', 'rtl', 'capitalizeAllNouns', 'digitTransformTable',
- 'separatorTransformTable', 'fallback8bitEncoding', 'linkPrefixExtension',
+ 'separatorTransformTable', 'minimumGroupingDigits',
+ 'fallback8bitEncoding', 'linkPrefixExtension',
'linkTrail', 'linkPrefixCharset', 'namespaceAliases',
'dateFormats', 'datePreferences', 'datePreferenceMigrationMap',
'defaultDateFormat', 'extraUserToggles', 'specialPageAliases',
* @return Status
*/
public function updateChangeTagsOnAll( $tagsToAdd, $tagsToRemove, $params, $reason, $user ) {
- // @codingStandardsIgnoreStart Generic.CodeAnalysis.ForLoopWithTestFunctionCall.NotAllowed
+ // phpcs:ignore Generic.CodeAnalysis.ForLoopWithTestFunctionCall
for ( $this->reset(); $this->current(); $this->next() ) {
- // @codingStandardsIgnoreEnd
$item = $this->current();
$status = ChangeTags::updateTagsWithChecks( $tagsToAdd, $tagsToRemove,
null, null, $item->getId(), $params, $reason, $user );
* @return Status
*/
public function updateChangeTagsOnAll( $tagsToAdd, $tagsToRemove, $params, $reason, $user ) {
- // @codingStandardsIgnoreStart Generic.CodeAnalysis.ForLoopWithTestFunctionCall.NotAllowed
+ // phpcs:ignore Generic.CodeAnalysis.ForLoopWithTestFunctionCall
for ( $this->reset(); $this->current(); $this->next() ) {
- // @codingStandardsIgnoreEnd
$item = $this->current();
$status = ChangeTags::updateTagsWithChecks( $tagsToAdd, $tagsToRemove,
null, $item->getId(), null, $params, $reason, $user );
* Will override if it's already registered.
* Use "*" for $name to provide a fallback config for all unknown names.
* @param string $name
- * @param callable|Config $callback A factory callabck that takes this ConfigFactory
+ * @param callable|Config $callback A factory callback that takes this ConfigFactory
* as an argument and returns a Config instance, or an existing Config instance.
* @throws InvalidArgumentException If an invalid callback is provided
*/
* @since 1.21
*
* @param WikiPage $page The deleted page
- * @param ParserOutput $parserOutput Optional parser output object
+ * @param ParserOutput|null $parserOutput Optional parser output object
* for efficient access to meta-information about the content object.
* Provide if you have one handy.
*
- * @return DataUpdate[] A list of DataUpdate instances that will clean up the
+ * @return DeferrableUpdate[] A list of DeferrableUpdate instances that will clean up the
* database after deletion.
*/
public function getDeletionUpdates( WikiPage $page,
*/
class TextContentHandler extends ContentHandler {
- // @codingStandardsIgnoreStart T59585
public function __construct( $modelId = CONTENT_MODEL_TEXT, $formats = [ CONTENT_FORMAT_TEXT ] ) {
parent::__construct( $modelId, $formats );
}
- // @codingStandardsIgnoreEnd
/**
* Returns the content's text as-is.
/**
* Set the Config object
*
- * @param Config $c
+ * @param Config $config
*/
- public function setConfig( Config $c );
+ public function setConfig( Config $config );
/**
* Set the WebRequest object
private static $instance = null;
/**
- * Set the Config object
- *
- * @param Config $c
+ * @param Config $config
*/
- public function setConfig( Config $c ) {
- $this->config = $c;
+ public function setConfig( Config $config ) {
+ $this->config = $config;
}
/**
- * Get the Config object
- *
* @return Config
*/
public function getConfig() {
return $this->skin;
}
- /** Helpful methods **/
-
/**
* Get a Message object with context set
* Parameters are the same as wfMessage()
return call_user_func_array( 'wfMessage', $args )->setContext( $this );
}
- /** Static methods **/
-
/**
* Get the RequestContext object associated with the main request
*
// HHVM: Class undefined: foo
// PHP5: Class 'foo' not found
if ( preg_match( "/Class (undefined: \w+|'\w+' not found)/", $msg ) ) {
- // @codingStandardsIgnoreStart Generic.Files.LineLength.TooLong
+ // phpcs:disable Generic.Files.LineLength
$msg = <<<TXT
{$msg}
Please see <a href="https://www.mediawiki.org/wiki/Download_from_Git#Fetch_external_libraries">mediawiki.org</a> for help on installing the required components.
TXT;
- // @codingStandardsIgnoreEnd
+ // phpcs:enable
}
// We can't just create an exception and log it as it is likely that
use HTMLFormElement;
public function __construct( $fieldWidget, array $config = [] ) {
- // Parent constructor
parent::__construct( $fieldWidget, $config );
+
// Traits
$this->initializeHTMLFormElement( $config );
}
use HTMLFormElement;
public function __construct( $fieldWidget, $buttonWidget = false, array $config = [] ) {
- // Parent constructor
parent::__construct( $fieldWidget, $buttonWidget, $config );
+
// Traits
$this->initializeHTMLFormElement( $config );
}
public function getTableRow( $value ) {
$msg = $this->formatMsg();
- return
- '<tr><td></td><td class="mw-input">' .
+ return '<tr><td></td><td class="mw-input">' .
'<div class="mw-editTools">' .
$msg->parseAsBlock() .
"</div></td></tr>\n";
/**
* @param Database $db
* @param bool $shared
- * @param Maintenance $maintenance
+ * @param Maintenance|null $maintenance
*
* @throws MWException
* @return DatabaseUpdater
*/
- public static function newForDB( Database $db, $shared = false, $maintenance = null ) {
+ public static function newForDB( Database $db, $shared = false, Maintenance $maintenance = null ) {
$type = $db->getType();
if ( in_array( $type, Installer::getDBTypes() ) ) {
$class = ucfirst( $type ) . 'Updater';
* 1.13...) with the values being arrays of updates, identical to how
* updaters.inc did it (for now)
*
- * @return array
+ * @return array[]
*/
abstract protected function getCoreUpdateList();
global $wgAutoloadClasses;
$wgAutoloadClasses = [];
- // @codingStandardsIgnoreStart
// LocalSettings.php should not call functions, except wfLoadSkin/wfLoadExtensions
// Define the required globals here, to ensure, the functions can do it work correctly.
+ // phpcs:ignore MediaWiki.VariableAnalysis.UnusedGlobalVariables
global $wgExtensionDirectory, $wgStyleDirectory;
- // @codingStandardsIgnoreEnd
MediaWiki\suppressWarnings();
$_lsExists = file_exists( "$IP/LocalSettings.php" );
* @return bool Whether the connection string is valid.
*/
public static function checkConnectStringFormat( $connect_string ) {
- // @@codingStandardsIgnoreStart Long lines with regular expressions.
+ // phpcs:disable Generic.Files.LineLength
// @todo Very long regular expression. Make more readable?
$isValid = preg_match( '/^[[:alpha:]][\w\-]*(?:\.[[:alpha:]][\w\-]*){0,2}$/', $connect_string ); // TNS name
$isValid |= preg_match( '/^(?:\/\/)?[\w\-\.]+(?::[\d]+)?(?:\/(?:[\w\-\.]+(?::(pooled|dedicated|shared))?)?(?:\/[\w\-\.]+)?)?$/', $connect_string ); // EZConnect
- // @@codingStandardsIgnoreEnd
+ // phpcs:enable
return (bool)$isValid;
}
}
// Try to insert the jobs and update $partitionsTry on any failures.
// Retry to insert any remaning jobs again, ignoring the bad partitions.
$jobsLeft = $jobs;
- // @codingStandardsIgnoreStart Generic.CodeAnalysis.ForLoopWithTestFunctionCall.NotAllowed
+ // phpcs:ignore Generic.CodeAnalysis.ForLoopWithTestFunctionCall
for ( $i = $this->maxPartitionsTry; $i > 0 && count( $jobsLeft ); --$i ) {
- // @codingStandardsIgnoreEnd
try {
$partitionRing->getLiveRing();
} catch ( UnexpectedValueException $e ) {
*/
class CSSMin {
- /* Constants */
-
/** @var string Strip marker for comments. **/
const PLACEHOLDER = "\x7fPLACEHOLDER\x7f";
const EMBED_REGEX = '\/\*\s*\@embed\s*\*\/';
const COMMENT_REGEX = '\/\*.*?\*\/';
- /* Protected Static Members */
-
/** @var array List of common image files extensions and MIME-types */
protected static $mimeTypes = [
'gif' => 'image/gif',
'svg' => 'image/svg+xml',
];
- /* Static Methods */
-
/**
* Get a list of local files referenced in a stylesheet (includes non-existent files).
*
<?php
-// @codingStandardsIgnoreFile File external to MediaWiki. Ignore coding conventions checks.
+// phpcs:ignoreFile -- File external to MediaWiki. Ignore coding conventions checks.
/**
* JavaScript Minifier
*
*/
class JavaScriptMinifier {
- /* Class constants */
/* Parsing states.
* The state machine is only necessary to decide whether to parse a slash as division
* operator or as regexp literal.
// Sanity limit to avoid excessive memory usage
const STACK_LIMIT = 1000;
- /* Static functions */
-
/**
* Returns minified JavaScript code.
*
<?php
-// @codingStandardsIgnoreFile File external to MediaWiki. Ignore coding conventions checks.
+// phpcs:ignoreFile -- File external to MediaWiki. Ignore coding conventions checks.
/**
* JSMinPlus version 1.4
*
public static function factory(
LockManager $manager, array $paths, $type, StatusValue $status, $timeout = 0
) {
- $pathsByType = is_integer( $type ) ? [ $type => $paths ] : $paths;
+ $pathsByType = is_int( $type ) ? [ $type => $paths ] : $paths;
$lockStatus = $manager->lockByType( $pathsByType, $timeout );
$status->merge( $lockStatus );
if ( $lockStatus->isOK() ) {
<?php
-// @codingStandardsIgnoreFile It's an external lib and it isn't. Let's not bother.
+// phpcs:ignoreFile -- It's an external lib and it isn't. Let's not bother.
/**
* Memcached client for PHP.
*
* @return bool
*/
private function isOpen( $index ) {
- if ( !is_integer( $index ) ) {
+ if ( !is_int( $index ) ) {
return false;
}
return $this->buffer;
}
- /**
- * Check whether this data factory has any data.
- * @return bool
- */
public function hasData() {
return !empty( $this->buffer );
}
- /**
- * Return data from the factory.
- * @return StatsdData[]
- */
public function getData() {
return $this->buffer;
}
- /**
- * Set collection enable status.
- * @param bool $enabled Will collection be enabled?
- * @return void
- */
+ public function clearData() {
+ $this->buffer = [];
+ }
+
+ public function getDataCount() {
+ return count( $this->buffer );
+ }
+
public function setEnabled( $enabled ) {
$this->enabled = $enabled;
}
*/
interface IBufferingStatsdDataFactory extends StatsdDataFactoryInterface {
/**
- * Check whether this data factory has any data.
+ * Check whether this data factory has any buffered data.
* @return bool
*/
public function hasData();
/**
- * Return data from the factory.
+ * Return the buffered data from the factory.
* @return StatsdData[]
*/
public function getData();
+ /**
+ * Clear all buffered data from the factory
+ * @since 1.31
+ */
+ public function clearData();
+
+ /**
+ * Return the number of buffered statsd data entries
+ * @return int
+ * @since 1.31
+ */
+ public function getDataCount();
+
/**
* Set collection enable status.
* @param bool $enabled Will collection be enabled?
* @return void
*/
public function setEnabled( $enabled );
-
}
return $data;
}
- /**
- * Check whether this data factory has any data.
- * @return bool
- */
public function hasData() {
return false;
}
- /**
- * Return data from the factory.
- * @return StatsdData[]
- */
public function getData() {
return [];
}
- /**
- * Set collection enable status.
- * @param bool $enabled Will collection be enabled?
- * @return void
- */
+ public function clearData() {
+ // Nothing to do, always empty
+ }
+
+ public function getDataCount() {
+ return 0;
+ }
+
public function setEnabled( $enabled ) {
// Nothing to do, null factory is always disabled.
}
}
}
- // @codingStandardsIgnoreStart Generic.Files.LineLength
+ // phpcs:disable Generic.Files.LineLength
/**
* Process attributes.
* Simple values can be stored as either a tag or attribute
* @param array $attribs Array attribute=>value
* @throws RuntimeException
*/
- // @codingStandardsIgnoreEnd
+ // phpcs:enable
private function doAttribs( $attribs ) {
// first check for rdf:parseType attribute, as that can change
// how the attributes are interperted.
return;
}
$res = [];
- // @codingStandardsIgnoreStart Long line that cannot be broken
if ( !preg_match(
/* ahh! scary regex... */
+ // phpcs:ignore Generic.Files.LineLength
'/^([0-3]\d{3})(?:-([01]\d)(?:-([0-3]\d)(?:T([0-2]\d):([0-6]\d)(?::([0-6]\d)(?:\.\d+)?)?([-+]\d{2}:\d{2}|Z)?)?)?)?$/D',
$val, $res )
) {
- // @codingStandardsIgnoreEnd
-
$this->logger->info( __METHOD__ . " Expected date but got $val" );
$val = null;
} else {
*
* @ingroup Media
*/
-// @codingStandardsIgnoreStart Squiz.Classes.ValidClassName.NotCamelCaps
+// phpcs:ignore Squiz.Classes.ValidClassName.NotCamelCaps
class BitmapHandler_ClientOnly extends BitmapHandler {
- // @codingStandardsIgnoreEnd
/**
* @param File $image
// The dirmark, however, must not be immediately adjacent
// to the filename, because it can get copied with it.
// See T27277.
- // @codingStandardsIgnoreStart Ignore long line
+ // phpcs:disable Generic.Files.LineLength
$out->addWikiText( <<<EOT
<div class="fullMedia"><span class="dangerousLink">{$medialink}</span> $dirmark<span class="fileInfo">$longDesc</span></div>
<div class="mediaWarning">$warning</div>
EOT
);
- // @codingStandardsIgnoreEnd
+ // phpcs:enable
} else {
$out->addWikiText( <<<EOT
<div class="fullMedia">{$medialink} {$dirmark}<span class="fileInfo">$longDesc</span>
# at least one character of a host name (embeds EXT_LINK_URL_CLASS)
const EXT_LINK_ADDR = '(?:[0-9.]+|\\[(?i:[0-9a-f:.]+)\\]|[^][<>"\\x00-\\x20\\x7F\p{Zs}\x{FFFD}])';
# RegExp to make image URLs (embeds IPv6 part of EXT_LINK_ADDR)
- // @codingStandardsIgnoreStart Generic.Files.LineLength
+ // phpcs:ignore Generic.Files.LineLength
const EXT_IMAGE_REGEX = '/^(http:\/\/|https:\/\/)((?:\\[(?i:[0-9a-f:.]+)\\])?[^][<>"\\x00-\\x20\\x7F\p{Zs}\x{FFFD}]+)
\\/([A-Za-z0-9_.,~%\\-+&;#*?!=()@\\x80-\\xFF]+)\\.((?i)gif|png|jpg|jpeg)$/Sxu';
- // @codingStandardsIgnoreEnd
# Regular expression for a non-newline space
const SPACE_NOT_NL = '(?:\t| |&\#0*160;|&\#[Xx]0*[Aa]0;|\p{Zs})';
$useSubpages = $this->areSubpagesAllowed();
- // @codingStandardsIgnoreStart Squiz.WhiteSpace.SemicolonSpacing.Incorrect
# Loop for each link
for ( ; $line !== false && $line !== null; $a->next(), $line = $a->current() ) {
- // @codingStandardsIgnoreEnd
-
# Check for excessive memory usage
if ( $holders->isBig() ) {
# Too big
}
// Extract any forwarded flags
+ if ( isset( $result['title'] ) ) {
+ $title = $result['title'];
+ }
if ( isset( $result['found'] ) ) {
$found = $result['found'];
}
$deps = [];
# Loop to fetch the article, with up to 1 redirect
- // @codingStandardsIgnoreStart Generic.CodeAnalysis.ForLoopWithTestFunctionCall.NotAllowed
+ // phpcs:ignore Generic.CodeAnalysis.ForLoopWithTestFunctionCall
for ( $i = 0; $i < 2 && is_object( $title ); $i++ ) {
- // @codingStandardsIgnoreEnd
# Give extensions a chance to select the revision instead
$id = false; # Assume current
Hooks::run( 'BeforeParserFetchTemplateAndtitle',
$anchor = $safeHeadline;
$fallbackAnchor = $fallbackHeadline;
if ( isset( $refers[$arrayKey] ) ) {
- // @codingStandardsIgnoreStart
+ // phpcs:ignore Generic.CodeAnalysis.ForLoopWithTestFunctionCall,Generic.Formatting.DisallowMultipleStatements
for ( $i = 2; isset( $refers["${arrayKey}_$i"] ); ++$i );
- // @codingStandardsIgnoreEnd
$anchor .= "_$i";
$linkAnchor .= "_$i";
$refers["${arrayKey}_$i"] = true;
$refers[$arrayKey] = true;
}
if ( $fallbackHeadline !== false && isset( $refers[$fallbackArrayKey] ) ) {
- // @codingStandardsIgnoreStart
+ // phpcs:ignore Generic.CodeAnalysis.ForLoopWithTestFunctionCall,Generic.Formatting.DisallowMultipleStatements
for ( $i = 2; isset( $refers["${fallbackArrayKey}_$i"] ); ++$i );
- // @codingStandardsIgnoreEnd
$fallbackAnchor .= "_$i";
$refers["${fallbackArrayKey}_$i"] = true;
} else {
/**
* @ingroup Parser
*/
-// @codingStandardsIgnoreStart Squiz.Classes.ValidClassName.NotCamelCaps
+// phpcs:ignore Squiz.Classes.ValidClassName.NotCamelCaps
class Preprocessor_DOM extends Preprocessor {
- // @codingStandardsIgnoreEnd
/**
* @var Parser
* An expansion frame, used as a context to expand the result of preprocessToObj()
* @ingroup Parser
*/
-// @codingStandardsIgnoreStart Squiz.Classes.ValidClassName.NotCamelCaps
+// phpcs:ignore Squiz.Classes.ValidClassName.NotCamelCaps
class PPFrame_DOM implements PPFrame {
- // @codingStandardsIgnoreEnd
/**
* @var Preprocessor
* Expansion frame with template arguments
* @ingroup Parser
*/
-// @codingStandardsIgnoreStart Squiz.Classes.ValidClassName.NotCamelCaps
+// phpcs:ignore Squiz.Classes.ValidClassName.NotCamelCaps
class PPTemplateFrame_DOM extends PPFrame_DOM {
- // @codingStandardsIgnoreEnd
public $numberedArgs, $namedArgs;
* Expansion frame with custom arguments
* @ingroup Parser
*/
-// @codingStandardsIgnoreStart Squiz.Classes.ValidClassName.NotCamelCaps
+// phpcs:ignore Squiz.Classes.ValidClassName.NotCamelCaps
class PPCustomFrame_DOM extends PPFrame_DOM {
- // @codingStandardsIgnoreEnd
public $args;
/**
* @ingroup Parser
*/
-// @codingStandardsIgnoreStart Squiz.Classes.ValidClassName.NotCamelCaps
+// phpcs:ignore Squiz.Classes.ValidClassName.NotCamelCaps
class PPNode_DOM implements PPNode {
- // @codingStandardsIgnoreEnd
/**
* @var DOMElement
*
* @ingroup Parser
*/
-// @codingStandardsIgnoreStart Squiz.Classes.ValidClassName.NotCamelCaps
+// phpcs:ignore Squiz.Classes.ValidClassName.NotCamelCaps
class Preprocessor_Hash extends Preprocessor {
- // @codingStandardsIgnoreEnd
/**
* @var Parser
* Stack class to help Preprocessor::preprocessToObj()
* @ingroup Parser
*/
-// @codingStandardsIgnoreStart Squiz.Classes.ValidClassName.NotCamelCaps
+// phpcs:ignore Squiz.Classes.ValidClassName.NotCamelCaps
class PPDStack_Hash extends PPDStack {
- // @codingStandardsIgnoreEnd
public function __construct() {
$this->elementClass = 'PPDStackElement_Hash';
/**
* @ingroup Parser
*/
-// @codingStandardsIgnoreStart Squiz.Classes.ValidClassName.NotCamelCaps
+// phpcs:ignore Squiz.Classes.ValidClassName.NotCamelCaps
class PPDStackElement_Hash extends PPDStackElement {
- // @codingStandardsIgnoreEnd
public function __construct( $data = [] ) {
$this->partClass = 'PPDPart_Hash';
/**
* @ingroup Parser
*/
-// @codingStandardsIgnoreStart Squiz.Classes.ValidClassName.NotCamelCaps
+// phpcs:ignore Squiz.Classes.ValidClassName.NotCamelCaps
class PPDPart_Hash extends PPDPart {
- // @codingStandardsIgnoreEnd
public function __construct( $out = '' ) {
if ( $out !== '' ) {
* An expansion frame, used as a context to expand the result of preprocessToObj()
* @ingroup Parser
*/
-// @codingStandardsIgnoreStart Squiz.Classes.ValidClassName.NotCamelCaps
+// phpcs:ignore Squiz.Classes.ValidClassName.NotCamelCaps
class PPFrame_Hash implements PPFrame {
- // @codingStandardsIgnoreEnd
/**
* @var Parser
* Expansion frame with template arguments
* @ingroup Parser
*/
-// @codingStandardsIgnoreStart Squiz.Classes.ValidClassName.NotCamelCaps
+// phpcs:ignore Squiz.Classes.ValidClassName.NotCamelCaps
class PPTemplateFrame_Hash extends PPFrame_Hash {
- // @codingStandardsIgnoreEnd
public $numberedArgs, $namedArgs, $parent;
public $numberedExpansionCache, $namedExpansionCache;
* Expansion frame with custom arguments
* @ingroup Parser
*/
-// @codingStandardsIgnoreStart Squiz.Classes.ValidClassName.NotCamelCaps
+// phpcs:ignore Squiz.Classes.ValidClassName.NotCamelCaps
class PPCustomFrame_Hash extends PPFrame_Hash {
- // @codingStandardsIgnoreEnd
public $args;
/**
* @ingroup Parser
*/
-// @codingStandardsIgnoreStart Squiz.Classes.ValidClassName.NotCamelCaps
+// phpcs:ignore Squiz.Classes.ValidClassName.NotCamelCaps
class PPNode_Hash_Tree implements PPNode {
- // @codingStandardsIgnoreEnd
public $name;
/**
* @ingroup Parser
*/
-// @codingStandardsIgnoreStart Squiz.Classes.ValidClassName.NotCamelCaps
+// phpcs:ignore Squiz.Classes.ValidClassName.NotCamelCaps
class PPNode_Hash_Text implements PPNode {
- // @codingStandardsIgnoreEnd
public $value;
private $store, $index;
/**
* @ingroup Parser
*/
-// @codingStandardsIgnoreStart Squiz.Classes.ValidClassName.NotCamelCaps
+// phpcs:ignore Squiz.Classes.ValidClassName.NotCamelCaps
class PPNode_Hash_Array implements PPNode {
- // @codingStandardsIgnoreEnd
public $value;
/**
* @ingroup Parser
*/
-// @codingStandardsIgnoreStart Squiz.Classes.ValidClassName.NotCamelCaps
+// phpcs:ignore Squiz.Classes.ValidClassName.NotCamelCaps
class PPNode_Hash_Attr implements PPNode {
- // @codingStandardsIgnoreEnd
public $name, $value;
private $store, $index;
}
}
-// @codingStandardsIgnoreStart Squiz.Classes.ValidClassName.NotCamelCaps
+// phpcs:ignore Squiz.Classes.ValidClassName.NotCamelCaps
class PoolCounter_Stub extends PoolCounter {
- // @codingStandardsIgnoreEnd
public function __construct() {
/* No parameters needed */
}
$conn = $status->value;
- // @codingStandardsIgnoreStart Generic.Files.LineLength
+ // phpcs:disable Generic.Files.LineLength
static $script =
/** @lang Lua */
<<<LUA
end
return 1
LUA;
- // @codingStandardsIgnoreEnd
+ // phpcs:enable
try {
$conn->luaEval( $script,
return $data;
}
- /* Methods */
-
/**
* Register core modules and runs registration hooks.
* @param Config $config [optional]
return $moduleNames;
}
- /* Static Methods */
-
/**
* Return JS code that calls mw.loader.implement with given module properties.
*
* ResourceLoader module based on local JavaScript/CSS files.
*/
class ResourceLoaderFileModule extends ResourceLoaderModule {
- /* Protected Members */
/** @var string Local base path, see __construct() */
protected $localBasePath = '';
*/
protected $missingLocalFileRefs = [];
- /* Methods */
-
/**
* Constructs a new module from an options array.
*
* and local base path, for use with ResourceLoaderFileModule.
*/
class ResourceLoaderFilePath {
- /* Protected Members */
/** @var string Local base path */
protected $localBasePath;
* @var string Path to the file */
protected $path;
- /* Methods */
-
/**
* @param string $path Path to the file.
* @param string $localBasePath Base path to prepend when generating a local path.
# pages like Special:UserLogin and Special:Preferences
protected $origin = self::ORIGIN_CORE_SITEWIDE;
- /* Protected Members */
-
protected $name = null;
protected $targets = [ 'desktop' ];
*/
protected $logger;
- /* Methods */
-
/**
* Get this module's name. This is set when the module is registered
* with ResourceLoader::register()
*/
class ResourceLoaderUserTokensModule extends ResourceLoaderModule {
- /* Protected Members */
-
protected $origin = self::ORIGIN_CORE_INDIVIDUAL;
protected $targets = [ 'desktop', 'mobile' ];
- /* Methods */
-
/**
* Fetch the tokens for the current user.
*
* @return array redirect target prefixedText to index of title in titles
* that is a redirect to it.
*/
- private function redirectTargetsToRedirect( $titles ) {
+ private function redirectTargetsToRedirect( array $titles ) {
$result = [];
foreach ( $titles as $key => $titleText ) {
$title = Title::newFromText( $titleText );
* @param int $key key to pull to the front
* @return array $array with the item at $key pulled to the front
*/
- private function pullFront( $key, $array ) {
+ private function pullFront( $key, array $array ) {
$cut = array_splice( $array, $key, 1 );
array_unshift( $array, $cut[0] );
return $array;
// TODO replace with clear_last_error when requirements are bumped to PHP7
set_error_handler( function () {
}, 0 );
- // @codingStandardsIgnoreStart Generic.PHP.NoSilencedErrors.Discouraged
+ // phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged
@trigger_error( '' );
- // @codingStandardsIgnoreEnd
restore_error_handler();
- // @codingStandardsIgnoreStart Generic.PHP.NoSilencedErrors.Discouraged
+ // phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged
$numReadyPipes = @stream_select( $readyPipes, $emptyArray, $emptyArray, $timeout );
- // @codingStandardsIgnoreEnd
if ( $numReadyPipes === false ) {
$error = error_get_last();
if ( strncmp( $error['message'], $eintrMessage, strlen( $eintrMessage ) ) == 0 ) {
// Filter out skins that aren't installed
$possibleSkins = array_filter( $possibleSkins, function ( $skinDir ) use ( $styleDirectory ) {
- return
- is_file( "$styleDirectory/$skinDir/skin.json" )
+ return is_file( "$styleDirectory/$skinDir/skin.json" )
|| is_file( "$styleDirectory/$skinDir/$skinDir.php" );
} );
# $res might contain the whole 1,000 rows, so we read up to
# $num [should update this to use a Pager]
- // @codingStandardsIgnoreStart Generic.CodeAnalysis.ForLoopWithTestFunctionCall.NotAllowed
+ // phpcs:ignore Generic.CodeAnalysis.ForLoopWithTestFunctionCall
for ( $i = 0; $i < $num && $row = $res->fetchObject(); $i++ ) {
- // @codingStandardsIgnoreEnd
$line = $this->formatResult( $skin, $row );
if ( $line ) {
$html[] = $this->listoutput
$numRevisions = 0;
// Live revisions...
$list = $this->getList();
- // @codingStandardsIgnoreStart Generic.CodeAnalysis.ForLoopWithTestFunctionCall.NotAllowed
+ // phpcs:ignore Generic.CodeAnalysis.ForLoopWithTestFunctionCall
for ( $list->reset(); $list->current(); $list->next() ) {
- // @codingStandardsIgnoreEnd
$item = $list->current();
$numRevisions++;
$out->addHTML( $item->getHTML() );
// Otherwise, use a multi-select field for adding tags, and a list of
// checkboxes for removing them
- // @codingStandardsIgnoreStart Generic.CodeAnalysis.ForLoopWithTestFunctionCall.NotAllowed
+ // phpcs:ignore Generic.CodeAnalysis.ForLoopWithTestFunctionCall
for ( $list->reset(); $list->current(); $list->next() ) {
- // @codingStandardsIgnoreEnd
$currentTags = $list->current()->getTags();
if ( $currentTags ) {
$tags = array_merge( $tags, explode( ',', $currentTags ) );
* @return array
*/
private function getPageLinks( $inputPages, $pageSet, $depth ) {
- // @codingStandardsIgnoreStart Squiz.WhiteSpace.SemicolonSpacing.Incorrect
for ( ; $depth > 0; --$depth ) {
- // @codingStandardsIgnoreEnd
$pageSet = $this->getLinks(
$inputPages, $pageSet, 'pagelinks',
[ 'namespace' => 'pl_namespace', 'title' => 'pl_title' ],
private $watchlistFilterGroupDefinition;
- // @codingStandardsIgnoreStart Needed "useless" override to change parameters.
public function __construct( $name = 'Recentchanges', $restriction = '' ) {
parent::__construct( $name, $restriction );
}
];
}
- // @codingStandardsIgnoreEnd
/**
* Main execution point
$numRevisions = 0;
// Live revisions...
$list = $this->getList();
- // @codingStandardsIgnoreStart Generic.CodeAnalysis.ForLoopWithTestFunctionCall.NotAllowed
+ // phpcs:ignore Generic.CodeAnalysis.ForLoopWithTestFunctionCall
for ( $list->reset(); $list->current(); $list->next() ) {
- // @codingStandardsIgnoreEnd
$item = $list->current();
if ( !$item->canView() ) {
* @param array $opts Options array
* @return array Options array with processed start and end date filter options
*/
- public static function processDateFilter( $opts ) {
+ public static function processDateFilter( array $opts ) {
$start = isset( $opts['start'] ) ? $opts['start'] : '';
$end = isset( $opts['end'] ) ? $opts['end'] : '';
$year = isset( $opts['year'] ) ? $opts['year'] : '';
}
}
- // @codingStandardsIgnoreStart Squiz.WhiteSpace.SemicolonSpacing.Incorrect
for ( ; $i < $limit && $topRes1; $i++ ) {
- // @codingStandardsIgnoreEnd
$resultArray[] = $topRes1;
$topRes1 = $res1->next();
}
- // @codingStandardsIgnoreStart Squiz.WhiteSpace.SemicolonSpacing.Incorrect
for ( ; $i < $limit && $topRes2; $i++ ) {
- // @codingStandardsIgnoreEnd
$resultArray[] = $topRes2;
$topRes2 = $res2->next();
}
* @ingroup Pager
*/
-use \MediaWiki\Linker\LinkRenderer;
+use MediaWiki\Linker\LinkRenderer;
-/**
- * @todo document
- */
class ProtectedPagesPager extends TablePager {
+
public $mForm, $mConds;
private $type, $level, $namespace, $sizetype, $size, $indefonly, $cascadeonly, $noredirect;
# image/svg, text/xml, application/xml, and text/html, which can contain scripts
if ( $stripped == 'href' && strncasecmp( 'data:', $value, 5 ) === 0 ) {
// rfc2397 parameters. This is only slightly slower than (;[\w;]+)*.
- // @codingStandardsIgnoreStart Generic.Files.LineLength
+ // phpcs:ignore Generic.Files.LineLength
$parameters = '(?>;[a-zA-Z0-9\!#$&\'*+.^_`{|}~-]+=(?>[a-zA-Z0-9\!#$&\'*+.^_`{|}~-]+|"(?>[\0-\x0c\x0e-\x21\x23-\x5b\x5d-\x7f]+|\\\\[\0-\x7f])*"))*(?:;base64)?';
- // @codingStandardsIgnoreEnd
if ( !preg_match( "!^data:\s*image/(gif|jpeg|jpg|png)$parameters,!i", $value ) ) {
wfDebug( __METHOD__ . ": Found href to unwhitelisted data: uri "
}
$output = implode( "\n\t", $content );
- return
- <<<EOD
+ return <<<EOD
<?php
// This file is generated by $commandName, do not adjust manually
-// @codingStandardsIgnoreFile
+// phpcs:ignoreFile Generic.Files.LineLength
global \${$this->variableName};
\${$this->variableName} {$op} [
$config
);
- // Parent constructor
parent::__construct( $config );
// Properties
$config
);
- // Parent constructor
parent::__construct( $config );
// Properties
'placeholder' => $placeholder,
], $config );
- // Parent constructor
parent::__construct( $config );
// Calculate min/max attributes (which are skipped by TextInputWidget) and add to <input>
throw new \InvalidArgumentException( '$config[\'type\'] must be specified' );
}
- // Parent constructor
parent::__construct( $config );
// Properties, which are ignored in PHP and just shipped back to JS
// Configuration initialization
$config['options'] = $this->getNamespaceDropdownOptions( $config );
- // Parent constructor
parent::__construct( $config );
// Properties
'icon' => 'search',
], $config );
- // Parent constructor
parent::__construct( $config );
// Properties, which are ignored in PHP and just shipped back to JS
$config
);
- // Parent constructor
parent::__construct( $config );
// Properties
* be a valid title (default: true)
*/
public function __construct( array $config = [] ) {
- // Parent constructor
parent::__construct(
array_merge( [ 'maxLength' => 255 ], $config )
);
* @param array $config Configuration options
*/
public function __construct( array $config = [] ) {
- // Parent constructor
parent::__construct( $config );
// Initialization
* @return string HTML
*/
protected function header( Message $msg ) {
- return
- "<h2>" .
- "<span class='mw-headline'>" . $msg->escaped() . "</span>" .
- "</h2>";
+ return "<h2>" .
+ "<span class='mw-headline'>" . $msg->escaped() . "</span>" .
+ "</h2>";
}
/**
);
}
- return
- "<div class='search-types'>" .
- "<ul>" . implode( '', $items ) . "</ul>" .
- "</div>";
+ return "<div class='search-types'>" .
+ "<ul>" . implode( '', $items ) . "</ul>" .
+ "</div>";
}
/**
);
}
- return
- "<fieldset id='mw-searchoptions'>" .
- "<legend>" . $this->specialSearch->msg( 'powersearch-legend' )->escaped() . '</legend>' .
- "<h4>" . $this->specialSearch->msg( 'powersearch-ns' )->parse() . '</h4>' .
- // populated by js if available
- "<div id='mw-search-togglebox'></div>" .
- $divider .
- implode(
- $divider,
- $showSections
- ) .
- $hidden .
- $remember .
- "</fieldset>";
+ return "<fieldset id='mw-searchoptions'>" .
+ "<legend>" . $this->specialSearch->msg( 'powersearch-legend' )->escaped() . '</legend>' .
+ "<h4>" . $this->specialSearch->msg( 'powersearch-ns' )->parse() . '</h4>' .
+ // populated by js if available
+ "<div id='mw-search-togglebox'></div>" .
+ $divider .
+ implode(
+ $divider,
+ $showSections
+ ) .
+ $hidden .
+ $remember .
+ "</fieldset>";
}
}
$out .= "</ul>";
}
- return
- "<div id='mw-search-interwiki'>" .
- "<div id='mw-search-interwiki-caption'>" .
- $this->specialSearch->msg( 'search-interwiki-caption' )->parse() .
- '</div>' .
- $out .
- "</div>";
+ return "<div id='mw-search-interwiki'>" .
+ "<div id='mw-search-interwiki-caption'>" .
+ $this->specialSearch->msg( 'search-interwiki-caption' )->parse() .
+ '</div>' .
+ $out .
+ "</div>";
}
/**
$this->specialSearch->msg( 'search-interwiki-more' )->escaped()
);
- return
- "<div class='mw-search-interwiki-project'>" .
- "<span class='mw-search-interwiki-more'>{$searchLink}</span>" .
- $caption .
+ return "<div class='mw-search-interwiki-project'>" .
+ "<span class='mw-search-interwiki-more'>{$searchLink}</span>" .
+ $caption .
"</div>";
}
// Bail on old versions of PHP, or if composer has not been run yet to install
// dependencies. Using dirname( __FILE__ ) here because __DIR__ is PHP5.3+.
-// @codingStandardsIgnoreStart MediaWiki.Usage.DirUsage.FunctionFound
+// phpcs:ignore MediaWiki.Usage.DirUsage.FunctionFound
require_once dirname( __FILE__ ) . '/includes/PHPVersionCheck.php';
-// @codingStandardsIgnoreEnd
wfEntryPointCheck( 'index.php' );
require __DIR__ . '/includes/WebStart.php';
* Generated by UnicodeJS (see tools/strongDir) from the UCD; see
* https://phabricator.wikimedia.org/diffusion/GUJS/ .
*/
- // @codingStandardsIgnoreStart
// @codeCoverageIgnoreStart
+ // phpcs:ignore Generic.Files.LineLength
static private $strongDirRegex = '/(?:([\x{41}-\x{5a}\x{61}-\x{7a}\x{aa}\x{b5}\x{ba}\x{c0}-\x{d6}\x{d8}-\x{f6}\x{f8}-\x{2b8}\x{2bb}-\x{2c1}\x{2d0}\x{2d1}\x{2e0}-\x{2e4}\x{2ee}\x{370}-\x{373}\x{376}\x{377}\x{37a}-\x{37d}\x{37f}\x{386}\x{388}-\x{38a}\x{38c}\x{38e}-\x{3a1}\x{3a3}-\x{3f5}\x{3f7}-\x{482}\x{48a}-\x{52f}\x{531}-\x{556}\x{559}-\x{55f}\x{561}-\x{587}\x{589}\x{903}-\x{939}\x{93b}\x{93d}-\x{940}\x{949}-\x{94c}\x{94e}-\x{950}\x{958}-\x{961}\x{964}-\x{980}\x{982}\x{983}\x{985}-\x{98c}\x{98f}\x{990}\x{993}-\x{9a8}\x{9aa}-\x{9b0}\x{9b2}\x{9b6}-\x{9b9}\x{9bd}-\x{9c0}\x{9c7}\x{9c8}\x{9cb}\x{9cc}\x{9ce}\x{9d7}\x{9dc}\x{9dd}\x{9df}-\x{9e1}\x{9e6}-\x{9f1}\x{9f4}-\x{9fa}\x{a03}\x{a05}-\x{a0a}\x{a0f}\x{a10}\x{a13}-\x{a28}\x{a2a}-\x{a30}\x{a32}\x{a33}\x{a35}\x{a36}\x{a38}\x{a39}\x{a3e}-\x{a40}\x{a59}-\x{a5c}\x{a5e}\x{a66}-\x{a6f}\x{a72}-\x{a74}\x{a83}\x{a85}-\x{a8d}\x{a8f}-\x{a91}\x{a93}-\x{aa8}\x{aaa}-\x{ab0}\x{ab2}\x{ab3}\x{ab5}-\x{ab9}\x{abd}-\x{ac0}\x{ac9}\x{acb}\x{acc}\x{ad0}\x{ae0}\x{ae1}\x{ae6}-\x{af0}\x{af9}\x{b02}\x{b03}\x{b05}-\x{b0c}\x{b0f}\x{b10}\x{b13}-\x{b28}\x{b2a}-\x{b30}\x{b32}\x{b33}\x{b35}-\x{b39}\x{b3d}\x{b3e}\x{b40}\x{b47}\x{b48}\x{b4b}\x{b4c}\x{b57}\x{b5c}\x{b5d}\x{b5f}-\x{b61}\x{b66}-\x{b77}\x{b83}\x{b85}-\x{b8a}\x{b8e}-\x{b90}\x{b92}-\x{b95}\x{b99}\x{b9a}\x{b9c}\x{b9e}\x{b9f}\x{ba3}\x{ba4}\x{ba8}-\x{baa}\x{bae}-\x{bb9}\x{bbe}\x{bbf}\x{bc1}\x{bc2}\x{bc6}-\x{bc8}\x{bca}-\x{bcc}\x{bd0}\x{bd7}\x{be6}-\x{bf2}\x{c01}-\x{c03}\x{c05}-\x{c0c}\x{c0e}-\x{c10}\x{c12}-\x{c28}\x{c2a}-\x{c39}\x{c3d}\x{c41}-\x{c44}\x{c58}-\x{c5a}\x{c60}\x{c61}\x{c66}-\x{c6f}\x{c7f}\x{c82}\x{c83}\x{c85}-\x{c8c}\x{c8e}-\x{c90}\x{c92}-\x{ca8}\x{caa}-\x{cb3}\x{cb5}-\x{cb9}\x{cbd}-\x{cc4}\x{cc6}-\x{cc8}\x{cca}\x{ccb}\x{cd5}\x{cd6}\x{cde}\x{ce0}\x{ce1}\x{ce6}-\x{cef}\x{cf1}\x{cf2}\x{d02}\x{d03}\x{d05}-\x{d0c}\x{d0e}-\x{d10}\x{d12}-\x{d3a}\x{d3d}-\x{d40}\x{d46}-\x{d48}\x{d4a}-\x{d4c}\x{d4e}\x{d57}\x{d5f}-\x{d61}\x{d66}-\x{d75}\x{d79}-\x{d7f}\x{d82}\x{d83}\x{d85}-\x{d96}\x{d9a}-\x{db1}\x{db3}-\x{dbb}\x{dbd}\x{dc0}-\x{dc6}\x{dcf}-\x{dd1}\x{dd8}-\x{ddf}\x{de6}-\x{def}\x{df2}-\x{df4}\x{e01}-\x{e30}\x{e32}\x{e33}\x{e40}-\x{e46}\x{e4f}-\x{e5b}\x{e81}\x{e82}\x{e84}\x{e87}\x{e88}\x{e8a}\x{e8d}\x{e94}-\x{e97}\x{e99}-\x{e9f}\x{ea1}-\x{ea3}\x{ea5}\x{ea7}\x{eaa}\x{eab}\x{ead}-\x{eb0}\x{eb2}\x{eb3}\x{ebd}\x{ec0}-\x{ec4}\x{ec6}\x{ed0}-\x{ed9}\x{edc}-\x{edf}\x{f00}-\x{f17}\x{f1a}-\x{f34}\x{f36}\x{f38}\x{f3e}-\x{f47}\x{f49}-\x{f6c}\x{f7f}\x{f85}\x{f88}-\x{f8c}\x{fbe}-\x{fc5}\x{fc7}-\x{fcc}\x{fce}-\x{fda}\x{1000}-\x{102c}\x{1031}\x{1038}\x{103b}\x{103c}\x{103f}-\x{1057}\x{105a}-\x{105d}\x{1061}-\x{1070}\x{1075}-\x{1081}\x{1083}\x{1084}\x{1087}-\x{108c}\x{108e}-\x{109c}\x{109e}-\x{10c5}\x{10c7}\x{10cd}\x{10d0}-\x{1248}\x{124a}-\x{124d}\x{1250}-\x{1256}\x{1258}\x{125a}-\x{125d}\x{1260}-\x{1288}\x{128a}-\x{128d}\x{1290}-\x{12b0}\x{12b2}-\x{12b5}\x{12b8}-\x{12be}\x{12c0}\x{12c2}-\x{12c5}\x{12c8}-\x{12d6}\x{12d8}-\x{1310}\x{1312}-\x{1315}\x{1318}-\x{135a}\x{1360}-\x{137c}\x{1380}-\x{138f}\x{13a0}-\x{13f5}\x{13f8}-\x{13fd}\x{1401}-\x{167f}\x{1681}-\x{169a}\x{16a0}-\x{16f8}\x{1700}-\x{170c}\x{170e}-\x{1711}\x{1720}-\x{1731}\x{1735}\x{1736}\x{1740}-\x{1751}\x{1760}-\x{176c}\x{176e}-\x{1770}\x{1780}-\x{17b3}\x{17b6}\x{17be}-\x{17c5}\x{17c7}\x{17c8}\x{17d4}-\x{17da}\x{17dc}\x{17e0}-\x{17e9}\x{1810}-\x{1819}\x{1820}-\x{1877}\x{1880}-\x{18a8}\x{18aa}\x{18b0}-\x{18f5}\x{1900}-\x{191e}\x{1923}-\x{1926}\x{1929}-\x{192b}\x{1930}\x{1931}\x{1933}-\x{1938}\x{1946}-\x{196d}\x{1970}-\x{1974}\x{1980}-\x{19ab}\x{19b0}-\x{19c9}\x{19d0}-\x{19da}\x{1a00}-\x{1a16}\x{1a19}\x{1a1a}\x{1a1e}-\x{1a55}\x{1a57}\x{1a61}\x{1a63}\x{1a64}\x{1a6d}-\x{1a72}\x{1a80}-\x{1a89}\x{1a90}-\x{1a99}\x{1aa0}-\x{1aad}\x{1b04}-\x{1b33}\x{1b35}\x{1b3b}\x{1b3d}-\x{1b41}\x{1b43}-\x{1b4b}\x{1b50}-\x{1b6a}\x{1b74}-\x{1b7c}\x{1b82}-\x{1ba1}\x{1ba6}\x{1ba7}\x{1baa}\x{1bae}-\x{1be5}\x{1be7}\x{1bea}-\x{1bec}\x{1bee}\x{1bf2}\x{1bf3}\x{1bfc}-\x{1c2b}\x{1c34}\x{1c35}\x{1c3b}-\x{1c49}\x{1c4d}-\x{1c7f}\x{1cc0}-\x{1cc7}\x{1cd3}\x{1ce1}\x{1ce9}-\x{1cec}\x{1cee}-\x{1cf3}\x{1cf5}\x{1cf6}\x{1d00}-\x{1dbf}\x{1e00}-\x{1f15}\x{1f18}-\x{1f1d}\x{1f20}-\x{1f45}\x{1f48}-\x{1f4d}\x{1f50}-\x{1f57}\x{1f59}\x{1f5b}\x{1f5d}\x{1f5f}-\x{1f7d}\x{1f80}-\x{1fb4}\x{1fb6}-\x{1fbc}\x{1fbe}\x{1fc2}-\x{1fc4}\x{1fc6}-\x{1fcc}\x{1fd0}-\x{1fd3}\x{1fd6}-\x{1fdb}\x{1fe0}-\x{1fec}\x{1ff2}-\x{1ff4}\x{1ff6}-\x{1ffc}\x{200e}\x{2071}\x{207f}\x{2090}-\x{209c}\x{2102}\x{2107}\x{210a}-\x{2113}\x{2115}\x{2119}-\x{211d}\x{2124}\x{2126}\x{2128}\x{212a}-\x{212d}\x{212f}-\x{2139}\x{213c}-\x{213f}\x{2145}-\x{2149}\x{214e}\x{214f}\x{2160}-\x{2188}\x{2336}-\x{237a}\x{2395}\x{249c}-\x{24e9}\x{26ac}\x{2800}-\x{28ff}\x{2c00}-\x{2c2e}\x{2c30}-\x{2c5e}\x{2c60}-\x{2ce4}\x{2ceb}-\x{2cee}\x{2cf2}\x{2cf3}\x{2d00}-\x{2d25}\x{2d27}\x{2d2d}\x{2d30}-\x{2d67}\x{2d6f}\x{2d70}\x{2d80}-\x{2d96}\x{2da0}-\x{2da6}\x{2da8}-\x{2dae}\x{2db0}-\x{2db6}\x{2db8}-\x{2dbe}\x{2dc0}-\x{2dc6}\x{2dc8}-\x{2dce}\x{2dd0}-\x{2dd6}\x{2dd8}-\x{2dde}\x{3005}-\x{3007}\x{3021}-\x{3029}\x{302e}\x{302f}\x{3031}-\x{3035}\x{3038}-\x{303c}\x{3041}-\x{3096}\x{309d}-\x{309f}\x{30a1}-\x{30fa}\x{30fc}-\x{30ff}\x{3105}-\x{312d}\x{3131}-\x{318e}\x{3190}-\x{31ba}\x{31f0}-\x{321c}\x{3220}-\x{324f}\x{3260}-\x{327b}\x{327f}-\x{32b0}\x{32c0}-\x{32cb}\x{32d0}-\x{32fe}\x{3300}-\x{3376}\x{337b}-\x{33dd}\x{33e0}-\x{33fe}\x{3400}-\x{4db5}\x{4e00}-\x{9fd5}\x{a000}-\x{a48c}\x{a4d0}-\x{a60c}\x{a610}-\x{a62b}\x{a640}-\x{a66e}\x{a680}-\x{a69d}\x{a6a0}-\x{a6ef}\x{a6f2}-\x{a6f7}\x{a722}-\x{a787}\x{a789}-\x{a7ad}\x{a7b0}-\x{a7b7}\x{a7f7}-\x{a801}\x{a803}-\x{a805}\x{a807}-\x{a80a}\x{a80c}-\x{a824}\x{a827}\x{a830}-\x{a837}\x{a840}-\x{a873}\x{a880}-\x{a8c3}\x{a8ce}-\x{a8d9}\x{a8f2}-\x{a8fd}\x{a900}-\x{a925}\x{a92e}-\x{a946}\x{a952}\x{a953}\x{a95f}-\x{a97c}\x{a983}-\x{a9b2}\x{a9b4}\x{a9b5}\x{a9ba}\x{a9bb}\x{a9bd}-\x{a9cd}\x{a9cf}-\x{a9d9}\x{a9de}-\x{a9e4}\x{a9e6}-\x{a9fe}\x{aa00}-\x{aa28}\x{aa2f}\x{aa30}\x{aa33}\x{aa34}\x{aa40}-\x{aa42}\x{aa44}-\x{aa4b}\x{aa4d}\x{aa50}-\x{aa59}\x{aa5c}-\x{aa7b}\x{aa7d}-\x{aaaf}\x{aab1}\x{aab5}\x{aab6}\x{aab9}-\x{aabd}\x{aac0}\x{aac2}\x{aadb}-\x{aaeb}\x{aaee}-\x{aaf5}\x{ab01}-\x{ab06}\x{ab09}-\x{ab0e}\x{ab11}-\x{ab16}\x{ab20}-\x{ab26}\x{ab28}-\x{ab2e}\x{ab30}-\x{ab65}\x{ab70}-\x{abe4}\x{abe6}\x{abe7}\x{abe9}-\x{abec}\x{abf0}-\x{abf9}\x{ac00}-\x{d7a3}\x{d7b0}-\x{d7c6}\x{d7cb}-\x{d7fb}\x{e000}-\x{fa6d}\x{fa70}-\x{fad9}\x{fb00}-\x{fb06}\x{fb13}-\x{fb17}\x{ff21}-\x{ff3a}\x{ff41}-\x{ff5a}\x{ff66}-\x{ffbe}\x{ffc2}-\x{ffc7}\x{ffca}-\x{ffcf}\x{ffd2}-\x{ffd7}\x{ffda}-\x{ffdc}\x{10000}-\x{1000b}\x{1000d}-\x{10026}\x{10028}-\x{1003a}\x{1003c}\x{1003d}\x{1003f}-\x{1004d}\x{10050}-\x{1005d}\x{10080}-\x{100fa}\x{10100}\x{10102}\x{10107}-\x{10133}\x{10137}-\x{1013f}\x{101d0}-\x{101fc}\x{10280}-\x{1029c}\x{102a0}-\x{102d0}\x{10300}-\x{10323}\x{10330}-\x{1034a}\x{10350}-\x{10375}\x{10380}-\x{1039d}\x{1039f}-\x{103c3}\x{103c8}-\x{103d5}\x{10400}-\x{1049d}\x{104a0}-\x{104a9}\x{10500}-\x{10527}\x{10530}-\x{10563}\x{1056f}\x{10600}-\x{10736}\x{10740}-\x{10755}\x{10760}-\x{10767}\x{11000}\x{11002}-\x{11037}\x{11047}-\x{1104d}\x{11066}-\x{1106f}\x{11082}-\x{110b2}\x{110b7}\x{110b8}\x{110bb}-\x{110c1}\x{110d0}-\x{110e8}\x{110f0}-\x{110f9}\x{11103}-\x{11126}\x{1112c}\x{11136}-\x{11143}\x{11150}-\x{11172}\x{11174}-\x{11176}\x{11182}-\x{111b5}\x{111bf}-\x{111c9}\x{111cd}\x{111d0}-\x{111df}\x{111e1}-\x{111f4}\x{11200}-\x{11211}\x{11213}-\x{1122e}\x{11232}\x{11233}\x{11235}\x{11238}-\x{1123d}\x{11280}-\x{11286}\x{11288}\x{1128a}-\x{1128d}\x{1128f}-\x{1129d}\x{1129f}-\x{112a9}\x{112b0}-\x{112de}\x{112e0}-\x{112e2}\x{112f0}-\x{112f9}\x{11302}\x{11303}\x{11305}-\x{1130c}\x{1130f}\x{11310}\x{11313}-\x{11328}\x{1132a}-\x{11330}\x{11332}\x{11333}\x{11335}-\x{11339}\x{1133d}-\x{1133f}\x{11341}-\x{11344}\x{11347}\x{11348}\x{1134b}-\x{1134d}\x{11350}\x{11357}\x{1135d}-\x{11363}\x{11480}-\x{114b2}\x{114b9}\x{114bb}-\x{114be}\x{114c1}\x{114c4}-\x{114c7}\x{114d0}-\x{114d9}\x{11580}-\x{115b1}\x{115b8}-\x{115bb}\x{115be}\x{115c1}-\x{115db}\x{11600}-\x{11632}\x{1163b}\x{1163c}\x{1163e}\x{11641}-\x{11644}\x{11650}-\x{11659}\x{11680}-\x{116aa}\x{116ac}\x{116ae}\x{116af}\x{116b6}\x{116c0}-\x{116c9}\x{11700}-\x{11719}\x{11720}\x{11721}\x{11726}\x{11730}-\x{1173f}\x{118a0}-\x{118f2}\x{118ff}\x{11ac0}-\x{11af8}\x{12000}-\x{12399}\x{12400}-\x{1246e}\x{12470}-\x{12474}\x{12480}-\x{12543}\x{13000}-\x{1342e}\x{14400}-\x{14646}\x{16800}-\x{16a38}\x{16a40}-\x{16a5e}\x{16a60}-\x{16a69}\x{16a6e}\x{16a6f}\x{16ad0}-\x{16aed}\x{16af5}\x{16b00}-\x{16b2f}\x{16b37}-\x{16b45}\x{16b50}-\x{16b59}\x{16b5b}-\x{16b61}\x{16b63}-\x{16b77}\x{16b7d}-\x{16b8f}\x{16f00}-\x{16f44}\x{16f50}-\x{16f7e}\x{16f93}-\x{16f9f}\x{1b000}\x{1b001}\x{1bc00}-\x{1bc6a}\x{1bc70}-\x{1bc7c}\x{1bc80}-\x{1bc88}\x{1bc90}-\x{1bc99}\x{1bc9c}\x{1bc9f}\x{1d000}-\x{1d0f5}\x{1d100}-\x{1d126}\x{1d129}-\x{1d166}\x{1d16a}-\x{1d172}\x{1d183}\x{1d184}\x{1d18c}-\x{1d1a9}\x{1d1ae}-\x{1d1e8}\x{1d360}-\x{1d371}\x{1d400}-\x{1d454}\x{1d456}-\x{1d49c}\x{1d49e}\x{1d49f}\x{1d4a2}\x{1d4a5}\x{1d4a6}\x{1d4a9}-\x{1d4ac}\x{1d4ae}-\x{1d4b9}\x{1d4bb}\x{1d4bd}-\x{1d4c3}\x{1d4c5}-\x{1d505}\x{1d507}-\x{1d50a}\x{1d50d}-\x{1d514}\x{1d516}-\x{1d51c}\x{1d51e}-\x{1d539}\x{1d53b}-\x{1d53e}\x{1d540}-\x{1d544}\x{1d546}\x{1d54a}-\x{1d550}\x{1d552}-\x{1d6a5}\x{1d6a8}-\x{1d6da}\x{1d6dc}-\x{1d714}\x{1d716}-\x{1d74e}\x{1d750}-\x{1d788}\x{1d78a}-\x{1d7c2}\x{1d7c4}-\x{1d7cb}\x{1d800}-\x{1d9ff}\x{1da37}-\x{1da3a}\x{1da6d}-\x{1da74}\x{1da76}-\x{1da83}\x{1da85}-\x{1da8b}\x{1f110}-\x{1f12e}\x{1f130}-\x{1f169}\x{1f170}-\x{1f19a}\x{1f1e6}-\x{1f202}\x{1f210}-\x{1f23a}\x{1f240}-\x{1f248}\x{1f250}\x{1f251}\x{20000}-\x{2a6d6}\x{2a700}-\x{2b734}\x{2b740}-\x{2b81d}\x{2b820}-\x{2cea1}\x{2f800}-\x{2fa1d}\x{f0000}-\x{ffffd}\x{100000}-\x{10fffd}])|([\x{590}\x{5be}\x{5c0}\x{5c3}\x{5c6}\x{5c8}-\x{5ff}\x{7c0}-\x{7ea}\x{7f4}\x{7f5}\x{7fa}-\x{815}\x{81a}\x{824}\x{828}\x{82e}-\x{858}\x{85c}-\x{89f}\x{200f}\x{fb1d}\x{fb1f}-\x{fb28}\x{fb2a}-\x{fb4f}\x{10800}-\x{1091e}\x{10920}-\x{10a00}\x{10a04}\x{10a07}-\x{10a0b}\x{10a10}-\x{10a37}\x{10a3b}-\x{10a3e}\x{10a40}-\x{10ae4}\x{10ae7}-\x{10b38}\x{10b40}-\x{10e5f}\x{10e7f}-\x{10fff}\x{1e800}-\x{1e8cf}\x{1e8d7}-\x{1edff}\x{1ef00}-\x{1efff}\x{608}\x{60b}\x{60d}\x{61b}-\x{64a}\x{66d}-\x{66f}\x{671}-\x{6d5}\x{6e5}\x{6e6}\x{6ee}\x{6ef}\x{6fa}-\x{710}\x{712}-\x{72f}\x{74b}-\x{7a5}\x{7b1}-\x{7bf}\x{8a0}-\x{8e2}\x{fb50}-\x{fd3d}\x{fd40}-\x{fdcf}\x{fdf0}-\x{fdfc}\x{fdfe}\x{fdff}\x{fe70}-\x{fefe}\x{1ee00}-\x{1eeef}\x{1eef2}-\x{1eeff}]))/u';
// @codeCoverageIgnoreEnd
- // @codingStandardsIgnoreEnd
/**
* Get a cached or new language object for a given language code
*/
function commafy( $number ) {
$digitGroupingPattern = $this->digitGroupingPattern();
+ $minimumGroupingDigits = $this->minimumGroupingDigits();
if ( $number === null ) {
return '';
}
if ( !$digitGroupingPattern || $digitGroupingPattern === "###,###,###" ) {
- // default grouping is at thousands, use the same for ###,###,### pattern too.
+ // Default grouping is at thousands, use the same for ###,###,### pattern too.
+ // In some languages it's conventional not to insert a thousands separator
+ // in numbers that are four digits long (1000-9999).
+ if ( $minimumGroupingDigits ) {
+ // Number of '#' characters after last comma in the grouping pattern.
+ // The pattern is hardcoded here, but this would vary for different patterns.
+ $primaryGroupingSize = 3;
+ // Maximum length of a number to suppress digit grouping for.
+ $maximumLength = $minimumGroupingDigits + $primaryGroupingSize - 1;
+ if ( preg_match( '/^\-?\d{1,' . $maximumLength . '}(\.\d+)?$/', $number ) ) {
+ return $number;
+ }
+ }
return strrev( (string)preg_replace( '/(\d{3})(?=\d)(?!\d*\.)/', '$1,', strrev( $number ) ) );
} else {
// Ref: http://cldr.unicode.org/translation/number-patterns
return self::$dataCache->getItem( $this->mCode, 'separatorTransformTable' );
}
+ /**
+ * @return int|null
+ */
+ function minimumGroupingDigits() {
+ return self::$dataCache->getItem( $this->mCode, 'minimumGroupingDigits' );
+ }
+
/**
* Take a list of strings and build a locale-friendly comma-separated
* list, using the local comma-separator message.
}
$dirmark = ( $oppositedm ? $this->getDirMark( true ) : '' ) . $this->getDirMark();
- return
- $page .
+ return $page .
$dirmark .
$this->msg( 'word-separator' )->escaped() .
$this->msg( 'parentheses' )->rawParams( $details )->escaped();
$noScript = '<script.*?>.*?<\/script>(*SKIP)(*FAIL)';
$noStyle = '<style.*?>.*?<\/style>(*SKIP)(*FAIL)';
- // @codingStandardsIgnoreStart Generic.Files.LineLength.TooLong
+ // phpcs:ignore Generic.Files.LineLength
$noHtml = '<(?:[^>=]*+(?>[^>=]*+=\s*+(?:"[^"]*"|\'[^\']*\'|[^\'">\s]*+))*+[^>=]*+>|.*+)(*SKIP)(*FAIL)';
- // @codingStandardsIgnoreEnd
while ( $startPos < $length && $continue ) {
$continue = preg_match(
// Only match -{ outside of html.
* @ingroup Language
* @see http://be-x-old.wikipedia.org/wiki/Project_talk:LanguageBe_tarask.php
*/
-// @codingStandardsIgnoreStart Ignore class name is not in camel caps format error
+// phpcs:ignore Squiz.Classes.ValidClassName.NotCamelCaps
class LanguageBe_tarask extends Language {
- // @codingStandardsIgnoreEnd
/**
* The Belarusian language uses apostrophe sign,
* but the characters used for this could be both U+0027 and U+2019.
return $s;
}
-
- /**
- * Four-digit number should be without group commas (spaces)
- * So "1 234 567", "12 345" but "1234"
- *
- * @param string $_
- *
- * @return string
- */
- function commafy( $_ ) {
- if ( preg_match( '/^-?\d{1,4}(\.\d*)?$/', $_ ) ) {
- return $_;
- } else {
- return strrev( (string)preg_replace( '/(\d{3})(?=\d)(?!\d*\.)/', '$1,', strrev( $_ ) ) );
- }
- }
}
+++ /dev/null
-<?php
-/**
- * Bulgarian (Български) specific code.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup Language
- */
-
-/**
- * Bulgarian (Български)
- *
- * @ingroup Language
- */
-class LanguageBg extends Language {
- /**
- * ISO number formatting: 123 456 789,99.
- * Avoid tripple grouping by numbers with whole part up to 4 digits.
- *
- * @param string $_
- *
- * @return string
- */
- function commafy( $_ ) {
- if ( !preg_match( '/^\d{1,4}$/', $_ ) ) {
- return strrev( (string)preg_replace( '/(\d{3})(?=\d)(?!\d*\.)/', '$1,', strrev( $_ ) ) );
- } else {
- return $_;
- }
- }
-}
+++ /dev/null
-<?php
-/**
- * Spanish (español) specific code.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup Language
- */
-
-/**
- * Spanish (español)
- *
- * @ingroup Language
- */
-class LanguageEs extends Language {
-
- /**
- * @param string $_
- * @return string
- */
- function commafy( $_ ) {
- if ( !preg_match( '/^-?\d{1,4}(\.\d+)?$/', $_ ) ) {
- return strrev( (string)preg_replace( '/(\d{3})(?=\d)(?!\d*\.)/', '$1,', strrev( $_ ) ) );
- } else {
- return $_;
- }
- }
-}
+++ /dev/null
-<?php
-/**
- * Estonian (eesti) specific code.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup Language
- */
-
-/**
- * Estonian (eesti)
- *
- * @ingroup Language
- */
-class LanguageEt extends Language {
- /**
- * Avoid grouping whole numbers between -9999 to 9999
- * @param string $_
- * @return string
- */
- function commafy( $_ ) {
- if ( !preg_match( '/^\-?\d{1,4}(\.\d+)?$/', $_ ) ) {
- return strrev( (string)preg_replace( '/(\d{3})(?=\d)(?!\d*\.)/', '$1,', strrev( $_ ) ) );
- } else {
- return $_;
- }
- }
-}
}
return $word;
}
-
- /**
- * Armenian numeric format is "12 345,67" but "1234,56"
- *
- * @param string $_
- *
- * @return string
- */
- function commafy( $_ ) {
- if ( !preg_match( '/^\d{1,4}$/', $_ ) ) {
- return strrev( (string)preg_replace( '/(\d{3})(?=\d)(?!\d*\.)/', '$1,', strrev( $_ ) ) );
- } else {
- return $_;
- }
- }
}
return parent::lcfirst( $string );
}
- /**
- * Avoid grouping whole numbers between 0 to 9999
- *
- * @param string $_
- *
- * @return string
- */
- function commafy( $_ ) {
- if ( !preg_match( '/^\d{1,4}$/', $_ ) ) {
- return strrev( (string)preg_replace( '/(\d{3})(?=\d)(?!\d*\.)/', '$1,', strrev( $_ ) ) );
- } else {
- return $_;
- }
- }
-
}
*
* @ingroup Language
*/
-// @codingStandardsIgnoreStart Ignore class name is not in camel caps format error
+// phpcs:ignore Squiz.Classes.ValidClassName.NotCamelCaps
class LanguageKk_cyrl extends Language {
- // @codingStandardsIgnoreEnd
# Convert from the nominative form of a noun to some other case
# Invoked with {{GRAMMAR:case|word}}
/**
return $lastLetter;
}
-
- /**
- * Avoid grouping whole numbers between 0 to 9999
- *
- * @param string $_
- *
- * @return string
- */
- function commafy( $_ ) {
- if ( !preg_match( '/^\d{1,4}$/', $_ ) ) {
- return strrev( (string)preg_replace( '/(\d{3})(?=\d)(?!\d*\.)/', '$1,', strrev( $_ ) ) );
- } else {
- return $_;
- }
- }
}
return $word;
}
- /**
- * Avoid grouping whole numbers between 0 to 9999
- *
- * @param string $_
- *
- * @return string
- */
- public function commafy( $_ ) {
- if ( !preg_match( '/^\d{1,4}$/', $_ ) ) {
- return strrev( (string)preg_replace( '/(\d{3})(?=\d)(?!\d*\.)/', '$1,', strrev( $_ ) ) );
- } else {
- return $_;
- }
- }
-
/**
* Handle cases of (1, other, 0) or (1, other)
*
*
* @ingroup Language
*/
-class LanguageKu extends LanguageKu_ku {
+class LanguageKu extends Language {
function __construct() {
parent::__construct();
+++ /dev/null
-<?php
-/**
- * Kurdish specific code.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup Language
- */
-
-/**
- * Kurdish
- *
- * @ingroup Language
- */
-// @codingStandardsIgnoreStart Ignore class name is not in camel caps format error
-class LanguageKu_ku extends Language {
- // @codingStandardsIgnoreEnd
- /**
- * Avoid grouping whole numbers between 0 to 9999
- *
- * @param string $_
- *
- * @return string
- */
- function commafy( $_ ) {
- if ( !preg_match( '/^\d{1,4}$/', $_ ) ) {
- return strrev( (string)preg_replace( '/(\d{3})(?=\d)(?!\d*\.)/', '$1,', strrev( $_ ) ) );
- } else {
- return $_;
- }
- }
-}
+++ /dev/null
-<?php
-/**
- * Polish (polski) specific code.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup Language
- */
-
-/**
- * Polish (polski)
- *
- * @ingroup Language
- */
-class LanguagePl extends Language {
- /**
- * @param string $_
- * @return string
- */
- function commafy( $_ ) {
- if ( !preg_match( '/^\-?\d{1,4}(\.\d+)?$/', $_ ) ) {
- return strrev( (string)preg_replace( '/(\d{3})(?=\d)(?!\d*\.)/', '$1,', strrev( $_ ) ) );
- } else {
- return $_;
- }
- }
-}
+++ /dev/null
-<?php
-/**
- * Russian (русский язык) specific code.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup Language
- */
-
-/**
- * Russian (русский язык)
- *
- * You can contact:
- * Alexander Sigachov (alexander.sigachov at Googgle Mail)
- * Amir E. Aharoni (amir.aharoni@mail.huji.ac.il)
- *
- * @ingroup Language
- */
-class LanguageRu extends Language {
- /**
- * Four-digit number should be without group commas (spaces)
- * See manual of style at https://ru.wikipedia.org/wiki/Википедия:Оформление_статей
- * So "1 234 567", "12 345" but "1234"
- *
- * @param string $_
- *
- * @return string
- */
- function commafy( $_ ) {
- if ( preg_match( '/^-?\d{1,4}(\.\d*)?$/', $_ ) ) {
- return $_;
- } else {
- return strrev( (string)preg_replace( '/(\d{3})(?=\d)(?!\d*\.)/', '$1,', strrev( $_ ) ) );
- }
- }
-}
+++ /dev/null
-<?php
-/**
- * Ukrainian (українська мова) specific code.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup Language
- */
-
-/**
- * Ukrainian (українська мова)
- *
- * @ingroup Language
- */
-class LanguageUk extends Language {
- /**
- * Ukrainian numeric format is "12 345,67" but "1234,56"
- *
- * @param string $_
- *
- * @return string
- */
- function commafy( $_ ) {
- if ( !preg_match( '/^\-?\d{1,4}(\.\d+)?$/', $_ ) ) {
- return strrev( (string)preg_replace(
- '/(\d{3})(?=\d)(?!\d*\.)/',
- '$1,',
- strrev( $_ )
- ) );
- } else {
- return $_;
- }
- }
-}
*
* @ingroup Language
*/
-// @codingStandardsIgnoreStart Ignore class name is not in camel caps format error
+// phpcs:ignore Squiz.Classes.ValidClassName.NotCamelCaps
class LanguageZh_hans extends Language {
- // @codingStandardsIgnoreEnd
/**
* @return bool
*/
'峇里海' => '峇里海',
'峰回' => '峰迴',
'峻岭' => '峻岭',
-'崑剧' => '崑劇',
'昆剧' => '崑劇',
-'崑山' => '崑山',
'昆山' => '崑山',
'昆冈' => '崑岡',
'昆仑' => '崑崙',
'昆嵛' => '崑嵛',
'昆承湖' => '崑承湖',
-'崑曲' => '崑曲',
'昆曲' => '崑曲',
-'崑腔' => '崑腔',
'昆腔' => '崑腔',
-'崑苏' => '崑蘇',
'昆苏' => '崑蘇',
-'崑调' => '崑調',
'昆调' => '崑調',
'崖广' => '崖广',
'嶒棱' => '嶒稜',
'希伯来历史' => '希伯來歷史',
'帘子' => '帘子',
'帘布' => '帘布',
+'帛尸梨' => '帛尸梨',
'帝后台' => '帝后臺',
'帝后臺' => '帝后臺',
'师范' => '師範',
'姜茶' => '薑茶',
'姜蓉' => '薑蓉',
'姜还是老的辣' => '薑還是老的辣',
+'姜酮' => '薑酮',
'姜饼' => '薑餅',
'姜黄' => '薑黃',
'薙发' => '薙髮',
'藤制' => '藤製',
'药签' => '藥籤',
'药面儿' => '藥麵兒',
-'苏崑' => '蘇崑',
'苏昆' => '蘇崑',
'苹婆' => '蘋婆',
'苹果' => '蘋果',
'冲头阵' => '衝頭陣',
'冲风' => '衝風',
'衡鉴' => '衡鑑',
+'表征' => '表徵',
'表面包' => '表面包',
'袋杆' => '袋桿',
'袋里' => '袋裡',
'松脆' => '鬆脆',
'松脱' => '鬆脫',
'松蛋' => '鬆蛋',
-'松起' => '鬆起',
'松软' => '鬆軟',
'松通' => '鬆通',
'松开' => '鬆開',
'島' => '岛',
'峽' => '峡',
'崍' => '崃',
+'崑' => '昆',
'崗' => '岗',
+'崙' => '仑',
'崢' => '峥',
'崬' => '岽',
'嵐' => '岚',
'拚搏' => '拚搏',
'拚死' => '拚死',
'拾瀋' => '拾渖',
-'拿破崙' => '拿破仑',
'挨剋' => '挨剋',
'提昇' => '提升',
'蒐錄' => '搜录',
'旋乾转坤' => '旋乾转坤',
'無言不讎' => '无言不雠',
'曠若發矇' => '旷若发矇',
-'崑崙' => '昆仑',
-'崑劇' => '昆剧',
-'崑山' => '昆山',
-'崑島' => '昆岛',
-'崑曲' => '昆曲',
-'崑腔' => '昆腔',
-'崑蘇' => '昆苏',
-'崑調' => '昆调',
'易·乾' => '易·乾',
'易經·乾' => '易经·乾',
'易经·乾' => '易经·乾',
'前波美拉尼亚' => '前波莫瑞',
'前波美拉尼亞' => '前波莫瑞',
'加蓬' => '加彭',
+'加泰罗尼亚' => '加泰隆尼亞',
+'加泰羅尼亞' => '加泰隆尼亞',
'加沙地带' => '加薩走廊',
'加沙地帶' => '加薩走廊',
'包豪斯' => '包浩斯',
'击剑' => '劍擊',
'擊劍' => '劍擊',
'加薩走廊' => '加沙地帶',
+'加泰隆尼亞' => '加泰羅尼亞',
'迦納' => '加納',
'加彭' => '加蓬',
'努力著' => '努力着',
'衣索匹亞' => '埃塞俄比亚',
'衣索比亞' => '埃塞俄比亞',
'葉里溫' => '埃里溫',
+'埋著' => '埋着',
'城市里' => '城市裏',
'城里' => '城裏',
'域里' => '域裏',
'朝著者' => '朝著者',
'朝著述' => '朝著述',
'朝著錄' => '朝著錄',
-'板球' => '木球',
'賓·拉登' => '本·拉登',
'班傑明' => '本傑明',
'賓拉登' => '本拉登',
'台球' => '桌球',
'撞球' => '桌球',
'梅鐸' => '梅鐸',
-'默多克' => '梅鐸',
'条文里' => '條文裏',
'梳著' => '梳着',
'梳著作' => '梳著作',
'箱里' => '箱裏',
'节目里' => '節目裏',
'簽著' => '簽着',
-'篮板球' => '籃板球',
-'籃板球' => '籃板球',
'迈克尔' => '米高',
'麦克尔' => '米高',
'迈克尔·欧文' => '米高·奧雲',
'彩球' => '綵球',
'彩綢' => '綵綢',
'彩绸' => '綵綢',
-'彩线' => '綵綫',
-'彩線' => '綵線',
'彩船' => '綵船',
-'彩衣' => '綵衣',
'线图里' => '線圖裏',
'緝凶' => '緝兇',
'县里' => '縣裏',
'偷著者' => '偷著者',
'偷著述' => '偷著述',
'傅利葉' => '傅里叶',
-'母音' => '元音',
'光著' => '光着',
'光著書' => '光著书',
'光著作' => '光著作',
'辦著者' => '办著者',
'辦著述' => '办著述',
'加薩走廊' => '加沙地带',
+'加泰隆尼亞' => '加泰罗尼亚',
'迦納' => '加纳',
'加彭' => '加蓬',
'動著' => '动着',
'衣索比亞' => '埃塞俄比亚',
'艾菲爾' => '埃菲尔',
'葉里溫' => '埃里温',
+'埋著' => '埋着',
'功能變數名稱' => '域名',
'網域名稱' => '域名',
'吉里巴斯' => '基里巴斯',
"category-subcat-count-limited": "هذا التصنيف يحوي {{PLURAL:$1||التصنيف الفرعي التالي|التصنيفين الفرعيين التاليين|التصنيفات الفرعية $1 التالية}}.",
"category-article-count": "{{PLURAL:$2|لا صفحات بهذا التصنيف سوى التالية.|{{PLURAL:$1||الصفحة التالية مصنّفة|الصفحتان التاليتان مصنّفتان|الصفحات $1 التالية مصنّفة}} بهذا التصنيف، من إجمالي $2.}}",
"category-article-count-limited": "{{PLURAL:$1||الصفحة التالية|الصفحتان التاليتان|الصفحات $1 التالية}} مصنّفة بهذا التصنيف.",
- "category-file-count": "{{PLURAL:$2|لا ملفات مصنّفة بهذا التصنيف سوى التالي.|{{PLURAL:$1||الملف التالي مصنّف|الملفان التاليان مصنّفان|الملفات $1 التالية مصنّفة}} بهذا التصنيف من إجمالي $2.}}",
+ "category-file-count": "هذا التصنيف مصنّف عليه الملف{{PLURAL:$2| التالي.|{{PLURAL:$1|| التالي|ان التاليان|ات $1 التالية}}، من إجمالي $2.}}",
"category-file-count-limited": "{{PLURAL:$1|الملف التالي مصنّف|الملفان التاليان مصنّفان|الملفات $1 التالية مصنّفة}} بهذا التصنيف.",
"listingcontinuesabbrev": "(تابع)",
"index-category": "صفحات مفهرسة",
"history_short": "التاريخ",
"history_small": "تاريخ",
"updatedmarker": "عُدلت منذ زيارتي الأخيرة",
- "printableversion": "نسخة للطباعة",
+ "printableversion": "بتنسق للطباعة",
"permalink": "رابط دائم",
"print": "اطبع",
"view": "مطالعة",
- "view-foreign": "اعرض عÙ\84Ù\89 $1",
+ "view-foreign": "استعرضÙ\87 Ù\81Ù\8a $1",
"edit": "عدل",
"edit-local": "تعديل الوصف المحلي",
"create": "أنشئ",
"aboutsite": "عن {{SITENAME}}",
"aboutpage": "Project:عن",
"copyright": "المحتوى منشور وفق $1 إن لم يرد خلاف ذلك.",
- "copyrightpage": "{{ns:project}}:حقوق التأليف و النشر",
+ "copyrightpage": "{{ns:project}}:حقوق التأليف و الطبع",
"currentevents": "الأحداث الجارية",
"currentevents-url": "Project:الأحداث الجارية",
"disclaimers": "إخلاء مسؤولية",
"image_tip": "ملف مدرج",
"media_tip": "وصلة ملف",
"sig_tip": "توقيعك مع الساعة والتاريخ",
- "hr_tip": "خط Ø£Ù\81Ù\82Ù\8a (تجÙ\86ب اÙ\84استخداÙ\85 بÙ\83ثرة)",
+ "hr_tip": "خط Ø£Ù\81Ù\82Ù\8a (تجÙ\86ب اÙ\84Ø¥Ù\81راط)",
"summary": "ملخص:",
"subject": "موضوع/عنوان:",
"minoredit": "هذا تعديل طفيف",
"publishchanges": "نشر التغييرات",
"preview": "عرض مسبق",
"showpreview": "أظهر معاينة",
- "showdiff": "عرض التغييرات",
+ "showdiff": "استعرض اÙ\84تغÙ\8aÙ\8aرات",
"blankarticle": "<strong>تنبيه:</strong> الصفحة التي تريد إنشاءها فارغة. إذا نقرت \"$1\" ثانية فستنشأ الصفحة بدون محتوى.",
"anoneditwarning": "<strong>تحذير:</strong> أنت غير مسجل الدخول. عنوان الأيبي الخاص بك سيكون معروضا بشكل علني لو قمت بأي تعديلات. لو أنك <strong>[$1 سجلت الدخول]</strong> أو <strong>[$2 أنشأت حسابا]</strong>، فتعديلاتك ستنسب لاسم المستخدم الخاص بك، بالإضافة إلى فوائد أخرى.",
"anonpreviewwarning": "''أنت غير مسجل الدخول. الحفظ سيسجل عنوان الأيبي الخاص بك في تاريخ هذه الصفحة.''",
"newarticle": "(جديد)",
"newarticletext": "لقد تبعت وصلة لصفحة لم يتم إنشائها بعد.\nلإنشاء هذه الصفحة ابدأ الكتابة في الصندوق بالأسفل (انظر في [$1 صفحة المساعدة] للمزيد من المعلومات).\nإذا كانت زيارتك لهذه الصفحة بالخطأ، اضغط على زر ''رجوع'' في متصفح الإنترنت لديك.",
"anontalkpagetext": "----\n<em>هذه صفحة نقاش لمستخدم مجهول لم يقم بإنشاء حساب بعد أو لا يستعمل ذلك الحساب.</em>\nلذا فيجب علينا استعمال رقم الأيبي للتعرف عليه/عليها.\nمثل هذا العنوان يمكن أن يشترك فيه عدة مستخدمين.\nلو كنت مستخدما مجهولا وتشعر بأن تعليقات لا تخصك تم توجيهها إليك، من فضلك [[Special:CreateAccount|أنشئ حسابا]] أو [[Special:UserLogin|سجل الدخول]] لتجنب الارتباك المستقبلي مع مستخدمين مجهولين آخرين.",
- "noarticletext": "الصفحة خالية. يمكنك [[Special:Search/{{PAGENAME}}|البحث عن عنوانها]] في الصفحات الأخرى أو\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} البحث في السجلات] (لتعرف إذا حذفت)،\nأو '''[{{fullurl:{{FULLPAGENAME}}|action=edit}} إنشاؤها بنفسك]'''</span>.",
- "noarticletext-nopermission": "لا يوجد حاليا أي نص في هذه الصفحة.\nيمكنك [[Special:Search/{{PAGENAME}}|البحث عن عنوان هذه الصفحة]] في الصفحات الأخرى، أو <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} البحث في السجلات المتعلقة بها]</span>، لكنك لست مخولاً لإنشاء هذه الصفحة.",
+ "noarticletext": "هذه الصفحة خالية حاليا. يمكنك [[Special:Search/{{PAGENAME}}|البحث عن عنوانها]] في الصفحات الأخرى أو\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} البحث في السجلات] (لتعرف إن كانت قد حُذِفَت)،\nأو '''[{{fullurl:{{FULLPAGENAME}}|action=edit}} إنشاؤها]'''</span>.",
+ "noarticletext-nopermission": "لا يوجد حاليا أي نص في هذه الصفحة.\nيمكنك [[Special:Search/{{PAGENAME}}|البحث عن عنوان هذه الصفحة]] في الصفحات الأخرى، أو <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} البحث في السجلات]</span>، لكن ليست لك صلاحية إنشاء هذه الصفحة.",
"missing-revision": "المراجعة #$1 من الصفحة المسماة \"{{FULLPAGENAME}}\" غير موجودة.\n\nهذا يحدث عادة عن طريق اتباع وصلة تاريخ قديمة لصفحة تم حذفها.\nالتفاصيل يمكن إيجادها في [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} سجل الحذف].",
"userpage-userdoesnotexist": "حساب المستخدم \"<nowiki>$1</nowiki>\" غير مسجل.\nمن فضلك تأكد أنك تريد إنشاء/تعديل هذه الصفحة.",
"userpage-userdoesnotexist-view": "حساب المستخدم \"$1\" غير مسجل.",
"templatesused": "{{PLURAL:$1||القالب المستخدم|القالبان المستخدمان|القوالب المستخدمة}} في هذه الصفحة:",
"templatesusedpreview": "{{PLURAL:$1||القالب المستخدم|القالبان المستخدمان|القوالب المستخدمة}} في هذه المعاينة:",
"templatesusedsection": "{{PLURAL:$1||القالب المستخدم|القالبان المستخدمان|القوالب المستخدمة}} في هذا القسم:",
- "template-protected": "(حماية كاملة)",
- "template-semiprotected": "(حماية جزئية)",
+ "template-protected": "(محميّة)",
+ "template-semiprotected": "(محمية جزئيا)",
"hiddencategories": "{{PLURAL:$1|هذه الصفحة غير موجودة في أي تصنايف مخفية|هذه الصفحة موجودة في تصنيف مخفي واحد|هذه الصفحة موجودة في تصنيفين مخفيين|هذه الصفحة موجودة في $1 تصانيف مخفية|هذه الصفحة موجودة في $1 تصنيفا مخفيا|هذه الصفحة موجودة في $1 تصنيف مخفي}}:",
- "edittools": "<!-- النص هنا سيظهر تحت صندوق التحرير واستمارة رفع الصور. -->",
+ "edittools": "<!-- هذا النص سيظهر تحت حقل تحرير المتن و استمارة رفع الملفات. -->",
"nocreatetext": "قام {{SITENAME}} بتحديد القدرة على إنشاء صفحات جديدة.\nيمكنك العودة وتحرير صفحة موجودة بالفعل، أو [[Special:UserLogin|الدخول أو تسجيل حساب]].",
"nocreate-loggedin": "أنت لا تمتلك الصلاحية لإنشاء صفحات جديدة.",
"sectioneditnotsupported-title": "تعديل الأقسام غير مدعوم",
"sectioneditnotsupported-text": "تعديل الأقسام غير مدعوم في هذه الصفحة",
"permissionserrors": "خطأ في السماح",
"permissionserrorstext": "لا تمتلك الصلاحية لفعل هذا، {{PLURAL:$1||للسبب التالي|للسببين التاليين|للأسباب التالية}}:",
- "permissionserrorstext-withaction": "لا تملك الصلاحيات ل$2، لل{{PLURAL:$1||سبب التالي|سببين التاليين|أسباب التالية}}:",
+ "permissionserrorstext-withaction": "ليست لك الصلاحية ل$2، لل{{PLURAL:$1||سبب التالي|سببين التاليين|أسباب التالية}}:",
"contentmodelediterror": "أنت لا يمكنك تعديل هذه المراجعة لأن موديل محتواها هو <code>$1</code>، والذي يختلف عن موديل المحتوى الحالي للصفحة <code>$2</code>.",
"recreate-moveddeleted-warn": "'''تحذير: أنت تعيد إنشاء صفحة سبق حذفها.'''\n\nيجب عليك التيقن من أن الاستمرار بتحرير هذه الصفحة ملائم.\nسجلا الحذف والنقل لهذه الصفحة معروضان هنا للتيسير:",
"moveddeleted-notice": "هذه الصفحة تم حذفها.\nسجلا حذف ونقل الصفحة معروضان بالأسفل كمرجع.",
"currentrev": "المراجعة الحالية",
"currentrev-asof": "المراجعة الحالية بتاريخ $1",
"revisionasof": "مراجعة $1",
- "revision-info": "Ù\86سخة $1 Ù\84Ù\84Ù\85ستخدÙ\85 {{GENDER:$6|$2}}$7",
+ "revision-info": "Ù\85راجعة $1 بÙ\88اسطة {{GENDER:$6|$2}}$7",
"previousrevision": "→ مراجعة أقدم",
"nextrevision": "مراجعة أحدث ←",
"currentrevisionlink": "المراجعة الحالية",
"shown-title": "عرض $1 {{PLURAL:$1|نتيجة|نتيجة}} لكل صفحة",
"viewprevnext": "عرض ($1 {{int:pipe-separator}} $2) ($3).",
"searchmenu-exists": "'''توجد صفحة اسمها \"[[:$1]]\" على هذه الويكي.''' {{PLURAL:$2|0=|انظر ايضا نتائج البحث الأخرى.}}",
- "searchmenu-new": "<strong>أنشئ الصفحة \"[[:$1]]\" على هذه الويكي!</strong> {{PLURAL:$2|0=|انظر أيضا الصفحة التي تم العثور عليها من بحثك.|انظر ايضا نتائج البحث.}}",
+ "searchmenu-new": "<strong>أنشئ الصفحة \"[[:$1]]\" في هذه الويكي. انظر أيضا </strong> {{PLURAL:$2|0=|الصفحة التي وجدت بالبحث.|نتائج البحث.}}",
"searchprofile-articles": "صفحات المحتوى",
"searchprofile-images": "الوسائط المتعددة",
"searchprofile-everything": "الكل",
"recentchanges-label-minor": "هذا تعديل طفيف",
"recentchanges-label-bot": "تعديل أجراه بوت",
"recentchanges-label-unpatrolled": "لم يراجع هذا التعديل إلى الآن",
- "recentchanges-label-plusminus": "حجم الصفحة تغير بهذا العدد من وحدات البايت",
+ "recentchanges-label-plusminus": "حجم الصفحة تغير بهذا العدد من البايتات",
"recentchanges-legend-heading": "<strong>شرح:</strong>",
- "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (راجع Ø£Ù\8aضا [[Special:NewPages|قائمة الصفحات الجديدة]])",
+ "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (طاÙ\84ع Ù\83Ø°Ù\84Ù\83 [[Special:NewPages|قائمة الصفحات الجديدة]])",
"recentchanges-submit": "أظهر",
"rcfilters-tag-remove": "أزل '$1'",
"rcfilters-legend-heading": "<strong>قائمة الاختصارات:</strong>",
"rcfilters-target-page-placeholder": "أدخل اسم صفحة",
"rcnotefrom": "بالأسفل {{PLURAL:$5|التغيير|التغييرات}} منذ <strong>$2</strong> (إلى <strong>$1</strong> معروضة).",
"rclistfromreset": "إعادة ضبط خيار التاريخ",
- "rclistfrom": "أظهر التغييرات بدء من $3 $2",
+ "rclistfrom": "أظهر التغييرات بدءًا من $3 $2",
"rcshowhideminor": "$1 التعديلات الطفيفة",
"rcshowhideminor-show": "أظهر",
"rcshowhideminor-hide": "أخف",
"recentchangeslinked-feed": "تغييرات ذات علاقة",
"recentchangeslinked-toolbox": "تغييرات ذات علاقة",
"recentchangeslinked-title": "التغييرات المرتبطة بصفحة «$1»",
- "recentchangeslinked-summary": "أدخل اسم صفحة لرؤية التغييرات في الصفحات الموصولة من أو إلى تلك الصفحة. (لرؤية أعضاء تصنيف، أدخل تصنيف:الاسم الخاص بالتصنيف). التغييرات في الصفحات في [[Special:Watchlist|قائمة مراقبتك]] <strong>عريضة</strong>.",
+ "recentchangeslinked-summary": "أدخل اسم صفحة لمطالعة التغييرات في الصفحات التي تربط إلى أو من هذه الصفحة. (لمطالعة أعضاء تصنيف، أدخل تصنيف:اسم التصنيف). التغييرات في الصفحات ضمن [[Special:Watchlist|قائمة مراقبتك]] <strong>بخط داكن</strong>.",
"recentchangeslinked-page": "اسم الصفحة:",
"recentchangeslinked-to": "أظهر التغييرات للصفحات الموصولة للصفحة المعطاة عوضاً عن ذلك",
"recentchanges-page-added-to-category": "[[:$1]] أضيفت إلى التصنيف",
"duplicatesoffile": "{{PLURAL:$1|الملف التالي مكرر|ال$1 ملف التالي مكررات}} لهذا الملف\n([[Special:FileDuplicateSearch/$2|المزيد من التفاصيل]]):",
"sharedupload": "هذا الملف من $1 ويمكن استخدامه بواسطة المشاريع الأخرى.",
"sharedupload-desc-there": "هذا الملف من $1 ويمكن استخدامه بواسطة المشاريع الأخرى.\nمن فضلك انظر [$2 صفحة وصف الملف] لمزيد من المعلومات.",
- "sharedupload-desc-here": "هذا الملف من $1 ويمكن استخدامه بواسطة المشاريع الأخرى.\nالوصف على [$2 صفحة وصف الملف] هناك معروض بالأسفل.",
+ "sharedupload-desc-here": "هذا الملف من $1 ويمكن للمشروعات الأخرى استعماله.\nالوصف من [$2 صفحة وصف الملف] هناك معروض فيما يلي.",
"sharedupload-desc-edit": "هذا ملف من $1 وقد يكون مستخدما في مشاريع أخرى.\nيمكن لك أن تعدل وصف الملف في [$2 صفحته] هناك.",
"sharedupload-desc-create": "هذا ملف من $1 وقد يكون مستخدما في مشاريع أخرى.\nيمكن لك أن تعدل وصف الملف في [$2 صفحته] هناك.",
"filepage-nofile": "لا ملف موجود بهذا الاسم.",
"shared-repo": "مستودع مشترك",
"shared-repo-name-wikimediacommons": "ويكيميديا كومنز",
"filepage.css": "/* CSS المعروض هنا سيضمن في صفحات وصف الملفات، أيضا على الويكيات الأجنبية */",
- "upload-disallowed-here": "Ù\84ا Ù\8aÙ\85Ù\83Ù\86Ù\83 تعدÙ\8aÙ\84 Ù\87Ø°Ù\87 اÙ\84صÙ\88رة.",
+ "upload-disallowed-here": "Ù\84ا Ù\8aÙ\85Ù\83Ù\86Ù\83 استبداÙ\84 Ù\87ذا اÙ\84Ù\85Ù\84Ù\81.",
"filerevert": "استرجع $1",
"filerevert-legend": "استرجع الملف",
"filerevert-intro": "أنت تسترجع '''[[Media:$1|$1]]''' [$4 لنسخة بتاريخ $2، $3].",
"nopagetitle": "لا توجد صفحة هدف كهذه",
"nopagetext": "صفحة الهدف التي حددتها غير موجودة.",
"pager-newer-n": "{{PLURAL:$1|أجدد 1|أجدد $1}}",
- "pager-older-n": "{{PLURAL:$1|أقدم 1|أقدم $1}}",
+ "pager-older-n": "{{PLURAL:$1|$1 أقدم}}",
"suppress": "أوفرسايت",
"querypage-disabled": "تم تعطيل هذه الصفحة الخاصة لأسباب تتعلق بالأداء.",
"apihelp": "مساعدة API",
"undelete-show-file-submit": "نعم",
"namespace": "النطاق:",
"invert": "اعكس الاختيار",
- "tooltip-invert": "عÙ\84Ù\85 عÙ\84Ù\89 Ù\87ذا اÙ\84صÙ\86دÙ\88Ù\82 Ù\84إخÙ\81اء اÙ\84تغÙ\8aÙ\8aرات Ù\84Ù\84صÙ\81Øات Ù\81Ù\8a اÙ\84Ù\86طاÙ\82 اÙ\84Ù\85ختار (Ù\88اÙ\84Ù\86طاÙ\82 اÙ\84Ù\85صاØب Ù\84Ù\88 Ù\85عÙ\84Ù\85 عÙ\84Ù\8aÙ\87ا)",
+ "tooltip-invert": "أشÙ\90Ù\91ر Ù\87ذا اÙ\84Ø®Ù\8aار Ù\84إخÙ\81اء اÙ\84تغÙ\8aÙ\8aرات Ù\81Ù\8a اÙ\84صÙ\81Øات Ù\81Ù\8a اÙ\84Ù\86طاÙ\82 اÙ\84Ù\85ختار (Ù\88اÙ\84Ù\86طاÙ\82 اÙ\84Ù\85Ù\82ترÙ\86 بÙ\87 إذا Ø£Ù\8fØ´Ù\90Ù\91ر عÙ\84Ù\8aÙ\87)",
"tooltip-whatlinkshere-invert": "قم بتعليم هذا الخيار لإخفاء الروابط من الصفحات التي تم تعليم نطاقاتها.",
"namespace_association": "النطاق المقترن",
- "tooltip-namespace_association": "عÙ\84Ù\85 عÙ\84Ù\89 Ù\87ذا اÙ\84صÙ\86دÙ\88Ù\82 Ù\84تضÙ\85Ù\8aÙ\86 Ù\86طاÙ\82 اÙ\84Ù\86Ù\82اش Ø£Ù\88 اÙ\84Ù\85Ù\88ضÙ\88ع اÙ\84Ù\85صاØب Ù\84لنطاق المختار",
+ "tooltip-namespace_association": "أشÙ\90Ù\91ر Ù\87ذا اÙ\84Ø®Ù\8aار Ù\84تضÙ\85Ù\8aÙ\86 Ù\86طاÙ\82 اÙ\84Ù\86Ù\82اش Ø£Ù\88 اÙ\84Ù\85Ù\88ضÙ\88ع اÙ\84Ù\85Ù\82ترÙ\86 بالنطاق المختار",
"blanknamespace": "(رئيسي)",
"contributions": "مساهمات {{GENDER:$1|المستخدم|المستخدمة}}",
"contributions-title": "مساهمات {{GENDER:$1|المستخدم|المستخدمة}} $1",
"tooltip-ca-talk": "نقاش عن صفحة المحتوى",
"tooltip-ca-edit": "تعديل هذه الصفحة",
"tooltip-ca-addsection": "ابدأ قسما جديدا",
- "tooltip-ca-viewsource": "هذه الصفحة محمية.\nيمكنك رؤية مصدرها.",
+ "tooltip-ca-viewsource": "هذه الصفحة محمية.\nيمكنك مطالعة مصدرها.",
"tooltip-ca-history": "النسخ السابقة لهذه الصفحة",
"tooltip-ca-protect": "احم هذه الصفحة",
"tooltip-ca-unprotect": "غير حماية هذه الصفحة",
"tooltip-p-logo": "زُر الصفحة الرئيسية",
"tooltip-n-mainpage": "زر الصفحة الرئيسية",
"tooltip-n-mainpage-description": "زر الصفحة الرئيسية",
- "tooltip-n-portal": "ØÙ\88Ù\84 اÙ\84Ù\85شرÙ\88عØ\8c Ù\85اذا Ù\8aÙ\85Ù\83Ù\86 Ø£Ù\86 تÙ\81عÙ\84Ø\8c Ø£Ù\8aÙ\86 Ù\8aÙ\85Ù\83Ù\86 Ø£ن تجد ما تحتاجه",
+ "tooltip-n-portal": "ØÙ\88Ù\84 اÙ\84Ù\85شرÙ\88عØ\8c Ù\88 Ù\85ا Ù\8aÙ\85Ù\83Ù\86 Ù\81عÙ\84Ù\87Ø\8c Ù\88 Ø£Ù\8aن تجد ما تحتاجه",
"tooltip-n-currentevents": "مطالعة سريعة لأهم الأحداث الجارية",
"tooltip-n-recentchanges": "قائمة أحدث التغييرات في الويكي.",
"tooltip-n-randompage": "حمل صفحة عشوائية",
"tooltip-save": "احفظ تغييراتك",
"tooltip-publish": "انشر تغييراتك",
"tooltip-preview": "اعرض تغييراتك، من فضلك استخدم هذا قبل الحفظ!",
- "tooltip-diff": "اعرض اÙ\84تغÙ\8aÙ\8aرات اÙ\84تÙ\8a Ù\82Ù\85ت بÙ\87ا Ù\84لنص.",
+ "tooltip-diff": "استعرض اÙ\84تغÙ\8aÙ\8aرات اÙ\84تÙ\8a أجرÙ\8aتÙ\87ا عÙ\84Ù\89 النص.",
"tooltip-compareselectedversions": "شاهد الفروق بين النسختين المختارتين من هذه الصفحة.",
"tooltip-watch": "أضف هذه الصفحة إلى قائمة مراقبتك",
"tooltip-watchlistedit-normal-submit": "أزل العناوين",
"tooltip-watchlistedit-raw-submit": "حدث قائمة المراقبة",
"tooltip-recreate": "أعد إنشاء الصفحة رغم كونها حذفت",
"tooltip-upload": "ابدأ الرفع",
- "tooltip-rollback": "\"استرجاع\" تسترجع اÙ\84تعدÙ\8aÙ\84 (اÙ\84تعدÙ\8aÙ\84ات) Ù\81Ù\8a Ù\87Ø°Ù\87 اÙ\84صÙ\81ØØ© Ù\84Ù\84Ù\85ساÙ\87Ù\85 اÙ\84أخÙ\8aر بضغطة واحدة.",
+ "tooltip-rollback": "\"استرجاع\" تسترجع تعدÙ\8aÙ\84ات آخر Ù\85ØرÙ\91ر Ù\84Ù\87Ø°Ù\87 اÙ\84صÙ\81ØØ© بضغطة واحدة.",
"tooltip-undo": "\"رجوع\" تسترجع هذا التعديل وتفتح نافذة التعديل في نمط العرض المسبق. تسمح بإضافة سبب في الملخص.",
"tooltip-preferences-save": "احفظ التغييرات",
"tooltip-summary": "أدخل ملخصا قصيرا",
"spam_reverting": "استرجاع آخر نسخة ليس بها وصلات إلى $1",
"spam_blanking": "كل النسخ احتوت على وصلات ل $1، إفراغ",
"spam_deleting": "جميع النسخ تحوي رابطا إلى $1، يتم الحذف",
- "simpleantispam-label": "اختبار ضد السبام.\n<strong>لا</strong> تملأ هذا!",
+ "simpleantispam-label": "اختبار ضد السُّخام.\n<strong>لا</strong> تملأ هذا!",
"pageinfo-title": "المعلومات عن «$1»",
"pageinfo-not-current": "عذرا، لا يمكن عرض تلك المعلومات للنسخ القديمة.",
"pageinfo-header-basic": "المعلومات الأساسية",
"exif-referenceblackwhite": "زوج من قيم المرجع السوداء والبيضاء",
"exif-datetime": "تاريخ ووقت تغيير الملف",
"exif-imagedescription": "عنوان الصورة",
- "exif-make": "مصنع آلة التصوير",
+ "exif-make": "صانع الكاميرا",
"exif-model": "طراز الكاميرا",
"exif-software": "البرمجيات المستخدمة",
"exif-artist": "المؤلف",
"exif-copyright": "مالك الحقوق",
"exif-exifversion": "نسخة Exif",
"exif-flashpixversion": "نسخة Flashpix المدعومة",
- "exif-colorspace": "فضاء الألوان",
+ "exif-colorspace": "الفضاء اللوني",
"exif-componentsconfiguration": "معنى كل مكونة",
"exif-compressedbitsperpixel": "طور ضغط الصورة",
"exif-pixelxdimension": "عرض الصورة",
"exif-usercomment": "تعليقات المستخدم",
"exif-relatedsoundfile": "ملف صوتي مرتبط",
"exif-datetimeoriginal": "تاريخ ووقت توليد البيانات",
- "exif-datetimedigitized": "تاريخ ووقت التحويل الرقمي",
+ "exif-datetimedigitized": "تاريخ و وقت الرَّقمنة",
"exif-subsectime": "وقت تاريخ ثواني فرعية",
"exif-subsectimeoriginal": "وقت تاريخ أصلي ثواني فرعية",
"exif-subsectimedigitized": "وقت تاريخ رقمي ثواني فرعية",
"tagline": "De {{SITENAME}}",
"help": "Ayuda",
"search": "Buscar",
- "search-ignored-headings": " #<!-- dexar esta llinia exactamente como ta --> <pre>\n# Testeres que nun se tendrán en cuenta na gueta.\n# Los cambios fechos equí son efeutivos nel momentu que s'indexa la páxina cola testera.\n# Pue forzar el reindexáu d'una páxina faciendo una edición nula.\n# La sintaxis ye la siguiente:\n# * Tolo qu'hai dende un caráuter \"#\" al fin de llinia ye un comentariu\n# * Cada llinia nun-balera ye'l títulu exactu a descartar, incluyendo mayúscules y demás\nReferencies\nEnllaces esternos\nVer tamién\n #</pre> <!-- dexar esta llinia exactamente como ta -->",
+ "search-ignored-headings": " #<!-- dexar esta llinia exautamente como ta --> <pre>\n# Testeres que nun se tendrán en cuenta na gueta.\n# Los cambios fechos equí son efeutivos nel momentu que s'indexa la páxina cola testera.\n# Puede forzase'l reindexáu d'una páxina faciendo una edición nula.\n# La sintaxis ye la siguiente:\n# * Tolo qu'hai dende un caráuter «#» al fin de llinia ye un comentariu\n# * Cada llinia nun-balera ye'l títulu exautu a descartar, incluyendo mayúscules y too.\nReferencies\nEnllaces esternos\nVer tamién\n #</pre> <!-- dexar esta llinia exautamente como ta -->",
"searchbutton": "Guetar",
"go": "Dir",
"searcharticle": "Dir",
"resetpass-temp-password": "Contraseña temporal:",
"resetpass-abort-generic": "Una estensión encaboxó'l cambiu de la contraseña.",
"resetpass-expired": "La so contraseña caducó. Defina una nueva contraseña p'aniciar sesión.",
- "resetpass-expired-soft": "La so contraseña caducó y tien de reaniciala. Escueya una contraseña nueva, o calque «{{int:authprovider-resetpass-skip-label}}» pa reaniciala más sero.",
- "resetpass-validity-soft": "La so contraseña nun ye válida: $1\n\nEscueya una contraseña nueva, o calque «{{int:authprovider-resetpass-skip-label}}» pa reaniciala más sero.",
+ "resetpass-expired-soft": "La contraseña caducó y precisa reaniciase. Escueye agora una contraseña nueva, o pulsia «{{int:authprovider-resetpass-skip-label}}» pa reaniciala sero.",
+ "resetpass-validity-soft": "La contraseña nun ye válida: $1\n\nEscueye agora una contraseña nueva, o pulsia «{{int:authprovider-resetpass-skip-label}}» pa reaniciala sero.",
"passwordreset": "Reaniciar contraseña",
"passwordreset-text-one": "Complete esti formulariu pa reaniciar la contraseña.",
"passwordreset-text-many": "{{PLURAL:$1|Rellene unu de los campos pa recibir una contraseña temporal per corréu.}}",
"blankarticle": "<strong>Atención:</strong> La páxina que tas a piques de crear ta balera.\nSi vuelves a facer click en «$1», crearáse la páxina ensin conteníu dengún.",
"anoneditwarning": "<strong>Avisu:</strong> Nun aniciasti sesión. La direición IP sedrá visible en público si faes dalguna edición. Si <strong>[$1 anicies sesión]</strong> o <strong>[$2 crees una cuenta]</strong>, les ediciones atribuiránse al to nome d'usuariu, xunto con otros beneficios.",
"anonpreviewwarning": "''Nun aniciasti sesión. Al guardar quedará rexistrada la to direición IP nel historial d'edición d'esta páxina.''",
- "missingsummary": "'''Recordatoriu:''' Nun conseñasti un resume d'edición.\nSi calques nuevamente \"$1\", la to edición guardaráse ensin nengún resume.",
- "selfredirect": "<strong>Atención:</strong> Tas redirixendo esta páxina a ella mesma.\nSeique conseñaras un oxetivu enquivocáu pa la redireición, o que teas editando una páxina enquivocada. Si vuelves a facer clic en «$1», crearáse la redireición de toles maneres.",
+ "missingsummary": "<strong>Recordatoriu:</strong> Nun conseñasti un resume d'edición.\nSi pulsies nuevamente «$1», la to edición guardaráse ensin resume.",
+ "selfredirect": "<strong>Atención:</strong> Tas redirixendo esta páxina a ella mesma.\nEscurque conseñasti un destín enquivocáu pa la redireición, o que teas editando una páxina enquivocada. Si vuelves a pulsiar en «$1», crearáse la redireición de toles maneres.",
"missingcommenttext": "Escribi un comentariu.",
"missingcommentheader": "<strong>Recordatoriu:</strong> Nun conseñasti un asuntu pa esti comentariu.\nSi calques nuevamente «$1», la to edición guardaráse ensin nengunu.",
"summary-preview": "Vista previa del resume d'edición:",
"editingsection": "Editando $1 (seición)",
"editingcomment": "Editando $1 (seición nueva)",
"editconflict": "Conflictu d'edición: $1",
- "explainconflict": "Daquién más camudó esta páxina dende qu'empecipiasti a editala.\nL'área de testu d'arriba contien el testu de la páxina como ta nestos momentos.\nLos tos cambios s'amuesen nel área de testu d'abaxo.\nVas tener que fusionar los tos cambios dientro del testu esistente.\n'''Namái''' va guardase'l testu del área d'arriba cuando calques \"$1\".",
+ "explainconflict": "Daquién más camudó esta páxina dende qu'empecipiasti a editala.\nL'área de testu d'arriba contien el testu de la páxina como ta nestos momentos.\nLos tos cambios s'amuesen nel área de testu d'abaxo.\nVas tener que fusionar los tos cambios col testu qu'esiste.\n<strong>Namái</strong> va guardase'l testu del área d'arriba cuando pulsies «$1».",
"yourtext": "El to testu",
"storedversion": "Versión almacenada",
"editingold": "'''AVISU: Tas editando una revisión vieya d'esta páxina. Si la grabes, los cambios que se ficieron dende esta revisión van perdese.'''",
"undo-summary": "Esfacer la revisión $1 de [[Special:Contributions/$2|$2]] ([[User talk:$2|alderique]])",
"undo-summary-username-hidden": "Desfacer la revisión $1 d'un usuariu tapecíu",
"cantcreateaccount-text": "[[User:$3|$3]] bloquió la creación de cuentes dende esta direición IP (<strong>$1</strong>).\n\nEl motivu dau por $3 ye <em>$2</em>",
- "cantcreateaccount-range-text": "La creación de cuentes dende direiciones IP del rangu <strong>$1</strong>, qu'incluye la so direición IP (<strong>$4</strong>), ta bloquiada pol usuariu [[User:$3|$3]].\n\nLa razón dada por $3 ye <em>$2</em>.",
+ "cantcreateaccount-range-text": "La creación de cuentes dende direiciones IP del rangu <strong>$1</strong>, qu'incluye la to direición IP (<strong>$4</strong>), ta bloquiada pol usuariu [[User:$3|$3]].\n\nLa razón dada por $3 ye <em>$2</em>.",
"viewpagelogs": "Ver los rexistros d'esta páxina",
"nohistory": "Nun hay historial d'ediciones pa esta páxina.",
"currentrev": "Revisión actual",
"upload-preferred": "{{PLURAL:$2|Tipu de ficheru preferíu|Tipos de ficheros preferíos}}: $1.",
"upload-prohibited": "{{PLURAL:$2|Tipu de ficheru torgáu|Tipos de ficheros torgaos}}: $1.",
"uploadlogpage": "Rexistru de xubíes",
- "uploadlogpagetext": "Abaxo amuésase una llista de les xubíes d'archivos más recientes.\nMira la [[Special:NewFiles|galería d'archivos nuevos]] pa una güeyada más visual.",
+ "uploadlogpagetext": "Abaxo amuésase una llista de les cargues de ficheros más recién.\nMira la [[Special:NewFiles|galería de ficheros nuevos]] pa un resume más visual.",
"filename": "Nome del ficheru",
"filedesc": "Resume",
"fileuploadsummary": "Resume:",
"filereuploadsummary": "Cambios del ficheru:",
"filestatus": "Estáu de Copyright:",
"filesource": "Fonte:",
- "ignorewarning": "Inorar l'avisu y grabar l'archivu de toes formes",
+ "ignorewarning": "Inorar l'avisu y guardar el ficheru de toles maneres",
"ignorewarnings": "Inorar tolos avisos",
- "minlength1": "Los nomes d'archivu han tener a lo menos una lletra.",
+ "minlength1": "Los nomes de ficheru han de tener polo menos una lletra.",
"illegalfilename": "El nome del ficheru \"$1\" contien caráuteres non permitíos en títulos de páxina. Por favor renoma l'archivu ya intenta xubilu otra vuelta.",
"filename-toolong": "Los nomes de ficheru nun puen tener más de 240 bytes.",
- "badfilename": "Nome de la imaxe camudáu a \"$1\".",
+ "badfilename": "El nome del ficheru cambióse a «$1».",
"filetype-mime-mismatch": "La estensión de ficheru \".$1\" nun casa cola triba MIME detectada del ficheru ($2).",
"filetype-badmime": "Los ficheros de la triba MIME \"$1\" nun tienen permitida la xubida.",
"filetype-bad-ie-mime": "Nun se pue xubir esti ficheru porque Internet Explorer detectalu como \"$1\", que nun ta permitíu y pue ser una triba de ficheru peligrosa.",
"fileexists": "Yá esiste un ficheru con esti nome, por favor comprueba <strong>[[:$1]]</strong> si nun tas {{GENDER:|seguru|segura}} de querer camudalu.\n[[$1|thumb]]",
"filepageexists": "La páxina de descripción d'esti ficheru creóse yá en <strong>[[:$1]]</strong>, pero anguaño nun esiste nengún ficheru con esti nome.\nEl resume que pongas nun va apaecer na páxina de descripción.\nPa facer que'l to resume apaeza, vas tener qu'editalu manualmente.\n[[$1|thumb]]",
"fileexists-extension": "Yá esiste un ficheru con un nome asemeyáu: [[$2|thumb]]\n* Nome del ficheru que se quier xubir: <strong>[[:$1]]</strong>\n* Nome del ficheru esistente: <strong>[[:$2]]</strong>\n¿Quies meyor usar un nome más distinguible?",
- "fileexists-thumbnail-yes": "El ficheru paez ser una imaxe de tamañu menguáu ''(miniatura)''.\n [[$1|thumb]]\nPor favor comprueba el ficheru <strong>[[:$1]]</strong>.\nSi'l ficheru comprobáu tien el mesmu tamañu que la imaxe orixinal, nun ye necesario xubir una miniatura estra.",
- "file-thumbnail-no": "El ficheru entama con <strong>$1</strong>.\nPaez ser una imaxe de tamañu menguáu ''(miniatura)''.\nSi tienes esta imaxe a resolución completa xúbila; si non, por favor camuda'l nome del ficheru.",
+ "fileexists-thumbnail-yes": "El ficheru paez ser una imaxe de tamañu menguáu <em>(miniatura)</em>.\n [[$1|thumb]]\nRevisa'l ficheru <strong>[[:$1]]</strong>.\nSi'l ficheru revisáu ye la mesma imaxe que la del tamañu orixinal, nun se precisa xubir una miniatura estra.",
+ "file-thumbnail-no": "El nome del ficheru principia por <strong>$1</strong>.\nPaez ser una imaxe de tamañu menguáu <em>(miniatura)</em>.\nSi tienes esta imaxe a resolución completa xúbela; sinón, cambia'l nome del ficheru.",
"fileexists-forbidden": "Yá esiste un ficheru con esti nome, y nun se pue renomar.\nSi tovía asina quies xubir el ficheru, por favor vuelvi atrás y usa otru nome.\n[[File:$1|thumb|center|$1]]",
"fileexists-shared-forbidden": "Yá esiste un ficheru con esti nome nel direutoriu de ficheros compartíos.\nSi tovía asina quies xubir el ficheru, por favor vuelvi atrás y usa otru nome.\n[[File:$1|thumb|center|$1]]",
"fileexists-no-change": "La carga ye un duplicáu exautu de la versión actual de <strong>[[:$1]]</strong>.",
"uploadvirus": "¡El ficheru tien un virus!\nDetalles: $1",
"uploadjava": "El ficheru ye un archivu ZIP que contien un ficheru .class de Java.\nXubir ficheros Java nun ta permitío, porque puede facer que se salten les torgues de seguridá.",
"upload-source": "Ficheru orixe",
- "sourcefilename": "Nome d'orixe:",
+ "sourcefilename": "Nome del ficheru orixinal:",
"sourceurl": "URL d'orixe:",
"destfilename": "Nome de destín:",
"upload-maxfilesize": "Tamañu máximu del ficheru: $1",
"filename-bad-prefix": "El nome del ficheru que tas xubiendo entama con '''\"$1\"''', que ye un nome non descriptivu que de vezu conseñen automáticamente les cámares dixitales.\nPor favor escueyi un nome más descriptivu pal to ficheru.",
"filename-prefix-blacklist": " #<!-- dexa esta llinia exactamente como ta --> <pre>\n# La sintaxis ye la siguiente:\n# * Lo que va del caráuter \"#\" al fin de llinia ye un comentariu\n# * Toa llinia non-balera ye un prefixu pa los nomes de ficheru típicos que ponen les cámares dixitales\nCIMG # Casio\nDSC_ # Nikon\nDSCF # Fuji\nDSCN # Nikon\nDUW # dellos teléfonos móviles\nIMG # xenéricu\nJD # Jenoptik\nMGP # Pentax\nPICT # misc.\n #</pre> <!-- dexa esta llinia exactamente como ta -->",
"upload-proto-error": "Protocolu incorreutu",
- "upload-proto-error-text": "La xubida remota requier que l'URL entame por <code>http://</code> o <code>ftp://</code>.",
+ "upload-proto-error-text": "La carga remota rique que les URL principien por <code>http://</code> o <code>ftp://</code>.",
"upload-file-error": "Error internu",
"upload-file-error-text": "Hebo un error al intentar crear un ficheru temporal nel sirvidor.\nPor favor contauta con un [[Special:ListUsers/sysop|alministrador]] del sistema.",
- "upload-misc-error": "Error de xubida desconocíu",
+ "upload-misc-error": "Error de carga desconocíu",
"upload-misc-error-text": "Hebo un error desconocíu na xubida del ficheru.\nPor favor comprueba que l'URL ye válidu y accesible, y inténtalo otra vuelta.\nSi'l problema persiste, contauta con un [[Special:ListUsers/sysop|alministrador]] del sistema.",
"upload-too-many-redirects": "La URL contenía demasiaes redireiciones",
"upload-http-error": "Hebo un error HTTP: $1",
"upload-form-label-infoform-description-tooltip": "Describe de mou curtiu cualquier cosa notable de la obra.\nPa una semeya, cuenta les principales coses qu'apaecen, la ocasión o'l sitiu.",
"upload-form-label-usage-title": "Usu",
"upload-form-label-usage-filename": "Nome del ficheru",
- "upload-form-label-own-work": "Esti ye'l mio propiu trabayu",
+ "upload-form-label-own-work": "Esta ye una obra propia",
"upload-form-label-infoform-categories": "Categoríes",
"upload-form-label-infoform-date": "Data",
"upload-form-label-own-work-message-generic-local": "Confirmo que xubo esti ficheru siguiendo les condiciones de serviciu y les polítiques de llicencies de {{SITENAME}}.",
- "upload-form-label-not-own-work-message-generic-local": "Si nun puedes xubir esti ficheru baxo les polítiques de {{SITENAME}}, zarra esti diálogu y prueba otru métodu.",
- "upload-form-label-not-own-work-local-generic-local": "Quiciabes quieras probar tamién [[Special:Upload|la páxina predeterminada de xubíes]].",
+ "upload-form-label-not-own-work-message-generic-local": "Si nun puedes xubir esti ficheru baxo les polítiques de {{SITENAME}}, zarra esti diálogu y tenta otru métodu.",
+ "upload-form-label-not-own-work-local-generic-local": "Quiciabes tamién quieras tentar [[Special:Upload|la páxina de cargues predeterminada]].",
"upload-form-label-own-work-message-generic-foreign": "Entiendo que toi xubiendo esti ficheru a un depósitu compartíu. Confirmo que toi faciéndolo cumpliendo les condiciones de serviciu y les polítiques de llicencies d'esi sitiu.",
- "upload-form-label-not-own-work-message-generic-foreign": "Si nun puedes xubir esti ficheru baxo les polítiques del depósitu compartíu, zarra esti diálogu y prueba otru métodu.",
+ "upload-form-label-not-own-work-message-generic-foreign": "Si nun puedes xubir esti ficheru baxo les polítiques del depósitu compartíu, zarra esti diálogu y tenta otru métodu.",
"upload-form-label-not-own-work-local-generic-foreign": "Tamién pué interesate usar [[Special:Upload|la páxina de carga de {{SITENAME}}]] si esti ficheru pué xubise allí baxo les sos polítiques.",
"backend-fail-stream": "Nun se pudo tresmitir el ficheru $1.",
"backend-fail-backup": "Nun se pudo facer copia de seguridá del ficheru $1.",
"http-curl-error": "Error al baxar la URL: $1",
"http-bad-status": "Hebo un problema demientres la llamada HTTP: $1 $2",
"upload-curl-error6": "Nun se pudo acceder a la URL",
- "upload-curl-error6-text": "Nun se pudo acceder a la URL introducida. Por favor comprueba que la URL ye correuta y que'l sitiu ta activu.",
- "upload-curl-error28": "Fin del tiempu d'espera de la xubida",
- "upload-curl-error28-text": "El sitiu tardó demasiáu tiempu en responder. Por favor comprueba que'l sitiu ta activu, espera unos momentos y vuelve a intentalo. Igual ye meyor que lo intentes nun momentu en que tea menos sobrecargáu.",
+ "upload-curl-error6-text": "Nun pudo algamase la URL dada.\nComprueba que la URL ye correuta y que'l sitiu ta activu.",
+ "upload-curl-error28": "Escosó'l tiempu d'espera de la carga",
+ "upload-curl-error28-text": "El sitiu tardó demasiáu tiempu en responder.\nComprueba que'l sitiu ta activu, espera unos momentos y vuelve a tentalo.\nEscurque puedes tentar a una hora con menos sobrecarga.",
"license": "Llicencia:",
"license-header": "Llicencia",
"nolicense": "Nenguna seleicionada",
"upload_source_file": "(el ficheru qu'escoyisti del to ordenador)",
"listfiles-delete": "desaniciar",
"listfiles-summary": "Esta páxina especial amuesa tolos ficheros xubíos.",
- "listfiles_search_for": "Buscar por nome d'archivu multimedia:",
+ "listfiles_search_for": "Buscar el nome d'un ficheru multimedia:",
"listfiles-userdoesnotexist": "La cuenta d'usuariu «$1» nun ta rexistrada.",
"imgfile": "ficheru",
- "listfiles": "Llista d'imáxenes",
+ "listfiles": "Llista de ficheros",
"listfiles_thumb": "Miniatura",
"listfiles_date": "Data",
"listfiles_name": "Nome",
"file-anchor-link": "Ficheru",
"filehist": "Historial del ficheru",
"filehist-help": "Calca nuna fecha/hora pa ver el ficheru como taba daquella.",
- "filehist-deleteall": "esborrar too",
+ "filehist-deleteall": "desaniciar too",
"filehist-deleteone": "desaniciar",
"filehist-revert": "revertir",
"filehist-current": "actual",
"filehist-comment": "Comentariu",
"imagelinks": "Usu del ficheru",
"linkstoimage": "{{PLURAL:$1|La páxina siguiente enllacia|Les páxines siguientes enllacien}} a esti ficheru:",
- "linkstoimage-more": "Más de $1 {{PLURAL:$1|páxina enllacia|páxines enllacien}} a esti archivu.\nLa llista siguiente amuesa{{PLURAL:$1|'l primer enllaz de páxina| los primeros $1 enllaces de páxina}} a esti archivu namái.\nHai disponible una [[Special:WhatLinksHere/$2|llista completa]].",
+ "linkstoimage-more": "Más de $1 {{PLURAL:$1|páxina enllacia|páxines enllacien}} a esti ficheru.\nLa llista siguiente amuesa{{PLURAL:$1|'l primer enllaz de páxina| los primeros $1 enllaces de páxina}} a esti ficheru namái.\nHai disponible una [[Special:WhatLinksHere/$2|llista completa]].",
"nolinkstoimage": "Nun hai páxines qu'enllacien a esti ficheru.",
- "morelinkstoimage": "Ver [[Special:WhatLinksHere/$1|más enllaces]] a esti archivu.",
+ "morelinkstoimage": "Ver [[Special:WhatLinksHere/$1|más enllaces]] a esti ficheru.",
"linkstoimage-redirect": "$1 (redireición de ficheru) $2",
- "duplicatesoffile": "{{PLURAL:$1|El siguiente archivu ye un duplicáu|Los siguientes $1 archivos son duplicaos}} d'esti archivu ([[Special:FileDuplicateSearch/$2|más detalles]]):",
+ "duplicatesoffile": "{{PLURAL:$1|El siguiente ficheru ye un duplicáu|Los $1 ficheros siguientes son duplicaos}} d'esti ([[Special:FileDuplicateSearch/$2|más detalles]]):",
"sharedupload": "Esti ficheru ye de $1 y puen usalu otros proyeutos.",
"sharedupload-desc-there": "Esti ficheru ye de $1 y puen usalu otros proyeutos.\nLlea la [páxina de descripción del ficheru $2] pa más información.",
"sharedupload-desc-here": "Esti ficheru ye de $1 y puen usalu otros proyeutos.\nLa descripción de la [$2 páxina de descripción del ficheru] s'amuesa darréu.",
"sharedupload-desc-create": "Esti ficheru ye de $1 y puen usalu otros proyeutos.\nSeique quieras camudar la descripción de la so [páxina de descripción de ficheru $2] allí.",
"filepage-nofile": "Nun esiste dengún ficheru con esti nome.",
"filepage-nofile-link": "Nun esiste ficheru dalu con esti nome, pero pues [$1 xubilu].",
- "uploadnewversion-linktext": "Xubir una nueva versión d'esta imaxe",
+ "uploadnewversion-linktext": "Xubir una versión nueva d'esti ficheru",
"shared-repo-from": "de $1",
"shared-repo": "un repositoriu compartíu",
"filepage.css": "/* El CSS allugáu equí s'incluye na páxina de descripción del ficheru, que tamién s'incluye nes wikis clientes foriates */",
"upload-disallowed-here": "Nun pues sobrescribir esti ficheru.",
"filerevert": "Revertir $1",
- "filerevert-legend": "Revertir archivu",
- "filerevert-intro": "Tas revirtiendo '''[[Media:$1|$1]]''' a la [$4 versión del $3 a les $2].",
+ "filerevert-legend": "Revertir ficheru",
+ "filerevert-intro": "Tas a piques de revertir el ficheru <strong>[[Media:$1|$1]]</strong> a la [$4 versión del $2, a les $3].",
"filerevert-comment": "Motivu:",
"filerevert-defaultcomment": "Revertida a la versión del $1 a les $2 ($3)",
"filerevert-submit": "Revertir",
- "filerevert-success": "'''[[Media:$1|$1]]''' foi revertida a la [$4 versión del $3 a les $2].",
- "filerevert-badversion": "Nun hai nenguna versión llocal previa d'esti archivu cola fecha conseñada.",
+ "filerevert-success": "<strong>[[Media:$1|$1]]</strong> revertióse a la [$4 versión del $2, a les $3].",
+ "filerevert-badversion": "Nun hai nenguna versión llocal anterior d'esti ficheru cola marca de tiempu dada.",
"filerevert-identical": "La versión actual del ficheru ye igual que la seleicionada.",
"filedelete": "Desaniciar $1",
- "filedelete-legend": "Esborrar archivu",
- "filedelete-intro": "Tas a piques d'esborrar el ficheru '''[[Media:$1|$1]]''' xunto con tol so historial.",
- "filedelete-intro-old": "Tas esborrando la versión de '''[[Media:$1|$1]]''' del [$4 $3 a les $2].",
+ "filedelete-legend": "Desaniciar ficheru",
+ "filedelete-intro": "Tas a piques de desaniciar el ficheru <strong>[[Media:$1|$1]]</strong> xunto col so historial completu.",
+ "filedelete-intro-old": "Tas desaniciando la versión de <strong>[[Media:$1|$1]]</strong> del [$4 $2, a les $3].",
"filedelete-comment": "Motivu:",
"filedelete-submit": "Desaniciar",
"filedelete-success": "'''$1''' se desanició.",
- "filedelete-success-old": "Eliminóse la versión de '''[[Media:$1|$1]]''' del $2 a les $3.",
- "filedelete-nofile": "'''$1''' nun esiste.",
- "filedelete-nofile-old": "Nun hai nenguna versión archivada de '''$1''' colos atributos especificaos.",
+ "filedelete-success-old": "Desanicióse la versión de <strong>[[Media:$1|$1]]</strong> del $2, a les $3.",
+ "filedelete-nofile": "<strong>$1</strong> nun esiste.",
+ "filedelete-nofile-old": "Nun hai nenguna versión archivada de <strong>$1</strong> colos atributos especificaos.",
"filedelete-otherreason": "Motivu distintu/adicional:",
"filedelete-reason-otherlist": "Otru motivu",
- "filedelete-reason-dropdown": "*Motivos comunes d'esborráu\n** Violación de Copyright\n** Archivu duplicáu",
- "filedelete-edit-reasonlist": "Editar los motivos d'esborráu",
+ "filedelete-reason-dropdown": "*Motivos habituales pal desaniciu\n** Frayamientu de Copyright\n** Ficheru duplicáu",
+ "filedelete-edit-reasonlist": "Editar los motivos del desaniciu",
"filedelete-maintenance": "El desaniciu y restauración de ficheros ta desactivao temporalmente mientres ta en mantenimientu.",
"filedelete-maintenance-title": "Nun se pue desaniciar el ficheru",
"mimesearch": "Busca MIME",
"listduplicatedfiles-summary": "Esta ye una llista de ficheros onde la versión más nueva del ficheru ye un duplicáu de la versión más nueva d'algún otru ficheru. Considérense sólo los ficheros llocales.",
"listduplicatedfiles-entry": "[[:File:$1|$1]] tien [[$3|{{PLURAL:$2|un duplicáu|$2 duplicaos}}]].",
"unusedtemplates": "Plantíes ensin usu",
- "unusedtemplatestext": "Esta páxina llista toles páxines del espaciu de nomes {{ns:template}} que nun tán inxeríes n'otres páxines.\nAlcuérdate de comprobar otros enllaces a les plantíes enantes d'esborrales.",
+ "unusedtemplatestext": "Esta páxina recueye toles páxines del espaciu de nomes {{ns:template}} que nun tán inxeríes n'otres páxines.\nAlcuérdate de comprobar otros enllaces a les plantíes enantes de desaniciales.",
"unusedtemplateswlh": "otros enllaces",
"randompage": "Páxina al debalu",
"randompage-nopages": "Nun hai páxines {{PLURAL:$2|nel espaciu|nos espacios}} de nomes darréu: \"$1\".",
"statistics": "Estadístiques",
"statistics-header-pages": "Estadístiques de páxines",
"statistics-header-edits": "Estadístiques d'ediciones",
- "statistics-header-users": "Estadístiques d'usuariu",
+ "statistics-header-users": "Estadístiques d'usuarios",
"statistics-header-hooks": "Otres estadístiques",
"statistics-articles": "Páxines de conteníu",
"statistics-pages": "Páxines",
"statistics-pages-desc": "Toles páxines de la wiki, incluyendo páxines d'alderique, redireiciones, etc.",
- "statistics-files": "Archivos xubíos",
- "statistics-edits": "Ediciones de páxines dende qu'entamó {{SITENAME}}",
+ "statistics-files": "Ficheros xubíos",
+ "statistics-edits": "Ediciones de páxines dende'l principiu de {{SITENAME}}",
"statistics-edits-average": "Media d'ediciones por páxina",
"statistics-users": "[[Special:ListUsers|Usuarios]] rexistraos",
"statistics-users-active": "Usuarios activos",
- "statistics-users-active-desc": "Usuarios que realizaron una aición {{PLURAL:$1|nel caberu día|nos caberos $1 díes}}",
+ "statistics-users-active-desc": "Usuarios que ficieron dalguna aición {{PLURAL:$1|nel caberu día|nos caberos $1 díes}}",
"pageswithprop": "Páxines con una propiedá de páxina",
"pageswithprop-legend": "Páxines con una propiedá de páxina",
"pageswithprop-text": "Esta páxina llista les páxines qu'usen una propiedá de páxina determinada.",
"double-redirect-fixed-move": "[[$1]] treslladóse.\nAnovóse automáticamente y agora redirixe haza [[$2]].",
"double-redirect-fixed-maintenance": "Iguando automáticamente la doble redireición de [[$1]] a [[$2]] nuna xera de mantenimientu.",
"double-redirect-fixer": "Iguador de redireiciones",
- "brokenredirects": "Redireiciones rotes",
- "brokenredirectstext": "Les siguientes redireiciones enllacien a páxines non esistentes:",
+ "brokenredirects": "Redireiciones frañaes",
+ "brokenredirectstext": "Les redireiciones siguientes enllacien a páxines que nun esisten:",
"brokenredirects-edit": "editar",
"brokenredirects-delete": "desaniciar",
- "withoutinterwiki": "Páxines ensin interwikis",
+ "withoutinterwiki": "Páxines ensin enllaces a otres llingües",
"withoutinterwiki-summary": "Les páxines siguientes nun enllacien a versiones n'otres llingües:",
"withoutinterwiki-legend": "Prefixu",
"withoutinterwiki-submit": "Amosar",
- "fewestrevisions": "Páxines col menor númberu d'ediciones",
+ "fewestrevisions": "Páxines con menor númberu de revisiones",
"nbytes": "$1 {{PLURAL:$1|byte|bytes}}",
"ncategories": "$1 {{PLURAL:$1|categoría|categoríes}}",
"ninterwikis": "$1 {{PLURAL:$1|interwiki|interwikis}}",
"nrevisions": "$1 {{PLURAL:$1|revisión|revisiones}}",
"nimagelinks": "Usao en $1 {{PLURAL:$1|páxina|páxines}}",
"ntransclusions": "usao en $1 {{PLURAL:$1|páxina|páxines}}",
- "specialpage-empty": "Nun hai resultaos nestos momentos.",
+ "specialpage-empty": "Nun hai resultaos pa esti informe.",
"lonelypages": "Páxines güérfanes",
"lonelypagestext": "Les páxines siguientes nun tán enllaciaes nin trescluyíes dende otres páxines de {{SITENAME}}.",
- "uncategorizedpages": "Páxines non categorizaes",
- "uncategorizedcategories": "Categoríes non categorizaes",
- "uncategorizedimages": "Archivos non categorizaos",
- "uncategorizedtemplates": "Plantíes non categorizaes",
+ "uncategorizedpages": "Páxines ensin categoríes",
+ "uncategorizedcategories": "Categoríes ensin categoríes",
+ "uncategorizedimages": "Ficheros ensin categoríes",
+ "uncategorizedtemplates": "Plantíes ensin categoríes",
"uncategorized-categories-exceptionlist": "# Contien una llista de categoríes que nun tendríen d'apaecer en Special:UncategorizedCategories. Una categoría per llinia, empezando por «*». Nun se tienen en cuenta les llinies qu'empiecen con otru caráuter (espacios en blancu incluyíos). Usa «#» p'añadir comentarios.",
- "unusedcategories": "Categoríes non usaes",
- "unusedimages": "Imáxenes non usaes",
+ "unusedcategories": "Categoríes ensin usu",
+ "unusedimages": "Imáxenes ensin usu",
"wantedcategories": "Categoríes buscaes",
"wantedpages": "Páxines buscaes",
"wantedpages-summary": "Llista de páxines inesistentes con más enllaces a elles, sacante les páxines que sólo tienen redireiciones qu'enllacen con elles. Pa ver la llista de páxines inesistentes que tienen redireiciones qu'enllacen con elles, ver [[{{#special:BrokenRedirects}}|la llista de redireiciones frañaes]].",
"wantedpages-badtitle": "Títulu inválidu nel conxuntu de resultaos: $1",
- "wantedfiles": "Archivos buscaos",
+ "wantedfiles": "Ficheros buscaos",
"wantedfiletext-cat": "Los ficheros siguientes tan usándose, pero nun esisten. Ye posible qu'apaezan ficheros de repositorios esternos ensin qu'esistan. Cualesquier falsu positivu tará <del>tacháu</del>. Amás, les páxines qu'inxerten ficheros que nun esisten apaecen na llista de [[:$1]].",
"wantedfiletext-cat-noforeign": "Los ficheros siguientes tán usándose, pero nun existen. Amás, hai una llista de páxines qu'incluyen ficheros que non existen en [[:$1]].",
"wantedfiletext-nocat": "Los ficheros siguientes tan usándose, pero nun esisten. Ye posible qu'apaezan ficheros de repositorios esternos ensin qu'esistan. Cualesquier falsu positivu tará <del>tacháu</del>.",
"wantedfiletext-nocat-noforeign": "Los ficheros siguientes tán usándose, pero nun existen.",
- "wantedtemplates": "Plantíes más buscaes",
+ "wantedtemplates": "Plantíes buscaes",
"mostlinked": "Páxines más enllaciaes",
"mostlinkedcategories": "Categoríes más enllaciaes",
"mostlinkedtemplates": "Páxines más trescluíes",
"mostcategories": "Páxines con más categoríes",
- "mostimages": "Archivos más enllaciaos",
+ "mostimages": "Ficheros más enllaciaos",
"mostinterwikis": "Páxines con más interwikis",
"mostrevisions": "Páxines con más revisiones",
"prefixindex": "Toles páxines col prefixu",
"shortpages": "Páxines curties",
"longpages": "Páxines llargues",
"deadendpages": "Páxines ensin salida",
- "deadendpagestext": "Les páxines siguientes nun enllacien a páxina dala de {{SITENAME}}.",
+ "deadendpagestext": "Les páxines siguientes nun enllacien a otres páxines de {{SITENAME}}.",
"protectedpages": "Páxines protexíes",
- "protectedpages-indef": "Namái les proteiciones permanentes",
+ "protectedpages-indef": "Namái les proteiciones indefiníes",
"protectedpages-summary": "Esta páxina amuesa la llista de páxines esistentes que tan protexíes actualmente. Pa la llista de títulos que tienen torgada la creación, ver [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].",
"protectedpages-cascade": "Namái proteiciones en cascada",
"protectedpages-noredirect": "Anubrir redireiciones",
"move": "Treslladar",
"movethispage": "Treslladar esta páxina",
"unusedimagestext": "Los ficheros darréu esisten pero nun tan inxertaos en páxina dala.\nDate cuenta de qu'otros sitios web puen enllazar a un ficheru con una URL direuta, polo que seique tean tovía llistaos equí, magar que tean n'usu activu.",
- "unusedcategoriestext": "Les siguientes categoríes esisten magar que nengún artículu o categoría faiga usu d'elles.",
- "notargettitle": "Nun hai oxetivu",
- "notargettext": "Nun especificasti una páxina oxetivu o un usuariu sobre los que realizar esta función.",
- "nopagetitle": "Nun esiste la páxina oxetivu",
- "nopagetext": "La páxina oxetivu qu'especificasti nun esiste.",
+ "unusedcategoriestext": "Les siguientes páxines de categoría esisten, anque nengún artículu o categoría fai usu d'elles.",
+ "notargettitle": "Nun hai destín",
+ "notargettext": "Nun especificasti qué páxina o usuariu ye'l destín pa executar esta aición.",
+ "nopagetitle": "Nun esiste la páxina de destín",
+ "nopagetext": "La páxina de destín qu'especificasti nun esiste.",
"pager-newer-n": "{{PLURAL:$1|1 siguiente|$1 siguientes}}",
"pager-older-n": "{{PLURAL:$1|1 anterior|$1 anteriores}}",
"suppress": "Supresor",
"booksources-search-legend": "Busca de fontes de llibros",
"booksources-search": "Buscar",
"booksources-text": "Esta ye una llista d'enllaces a otros sitios que vienden llibros nuevos y usaos, y que puen tener más información sobre los llibros que ta buscando:",
- "booksources-invalid-isbn": "El códigu ISBN que puxisti nun paez que valga; mira que te vien copiáu de la fonte orixinal.",
+ "booksources-invalid-isbn": "El códigu ISBN dau nun paez válidu; comprueba si hai errores al copiar de la fonte orixinal.",
"magiclink-tracking-rfc": "Páxines que usen enllaces máxicos RFC",
"magiclink-tracking-rfc-desc": "Esta páxina utiliza enllaces máxicos RFC. Consulta [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org] pa saber como facer la migración.",
"magiclink-tracking-pmid": "Páxines qu'usen enllaces máxicos PMID",
"log": "Rexistros",
"logeventslist-submit": "Amosar",
"all-logs-page": "Tolos rexistros públicos",
- "alllogstext": "Visualización combinada de tolos rexistros disponibles de {{SITENAME}}.\nPues filtrar la visualización seleicionando una mena de rexistru, el nome d'usuariu (teniendo en cuenta les mayúscules y minúscules) o la páxina afectada (teniendo en cuenta tamién les mayúscules y minúscules).",
+ "alllogstext": "Vista combinada de tolos rexistros disponibles de {{SITENAME}}.\nPues filtrar la vista seleicionando una triba de rexistru, el nome d'usuariu (sensible a mayúscules y minúscules), o la páxina afeutada (tamién sensible a mayúscules y minúscules).",
"logempty": "Nun hai coincidencies nel rexistru.",
- "log-title-wildcard": "Buscar títulos qu'emprimen con esti testu",
+ "log-title-wildcard": "Buscar títulos que principien por esti testu",
"showhideselectedlogentries": "Amosar/anubrir les entraes del rexistru seleicionaes",
"log-edit-tags": "Editar les etiquetes de les entraes del rexistru seleicionaes",
"checkbox-select": "Seleicionar: $1",
"allpages": "Toles páxines",
"nextpage": "Páxina siguiente ($1)",
"prevpage": "Páxina anterior ($1)",
- "allpagesfrom": "Amosar páxines qu'entamen por:",
- "allpagesto": "Amosar páxines que finen por:",
+ "allpagesfrom": "Amosar páxines qu'empiecen por:",
+ "allpagesto": "Amosar páxines terminaes con:",
"allarticles": "Toles páxines",
"allinnamespace": "Toles páxines (espaciu de nomes $1)",
"allpagessubmit": "Dir",
"allpagesprefix": "Amosar páxines col prefixu:",
- "allpagesbadtitle": "El títulu dau a esta páxina nun yera válidu o tenía un prefixu d'enllaz interllingua o interwiki. Pue contener ún o más carauteres que nun se puen usar nos títulos.",
+ "allpagesbadtitle": "El títulu dau a esta páxina nun ye válidu o tenía un prefixu d'enllaz interllingua o interwiki.\nPuede contener ún caráuter o más que nun puede usase nos títulos.",
"allpages-bad-ns": "{{SITENAME}} nun tien l'espaciu de nomes \"$1\".",
"allpages-hide-redirects": "Anubrir redireiciones",
"cachedspecial-viewing-cached-ttl": "Tas viendo una versión en caché d'esta páxina, que pue llegar a tener $1 d'antigüedá.",
"categories": "Categoríes",
"categories-submit": "Amosar",
"categoriespagetext": "{{PLURAL:$1|La siguiente categoría contién|Les siguientes categoríes contienen}} páxines o ficheros multimedia.\nLes [[Special:UnusedCategories|categoríes nun usaes]] nun s'amuesen equí.\nVer tamién les [[Special:WantedCategories|categoríes más buscaes]].",
- "categoriesfrom": "Amosar categoríes qu'emprimen por:",
- "deletedcontributions": "Contribuciones d'usuariu esborraes",
+ "categoriesfrom": "Amosar les categoríes qu'empiecen por:",
+ "deletedcontributions": "Contribuciones d'usuariu desaniciaes",
"deletedcontributions-title": "Contribuciones d'usuariu desaniciaes",
"sp-deletedcontributions-contribs": "collaboraciones",
"linksearch": "Busca d'enllaces esternos",
"linksearch-pat": "Patrón de busca:",
"linksearch-ns": "Espaciu de nomes:",
"linksearch-ok": "Buscar",
- "linksearch-text": "Se puen usar comodinos como \"*.wikipedia.org\".\nNecesita polo menos un dominiu de primer nivel, como \"*.org\".<br />\n{{PLURAL:$2|Protocolu almitíu|Protocolos almitíos}}: $1 (el predetermináu ye http:// si nun se conseña dengún protocolu).",
+ "linksearch-text": "Pueden usase comodinos como «*.wikipedia.org».\nPrecisa polo menos un dominiu de primer nivel, como «*.org».<br />\n{{PLURAL:$2|Protocolu almitíu|Protocolos almitíos}}: $1 (el predetermináu ye http:// si nun se conseña nengún protocolu).",
"linksearch-line": "$1 enllaciáu dende $2",
- "linksearch-error": "Los comodinos namái puen apaecer al entamu del nome del güéspede.",
- "listusersfrom": "Amosar usuarios emprimando dende:",
+ "linksearch-error": "Los comodinos namái pueden apaecer al principiu del nome de sirvidor.",
+ "listusersfrom": "Amosar usuarios qu'empiecen por:",
"listusers-submit": "Amosar",
- "listusers-noresult": "Nun s'atoparon usuarios.",
+ "listusers-noresult": "Nun s'alcontraron usuarios.",
"listusers-blocked": "(bloquiau)",
"activeusers": "Llista d'usuarios activos",
"activeusers-intro": "Esta ye una llista d'usuarios que tuvieron alguna mena d'actividá hai menos de $1 {{PLURAL:$1|día|díes}}.",
"activeusers-excludegroups": "Excluir a los usuarios que pertenezan a los grupos:",
"activeusers-noresult": "Nun s'alcontraron usuarios.",
"activeusers-submit": "Amosar los usuarios activos",
- "listgrouprights": "Drechos de los grupos d'usuariu",
- "listgrouprights-summary": "La siguiente ye una llista de grupos d'usuariu definíos nesta wiki, colos sos drechos d'accesu asociaos.\nPue haber [[{{MediaWiki:Listgrouprights-helppage}}|información adicional]] tocante a drechos individuales.",
+ "listgrouprights": "Permisos del grupu d'usuarios",
+ "listgrouprights-summary": "La siguiente ye una llista de grupos d'usuarios definíos nesta wiki, colos permisos d'accesu asociaos.\nPuede haber [[{{MediaWiki:Listgrouprights-helppage}}|más información]] tocante a permisos individuales.",
"listgrouprights-key": "Lleenda:\n* <span class=\"listgrouprights-granted\">Permisu concedíu</span>\n* <span class=\"listgrouprights-revoked\">Permisu retiráu</span>",
"listgrouprights-group": "Grupu",
- "listgrouprights-rights": "Drechos",
- "listgrouprights-helppage": "Help:Drechos de grupu",
+ "listgrouprights-rights": "Permisos",
+ "listgrouprights-helppage": "Help:Permisos de grupu",
"listgrouprights-members": "(llista de miembros)",
- "listgrouprights-addgroup": "Pue añader {{PLURAL:$2|grupu|grupos}}: $1",
- "listgrouprights-removegroup": "Pue quitar {{PLURAL:$2|grupu|grupos}}: $1",
- "listgrouprights-addgroup-all": "Pue añader tolos grupos",
- "listgrouprights-removegroup-all": "Pue quitar tolos grupos",
+ "listgrouprights-addgroup": "Añadir {{PLURAL:$2|grupu|grupos}}: $1",
+ "listgrouprights-removegroup": "Desaniciar {{PLURAL:$2|grupu|grupos}}: $1",
+ "listgrouprights-addgroup-all": "Añadir tolos grupos",
+ "listgrouprights-removegroup-all": "Desaniciar tolos grupos",
"listgrouprights-addgroup-self": "Aamestar {{PLURAL:$2|grupu|grupos}} a la cuenta propia: $1",
"listgrouprights-removegroup-self": "Desaniciar {{PLURAL:$2|grupu|grupos}} de la cuenta propia: $1",
"listgrouprights-addgroup-self-all": "Amestar tolos grupos a la cuenta propia",
"emailmessage": "Mensaxe:",
"emailsend": "Unviar",
"emailccme": "Unviame per corréu una copia del mio mensaxe.",
- "emailccsubject": "Copia del to mensaxe a $1: $2",
+ "emailccsubject": "Copia del mensaxe a $1: $2",
"emailsent": "Corréu unviáu",
"emailsenttext": "Unviose'l to mensaxe de corréu.",
"emailuserfooter": "Esti corréu electrónicu {{GENDER:$1|unviólu}} $1 a {{GENDER:$2|$2}} per aciu de la función «{{int:emailuser}}» de {{SITENAME}}. Si {{GENDER:$2|contestes}} a esti corréu, el {{GENDER:$2|to}} corréu unviaráse direutamente {{GENDER:$1|al remitente|a la remitente}} orixinal, {{GENDER:$1|revelando-y}} la {{GENDER:$2|to}} direición de corréu.",
"watchlistfor2": "Pa $1 $2",
"nowatchlist": "La to llista de siguimientu ta vacia.",
"watchlistanontext": "Por favor, anicia sesión pa ver o editar entraes de la to llista de siguimientu.",
- "watchnologin": "Non identificáu",
+ "watchnologin": "Nun aniciasti sesión",
"addwatch": "Amestar a la llista de siguimientu",
"addedwatchtext": "«[[:$1]]» y la so páxina d'alderique amestáronse a la to [[Special:Watchlist|llista de siguimientu]].",
"addedwatchtext-talk": "«[[:$1]]» y la so páxina asociada amestáronse a la to [[Special:Watchlist|llista de siguimientu]].",
"watchthispage": "Vixilar esta páxina",
"unwatch": "Dexar de vixilar",
"unwatchthispage": "Dexar de vixilar",
- "notanarticle": "Nun ye un artículu",
- "notvisiblerev": "Esborróse la revisión",
+ "notanarticle": "Nun ye una páxina de conteníu",
+ "notvisiblerev": "Desanicióse la última revisión d'un usuariu distintu",
"watchlist-details": "{{PLURAL:$1|$1 páxina ta|$1 páxines tán}} na to llista de siguimientu (más les páxines d'alderique).",
"wlheader-enotif": "La notificación per corréu electrónicu ta activada.",
"wlheader-showupdated": "Les páxines que camudaron dende que les visitasti anteriormente amuesense en '''negrina'''",
"enotif_minoredit": "Esta ye una edición menor",
"created": "creada",
"changed": "camudada",
- "deletepage": "Esborrar páxina",
+ "deletepage": "Desaniciar páxina",
"confirm": "Confirmar",
- "excontent": "el conteníu yera: '$1'",
+ "excontent": "el conteníu yera: «$1»",
"excontentauthor": "el conteníu yera: «$1», y l'únicu autor yera «[[Special:Contributions/$2|$2]]» ([[User talk:$2|alderique]])",
- "exbeforeblank": "el conteníu enantes de dexar en blanco yera: '$1'",
+ "exbeforeblank": "el conteníu enantes de dexar en blancu yera: «$1»",
"delete-confirm": "Desaniciar «$1»",
"delete-legend": "Desaniciar",
"historywarning": "<strong>Avisu:</strong> La páxina que vas desaniciar tien un historial con $1 {{PLURAL:$1|revisión|revisiones}}:",
"confirmdeletetext": "Tas a piques d'esborrar una páxina xunto con tol so historial.\nPor favor confirma que ye lo que quies facer, qu'entiendes les consecuencies, y que lo tas faciendo acordies coles [[{{MediaWiki:Policy-url}}|polítiques]].",
"actioncomplete": "Aición completada",
"actionfailed": "Falló l'aición",
- "deletedtext": "Esborróse \"$1\".\nMira en $2 la llista de les últimes páxines esborraes.",
+ "deletedtext": "Desanicióse «$1».\nVer en $2 el rexistru de desanicios recién.",
"dellogpage": "Rexistru de desanicios",
- "dellogpagetext": "Abaxo amuésase una llista de los artículos esborraos más recién.",
+ "dellogpagetext": "Más abaxo ta la llista de los desanicios más recién.",
"deletionlog": "rexistru de desanicios",
"reverted": "Revertida a una revisión anterior",
"deletecomment": "Motivu:",
"deleteotherreason": "Motivu distintu/adicional:",
"deletereasonotherlist": "Otru motivu",
"deletereason-dropdown": "*Motivos comunes d'esborráu\n** Puxarra\n** Vandalismu\n** Violación de drechos d'autor\n** A pidimientu del autor\n** Redireición frañada",
- "delete-edit-reasonlist": "Editar los motivos d'esborráu",
- "delete-toobig": "Esta páxina tien un historial d'ediciones grande, más de $1 {{PLURAL:$1|revisión|revisiones}}.\nRestrinxóse l'esborráu d'estes páxines pa evitar perturbaciones accidentales de {{SITENAME}}.",
- "delete-warning-toobig": "Esta páxina tien un historial d'ediciones grande, más de $1 {{PLURAL:$1|revisión|revisiones}}.\nEsborralu pue perturbar les operaciones de la base de datos de {{SITENAME}};\nobra con precaución.",
+ "delete-edit-reasonlist": "Editar los motivos de desaniciu",
+ "delete-toobig": "Esta páxina tien un historial d'ediciones grande, más de $1 {{PLURAL:$1|revisión|revisiones}}.\nTorgóse'l desaniciu d'estes páxines pa prevenir problemes accidentales en {{SITENAME}}.",
+ "delete-warning-toobig": "Esta páxina tien un historial d'ediciones grande, más de $1 {{PLURAL:$1|revisión|revisiones}}.\nDesanicialu puede afeutar a les operaciones de la base de datos de {{SITENAME}}.\nActúa con procuru.",
"deleteprotected": "Nun pues desaniciar esta páxina porque ta protexida.",
"deleting-backlinks-warning": "<strong>Avisu:</strong> [[Special:WhatLinksHere/{{FULLPAGENAME}}|Otres páxines]] enllacen a, o trescluyen de, la páxina que tas a piques de desaniciar.",
"deleting-subpages-warning": "<strong>Avisu:</strong> La páxina que vas desaniciar tien [[Special:PrefixIndex/{{FULLPAGENAME}}/|{{PLURAL:$1|una subpáxina|$1 subpáxines|51=más de 50 subpáxines}}]].",
"rollbackfailed": "Falló la reversión",
"rollback-missingparam": "Faltan parámetros riquíos na solicitú.",
"rollback-missingrevision": "Nun pueden cargase los datos de la revisión.",
- "cantrollback": "Nun se pue revertir la edición; el postrer collaborador ye l'únicu autor d'esta páxina.",
- "alreadyrolled": "Nun se pue revertir la postrer edición de [[:$1]] fecha por [[User:$2|$2]] ([[User talk:$2|alderique]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);\ndaquién más yá editó o revirtió la páxina.\n\nLa postrer edición foi fecha por [[User:$3|$3]] ([[User talk:$3|alderique]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
+ "cantrollback": "Nun puede revertise la edición;\nl'últimu collaborador ye l'únicu autor d'esta páxina.",
+ "alreadyrolled": "Nun puede revertise la última edición de [[:$1]] fecha por [[User:$2|$2]] ([[User talk:$2|alderique]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);\ndalguién más yá editó o revertió la páxina.\n\nLa última edición foi de [[User:$3|$3]] ([[User talk:$3|alderique]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
"editcomment": "El resume de la edición yera: <em>$1</em>.",
"revertpage": "Revertíes les ediciones de [[Special:Contributions/$2|$2]] ([[User talk:$2|alderique]]) hasta la cabera versión de [[User:$1|$1]]",
"revertpage-nouser": "Revertíes les ediciones de (usuariu desaniciáu) a la cabera revisión de {{GENDER:$1|[[User:$1|$1]]}}",
"rollback-success": "Revertíes les ediciones de {{GENDER:$3|$1}}; devueltu a la última revisión de {{GENDER:$4|$2}}.",
"rollback-success-notify": "Revertíes les ediciones de $1 a la última revisión de $2. [$3 Ver cambeos]",
"sessionfailure-title": "Fallu de sesión",
- "sessionfailure": "Paez qu'hai un problema cola to sesión; por precaución\ncancelóse l'aición que pidisti. Da-y al botón \"Atrás\" del\nnavegador pa cargar otra vuelta la páxina y vuelve a intentalo.",
+ "sessionfailure": "Paez qu'hai un problema col aniciu de sesión;\natayóse esta aición por precaución escontra secuestru de sesiones.\nTorna a la páxina anterior, recarga esa páxina y vuelve a tentalo.",
"changecontentmodel": "Cambiar el modelu de conteníu d'una páxina",
"changecontentmodel-legend": "Cambiar el modelu de conteníu",
"changecontentmodel-title-label": "Títulu de la páxina",
"protectedarticle-comment": "{{GENDER:$2|Protexó}} «[[$1]]»",
"modifiedarticleprotection-comment": "{{GENDER:$2|Cambió'l nivel de protección}} pa «[[$1]]»",
"unprotectedarticle-comment": "{{GENDER:$2|Quitó la protección}} de «[[$1]]»",
- "protect-title": "Protexendo \"$1\"",
+ "protect-title": "Cambiar el nivel de proteición de «$1»",
"protect-title-notallowed": "Ver el nivel de proteición de «$1»",
"prot_1movedto2": "[[$1]] treslladáu a [[$2]]",
"protect-badnamespace-title": "Espaciu de nomes non protexible",
"protect-legend": "Confirmar proteición",
"protectcomment": "Motivu:",
"protectexpiry": "Caduca:",
- "protect_expiry_invalid": "Caducidá non válida.",
- "protect_expiry_old": "La fecha de caducidá ta pasada.",
+ "protect_expiry_invalid": "La hora de caducidá nun ye válida.",
+ "protect_expiry_old": "La hora de caducidá ta nel pasáu.",
"protect-unchain-permissions": "Desbloquiar les demás opciones de protección",
- "protect-text": "Equí pues ver y camudar el nivel de proteición de la páxina '''$1'''.",
- "protect-locked-blocked": "Nun pues camudar los niveles de proteición mentes teas bloquiáu. Esta\nye la configuración actual de la páxina '''$1''':",
- "protect-locked-dblock": "Los niveles de proteición nun puen ser camudaos pol mor d'un candáu activu de\nla base de datos. Esta ye la configuración actual de la páxina '''$1''':",
- "protect-locked-access": "La to cuenta nun tien permisu pa camudar los niveles de proteición de páxina.\nEsta ye la configuración actual pa la páxina '''$1''':",
+ "protect-text": "Equí puedes ver y camudar el nivel de proteición de la páxina <strong>$1</strong>.",
+ "protect-locked-blocked": "Nun puedes camudar los niveles de proteición mentanto tea bloquiada.\nEsta ye la configuración actual de la páxina <strong>$1</strong>:",
+ "protect-locked-dblock": "Los niveles de proteición nun pueden camudase por causa d'un bloquéu activu de la base de datos.\nEsta ye la configuración actual de la páxina <strong>$1</strong>:",
+ "protect-locked-access": "La to cuenta nun tien permisu pa camudar los niveles de proteición de páxina.\nEsta ye la configuración actual de la páxina <strong>$1</strong>:",
"protect-cascadeon": "Esta páxina ta protexida nestos momentos porque ta trescluída {{PLURAL:$1|na siguiente páxina, que tien|nes siguientes páxines, que tienen}} activada la proteición en cascada.\nLos cambios nel nivel de proteición d'esta páxina nun afeutarán a la proteición en cascada.",
"protect-default": "Permitir tolos usuarios",
"protect-fallback": "Permitir namái usuarios con permisu \"$1\"",
"protect-existing-expiry-infinity": "Tiempu de caducidá esistente: infinitu",
"protect-otherreason": "Motivu distintu/adicional:",
"protect-otherreason-op": "Otru motivu",
- "protect-dropdown": "*Motivos comunes de proteición\n** Vandalismu escomanáu\n** Spamming escesivu\n** Guerra d'ediciones contraproducente\n** Páxina de tráficu altu",
+ "protect-dropdown": "*Motivos habituales de proteición\n** Vandalismu descomanáu\n** Spamming escesivu\n** Guerra d'ediciones contraproducente\n** Páxina de tráficu altu",
"protect-edit-reasonlist": "Editar los motivos de proteición",
"protect-expiry-options": "1 hora:1 hour,1 día:1 day,1 selmana:1 week,2 selmanes:2 weeks,1 mes:1 month,3 meses:3 months,6 meses:6 months,1 añu:1 year,pa siempre:infinite",
"restriction-type": "Permisu:",
"restriction-level-sysop": "totalmente protexida",
"restriction-level-autoconfirmed": "semiprotexida",
"restriction-level-all": "cualesquier nivel",
- "undelete": "Ver páxines esborraes",
- "undeletepage": "Ver y restaurar páxines esborraes",
- "undeletepagetitle": "'''Les siguientes son les revisiones esborraes de [[:$1]]'''.",
- "viewdeletedpage": "Ver páxines esborraes",
- "undeletepagetext": "{{PLURAL:$1|La siguiente páxina foi esborrada pero tovía ta nel archivu y pue ser restauráu|Les $1 páxines siguientes foron esborraes pero tovía tán nel archivu y puen ser restauraes}}. L'archivu pue ser purgáu periódicamente.",
+ "undelete": "Ver páxines desaniciaes",
+ "undeletepage": "Ver y restaurar páxines desaniciaes",
+ "undeletepagetitle": "<strong>Les siguientes son les revisiones desaniciaes de [[:$1]]</strong>.",
+ "viewdeletedpage": "Ver páxines desaniciaes",
+ "undeletepagetext": "{{PLURAL:$1|La siguiente páxina desanicióse, pero tovía ta nel archivu y puede|Les $1 páxines siguientes \ndesaniciáronse, pero tovía tán nel archivu y pueden}} restaurase. L'archivu puede llimpiase periódicamente.",
"undelete-fieldset-title": "Restaurar revisiones",
"undeleteextrahelp": "Pa restaurar l'historial ensembre de la páxina, desmarca toles caxelles y calca en '''''{{int:undeletebtn}}'''''.\nPa realizar una restauración selectiva, seleiciona les caxelles de la revisión que quies restaurar y calca en '''''{{int:undeletebtn}}'''''.",
"undeleterevisions": "$1 {{PLURAL:$1|revisión desaniciada|revisiones desaniciaes}}",
- "undeletehistory": "Si restaures la páxina, restauraránse toles revisiones al historial.\nSi se creó una páxina col mesmu nome dende que fuera esborrada, les revisiones restauraes van apaecer nel historial anterior.",
- "undeleterevdel": "Nun se fadrá la restauración si ésta provoca un esborráu parcial de la páxina cimera o de la revisión\ndel archivu. Nestos casos, tienes que desmarcar o amosar les revisiones esborraes más recién.",
- "undeletehistorynoadmin": "Esta páxina foi esborrada. El motivu del esborráu amuésase\nnel resume d'embaxo, amás de detalles de los usuarios qu'editaron esta páxina enantes\nde ser esborrada. El testu actual d'estes revisiones esborraes ta disponible namái pa los alministradores.",
- "undelete-revision": "Revisión esborrada de $1 ($4, a les $5) fecha por $3:",
- "undeleterevision-missing": "Falta la revisión o nun ye válida. Sieque l'enllaz nun seya correutu, o que la\nrevisión fuera restaurada o eliminada del archivu.",
+ "undeletehistory": "Si restaures la páxina, restauraránse toles revisiones al historial.\nSi se creó una páxina nueva col mesmu nome desque se desanició, les revisiones restauraes apaecerán nel historial anterior.",
+ "undeleterevdel": "La restauración nun va facese si ésta provoca un desaniciu parcial de la última revisión de la páxina o\ndel ficheru.\nNestos casos, tienes de desmarcar o amosar la revisión desaniciada más recién.",
+ "undeletehistorynoadmin": "Esta páxina desanicióse.\nEl motivu del desaniciu amuésase\nnel resume de más abaxo, xunto colos detalles de los usuarios qu'editaron esta páxina enantes de desaniciase.\nEl testu real d'estes revisiones desaniciaes ta disponible namái pa los alministradores.",
+ "undelete-revision": "Revisión desaniciada de $1 (del $4, a les $5) fecha por $3:",
+ "undeleterevision-missing": "Falta la revisión o nun ye válida. Seique l'enllaz nun seya correutu, o que la revisión restauróse o desanicióse del archivu.",
"undeleterevision-duplicate-revid": "{{PLURAL:$1|Una revisión nun pudo|$1 revisiones nun pudieron}} restaurase porque {{PLURAL:$1|taba usándose la so|taben usándose les sos}} <code>rev_id</code>.",
- "undelete-nodiff": "Nun s'atopó revisión previa.",
+ "undelete-nodiff": "Nun s'alcontró nenguna revisión anterior.",
"undeletebtn": "Restaurar",
"undeletelink": "ver/restaurar",
"undeleteviewlink": "ver",
"undeleteinvert": "Invertir seleición",
"undeletecomment": "Motivu:",
"cannotundelete": "Falló total o parcialmente la restauración:\n$1",
- "undeletedpage": "'''Restauróse $1'''\n\nConsulta'l [[Special:Log/delete|rexistru d'esborraos]] pa ver los esborraos y restauraciones de recién.",
- "undelete-header": "Mira nel [[Special:Log/delete|rexistru d'esborraos]] les páxines esborraes recién.",
+ "undeletedpage": "<strong>Restauróse $1</strong>\n\nConsulta'l [[Special:Log/delete|rexistru de desanicios]] pa ver los desanicios y restauraciones recién.",
+ "undelete-header": "Mira nel [[Special:Log/delete|rexistru de desanicios]] les páxines desaniciaes recién.",
"undelete-search-title": "Buscar páxines desaniciaes",
"undelete-search-box": "Buscar páxines desaniciaes",
- "undelete-search-prefix": "Amosar páxines qu'empecipien por:",
+ "undelete-search-prefix": "Amosar les páxines qu'empecipien por:",
"undelete-search-full": "Amosar títulos de páxina que contengan:",
"undelete-search-submit": "Guetar",
- "undelete-no-results": "Nun s'atoparon páxines afechisques a la busca nel archivu d'esborraos.",
- "undelete-filename-mismatch": "Nun se pue restaurar la revisión del archivu con fecha $1: el nome d'archivu nun concuaya",
- "undelete-bad-store-key": "Nun se pue restaurar la revisión del archivu con fecha $1: yá nun esistía l'archivu nel momentu d'esborralu.",
- "undelete-cleanup-error": "Error al esborrar l'archivu non usáu \"$1\".",
+ "undelete-no-results": "Nun s'atoparon páxines afechisques nel archivu de desaniciaos.",
+ "undelete-filename-mismatch": "Nun puede restaurase la revisión del ficheru de fecha $1: El nome de ficheru nun concuaya.",
+ "undelete-bad-store-key": "Nun puede restaurase la revisión del ficheru de fecha $1:: El ficheru faltaba antes del desaniciu.",
+ "undelete-cleanup-error": "Error al desaniciar el ficheru non usáu «$1».",
"undelete-missing-filearchive": "Nun se pue restaurar l'archivu col númberu d'identificación $1 porque nun ta na base de datos. Seique yá fuera restauráu.",
"undelete-error": "Error al restaurar la páxina",
"undelete-error-short": "Error al restaurar l'archivu: $1",
"tag-mw-replace-description": "Ediciones que desanicien más del 90% del conteníu d'una páxina",
"tag-mw-rollback": "Reversión",
"tag-mw-rollback-description": "Ediciones que desfaen anteriores ediciones usando l'enllaz de desfacer",
+ "tag-mw-undo": "Desfacer",
+ "tag-mw-undo-description": "Ediciones que desfaen ediciones anteriores usando l'enllaz «Desfacer»",
"tags-title": "Etiquetes",
"tags-intro": "Esta páxina llista les etiquetes coles que'l software pue marcar una edición, y el so significáu.",
"tags-tag": "Nome d'etiqueta",
"tag-mw-removed-redirect-description": "Праўкі, якія зьмяняюць існае перанакіраваньне на не перанакіраваньне",
"tag-mw-changed-redirect-target": "Зьмененая мэта перанакіраваньня",
"tag-mw-changed-redirect-target-description": "Праўкі, якія зьмяняюць мэту перанакіраваньня",
+ "tag-mw-blank": "Ачыстка",
+ "tag-mw-blank-description": "Праўкі, якія робяць старонку пустой",
+ "tag-mw-replace": "Заменена",
+ "tag-mw-replace-description": "Праўкі, якія выдаляюць больш за 90% зьместу старонкі",
"tags-title": "Меткі",
"tags-intro": "На гэтай старонцы знаходзіцца сьпіс метак, якімі праграмнае забесьпячэньне можа пазначыць рэдагаваньне, і іх значэньне.",
"tags-tag": "Назва меткі",
"permalink": "Постоянна препратка",
"print": "Печат",
"view": "Преглед",
- "view-foreign": "Ð\9fÑ\80еглед на $1",
+ "view-foreign": "Ð\9fÑ\80еглед в $1",
"edit": "Редактиране",
"edit-local": "Редактиране на локалното описание",
"create": "Създаване",
"tooltip-t-specialpages": "Spisak svih posebnih stranica",
"tooltip-t-print": "Verzija ove stranice za štampanje",
"tooltip-t-permalink": "Trajni link ove verzije stranice",
- "tooltip-ca-nstab-main": "Pogledajte stranicu sa sadržajem",
+ "tooltip-ca-nstab-main": "Prikaži stranicu sa sadržajem",
"tooltip-ca-nstab-user": "Pogledajte korisničku stranicu",
"tooltip-ca-nstab-media": "Pogledajte medija fajl",
"tooltip-ca-nstab-special": "Ovo je posebna stranica, te se ne može zasebno uređivati",
"undo-summary-username-hidden": "Desfés la revisió $1 d'un usuari ocult",
"cantcreateaccount-text": "[[User:$3|$3]] ha blocat la creació de comptes des d'aquesta adreça IP ('''$1''').\n\nEl motiu donat per $3 és ''$2''",
"cantcreateaccount-range-text": "La creació de comptes des de les adreces IP en el rang <strong>$1</strong>, que inclou la vostra adreça IP (<strong>$4</strong>), ha estat blocada per [[User:$3|$3]].\n\nEl motiu donat per $3 és <em>$2</em>",
- "viewpagelogs": "Visualitza els registres d'aquesta pàgina",
+ "viewpagelogs": "Visualitza els registres d’aquesta pàgina",
"nohistory": "No hi ha un historial de revisions per a aquesta pàgina.",
"currentrev": "Revisió actual",
"currentrev-asof": "Revisió de $1",
"rcfilters-days-show-days": "$1 {{PLURAL:$1|де}}",
"rcfilters-days-show-hours": "$1 {{PLURAL:$1|сахьт}}",
"rcfilters-quickfilters": "Ӏалашдина литтарш",
+ "rcfilters-quickfilters-placeholder-title": "Ӏалашдина литтарш дац",
"rcfilters-quickfilters-placeholder-description": "Литтаран буламаш (хьайна) Ӏалашбан лаахь а, йуха уьш лелабан лаахь а, тӀетаӀйе \"жигара литтаран\" уллера хьаьрка.",
"rcfilters-savedqueries-defaultlabel": "Ӏалашдина литтарш",
"rcfilters-savedqueries-rename": "ЦӀе хийцар",
"tog-watchlisthideminor": "Kleine Bearbeitungen in der Beobachtungsliste ausblenden",
"tog-watchlisthideliu": "Bearbeitungen angemeldeter Benutzer in der Beobachtungsliste ausblenden",
"tog-watchlistreloadautomatically": "Sofern ein Filter geändert wurde, die Beobachtungsliste automatisch neu laden (erfordert JavaScript)",
- "tog-watchlistunwatchlinks": "Direkte Links zum (Ent-)Beobachten bei Einträgen in der Beobachtungsliste hinzufügen (für diese Funktion ist JavaScript erforderlich)",
+ "tog-watchlistunwatchlinks": "Direkte Links zum Beobachten/Nicht beobachten bei den Einträgen in der Beobachtungsliste hinzufügen (erfordert JavaScript)",
"tog-watchlisthideanons": "Bearbeitungen anonymer Benutzer (IP-Adressen) in der Beobachtungsliste ausblenden",
"tog-watchlisthidepatrolled": "Kontrollierte Änderungen in der Beobachtungsliste ausblenden",
"tog-watchlisthidecategorization": "Kategorisierungen von Seiten in der Beobachtungsliste ausblenden",
"tog-showhiddencats": "Versteckte Kategorien anzeigen",
"tog-norollbackdiff": "Unterschiede nach dem Zurücksetzen nicht anzeigen",
"tog-useeditwarning": "Warnen, sofern eine zur Bearbeitung geöffnete Seite verlassen wird, die nicht gespeicherte Änderungen enthält",
- "tog-prefershttps": "Während angemeldet, immer eine sichere Verbindung benutzen.",
+ "tog-prefershttps": "Stets eine sichere Verbindung benutzen, solange ich angemeldet bin",
"underline-always": "immer",
"underline-never": "nie",
"underline-default": "abhängig von der Benutzeroberfläche oder Browsereinstellung",
"newwindow": "(wird in einem neuen Fenster geöffnet)",
"cancel": "Abbrechen",
"moredotdotdot": "Mehr …",
- "morenotlisted": "Diese Liste könnte nicht vollständig sein.",
+ "morenotlisted": "Diese Liste könnte unvollständig sein.",
"mypage": "Eigene Seite",
"mytalk": "Diskussion",
"anontalk": "Diskussionsseite",
"tool-link-userrights-readonly": "{{GENDER:$1|Benutzergruppen}} ansehen",
"tool-link-emailuser": "E-Mail an {{GENDER:$1|diesen Benutzer|diese Benutzerin}} senden",
"imagepage": "Dateiseite anzeigen",
- "mediawikipage": "Meldungsseite anzeigen",
+ "mediawikipage": "Systemnachricht ansehen",
"templatepage": "Vorlagenseite anzeigen",
"viewhelppage": "Hilfeseite anzeigen",
"categorypage": "Kategorieseite anzeigen",
"jumpto": "Wechseln zu:",
"jumptonavigation": "Navigation",
"jumptosearch": "Suche",
- "view-pool-error": "Entschuldigung, die Server sind im Moment überlastet.\nZu viele Benutzer versuchen, diese Seite zu besuchen.\nBitte warte einige Minuten, bevor du es noch einmal versuchst.\n\n$1",
- "generic-pool-error": "Leider sind die Server derzeit überlastet.\nZu viele Benutzer wollen diese Ressource ansehen.\nBitte warte einen Moment, bevor du sie erneut aufrufst.",
+ "view-pool-error": "Entschuldige bitte, dass die Server im Moment überlastet sind.\nZu viele Benutzer versuchen, diese Seite zu besuchen.\nBitte warte einige Minuten, bevor du es noch einmal versuchst.\n\n$1",
+ "generic-pool-error": "Entschuldige bitte, dass die Server im Moment überlastet sind.\nZu viele Benutzer wollen diese Ressource ansehen.\nBitte warte einen Moment, bevor du sie erneut aufrufst.",
"pool-timeout": "Zeitablauf während des Wartens auf die Sperrung",
"pool-queuefull": "Poolwarteschlange ist voll",
"pool-errorunknown": "Unbekannter Fehler",
"pool-servererror": "Der Poolzählerdienst ist nicht verfügbar ($1).",
- "poolcounter-usage-error": "Verwendungsfehler: $1",
+ "poolcounter-usage-error": "Anwendungsfehler: $1",
"aboutsite": "Über {{SITENAME}}",
"aboutpage": "Project:Über_{{SITENAME}}",
"copyright": "Der Inhalt ist verfügbar unter der Lizenz $1, sofern nicht anders angegeben.",
"recentchangesdays-max": "Máximo {{PLURAL:$1|un día|$1 días}}",
"recentchangescount": "N.º de ediciones que mostrar de manera predeterminada:",
"prefs-help-recentchangescount": "Esto incluye cambios recientes, historiales de páginas y registros.",
- "prefs-help-watchlist-token2": "Esta es la clave secreta del canal de suscripción de tu lista de seguimiento.\nCualquier persona que la conozca podría leer tu lista, así que no la compartas.\n[[Special:ResetTokens|Pulsa aquí si necesitas restablecerla]].",
+ "prefs-help-watchlist-token2": "Esta es la clave secreta del suministro web de tu lista de seguimiento.\nCualquiera que la conozca podrá consultar la lista, así que no la compartas.\n[[Special:ResetTokens|Puedes restablecerla si lo necesitas]].",
"savedprefs": "Se han guardado tus preferencias.",
"savedrights": "Se han guardado los grupos de {{GENDER:$1|usuario|usuaria}} de $1.",
"timezonelegend": "Huso horario:",
"uploadstash-bad-path": "La ruta no existe.",
"uploadstash-bad-path-invalid": "La ruta no es válida.",
"uploadstash-bad-path-unknown-type": "El tipo «$1» es desconocido.",
+ "uploadstash-bad-path-unrecognized-thumb-name": "No se reconoce el nombre de la miniatura.",
"uploadstash-bad-path-no-handler": "No se encontró ningún manejador para el MIME $1 del archivo $2.",
"uploadstash-bad-path-bad-format": "El formato de la clave «$1» es incorrecto.",
"uploadstash-file-not-found-no-thumb": "No se pudo obtener la miniatura.",
"content-model-css": "CSS",
"content-json-empty-object": "Objetu hustua",
"content-json-empty-array": "Matrize hutsa",
- "deprecated-self-close-category": "HTML etiketa automatikoak ez diren balioak erabiltzen ari diren oriialdeak",
+ "deprecated-self-close-category": "HTML etiketen itxiera propio ez-baliagarria erabiltzen duten orrialdeak",
"deprecated-self-close-category-desc": "Orriak HTML etiketa autoitxi baliogabeak dauzka, adibidez <code><b/></code> edo <code><span/></code>. Hauen jarrera HTML5 zehaztapenekin bat egiteko goiz aldatuko dira, zaharkiturik geratzen direla wikitestuan.",
"duplicate-args-warning": "<strong>Oharra:</strong> [[:$1]]k [[:$2]] \"$3\" parametroarentzako balio bat baino gehiagorekin deitzen ari da. Emandako azken balioa bakarrik erabiliko da.",
"duplicate-args-category": "Txantiloi-deietan argumentu bikoiztuak erabiltzen dituzten orrialdeak",
"recentchangesdays-max": "Enintään $1 {{PLURAL:$1|päivä|päivää}}",
"recentchangescount": "Näytettävien muutoksien määrä oletuksena",
"prefs-help-recentchangescount": "Tämä sisältää tuoreet muutokset, muutoshistoriat ja lokit.",
- "prefs-help-watchlist-token2": "Tämä on salainen avain tarkkailulistasi verkkosyötteeseen.\nKuka tahansa, joka tietää sen voi lukea tarkkailulistaasi, joten älä paljasta sitä.\n[[Special:ResetTokens|Napsauta tästä, jos sinun pitää uudistaa se]].",
+ "prefs-help-watchlist-token2": "Tämä on salainen avain tarkkailulistasi verkkosyötteeseen.\nKuka tahansa, joka tietää sen voi lukea tarkkailulistaasi, joten älä paljasta sitä.\nJos sinun täytyy, [[Special:ResetTokens|voit uudistaa sen]].",
"savedprefs": "Asetuksesi on tallennettu.",
"savedrights": "Käyttäjän {{GENDER:$1|$1}} käyttäjäryhmät on tallennettu.",
"timezonelegend": "Aikavyöhyke",
"timezoneregion-indian": "Intian valtameri",
"timezoneregion-pacific": "Tyynimeri",
"allowemail": "Salli muiden käyttäjien lähettää minulle sähköpostia",
+ "email-allow-new-users-label": "Salli sähköpostit uusilta käyttäjiltä",
"email-blacklist-label": "Estä näitä käyttäjiä lähettämästä minulle sähköpostia:",
"prefs-searchoptions": "Haku",
"prefs-namespaces": "Nimiavaruudet",
"rcfilters-advancedfilters": "Kehittyneet suodattimet",
"rcfilters-limit-title": "Näytettävät tulokset",
"rcfilters-limit-and-date-label": "{{PLURAL:$1|muutos|$1 muutosta}}, $2",
+ "rcfilters-date-popup-title": "Aikajakso hakua varten",
"rcfilters-days-title": "Viimeisimmät päivät",
"rcfilters-hours-title": "Viimeisimmät tunnit",
"rcfilters-days-show-days": "$1 {{PLURAL:$1|päivä|päivää}}",
"rcfilters-filter-watchlist-notwatched-description": "Kaikki paitsi muutokset tarkkailulistallasi oleviin sivuihin.",
"rcfilters-filtergroup-watchlistactivity": "Tarkkailulistan aktiivisuus",
"rcfilters-filter-watchlistactivity-unseen-label": "Näkemättömät muutokset",
+ "rcfilters-filter-watchlistactivity-unseen-description": "Muutokset sivuihin, joilla et ole käynyt muutosten jälkeen.",
"rcfilters-filter-watchlistactivity-seen-label": "Nähdyt muutokset",
+ "rcfilters-filter-watchlistactivity-seen-description": "Muutokset sivuihin, joilla olet käynyt muutosten jälkeen.",
"rcfilters-filtergroup-changetype": "Muutoksen tyyppi",
"rcfilters-filter-pageedits-label": "Sivun muokkaukset",
"rcfilters-filter-pageedits-description": "Muokkaukset wikin sisältöön, keskusteluihin, luokkakuvauksiin…",
"rcfilters-watchlist-showupdated": "Muutokset sivuihin, joilla et ole vieraillut sen jälkeen kun muutokset on tehty, on <strong>lihavoitu</strong> ja värimerkitty.",
"rcfilters-preference-label": "Piilota tuoreiden muutosten parannettu versio",
"rcfilters-preference-help": "Peruuttaa vuoden 2017 käyttöliittymän uudistuksen ja kaikki sen jälkeen lisätyt työkalut.",
+ "rcfilters-target-page-placeholder": "Anna sivun nimi",
"rcnotefrom": "Alla ovat muutokset <strong>$3, $4</strong> lähtien. (Enintään <strong>$1</strong> näytetään.)",
"rclistfromreset": "Tyhjennä ajankohdan valinta",
"rclistfrom": "Näytä uudet muutokset $3 kello $2 alkaen",
"uploadstash-errclear": "Tiedostojen tyhjentäminen epäonnistui.",
"uploadstash-refresh": "Päivitä tiedostoluettelo",
"uploadstash-thumbnail": "näytä pienoiskuva",
+ "uploadstash-bad-path": "\nPolkua ei ole.",
+ "uploadstash-bad-path-invalid": "Polku ei kelpaa.",
+ "uploadstash-not-logged-in": "Käyttäjää ei ole kirjautunut sisään, tiedostojen on kuuluttava käyttäjille.",
+ "uploadstash-no-extension": "Laajennus on tyhjä.",
"invalid-chunk-offset": "Kelpaamaton siirtymä lohkoissa",
"img-auth-accessdenied": "Pääsy estetty",
"img-auth-nopathinfo": "PATH_INFO puuttuu.\nPalvelintasi ei ole asetettu välittämään tätä tietoa.\nSe saattaa olla CGI-pohjainen eikä voi tukea img_authia.\nLisätietoja löytyy sivulta https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization.",
"tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Merkkaus|Merkkaukset}}]]: $2)",
"tag-mw-contentmodelchange": "sisältömallin muutos",
"tag-mw-contentmodelchange-description": "Muokkaukset, jotka [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel muuttavat sivun sisältömallia]",
+ "tag-mw-new-redirect": "Uusi uudelleenohjaus",
+ "tag-mw-new-redirect-description": "Muokkaukset, jotka luovat uuden uudelleenohjauksen tai muuttavat sivun uudelleenohjaukseksi",
"tag-mw-removed-redirect": "Ohjaus on poistettu",
+ "tag-mw-removed-redirect-description": "Muokkaukset, jotka muuttavat olemassa olevan uudelleenohjauksen ei-uudelleenohjaukseksi",
+ "tag-mw-changed-redirect-target": "Uudelleenohjauksen kohde muutettu",
+ "tag-mw-changed-redirect-target-description": "Muokkaukset, jotka muuttavat uudelleenohjauksen kohdetta",
+ "tag-mw-blank-description": "Muokkaukset, jotka tyhjentävät sivun",
+ "tag-mw-replace": "Korvattu",
+ "tag-mw-replace-description": "Muokkaukset, jotka poistavat yli 90% sivun sisällöstä",
+ "tag-mw-rollback": "Palautus",
+ "tag-mw-rollback-description": "Muokkaukset, jotka palauttavat edelliset muokkaukset takaisinvetolinkillä",
+ "tag-mw-undo": "Kumoa",
+ "tag-mw-undo-description": "Muokkaukset, jotka kumoavat edelliset muokkaukset kumoamislinkillä",
"tags-title": "Merkkaukset",
"tags-intro": "Tämä sivu luetteloi ne merkkaukset (''engl.'' tags), joilla ohjelmisto voi merkitä muokkauksia, ja mitä ne tarkoittavat.",
"tags-tag": "Merkkauksen nimi",
"special-characters-group-thai": "Thai",
"special-characters-group-lao": "Lao",
"special-characters-group-khmer": "Khmer",
+ "special-characters-group-canadianaboriginal": "Kanadalainen aboriginaali",
"special-characters-title-endash": "ajatusviiva",
"special-characters-title-emdash": "pitkä ajatusviiva",
"special-characters-title-minus": "miinusmerkki",
"authmanager-userlogin-remembermypassword-help": "Tulisiko salasana muistaa istunnon kestoa pidempään.",
"authmanager-username-help": "Käyttäjänimi varmentamiseen.",
"authmanager-password-help": "Salasana varmentamiseen.",
+ "authmanager-domain-help": "Verkkonimi ulkoiselle todennukselle.",
"authmanager-retype-help": "Salasana uudelleen vahvistaaksesi.",
"authmanager-email-label": "Sähköposti",
"authmanager-email-help": "Sähköpostiosoite",
"authprovider-confirmlink-request-label": "Tunnukset, jotka tulisi yhdistää",
"authprovider-confirmlink-success-line": "$1: Linkitetty onnistuneesti.",
"authprovider-confirmlink-failed": "Tunnuksen linkitys ei onnistunut täysin: $1",
+ "authprovider-confirmlink-ok-help": "Jatka yhteydenottohäiriöilmoitusten näyttämisen jälkeen.",
"authprovider-resetpass-skip-label": "Ohita",
"authprovider-resetpass-skip-help": "Ohita salasanan palautus.",
"authform-nosession-login": "Varmennus onnistui, mutta selaimesi ei pysty \"muistamaan\" sisäänkirjautumista.\n\n$1",
"youremail": "Courriel :",
"username": "{{GENDER:$1|Nom d'utilisateur|Nom d'utilisatrice}} :",
"prefs-memberingroups": "{{GENDER:$2|Membre}} {{PLURAL:$1|du groupe|des groupes}} :",
+ "prefs-memberingroups-type": "$1",
"group-membership-link-with-expiry": "$1 (jusqu'à $2)",
"prefs-registration": "Date d'inscription :",
+ "prefs-registration-date-time": "$1",
"yourrealname": "Nom réel :",
"yourlanguage": "Langue :",
"yourvariant": "Variante de la langue du contenu :",
"apisandbox-request-selectformat-label": "Afficher les données de la requête comme :",
"apisandbox-request-format-url-label": "Chaîne de requête de l’URL",
"apisandbox-request-url-label": "Requête URL :",
+ "apisandbox-request-format-json-label": "JSON",
"apisandbox-request-json-label": "Demander du JSON :",
"apisandbox-request-time": "Durée de la demande: {{PLURAL:$1|$1 ms}}",
"apisandbox-results-fixtoken": "Corrigez le jeton et renvoyez",
"listgrants-summary": "Voici une liste des droits avec leur accès associé aux droits utilisateur. Les utilisateurs peuvent autoriser les applications à utiliser leur compte, mais avec des droits limités d’après les droits que l’utilisateur a donnés à l’application. Un application agissant au nom d’un utilisateur ne peut toutefois pas, de fait, utiliser des droits que l’utilisateur ne possède pas.\nIl peut y avoir [[{{MediaWiki:Listgrouprights-helppage}}|plus d’information]] sur les droits individuels.",
"listgrants-grant": "Accorder",
"listgrants-rights": "Droits",
+ "listgrants-grant-display": "$1 <code>($2)</code>",
"trackingcategories": "Catégories de suivi",
"trackingcategories-summary": "Cette page liste les catégories de suivi qui sont remplies automatiquement par [[MediaWiki]]. Leurs noms peuvent être changés en modifiant les messages systèmes correspondants dans l’espace de noms {{ns:8}}.",
"trackingcategories-msg": "Catégorie de suivi",
"recentchangeslinked-feed": "Kapcsolódó változtatások",
"recentchangeslinked-toolbox": "Kapcsolódó változtatások",
"recentchangeslinked-title": "A(z) $1 laphoz kapcsolódó változtatások",
- "recentchangeslinked-summary": "Alább azon lapoknak a legutóbbi változtatásai láthatóak, amelyekre hivatkozik egy megadott lap (vagy tagjai a megadott kategóriának).\nA [[Special:Watchlist|figyelőlistádon]] szereplő lapok '''félkövérrel''' vannak jelölve.",
+ "recentchangeslinked-summary": "Alább azon lapoknak a legutóbbi változtatásai láthatóak, amelyekre hivatkozik egy megadott lap. (Ha egy kategória tagjaira vagy kíváncsi, írd be, hogy Kategória:katerógianév.)\nA [[Special:Watchlist|figyelőlistádon]] szereplő lapok '''félkövérrel''' vannak jelölve.",
"recentchangeslinked-page": "Lap neve:",
"recentchangeslinked-to": "Inkább az erre linkelő lapok változtatásait mutasd",
"recentchanges-page-added-to-category": "[[:$1]] hozzáadva a kategóriához",
"delete-warning-toobig": "Ennek a lapnak a laptörténete több mint {{PLURAL:$1|egy|$1}} változatot őriz. Törlése fennakadásokat okozhat a wiki adatbázis-műveleteiben; óvatosan járj el.",
"deleteprotected": "Nem tudod törölni a lapot, mivel le van védve.",
"deleting-backlinks-warning": "<strong>Figyelem:</strong> [[Special:WhatLinksHere/{{FULLPAGENAME}}|Más lapok]] hivatkoznak a törlendő oldalra (vagy beillesztik azt).",
- "deleting-subpages-warning": "<strong>Figyelem:</strong> A törlésre jelölt lapnak[[Special:PrefixIndex/{{FULLPAGENAME}}/|{{PLURAL:$1|van allapja|$1 vannak allapjai|51=több mint 50 allapja van}}]].",
+ "deleting-subpages-warning": "<strong>Figyelem:</strong> A törlésre jelölt lapnak [[Special:PrefixIndex/{{FULLPAGENAME}}/|{{PLURAL:$1|van egy allapja|$1 allapja van|51=több mint 50 allapja van}}]].",
"rollback": "Szerkesztések visszaállítása",
"rollbacklink": "visszaállítás",
"rollbacklinkcount": "$1 szerkesztés visszaállítása",
"ip_range_invalid": "Érvénytelen IP-tartomány.",
"ip_range_toolarge": "Nem engedélyezettek azok a tartományblokkok, melyek nagyobbak mint /$1.",
"ip_range_exceeded": "Az IP-cím-tartomány nagyobb a megengedettnél. Engedélyezett tartomány: /$1.",
+ "ip_range_toolow": "IP tartományok ténylegesen nem használhatók.",
"proxyblocker": "Proxyblokkoló",
"proxyblockreason": "Az IP-címeden ''nyílt proxy'' üzemel. Amennyiben nem használsz proxyt, vedd fel a kapcsolatot egy informatikussal vagy az internetszolgáltatóddal ezen súlyos biztonsági probléma ügyében.",
"sorbsreason": "Az IP-címed nyitott proxyként szerepel e webhely által használt DNSBL listán.",
"log-action-filter-patrol": "Járőrözés típusa:",
"log-action-filter-protect": "Lapvédelem típusa:",
"log-action-filter-rights": "Jogosultságváltozás típusa:",
+ "log-action-filter-suppress": "Elrejtés típusa:",
"log-action-filter-upload": "Feltöltés típusa:",
"log-action-filter-all": "Mind",
"log-action-filter-block-block": "Blokk",
"log-action-filter-protect-move_prot": "Védelem áthelyezése",
"log-action-filter-rights-rights": "Kézi módosítás",
"log-action-filter-rights-autopromote": "Automatikus módosítás",
+ "log-action-filter-suppress-event": "Napló elrejtés",
+ "log-action-filter-suppress-revision": "Lapváltozat elrejtés",
+ "log-action-filter-suppress-delete": "Lap elrejtés",
+ "log-action-filter-suppress-block": "Felhasználó elrejtése blokkolással",
+ "log-action-filter-suppress-reblock": "Felhasználó elrejtést újra blokkolással",
"log-action-filter-upload-upload": "Új feltöltés",
"log-action-filter-upload-overwrite": "Újrafeltöltés",
"authmanager-authn-not-in-progress": "Hitelesítés nincs folyamatban, vagy a folyamat adatai elvesztek. Kérjük, indítsd újra az elejétől.",
"userrights-viewusergroup": "{{GENDER:$1|利用者}}グループ",
"saveusergroups": "{{GENDER:$1|利用者}}グループを保存",
"userrights-groupsmember": "所属グループ:",
- "userrights-groupsmember-auto": "秘匿した所属グループ",
+ "userrights-groupsmember-auto": "自動的に所属するグループ:",
"userrights-groupsmember-type": "$1",
"userrights-groups-help": "この利用者が属するグループを変更できます。\n* チェックが入っているボックスは、この利用者がそのグループに属していることを意味します。\n* チェックが入っていないボックスは、この利用者がそのグループに属していないことを意味します。\n*「*」はグループに一旦追加した場合に除去 (あるいはその逆) ができないことを示しています。\n*「#」は有効期限の延長のみを行うことができるグループの参加資格を示します; 現在の期限よりも短縮することはできません。",
"userrights-reason": "理由:",
"recentchanges-submit": "表示",
"rcfilters-tag-remove": "「$1」を除去",
"rcfilters-legend-heading": "<strong>略語のリスト:</strong>",
+ "rcfilters-other-review-tools": "その他の監視ツール",
"rcfilters-group-results-by-page": "ページごとにまとめて表示",
"rcfilters-activefilters": "絞り込み",
"rcfilters-advancedfilters": "詳細フィルター",
"rcfilters-limit-title": "表示件数の変更",
+ "rcfilters-limit-and-date-label": "$1件の変更、$2",
"rcfilters-date-popup-title": "検索期間",
"rcfilters-days-title": "日数",
"rcfilters-hours-title": "時間",
"tag-mw-contentmodelchange-description": "ページの[https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel コンテンツモデルを変更]する",
"tag-mw-new-redirect": "新規リダイレクト",
"tag-mw-new-redirect-description": "新たな転送ページの作成または既存ページの転送化の編集",
+ "tag-mw-removed-redirect": "転送廃止",
"tag-mw-changed-redirect-target": "転送先変更",
"tag-mw-changed-redirect-target-description": "転送先を変更する編集",
"tag-mw-blank": "白紙化",
"versionrequired": "Se nesesite la versyon $1 de MediaWiki",
"versionrequiredtext": "Se nesesita versyon $1 de MediaWiki para uzar este pajina. Ver [[Special:Version|La pajina de versyon]].",
"ok": "DE ACORDDO",
- "retrievedfrom": "Acojido del adresso \"$1\"",
+ "retrievedfrom": "Acojido del aderesso \"$1\"",
"youhavenewmessages": "{{PLURAL:$3|Tienes}} $1 ($2).",
"youhavenewmessagesfromusers": "{{PLURAL:$4|Tiene}} $1 de {{PLURAL:$3|otro usuario|$3 usuarios}}($2).",
"youhavenewmessagesmanyusers": "Tiene $1 de munchos usuarios ($2).",
"tog-showtoolbar": "Ännerungstoolbar weisen",
"tog-editondblclick": "Säite mat Duebelklick änneren",
"tog-editsectiononrightclick": "Eenzel Abschnitter mat Rietsklick änneren",
- "tog-watchcreations": "Säiten déi ech uleeën a Fichieren déi ech eroplueden op meng Iwwerwaachungslëscht derbäisetzen",
- "tog-watchdefault": "Säiten a Fichieren déi ech änneren op meng Iwwerwaachungslëscht derbäisetzen",
- "tog-watchmoves": "Säiten a Fichieren déi ech réckelen automatesch op meng Iwwerwaachungslëscht derbäisetzen",
- "tog-watchdeletion": "Säiten a Fichieren déi ech läschen op meng Iwwerwaachungslëscht derbäisetzen",
+ "tog-watchcreations": "Säiten déi ech uleeën a Fichieren déi ech eroplueden op meng Iwwerwaachungslëscht dobäisetzen",
+ "tog-watchdefault": "Säiten a Fichieren déi ech änneren op meng Iwwerwaachungslëscht dobäisetzen",
+ "tog-watchmoves": "Säiten a Fichieren déi ech réckelen automatesch op meng Iwwerwaachungslëscht dobäisetzen",
+ "tog-watchdeletion": "Säiten a Fichieren déi ech läschen op meng Iwwerwaachungslëscht dobäisetzen",
"tog-watchuploads": "Nei Fichieren déi ech eroplueden op meng Iwwerwaachungslëscht setzen",
- "tog-watchrollback": "Säiten déi ech zréckgesat hunn op meng Iwwerwaachungslëscht derbäisetzen",
+ "tog-watchrollback": "Säiten déi ech zréckgesat hunn op meng Iwwerwaachungslëscht dobäisetzen",
"tog-minordefault": "All Ännerungen automatesch als 'Kleng Ännerungen' markéieren.",
"tog-previewontop": "Déi ''nach-net gespäichert Versioun'' iwwer der Ännerungsfënster weisen",
"tog-previewonfirst": "Beim éischten Änneren déi ''nach net gespäichert Versioun'' weisen.",
"edit": "Änneren",
"edit-local": "Lokal Beschreiwung änneren",
"create": "Uleeën",
- "create-local": "Lokal Beschreiwung derbäisetzen",
+ "create-local": "Lokal Beschreiwung dobäisetzen",
"delete": "Läschen",
"undelete_short": "$1 {{PLURAL:$1|Versioun|Versioune}} restauréieren",
"viewdeleted_short": "{{PLURAL:$1|Eng geläschte Versioun|$1 geläscht Versioune}} weisen",
"botpasswords-help-grants": "Berechtegunge ginn Zougang op déi Benotzerrechter déi Äre Benotzerkont schonn huet. D'Aktivéiere vun enger Berechtegung hei gëtt Iech keen Zougang op Rechter déi Äre Benotzerkont net scho souwisou huet. Kuckt d'[[Special:ListGrants|Tabell vun de Berechtigunge]] fir méi Informatiounen.",
"botpasswords-label-grants-column": "Accordéiert",
"botpasswords-bad-appid": "Den Numm vum Bot \"$1\" ass net valabel.",
- "botpasswords-insert-failed": "De Botnumm \"$1\" konnt net dobäigesat ginn. Gouf e schonn derbäigesat?",
+ "botpasswords-insert-failed": "De Botnumm \"$1\" konnt net dobäigesat ginn. Gouf e schonn dobäigesat?",
"botpasswords-update-failed": "Den Numm vum Bot \"$1\" konnt net aktualiséiert ginn. Gouf e geläscht?",
"botpasswords-created-title": "Botpasswuert ugeluecht",
"botpasswords-created-body": "D'Botpasswuert fir de Bot-Numm \"$1\" vum {{GENDER:$2|Benotzer}} ''$2'' gouf ugeluecht.",
"email": "E-Mail",
"prefs-help-realname": "De richtegen Numm ass fakultativ.\nWann en ugi gouf, gëtt e benotzt fir Iech Är Kontributiounen zouzeuerdnen.",
"prefs-help-email": "D'E-Mailadress ass fakultativ, awer si gëtt gebraucht fir Iech Äert Passwuert ze mailen, wann Dir et géift vergiessen.",
- "prefs-help-email-others": "Dir kënnt Iech och dofir decidéieren datt Anerer Iech iwwer Är Diskussiounssäit kontaktéieren ouni datt Dir derbäi Är Identitéit verrode musst.",
+ "prefs-help-email-others": "Dir kënnt Iech och dofir decidéieren datt Anerer Iech iwwer Är Diskussiounssäit kontaktéieren ouni datt Dir dobäi Är Identitéit verrode musst.",
"prefs-help-email-required": "Eng gëlteg E-Mail-Adress gëtt heifir gebraucht.",
"prefs-info": "Grondinformatioun",
"prefs-i18n": "Internationalisatioun",
"right-editmyusercss": "Är eegen CSS-Fichieren änneren",
"right-editmyuserjs": "Är eege JavaScript-Fichieren änneren",
"right-viewmywatchlist": "Kuckt Är eegen Iwwerwaachungslëscht",
- "right-editmywatchlist": "Ännert Är eegen Iwwerwaachungslëscht. Denkt drun datt och aner Aktioune Säiten op d'Iwwerwaachungslëscht derbäisetzen.",
+ "right-editmywatchlist": "Ännert Är eegen Iwwerwaachungslëscht. Denkt drun datt och aner Aktioune Säiten op d'Iwwerwaachungslëscht dobäisetzen.",
"right-viewmyprivateinfo": "Är eege privat Donnéeën (z.Bsp. E-Mail-Adress, richtegen Numm) kucken",
"right-editmyprivateinfo": "Är eege privat Donnéeën (z.Bsp. E-Mail-Adress, richtegen Numm) änneren",
"right-editmyoptions": "Ännert Är eegen Astellungen",
"recentchangeslinked-summary": "Gitt den Numm vun enger Säit a fir Ännerungen Säiten ze gesinn op déi oder vun deene gelinkt gëtt. Ännerungen op Säite vun [[Special:Watchlist|Ärer Iwwerwaachungslëscht]] si <strong>fett</strong> geschriwwen.",
"recentchangeslinked-page": "Säitennumm:",
"recentchangeslinked-to": "Weis Ännerungen zu de verlinkte Säiten aplaz vun der gefroter Säit",
- "recentchanges-page-added-to-category": "[[:$1]] an d'Kategorie derbäigesat",
+ "recentchanges-page-added-to-category": "[[:$1]] an d'Kategorie dobäigesat",
"recentchanges-page-added-to-category-bundled": "[[:$1]] an d'Kategorie dobäigesat, [[Special:WhatLinksHere/$1|dës Säit ass an aner Säiten agebonn]]",
"recentchanges-page-removed-from-category": "[[:$1]] erausgeholl aus der Kategorie",
"recentchanges-page-removed-from-category-bundled": "[[:$1]] aus der Kategorie erausgeholl, [[Special:WhatLinksHere/$1|dës Säit ass an aner Säiten agebonn]]",
"upload-dialog-button-upload": "Eroplueden",
"upload-form-label-infoform-title": "Detailer",
"upload-form-label-infoform-name": "Numm",
- "upload-form-label-infoform-name-tooltip": "E kuerzen an uniquen Titel fir de Fichier, deen och als Numm vum Fichier benotzt gëtt. Dir kënnt derbäi Text mat Espace benotzen. D'Erweiderung vum Fichier soll net ugi ginn.",
+ "upload-form-label-infoform-name-tooltip": "E kuerzen an uniquen Titel fir de Fichier, deen och als Numm vum Fichier benotzt gëtt. Dir kënnt dobäi Text mat Espace benotzen. D'Erweiderung vum Fichier soll net ugi ginn.",
"upload-form-label-infoform-description": "Beschreiwung",
"upload-form-label-infoform-description-tooltip": "Beschreift w.e.g. kuerz dat Wichtegst vun dësem Wierk.\nFir eng Photo, ernimmt déi Haaptsaachen déi drop sinn, d'Geleeënheet oder d'Plaz.",
"upload-form-label-usage-title": "Benotzung",
"apisandbox-helpurls": "Hëllef-Linken",
"apisandbox-examples": "Beispiller",
"apisandbox-dynamic-parameters": "Zousätzlech Parameteren",
- "apisandbox-dynamic-parameters-add-label": "Parameter derbäisetzen:",
+ "apisandbox-dynamic-parameters-add-label": "Parameter dobäisetzen:",
"apisandbox-dynamic-parameters-add-placeholder": "Numm vum Parameter",
"apisandbox-dynamic-error-exists": "Et gëtt schonn e Parameter mam Numm \"$1\".",
"apisandbox-deprecated-parameters": "Vereelst Parameter",
"listgrouprights-rights": "Rechter",
"listgrouprights-helppage": "Help:Grupperechter",
"listgrouprights-members": "(Lëscht vun de Memberen)",
- "listgrouprights-addgroup": "Dës {{PLURAL:$2|Grupp|Gruppen}} derbäisetzen: $1",
+ "listgrouprights-addgroup": "Dës {{PLURAL:$2|Grupp|Gruppen}} dobäisetzen: $1",
"listgrouprights-removegroup": "Kann {{PLURAL:$2|dëse Gruppe|dës Gruppen}} ewechhuelen: $1",
- "listgrouprights-addgroup-all": "Kann all Gruppen derbäisetzen",
+ "listgrouprights-addgroup-all": "Kann all Gruppen dobäisetzen",
"listgrouprights-removegroup-all": "Ka Benotzer aus alle Gruppen eraushuelen",
- "listgrouprights-addgroup-self": "Däerf {{PLURAL:$2|de Grupp|d'Gruppe}} bei säin eegene Benotzerkont derbäisetzen: $1",
+ "listgrouprights-addgroup-self": "Däerf {{PLURAL:$2|de Grupp|d'Gruppe}} bei säin eegene Benotzerkont dobäisetzen: $1",
"listgrouprights-removegroup-self": "Däerf {{PLURAL:$2|de Grupp|d'Gruppe}} vu sengem eegene Benotzerkont ewechhuelen: $1",
- "listgrouprights-addgroup-self-all": "däerf all Gruppe bei säin eegene Benotzerkont derbäisetzen",
+ "listgrouprights-addgroup-self-all": "däerf all Gruppe bei säin eegene Benotzerkont dobäisetzen",
"listgrouprights-removegroup-self-all": "Däerf all Gruppe vu sengem eegene Benotzerkont ewechhuelen",
"listgrouprights-namespaceprotection-header": "Limitatioune vum Nummraum",
"listgrouprights-namespaceprotection-namespace": "Nummraum",
"nowatchlist": "Är Iwwerwaachungslëscht ass eidel.",
"watchlistanontext": "Loggt Iech a fir Elementer op Ärer Iwwerwaachungslëscht ze gesinn oder z'änneren.",
"watchnologin": "Net ageloggt",
- "addwatch": "Op d'Iwwerwaachungslëscht derbäisetzen",
+ "addwatch": "Op d'Iwwerwaachungslëscht dobäisetzen",
"addedwatchtext": "\"[[:$1]]\" a seng Diskussiounssäit goufen op Är [[Special:Watchlist|Iwwerwaachungslëscht]] gesat.",
- "addedwatchtext-short": "D'Säit \"$1\" gouf op Är Iwwerwaachungslëscht derbäigesat.",
+ "addedwatchtext-short": "D'Säit \"$1\" gouf op Är Iwwerwaachungslëscht dobäigesat.",
"removewatch": "Vun der Iwwerwaachungslëscht erofhuelen",
"removedwatchtext": "\"[[:$1]]\" a seng Diskussiounssäit goufe vun Ärer [[Special:Watchlist|Iwwerwaachungslëscht]] erofgeholl.",
"removedwatchtext-talk": "\"[[:$1]]\" a seng associéiert Säit goufe vun Ärer [[Special:Watchlist|Iwwerwaachungslëscht]] erofgeholl.",
"exportnohistory": "----\n'''Hiwäis:''' Den Export vu komplette Versiounshistoriquen ass aus Performancegrënn bis op weideres net méiglech.",
"exportlistauthors": "Fir all Säit eng komplett Lëscht vun deenen déi un der Säit matgeschafft hunn drasetzen",
"export-submit": "Exportéieren",
- "export-addcattext": "Säiten aus Kategorie derbäisetzen:",
- "export-addcat": "Derbäisetzen",
- "export-addnstext": "Säiten aus Nummraum derbäisetzen:",
- "export-addns": "Derbäisetzen",
+ "export-addcattext": "Säiten aus Kategorie dobäisetzen:",
+ "export-addcat": "Dobäisetzen",
+ "export-addnstext": "Säiten aus Nummraum dobäisetzen:",
+ "export-addns": "Dobäisetzen",
"export-download": "Als XML-Datei späicheren",
"export-templates": "Inklusiv Schablounen",
"export-pagelinks": "Verlinkte Säiten mat exportéieren, bis zu enger Déift vun:",
- "export-manual": "Säite manuell derbäisetzen:",
+ "export-manual": "Säite manuell dobäisetzen:",
"allmessages": "All Systemmessagen",
"allmessagesname": "Numm",
"allmessagesdefault": "Standardtext",
"watchlistedit-normal-done": "{{PLURAL:$1|1 Säit gouf|$1 Säite goufe}} vun ärer Iwwerwaachungslëscht erofgeholl:",
"watchlistedit-raw-title": "Iwwerwaachungslëscht onformatéiert änneren",
"watchlistedit-raw-legend": "Iwwerwaachungslëscht onformatéiert änneren",
- "watchlistedit-raw-explain": "D'Säite vun Ärer Iwwerwaachungslëscht ginn hei drënner gewisen a kënne geännert ginn andeems der d'Säiten op d'Lëscht derbäisetze oder erofhuelt; eng Säit pro Linn.\nWann Dir fäerdeg sidd, klickt \"{{int:Watchlistedit-raw-submit}}\".\nDir kënnt och [[Special:EditWatchlist|de Standard Editeur benotzen]].",
+ "watchlistedit-raw-explain": "D'Säite vun Ärer Iwwerwaachungslëscht ginn hei drënner gewisen a kënne geännert ginn andeems Dir d'Säiten op d'Lëscht dobäisetzt oder erofhuelt; eng Säit pro Linn.\nWann Dir fäerdeg sidd, klickt \"{{int:Watchlistedit-raw-submit}}\".\nDir kënnt och [[Special:EditWatchlist|de Standard Editeur benotzen]].",
"watchlistedit-raw-titles": "Säiten:",
"watchlistedit-raw-submit": "Iwwerwaachungslëscht aktualiséieren",
"watchlistedit-raw-done": "Är Iwwerwaachungslëscht gouf aktualiséiert.",
- "watchlistedit-raw-added": "{{PLURAL:$1|1 Säit gouf|$1 Säite goufen}} derbäigesat:",
+ "watchlistedit-raw-added": "{{PLURAL:$1|1 Säit gouf|$1 Säite goufen}} dobäigesat:",
"watchlistedit-raw-removed": "{{PLURAL:$1|1 Säit gouf|$1 Säite goufen}} erausgeholl:",
"watchlistedit-clear-title": "Iwwerwaachungslëscht eidelmaachen",
"watchlistedit-clear-legend": "Iwwerwaachungslëscht eidelmaachen",
"tags-deactivate-submit": "Desaktivéieren",
"tags-apply-not-allowed-one": "D'Markéierung \"$1\" däerf net manuell applizéiert ginn.",
"tags-update-add-not-allowed-one": "D'Markéierung (tag) \"$1\" däerf net manuell dobäigesat ginn.",
- "tags-update-add-not-allowed-multi": "Dës {{PLURAL:$2|Markéierung däerf|Markéierungen däerfen}} net manuelle derbäi gesat ginn: $1",
+ "tags-update-add-not-allowed-multi": "Dës {{PLURAL:$2|Markéierung däerf|Markéierungen däerfen}} net manuelle dobäi gesat ginn: $1",
"tags-update-remove-not-allowed-one": "D'Markéierung (tag) \"$1\" däerf net ewechgeholl ginn.",
"tags-update-remove-not-allowed-multi": "Dës {{PLURAL:$2|Markéierung däerf|Markéierungen däerfen}} net manuell ewechgeholl ginn: $1",
"tags-edit-title": "Markéierungen (tags) änneren",
"htmlform-no": "Neen",
"htmlform-yes": "Jo",
"htmlform-chosen-placeholder": "Sicht eng Optioun eraus",
- "htmlform-cloner-create": "Méi derbäisetzen",
+ "htmlform-cloner-create": "Méi dobäisetzen",
"htmlform-cloner-delete": "Ewechhuelen",
"htmlform-cloner-required": "Mindestens ee Wäert ass obligatoresch.",
"htmlform-date-placeholder": "JJJJ-MM-DD",
"logentry-import-interwiki-details": "$1 {{GENDER:$2|huet}} $3 vu(n) $5 importéiert ({{PLURAL:$4|Eng Versioun|$4 Versiounen}})",
"logentry-move-move": "$1 huet d'Säit $3 op $4 {{GENDER:$2|geréckelt}}",
"logentry-move-move-noredirect": "$1 huet d'Säit $3 op $4 {{GENDER:$2|geréckelt}} ouni eng Viruleedung unzeleeën",
- "logentry-move-move_redir": "$1 huet d'Säit $3 op $4 {{GENDER:$2|geréckelt}} an derbäi gouf eng Viruleedung iwwerschriwwen",
- "logentry-move-move_redir-noredirect": "$1 huet d'Säit $3 op $4 {{GENDER:$2|geréckelt}} an derbäi gouf eng Viruleedung iwwerschriwwen an et et gouf keng nei Viruleedung ugeluecht",
+ "logentry-move-move_redir": "$1 huet d'Säit $3 op $4 {{GENDER:$2|geréckelt}} an dobäi gouf eng Viruleedung iwwerschriwwen",
+ "logentry-move-move_redir-noredirect": "$1 huet d'Säit $3 op $4 {{GENDER:$2|geréckelt}} an dobäi gouf eng Viruleedung iwwerschriwwen an et et gouf keng nei Viruleedung ugeluecht",
"logentry-patrol-patrol": "$1 huet d'Versioun $4 vun der Säit $3 als nogekuckt {{GENDER:$2|markéiert}}",
"logentry-patrol-patrol-auto": "$1 huet d'Versioun $4 vun der Säit $3 automatesch als nogekuckt {{GENDER:$2|markéiert}}",
"logentry-newusers-newusers": "De Benotzerkont $1 gouf {{GENDER:$2|ugeluecht}}",
"logentry-tag-update-add-revision": "$1 {{GENDER:$2|huet}} d'{{PLURAL:$7|Markéierung|Markéierunge(n)}} $6 op d'Versioun $4 vun der Säit $3 dobäigesat",
"rightsnone": "(keen)",
"rightslogentry-temporary-group": "$1 (temporär, bis $2)",
- "feedback-adding": "Feedback gëtt bei d'Säit derbäigesat...",
+ "feedback-adding": "Feedback gëtt bei d'Säit dobäigesat...",
"feedback-back": "Zréck",
"feedback-bugcheck": "Super! Kuckt just no ob et net ee vun de scho [$1 bekannte Feeler] ass.",
"feedback-bugnew": "Ech hunn et nogekuckt. Den neie Bug mellen",
- "feedback-bugornote": "Wann Dir bereet sidd fir en technesche Problem am Detail ze beschreiwen da [$1 mellt w.e.g. e Feeler (Bug)].\nSoss kënnt Dir den einfache Formulär hei drënner benotzen. Är Bemierkung gëtt op d'Säit \"[$3 $2]\" derbäigesat, zesumme mat Ärem Benotzernumm an dem Numm vum Browser deen Dir benotzt.",
+ "feedback-bugornote": "Wann Dir bereet sidd fir en technesche Problem am Detail ze beschreiwen da [$1 mellt w.e.g. e Feeler (Bug)].\nSoss kënnt Dir den einfache Formular hei drënner benotzen. Är Bemierkung gëtt op d'Säit \"[$3 $2]\" dobäigesat, zesumme mat Ärem Benotzernumm am Numm vum Browser deen Dir benotzt.",
"feedback-cancel": "Ofbriechen",
"feedback-close": "Fäerdeg",
"feedback-external-bug-report-button": "Eng technesch Aufgab notifizéieren",
"mw-widgets-mediasearch-noresults": "Näischt fonnt.",
"mw-widgets-titleinput-description-new-page": "Säit gëtt et nach net",
"mw-widgets-titleinput-description-redirect": "viruleeden op $1",
- "mw-widgets-categoryselector-add-category-placeholder": "Eng Kategorie derbäisetzen...",
- "mw-widgets-usersmultiselect-placeholder": "Méi derbäisetzen...",
+ "mw-widgets-categoryselector-add-category-placeholder": "Eng Kategorie dobäisetzen...",
+ "mw-widgets-usersmultiselect-placeholder": "Méi dobäisetzen...",
"date-range-from": "Vum (Datum):",
"date-range-to": "Bis den (Datum):",
"sessionprovider-generic": "$1-Sessiounen",
"page_last": "pask",
"histlegend": "Skirtumai tarp versijų: pažymėkite lyginamas versijas ir spustelkite ''Enter'' klavišą arba mygtuką apačioje.<br />\nŽymėjimai: (dab) = palyginimas su naujausia versija,\n(pask) = palyginimas su prieš tai buvusia versija, S = smulkus keitimas.",
"history-fieldset-title": "Ieškoti versijų",
- "history-show-deleted": "Tik ištrinti",
+ "history-show-deleted": "Tik ištrintos versijos",
"histfirst": "seniausi",
"histlast": "paskutiniai",
"historysize": "($1 {{PLURAL:$1|baitas|baitai|baitų}})",
"revdelete-unsuppress": "Šalinti apribojimus atkurtose versijose",
"revdelete-log": "Priežastis:",
"revdelete-submit": "Taikyti {{PLURAL:$1|pasirinktai versijai|pasirinktoms versijoms}}",
- "revdelete-success": "'''Versijos matomumas sėkmingai pakeistas.'''",
+ "revdelete-success": "Versijos matomumas pakeistas.",
"revdelete-failure": "'''Versijos rodomumas negali būti nustatytas:'''\n$1",
"logdelete-success": "'''Įvykio matomumas sėkmingai nustatytas.'''",
"logdelete-failure": "'''Sąrašo rodomumas negali būti nustatytas:'''\n$1",
"action-deleterevision": "ištrinti revizijas",
"action-deletelogentry": "trinti žurnalo įrašus",
"action-deletedhistory": "žiūrėti puslapio ištrintą istoriją",
+ "action-deletedtext": "žiūrėti ištrintą versijos tekstą",
"action-browsearchive": "ieškoti ištrintų puslapių",
"action-undelete": "atkurti puslapius",
"action-suppressrevision": "peržiūrėti ir atkurti paslėptas versijas",
"recentchanges-legend-heading": "<strong>Paaiškinimai:</strong>",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (taip pat žiūrėkite [[Special:NewPages|naujausių straipsnių sąrašą]])",
"recentchanges-submit": "Rodyti",
+ "rcfilters-tag-remove": "Pašalinti '$1'",
+ "rcfilters-other-review-tools": "Kiti peržiūros įrankiai",
"rcfilters-activefilters": "Aktyvūs filtrai",
"rcfilters-advancedfilters": "Detalūs filtrai",
"rcfilters-quickfilters": "Išsaugoti filtrai",
"apisandbox-alert-field": "Šio lauko reikšmė yra neteisinga.",
"apisandbox-continue": "Tęsti",
"apisandbox-continue-clear": "Išvalyti",
+ "apisandbox-multivalue-all-namespaces": "$1 (Visos vardų sritys)",
"apisandbox-multivalue-all-values": "$1 (Visos reikšmės)",
"booksources": "Knygų šaltiniai",
"booksources-search-legend": "Knygų šaltinių paieška",
"tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Žyma|Žymos}}]]: $2)",
"tag-mw-contentmodelchange": "turinio modulio keitimas",
"tag-mw-contentmodelchange-description": "Pakeitimai, kurie [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel keičia puslapio turinio modelį]",
+ "tag-mw-undo": "Anuliuoti",
"tags-title": "Žymos",
"tags-intro": "Šiame puslapyje yra žymų, kuriomis programinė įranga gali pažymėti keitimus, sąrašas bei jų reikšmės.",
"tags-tag": "Žymos pavadinimas",
"tags-delete-explanation-active": "<strong>Ознаката „$1“ сè уште е активна и во иднина ќе продолжи да се применува.</strong> За да го запрете ова, одете на местото/тата на кои ѝ е зададено да се применува и оневозможете ја таму.",
"tags-delete-reason": "Причина:",
"tags-delete-submit": "Неповратно избриши ја ознакава",
- "tags-delete-not-allowed": "Ð\9eзнакиÑ\82е зададени од додаÑ\82ок не можаÑ\82 да Ñ\81е бÑ\80иÑ\88аÑ\82 оÑ\81вен ако Ñ\82оа не е изÑ\80ично дозволено од додатокот.",
+ "tags-delete-not-allowed": "Ð\9eзнакиÑ\82е зададени од додаÑ\82ок не можаÑ\82 да Ñ\81е бÑ\80иÑ\88аÑ\82 оÑ\81вен ако Ñ\82оа не е изÑ\80ечно дозволено од додатокот.",
"tags-delete-not-found": "Ознаката „$1“ не постои.",
"tags-delete-too-many-uses": "Ознаката „$1“ се применува во повеќе од {{PLURAL:$2|една преработка|$2 преработки}}, што значи дека не може да се избрише.",
"tags-delete-warnings-after-delete": "Ознаката „$1“ е избришана, но наидов на {{PLURAL:$2|следново предупредување|следниве предупредувања}}:",
"tog-shownumberswatching": "ശ്രദ്ധിക്കുന്ന ഉപയോക്താക്കളുടെ എണ്ണം കാണിക്കുക",
"tog-oldsig": "താങ്കളുടെ നിലവിലുള്ള ഒപ്പ്:",
"tog-fancysig": "ഒപ്പ് ഒരു വിക്കി എഴുത്തായി പരിഗണിക്കുക (കണ്ണി സ്വയം ചേർക്കേണ്ടതില്ല)",
- "tog-uselivepreview": "തത്സമയ പ്രിവ്യൂ ഉപയോഗപ്പെടുത്തുക",
+ "tog-uselivepreview": "à´ªàµ\87à´\9càµ\8d à´µàµ\80à´£àµ\8dà´\9fàµ\81à´\82 à´²àµ\8bà´¡àµ\8d à´\9aàµ\86à´¯àµ\8dയാതàµ\86 തതàµ\8dസമയ à´ªàµ\8dà´°à´¿à´µàµ\8dà´¯àµ\82 à´\89പയàµ\8bà´\97à´ªàµ\8dà´ªàµ\86à´\9fàµ\81à´¤àµ\8dà´¤àµ\81à´\95",
"tog-forceeditsummary": "തിരുത്തുകളുടെ ചുരുക്കം നൽകിയില്ലെങ്കിൽ എന്നെ ഓർമ്മിപ്പിക്കുക",
"tog-watchlisthideown": "ഞാൻ ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടികയിൽനിന്ന് എന്റെ തിരുത്തുകൾ മറയ്ക്കുക",
"tog-watchlisthidebots": "ഞാൻ ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടികയിൽനിന്ന് യന്ത്രങ്ങൾ വരുത്തിയ തിരുത്തുകൾ മറയ്ക്കുക",
"talk": "സംവാദം",
"views": "ദർശനീയത",
"toolbox": "ഉപകരണങ്ങൾ",
+ "tool-link-userrights": "{{GENDER:$1|ഉപയോക്തൃസംഘങ്ങളിലെ}} അംഗത്വം പുനഃക്രമീകരിക്കുക",
+ "tool-link-userrights-readonly": "{{GENDER:$1|ഉപയോക്തൃസംഘങ്ങൾ}} കാണുക",
+ "tool-link-emailuser": "ഈ {{GENDER:$1|ഉപയോക്താവിന്}} ഇമെയിൽ അയയ്ക്കുക",
"imagepage": "പ്രമാണ താൾ കാണുക",
"mediawikipage": "സന്ദേശങ്ങളുടെ താൾ കാണുക",
"templatepage": "ഫലകം താൾ കാണുക",
"createacct-yourpasswordagain-ph": "രഹസ്യവാക്ക് വീണ്ടും നൽകുക",
"userlogin-remembermypassword": "ഞാൻ പ്രവേശിച്ചതായിത്തന്നെ ഓർത്തിരിക്കുക",
"userlogin-signwithsecure": "സുരക്ഷിത കണക്ഷൻ ഉപയോഗിക്കുക",
+ "cannotlogin-title": "പ്രവേശിക്കാൻ സാധിക്കുന്നില്ല",
+ "cannotlogin-text": "പ്രവേശനം സാധ്യമല്ല.",
"cannotloginnow-title": "ഇപ്പോൾ പ്രവേശിക്കാൻ കഴിയില്ല",
"cannotloginnow-text": "$1 ഉപയോഗിച്ചുകൊണ്ടിരിക്കെ പ്രവേശിക്കാൻ കഴിയില്ല.",
+ "cannotcreateaccount-title": "അംഗത്വം സൃഷ്ടിക്കാൻ സാധിച്ചില്ല",
+ "cannotcreateaccount-text": "നേരിട്ട് അംഗത്വം സൃഷ്ടിക്കുന്നതുള്ള ക്രമീകരണം ഈ വിക്കിയിൽ നിലവിലില്ല.",
"yourdomainname": "താങ്കളുടെ ഡൊമെയിൻ:",
"password-change-forbidden": "ഈ വിക്കിയിൽ രഹസ്യവാക്കുകൾ മാറ്റാനാവില്ല.",
"externaldberror": "ഒന്നുകിൽ ഡേറ്റാബേസ് സാധൂകരണത്തിൽ പ്രശ്നം ഉണ്ടായിരുന്നു അല്ലെങ്കിൽ നവീകരിക്കുവാൻ താങ്കളുടെ ബാഹ്യ അംഗത്വം താങ്കളെ അനുവദിക്കുന്നില്ല.",
"login": "പ്രവേശിക്കുക",
+ "login-security": "താങ്കളുടെ ഐകാത്മ്യം സ്ഥിരീകരിക്കുക",
"nav-login-createaccount": "പ്രവേശിക്കുക / അംഗത്വമെടുക്കുക",
"logout": "ലോഗൗട്ട്",
"userlogout": "ലോഗൗട്ട്",
"userlogin-resetpassword-link": "താങ്കൾ രഹസ്യവാക്ക് മറന്നോ?",
"userlogin-helplink2": "പ്രവേശിക്കാൻ സഹായമാവശ്യമെങ്കിൽ",
"userlogin-loggedin": "താങ്കൾ ഇപ്പോൾ തന്നെ {{GENDER:$1|$1}} ആയി പ്രവേശിച്ചിരിക്കുന്നു.\nതാഴെ ഉള്ള ഫോം ഉപയോഗിച്ച് മറ്റൊരു ഉപയോക്താവായി പ്രവേശിക്കാവുന്നതാണ്.",
+ "userlogin-reauth": "താങ്കൾ {{GENDER:$1|$1}} തന്നെയെന്ന് സ്ഥിരീകരിക്കാൻ ദയവായി വീണ്ടും ലോഗിൻ ചെയ്യുക.",
"userlogin-createanother": "മറ്റൊരു അംഗത്വമെടുക്കുക",
"createacct-emailrequired": "ഇമെയിൽ വിലാസം",
"createacct-emailoptional": "ഇമെയിൽ വിലാസം (നിർബന്ധമില്ല)",
"createacct-reason-ph": "താങ്കൾ എന്തുകൊണ്ടാണ് മറ്റൊരു അംഗത്വം എടുക്കുന്നത്",
"createacct-submit": "താങ്കളുടെ അംഗത്വം സൃഷ്ടിക്കുക",
"createacct-another-submit": "അംഗത്വമെടുക്കുക",
+ "createacct-continue-submit": "അംഗത്വം സൃഷ്ടിക്കുന്നത് തുടരുക",
+ "createacct-another-continue-submit": "അംഗത്വം സൃഷ്ടിക്കുന്നത് തുടരുക",
"createacct-benefit-heading": "താങ്കളെപ്പോലെയുള്ളവരാണ് {{SITENAME}} പടുത്തുയർത്തിയിരിക്കുന്നത്.",
"createacct-benefit-body1": "{{PLURAL:$1|തിരുത്ത്|തിരുത്തുകൾ}}",
"createacct-benefit-body2": "{{PLURAL:$1|താൾ|താളുകൾ}}",
"nocookiesnew": "ഉപയോക്തൃഅംഗത്വം ഉണ്ടാക്കിയിരിക്കുന്നു. പക്ഷെ താങ്കൾ ലോഗിൻ ചെയ്തിട്ടില്ല. {{SITENAME}} സംരംഭത്തിൽ ലോഗിൻ ചെയ്യാൻ കുക്കികൾ സജ്ജമാക്കിയിരിക്കണം. താങ്കളുടെ കമ്പ്യൂട്ടറിൽ നിലവിൽ കുക്കികൾ പ്രവർത്തനരഹിതമാക്കിയിരിക്കുന്നു. അത് സജ്ജമാക്കിയ ശേഷം താങ്കളുടെ ഉപയോക്തൃനാമവും രഹസ്യവാക്കും ഉപയോഗിച്ച് ലോഗിൻ ചെയ്യൂ.",
"nocookieslogin": "{{SITENAME}} സംരംഭത്തിൽ ലോഗിൻ ചെയ്യുവാൻ കുക്കികൾ സജ്ജമാക്കിയിരിക്കണം. പക്ഷെ താങ്കൾ കുക്കികൾ സജ്ജമാക്കിയിട്ടില്ല. കുക്കികൾ സജ്ജമാക്കിയതിനു ശേഷം വീണ്ടും ലോഗിൻ ചെയ്യാൻ ശ്രമിക്കൂ.",
"nocookiesfornew": "ഞങ്ങൾക്ക് ഇതിന്റെ സ്രോതസ് കണ്ടെത്താനാകാതിരുന്നതിനാൽ ഉപയോക്തൃ അംഗത്വം സൃഷ്ടിച്ചിട്ടില്ല.\nകുക്കികൾ സജ്ജമാക്കിയ ശേഷം, താൾ വീണ്ടുമെടുത്ത്, വീണ്ടും ശ്രമിക്കുക.",
+ "createacct-loginerror": "താങ്കളുടെ അംഗത്വം വിജയകരമായി സൃഷ്ടിക്കപ്പെട്ടിരിക്കുന്നു, എന്നാൽ പ്രസ്തുത അംഗത്വമുപയോഗിച്ച് യാന്ത്രികമായി പ്രവേശിക്കാൻ സാധിച്ചില്ല. ദയവായി [[Special:UserLogin|ലോഗിൻ താൾ]] ഉപയോഗിച്ചു പ്രവേശിക്കാൻ ശ്രമിക്കുക.",
"noname": "താങ്കൾ സാധുവായ ഉപയോക്തൃനാമം സൂചിപ്പിച്ചിട്ടില്ല.",
"loginsuccesstitle": "സ്വാഗതം! \nതാങ്കൾ വിജയകരമായി പ്രവേശിച്ചിരിക്കുന്നു.",
"loginsuccess": "'''{{SITENAME}} സംരംഭത്തിൽ \"$1\" എന്ന പേരിൽ താങ്കൾ ലോഗിൻ ചെയ്തിരിക്കുന്നു.'''",
"nosuchusershort": "\"$1\" എന്ന പേരിൽ ഒരു ഉപയോക്താവ് ഇല്ല. അക്ഷരങ്ങൾ ഒന്നു കൂടി പരിശോധിക്കുക.",
"nouserspecified": "ഉപയോക്തൃനാമം നിർബന്ധമായും ചേർക്കണം.",
"login-userblocked": "ഈ ഉപയോക്താവ് തടയപ്പെട്ടിരിക്കുന്നു. പ്രവേശനം അനുവദിക്കുന്നില്ല.",
- "wrongpassword": "രഹസàµ\8dയവാà´\95àµ\8dà´\95àµ\8d à´¤àµ\86à´±àµ\8dറാണàµ\8d, വീണ്ടും ശ്രമിക്കുക.",
+ "wrongpassword": "താà´\99àµ\8dà´\95ൾ നൽà´\95à´¿à´¯ à´\89പയàµ\8bà´\95àµ\8dà´¤àµ\83നാമമàµ\8b രഹസàµ\8dയവാà´\95àµ\8dà´\95àµ\8b à´¤àµ\86à´±àµ\8dറാണàµ\8d, ദയവായി വീണ്ടും ശ്രമിക്കുക.",
"wrongpasswordempty": "രഹസ്യവാക്ക് നൽകിയിരുന്നില്ല. വീണ്ടും ശ്രമിക്കുക.",
"passwordtooshort": "രഹസ്യവാക്കിൽ കുറഞ്ഞതു {{PLURAL:$1|ഒരു അക്ഷരം|$1 അക്ഷരങ്ങൾ}} ഉണ്ടായിരിക്കണം.",
"passwordtoolong": "രഹസ്യവാക്കിൽ പരമാവധി {{PLURAL:$1|ഒരു അക്ഷരം|$1 അക്ഷരങ്ങൾ}} മാത്രമേ പാടുള്ളു.",
"eauthentsent": "താങ്കൾ നൽകിയിട്ടുള്ള ഇമെയിൽ വിലാസത്തിലേക്ക് സ്ഥിരീകരണത്തിനായി ഒരു ഇമെയിൽ അയച്ചിട്ടുണ്ട്. ആ വിലാസത്തിലേക്ക് മറ്റൊരു ഇമെയിൽ അയക്കുന്നതിനു മുൻപായി, അംഗത്വം താങ്കളുടേതു തന്നെ എന്നു ഉറപ്പു വരുത്തുന്നതിന്, ഇപ്പോൾ അയച്ചിട്ടുള്ള ഇമെയിലിലെ നിർദ്ദേശങ്ങൾ താങ്കൾ പാലിക്കേണ്ടതാണ്.",
"throttled-mailpassword": "കഴിഞ്ഞ {{PLURAL:$1|മണിക്കൂറിനുള്ളിൽ |$1 മണിക്കൂറുകൾക്കുള്ളിൽ}} രഹസ്യവാക്ക് പുനർസജ്ജീകരിക്കാനുള്ള ഒരു ഇമെയിൽ അയച്ചിട്ടുണ്ട്. ദുരുപയോഗം ഒഴിവാക്കാൻ {{PLURAL:$1|ഒരു മണിക്കൂറിനുള്ളിൽ |$1 മണിക്കൂറുകൾക്കുള്ളിൽ}} രഹസ്യവാക്ക് പുനർസജ്ജീകരിക്കാനുള്ള ഒരു ഇമെയിൽ മാത്രമേ അയയ്ക്കുകയുള്ളു.",
"mailerror": "മെയിൽ അയയ്ക്കുന്നതിൽ പിഴവ്: $1",
- "acct_creation_throttle_hit": "കഴിഞ്ഞ ഒരു ദിവസത്തിനുള്ളിൽ താങ്കളുടെ ഐ.പി. വിലാസത്തിൽ നിന്നുമുള്ള സന്ദർശകർ {{PLURAL:$1|1 അംഗത്വം|$1 അംഗത്വങ്ങൾ}} എടുത്തിട്ടുണ്ട്, പ്രസ്താവിത സമയത്തിനുള്ളിൽ എടുക്കാവുന്ന ഏറ്റവും കൂടിയ പരിധിയാണിത്.\nഅതിന്റെ ഫലമായി, ഈ ഐ.പി.യിൽ നിന്നുള്ള സന്ദർശകർക്ക് ഇപ്പോൾ കൂടുതൽ അംഗത്വമെടുക്കാൻ കഴിയുന്നതല്ല.",
+ "acct_creation_throttle_hit": "കഴിഞ്ഞ $2 സമയത്തിനുള്ളിൽ താങ്കളുടെ ഐ.പി. വിലാസത്തിൽ നിന്നുമുള്ള സന്ദർശകർ {{PLURAL:$1|1 അംഗത്വം|$1 അംഗത്വങ്ങൾ}} എടുത്തിട്ടുണ്ട്, പ്രസ്താവിത സമയത്തിനുള്ളിൽ എടുക്കാവുന്ന ഏറ്റവും കൂടിയ പരിധിയാണിത്.\nഅതിന്റെ ഫലമായി, ഈ ഐ.പി.യിൽ നിന്നുള്ള സന്ദർശകർക്ക് ഇപ്പോൾ കൂടുതൽ അംഗത്വമെടുക്കാൻ കഴിയുന്നതല്ല.",
"emailauthenticated": "താങ്കൾ ഇമെയിൽ വിലാസം $2, $3-ന് സ്ഥിരീകരിച്ചതാണ്.",
"emailnotauthenticated": "താങ്കളുടെ ഇമെയിൽ വിലാസം ഇതുവരെ സ്ഥിരീകരിക്കപ്പെട്ടിട്ടില്ല. താഴെപ്പറയുന്നവയ്ക്ക് ഇമെയിലുകൾ അയയ്ക്കാൻ സാദ്ധ്യമല്ല.",
"noemailprefs": "ഈ ക്രമീകരണങ്ങൾ പ്രവർത്തിക്കുവാൻ സാധുവായ ഒരു ഇമെയിൽ വിലാസം ഉൾപ്പെടുത്തുക.",
"createacct-another-realname-tip": "താങ്കളുടെ യഥാർത്ഥ പേര് നൽകണമെന്നു നിർബന്ധമില്ല.\n\nഎങ്കിലും അങ്ങനെ ചെയ്താൽ, ഉപയോക്താക്കൾക്ക് അവരരവരുടെ പേരിൽ തന്നെ തങ്ങളുടെ സൃഷ്ടിക്ക് കടപ്പാട് ലഭിക്കുന്നതാണ്.",
"pt-login": "പ്രവേശിക്കുക",
"pt-login-button": "പ്രവേശിക്കുക",
+ "pt-login-continue-button": "പ്രവേശനപ്രക്രിയ തുടരുക",
"pt-createaccount": "അംഗത്വമെടുക്കുക",
"pt-userlogout": "ലോഗൗട്ട്",
"php-mail-error-unknown": "പി.എച്ച്.പി.യുടെ main() ഫങ്ഷനിൽ അപരിചിതമായ പിഴവ്",
"changepassword-success": "താങ്കളുടെ രഹസ്യവാക്ക് വിജയകരമായി മാറ്റിയിരിക്കുന്നു!",
"changepassword-throttled": "കുറഞ്ഞ സമയത്തിനുള്ളിൽ താങ്കൾ നിരവധി തവണ പ്രവേശിക്കാൻ ശ്രമിച്ചിരിക്കുന്നു.\nവീണ്ടും ശ്രമിക്കുന്നതിനു മുമ്പ് ദയവായി $1 കാത്തിരിക്കുക.",
"botpasswords": "യന്ത്രത്തിനുള്ള രഹസ്യവാക്കുകൾ",
+ "botpasswords-disabled": "യാന്ത്രിക രഹസ്യവാക്കുകൾ അനുവദനീയമല്ല.",
"botpasswords-label-appid": "യന്ത്രത്തിന്റെ പേര്:",
"botpasswords-label-create": "സൃഷ്ടിക്കുക",
"botpasswords-label-update": "പുതുക്കുക",
"mergehistory-empty": "സംയോജിപ്പിക്കാവുന്ന പതിപ്പുകളൊന്നും ഇല്ല.",
"mergehistory-done": "$1-ന്റെ {{PLURAL:$3|പതിപ്പ്|പതിപ്പുകൾ}} [[:$2]]-ലേക്കു വിജയകരമായി സംയോജിപ്പിച്ചിരിക്കുന്നു.",
"mergehistory-fail": "താളുകളുടെ നാൾവഴി സംയോജനം നടത്താൻ സാദ്ധ്യമല്ല. താളുകളും സമയവിവരങ്ങളും ഒന്നു കൂടി പരിശോധിക്കുക.",
+ "mergehistory-fail-permission": "താങ്കൾക്ക് നാൾവഴികൾ ലയിപ്പിക്കാനുള്ള അനുമതി ഇല്ല.",
+ "mergehistory-fail-self-merge": "സ്രോതസ്സ് - ലക്ഷ്യ താളുകൾക്ക് ഒരേ പേര് ഉണ്ടാകാൻ പാടില്ല.",
"mergehistory-fail-toobig": "{{PLURAL:$1|ഒരു നാൾപ്പതിപ്പിൽ|$1 നാൾപ്പതിപ്പുകൾ}} മാറ്റണമെന്നതിനാൽ നാൾവഴി ലയിപ്പിക്കാൽ നടത്താനാവില്ല.",
"mergehistory-no-source": "സ്രോതസ്സ് താളായ $1 നിലവിലില്ല.",
"mergehistory-no-destination": "ലക്ഷ്യ താളായ $1 നിലവിലില്ല.",
"search-file-match": "(പ്രമാണ ഉള്ളടക്കവുമായി ഒത്തുപോകുന്നുണ്ട്)",
"search-suggest": "താങ്കൾ ഉദ്ദേശിച്ചത് $1 എന്നാണോ",
"search-rewritten": "$1 എന്നതിനുള്ള ഫലങ്ങൾ കാണിക്കുന്നു. പകരം $2 എന്നതിനായി തിരയുക.",
- "search-interwiki-caption": "സഹോദര സംരംഭങ്ങൾ",
+ "search-interwiki-caption": "സഹàµ\8bദര à´¸à´\82à´°à´\82à´à´\99àµ\8dà´\99ളിൽനിനàµ\8dà´¨àµ\81à´³àµ\8dà´³ à´«à´²à´\99àµ\8dà´\99ൾ",
"search-interwiki-default": "$1 വിക്കിയിൽ നിന്നുള്ള ഫലങ്ങൾ:",
"search-interwiki-more": "(കൂടുതൽ)",
+ "search-interwiki-more-results": "കൂടുതൽ ഫലങ്ങൾ",
"search-relatedarticle": "ബന്ധപ്പെട്ടവ",
"searchrelated": "ബന്ധപ്പെട്ടവ",
"searchall": "എല്ലാം",
"search-external": "ബാഹ്യ അന്വേഷണം",
"searchdisabled": "{{SITENAME}} സംരംഭത്തിൽ തിരച്ചിൽ ദുർബലപ്പെടുത്തിയിരിക്കുന്നു. താങ്കൾക്ക് ഗൂഗിൾ ഉപയോഗിച്ച് തത്കാലം തിരച്ചിൽ നടത്താവുന്നതാണ്. പക്ഷെ ഗൂഗിളിൽ {{SITENAME}} സംരംഭത്തിന്റെ സൂചിക കാലഹരണപ്പെട്ടതായിരിക്കാൻ സാദ്ധ്യതയുണ്ട്.",
"search-error": "തിരയുന്നതിനിടെ ഒരു പിഴവുണ്ടായി: $1",
+ "search-warning": "തിരയുന്നതിനിടെ ഒരു മുന്നറിയിപ്പു ലഭിച്ചു: $1",
"preferences": "ക്രമീകരണങ്ങൾ",
"mypreferences": "ക്രമീകരണങ്ങൾ",
"prefs-edits": "ആകെ തിരുത്തുകൾ:",
"prefs-editwatchlist-clear": "ശ്രദ്ധിക്കുന്നവയുടെ പട്ടിക ശൂന്യമാക്കുക",
"prefs-watchlist-days": "ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടികയിൽ പ്രദർശിപ്പിക്കേണ്ട പരമാവധി ദിവസങ്ങൾ:",
"prefs-watchlist-days-max": "പരമാവധി {{PLURAL:$1|ഒരു ദിവസം|$1 ദിവസങ്ങൾ}}",
- "prefs-watchlist-edits": "à´¶àµ\8dà´°à´¦àµ\8dധിà´\95àµ\8dà´\95àµ\81à´¨àµ\8dà´¨ താളàµ\81à´\95à´³àµ\81à´\9fàµ\86 à´ªà´\9fàµ\8dà´\9fà´¿à´\95à´¯àµ\81à´\9fàµ\86 വിà´\95സിത à´°àµ\82പതàµ\8dതിൽ à´ªàµ\8dരദർശിപàµ\8dപിà´\95àµ\8dà´\95àµ\87à´£àµ\8dà´\9f പരമാവധി മാറàµ\8dà´±à´\99àµ\8dà´\99ൾ:",
+ "prefs-watchlist-edits": "ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടികയിൽ പ്രദർശിപ്പിക്കേണ്ട പരമാവധി മാറ്റങ്ങൾ:",
"prefs-watchlist-edits-max": "പരമാവധി 1000 തിരുത്തുകൾ",
"prefs-watchlist-token": "ശ്രദ്ധിക്കുന്നവയുടെ പട്ടികയ്ക്കുള്ള അടയാളപദം:",
"prefs-misc": "പലവക",
"timezoneregion-europe": "യൂറോപ്പ്",
"timezoneregion-indian": "ഇന്ത്യൻ മഹാസമുദ്രം",
"timezoneregion-pacific": "ശാന്തസമുദ്രം",
- "allowemail": "എനിക്ക് എഴുത്തയക്കാൻ മറ്റുള്ളവരെ അനുവദിക്കുക",
+ "allowemail": "എനിക്ക് ഈ-മെയിൽ അയയ്ക്കാൻ മറ്റുള്ളവരെ അനുവദിക്കുക",
+ "email-allow-new-users-label": "എനിക്ക് ഈ-മെയിൽ അയയ്ക്കാൻ പുതിയ ഉപയോക്താക്കളെ അനുവദിക്കുക",
"email-blacklist-label": "ഈ ഉപയോക്താക്കൾ എനിക്ക് ഇമെയിൽ അയയ്ക്കുന്നത് തടയുക:",
"prefs-searchoptions": "തിരച്ചിൽ",
"prefs-namespaces": "നാമമേഖലകൾ",
"youremail": "ഇമെയിൽ:",
"username": "{{GENDER:$1|ഉപയോക്തൃനാമം}}:",
"prefs-memberingroups": "{{GENDER:$2|അംഗത്വമുള്ള}} {{PLURAL:$1|സംഘം|സംഘങ്ങൾ}}:",
+ "group-membership-link-with-expiry": "$1 ($2 വരെ)",
"prefs-registration": "അംഗത്വം എടുത്തത്:",
"yourrealname": "യഥാർത്ഥ പേര്:",
"yourlanguage": "ഭാഷ:",
"Nemo bis",
"Mbrt",
"Muhdnurhidayat",
- "Jeluang Terluang"
+ "Jeluang Terluang",
+ "Zulfadli51"
]
},
"tog-underline": "Garis bawah pautan:",
"nosuchusershort": "Pengguna \"$1\" tidak wujud. Sila semak ejaan anda.",
"nouserspecified": "Sila nyatakan nama pengguna.",
"login-userblocked": "Pengguna ini disekat. Log masuk tidak dibenarkan.",
- "wrongpassword": "Kata laluan yang dimasukkan adalah salah. Sila cuba lagi.",
+ "wrongpassword": "Dimasukkan nama pengguna atau kata laluan yang salah.\nSila cuba lagi.",
"wrongpasswordempty": "Kata laluan yang dimasukkan adalah kosong. Sila cuba lagi.",
"passwordtooshort": "Kata laluan mestilah sekurang-kurangnya {{PLURAL:$1|1 aksara|$1 aksara}}.",
"passwordtoolong": "Kata laluan tidak boleh melebihi $1 aksara.",
"botpasswords-insert-failed": "Gagal untuk menambah nama bot \"$1\". Adakah ia telah digunakan?",
"botpasswords-update-failed": "Gagal untuk mengemas kini nama bot \"$1\". Adakah ia telah dipadam?",
"botpasswords-created-title": "Kata laluan bot telah dicipta",
- "botpasswords-created-body": "Kata laluan bot untuk nama bot \"$1\" bagi pengguna \"$2\" telah dicipta.",
+ "botpasswords-created-body": "Kata laluan bot untuk nama bot \"$1\" bagi {{GENDER:$2|pengguna}} \"$2\" telah dicipta.",
"botpasswords-updated-title": "Kata laluan bot telah dikemaskinikan",
- "botpasswords-updated-body": "Kata laluan bot untuk nama bot \"$1\" bagi pengguna \"$2\" telah dikemaskini.",
+ "botpasswords-updated-body": "Kata laluan bot untuk nama bot \"$1\" bagi {GENDER:$2|pengguna}} \"$2\" telah dikemaskini.",
"botpasswords-deleted-title": "Kata laluan bot telah dipadam",
- "botpasswords-deleted-body": "Kata laluan bot untuk nama bot \"$1\" bagi pengguna \"$2\" telah dipadam.",
+ "botpasswords-deleted-body": "Kata laluan bot untuk nama bot \"$1\" bagi {{GENDER:$2|pengguna}} \"$2\" telah dipadam.",
"botpasswords-newpassword": "Kata laluan baru untuk log masuk dengan <strong>$1</strong> adalah <strong>$2</strong>. <em>Sila catatkan ini untuk rujukan masa depan.</em> <br> (Untuk bot-bot lama yang memerlukan nama log masuk agar sama dengan nama pengguna akhirnya, anda juga boleh menggunakan <strong>$3</strong> sebagai nama pengguna dan <strong>$4</strong> sebagai kata laluan.)",
"botpasswords-no-provider": "BotPasswordsSessionProvider tidak tersedia.",
"botpasswords-restriction-failed": "Bot sekatan kata laluan menghalang log masuk ini.",
"passwordreset-emailtext-user": "Pengguna $1 telah memohon supaya kata laluan diset semula untuk {{SITENAME}} anda ($4). {{PLURAL:$3|Akaun|Akaun-akaun}} pengguna yang berikut\ndikaitkan dengan alamat e-mel ini:\n\n$2\n\n{{PLURAL:$3|Kata|Kata-kata}} laluan sementara ini akan luput dalam masa $5 hari. Anda harus log masuk dan membuat kata laluan yang baru sekarang. Jika permohonan ini dibuat oleh orang lain, atau jika anda teringat kembali kata laluan asal anda dan anda tidak lagi berhasrat untuk mengubahnya, anda boleh mengabaikan pesanan ini dan terus menggunakan kata laluan lama anda.",
"passwordreset-emailelement": "Nama pengguna: \n$1\n\nKata laluan sementara: \n$2",
"passwordreset-emailsentemail": "Jika ini ialah alamat e-mel yang terdaftar untuk akaun anda, maka e-mel set semula kata laluan akan dihantar.",
+ "passwordreset-emailsentusername": "Sekiranya terdapat alamat e-mel yang dikaitkan dengan nama pengguna ini, maka e-mel set semula kata laluan akan dihantar.",
+ "passwordreset-nocaller": "Pemanggil perlu diberikan",
+ "passwordreset-nosuchcaller": "Pemanggil tidak wujud: $1",
+ "passwordreset-ignored": "Reset kata laluan tidak dikendalikan. Mungkin tiada pembekal tidak dikonfigurasikan?",
+ "passwordreset-invalidemail": "Alamat e-mel tidak sah",
+ "passwordreset-nodata": "Tiada nama pengguna atau alamat e-mel dibekalkan",
"changeemail": "Tukar atau padamkan alamat e-mel",
"changeemail-header": "Lengkapkan borang ini untuk menukar alamat e-mel anda. Jika anda ingin memutuskan sebarang hubungan alamat e-mel daripada akaun anda, biarkan ruangan alamat e-mel kosong ketika menghantar borang.",
"changeemail-no-info": "Anda hendaklah log masuk terlebih dahulu untuk mencapai laman ini secara terus.",
"minoredit": "Ini ialah suntingan kecil",
"watchthis": "Pantau laman ini",
"savearticle": "Paparkan Laman",
+ "savechanges": "Simpan perubahan",
"publishpage": "Terbitkan",
"publishchanges": "Terbit perubahan",
"preview": "Pralihat",
"showpreview": "Paparkan pralihat",
"showdiff": "Lihat perubahan",
- "blankarticle": "<strong>Amaran:</strong> Laman yang sedang anda ciptakan adalah kosong.\nJika anda menklik \"$1\" sekali lagi, laman ini akan diciptakan tanpa sebarang kandungan.",
+ "blankarticle": "<strong>Amaran:</strong> Laman yang anda sedang cipta adalah kosong.\nJika anda mengklik \"$1\" sekali lagi, laman ini akan dicipta tanpa sebarang kandungan.",
"anoneditwarning": "<strong>Amaran:</strong> Anda tidak log masuk. Alamat IP anda akan disiarkan kepada umum jika anda membuat sebarang suntingan. Jika anda <strong>[$1 log masuk]</strong> atau <strong>[$2 membuka akaun]</strong>, suntingan anda akan diatribusikan kepada nama pengguna anda di samping manfaat-manfaat lain.",
"anonpreviewwarning": "''Anda belum log masuk. Jika anda menyimpan laman ini, alamat IP anda akan direkodkan dalam sejarah penyuntingan laman ini.''",
"missingsummary": "'''Peringatan:''' Anda tidak menyatakan ringkasan suntingan. Klik '''Simpan''' sekali lagi untuk menyimpan suntingan ini tanpa ringkasan.",
"selfredirect": "<strong>Amaran:</strong> Anda sedang melencongkan laman ini kepada dirinya sendiri.\nMungkin anda telah menyatakan sasaran yang salah untuk lencongan ini ataupun sedang tersalah menyunting halaman.\nJika anda mengklik \"$1\" semula, maka lencongan tetap akan dihasilkan.",
- "missingcommenttext": "Sila masukkan komen dalam ruangan di bawah.",
+ "missingcommenttext": "Sila masukkan komen.",
"missingcommentheader": "<strong>Peringatan:</strong> Anda belum menyatakan tajuk perkara bagi komen ini.\nJika anda klik '''$1''' sekali lagi, suntingan anda akan tersimpan tanpa tajuk.",
- "summary-preview": "Pralihat ringkasan:",
+ "summary-preview": "Pralihat ringkasan suntingan:",
"subject-preview": "Pralihat perkara:",
"previewerrortext": "Ralat berlaku ketika cuba mempratayangkan hasil suntingan anda.",
"blockedtitle": "Pengguna disekat",
"blockedtext": "<strong>Nama pengguna atau alamat IP anda telah disekat.</strong>\n\nSekatan ini dilakukan oleh $1.\nSebab yang telah diberikan ialah <em>$2</em>.\n\n* Sekatan mula: $8\n* Sekatan tamat: $6\n* Pengguna sasaran: $7\n\nAnda boleh hubungi $1 atau [[{{MediaWiki:Grouppage-sysop}}|penyelia]] yang lain untuk membincangkan sekatan ini.\n\nSila ambil perhatian bahawa anda tidak boleh menggunakan ciri \"kirim e-mel kepada pengguna ini\" kecuali sekiranya anda telah menetapkan alamat e-mel yang sah dalam [[Special:Preferences|keutamaan pengguna]] anda dan anda tidak disekat daripada menggunakannya.\n\nAlamat IP semasa anda ialah $3, dan ID sekatan ialah #$5.\nSila sertakan maklumat-maklumat di atas dalam sebarang pertanyaan yang anda membuat.",
"autoblockedtext": "Alamat IP anda telah disekat secara automatik kerana ia digunakan oleh pengguna lain yang disekat oleh $1.\nSebab yang dinyatakan ialah:\n\n:<em>$2</em>\n\n* Sekatan mula: $8\n* Sekatan tamat: $6\n* Pengguna sasaran: $7\n\nAnda boleh menghubungi $1 atau seorang [[{{MediaWiki:Grouppage-sysop}}|penyelia]] yang lain untuk membincangkan sekatan ini.\n\nSila ambil perhatian bahawa anda tidak boleh menggunakan ciri \"kirim e-mel kepada pengguna ini\" kecuali sekiranya anda telah menetapkan alamat e-mel yang sah dalam [[Special:Preferences|keutamaan pengguna]] anda dan anda tidak disekat daripada menggunakannya.\n\nAlamat IP semasa anda ialah $3, dan ID sekatan ialah #$5.\nSila sertakan maklumat-maklumat di atas dalam sebarang pertanyaan yang anda membuat.",
+ "systemblockedtext": "Nama pengguna atau alamat IP anda telah diblok secara automatik oleh MediaWiki. Alasan diberikan ialah:\n\n:<em>$2</em>\n\n* Mula blok: $8\n* Luput blok: $6\n* Yang diblok yang dimaksudkan: $7\n\nAlamat IP anda sekarang ialah $3.\nSila sertakan butiran di atas dalam sebarang pertanyaan yang anda buat.",
"blockednoreason": "tiada sebab diberikan",
"whitelistedittext": "Anda hendaklah $1 terlebih dahulu untuk menyunting laman.",
"confirmedittext": "Anda perlu mengesahkan alamat e-mel anda terlebih dahulu untuk menyunting mana-mana laman. Sila tetapkan dan sahkan alamat e-mel anda melalui [[Special:Preferences|laman keutamaan]].",
"accmailtext": "Kata laluan janaan rawak untuk [[User talk:$1|$1]] telah dikirim kepada $2. Anda boleh menukarnya di halaman ''[[Special:ChangePassword|tukar kata laluan]]'' sebaik sahaja log masuk.",
"newarticle": "(Baru)",
"newarticletext": "Anda telah mengikuti pautan ke laman yang belum wujud.\nUntuk mencipta laman ini, sila taip dalam kotak di bawah\n(lihat [$1 laman bantuan] untuk maklumat lanjut).\nJika anda tiba di sini secara tak sengaja, hanya klik butang '''back''' pada pelayar anda.",
- "anontalkpagetext": "----''Ini ialah laman perbincangan bagi pengguna tanpa nama yang belum membuka akaun atau tidak log masuk.\nOleh itu, kami terpaksa menggunakan alamat IP untuk mengenal pasti pengguna tersebut. Alamat IP ini boleh dikongsi oleh ramai pengguna.\nSekiranya anda ialah seorang pengguna tanpa nama dan berasa bahawa komen yang tidak kena-mengena telah ditujukan kepada anda, sila [[Special:CreateAccount|buka akaun baru]] atau [[Special:UserLogin|log masuk]] untuk mengelakkan sebarang kekeliruan dengan pengguna tanpa nama yang lain.''",
+ "anontalkpagetext": "<em>Ini ialah laman perbincangan bagi pengguna tanpa nama yang belum membuka akaun atau tidak menggunakannya.</em>\nOleh itu, kami terpaksa menggunakan alamat IP angka untuk mengenal pasti pengguna tersebut. Alamat IP ini boleh dikongsi oleh ramai pengguna.\nSekiranya anda ialah seorang pengguna tanpa nama dan berasa bahawa komen yang tidak relevan telah ditujukan kepada anda, sila [[Special:CreateAccount|buka akaun baru]] atau [[Special:UserLogin|log masuk]] untuk mengelakkan sebarang kekeliruan dengan pengguna tanpa nama yang lain.",
"noarticletext": "Laman ini buat masa sekarang tidak berteks. Anda boleh [[Special:Search/{{PAGENAME}}|cari tajuk bagi laman ini]] dalam laman-laman lain, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} cari log-log yang berkaitan], atau [{{fullurl:{{FULLPAGENAME}}|action=edit}} sunting laman ini]</span>.",
"noarticletext-nopermission": "Tiada teks dalam laman ini ketika ini.\nAnda boleh [[Special:Search/{{PAGENAME}}|mencari tajuk laman ini]] dalam laman lain,\natau <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} mencari log yang berkaitan]</span>.",
"missing-revision": "Semakan #$1 pada halaman \"{{FULLPAGENAME}}\" tidak wujud.\n\nHal ini biasanya disebabkan oleh pautan sejarah yang lapuk ke halaman yang sudah dihapuskan.\nButirannya boleh didapati di [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log penghapusan].",
"tag-mw-changed-redirect-target": "Destino de redirecionamento alterado",
"tag-mw-changed-redirect-target-description": "Edições que modificam o destino de um redirecionamento",
"tag-mw-blank": "Esvaziamento",
- "tag-mw-blank-description": "Edita que esvaziam uma página",
+ "tag-mw-blank-description": "Edições que esvaziam uma página",
"tag-mw-replace": "Substituição",
"tag-mw-replace-description": "Edições que removem mais de 90% do conteúdo de uma página",
"tag-mw-rollback": "Reversão",
',' => "\xc2\xa0", # nbsp
'.' => ','
];
+$minimumGroupingDigits = 2;
$linkTrail = '/^([абвгґджзеёжзійклмнопрстуўфхцчшыьэюяćčłńśšŭźža-z]+)(.*)$/sDu';
$linkTrail = '/^([a-zабвгдежзийклмнопрстуфхцчшщъыьэюя]+)(.*)$/sDu';
$separatorTransformTable = [ ',' => "\xc2\xa0", '.' => ',' ];
+$minimumGroupingDigits = 2;
];
$separatorTransformTable = [ ',' => "\xc2\xa0", '.' => ',' ];
+$minimumGroupingDigits = 2;
+
$linkTrail = '/^([a-záéíóúñ]+)(.*)$/sDu';
];
$separatorTransformTable = [ ',' => "\xc2\xa0", '.' => ',' ];
+$minimumGroupingDigits = 2;
+
$linkTrail = '/^([äöõšüža-z]+)(.*)$/sDu';
$datePreferences = [
',' => "\xc2\xa0", # nbsp
'.' => ','
];
+$minimumGroupingDigits = 2;
$fallback8bitEncoding = 'UTF-8';
',' => "\xc2\xa0",
'.' => ',',
];
+$minimumGroupingDigits = 2;
$fallback8bitEncoding = 'windows-1254';
',' => "\xc2\xa0",
'.' => ',',
];
+$minimumGroupingDigits = 2;
$fallback8bitEncoding = 'windows-1251';
];
$separatorTransformTable = [ ',' => "\xc2\xa0", '.' => ',' ];
+$minimumGroupingDigits = 2;
+
$linkTrail = '/^([äöüėëijßəğåůæœça-z]+)(.*)$/sDu';
// Remove German aliases
];
$separatorTransformTable = [ ',' => '.', '.' => ',' ];
+$minimumGroupingDigits = 2;
$specialPageAliases = [
'Allmessages' => [ 'Hemû_Peyam' ],
];
$fallback8bitEncoding = 'iso-8859-2';
+
$separatorTransformTable = [
',' => "\xc2\xa0", // T4749
'.' => ','
];
+$minimumGroupingDigits = 2;
$linkTrail = '/^([a-zęóąśłżźćńĘÓĄŚŁŻŹĆŃ]+)(.*)$/sDu';
',' => "\xc2\xa0", # nbsp
'.' => ','
];
+$minimumGroupingDigits = 2;
$fallback8bitEncoding = 'windows-1251';
$linkPrefixExtension = false;
',' => "\xc2\xa0", # nbsp
'.' => ','
];
+$minimumGroupingDigits = 2;
$fallback8bitEncoding = 'windows-1251';
$linkPrefixExtension = true;
* @param mixed $channel Unique identifier for the channel. See function outputChanneled.
*/
protected function output( $out, $channel = null ) {
+ // Try to periodically flush buffered metrics to avoid OOMs
+ $stats = MediaWikiServices::getInstance()->getStatsdDataFactory();
+ if ( $stats->getDataCount() > 1000 ) {
+ MediaWiki::emitBufferedStatsdData( $stats, $this->getConfig() );
+ }
if ( $this->mQuiet ) {
return;
}
$lbFactory->setAgentName(
mb_strlen( $agent ) > 15 ? mb_substr( $agent, 0, 15 ) . '...' : $agent
);
- self::setLBFactoryTriggers( $lbFactory );
+ self::setLBFactoryTriggers( $lbFactory, $this->getConfig() );
}
/**
* @param LBFactory $LBFactory
+ * @param Config $config
* @since 1.28
*/
- public static function setLBFactoryTriggers( LBFactory $LBFactory ) {
+ public static function setLBFactoryTriggers( LBFactory $LBFactory, Config $config ) {
+ $services = MediaWikiServices::getInstance();
+ $stats = $services->getStatsdDataFactory();
// Hook into period lag checks which often happen in long-running scripts
- $lbFactory = MediaWikiServices::getInstance()->getDBLoadBalancerFactory();
+ $lbFactory = $services->getDBLoadBalancerFactory();
$lbFactory->setWaitForReplicationListener(
__METHOD__,
- function () {
- global $wgCommandLineMode;
+ function () use ( $stats, $config ) {
// Check config in case of JobRunner and unit tests
- if ( $wgCommandLineMode ) {
+ if ( $config->get( 'CommandLineMode' ) ) {
DeferredUpdates::tryOpportunisticExecute( 'run' );
}
+ // Try to periodically flush buffered metrics to avoid OOMs
+ MediaWiki::emitBufferedStatsdData( $stats, $config );
}
);
// Check for other windows to run them. A script may read or do a few writes
// to the master but mostly be writing to something else, like a file store.
$lbFactory->getMainLB()->setTransactionListener(
__METHOD__,
- function ( $trigger ) {
- global $wgCommandLineMode;
+ function ( $trigger ) use ( $stats, $config ) {
// Check config in case of JobRunner and unit tests
- if ( $wgCommandLineMode && $trigger === IDatabase::TRIGGER_COMMIT ) {
+ if ( $config->get( 'CommandLineMode' ) && $trigger === IDatabase::TRIGGER_COMMIT ) {
DeferredUpdates::tryOpportunisticExecute( 'run' );
}
+ // Try to periodically flush buffered metrics to avoid OOMs
+ MediaWiki::emitBufferedStatsdData( $stats, $config );
}
);
}
public function __construct() {
parent::__construct();
- // @codingStandardsIgnoreStart Ignore long line warnings.
+ // phpcs:disable Generic.Files.LineLength
$this->data = [
"",
"United States of America", // 7bit ASCII
. "Sara%20Sidle%7CSofia%20Curtis%7CS%C3%A9rie%20t%C3%A9l%C3%A9vis%C3%A9e%7CWallace%20Langham%7C"
. "Warrick%20Brown%7CWendy%20Simms%7C%C3%89tats-Unis"
];
- // @codingStandardsIgnoreEnd
+ // phpcs:enable
$this->addDescription( "Benchmark for using a regexp vs. mb_check_encoding " .
"to check for UTF-8 encoding." );
require_once __DIR__ . '/Maintenance.php';
-// @codingStandardsIgnoreStart MediaWiki.NamingConventions.ValidGlobalName.wgPrefix
-global $optionsWithArgs;
-global $optionsWithoutArgs;
-// @codingStandardsIgnoreEnd
+// phpcs:ignore MediaWiki.NamingConventions.ValidGlobalName.wgPrefix
+global $optionsWithArgs, $optionsWithoutArgs;
+
if ( !isset( $optionsWithArgs ) ) {
$optionsWithArgs = [];
}
class CommandLineInc extends Maintenance {
public function __construct() {
- // @codingStandardsIgnoreStart MediaWiki.NamingConventions.ValidGlobalName.wgPrefix
+ // phpcs:ignore MediaWiki.NamingConventions.ValidGlobalName.wgPrefix
global $optionsWithArgs, $optionsWithoutArgs;
- // @codingStandardsIgnoreEnd
+
parent::__construct();
foreach ( $optionsWithArgs as $name ) {
$this->addOption( $name, '', false, true );
}
public function execute() {
- // @codingStandardsIgnoreStart MediaWiki.NamingConventions.ValidGlobalName.wgPrefix
+ // phpcs:ignore MediaWiki.NamingConventions.ValidGlobalName.wgPrefix
global $args, $options;
- // @codingStandardsIgnoreEnd
+
$args = $this->mArgs;
$options = $this->mOptions;
}
$dbw = $this->getDB( DB_MASTER );
# Handle each entry
- // @codingStandardsIgnoreStart Ignore Generic.CodeAnalysis.ForLoopWithTestFunctionCall.NotAllowed
+ // phpcs:ignore Generic.CodeAnalysis.ForLoopWithTestFunctionCall
for ( $linenum = 1; !feof( $file ); $linenum++ ) {
- // @codingStandardsIgnoreEnd
$line = trim( fgets( $file ) );
if ( $line == '' ) {
continue;
// Custom setup for Maintenance entry point
if ( !defined( 'MW_SETUP_CALLBACK' ) ) {
function wfMaintenanceSetup() {
- // @codingStandardsIgnoreLine MediaWiki.NamingConventions.ValidGlobalName.wgPrefix
+ // phpcs:ignore MediaWiki.NamingConventions.ValidGlobalName.wgPrefix
global $maintenance, $wgLocalisationCacheConf, $wgCacheDirectory;
if ( $maintenance->getDbType() === Maintenance::DB_NONE ) {
if ( $wgLocalisationCacheConf['storeClass'] === false
* @return string
*/
function indexEntry( $filename ) {
- return
- "\t<sitemap>\n" .
+ return "\t<sitemap>\n" .
"\t\t<loc>{$this->urlpath}$filename</loc>\n" .
"\t\t<lastmod>{$this->timestamp}</lastmod>\n" .
"\t</sitemap>\n";
* @return string
*/
function fileEntry( $url, $date, $priority ) {
- return
- "\t<url>\n" .
+ return "\t<url>\n" .
// T36666: $url may contain bad characters such as ampersands.
"\t\t<loc>" . htmlspecialchars( $url ) . "</loc>\n" .
"\t\t<lastmod>$date</lastmod>\n" .
return $blacklist;
}
- // @codingStandardsIgnoreStart Ignore that globals should have a "wg" prefix.
+ // phpcs:ignore MediaWiki.NamingConventions.ValidGlobalName.wgPrefix
global $checkBlacklist;
- // @codingStandardsIgnoreEnd
$blacklist = $checkBlacklist;
$tableRows = implode( "\n|-\n", $rows );
$version = SpecialVersion::getVersion( 'nodb' );
- // @codingStandardsIgnoreStart Long line.
+ // phpcs:disable Generic.Files.LineLength
echo <<<EOL
'''Check results are for:''' <code>$version</code>
$detailText
EOL;
- // @codingStandardsIgnoreEnd
+ // phpcs:enable
}
/**
U+06597斗|U+06597斗|U+09B25鬥|
U+065CB旋|U+065CB旋|U+0955F镟|
U+065D7旗|U+065D7旗|U+065C2旂|
+U+06606昆|U+06606昆|U+05D11崑|U+05D10崐|
U+066F2曲|U+066F2曲|U+09EAF麯|U+09EB4麯|
U+0672F术|U+08853術|U+0672E朮|
U+06731朱|U+06731朱|U+07843硃|
收錄著 收录着
促著 促着
咬著 咬着
+埋著 埋着
三十六著 三十六着
走為上著 走为上着
記憶體 内存
巨集 宏
掃瞄器 扫描仪
資料庫 数据库
-母音 元音
印表機 打印机
位元組 字节
列印 打印
托巴哥 多巴哥
多明尼加 多米尼加
斯堪地那維亞 斯堪的纳维亚
+加泰隆尼亞 加泰罗尼亚
頻寬 带宽
數位相機 数码相机
數位照相機 数码照相机
彩球 綵球
彩绸 綵綢
彩綢 綵綢
-彩线 綵綫
-彩線 綵線
彩船 綵船
-彩衣 綵衣
结彩 結綵
結彩 結綵
戏彩娱亲 戲綵娛親
紀錄著 紀錄着
收錄著 收錄着
咬著 咬着
+埋著 埋着
三十六著 三十六着
走為上著 走為上着
鬧著 鬧着
得克萨斯 德克薩斯
蒙特婁 蒙特利爾
紐賓士域 紐賓士域
-默多克 梅鐸
+加泰隆尼亞 加泰羅尼亞
梅鐸 梅鐸
麦克尔 米高
迈克尔 米高
埃博拉 伊波拉
哥特式 哥德式
正體中文 繁體中文
-板球 木球
-籃板球 籃板球
-篮板球 籃板球
智慧財產權 知識產權
智財權 知識產權
首席执行官 行政總裁
碁圣 碁圣
慇懃 殷勤
慇勤 殷勤
-崑崙 昆仑
-崑山 昆山
-崑劇 昆剧
-崑曲 昆曲
-崑腔 昆腔
-崑蘇 昆苏
-崑調 昆调
-崑島 昆岛
諠譁 喧哗
慫慂 怂恿
陈元扞 陈元扞
爾冬陞 尔冬升
內聯陞 内联升
同陞和 同升和
-拿破崙 拿破仑
酒麴 酒曲
麴黴 曲霉
造麴 造曲
斯堪的纳维亚 斯堪地那維亞
斯堪的納維亞 斯堪地那維亞
圣佩德罗苏拉 汕埠
+加泰罗尼亚 加泰隆尼亞
+加泰羅尼亞 加泰隆尼亞
麦克尔 麥可
迈克尔 麥可
魯賓斯·巴里切羅 魯本·巴瑞切羅
佣鈿 佣鈿
阁府 閤府
太阁 太閤
-昆仑 崑崙
-昆山 崑山
-昆剧 崑劇
-昆曲 崑曲
-昆腔 崑腔
-昆苏 崑蘇
-昆调 崑調
-昆冈 崑岡
-西昆 西崑
-苏昆 蘇崑
苏醒 甦醒
复苏 復甦
苹果 蘋果
U+05C6D屭|U+05C43屃|
U+05C85岅|U+05742坂|
U+05CDD峝|U+05CD2峒|
+U+05D11崑|U+06606昆|
+U+05D19崙|U+04ED1仑|
U+05D57嵗|U+05C81岁|
U+05D83嶃|U+05D2D崭|
U+05DBD嶽|U+05CB3岳|
咬薑呷醋
薑蓉
薑黃
+嫩薑
+酸薑
+薑啤
狐藉虎威
滑藉
藉寇兵
徵吏
徵令
本徵
+吉徵
+凶徵
+免徵
+體徵
+表徵
+綜合徵
黃鈺筑
當準
憑準
尸佼
尸子
尸羅
+帛尸梨
尸羅精舍
毗婆尸佛
尸棄佛
鬱南
鬱林
饑荒
-免徵
艷后
廢后
妖后
製衣
巨製
窗簾
-吉徵
-凶徵
臟腑
臟胸
弄髒胸
角牴
扼肮
搤肮
-嫩薑
-酸薑
-薑啤
+薑酮
騰湧
草蓆
竹蓆
強制
改制成
考試制度
-體徵
-綜合徵
价川
商標准許
批准確定
關系統
關系所
關系科
+崑崙
+崑山
+崑劇
+崑曲
+崑腔
+崑蘇
+崑調
+崑岡
+西崑
+蘇崑
}
public function execute() {
- // @codingStandardsIgnoreStart Ignore error: Global variable "$mmfl" is lacking 'wg' prefix
+ // phpcs:ignore MediaWiki.NamingConventions.ValidGlobalName.wgPrefix
global $mmfl;
- // @codingStandardsIgnoreEnd
global $wgExtensionEntryPointListFiles;
if ( !count( $wgExtensionEntryPointListFiles )
# Setup complete, now start
$dbw = $this->getDB( DB_MASTER );
- // @codingStandardsIgnoreStart Ignore avoid function calls in a FOR loop test part warning
+ // phpcs:ignore Generic.CodeAnalysis.ForLoopWithTestFunctionCall
for ( $linenum = 1; !feof( $file ); $linenum++ ) {
- // @codingStandardsIgnoreEnd
$line = fgets( $file );
if ( $line === false ) {
break;
$usedChunk = false;
$primaryOldid = $revs[$i]->rev_text_id;
- // @codingStandardsIgnoreStart Ignore avoid function calls in a FOR loop test part warning
# Get the text of each revision and add it to the object
+ // phpcs:ignore Generic.CodeAnalysis.ForLoopWithTestFunctionCall
for ( $j = 0; $j < $thisChunkSize && $chunk->isHappy(); $j++ ) {
- // @codingStandardsIgnoreEnd
$oldid = $revs[$i + $j]->rev_text_id;
# Get text
$badPhpUnit = dirname( __DIR__ ) . '/vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php';
if ( file_exists( $badPhpUnit ) ) {
- // @codingStandardsIgnoreStart Generic.Files.LineLength.TooLong
// Bad versions of the file are:
// https://raw.githubusercontent.com/sebastianbergmann/phpunit/c820f915bfae34e5a836f94967a2a5ea5ef34f21/src/Util/PHP/eval-stdin.php
// https://raw.githubusercontent.com/sebastianbergmann/phpunit/3aaddb1c5bd9b9b8d070b4cf120e71c36fd08412/src/Util/PHP/eval-stdin.php
- // @codingStandardsIgnoreEnd
$md5 = md5_file( $badPhpUnit );
if ( $md5 === '120ac49800671dc383b6f3709c25c099'
|| $md5 === '28af792cb38fc9a1b236b91c1aad2876'
$userValue = $user->getOption( $option );
if ( $userValue <> $defaultOptions[$option] ) {
- // @codingStandardsIgnoreStart Ignore silencing errors is discouraged warning
+ // phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged
@$ret[$option][$userValue]++;
- // @codingStandardsIgnoreEnd
}
} else {
foreach ( $defaultOptions as $name => $defaultValue ) {
$userValue = $user->getOption( $name );
if ( $userValue != $defaultValue ) {
- // @codingStandardsIgnoreStart Ignore silencing errors is discouraged warning
+ // phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged
@$ret[$name][$userValue]++;
- // @codingStandardsIgnoreEnd
}
}
}
<?php
-// @codingStandardsIgnoreFile Generic.Arrays.DisallowLongArraySyntax
+// phpcs:ignoreFile Generic.Arrays.DisallowLongArraySyntax
/**
* New version of MediaWiki web-based config/installation
*
// Bail on old versions of PHP, or if composer has not been run yet to install
// dependencies. Using dirname( __FILE__ ) here because __DIR__ is PHP5.3+.
-// @codingStandardsIgnoreStart MediaWiki.Usage.DirUsage.FunctionFound
+// phpcs:ignore MediaWiki.Usage.DirUsage.FunctionFound
require_once dirname( __FILE__ ) . '/../includes/PHPVersionCheck.php';
-// @codingStandardsIgnoreEnd
wfEntryPointCheck( 'mw-config/index.php' );
define( 'MW_CONFIG_CALLBACK', 'Installer::overrideConfig' );
}
}
-// @codingStandardsIgnoreStart
+// phpcs:ignore Squiz.Classes.ValidClassName.NotCamelCaps
class profile_point {
- // @codingStandardsIgnoreEnd
public $name;
public $count;
<?php echo htmlspecialchars( str_replace( ',', ', ', $this->name() ) ) . $extet ?>
</div>
</th>
- <?php //@codingStandardsIgnoreStart ?>
+ <?php // phpcs:disable Generic.Files.LineLength,Generic.PHP.NoSilencedErrors ?>
<td class="mw-profileinfo-timep"><?php echo @wfPercent( $this->time() / self::$totaltime * 100 ); ?></td>
<td class="mw-profileinfo-memoryp"><?php echo @wfPercent( $this->memory() / self::$totalmemory * 100 ); ?></td>
<td class="mw-profileinfo-count"><?php echo $this->count(); ?></td>
<td class="mw-profileinfo-mpc"><?php echo round( sprintf( '%.2f', $this->memoryPerCall() / 1024 ), 2 ); ?></td>
<td class="mw-profileinfo-tpr"><?php echo @round( sprintf( '%.2f', $this->time() / self::$totalcount ), 2 ); ?></td>
<td class="mw-profileinfo-mpr"><?php echo @round( sprintf( '%.2f', $this->memory() / self::$totalcount / 1024 ), 2 ); ?></td>
- <?php //@codingStandardsIgnoreEnd ?>
+ <?php // phpcs:enable ?>
</tr>
<?php
if ( $ex ) {
}
public function timePerCall() {
- // @codingStandardsIgnoreStart
+ // phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged
return @( $this->time / $this->count );
- // @codingStandardsIgnoreEnd
}
public function memoryPerCall() {
- // @codingStandardsIgnoreStart
+ // phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged
return @( $this->memory / $this->count );
- // @codingStandardsIgnoreEnd
}
public function callsPerRequest() {
- // @codingStandardsIgnoreStart
+ // phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged
return @( $this->count / self::$totalcount );
- // @codingStandardsIgnoreEnd
}
public function timePerRequest() {
- // @codingStandardsIgnoreStart
+ // phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged
return @( $this->time / self::$totalcount );
- // @codingStandardsIgnoreEnd
}
public function memoryPerRequest() {
- // @codingStandardsIgnoreStart
+ // phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged
return @( $this->memory / self::$totalcount );
- // @codingStandardsIgnoreEnd
}
public function fmttime() {
};
function compare_point( profile_point $a, profile_point $b ) {
- // @codingStandardsIgnoreStart
+ // phpcs:ignore MediaWiki.NamingConventions.ValidGlobalName.wgPrefix
global $sort;
- // @codingStandardsIgnoreEnd
+
switch ( $sort ) {
case 'name':
return strcmp( $a->name(), $b->name() );
profile_point::$totalmemory = 0.0;
function getEscapedProfileUrl( $_filter = false, $_sort = false, $_expand = false ) {
- // @codingStandardsIgnoreStart
+ // phpcs:ignore MediaWiki.NamingConventions.ValidGlobalName.wgPrefix
global $filter, $sort, $expand;
- // @codingStandardsIgnoreEnd
if ( $_expand === false ) {
$_expand = $expand;
}
$points[] = $s;
- // @codingStandardsIgnoreStart
+ // phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged
@usort( $points, 'compare_point' );
- // @codingStandardsIgnoreEnd
foreach ( $points as $point ) {
if ( strlen( $filter ) && !strstr( $point->name(), $filter ) ) {
global $wgAutoloadClasses;
$testDir = __DIR__ . "/..";
-// @codingStandardsIgnoreStart Generic.Files.LineLength.TooLong
+// phpcs:disable Generic.Files.LineLength
$wgAutoloadClasses += [
# tests/common
'ParserTestFileSuite' => "$testDir/phpunit/suites/ParserTestFileSuite.php",
'ParserTestTopLevelSuite' => "$testDir/phpunit/suites/ParserTestTopLevelSuite.php",
];
-// @codingStandardsIgnoreEnd
+// phpcs:enable
$parser->static_tag_buf = null;
return $tmp;
} else { // wtf?
- return
- "\nCall this extension as <statictag>string</statictag> or as" .
+ return "\nCall this extension as <statictag>string</statictag> or as" .
" <statictag action=flush/>, not in any other way.\n" .
"text: " . var_export( $in, true ) . "\n" .
"argv: " . var_export( $argv, true ) . "\n";
print "Wrote updated file\n";
} else {
print "Cannot write updated file, here is a patch you can paste:\n\n";
- print
- "--- {$fileName}\n" .
+ print "--- {$fileName}\n" .
"+++ {$fileName}~\n" .
$this->unifiedDiff( $text, $result ) .
"\n";
* http://www.gnu.org/copyleft/gpl.html
*/
-// @codingStandardsIgnoreFile
+// phpcs:ignoreFile
/**
* @param callable $callback
/**
* Minimal set of classes necessary for UserMailer to be happy. Types
* taken from documentation at pear.php.net.
- * @codingStandardsIgnoreFile
+ * phpcs:ignoreFile
*/
class PEAR {
* that they are optional. Phan can not detect this and thus throws an error for a usage with
* no params. So we have this small stub just for the constructor to allow no params.
* @see https://secure.php.net/manual/en/memcached.construct.php
- * @codingStandardsIgnoreFile
+ * phpcs:ignoreFile
*/
class Memcached {
/**
* Minimal set of classes necessary for Xhprof using tideways
- * @codingStandardsIgnoreFile
+ * phpcs:ignoreFile
*/
function tideways_enable(){
* http://www.gnu.org/copyleft/gpl.html
*/
-// @codingStandardsIgnoreFile
+// phpcs:ignoreFile
/**
* @param string $text1
// XXX: reset maintenance triggers
// Hook into period lag checks which often happen in long-running scripts
- $lbFactory = MediaWikiServices::getInstance()->getDBLoadBalancerFactory();
- Maintenance::setLBFactoryTriggers( $lbFactory );
+ $services = MediaWikiServices::getInstance();
+ $lbFactory = $services->getDBLoadBalancerFactory();
+ Maintenance::setLBFactoryTriggers( $lbFactory, $services->getMainConfig() );
ob_start( 'MediaWikiTestCase::wfResetOutputBuffersBarrier' );
}
use MediaWiki\Session\SessionManager;
class FauxRequestTest extends PHPUnit_Framework_TestCase {
+
+ use MediaWikiCoversValidator;
+
/**
* @covers FauxRequest::__construct
*/
* @dataProvider provideHooks
* @covers Hooks::register
* @covers Hooks::run
+ * @covers Hooks::callHook
*/
public function testNewStyleHooks( $msg, $hook, $expectedFoo, $expectedBar ) {
$foo = $bar = 'original';
* @covers Hooks::register
* @covers Hooks::getHandlers
* @covers Hooks::run
+ * @covers Hooks::callHook
*/
public function testNewStyleHookInteraction() {
global $wgHooks;
/**
* @expectedException MWException
* @covers Hooks::run
+ * @covers Hooks::callHook
*/
public function testUncallableFunction() {
Hooks::register( 'MediaWikiHooksTest001', 'ThisFunctionDoesntExist' );
/**
* @covers Hooks::run
+ * @covers Hooks::callHook
*/
public function testFalseReturn() {
Hooks::register( 'MediaWikiHooksTest001', function ( &$foo ) {
/**
* @covers Hooks::runWithoutAbort
+ * @covers Hooks::callHook
*/
public function testRunWithoutAbort() {
$list = [];
/**
* @covers Hooks::runWithoutAbort
+ * @covers Hooks::callHook
*/
public function testRunWithoutAbortWarning() {
Hooks::register( 'MediaWikiHooksTest001', function ( &$foo ) {
public function provideCasesForFormatComment() {
$wikiId = 'enwiki'; // $wgConf has a fake entry for this
- // @codingStandardsIgnoreStart Generic.Files.LineLength
+ // phpcs:disable Generic.Files.LineLength
return [
// Linker::formatComment
[
false, false, $wikiId
],
];
- // @codingStandardsIgnoreEnd
+ // phpcs:enable
}
/**
}
public static function provideCasesForFormatLinksInComment() {
- // @codingStandardsIgnoreStart Generic.Files.LineLength
+ // phpcs:disable Generic.Files.LineLength
return [
[
'foo bar <a href="/wiki/Special:BlankPage" title="Special:BlankPage">Special:BlankPage</a>',
'enwiki',
],
];
- // @codingStandardsIgnoreEnd
+ // phpcs:enable
}
public static function provideLinkBeginHook() {
- // @codingStandardsIgnoreStart Generic.Files.LineLength
+ // phpcs:disable Generic.Files.LineLength
return [
// Modify $html
[
- function( $dummy, $title, &$html, &$attribs, &$query, &$options, &$ret ) {
+ function ( $dummy, $title, &$html, &$attribs, &$query, &$options, &$ret ) {
$html = 'foobar';
},
'<a href="/wiki/Special:BlankPage" title="Special:BlankPage">foobar</a>'
],
// Modify $attribs
[
- function( $dummy, $title, &$html, &$attribs, &$query, &$options, &$ret ) {
+ function ( $dummy, $title, &$html, &$attribs, &$query, &$options, &$ret ) {
$attribs['bar'] = 'baz';
},
'<a href="/wiki/Special:BlankPage" title="Special:BlankPage" bar="baz">Special:BlankPage</a>'
],
// Modify $query
[
- function( $dummy, $title, &$html, &$attribs, &$query, &$options, &$ret ) {
+ function ( $dummy, $title, &$html, &$attribs, &$query, &$options, &$ret ) {
$query['bar'] = 'baz';
},
'<a href="/w/index.php?title=Special:BlankPage&bar=baz" title="Special:BlankPage">Special:BlankPage</a>'
],
// Force HTTP $options
[
- function( $dummy, $title, &$html, &$attribs, &$query, &$options, &$ret ) {
+ function ( $dummy, $title, &$html, &$attribs, &$query, &$options, &$ret ) {
$options = [ 'http' ];
},
'<a href="http://example.org/wiki/Special:BlankPage" title="Special:BlankPage">Special:BlankPage</a>'
],
// Force 'forcearticlepath' in $options
[
- function( $dummy, $title, &$html, &$attribs, &$query, &$options, &$ret ) {
+ function ( $dummy, $title, &$html, &$attribs, &$query, &$options, &$ret ) {
$options = [ 'forcearticlepath' ];
$query['foo'] = 'bar';
},
],
// Abort early
[
- function( $dummy, $title, &$html, &$attribs, &$query, &$options, &$ret ) {
+ function ( $dummy, $title, &$html, &$attribs, &$query, &$options, &$ret ) {
$ret = 'foobar';
return false;
},
'foobar'
],
];
- // @codingStandardsIgnoreEnd
+ // phpcs:enable
}
/**
*/
class MediaWikiVersionFetcherTest extends PHPUnit_Framework_TestCase {
+ use MediaWikiCoversValidator;
+
public function testReturnsResult() {
$versionFetcher = new MediaWikiVersionFetcher();
$this->assertInternalType( 'string', $versionFetcher->fetchVersion() );
}
public static function provideMakeResourceLoaderLink() {
- // @codingStandardsIgnoreStart Generic.Files.LineLength
+ // phpcs:disable Generic.Files.LineLength
return [
// Single only=scripts load
[
. "});</script>"
],
];
- // @codingStandardsIgnoreEnd
+ // phpcs:enable
}
/**
}
public static function provideBuildExemptModules() {
+ // phpcs:disable Generic.Files.LineLength
return [
'empty' => [
'exemptStyleModules' => [],
'exemptStyleModules' => [ 'site' => [], 'noscript' => [], 'private' => [], 'user' => [] ],
'<meta name="ResourceLoaderDynamicStyles" content=""/>',
],
- // @codingStandardsIgnoreStart Generic.Files.LineLength
'default logged-out' => [
'exemptStyleModules' => [ 'site' => [ 'site.styles' ] ],
'<meta name="ResourceLoaderDynamicStyles" content=""/>' . "\n" .
'<link rel="stylesheet" href="/w/load.php?debug=false&lang=en&modules=example.user&only=styles&skin=fallback&version=0a56zyi"/>' . "\n" .
'<link rel="stylesheet" href="/w/load.php?debug=false&lang=en&modules=user.styles&only=styles&skin=fallback&version=1e9z0ox"/>',
],
- // @codingStandardsIgnoreEnd Generic.Files.LineLength
];
+ // phpcs:enable
}
/**
* Ensure the router doesn't choke on long paths.
*/
public function testLength() {
- // @codingStandardsIgnoreStart Ignore long line warnings
+ // phpcs:disable Generic.Files.LineLength
$matches = $this->basicRouter->parse(
"/wiki/Lorem_ipsum_dolor_sit_amet,_consectetur_adipisicing_elit,_sed_do_eiusmod_tempor_incididunt_ut_labore_et_dolore_magna_aliqua._Ut_enim_ad_minim_veniam,_quis_nostrud_exercitation_ullamco_laboris_nisi_ut_aliquip_ex_ea_commodo_consequat._Duis_aute_irure_dolor_in_reprehenderit_in_voluptate_velit_esse_cillum_dolore_eu_fugiat_nulla_pariatur._Excepteur_sint_occaecat_cupidatat_non_proident,_sunt_in_culpa_qui_officia_deserunt_mollit_anim_id_est_laborum."
);
$matches,
[ 'title' => "Lorem_ipsum_dolor_sit_amet,_consectetur_adipisicing_elit,_sed_do_eiusmod_tempor_incididunt_ut_labore_et_dolore_magna_aliqua._Ut_enim_ad_minim_veniam,_quis_nostrud_exercitation_ullamco_laboris_nisi_ut_aliquip_ex_ea_commodo_consequat._Duis_aute_irure_dolor_in_reprehenderit_in_voluptate_velit_esse_cillum_dolore_eu_fugiat_nulla_pariatur._Excepteur_sint_occaecat_cupidatat_non_proident,_sunt_in_culpa_qui_officia_deserunt_mollit_anim_id_est_laborum." ]
);
- // @codingStandardsIgnoreEnd
+ // phpcs:enable
}
/**
$this->assertEquals( $rev->getId(), $cachedRow->rev_id );
}
+ public function testNewKnownCurrent_withPageId() {
+ $db = wfGetDB( DB_MASTER );
+
+ $this->testPage->doEditContent( new WikitextContent( __METHOD__ ), __METHOD__ );
+ $rev = $this->testPage->getRevision();
+
+ $pageId = $this->testPage->getId();
+
+ $newRev = Revision::newKnownCurrent( $db, $pageId, $rev->getId() );
+ $this->assertRevEquals( $rev, $newRev );
+ }
+
+ public function testNewKnownCurrent_returnsFalseWhenTitleDoesntExist() {
+ $db = wfGetDB( DB_MASTER );
+
+ $this->assertFalse( Revision::newKnownCurrent( $db, 0 ) );
+ }
+
public function provideUserCanBitfield() {
yield [ 0, 0, [], null, true ];
// Bitfields match, user has no permissions
];
}
- // @codingStandardsIgnoreStart Generic.Files.LineLength
/**
+ * phpcs:disable Generic.Files.LineLength
* @dataProvider provideTitles
* See https://phpunit.de/manual/3.7/en/appendixes.annotations.html#appendixes.annotations.dataProvider
+ * phpcs:enable
*/
- // @codingStandardsIgnoreEnd
public function testCreateBasicListOfTitles( $titleName, $ns, $text ) {
$title = Title::newFromText( $titleName, $ns );
$this->assertEquals( $text, "$title", "see if '$titleName' matches '$text'" );
$this->assertTrue( $title->isLocal() );
}
- // @codingStandardsIgnoreStart Generic.Files.LineLength
/**
* @expectedException InvalidArgumentException
* See https://phpunit.de/manual/3.7/en/appendixes.annotations.html#appendixes.annotations.expectedException
*/
- // @codingStandardsIgnoreEnd
public function testTitleObjectFromObject() {
$title = Title::newFromText( Title::newFromText( "test" ) );
$this->assertEquals( "Test", $title->isLocal() );
*/
class SanitizerValidateEmailTest extends PHPUnit_Framework_TestCase {
+ use MediaWikiCoversValidator;
+
private function checkEmail( $addr, $expected = true, $msg = '' ) {
if ( $msg == '' ) {
$msg = "Testing $addr";
+++ /dev/null
-<?php
-use MediaWiki\Services\ServiceContainer;
-
-/**
- * @covers MediaWiki\Services\ServiceContainer
- *
- * @group MediaWiki
- */
-class ServiceContainerTest extends PHPUnit_Framework_TestCase {
-
- private function newServiceContainer( $extraArgs = [] ) {
- return new ServiceContainer( $extraArgs );
- }
-
- public function testGetServiceNames() {
- $services = $this->newServiceContainer();
- $names = $services->getServiceNames();
-
- $this->assertInternalType( 'array', $names );
- $this->assertEmpty( $names );
-
- $name = 'TestService92834576';
- $services->defineService( $name, function () {
- return null;
- } );
-
- $names = $services->getServiceNames();
- $this->assertContains( $name, $names );
- }
-
- public function testHasService() {
- $services = $this->newServiceContainer();
-
- $name = 'TestService92834576';
- $this->assertFalse( $services->hasService( $name ) );
-
- $services->defineService( $name, function () {
- return null;
- } );
-
- $this->assertTrue( $services->hasService( $name ) );
- }
-
- public function testGetService() {
- $services = $this->newServiceContainer( [ 'Foo' ] );
-
- $theService = new stdClass();
- $name = 'TestService92834576';
- $count = 0;
-
- $services->defineService(
- $name,
- function ( $actualLocator, $extra ) use ( $services, $theService, &$count ) {
- $count++;
- PHPUnit_Framework_Assert::assertSame( $services, $actualLocator );
- PHPUnit_Framework_Assert::assertSame( $extra, 'Foo' );
- return $theService;
- }
- );
-
- $this->assertSame( $theService, $services->getService( $name ) );
-
- $services->getService( $name );
- $this->assertSame( 1, $count, 'instantiator should be called exactly once!' );
- }
-
- public function testGetService_fail_unknown() {
- $services = $this->newServiceContainer();
-
- $name = 'TestService92834576';
-
- $this->setExpectedException( 'MediaWiki\Services\NoSuchServiceException' );
-
- $services->getService( $name );
- }
-
- public function testPeekService() {
- $services = $this->newServiceContainer();
-
- $services->defineService(
- 'Foo',
- function () {
- return new stdClass();
- }
- );
-
- $services->defineService(
- 'Bar',
- function () {
- return new stdClass();
- }
- );
-
- // trigger instantiation of Foo
- $services->getService( 'Foo' );
-
- $this->assertInternalType(
- 'object',
- $services->peekService( 'Foo' ),
- 'Peek should return the service object if it had been accessed before.'
- );
-
- $this->assertNull(
- $services->peekService( 'Bar' ),
- 'Peek should return null if the service was never accessed.'
- );
- }
-
- public function testPeekService_fail_unknown() {
- $services = $this->newServiceContainer();
-
- $name = 'TestService92834576';
-
- $this->setExpectedException( 'MediaWiki\Services\NoSuchServiceException' );
-
- $services->peekService( $name );
- }
-
- public function testDefineService() {
- $services = $this->newServiceContainer();
-
- $theService = new stdClass();
- $name = 'TestService92834576';
-
- $services->defineService( $name, function ( $actualLocator ) use ( $services, $theService ) {
- PHPUnit_Framework_Assert::assertSame( $services, $actualLocator );
- return $theService;
- } );
-
- $this->assertTrue( $services->hasService( $name ) );
- $this->assertSame( $theService, $services->getService( $name ) );
- }
-
- public function testDefineService_fail_duplicate() {
- $services = $this->newServiceContainer();
-
- $theService = new stdClass();
- $name = 'TestService92834576';
-
- $services->defineService( $name, function () use ( $theService ) {
- return $theService;
- } );
-
- $this->setExpectedException( 'MediaWiki\Services\ServiceAlreadyDefinedException' );
-
- $services->defineService( $name, function () use ( $theService ) {
- return $theService;
- } );
- }
-
- public function testApplyWiring() {
- $services = $this->newServiceContainer();
-
- $wiring = [
- 'Foo' => function () {
- return 'Foo!';
- },
- 'Bar' => function () {
- return 'Bar!';
- },
- ];
-
- $services->applyWiring( $wiring );
-
- $this->assertSame( 'Foo!', $services->getService( 'Foo' ) );
- $this->assertSame( 'Bar!', $services->getService( 'Bar' ) );
- }
-
- public function testImportWiring() {
- $services = $this->newServiceContainer();
-
- $wiring = [
- 'Foo' => function () {
- return 'Foo!';
- },
- 'Bar' => function () {
- return 'Bar!';
- },
- 'Car' => function () {
- return 'FUBAR!';
- },
- ];
-
- $services->applyWiring( $wiring );
-
- $newServices = $this->newServiceContainer();
-
- // define a service before importing, so we can later check that
- // existing service instances survive importWiring()
- $newServices->defineService( 'Car', function () {
- return 'Car!';
- } );
-
- // force instantiation
- $newServices->getService( 'Car' );
-
- // Define another service, so we can later check that extra wiring
- // is not lost.
- $newServices->defineService( 'Xar', function () {
- return 'Xar!';
- } );
-
- // import wiring, but skip `Bar`
- $newServices->importWiring( $services, [ 'Bar' ] );
-
- $this->assertNotContains( 'Bar', $newServices->getServiceNames(), 'Skip `Bar` service' );
- $this->assertSame( 'Foo!', $newServices->getService( 'Foo' ) );
-
- // import all wiring, but preserve existing service instance
- $newServices->importWiring( $services );
-
- $this->assertContains( 'Bar', $newServices->getServiceNames(), 'Import all services' );
- $this->assertSame( 'Bar!', $newServices->getService( 'Bar' ) );
- $this->assertSame( 'Car!', $newServices->getService( 'Car' ), 'Use existing service instance' );
- $this->assertSame( 'Xar!', $newServices->getService( 'Xar' ), 'Predefined services are kept' );
- }
-
- public function testLoadWiringFiles() {
- $services = $this->newServiceContainer();
-
- $wiringFiles = [
- __DIR__ . '/TestWiring1.php',
- __DIR__ . '/TestWiring2.php',
- ];
-
- $services->loadWiringFiles( $wiringFiles );
-
- $this->assertSame( 'Foo!', $services->getService( 'Foo' ) );
- $this->assertSame( 'Bar!', $services->getService( 'Bar' ) );
- }
-
- public function testLoadWiringFiles_fail_duplicate() {
- $services = $this->newServiceContainer();
-
- $wiringFiles = [
- __DIR__ . '/TestWiring1.php',
- __DIR__ . '/./TestWiring1.php',
- ];
-
- // loading the same file twice should fail, because
- $this->setExpectedException( 'MediaWiki\Services\ServiceAlreadyDefinedException' );
-
- $services->loadWiringFiles( $wiringFiles );
- }
-
- public function testRedefineService() {
- $services = $this->newServiceContainer( [ 'Foo' ] );
-
- $theService1 = new stdClass();
- $name = 'TestService92834576';
-
- $services->defineService( $name, function () {
- PHPUnit_Framework_Assert::fail(
- 'The original instantiator function should not get called'
- );
- } );
-
- // redefine before instantiation
- $services->redefineService(
- $name,
- function ( $actualLocator, $extra ) use ( $services, $theService1 ) {
- PHPUnit_Framework_Assert::assertSame( $services, $actualLocator );
- PHPUnit_Framework_Assert::assertSame( 'Foo', $extra );
- return $theService1;
- }
- );
-
- // force instantiation, check result
- $this->assertSame( $theService1, $services->getService( $name ) );
- }
-
- public function testRedefineService_disabled() {
- $services = $this->newServiceContainer( [ 'Foo' ] );
-
- $theService1 = new stdClass();
- $name = 'TestService92834576';
-
- $services->defineService( $name, function () {
- return 'Foo';
- } );
-
- // disable the service. we should be able to redefine it anyway.
- $services->disableService( $name );
-
- $services->redefineService( $name, function () use ( $theService1 ) {
- return $theService1;
- } );
-
- // force instantiation, check result
- $this->assertSame( $theService1, $services->getService( $name ) );
- }
-
- public function testRedefineService_fail_undefined() {
- $services = $this->newServiceContainer();
-
- $theService = new stdClass();
- $name = 'TestService92834576';
-
- $this->setExpectedException( 'MediaWiki\Services\NoSuchServiceException' );
-
- $services->redefineService( $name, function () use ( $theService ) {
- return $theService;
- } );
- }
-
- public function testRedefineService_fail_in_use() {
- $services = $this->newServiceContainer( [ 'Foo' ] );
-
- $theService = new stdClass();
- $name = 'TestService92834576';
-
- $services->defineService( $name, function () {
- return 'Foo';
- } );
-
- // create the service, so it can no longer be redefined
- $services->getService( $name );
-
- $this->setExpectedException( 'MediaWiki\Services\CannotReplaceActiveServiceException' );
-
- $services->redefineService( $name, function () use ( $theService ) {
- return $theService;
- } );
- }
-
- public function testDisableService() {
- $services = $this->newServiceContainer( [ 'Foo' ] );
-
- $destructible = $this->getMockBuilder( 'MediaWiki\Services\DestructibleService' )
- ->getMock();
- $destructible->expects( $this->once() )
- ->method( 'destroy' );
-
- $services->defineService( 'Foo', function () use ( $destructible ) {
- return $destructible;
- } );
- $services->defineService( 'Bar', function () {
- return new stdClass();
- } );
- $services->defineService( 'Qux', function () {
- return new stdClass();
- } );
-
- // instantiate Foo and Bar services
- $services->getService( 'Foo' );
- $services->getService( 'Bar' );
-
- // disable service, should call destroy() once.
- $services->disableService( 'Foo' );
-
- // disabled service should still be listed
- $this->assertContains( 'Foo', $services->getServiceNames() );
-
- // getting other services should still work
- $services->getService( 'Bar' );
-
- // disable non-destructible service, and not-yet-instantiated service
- $services->disableService( 'Bar' );
- $services->disableService( 'Qux' );
-
- $this->assertNull( $services->peekService( 'Bar' ) );
- $this->assertNull( $services->peekService( 'Qux' ) );
-
- // disabled service should still be listed
- $this->assertContains( 'Bar', $services->getServiceNames() );
- $this->assertContains( 'Qux', $services->getServiceNames() );
-
- $this->setExpectedException( 'MediaWiki\Services\ServiceDisabledException' );
- $services->getService( 'Qux' );
- }
-
- public function testDisableService_fail_undefined() {
- $services = $this->newServiceContainer();
-
- $theService = new stdClass();
- $name = 'TestService92834576';
-
- $this->setExpectedException( 'MediaWiki\Services\NoSuchServiceException' );
-
- $services->redefineService( $name, function () use ( $theService ) {
- return $theService;
- } );
- }
-
- public function testDestroy() {
- $services = $this->newServiceContainer();
-
- $destructible = $this->getMockBuilder( 'MediaWiki\Services\DestructibleService' )
- ->getMock();
- $destructible->expects( $this->once() )
- ->method( 'destroy' );
-
- $services->defineService( 'Foo', function () use ( $destructible ) {
- return $destructible;
- } );
-
- $services->defineService( 'Bar', function () {
- return new stdClass();
- } );
-
- // create the service
- $services->getService( 'Foo' );
-
- // destroy the container
- $services->destroy();
-
- $this->setExpectedException( 'MediaWiki\Services\ContainerDisabledException' );
- $services->getService( 'Bar' );
- }
-
-}
+++ /dev/null
-<?php
-/**
- * Test file for testing ServiceContainer::loadWiringFiles
- */
-
-return [
- 'Foo' => function () {
- return 'Foo!';
- },
-];
+++ /dev/null
-<?php
-/**
- * Test file for testing ServiceContainer::loadWiringFiles
- */
-
-return [
- 'Bar' => function () {
- return 'Bar!';
- },
-];
use Wikimedia\TestingAccessWrapper;
/**
- * @covers MediaWiki\Storage\BlobStore
+ * @covers \MediaWiki\Storage\BlobStore
*/
class BlobStoreFactoryTest extends MediaWikiTestCase {
*/
class TitleArrayFromResultTest extends PHPUnit_Framework_TestCase {
+ use MediaWikiCoversValidator;
+
private function getMockResultWrapper( $row = null, $numRows = 1 ) {
$resultWrapper = $this->getMockBuilder( 'ResultWrapper' )
->disableOriginalConstructor();
class WikiReferenceTest extends PHPUnit_Framework_TestCase {
+ use MediaWikiCoversValidator;
+
public function provideGetDisplayName() {
return [
'http' => [ 'foo.bar', 'http://foo.bar' ],
*/
class XmlJsTest extends PHPUnit_Framework_TestCase {
+ use MediaWikiCoversValidator;
+
/**
* @covers XmlJsCode::__construct
* @dataProvider provideConstruction
--- /dev/null
+<?php
+
+use MediaWiki\Session\Token;
+
+/**
+ * @group API
+ * @group medium
+ * @covers ApiCheckToken
+ */
+class ApiCheckTokenTest extends ApiTestCase {
+
+ /**
+ * Test result of checking previously queried token (should be valid)
+ */
+ public function testCheckTokenValid() {
+ // Query token which will be checked later
+ $tokens = $this->doApiRequest( [
+ 'action' => 'query',
+ 'meta' => 'tokens',
+ ] );
+
+ $data = $this->doApiRequest( [
+ 'action' => 'checktoken',
+ 'type' => 'csrf',
+ 'token' => $tokens[0]['query']['tokens']['csrftoken'],
+ ], $tokens[1]->getSessionArray() );
+
+ $this->assertEquals( 'valid', $data[0]['checktoken']['result'] );
+ $this->assertArrayHasKey( 'generated', $data[0]['checktoken'] );
+ }
+
+ /**
+ * Test result of checking invalid token
+ */
+ public function testCheckTokenInvalid() {
+ $session = [];
+ $data = $this->doApiRequest( [
+ 'action' => 'checktoken',
+ 'type' => 'csrf',
+ 'token' => 'invalid_token',
+ ], $session );
+
+ $this->assertEquals( 'invalid', $data[0]['checktoken']['result'] );
+ }
+
+ /**
+ * Test result of checking token with negative max age (should be expired)
+ */
+ public function testCheckTokenExpired() {
+ // Query token which will be checked later
+ $tokens = $this->doApiRequest( [
+ 'action' => 'query',
+ 'meta' => 'tokens',
+ ] );
+
+ $data = $this->doApiRequest( [
+ 'action' => 'checktoken',
+ 'type' => 'csrf',
+ 'token' => $tokens[0]['query']['tokens']['csrftoken'],
+ 'maxtokenage' => -1,
+ ], $tokens[1]->getSessionArray() );
+
+ $this->assertEquals( 'expired', $data[0]['checktoken']['result'] );
+ $this->assertArrayHasKey( 'generated', $data[0]['checktoken'] );
+ }
+
+ /**
+ * Test if using token with incorrect suffix will produce a warning
+ */
+ public function testCheckTokenSuffixWarning() {
+ // Query token which will be checked later
+ $tokens = $this->doApiRequest( [
+ 'action' => 'query',
+ 'meta' => 'tokens',
+ ] );
+
+ // Get token and change the suffix
+ $token = $tokens[0]['query']['tokens']['csrftoken'];
+ $token = substr( $token, 0, -strlen( Token::SUFFIX ) ) . urldecode( Token::SUFFIX );
+
+ $data = $this->doApiRequest( [
+ 'action' => 'checktoken',
+ 'type' => 'csrf',
+ 'token' => $token,
+ 'errorformat' => 'raw',
+ ], $tokens[1]->getSessionArray() );
+
+ $this->assertEquals( 'invalid', $data[0]['checktoken']['result'] );
+ $this->assertArrayHasKey( 'warnings', $data[0] );
+ $this->assertCount( 1, $data[0]['warnings'] );
+ $this->assertEquals( 'checktoken', $data[0]['warnings'][0]['module'] );
+ $this->assertEquals( 'checktoken-percentencoding', $data[0]['warnings'][0]['code'] );
+ }
+
+}
--- /dev/null
+<?php
+
+/**
+ * @group API
+ * @group medium
+ * @covers ApiClearHasMsg
+ */
+class ApiClearHasMsgTest extends ApiTestCase {
+
+ /**
+ * Test clearing hasmsg flag for current user
+ */
+ public function testClearFlag() {
+ $user = self::$users['sysop']->getUser();
+ $user->setNewtalk( true );
+ $this->assertTrue( $user->getNewtalk() );
+
+ $data = $this->doApiRequest( [ 'action' => 'clearhasmsg' ], [] );
+
+ $this->assertEquals( 'success', $data[0]['clearhasmsg'] );
+ $this->assertFalse( $user->getNewtalk() );
+ }
+
+}
}
public static function provideDiff() {
+ // phpcs:disable Generic.Files.LineLength.TooLong
return [
- // @codingStandardsIgnoreStart Ignore Generic.Files.LineLength.TooLong
'Basic diff, titles' => [
[
'fromtitle' => 'ApiComparePagesTest A',
[],
'missingcontent'
],
-
- // @codingStandardsIgnoreEnd
];
+ // phpcs:enable
}
}
}
public static function provideGeneralEncoding() {
- // @codingStandardsIgnoreStart Generic.Files.LineLength
+ // phpcs:disable Generic.Files.LineLength
return array_merge(
self::addFormatVersion( 1, [
// Basic types
'a:1:{s:3:"foo";s:3:"foo";}' ],
] )
);
- // @codingStandardsIgnoreEnd
+ // phpcs:enable
}
public function testCrossDomainMangling() {
public static function setUpBeforeClass() {
parent::setUpBeforeClass();
$page = WikiPage::factory( Title::newFromText( 'MediaWiki:ApiFormatXmlTest.xsl' ) );
- // @codingStandardsIgnoreStart Generic.Files.LineLength
+ // phpcs:disable Generic.Files.LineLength
$page->doEditContent( new WikitextContent(
'<?xml version="1.0"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" />'
), 'Summary' );
- // @codingStandardsIgnoreEnd
+ // phpcs:enable
$page = WikiPage::factory( Title::newFromText( 'MediaWiki:ApiFormatXmlTest' ) );
$page->doEditContent( new WikitextContent( 'Bogus' ), 'Summary' );
$page = WikiPage::factory( Title::newFromText( 'ApiFormatXmlTest' ) );
}
public static function provideGeneralEncoding() {
- // @codingStandardsIgnoreStart Generic.Files.LineLength
+ // phpcs:disable Generic.Files.LineLength
return [
// Basic types
[ [ null, 'a' => null ], '<?xml version="1.0"?><api><_v _idx="0" /></api>' ],
'" type="text/xsl" ?><api />',
[ 'xslt' => 'MediaWiki:ApiFormatXmlTest.xsl' ] ],
];
- // @codingStandardsIgnoreEnd
+ // phpcs:enable
}
}
* @covers ChangesListFilterGroup
*/
class ChangesListFilterGroupTest extends MediaWikiTestCase {
- // @codingStandardsIgnoreStart
/**
+ * phpcs:disable Generic.Files.LineLength
* @expectedException MWException
* @expectedExceptionMessage Group names may not contain '_'. Use the naming convention: 'camelCase'
+ * phpcs:enable
*/
- // @codingStandardsIgnoreEnd
public function testReservedCharacter() {
new MockChangesListFilterGroup(
[
);
}
- // @codingStandardsIgnoreStart
/**
+ * phpcs:disable Generic.Files.LineLength
* @expectedException MWException
* @expectedExceptionMessage Filter names may not contain '_'. Use the naming convention: 'lowercase'
+ * phpcs:enable
*/
- // @codingStandardsIgnoreEnd
public function testReservedCharacter() {
$filter = new MockChangesListFilter(
[
);
}
- // @codingStandardsIgnoreStart
/**
* @expectedException MWException
* @expectedExceptionMessage Two filters in a group cannot have the same name: 'somename'
*/
- // @codingStandardsIgnoreEnd
public function testDuplicateName() {
new MockChangesListFilter(
[
*/
class ComposerVersionNormalizerTest extends PHPUnit_Framework_TestCase {
+ use MediaWikiCoversValidator;
+
/**
* @dataProvider nonStringProvider
*/
class EtcdConfigTest extends PHPUnit_Framework_TestCase {
+ use MediaWikiCoversValidator;
+
private function createConfigMock( array $options = [] ) {
return $this->getMockBuilder( EtcdConfig::class )
->setConstructorArgs( [ $options + [
* Keep this in sync with CssContentTest::provideGetRedirectTarget()
*/
public static function provideMakeRedirectContent() {
- // @codingStandardsIgnoreStart Generic.Files.LineLength
+ // phpcs:disable Generic.Files.LineLength
return [
[
'MediaWiki:MonoBook.css',
"/* #REDIRECT */@import url(//example.org/w/index.php?title=Gadget:FooBaz.css&action=raw&ctype=text/css);"
],
];
- // @codingStandardsIgnoreEnd
+ // phpcs:enable
}
}
* Keep this in sync with CssContentHandlerTest::provideMakeRedirectContent()
*/
public static function provideGetRedirectTarget() {
- // @codingStandardsIgnoreStart Generic.Files.LineLength
+ // phpcs:disable Generic.Files.LineLength
return [
[ 'MediaWiki:MonoBook.css', "/* #REDIRECT */@import url(//example.org/w/index.php?title=MediaWiki:MonoBook.css&action=raw&ctype=text/css);" ],
[ 'User:FooBar/common.css', "/* #REDIRECT */@import url(//example.org/w/index.php?title=User:FooBar/common.css&action=raw&ctype=text/css);" ],
# Wrong domain
[ null, "/* #REDIRECT */@import url(//example.com/w/index.php?title=Gadget:FooBaz.css&action=raw&ctype=text/css);" ],
];
- // @codingStandardsIgnoreEnd
+ // phpcs:enable
}
public static function dataEquals() {
* Keep this in sync with JavaScriptContentTest::provideGetRedirectTarget()
*/
public static function provideMakeRedirectContent() {
- // @codingStandardsIgnoreStart Generic.Files.LineLength
+ // phpcs:disable Generic.Files.LineLength
return [
[
'MediaWiki:MonoBook.js',
'/* #REDIRECT */mw.loader.load("//example.org/w/index.php?title=Gadget:FooBaz.js\u0026action=raw\u0026ctype=text/javascript");'
],
];
- // @codingStandardsIgnoreEnd
+ // phpcs:enable
}
}
}
public static function provideUpdateRedirect() {
+ // phpcs:disable Generic.Files.LineLength
return [
[
'#REDIRECT [[Someplace]]',
'#REDIRECT [[Someplace]]',
],
-
- // @codingStandardsIgnoreStart Generic.Files.LineLength
[
'/* #REDIRECT */mw.loader.load("//example.org/w/index.php?title=MediaWiki:MonoBook.js\u0026action=raw\u0026ctype=text/javascript");',
'/* #REDIRECT */mw.loader.load("//example.org/w/index.php?title=TestUpdateRedirect_target\u0026action=raw\u0026ctype=text/javascript");'
]
- // @codingStandardsIgnoreEnd
];
+ // phpcs:enable
}
/**
* Keep this in sync with JavaScriptContentHandlerTest::provideMakeRedirectContent()
*/
public static function provideGetRedirectTarget() {
- // @codingStandardsIgnoreStart Generic.Files.LineLength
+ // phpcs:disable Generic.Files.LineLength
return [
[
'MediaWiki:MonoBook.js',
'/* #REDIRECT */mw.loader.load("//example.com/w/index.php?title=MediaWiki:OtherWiki.js\u0026action=raw\u0026ctype=text/javascript");'
],
];
- // @codingStandardsIgnoreEnd
+ // phpcs:enable
}
}
*/
class MWCallableUpdateTest extends PHPUnit_Framework_TestCase {
+ use MediaWikiCoversValidator;
+
public function testDoUpdate() {
$ran = 0;
$update = new MWCallableUpdate( function () use ( &$ran ) {
*/
class TransactionRoundDefiningUpdateTest extends PHPUnit_Framework_TestCase {
+ use MediaWikiCoversValidator;
+
public function testDoUpdate() {
$ran = 0;
$update = new TransactionRoundDefiningUpdate( function () use ( &$ran ) {
*/
class ExternalStoreFactoryTest extends PHPUnit_Framework_TestCase {
+ use MediaWikiCoversValidator;
+
public function testExternalStoreFactory_noStores() {
$factory = new ExternalStoreFactory( [] );
$this->assertFalse( $factory->getStoreObject( 'ForTesting' ) );
* @covers HTMLRestrictionsField
*/
class HTMLRestrictionsFieldTest extends PHPUnit_Framework_TestCase {
+
+ use MediaWikiCoversValidator;
+
public function testConstruct() {
$field = new HTMLRestrictionsField( [ 'fieldname' => 'restrictions' ] );
$this->assertNotEmpty( $field->getLabel(), 'has a default label' );
}
public function getUnknownTagsXML() {
- // @codingStandardsIgnoreStart Generic.Files.LineLength
+ // phpcs:disable Generic.Files.LineLength
return [
[
<<< EOF
'TestImportPage'
]
];
- // @codingStandardsIgnoreEnd
+ // phpcs:enable
}
/**
}
public function getRedirectXML() {
- // @codingStandardsIgnoreStart Generic.Files.LineLength
+ // phpcs:disable Generic.Files.LineLength
return [
[
<<< EOF
null
],
];
- // @codingStandardsIgnoreEnd
+ // phpcs:enable
}
/**
}
public function getSiteInfoXML() {
- // @codingStandardsIgnoreStart Generic.Files.LineLength
+ // phpcs:disable Generic.Files.LineLength
return [
[
<<< EOF
]
],
];
- // @codingStandardsIgnoreEnd
+ // phpcs:enable
}
/**
$n = ( $assign ? 1 : 0 ) + ( $create ? 2 : 0 );
- // @codingStandardsIgnoreStart Generic.Files.LineLength
+ // phpcs:disable Generic.Files.LineLength
$source = $this->getDataSource( <<<EOF
<mediawiki xmlns="http://www.mediawiki.org/xml/export-0.10/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mediawiki.org/xml/export-0.10/ http://www.mediawiki.org/xml/export-0.10.xsd" version="0.10" xml:lang="en">
<page>
</mediawiki>
EOF
);
- // @codingStandardsIgnoreEnd
+ // phpcs:enable
$importer = new WikiImporter( $source, MediaWikiServices::getInstance()->getMainConfig() );
$importer->setUsernamePrefix( 'Xxx', $assign );
*/
class JobQueueMemoryTest extends PHPUnit_Framework_TestCase {
+ use MediaWikiCoversValidator;
+
/**
* @return JobQueueMemory
*/
*/
class ArrayUtilsTest extends PHPUnit_Framework_TestCase {
+
+ use MediaWikiCoversValidator;
+
private $search;
/**
. '%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 width=%228%22 height='
. '%228%22%3E%0A%09%3Ccircle cx=%224%22 cy=%224%22 r=%222%22/%3E%0A%3C/svg%3E%0A';
- // @codingStandardsIgnoreStart Generic.Files.LineLength
+ // phpcs:disable Generic.Files.LineLength
return [
[
'Regular file',
'.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #d3d3d3/*{borderColorDefault}*/; background: #e6e6e6/*{bgColorDefault}*/ url(http://localhost/w/images/ui-bg_glass_75_e6e6e6_1x400.png)/*{bgImgUrlDefault}*/ 50%/*{bgDefaultXPos}*/ 50%/*{bgDefaultYPos}*/ repeat-x/*{bgDefaultRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #555555/*{fcDefault}*/; }',
],
];
- // @codingStandardsIgnoreEnd
+ // phpcs:enable
}
/**
*/
class DeferredStringifierTest extends PHPUnit_Framework_TestCase {
+ use MediaWikiCoversValidator;
+
/**
* @dataProvider provideToString
*/
* @covers DnsSrvDiscoverer
*/
class DnsSrvDiscovererTest extends PHPUnit_Framework_TestCase {
+
+ use MediaWikiCoversValidator;
+
/**
* @dataProvider provideRecords
*/
*/
abstract class GenericArrayObjectTest extends PHPUnit_Framework_TestCase {
+ use MediaWikiCoversValidator;
+
/**
* Returns objects that can serve as elements in the concrete
* GenericArrayObject deriving class being tested.
* @group HashRing
*/
class HashRingTest extends PHPUnit_Framework_TestCase {
+
+ use MediaWikiCoversValidator;
+
/**
* @covers HashRing
*/
*/
class HtmlArmorTest extends PHPUnit_Framework_TestCase {
+ use MediaWikiCoversValidator;
+
public static function provideConstructor() {
return [
[ 'test' ],
* ...a dataprovider and test method.
*/
class IEUrlExtensionTest extends PHPUnit_Framework_TestCase {
+
+ use MediaWikiCoversValidator;
+
/**
* @covers IEUrlExtension::findIE6Extension
*/
*/
class IPTest extends PHPUnit_Framework_TestCase {
+
+ use MediaWikiCoversValidator;
+
/**
* @covers IP::isIPAddress
* @dataProvider provideInvalidIPs
class JavaScriptMinifierTest extends PHPUnit_Framework_TestCase {
+ use MediaWikiCoversValidator;
+
public static function provideCases() {
return [
*/
class MWMessagePackTest extends PHPUnit_Framework_TestCase {
+ use MediaWikiCoversValidator;
+
/**
* Provides test cases for MWMessagePackTest::testMessagePack
*
* @group Cache
*/
class MapCacheLRUTest extends PHPUnit_Framework_TestCase {
+
+ use MediaWikiCoversValidator;
+
/**
* @covers MapCacheLRU::newFromArray()
* @covers MapCacheLRU::toArray()
*/
class MemoizedCallableTest extends PHPUnit_Framework_TestCase {
+ use MediaWikiCoversValidator;
+
/**
* The memoized callable should relate inputs to outputs in the same
* way as the original underlying callable.
class ObjectFactoryTest extends PHPUnit_Framework_TestCase {
+ use MediaWikiCoversValidator;
+
/**
* @covers ObjectFactory::getObjectFromSpec
*/
*/
class ProcessCacheLRUTest extends PHPUnit_Framework_TestCase {
+ use MediaWikiCoversValidator;
+
/**
* Helper to verify emptiness of a cache object.
* Compare against an array so we get the cache content difference.
* @covers SamplingStatsdClient
*/
class SamplingStatsdClientTest extends PHPUnit_Framework_TestCase {
+
+ use MediaWikiCoversValidator;
+
/**
* @dataProvider samplingDataProvider
*/
class StringUtilsTest extends PHPUnit_Framework_TestCase {
+ use MediaWikiCoversValidator;
+
/**
* @covers StringUtils::isUtf8
* @dataProvider provideStringsForIsUtf8Check
class TimingTest extends PHPUnit_Framework_TestCase {
+ use MediaWikiCoversValidator;
+
/**
* @covers Timing::clearMarks
* @covers Timing::getEntries
*/
class XhprofDataTest extends PHPUnit_Framework_TestCase {
+ use MediaWikiCoversValidator;
+
/**
* @covers XhprofData::splitKey
* @dataProvider provideSplitKey
*/
class XhprofTest extends PHPUnit_Framework_TestCase {
+
+ use MediaWikiCoversValidator;
+
/**
* Trying to enable Xhprof when it is already enabled causes an exception
* to be thrown.
* @covers XMLTypeCheck
*/
class XmlTypeCheckTest extends PHPUnit_Framework_TestCase {
+
+ use MediaWikiCoversValidator;
+
const WELL_FORMED_XML = "<root><child /></root>";
const MAL_FORMED_XML = "<root><child /></error>";
- // @codingStandardsIgnoreStart Generic.Files.LineLength
+ // phpcs:ignore Generic.Files.LineLength
const XML_WITH_PIH = '<?xml version="1.0"?><?xml-stylesheet type="text/xsl" href="/w/index.php"?><svg><child /></svg>';
- // @codingStandardsIgnoreEnd
/**
* @covers XMLTypeCheck::newFromString
* @covers MimeAnalyzer
*/
class MimeAnalyzerTest extends PHPUnit_Framework_TestCase {
+
+ use MediaWikiCoversValidator;
+
/** @var MimeAnalyzer */
private $mimeAnalyzer;
*/
class CachedBagOStuffTest extends PHPUnit_Framework_TestCase {
+ use MediaWikiCoversValidator;
+
/**
* @covers CachedBagOStuff::__construct
* @covers CachedBagOStuff::doGet
*/
class HashBagOStuffTest extends PHPUnit_Framework_TestCase {
+ use MediaWikiCoversValidator;
+
/**
* @covers HashBagOStuff::__construct
*/
* @covers WANObjectCache::setInterimValue
*/
class WANObjectCacheTest extends PHPUnit_Framework_TestCase {
+
+ use MediaWikiCoversValidator;
+
/** @var TimeAdjustableWANObjectCache */
private $cache;
/** @var BagOStuff */
* @covers \Wikimedia\Rdbms\TransactionProfiler
*/
class TransactionProfilerTest extends PHPUnit_Framework_TestCase {
+
+ use MediaWikiCoversValidator;
+
public function testAffected() {
$logger = $this->getMockBuilder( LoggerInterface::class )->getMock();
$logger->expects( $this->exactly( 3 ) )->method( 'info' );
* @covers Wikimedia\Rdbms\DatabaseDomain
*/
class DatabaseDomainTest extends PHPUnit_Framework_TestCase {
+
+ use MediaWikiCoversValidator;
+
public static function provideConstruct() {
return [
'All strings' =>
}
class DatabaseMysqlBaseTest extends PHPUnit_Framework_TestCase {
+
+ use MediaWikiCoversValidator;
+
/**
* @dataProvider provideDiapers
* @covers Wikimedia\Rdbms\DatabaseMysqlBase::addIdentifierQuotes
* with creating SQL text.
*/
class DatabaseSQLTest extends PHPUnit_Framework_TestCase {
+
+ use MediaWikiCoversValidator;
+
/** @var DatabaseTestHelper */
private $database;
}
public static function provideUnionConditionPermutations() {
+ // phpcs:disable Generic.Files.LineLength
return [
- // @codingStandardsIgnoreStart Generic.Files.LineLength.TooLong
[
[
'table' => [ 'table1', 'table2' ],
],
"SELECT foo_id FROM foo WHERE baz IS NULL ORDER BY foo_id LIMIT 150,25"
],
- // @codingStandardsIgnoreEnd
];
+ // phpcs:enable
}
/**
class DatabaseTest extends PHPUnit_Framework_TestCase {
+ use MediaWikiCoversValidator;
+
protected function setUp() {
$this->db = new DatabaseTestHelper( __CLASS__ . '::' . $this->getName() );
}
*/
class XMPTest extends PHPUnit_Framework_TestCase {
+ use MediaWikiCoversValidator;
+
protected function setUp() {
parent::setUp();
# Requires libxml to do XMP parsing
*/
class XMPValidateTest extends PHPUnit_Framework_TestCase {
+ use MediaWikiCoversValidator;
+
/**
* @dataProvider provideDates
* @covers XMPValidate::validateDate
* @covers ExifBitmapHandler::isMetadataValid
*/
public function testGoodMetadata() {
- // @codingStandardsIgnoreStart Ignore Generic.Files.LineLength.TooLong
+ // phpcs:ignore Generic.Files.LineLength
$meta = 'a:16:{s:10:"ImageWidth";i:20;s:11:"ImageLength";i:20;s:13:"BitsPerSample";a:3:{i:0;i:8;i:1;i:8;i:2;i:8;}s:11:"Compression";i:5;s:25:"PhotometricInterpretation";i:2;s:16:"ImageDescription";s:17:"Created with GIMP";s:12:"StripOffsets";i:8;s:11:"Orientation";i:1;s:15:"SamplesPerPixel";i:3;s:12:"RowsPerStrip";i:64;s:15:"StripByteCounts";i:238;s:11:"XResolution";s:19:"1207959552/16777216";s:11:"YResolution";s:19:"1207959552/16777216";s:19:"PlanarConfiguration";i:1;s:14:"ResolutionUnit";i:2;s:22:"MEDIAWIKI_EXIF_VERSION";i:2;}';
- // @codingStandardsIgnoreEnd
$res = $this->handler->isMetadataValid( null, $meta );
$this->assertEquals( ExifBitmapHandler::METADATA_GOOD, $res );
}
* @covers ExifBitmapHandler::isMetadataValid
*/
public function testIsOldGood() {
- // @codingStandardsIgnoreStart Ignore Generic.Files.LineLength.TooLong
+ // phpcs:ignore Generic.Files.LineLength
$meta = 'a:16:{s:10:"ImageWidth";i:20;s:11:"ImageLength";i:20;s:13:"BitsPerSample";a:3:{i:0;i:8;i:1;i:8;i:2;i:8;}s:11:"Compression";i:5;s:25:"PhotometricInterpretation";i:2;s:16:"ImageDescription";s:17:"Created with GIMP";s:12:"StripOffsets";i:8;s:11:"Orientation";i:1;s:15:"SamplesPerPixel";i:3;s:12:"RowsPerStrip";i:64;s:15:"StripByteCounts";i:238;s:11:"XResolution";s:19:"1207959552/16777216";s:11:"YResolution";s:19:"1207959552/16777216";s:19:"PlanarConfiguration";i:1;s:14:"ResolutionUnit";i:2;s:22:"MEDIAWIKI_EXIF_VERSION";i:1;}';
- // @codingStandardsIgnoreEnd
$res = $this->handler->isMetadataValid( null, $meta );
$this->assertEquals( ExifBitmapHandler::METADATA_COMPATIBLE, $res );
}
* @covers ExifBitmapHandler::isMetadataValid
*/
public function testPagedTiffHandledGracefully() {
- // @codingStandardsIgnoreStart Ignore Generic.Files.LineLength.TooLong
+ // phpcs:ignore Generic.Files.LineLength
$meta = 'a:6:{s:9:"page_data";a:1:{i:1;a:5:{s:5:"width";i:643;s:6:"height";i:448;s:5:"alpha";s:4:"true";s:4:"page";i:1;s:6:"pixels";i:288064;}}s:10:"page_count";i:1;s:10:"first_page";i:1;s:9:"last_page";i:1;s:4:"exif";a:9:{s:10:"ImageWidth";i:643;s:11:"ImageLength";i:448;s:11:"Compression";i:5;s:25:"PhotometricInterpretation";i:2;s:11:"Orientation";i:1;s:15:"SamplesPerPixel";i:4;s:12:"RowsPerStrip";i:50;s:19:"PlanarConfiguration";i:1;s:22:"MEDIAWIKI_EXIF_VERSION";i:1;}s:21:"TIFF_METADATA_VERSION";s:3:"1.4";}';
- // @codingStandardsIgnoreEnd
$res = $this->handler->isMetadataValid( null, $meta );
$this->assertEquals( ExifBitmapHandler::METADATA_BAD, $res );
}
}
public static function provideIsMetadataValid() {
+ // phpcs:disable Generic.Files.LineLength
return [
[ GIFHandler::BROKEN_FILE, GIFHandler::METADATA_GOOD ],
[ '', GIFHandler::METADATA_BAD ],
[ null, GIFHandler::METADATA_BAD ],
[ 'Something invalid!', GIFHandler::METADATA_BAD ],
- // @codingStandardsIgnoreStart Ignore Generic.Files.LineLength.TooLong
[
'a:4:{s:10:"frameCount";i:1;s:6:"looped";b:0;s:8:"duration";d:0.1000000000000000055511151231257827021181583404541015625;s:8:"metadata";a:2:{s:14:"GIFFileComment";a:1:{i:0;s:35:"GIF test file ⁕ Created with GIMP";}s:15:"_MW_GIF_VERSION";i:1;}}',
GIFHandler::METADATA_GOOD
],
- // @codingStandardsIgnoreEnd
];
+ // phpcs:enable
}
/**
}
public static function provideGetMetadata() {
+ // phpcs:disable Generic.Files.LineLength
return [
- // @codingStandardsIgnoreStart Ignore Generic.Files.LineLength.TooLong
[
'nonanimated.gif',
'a:4:{s:10:"frameCount";i:1;s:6:"looped";b:0;s:8:"duration";d:0.1000000000000000055511151231257827021181583404541015625;s:8:"metadata";a:2:{s:14:"GIFFileComment";a:1:{i:0;s:35:"GIF test file ⁕ Created with GIMP";}s:15:"_MW_GIF_VERSION";i:1;}}'
'animated-xmp.gif',
'a:4:{s:10:"frameCount";i:4;s:6:"looped";b:1;s:8:"duration";d:2.399999999999999911182158029987476766109466552734375;s:8:"metadata";a:5:{s:6:"Artist";s:7:"Bawolff";s:16:"ImageDescription";a:2:{s:9:"x-default";s:18:"A file to test GIF";s:5:"_type";s:4:"lang";}s:15:"SublocationDest";s:13:"The interwebs";s:14:"GIFFileComment";a:1:{i:0;s:16:"GIƒ·test·file";}s:15:"_MW_GIF_VERSION";i:1;}}'
],
- // @codingStandardsIgnoreEnd
];
+ // phpcs:enable
}
/**
public function testJpegMetadataExtraction() {
$file = $this->dataFile( 'test.jpg', 'image/jpeg' );
$res = $this->handler->getMetadata( $file, $this->filePath . 'test.jpg' );
- // @codingStandardsIgnoreStart Ignore Generic.Files.LineLength.TooLong
+ // phpcs:ignore Generic.Files.LineLength
$expected = 'a:7:{s:16:"ImageDescription";s:9:"Test file";s:11:"XResolution";s:4:"72/1";s:11:"YResolution";s:4:"72/1";s:14:"ResolutionUnit";i:2;s:16:"YCbCrPositioning";i:1;s:15:"JPEGFileComment";a:1:{i:0;s:17:"Created with GIMP";}s:22:"MEDIAWIKI_EXIF_VERSION";i:2;}';
- // @codingStandardsIgnoreEnd
// Unserialize in case serialization format ever changes.
$this->assertEquals( unserialize( $expected ), unserialize( $res ) );
}
public static function provideIsMetadataValid() {
+ // phpcs:disable Generic.Files.LineLength
return [
[ PNGHandler::BROKEN_FILE, PNGHandler::METADATA_GOOD ],
[ '', PNGHandler::METADATA_BAD ],
[ null, PNGHandler::METADATA_BAD ],
[ 'Something invalid!', PNGHandler::METADATA_BAD ],
- // @codingStandardsIgnoreStart Ignore Generic.Files.LineLength.TooLong
[
'a:6:{s:10:"frameCount";i:0;s:9:"loopCount";i:1;s:8:"duration";d:0;s:8:"bitDepth";i:8;s:9:"colorType";s:10:"truecolour";s:8:"metadata";a:1:{s:15:"_MW_PNG_VERSION";i:1;}}',
PNGHandler::METADATA_GOOD
],
- // @codingStandardsIgnoreEnd
];
+ // phpcs:enable
}
/**
}
public static function provideGetMetadata() {
+ // phpcs:disable Generic.Files.LineLength
return [
- // @codingStandardsIgnoreStart Ignore Generic.Files.LineLength.TooLong
[
'rgb-na-png.png',
'a:6:{s:10:"frameCount";i:0;s:9:"loopCount";i:1;s:8:"duration";d:0;s:8:"bitDepth";i:8;s:9:"colorType";s:10:"truecolour";s:8:"metadata";a:1:{s:15:"_MW_PNG_VERSION";i:1;}}'
'xmp.png',
'a:6:{s:10:"frameCount";i:0;s:9:"loopCount";i:1;s:8:"duration";d:0;s:8:"bitDepth";i:1;s:9:"colorType";s:14:"index-coloured";s:8:"metadata";a:2:{s:12:"SerialNumber";s:9:"123456789";s:15:"_MW_PNG_VERSION";i:1;}}'
],
- // @codingStandardsIgnoreEnd
];
+ // phpcs:enable
}
/**
public static function provideSvgFilesWithXMLMetadata() {
$base = __DIR__ . '/../../data/media';
- // @codingStandardsIgnoreStart Ignore Generic.Files.LineLength.TooLong
+ // phpcs:disable Generic.Files.LineLength
$metadata = '<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<ns4:Work xmlns:ns4="http://creativecommons.org/ns#" rdf:about="">
<ns5:format xmlns:ns5="http://purl.org/dc/elements/1.1/">image/svg+xml</ns5:format>
<ns5:type xmlns:ns5="http://purl.org/dc/elements/1.1/" rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
</ns4:Work>
</rdf:RDF>';
- // @codingStandardsIgnoreEnd
+ // phpcs:enable
$metadata = str_replace( "\r", '', $metadata ); // Windows compat
return [
public function testTiffMetadataExtraction() {
$res = $this->handler->getMetadata( null, $this->filePath . 'test.tiff' );
- // @codingStandardsIgnoreStart Ignore Generic.Files.LineLength.TooLong
+ // phpcs:ignore Generic.Files.LineLength
$expected = 'a:16:{s:10:"ImageWidth";i:20;s:11:"ImageLength";i:20;s:13:"BitsPerSample";a:3:{i:0;i:8;i:1;i:8;i:2;i:8;}s:11:"Compression";i:5;s:25:"PhotometricInterpretation";i:2;s:16:"ImageDescription";s:17:"Created with GIMP";s:12:"StripOffsets";i:8;s:11:"Orientation";i:1;s:15:"SamplesPerPixel";i:3;s:12:"RowsPerStrip";i:64;s:15:"StripByteCounts";i:238;s:11:"XResolution";s:19:"1207959552/16777216";s:11:"YResolution";s:19:"1207959552/16777216";s:19:"PlanarConfiguration";i:1;s:14:"ResolutionUnit";i:2;s:22:"MEDIAWIKI_EXIF_VERSION";i:2;}';
- // @codingStandardsIgnoreEnd
// Re-unserialize in case there are subtle differences between how versions
// of php serialize stuff.
$this->assertEquals( $expectedResult, WebPHandler::extractMetadata( $this->tempFileName ) );
}
public function provideTestExtractMetaData() {
- // @codingStandardsIgnoreStart Generic.Files.LineLength
+ // phpcs:disable Generic.Files.LineLength
return [
// Files from https://developers.google.com/speed/webp/gallery2
[ "\x52\x49\x46\x46\x90\x68\x01\x00\x57\x45\x42\x50\x56\x50\x38\x4C\x83\x68\x01\x00\x2F\x8F\x01\x4B\x10\x8D\x38\x6C\xDB\x46\x92\xE0\xE0\x82\x7B\x6C",
[ 'RIFF1234WEBPVP8 ', false ],
[ 'RIFF1234WEBPVP8L ', false ],
];
- // @codingStandardsIgnoreEnd
+ // phpcs:enable
}
/**
* @group BagOStuff
*/
class RedisBagOStuffTest extends PHPUnit_Framework_TestCase {
+
+ use MediaWikiCoversValidator;
+
/** @var RedisBagOStuff */
private $cache;
}
public function provideTestInsertProtectNullRevision() {
- // @codingStandardsIgnoreStart Generic.Files.LineLength
+ // phpcs:disable Generic.Files.LineLength
yield [
'goat-message-key',
[ 'edit' => 'sysop' ],
true,
'(goat-key: WikiPageDbTestBase::testInsertProtectNullRevision, UTSysop)(colon-separator)Goat Goat(word-separator)(parentheses: (protect-summary-desc: (restriction-edit), (protect-level-sysop), (protect-expiring: 04:04, 1 (january) 2020, 1 (january) 2020, 04:04))(word-separator)(protect-summary-desc: (restriction-move), (protect-level-something), (protect-expiring: 05:05, 1 (january) 2021, 1 (january) 2021, 05:05)))'
];
- // @codingStandardsIgnoreEnd Generic.Files.LineLength
+ // phpcs:enable
}
/**
* @todo covers tags
*/
class ParserIntegrationTest extends PHPUnit_Framework_TestCase {
+
+ use MediaWikiCoversValidator;
+
/** @var array */
private $ptTest;
}
public static function provideGetText() {
- // @codingStandardsIgnoreStart Generic.Files.LineLength
+ // phpcs:disable Generic.Files.LineLength
$text = <<<EOF
<p>Test document.
</p>
EOF
],
];
- // @codingStandardsIgnoreEnd
+ // phpcs:enable
}
}
}
public static function provideCases() {
- // @codingStandardsIgnoreStart Ignore Generic.Files.LineLength.TooLong
+ // phpcs:disable Generic.Files.LineLength
return self::addClassArg( [
[ "Foo", "<root>Foo</root>" ],
[ "<!-- Foo -->", "<root><comment><!-- Foo --></comment></root>" ],
[ "{{Foo|} Bar=}}", "<root><template><title>Foo</title><part><name>} Bar</name>=<value></value></part></template></root>" ],
/* [ file_get_contents( __DIR__ . '/QuoteQuran.txt' ], file_get_contents( __DIR__ . '/QuoteQuranExpanded.txt' ) ], */
] );
- // @codingStandardsIgnoreEnd
+ // phpcs:enable
}
/**
* These are more complex test cases taken out of wiki articles.
*/
public static function provideFiles() {
- // @codingStandardsIgnoreStart Ignore Generic.Files.LineLength.TooLong
+ // phpcs:disable Generic.Files.LineLength
return self::addClassArg( [
[ "QuoteQuran" ], # https://en.wikipedia.org/w/index.php?title=Template:QuoteQuran/sandbox&oldid=237348988 GFDL + CC BY-SA by Striver
[ "Factorial" ], # https://en.wikipedia.org/w/index.php?title=Template:Factorial&oldid=98548758 GFDL + CC BY-SA by Polonium
[ "Fundraising" ], # https://tl.wiktionary.org/w/index.php?title=MediaWiki:Sitenotice&oldid=5716 GFDL + CC BY-SA, copied there by Sky Harbor.
[ "NestedTemplates" ], # T29936
] );
- // @codingStandardsIgnoreEnd
+ // phpcs:enable
}
/**
* Tests from T30642 · https://phabricator.wikimedia.org/T30642
*/
public static function provideHeadings() {
- // @codingStandardsIgnoreStart Ignore Generic.Files.LineLength.TooLong
+ // phpcs:disable Generic.Files.LineLength
return self::addClassArg( [
/* These should become headings: */
[ "== h ==<!--c1-->", "<root><h level=\"2\" i=\"1\">== h ==<comment><!--c1--></comment></h></root>" ],
[ "== h ==<!--c1--> x <!--c2--><!--c3--> ", "<root>== h ==<comment><!--c1--></comment> x <comment><!--c2--></comment><comment><!--c3--></comment> </root>" ],
[ "== h ==<!--c1--><!--c2--><!--c3--> x ", "<root>== h ==<comment><!--c1--></comment><comment><!--c2--></comment><comment><!--c3--></comment> x </root>" ],
] );
- // @codingStandardsIgnoreEnd
+ // phpcs:enable
}
/**
}
public static function providePasswordTests() {
- // @codingStandardsIgnoreStart Generic.Files.LineLength
+ // phpcs:disable Generic.Files.LineLength
return [
// Tests from glibc bcrypt implementation
[ true, ':bcrypt:5$CCCCCCCCCCCCCCCCCCCCC.$E5YPO9kmyuRGyh0XouQYb4YMJKvyOeW', "U*U" ],
[ false, ':bcrypt:5$CCCCCCCCCCCCCCCCCCCCC.$E5YPO9kmyuRGyh0XouQYb4YMJKvyOeW', "UXU" ],
[ false, ':bcrypt:5$CCCCCCCCCCCCCCCCCCCCC.$E5YPO9kmyuRGyh0XouQYb4YMJKvyOeW', "" ],
];
- // @codingStandardsIgnoreEnd
+ // phpcs:enable
}
}
* @covers EncryptedPassword
* @covers ParameterizedPassword
* @covers Password
- * @codingStandardsIgnoreStart Generic.Files.LineLength
*/
class EncryptedPasswordTest extends PasswordTestCase {
protected function getTypeConfigs() {
}
public static function providePasswordTests() {
+ // phpcs:disable Generic.Files.LineLength
return [
// Encrypted with secret1
[ true, ':both:aes-256-cbc:0:izBpxujqC1YbzpCB3qAzgg==:ZqHnitT1pL4YJqKqFES2KEevZYSy2LtlibW5+IMi4XKOGKGy6sE638BXyBbLQQsBtTSrt+JyzwOayKtwIfRbaQsBridx/O1JwBSai1TkGkOsYMBXnlu2Bu/EquCBj5QpjYh7p3Uq4rpiop1KQlin1BJMwnAa1PovhxjpxnYhlhkM4X5ALoGi3XM0bapN48vt', 'password' ],
[ true, ':both:aes-256-cbc:1:m1LCnQVIakfYBNlr9KEgQg==:5yPTctqrzsybdgaMEag18AZYbnL37pAtXVBqmWxkjXbnNmiDH+1bHoL8lsEVTH/sJntC82kNVgE7zeiD8xUVLYF2VUnvB5+sU+aysE45/zwsCu7a22TaischMAOWrsHZ/tIgS/TnZY2d+HNyxgsEeeYf/QoL+FhmqHquK02+4SRbA5lLuj9niYy1r5CoM9cQ', 'password' ],
[ true, ':secret2:aes-256-cbc:0:m1LCnQVIakfYBNlr9KEgQg==:5yPTctqrzsybdgaMEag18AZYbnL37pAtXVBqmWxkjXbnNmiDH+1bHoL8lsEVTH/sJntC82kNVgE7zeiD8xUVLYF2VUnvB5+sU+aysE45/zwsCu7a22TaischMAOWrsHZ/tIgS/TnZY2d+HNyxgsEeeYf/QoL+FhmqHquK02+4SRbA5lLuj9niYy1r5CoM9cQ', 'password' ],
];
+ // phpcs:enable
}
/**
* @expectedException PasswordError
*/
public function testDecryptionError() {
+ // phpcs:ignore Generic.Files.LineLength
$hash = ':secret1:aes-256-cbc:0:m1LCnQVIakfYBNlr9KEgQg==:5yPTctqrzsybdgaMEag18AZYbnL37pAtXVBqmWxkjXbnNmiDH+1bHoL8lsEVTH/sJntC82kNVgE7zeiD8xUVLYF2VUnvB5+sU+aysE45/zwsCu7a22TaischMAOWrsHZ/tIgS/TnZY2d+HNyxgsEeeYf/QoL+FhmqHquK02+4SRbA5lLuj9niYy1r5CoM9cQ';
$password = $this->passwordFactory->newFromCiphertext( $hash );
$password->crypt( 'password' );
}
public function testUpdate() {
+ // phpcs:ignore Generic.Files.LineLength
$hash = ':both:aes-256-cbc:0:izBpxujqC1YbzpCB3qAzgg==:ZqHnitT1pL4YJqKqFES2KEevZYSy2LtlibW5+IMi4XKOGKGy6sE638BXyBbLQQsBtTSrt+JyzwOayKtwIfRbaQsBridx/O1JwBSai1TkGkOsYMBXnlu2Bu/EquCBj5QpjYh7p3Uq4rpiop1KQlin1BJMwnAa1PovhxjpxnYhlhkM4X5ALoGi3XM0bapN48vt';
$fromHash = $this->passwordFactory->newFromCiphertext( $hash );
$fromPlaintext = $this->passwordFactory->newFromPlaintext( 'password', $fromHash );
}
public static function providePasswordTests() {
- // @codingStandardsIgnoreStart Generic.Files.LineLength.TooLong
+ // phpcs:disable Generic.Files.LineLength
return [
[
true,
':testLargeLayeredTop:sha512:1024:512!sha512:1024:512!sha512:1024:512!sha512:1024:512!5!vnRy+2SrSA0fHt3dwhTP5g==!AVnwfZsAQjn+gULv7FSGjA==!xvHUX3WcpkeSn1lvjWcvBg==!It+OC/N9tu+d3ByHhuB0BQ==!Tb.gqUOiD.aWktVwHM.Q/O!7CcyMfXUPky5ptyATJsR2nq3vUqtnBC',
- 'testPassword123'
+ 'testPassword123'
],
];
- // @codingStandardsIgnoreEnd
+ // phpcs:enable
}
/**
* @covers VersionChecker
*/
class VersionCheckerTest extends PHPUnit_Framework_TestCase {
+
+ use MediaWikiCoversValidator;
+
/**
* @dataProvider provideCheck
*/
*/
class DerivativeResourceLoaderContextTest extends PHPUnit_Framework_TestCase {
+ use MediaWikiCoversValidator;
+
protected static function getContext() {
$request = new FauxRequest( [
'lang' => 'zh',
*/
class MessageBlobStoreTest extends PHPUnit_Framework_TestCase {
+ use MediaWikiCoversValidator;
+
protected function setUp() {
parent::setUp();
// MediaWiki tests defaults $wgMainWANCache to CACHE_NONE.
*/
class ResourceLoaderClientHtmlTest extends PHPUnit_Framework_TestCase {
+ use MediaWikiCoversValidator;
+
protected static function expandVariables( $text ) {
return strtr( $text, [
'{blankVer}' => ResourceLoaderTestCase::BLANK_VERSION
'test.exempt' => 'ready',
] );
- // @codingStandardsIgnoreStart Generic.Files.LineLength
+ // phpcs:disable Generic.Files.LineLength
$expected = '<script>document.documentElement.className = document.documentElement.className.replace( /(^|\s)client-nojs(\s|$)/, "$1client-js$2" );</script>' . "\n"
. '<script>(window.RLQ=window.RLQ||[]).push(function(){'
. 'mw.config.set({"key":"value"});'
. '<link rel="stylesheet" href="/w/load.php?debug=false&lang=nl&modules=test.styles.pure&only=styles&skin=fallback"/>' . "\n"
. '<style>.private{}</style>' . "\n"
. '<script async="" src="/w/load.php?debug=false&lang=nl&modules=startup&only=scripts&skin=fallback"></script>';
- // @codingStandardsIgnoreEnd
+ // phpcs:enable
$expected = self::expandVariables( $expected );
$this->assertEquals( $expected, $client->getHeadHtml() );
}
public static function provideMakeLoad() {
+ // phpcs:disable Generic.Files.LineLength
return [
- // @codingStandardsIgnoreStart Generic.Files.LineLength
[
'context' => [],
'modules' => [ 'test.unknown' ],
. '<style>.orderingC{}.orderingD{}</style>' . "\n"
. '<link rel="stylesheet" href="/w/load.php?debug=false&lang=nl&modules=test.ordering.e&only=styles&skin=fallback"/>'
],
- // @codingStandardsIgnoreEnd
];
+ // phpcs:enable
}
/**
* @covers ResourceLoaderContext
*/
class ResourceLoaderContextTest extends PHPUnit_Framework_TestCase {
+
+ use MediaWikiCoversValidator;
+
protected static function getResourceLoader() {
return new EmptyResourceLoader( new HashConfig( [
'ResourceLoaderDebug' => false,
*/
class ResourceLoaderSkinModuleTest extends PHPUnit_Framework_TestCase {
- // @codingStandardsIgnoreStart Ignore Generic.Files.LineLength.TooLong
+ use MediaWikiCoversValidator;
+
public static function provideGetStyles() {
+ // phpcs:disable Generic.Files.LineLength
return [
[
'parent' => [],
],
],
];
+ // phpcs:enable
}
- // @codingStandardsIgnoreEnd
/**
* @dataProvider provideGetStyles
--- /dev/null
+<?php
+use MediaWiki\Services\ServiceContainer;
+
+/**
+ * @covers MediaWiki\Services\ServiceContainer
+ *
+ * @group MediaWiki
+ */
+class ServiceContainerTest extends PHPUnit_Framework_TestCase {
+
+ use MediaWikiCoversValidator;
+
+ private function newServiceContainer( $extraArgs = [] ) {
+ return new ServiceContainer( $extraArgs );
+ }
+
+ public function testGetServiceNames() {
+ $services = $this->newServiceContainer();
+ $names = $services->getServiceNames();
+
+ $this->assertInternalType( 'array', $names );
+ $this->assertEmpty( $names );
+
+ $name = 'TestService92834576';
+ $services->defineService( $name, function () {
+ return null;
+ } );
+
+ $names = $services->getServiceNames();
+ $this->assertContains( $name, $names );
+ }
+
+ public function testHasService() {
+ $services = $this->newServiceContainer();
+
+ $name = 'TestService92834576';
+ $this->assertFalse( $services->hasService( $name ) );
+
+ $services->defineService( $name, function () {
+ return null;
+ } );
+
+ $this->assertTrue( $services->hasService( $name ) );
+ }
+
+ public function testGetService() {
+ $services = $this->newServiceContainer( [ 'Foo' ] );
+
+ $theService = new stdClass();
+ $name = 'TestService92834576';
+ $count = 0;
+
+ $services->defineService(
+ $name,
+ function ( $actualLocator, $extra ) use ( $services, $theService, &$count ) {
+ $count++;
+ PHPUnit_Framework_Assert::assertSame( $services, $actualLocator );
+ PHPUnit_Framework_Assert::assertSame( $extra, 'Foo' );
+ return $theService;
+ }
+ );
+
+ $this->assertSame( $theService, $services->getService( $name ) );
+
+ $services->getService( $name );
+ $this->assertSame( 1, $count, 'instantiator should be called exactly once!' );
+ }
+
+ public function testGetService_fail_unknown() {
+ $services = $this->newServiceContainer();
+
+ $name = 'TestService92834576';
+
+ $this->setExpectedException( 'MediaWiki\Services\NoSuchServiceException' );
+
+ $services->getService( $name );
+ }
+
+ public function testPeekService() {
+ $services = $this->newServiceContainer();
+
+ $services->defineService(
+ 'Foo',
+ function () {
+ return new stdClass();
+ }
+ );
+
+ $services->defineService(
+ 'Bar',
+ function () {
+ return new stdClass();
+ }
+ );
+
+ // trigger instantiation of Foo
+ $services->getService( 'Foo' );
+
+ $this->assertInternalType(
+ 'object',
+ $services->peekService( 'Foo' ),
+ 'Peek should return the service object if it had been accessed before.'
+ );
+
+ $this->assertNull(
+ $services->peekService( 'Bar' ),
+ 'Peek should return null if the service was never accessed.'
+ );
+ }
+
+ public function testPeekService_fail_unknown() {
+ $services = $this->newServiceContainer();
+
+ $name = 'TestService92834576';
+
+ $this->setExpectedException( 'MediaWiki\Services\NoSuchServiceException' );
+
+ $services->peekService( $name );
+ }
+
+ public function testDefineService() {
+ $services = $this->newServiceContainer();
+
+ $theService = new stdClass();
+ $name = 'TestService92834576';
+
+ $services->defineService( $name, function ( $actualLocator ) use ( $services, $theService ) {
+ PHPUnit_Framework_Assert::assertSame( $services, $actualLocator );
+ return $theService;
+ } );
+
+ $this->assertTrue( $services->hasService( $name ) );
+ $this->assertSame( $theService, $services->getService( $name ) );
+ }
+
+ public function testDefineService_fail_duplicate() {
+ $services = $this->newServiceContainer();
+
+ $theService = new stdClass();
+ $name = 'TestService92834576';
+
+ $services->defineService( $name, function () use ( $theService ) {
+ return $theService;
+ } );
+
+ $this->setExpectedException( 'MediaWiki\Services\ServiceAlreadyDefinedException' );
+
+ $services->defineService( $name, function () use ( $theService ) {
+ return $theService;
+ } );
+ }
+
+ public function testApplyWiring() {
+ $services = $this->newServiceContainer();
+
+ $wiring = [
+ 'Foo' => function () {
+ return 'Foo!';
+ },
+ 'Bar' => function () {
+ return 'Bar!';
+ },
+ ];
+
+ $services->applyWiring( $wiring );
+
+ $this->assertSame( 'Foo!', $services->getService( 'Foo' ) );
+ $this->assertSame( 'Bar!', $services->getService( 'Bar' ) );
+ }
+
+ public function testImportWiring() {
+ $services = $this->newServiceContainer();
+
+ $wiring = [
+ 'Foo' => function () {
+ return 'Foo!';
+ },
+ 'Bar' => function () {
+ return 'Bar!';
+ },
+ 'Car' => function () {
+ return 'FUBAR!';
+ },
+ ];
+
+ $services->applyWiring( $wiring );
+
+ $newServices = $this->newServiceContainer();
+
+ // define a service before importing, so we can later check that
+ // existing service instances survive importWiring()
+ $newServices->defineService( 'Car', function () {
+ return 'Car!';
+ } );
+
+ // force instantiation
+ $newServices->getService( 'Car' );
+
+ // Define another service, so we can later check that extra wiring
+ // is not lost.
+ $newServices->defineService( 'Xar', function () {
+ return 'Xar!';
+ } );
+
+ // import wiring, but skip `Bar`
+ $newServices->importWiring( $services, [ 'Bar' ] );
+
+ $this->assertNotContains( 'Bar', $newServices->getServiceNames(), 'Skip `Bar` service' );
+ $this->assertSame( 'Foo!', $newServices->getService( 'Foo' ) );
+
+ // import all wiring, but preserve existing service instance
+ $newServices->importWiring( $services );
+
+ $this->assertContains( 'Bar', $newServices->getServiceNames(), 'Import all services' );
+ $this->assertSame( 'Bar!', $newServices->getService( 'Bar' ) );
+ $this->assertSame( 'Car!', $newServices->getService( 'Car' ), 'Use existing service instance' );
+ $this->assertSame( 'Xar!', $newServices->getService( 'Xar' ), 'Predefined services are kept' );
+ }
+
+ public function testLoadWiringFiles() {
+ $services = $this->newServiceContainer();
+
+ $wiringFiles = [
+ __DIR__ . '/TestWiring1.php',
+ __DIR__ . '/TestWiring2.php',
+ ];
+
+ $services->loadWiringFiles( $wiringFiles );
+
+ $this->assertSame( 'Foo!', $services->getService( 'Foo' ) );
+ $this->assertSame( 'Bar!', $services->getService( 'Bar' ) );
+ }
+
+ public function testLoadWiringFiles_fail_duplicate() {
+ $services = $this->newServiceContainer();
+
+ $wiringFiles = [
+ __DIR__ . '/TestWiring1.php',
+ __DIR__ . '/./TestWiring1.php',
+ ];
+
+ // loading the same file twice should fail, because
+ $this->setExpectedException( 'MediaWiki\Services\ServiceAlreadyDefinedException' );
+
+ $services->loadWiringFiles( $wiringFiles );
+ }
+
+ public function testRedefineService() {
+ $services = $this->newServiceContainer( [ 'Foo' ] );
+
+ $theService1 = new stdClass();
+ $name = 'TestService92834576';
+
+ $services->defineService( $name, function () {
+ PHPUnit_Framework_Assert::fail(
+ 'The original instantiator function should not get called'
+ );
+ } );
+
+ // redefine before instantiation
+ $services->redefineService(
+ $name,
+ function ( $actualLocator, $extra ) use ( $services, $theService1 ) {
+ PHPUnit_Framework_Assert::assertSame( $services, $actualLocator );
+ PHPUnit_Framework_Assert::assertSame( 'Foo', $extra );
+ return $theService1;
+ }
+ );
+
+ // force instantiation, check result
+ $this->assertSame( $theService1, $services->getService( $name ) );
+ }
+
+ public function testRedefineService_disabled() {
+ $services = $this->newServiceContainer( [ 'Foo' ] );
+
+ $theService1 = new stdClass();
+ $name = 'TestService92834576';
+
+ $services->defineService( $name, function () {
+ return 'Foo';
+ } );
+
+ // disable the service. we should be able to redefine it anyway.
+ $services->disableService( $name );
+
+ $services->redefineService( $name, function () use ( $theService1 ) {
+ return $theService1;
+ } );
+
+ // force instantiation, check result
+ $this->assertSame( $theService1, $services->getService( $name ) );
+ }
+
+ public function testRedefineService_fail_undefined() {
+ $services = $this->newServiceContainer();
+
+ $theService = new stdClass();
+ $name = 'TestService92834576';
+
+ $this->setExpectedException( 'MediaWiki\Services\NoSuchServiceException' );
+
+ $services->redefineService( $name, function () use ( $theService ) {
+ return $theService;
+ } );
+ }
+
+ public function testRedefineService_fail_in_use() {
+ $services = $this->newServiceContainer( [ 'Foo' ] );
+
+ $theService = new stdClass();
+ $name = 'TestService92834576';
+
+ $services->defineService( $name, function () {
+ return 'Foo';
+ } );
+
+ // create the service, so it can no longer be redefined
+ $services->getService( $name );
+
+ $this->setExpectedException( 'MediaWiki\Services\CannotReplaceActiveServiceException' );
+
+ $services->redefineService( $name, function () use ( $theService ) {
+ return $theService;
+ } );
+ }
+
+ public function testDisableService() {
+ $services = $this->newServiceContainer( [ 'Foo' ] );
+
+ $destructible = $this->getMockBuilder( 'MediaWiki\Services\DestructibleService' )
+ ->getMock();
+ $destructible->expects( $this->once() )
+ ->method( 'destroy' );
+
+ $services->defineService( 'Foo', function () use ( $destructible ) {
+ return $destructible;
+ } );
+ $services->defineService( 'Bar', function () {
+ return new stdClass();
+ } );
+ $services->defineService( 'Qux', function () {
+ return new stdClass();
+ } );
+
+ // instantiate Foo and Bar services
+ $services->getService( 'Foo' );
+ $services->getService( 'Bar' );
+
+ // disable service, should call destroy() once.
+ $services->disableService( 'Foo' );
+
+ // disabled service should still be listed
+ $this->assertContains( 'Foo', $services->getServiceNames() );
+
+ // getting other services should still work
+ $services->getService( 'Bar' );
+
+ // disable non-destructible service, and not-yet-instantiated service
+ $services->disableService( 'Bar' );
+ $services->disableService( 'Qux' );
+
+ $this->assertNull( $services->peekService( 'Bar' ) );
+ $this->assertNull( $services->peekService( 'Qux' ) );
+
+ // disabled service should still be listed
+ $this->assertContains( 'Bar', $services->getServiceNames() );
+ $this->assertContains( 'Qux', $services->getServiceNames() );
+
+ $this->setExpectedException( 'MediaWiki\Services\ServiceDisabledException' );
+ $services->getService( 'Qux' );
+ }
+
+ public function testDisableService_fail_undefined() {
+ $services = $this->newServiceContainer();
+
+ $theService = new stdClass();
+ $name = 'TestService92834576';
+
+ $this->setExpectedException( 'MediaWiki\Services\NoSuchServiceException' );
+
+ $services->redefineService( $name, function () use ( $theService ) {
+ return $theService;
+ } );
+ }
+
+ public function testDestroy() {
+ $services = $this->newServiceContainer();
+
+ $destructible = $this->getMockBuilder( 'MediaWiki\Services\DestructibleService' )
+ ->getMock();
+ $destructible->expects( $this->once() )
+ ->method( 'destroy' );
+
+ $services->defineService( 'Foo', function () use ( $destructible ) {
+ return $destructible;
+ } );
+
+ $services->defineService( 'Bar', function () {
+ return new stdClass();
+ } );
+
+ // create the service
+ $services->getService( 'Foo' );
+
+ // destroy the container
+ $services->destroy();
+
+ $this->setExpectedException( 'MediaWiki\Services\ContainerDisabledException' );
+ $services->getService( 'Bar' );
+ }
+
+}
--- /dev/null
+<?php
+/**
+ * Test file for testing ServiceContainer::loadWiringFiles
+ */
+
+return [
+ 'Foo' => function () {
+ return 'Foo!';
+ },
+];
--- /dev/null
+<?php
+/**
+ * Test file for testing ServiceContainer::loadWiringFiles
+ */
+
+return [
+ 'Bar' => function () {
+ return 'Bar!';
+ },
+];
* @group Shell
*/
class CommandFactoryTest extends PHPUnit_Framework_TestCase {
+
+ use MediaWikiCoversValidator;
+
/**
* @covers MediaWiki\Shell\CommandFactory::create
*/
* @group Shell
*/
class CommandTest extends PHPUnit_Framework_TestCase {
+
+ use MediaWikiCoversValidator;
+
private function requirePosix() {
if ( wfIsWindows() ) {
$this->markTestSkipped( 'This test requires a POSIX environment.' );
use Wikimedia\TestingAccessWrapper;
class FirejailCommandTest extends PHPUnit_Framework_TestCase {
+
+ use MediaWikiCoversValidator;
+
public function provideBuildFinalCommand() {
global $IP;
- // @codingStandardsIgnoreStart
+ // phpcs:ignore Generic.Files.LineLength
$env = "'MW_INCLUDE_STDERR=;MW_CPU_LIMIT=180; MW_CGROUP='\'''\''; MW_MEM_LIMIT=307200; MW_FILE_SIZE_LIMIT=102400; MW_WALL_CLOCK_LIMIT=180; MW_USE_LOG_PIPE=yes'";
- // @codingStandardsIgnoreEnd
$limit = "/bin/bash '$IP/includes/shell/limit.sh'";
$profile = "--profile=$IP/includes/shell/firejail.profile";
$blacklist = '--blacklist=' . realpath( MW_CONFIG_FILE );
* @group Shell
*/
class ShellTest extends PHPUnit_Framework_TestCase {
+
+ use MediaWikiCoversValidator;
+
public function testIsDisabled() {
$this->assertInternalType( 'bool', Shell::isDisabled() ); // sanity
}
$site = $store->getSite( 'ertrywuutr' );
$this->assertInstanceOf( 'Site', $site );
$this->assertEquals( 'en', $site->getLanguageCode() );
- $this->assertTrue( is_integer( $site->getInternalId() ) );
+ $this->assertTrue( is_int( $site->getInternalId() ) );
$this->assertTrue( $site->getInternalId() >= 0 );
$site = $store->getSite( 'sdfhxujgkfpth' );
$this->assertInstanceOf( 'Site', $site );
$this->assertEquals( 'nl', $site->getLanguageCode() );
- $this->assertTrue( is_integer( $site->getInternalId() ) );
+ $this->assertTrue( is_int( $site->getInternalId() ) );
$this->assertTrue( $site->getInternalId() >= 0 );
}
*/
class FileBasedSiteLookupTest extends PHPUnit_Framework_TestCase {
+ use MediaWikiCoversValidator;
+
protected function setUp() {
$this->cacheFile = $this->getCacheFile();
}
*/
class MediaWikiPageNameNormalizerTest extends PHPUnit_Framework_TestCase {
+ use MediaWikiCoversValidator;
+
/**
* @dataProvider normalizePageTitleProvider
*/
*/
class SiteExporterTest extends PHPUnit_Framework_TestCase {
+ use MediaWikiCoversValidator;
+
public function testConstructor_InvalidArgument() {
$this->setExpectedException( 'InvalidArgumentException' );
*/
class SiteImporterTest extends PHPUnit_Framework_TestCase {
+ use MediaWikiCoversValidator;
+
private function newSiteImporter( array $expectedSites, $errorCount ) {
$store = $this->getMockBuilder( 'SiteStore' )->getMock();
* @var Site $site
*/
foreach ( $sites as $site ) {
- if ( is_integer( $site->getInternalId() ) ) {
+ if ( is_int( $site->getInternalId() ) ) {
$this->assertEquals( $site, $sites->getSiteByInternalId( $site->getInternalId() ) );
}
}
* @var Site $site
*/
foreach ( $sites as $site ) {
- if ( is_integer( $site->getInternalId() ) ) {
+ if ( is_int( $site->getInternalId() ) ) {
$this->assertTrue( $site, $sites->hasInternalId( $site->getInternalId() ) );
}
}
*/
class SitesCacheFileBuilderTest extends PHPUnit_Framework_TestCase {
+ use MediaWikiCoversValidator;
+
protected function setUp() {
$this->cacheFile = $this->getCacheFile();
}
'a<small><i><div>d</div></i>e</small>',
'<p>a</p><small><i><div>d</div></i></small><p><small>e</small></p>'
],
+ // phpcs:disable Generic.Files.LineLength
[
'Complex pwrap test 6',
'<i>a<div>b</div>c<b>d<div>e</div>f</b>g</i>',
- // @codingStandardsIgnoreStart Generic.Files.LineLength.TooLong
// PHP 5 does not allow concatenation in initialisation of a class static variable
'<p><i>a</i></p><i><div>b</div></i><p><i>c<b>d</b></i></p><i><b><div>e</div></b></i><p><i><b>f</b>g</i></p>'
- // @codingStandardsIgnoreEnd
],
+ // phpcs:enable
/* FIXME the second <b> causes a stack split which clones the <i> even
* though no <p> is actually generated
[
}
public static function provideCheckSvgScriptCallback() {
- // @codingStandardsIgnoreStart Generic.Files.LineLength
+ // phpcs:disable Generic.Files.LineLength
return [
// html5sec SVG vectors
[
'DTD with aliased entities apos (Should be allowed)'
]
];
- // @codingStandardsIgnoreEnd
+ // phpcs:enable
}
/**
* @covers AvroValidator
*/
class AvroValidatorTest extends PHPUnit_Framework_TestCase {
+
+ use MediaWikiCoversValidator;
+
public function setUp() {
if ( !class_exists( 'AvroSchema' ) ) {
$this->markTestSkipped( 'Avro is required to run the AvroValidatorTest' );
*/
class ClassCollectorTest extends PHPUnit_Framework_TestCase {
+ use MediaWikiCoversValidator;
+
public static function provideCases() {
return [
[
*/
class FileContentsHasherTest extends PHPUnit_Framework_TestCase {
+ use MediaWikiCoversValidator;
+
public function provideSingleFile() {
return array_map( function ( $file ) {
return [ $file, file_get_contents( $file ) ];
* Test vectors from Appendix A on https://tools.ietf.org/html/rfc5869
*/
public static function providerRfc5869() {
- // @codingStandardsIgnoreStart Generic.Files.LineLength
+ // phpcs:disable Generic.Files.LineLength
return [
// A.1
[
'0bd770a74d1160f7c9f12cd5912a06ebff6adcae899d92191fe4305673ba2ffe8fa3f1a4e5ad79f3f334b3b202b2173c486ea37ce3d397ed034c7f9dfeb15c5e927336d0441f4c4300e2cff0d0900b52d3b4' // okm
],
];
- // @codingStandardsIgnoreEnd
+ // phpcs:enable
}
}
*/
class MWCryptHashTest extends PHPUnit_Framework_TestCase {
+ use MediaWikiCoversValidator;
+
public function testHashLength() {
if ( MWCryptHash::hashAlgo() !== 'whirlpool' ) {
$this->markTestSkipped( 'Hash algorithm isn\'t whirlpool' );
}
$data = 'foobar';
- // @codingStandardsIgnoreStart Generic.Files.LineLength
+ // phpcs:ignore Generic.Files.LineLength
$hash = '9923afaec3a86f865bb231a588f453f84e8151a2deb4109aebc6de4284be5bebcff4fab82a7e51d920237340a043736e9d13bab196006dcca0fe65314d68eab9';
- // @codingStandardsIgnoreEnd
$this->assertEquals(
hex2bin( $hash ),
$data = 'foobar';
$key = 'secret';
- // @codingStandardsIgnoreStart Generic.Files.LineLength
+ // phpcs:ignore Generic.Files.LineLength
$hash = 'ddc94177b2020e55ce2049199fd9cc6327f416ff6dc621cc34cb43d9bec61d73372b4790c0e24957f565ecaf2d42821e6303619093e99cbe14a3b9250bda5f81';
- // @codingStandardsIgnoreEnd
$this->assertEquals(
hex2bin( $hash ),
<?php
class MWRestrictionsTest extends PHPUnit_Framework_TestCase {
+ use MediaWikiCoversValidator;
+
protected static $restrictionsForChecks;
public static function setUpBeforeClass() {
class UIDGeneratorTest extends PHPUnit_Framework_TestCase {
+ use MediaWikiCoversValidator;
+
protected function tearDown() {
// Bug: 44850
UIDGenerator::unitTestTearDown();
* NOTE: this test is more like an integration test than a unit test
*/
class ZipDirectoryReaderTest extends PHPUnit_Framework_TestCase {
+
+ use MediaWikiCoversValidator;
+
protected $zipDir;
protected $entries;
*/
class WatchedItemQueryServiceUnitTest extends PHPUnit_Framework_TestCase {
+ use MediaWikiCoversValidator;
+
/**
* @return PHPUnit_Framework_MockObject_MockObject|Database
*/
*/
class LanguageCodeTest extends PHPUnit_Framework_TestCase {
+ use MediaWikiCoversValidator;
+
public function testConstructor() {
$instance = new LanguageCode();
}
public static function provideCheckTitleEncodingData() {
- // @codingStandardsIgnoreStart Ignore Generic.Files.LineLength.TooLong
+ // phpcs:disable Generic.Files.LineLength
return [
[ "" ],
[ "United States of America" ], // 7bit ASCII
)
]
];
- // @codingStandardsIgnoreEnd
+ // phpcs:enable
}
/**
<?php
-// @codingStandardsIgnoreStart Ignore Squiz.Classes.ValidClassName.NotCamelCaps
+// phpcs:disable Squiz.Classes.ValidClassName.NotCamelCaps
/**
* @covers LanguageBe_tarask
*/
class LanguageBe_taraskTest extends LanguageClassesTestCase {
- // @codingStandardsIgnoreEnd
+ // phpcs:enable
/**
* Make sure the language code we are given is indeed
* be-tarask. This is to ensure LanguageClassesTestCase
}
/**
- * @covers LanguagePl::commafy()
+ * @covers Language::commafy()
* @dataProvider provideCommafyData
*/
public function testCommafy( $number, $numbersWithCommas ) {
* @file
*/
-/**
- * @covers LanguageRu
- */
class LanguageRuTest extends LanguageClassesTestCase {
/**
* @dataProvider providePlural
* @file
*/
-/**
- * @covers LanguageUk
- */
class LanguageUkTest extends LanguageClassesTestCase {
/**
* @dataProvider providePlural
* @covers Benchmarker
*/
class BenchmarkerTest extends PHPUnit_Framework_TestCase {
+
+ use MediaWikiCoversValidator;
+
public function testBenchSimple() {
$bench = $this->getMockBuilder( Benchmarker::class )
->setMethods( [ 'execute', 'output' ] )
$fname = $this->getNewTempFile();
// The header of every prefetch file
- // @codingStandardsIgnoreStart Ignore Generic.Files.LineLength.TooLong
+ // phpcs:ignore Generic.Files.LineLength
$header = '<mediawiki xmlns="http://www.mediawiki.org/xml/export-0.7/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mediawiki.org/xml/export-0.7/ http://www.mediawiki.org/xml/export-0.7.xsd" version="0.7" xml:lang="en">
<siteinfo>
<sitename>wikisvn</sitename>
</namespaces>
</siteinfo>
';
- // @codingStandardsIgnoreEnd
// An array holding the pages that are available for prefetch
$available_pages = [];
*/
class AvailableRightsTest extends PHPUnit_Framework_TestCase {
+ use MediaWikiCoversValidator;
+
/**
* Returns all rights that should be in $wgAvailableRights + all rights
* registered via the 'UserGetAllRights' hook + all "core" rights.
*/
class ExtensionJsonValidationTest extends PHPUnit_Framework_TestCase {
+ use MediaWikiCoversValidator;
+
/**
* @var ExtensionJsonValidator
*/